From b43764b54ee1d291a69dc6ebe0787b8ef3e19beb Mon Sep 17 00:00:00 2001 From: Howard Kelly Date: Mon, 11 Jan 2016 13:49:52 +0000 Subject: [PATCH 001/149] Update 01-Learn To Debug.md --- 1-Beginner/Personal-Skills/01-Learn To Debug.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/1-Beginner/Personal-Skills/01-Learn To Debug.md index 2f679ba..6cd0ca8 100644 --- a/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -2,9 +2,9 @@ Debugging is the cornerstone of being a programmer. The first meaning of the verb to debug is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. -Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, your are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code the slightest bump will throw you permanently. Often this visibility can only be gained by experimentation, that is, debugging. +Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. -Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct, or some condition arises that you did not anticipate. Sometimes the magic trick of staring into the source code works. When it doesn't, you must debug. +Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. To get visibility into the execution of a program you must be able to execute the code and observe something about it. Sometimes this is visible, like what is being displayed on a screen, or the delay between two events. In many other cases, it involves things that are not meant to be visible, like the state of some variables inside the code, which lines of code are actually being executed, or whether certain assertions hold across a complicated data structure. These hidden things must be revealed. @@ -16,6 +16,6 @@ The common ways of looking into the ‘innards’ of an executing program can be Debugging tools are wonderful when they are stable and available, but the printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. -Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it, and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. +Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. -Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) \ No newline at end of file +Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) From 2d947fd10b00d3b5c3dd9a75e15612e0c37bc309 Mon Sep 17 00:00:00 2001 From: Joseph Plant Date: Tue, 12 Jan 2016 15:38:41 +1000 Subject: [PATCH 002/149] Fix License Link --- 6-History.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/6-History.md b/6-History.md index 9941054..0e09a87 100644 --- a/6-History.md +++ b/6-History.md @@ -44,4 +44,4 @@ Robert L. Read lives in Austin, Texas, with his wife and two children. He is cur Rob received a PhD from the University of Texas at Austin in 1995 in Computer Science related to database theory. In 1987 he received a BA in Computer Science from Rice University. He has been a paid programmer since the age of 16. -Next [License](LICENSE) \ No newline at end of file +Next [License](LICENSE.md) From 2e1c869be1af80ad8cc26d42dc08e7bb8d49d179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Wed, 13 Jan 2016 15:23:18 +0100 Subject: [PATCH 003/149] Add GitBook .gitignore --- .gitignore | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4cb12d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Node rules: +## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +## Dependency directory +## Commenting this out is preferred by some people, see +## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git +node_modules + +# Book build output +_book + +# eBook build output +*.epub +*.mobi +*.pdf From a6a0c6c96719e14e867ebd7a1c87ee861b24eaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Wed, 13 Jan 2016 15:23:30 +0100 Subject: [PATCH 004/149] Basic SUMMARY.md for GitBook --- SUMMARY.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 SUMMARY.md diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..0637a07 --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,81 @@ +# Summary + +* [Beginner](1-Beginner/README.md) + * Personal Skills + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + * Team Skills + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +* [Intermediate](2-Intermediate/README.md) + * Personal Skills + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + * Team Skills + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + * Judgment + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +* [Advanced](3-Advanced/README.md) + * Technological Judgment + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + * Compromising Wisely + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + * Serving Your Team + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +* [Glossary](4-Glossary.md) +* [Appendix A * Bibliography/Websiteography](5-Bibliography.md) +* [Appendix B * History (As of January 2016)](6-History.md) +* [Appendix C * Contributions (As of January 2016)](7-Contributions.md) From a95dd7dc21d3af491460c87ba9a9c02d600c60fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Wed, 13 Jan 2016 15:28:23 +0100 Subject: [PATCH 005/149] Use GitBook convention for summary --- 4-Glossary.md | 110 -------------------------------------- GLOSSARY.md | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 4 +- SUMMARY.md | 1 - 4 files changed, 145 insertions(+), 113 deletions(-) delete mode 100644 4-Glossary.md create mode 100644 GLOSSARY.md diff --git a/4-Glossary.md b/4-Glossary.md deleted file mode 100644 index df65d72..0000000 --- a/4-Glossary.md +++ /dev/null @@ -1,110 +0,0 @@ -# Glossary - -This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it. - -**unk-unk** -: Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule. - -**boss** -: The person or entity that gives you tasks. In some cases this may be the public at large. - -**printlining** -: The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging. - -**logging** -: The practice of writing a program so that it can produce a configurable output log describing its execution. - -**divide and conquer** -: A technique of top-down design and, importantly, of debugging that is the subdivision of a problem or a mystery into progressively smaller problems or mysteries. - -**vapour** -: Illusionary and often deceptive promises of software that is not yet for sale and, as often as not, will never materialize into anything solid. - -**boss** -: The person who sets your tasks. In some cases, the user is the boss. - -**tribe** -: The people with whom you share loyalty to a common goal. - -**low-hanging fruit** -: Big improvements that cost little. - -**Entrepreneur** -:The initiator of projects. - -**garbage** -: Objects that are no longer needed that hold memory. - -**business** -: A group of people organized for making money. - -**company** -: A group of people organized for making money. - -**tribe** -: A group of people you share cultural affinity and loyalty with. - -**scroll blindness** -: The effect of being unable to find information you need because it is buried in too much other, less interesting information. - -**wall-clock** -: Actually time as measured by a clock on a wall, as opposed to CPU time. - -**bottleneck** -: The most important limitation in the performance of a system. A constriction that limits performance. - -**master** -: A unique piece of information from which all cached copies are derived that serves as the official definition of that data. - -**heap allocated** -: Memory can be said to be heap allocated whenever the mechanism for freeing it is complicated. - -**garbage** -: Allocated memory that no longer has any useful meaning. - -**garbage collector** -: A system for recycling garbage. - -**memory leak** -: The unwanted collection of references to objects that prevents garbage collection (or a bug in the garbage collector or memory management system!) that causes the program to gradually increase its memory demands over time. - -**Extreme Programming** -: A style of programming emphasizing communication with the customer and automated testing. - -**hitting the wall** -: To run out of a specific resource causing performance to degrade sharply rather than gradually. - -**speculative programming** -: Producing a feature before it is really known if that feature will be useful. - -**information hiding** -: A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible. - -**object-oriented programming** -: An programming style emphasizing the the management of state inside objects. - -**communication languages** -: A language designed primarily for standardization rather than execution. - -**boxes and arrows** -: A loose, informal style of making diagrams consisting of boxes and arrows drawn between those boxes to show the relationships. This contrast with formal diagram methodologies, such as UML. - -**lingua franca** -: A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time. - -**buy vs. build** -: An adjective describing a choice between spending money for software or writing it your self. - -**mere work** -: Work that requires little creativity and entails little risk. Mere work can be estimated easily. - -**programming notation** -: A synonym for programming language that emphasizes the mathematical nature of programming language and their relative simplicity compared to natural languages. - -**strawman** -: A document meant to be the starting point of a technical discussion. A strawman may lead to a stickman, tinman, woodman, ironman, etc. - -**white-paper** -: An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. - -Next [Bibliography/Websiteography](5-Bibliography.md) \ No newline at end of file diff --git a/GLOSSARY.md b/GLOSSARY.md new file mode 100644 index 0000000..5cd3af0 --- /dev/null +++ b/GLOSSARY.md @@ -0,0 +1,143 @@ +# Glossary + +This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it. + +### unk-unk + +Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule. + +### boss + +The person or entity that gives you tasks. In some cases this may be the public at large. + +### printlining + +The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging. + +### logging + +The practice of writing a program so that it can produce a configurable output log describing its execution. + +### divide and conquer + +A technique of top-down design and, importantly, of debugging that is the subdivision of a problem or a mystery into progressively smaller problems or mysteries. + +### vapour + +Illusionary and often deceptive promises of software that is not yet for sale and, as often as not, will never materialize into anything solid. + +### boss + +The person who sets your tasks. In some cases, the user is the boss. + +### tribe + +The people with whom you share loyalty to a common goal. + +### low-hanging fruit + +Big improvements that cost little. + +### Entrepreneur +:The initiator of projects. + +### garbage + +Objects that are no longer needed that hold memory. + +### business + +A group of people organized for making money. + +### company + +A group of people organized for making money. + +### tribe + +A group of people you share cultural affinity and loyalty with. + +### scroll blindness + +The effect of being unable to find information you need because it is buried in too much other, less interesting information. + +### wall-clock + +Actually time as measured by a clock on a wall, as opposed to CPU time. + +### bottleneck + +The most important limitation in the performance of a system. A constriction that limits performance. + +### master + +A unique piece of information from which all cached copies are derived that serves as the official definition of that data. + +### heap allocated + +Memory can be said to be heap allocated whenever the mechanism for freeing it is complicated. + +### garbage + +Allocated memory that no longer has any useful meaning. + +### garbage collector + +A system for recycling garbage. + +### memory leak + +The unwanted collection of references to objects that prevents garbage collection (or a bug in the garbage collector or memory management system!) that causes the program to gradually increase its memory demands over time. + +### Extreme Programming + +A style of programming emphasizing communication with the customer and automated testing. + +### hitting the wall + +To run out of a specific resource causing performance to degrade sharply rather than gradually. + +### speculative programming + +Producing a feature before it is really known if that feature will be useful. + +### information hiding + +A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible. + +### object-oriented programming + +An programming style emphasizing the the management of state inside objects. + +### communication languages + +A language designed primarily for standardization rather than execution. + +### boxes and arrows + +A loose, informal style of making diagrams consisting of boxes and arrows drawn between those boxes to show the relationships. This contrast with formal diagram methodologies, such as UML. + +### lingua franca + +A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time. + +### buy vs. build + +An adjective describing a choice between spending money for software or writing it your self. + +### mere work + +Work that requires little creativity and entails little risk. Mere work can be estimated easily. + +### programming notation + +A synonym for programming language that emphasizes the mathematical nature of programming language and their relative simplicity compared to natural languages. + +### strawman + +A document meant to be the starting point of a technical discussion. A strawman may lead to a stickman, tinman, woodman, ironman, etc. + +### white-paper + +An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. + diff --git a/README.md b/README.md index 3ba6cf8..13fe345 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Welcome to the tribe. - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - Team Skills - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) @@ -93,7 +93,7 @@ Welcome to the tribe. - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) -4. [Glossary](4-Glossary.md) +4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) 6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) diff --git a/SUMMARY.md b/SUMMARY.md index 0637a07..3a73b06 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -75,7 +75,6 @@ * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) -* [Glossary](4-Glossary.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) From 088369568b38d1efff2a8d835b6c762f238738dd Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Thu, 14 Jan 2016 12:20:06 +0000 Subject: [PATCH 006/149] Updated final point on 'Choosing Languages' in response to #3 --- 3-Advanced/Technical-Judgment/03-Choosing Languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 76deeaa..22b3a22 100644 --- a/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -8,7 +8,7 @@ Programming languages should really be called notations in that learning one is - There is necessarily loose coupling between the components that are written in different notations (though maybe not clean interfaces), - You can evolve to a new language/platform easily by rewriting each component individually, -- Its possible that some of the modules are actually up-to-date. +- One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. Some of these effects may only be psychological; but psychology matters. In the end the costs of language tyranny outweigh any advantage that it provides. From ad192ca030be105e4bdb527bb076c1a56533cac6 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Thu, 14 Jan 2016 21:06:30 +0000 Subject: [PATCH 007/149] Added resources for "How to find stuff out" --- 1-Beginner/Team-Skills/03-How to Find Out Information.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/1-Beginner/Team-Skills/03-How to Find Out Information.md b/1-Beginner/Team-Skills/03-How to Find Out Information.md index e88b01c..d8c6dc0 100644 --- a/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -16,4 +16,11 @@ If you want to know *how likely it is* that a faster algorithm for a particular If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. -Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) \ No newline at end of file +## Resources + +- [Stack Overflow](https://www.stackoverflow.com) - A language-independent collaboratively edited question and answer site for programmers +- [How to Google](http://i.imgur.com/PbkQpLA.gif) - Infographic + +--- + +Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) From a92c89bc1783cb311ee18ecc0aa237940e984c50 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Thu, 14 Jan 2016 21:08:00 +0000 Subject: [PATCH 008/149] Undoing previous commit Should have been added to other branch..! --- 1-Beginner/Team-Skills/03-How to Find Out Information.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/1-Beginner/Team-Skills/03-How to Find Out Information.md b/1-Beginner/Team-Skills/03-How to Find Out Information.md index d8c6dc0..b1f0e45 100644 --- a/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -16,11 +16,4 @@ If you want to know *how likely it is* that a faster algorithm for a particular If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. -## Resources - -- [Stack Overflow](https://www.stackoverflow.com) - A language-independent collaboratively edited question and answer site for programmers -- [How to Google](http://i.imgur.com/PbkQpLA.gif) - Infographic - ---- - Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) From 218561b2853e1394dd5f13074b6f3f2731930910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Fri, 15 Jan 2016 12:15:04 +0100 Subject: [PATCH 009/149] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 13fe345..4457c49 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # How to be a Programmer: Community Version + Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read From 8be1a12072c8002271834929eeb4ad5300a4f607 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Fri, 15 Jan 2016 15:55:30 +0000 Subject: [PATCH 010/149] Create 09-Design Patterns.md --- 2-Intermediate/Judgment/09-Design Patterns.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 2-Intermediate/Judgment/09-Design Patterns.md diff --git a/2-Intermediate/Judgment/09-Design Patterns.md b/2-Intermediate/Judgment/09-Design Patterns.md new file mode 100644 index 0000000..53991d3 --- /dev/null +++ b/2-Intermediate/Judgment/09-Design Patterns.md @@ -0,0 +1,30 @@ +# Design Patterns + +Design Patterns can be seen as repeatable solutions to common problems arising in software design. They provide a great, language-agnostic +way of talking about software architecture. + +"Head First Design Patterns" explains simply: + +> Design patterns don't go directly into your code, they first go into your BRAIN. Once you've loaded your brain with good working +knowledge of patterns you can start to apply them to your new designs + +There are a number of benefits to considering using a design pattern: + +- Helps your system prepare for accommodating change - an inevitability of software development +- Allows for a shared language when describing a system - you can "say more with less" +- Can lead to a better designed system (through *appropriate use* of a design pattern) + +There are 23 'Gang of Four' patterns that are generally considered the foundation for all other patterns. They are categorised into three groups: Creational, Structural and Behavioural. + +## Criticisms + +[SourceMaking](https://sourcemaking.com/design_patterns) highlights some of the criticisms of using design patterns: + + - Targets the wrong problem + - Lacks formal foundations + - Leads to inefficient solutions + - Does not differ significantly from other abstractions + + +Some argue that design patterns ultimately boil down to good software design with careful consideration of SOLID principles. + [Jeff Atwood also has some thoughts on design patterns](http://blog.codinghorror.com/rethinking-design-patterns/) From 478df8d9b90275a85341d1a222560594f902ae26 Mon Sep 17 00:00:00 2001 From: Jeremy Self Date: Sat, 16 Jan 2016 12:15:25 -0600 Subject: [PATCH 011/149] Added some verbs to improve readability of a sentence. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ba6cf8..6c135f8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This is very subjective and, therefore, this essay is doomed to be personal and Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. -In this essay the term boss to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. +In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. Welcome to the tribe. From 93c87ca19dae51ed4c3f319fbf72c9b25a26676e Mon Sep 17 00:00:00 2001 From: Jeremy Self Date: Sat, 16 Jan 2016 13:06:58 -0600 Subject: [PATCH 012/149] Fixed Glossary typos --- 4-Glossary.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/4-Glossary.md b/4-Glossary.md index df65d72..8407df1 100644 --- a/4-Glossary.md +++ b/4-Glossary.md @@ -81,7 +81,7 @@ This is a glossary of terms as used in this essay. These do not necessarily have : A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible. **object-oriented programming** -: An programming style emphasizing the the management of state inside objects. +: An programming style emphasizing the management of state inside objects. **communication languages** : A language designed primarily for standardization rather than execution. @@ -93,7 +93,7 @@ This is a glossary of terms as used in this essay. These do not necessarily have : A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time. **buy vs. build** -: An adjective describing a choice between spending money for software or writing it your self. +: An adjective describing a choice between spending money for software or writing it yourself. **mere work** : Work that requires little creativity and entails little risk. Mere work can be estimated easily. @@ -107,4 +107,4 @@ This is a glossary of terms as used in this essay. These do not necessarily have **white-paper** : An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. -Next [Bibliography/Websiteography](5-Bibliography.md) \ No newline at end of file +Next [Bibliography/Websiteography](5-Bibliography.md) From 2f4eda73fefe9a1a265c051488c75d771f8b846d Mon Sep 17 00:00:00 2001 From: Jeremy Self Date: Sat, 16 Jan 2016 13:14:12 -0600 Subject: [PATCH 013/149] Fixed some formatting --- 1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/1-Beginner/Personal-Skills/01-Learn To Debug.md index 6cd0ca8..986e67b 100644 --- a/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,6 +1,6 @@ # Learn to Debug -Debugging is the cornerstone of being a programmer. The first meaning of the verb to debug is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. +Debugging is the cornerstone of being a programmer. The first meaning of the verb *debug* is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. From 6b7f3764db700bd7de0f7c3f9c76f2ed548fe6d1 Mon Sep 17 00:00:00 2001 From: Jeremy Self Date: Sat, 16 Jan 2016 13:32:11 -0600 Subject: [PATCH 014/149] Changing from italics to double quotes --- 1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/1-Beginner/Personal-Skills/01-Learn To Debug.md index 986e67b..612be8d 100644 --- a/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,6 +1,6 @@ # Learn to Debug -Debugging is the cornerstone of being a programmer. The first meaning of the verb *debug* is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. +Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. From 852356cb201bd5c343f0c6f508151ed0e3fa1d77 Mon Sep 17 00:00:00 2001 From: Tyler J Diaz Date: Sun, 17 Jan 2016 19:57:03 -0500 Subject: [PATCH 015/149] Modify sentence for legibility The double `are` in `are more fundamental are not working programmers.` made me re-read this 2-3 times. --- 1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/1-Beginner/Personal-Skills/01-Learn To Debug.md index 612be8d..d435bb3 100644 --- a/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -2,7 +2,7 @@ Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. -Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. +Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental than debugging are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. From 7d6811525cb4b6badc4114d884d403f891c0e058 Mon Sep 17 00:00:00 2001 From: braydie Date: Mon, 18 Jan 2016 13:53:58 +0000 Subject: [PATCH 016/149] merge pull request #44 --- .gitignore | 16 ++++++ 4-Glossary.md | 110 -------------------------------------- GLOSSARY.md | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 5 +- SUMMARY.md | 80 ++++++++++++++++++++++++++++ 5 files changed, 241 insertions(+), 112 deletions(-) create mode 100644 .gitignore delete mode 100644 4-Glossary.md create mode 100644 GLOSSARY.md create mode 100644 SUMMARY.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4cb12d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Node rules: +## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +## Dependency directory +## Commenting this out is preferred by some people, see +## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git +node_modules + +# Book build output +_book + +# eBook build output +*.epub +*.mobi +*.pdf diff --git a/4-Glossary.md b/4-Glossary.md deleted file mode 100644 index 8407df1..0000000 --- a/4-Glossary.md +++ /dev/null @@ -1,110 +0,0 @@ -# Glossary - -This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it. - -**unk-unk** -: Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule. - -**boss** -: The person or entity that gives you tasks. In some cases this may be the public at large. - -**printlining** -: The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging. - -**logging** -: The practice of writing a program so that it can produce a configurable output log describing its execution. - -**divide and conquer** -: A technique of top-down design and, importantly, of debugging that is the subdivision of a problem or a mystery into progressively smaller problems or mysteries. - -**vapour** -: Illusionary and often deceptive promises of software that is not yet for sale and, as often as not, will never materialize into anything solid. - -**boss** -: The person who sets your tasks. In some cases, the user is the boss. - -**tribe** -: The people with whom you share loyalty to a common goal. - -**low-hanging fruit** -: Big improvements that cost little. - -**Entrepreneur** -:The initiator of projects. - -**garbage** -: Objects that are no longer needed that hold memory. - -**business** -: A group of people organized for making money. - -**company** -: A group of people organized for making money. - -**tribe** -: A group of people you share cultural affinity and loyalty with. - -**scroll blindness** -: The effect of being unable to find information you need because it is buried in too much other, less interesting information. - -**wall-clock** -: Actually time as measured by a clock on a wall, as opposed to CPU time. - -**bottleneck** -: The most important limitation in the performance of a system. A constriction that limits performance. - -**master** -: A unique piece of information from which all cached copies are derived that serves as the official definition of that data. - -**heap allocated** -: Memory can be said to be heap allocated whenever the mechanism for freeing it is complicated. - -**garbage** -: Allocated memory that no longer has any useful meaning. - -**garbage collector** -: A system for recycling garbage. - -**memory leak** -: The unwanted collection of references to objects that prevents garbage collection (or a bug in the garbage collector or memory management system!) that causes the program to gradually increase its memory demands over time. - -**Extreme Programming** -: A style of programming emphasizing communication with the customer and automated testing. - -**hitting the wall** -: To run out of a specific resource causing performance to degrade sharply rather than gradually. - -**speculative programming** -: Producing a feature before it is really known if that feature will be useful. - -**information hiding** -: A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible. - -**object-oriented programming** -: An programming style emphasizing the management of state inside objects. - -**communication languages** -: A language designed primarily for standardization rather than execution. - -**boxes and arrows** -: A loose, informal style of making diagrams consisting of boxes and arrows drawn between those boxes to show the relationships. This contrast with formal diagram methodologies, such as UML. - -**lingua franca** -: A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time. - -**buy vs. build** -: An adjective describing a choice between spending money for software or writing it yourself. - -**mere work** -: Work that requires little creativity and entails little risk. Mere work can be estimated easily. - -**programming notation** -: A synonym for programming language that emphasizes the mathematical nature of programming language and their relative simplicity compared to natural languages. - -**strawman** -: A document meant to be the starting point of a technical discussion. A strawman may lead to a stickman, tinman, woodman, ironman, etc. - -**white-paper** -: An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. - -Next [Bibliography/Websiteography](5-Bibliography.md) diff --git a/GLOSSARY.md b/GLOSSARY.md new file mode 100644 index 0000000..61b9bc8 --- /dev/null +++ b/GLOSSARY.md @@ -0,0 +1,142 @@ +# Glossary + +This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it. + +### unk-unk + +Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule. + +### boss + +The person or entity that gives you tasks. In some cases this may be the public at large. + +### printlining + +The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging. + +### logging + +The practice of writing a program so that it can produce a configurable output log describing its execution. + +### divide and conquer + +A technique of top-down design and, importantly, of debugging that is the subdivision of a problem or a mystery into progressively smaller problems or mysteries. + +### vapour + +Illusionary and often deceptive promises of software that is not yet for sale and, as often as not, will never materialize into anything solid. + +### boss + +The person who sets your tasks. In some cases, the user is the boss. + +### tribe + +The people with whom you share loyalty to a common goal. + +### low-hanging fruit + +Big improvements that cost little. + +### Entrepreneur +The initiator of projects. + +### garbage + +Objects that are no longer needed that hold memory. + +### business + +A group of people organized for making money. + +### company + +A group of people organized for making money. + +### tribe + +A group of people you share cultural affinity and loyalty with. + +### scroll blindness + +The effect of being unable to find information you need because it is buried in too much other, less interesting information. + +### wall-clock + +Actually time as measured by a clock on a wall, as opposed to CPU time. + +### bottleneck + +The most important limitation in the performance of a system. A constriction that limits performance. + +### master + +A unique piece of information from which all cached copies are derived that serves as the official definition of that data. + +### heap allocated + +Memory can be said to be heap allocated whenever the mechanism for freeing it is complicated. + +### garbage + +Allocated memory that no longer has any useful meaning. + +### garbage collector + +A system for recycling garbage. + +### memory leak + +The unwanted collection of references to objects that prevents garbage collection (or a bug in the garbage collector or memory management system!) that causes the program to gradually increase its memory demands over time. + +### Extreme Programming + +A style of programming emphasizing communication with the customer and automated testing. + +### hitting the wall + +To run out of a specific resource causing performance to degrade sharply rather than gradually. + +### speculative programming + +Producing a feature before it is really known if that feature will be useful. + +### information hiding + +A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible. + +### object-oriented programming + +An programming style emphasizing the the management of state inside objects. + +### communication languages + +A language designed primarily for standardization rather than execution. + +### boxes and arrows + +A loose, informal style of making diagrams consisting of boxes and arrows drawn between those boxes to show the relationships. This contrast with formal diagram methodologies, such as UML. + +### lingua franca + +A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time. + +### buy vs. build + +An adjective describing a choice between spending money for software or writing it your self. + +### mere work + +Work that requires little creativity and entails little risk. Mere work can be estimated easily. + +### programming notation + +A synonym for programming language that emphasizes the mathematical nature of programming language and their relative simplicity compared to natural languages. + +### strawman + +A document meant to be the starting point of a technical discussion. A strawman may lead to a stickman, tinman, woodman, ironman, etc. + +### white-paper + +An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. \ No newline at end of file diff --git a/README.md b/README.md index 6c135f8..903288f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # How to be a Programmer: Community Version + Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read @@ -31,7 +32,7 @@ Welcome to the tribe. - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - Team Skills - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) @@ -93,7 +94,7 @@ Welcome to the tribe. - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) -4. [Glossary](4-Glossary.md) +4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) 6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..3a73b06 --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,80 @@ +# Summary + +* [Beginner](1-Beginner/README.md) + * Personal Skills + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + * Team Skills + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +* [Intermediate](2-Intermediate/README.md) + * Personal Skills + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + * Team Skills + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + * Judgment + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +* [Advanced](3-Advanced/README.md) + * Technological Judgment + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + * Compromising Wisely + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + * Serving Your Team + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +* [Appendix A * Bibliography/Websiteography](5-Bibliography.md) +* [Appendix B * History (As of January 2016)](6-History.md) +* [Appendix C * Contributions (As of January 2016)](7-Contributions.md) From 41b0a4dcad0d8fcfdfb94959a8aaaa84437483e0 Mon Sep 17 00:00:00 2001 From: braydie Date: Mon, 18 Jan 2016 15:16:37 +0000 Subject: [PATCH 017/149] Updating pr/44 with changes from Master --- 1-Beginner/Personal-Skills/01-Learn To Debug.md | 10 +++++----- .../Team-Skills/03-How to Find Out Information.md | 2 +- 3-Advanced/Technical-Judgment/03-Choosing Languages.md | 2 +- GLOSSARY.md | 8 ++++++++ README.md | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/1-Beginner/Personal-Skills/01-Learn To Debug.md index 2f679ba..d435bb3 100644 --- a/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,10 +1,10 @@ # Learn to Debug -Debugging is the cornerstone of being a programmer. The first meaning of the verb to debug is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. +Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. -Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, your are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code the slightest bump will throw you permanently. Often this visibility can only be gained by experimentation, that is, debugging. +Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental than debugging are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. -Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct, or some condition arises that you did not anticipate. Sometimes the magic trick of staring into the source code works. When it doesn't, you must debug. +Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. To get visibility into the execution of a program you must be able to execute the code and observe something about it. Sometimes this is visible, like what is being displayed on a screen, or the delay between two events. In many other cases, it involves things that are not meant to be visible, like the state of some variables inside the code, which lines of code are actually being executed, or whether certain assertions hold across a complicated data structure. These hidden things must be revealed. @@ -16,6 +16,6 @@ The common ways of looking into the ‘innards’ of an executing program can be Debugging tools are wonderful when they are stable and available, but the printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. -Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it, and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. +Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. -Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) \ No newline at end of file +Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) diff --git a/1-Beginner/Team-Skills/03-How to Find Out Information.md b/1-Beginner/Team-Skills/03-How to Find Out Information.md index e88b01c..b1f0e45 100644 --- a/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -16,4 +16,4 @@ If you want to know *how likely it is* that a faster algorithm for a particular If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. -Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) \ No newline at end of file +Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) diff --git a/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 76deeaa..22b3a22 100644 --- a/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -8,7 +8,7 @@ Programming languages should really be called notations in that learning one is - There is necessarily loose coupling between the components that are written in different notations (though maybe not clean interfaces), - You can evolve to a new language/platform easily by rewriting each component individually, -- Its possible that some of the modules are actually up-to-date. +- One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. Some of these effects may only be psychological; but psychology matters. In the end the costs of language tyranny outweigh any advantage that it provides. diff --git a/GLOSSARY.md b/GLOSSARY.md index 5cd3af0..1b2b683 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -39,7 +39,11 @@ The people with whom you share loyalty to a common goal. Big improvements that cost little. ### Entrepreneur +<<<<<<< HEAD :The initiator of projects. +======= +The initiator of projects. +>>>>>>> refs/remotes/origin/master ### garbage @@ -139,5 +143,9 @@ A document meant to be the starting point of a technical discussion. A strawman ### white-paper +<<<<<<< HEAD An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. +======= +An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. +>>>>>>> refs/remotes/origin/master diff --git a/README.md b/README.md index 4457c49..903288f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ This is very subjective and, therefore, this essay is doomed to be personal and Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. -In this essay the term boss to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. +In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. Welcome to the tribe. From 0a2ac10aa9a1b4129d172317619f07692c8a9383 Mon Sep 17 00:00:00 2001 From: Popsiclestand Date: Tue, 19 Jan 2016 16:48:32 -0800 Subject: [PATCH 018/149] Update 07-How to Use Source Code Control.md Added alternative naming convention for source code control. --- 1-Beginner/Team-Skills/07-How to Use Source Code Control.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index e9143bd..91dbf5c 100644 --- a/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,9 +1,9 @@ # How to Use Source Code Control -Source code control systems let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. +Source code control systems (also known as Version Control Systems) let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. I was late to appreciate the benefits of source code control systems but now I wouldn't live without one even on a one-person project. Generally they are necessary when you have team working on the same code base. However, they have another great advantage: they encourage thinking about the code as a growing, organic system. Since each change is marked as a new revision with a new name or number, one begins to think of the software as a visibly progressive series of improvements. I think this is especially useful for beginners. A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. -Next [How to Unit Test](08-How to Unit Test.md) \ No newline at end of file +Next [How to Unit Test](08-How to Unit Test.md) From 63ddc6420ac2241df401f5dadb9ecfe32c950405 Mon Sep 17 00:00:00 2001 From: mattymaloney Date: Fri, 22 Jan 2016 18:04:43 +0900 Subject: [PATCH 019/149] Awkward first sentence of second paragraph. --- 1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/1-Beginner/Personal-Skills/01-Learn To Debug.md index d435bb3..0e2e0bf 100644 --- a/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -2,7 +2,7 @@ Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. -Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental than debugging are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. +Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. From 3888f9f0d4f1344d7ca437dbc4a7a172e600fdee Mon Sep 17 00:00:00 2001 From: Mariano Simone Date: Fri, 22 Jan 2016 11:26:26 -0800 Subject: [PATCH 020/149] fix Glossary link --- .../11-How to Deal with Organizational Chaos.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md index 956cc58..247a626 100644 --- a/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md +++ b/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -8,4 +8,4 @@ Non-engineers can order people around but, in a typical software company, can cr If you are a leader, tell your people to do the same thing and tell them to ignore what anybody else tells them. This course of action is the best for you personally, and is the best for your company or project. -Next [Glossary](../../4-Glossary.md) \ No newline at end of file +Next [Glossary](../../GLOSSARY.md) From d52ad946dc9dbe76d536ea27a63118d6b279d8ee Mon Sep 17 00:00:00 2001 From: anymoto Date: Sat, 23 Jan 2016 13:43:10 -0600 Subject: [PATCH 021/149] Remove duplicated line --- .../Judgment/04-How to Make a Buy vs Build Decision.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index 74362ad..587c532 100644 --- a/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -6,7 +6,6 @@ An entrepreneurial company or project that is trying to accomplish something wit - What portion of what you buy will you need? - What is the cost of evaluating the integration? - What is the cost of integration? -- What is the cost of evaluating the integration? - Will buying increase or decrease long term maintenance costs? - Will building it put you in a business position you don't want to be in? @@ -14,4 +13,4 @@ You should think twice before building something that is big enough to serve as After considering these questions, you should perhaps prepare two draft project plans, one for building and one for buying. This will force you to consider the integration costs. You should also consider the long term maintenance costs of both solutions. To estimate the integration costs, you will have to do a thorough evaluation of the software before you buy it. If you can't evaluate it, you will assume an unreasonable risk in buying it and you should decide against buying that particular product. If there are several buy decisions under consideration, some energy will have to be spent evaluating each. -Next [How to Grow Professionally](05-How to Grow Professionally.md) \ No newline at end of file +Next [How to Grow Professionally](05-How to Grow Professionally.md) From 80537416fe2d74eb3782fde6dab370652748d2a2 Mon Sep 17 00:00:00 2001 From: Kenneth Lim Date: Tue, 26 Jan 2016 11:42:12 +0800 Subject: [PATCH 022/149] there --> their --- 1-Beginner/Personal-Skills/12-How to Conduct Experiments.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index eb1d545..916a540 100644 --- a/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -10,7 +10,7 @@ The kinds of experiments you will have to perform include: - Testing systems with small examples to verify that they conform to the documentation or to understand their response when there is no documentation, - Testing small code changes to see if they actually fix a bug, -- Measuring the performance of a system under two different conditions due to imperfect knowledge of there performance characteristics, +- Measuring the performance of a system under two different conditions due to imperfect knowledge of their performance characteristics, - Checking the integrity of data, and - Collecting statistics that may hint at the solution to difficult or hard-to-repeat bugs. @@ -20,4 +20,4 @@ First, try to be very clear about your hypothesis, or the assertion that you are You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. -Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) \ No newline at end of file +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) From cb589077b27afaf9d1f8ab7ce3fb81ad7e95e756 Mon Sep 17 00:00:00 2001 From: Mark Meyer Date: Tue, 2 Feb 2016 19:32:01 -0600 Subject: [PATCH 023/149] Add link to Paul Graham's Succinctness is Power --- .../05-How to Balance Brevity and Abstraction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index c590922..30256f2 100644 --- a/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,9 +1,9 @@ # How to Balance Brevity and Abstraction -Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article 'Succinctness is Power' by Paul Graham [PGSite]. +Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). There is a certain dogma associated with useful techniques such as *information hiding* and *object oriented programming* that are sometimes taken too far. These techniques let one code abstractly and anticipate change. I personally think, however, that you should not produce much speculative code. For example, it is an accepted style to hide an integer variable on an object behind mutators and accessors, so that the variable itself is not exposed, only the little interface to it. This does allow the implementation of that variable to be changed without affecting the calling code, and is perhaps appropriate to a library writer who must publish a very stable API. But I don't think the benefit of this outweighs the cost of the wordiness of it when my team owns the calling code and hence can recode the caller as easily as the called. Four or five extra lines of code is a heavy price to pay for this speculative benefit. Portability poses a similar problem. Should code be portable to a different computer, compiler, software system or platform, or simply easily ported? I think a non-portable, short-and-easily-ported piece of code is better than a long portable one. It is relatively easy and certainly a good idea to confine non-portable code to designated areas, such as a class that makes database queries that are specific to a given DBMS. -Next [How to Learn New Skills](06-How to Learn New Skills.md) \ No newline at end of file +Next [How to Learn New Skills](06-How to Learn New Skills.md) From b5036891b6513b74d81796dff814570410ae4fa6 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 3 Feb 2016 15:11:15 +0800 Subject: [PATCH 024/149] fix misspelling of resilient --- .../01-How to Tradeoff Quality Against Development Time.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index 06eefd2..9665e22 100644 --- a/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -8,6 +8,6 @@ If she still insists you should try to isolate the shoddiness into particular co NinjaProgrammer at Slashdot sent in this gem: -> Remember that a good design will be resillient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this. +> Remember that a good design will be resilient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this. -Next [How to Manage Software Dependence](02-How to Manage Software System Dependence.md) \ No newline at end of file +Next [How to Manage Software Dependence](02-How to Manage Software System Dependence.md) From 13fe4fb9ec46c95cb7435bf6414ebec1689fc31b Mon Sep 17 00:00:00 2001 From: Prayag Verma Date: Thu, 11 Feb 2016 12:49:46 +0530 Subject: [PATCH 025/149] Fix a typo Remove extra `you` --- 2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index 809d459..029c789 100644 --- a/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -10,10 +10,10 @@ Non-programmers can understand technical things but they do not have the thing t When talking to your team you will, without thinking, use a sort of shorthand, an abbreviated language that is effective because you will have much shared experience about technology in general and your product in particular. It takes some effort not to use this shorthand with those that don't have that shared experience, especially when members of your own team are present. This vocabulary create a wall between you and those that do not share it, and, even worse, wastes their time. -With your team, the basic assumptions and goals do not need to be restated often, and most conversation focuses on the details. With outsiders, it must be the other way around. They may not understand things you take for granted. Since you take them for granted and don't repeat them, you can leave a conversation with an outsider thinking that you understand each other when really there is a large misunderstanding. You should assume that you will miscommunicate and watch carefully to find this miscommunication. Try to get them to summarize or paraphrase what you are saying to make sure they understand. If you have the opportunity to meet with them often, spend a little bit of time asking if you you are communicating effectively, and how you can do it better. If there is a problem in communication, seek to alter your own practices before becoming frustrated with theirs. +With your team, the basic assumptions and goals do not need to be restated often, and most conversation focuses on the details. With outsiders, it must be the other way around. They may not understand things you take for granted. Since you take them for granted and don't repeat them, you can leave a conversation with an outsider thinking that you understand each other when really there is a large misunderstanding. You should assume that you will miscommunicate and watch carefully to find this miscommunication. Try to get them to summarize or paraphrase what you are saying to make sure they understand. If you have the opportunity to meet with them often, spend a little bit of time asking if you are communicating effectively, and how you can do it better. If there is a problem in communication, seek to alter your own practices before becoming frustrated with theirs. I love working with non-engineers. It provides great opportunities to learn and to teach. You can often lead by example, in terms of the clarity of your communication. Engineers are trained to bring order out of chaos, to bring clarity out of confusion, and non-engineers like this about us. Because we have technical judgement and can usually understand business issues, we can often find a simple solution to a problem. Often non-engineers propose solutions that they think will make it easier on us out of kindness and a desire to do the right thing, when in fact a much better overall solution exists which can only be seen by synergizing the outsiders view with your technical judgement. I personally like Extreme Programming because it addresses this inefficiency; by marrying the estimation quickly to the idea, it makes it easier to find the idea that is the best combination of cost and benefit. -Next [Advanced skills](../../3-Advanced) \ No newline at end of file +Next [Advanced skills](../../3-Advanced) From 291a2bb69232983a1b667e0edf3077fe0bf0ace9 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 13:28:31 +0800 Subject: [PATCH 026/149] add Chinese Version --- zh | 1 + 1 file changed, 1 insertion(+) create mode 160000 zh diff --git a/zh b/zh new file mode 160000 index 0000000..dba2252 --- /dev/null +++ b/zh @@ -0,0 +1 @@ +Subproject commit dba225273133659cb423c90a8d3e493e298d60ab From b25564fd01c87c5083986b9c34cf7b07ac2edb0e Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 13:38:13 +0800 Subject: [PATCH 027/149] add_zh_files --- zh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh b/zh index dba2252..332f3a3 160000 --- a/zh +++ b/zh @@ -1 +1 @@ -Subproject commit dba225273133659cb423c90a8d3e493e298d60ab +Subproject commit 332f3a3289fd0961a78ac0ca90fe32d63c6e8fca From 22cf5f2ddbc983e57291b0647a9850c7bdd22a1e Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 13:45:50 +0800 Subject: [PATCH 028/149] redo --- zh | 1 - 1 file changed, 1 deletion(-) delete mode 160000 zh diff --git a/zh b/zh deleted file mode 160000 index 332f3a3..0000000 --- a/zh +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 332f3a3289fd0961a78ac0ca90fe32d63c6e8fca From 37ce72a4be3f08be6938a6f3bf84f6e749d5aca3 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 13:53:52 +0800 Subject: [PATCH 029/149] add_chinese_file --- .../Personal-Skills/01-Learn To Debug.md | 22 ++++ ...to Debug by Splitting the Problem Space.md | 15 +++ .../03-How to Remove an Error.md | 9 ++ .../04-How to Debug Using a Log.md | 13 +++ ...-How to Understand Performance Problems.md | 11 ++ .../06-How to Fix Performance Problems.md | 13 +++ .../07-How to Optimize Loops.md | 15 +++ .../08-How to Deal with IO Expense.md | 13 +++ .../09-How to Manage Memory.md | 14 +++ .../10-How to Deal with Intermittent Bugs.md | 17 +++ .../11-How to Learn Design Skills.md | 9 ++ .../12-How to Conduct Experiments.md | 22 ++++ zh/1-Beginner/README.md | 27 +++++ .../01-Why Estimation is Important.md | 14 +++ .../02-How to Estimate Programming Time.md | 21 ++++ .../03-How to Find Out Information.md | 19 +++ ...o Utilize People as Information Sources.md | 15 +++ .../Team-Skills/05-How to Document Wisely.md | 20 ++++ .../06-How to Work with Poor Code.md | 11 ++ .../07-How to Use Source Code Control.md | 9 ++ .../Team-Skills/08-How to Unit Test.md | 9 ++ .../09-Take Breaks when Stumped.md | 5 + .../10-How to Recognize When to Go Home.md | 15 +++ .../11-How to Deal with Difficult People.md | 15 +++ ...adeoff Quality Against Development Time.md | 13 +++ ...ow to Manage Software System Dependence.md | 13 +++ ...w to Decide if Software is Too Immature.md | 18 +++ .../04-How to Make a Buy vs Build Decision.md | 16 +++ .../Judgment/05-How to Grow Professionally.md | 11 ++ .../06-How to Evaluate Interviewees.md | 15 +++ ...ow When to Apply Fancy Computer Science.md | 15 +++ .../08-How to Talk to Non-Engineers.md | 19 +++ .../01-How to Stay Motivated.md | 14 +++ .../02-How to be Widely Trusted.md | 7 ++ .../03-How to Tradeoff Time vs Space.md | 15 +++ .../Personal-Skills/04-How to Stress Test.md | 17 +++ ...-How to Balance Brevity and Abstraction.md | 9 ++ .../06-How to Learn New Skills.md | 13 +++ .../Personal-Skills/07-Learn to Type.md | 5 + .../08-How to Do Integration Testing.md | 7 ++ .../09-Communication Languages.md | 11 ++ .../Personal-Skills/10-Heavy Tools.md | 14 +++ .../Personal-Skills/11-How to analyze data.md | 17 +++ zh/2-Intermediate/README.md | 29 +++++ .../01-How to Manage Development Time.md | 11 ++ ...ow to Manage Third-Party Software Risks.md | 11 ++ .../03-How to Manage Consultants.md | 9 ++ .../04-How to Communicate the Right Amount.md | 7 ++ ... Disagree Honestly and Get Away with It.md | 11 ++ .../01-How to Fight Schedule Pressure.md | 11 ++ .../02-How to Understand the User.md | 17 +++ .../03-How to Get a Promotion.md | 13 +++ zh/3-Advanced/README.md | 21 ++++ .../01-How to Develop Talent.md | 23 ++++ .../02-How to Choose What to Work On.md | 5 + ...How to Get the Most From Your Teammates.md | 15 +++ .../04-How to Divide Problems Up.md | 9 ++ .../05-How to Handle Boring Tasks.md | 7 ++ .../06-How to Gather Support for a Project.md | 5 + .../07-How to Grow a System.md | 23 ++++ .../08-How to Communicate Well.md | 11 ++ ...l People Things They Don't Want to Hear.md | 9 ++ .../10-How to Deal with Managerial Myths.md | 12 ++ ...1-How to Deal with Organizational Chaos.md | 11 ++ ...ow to Tell the Hard From the Impossible.md | 9 ++ .../02-How to Utilize Embedded Languages.md | 11 ++ .../03-Choosing Languages.md | 15 +++ zh/4-Glossary.md | 110 ++++++++++++++++++ zh/5-Bibliography.md | 31 +++++ zh/6-History.md | 47 ++++++++ zh/7-Contributions.md | 23 ++++ zh/LICENSE.md | 12 ++ zh/README.md | 101 ++++++++++++++++ 73 files changed, 1231 insertions(+) create mode 100644 zh/1-Beginner/Personal-Skills/01-Learn To Debug.md create mode 100644 zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md create mode 100644 zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md create mode 100644 zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md create mode 100644 zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md create mode 100644 zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md create mode 100644 zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md create mode 100644 zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md create mode 100644 zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md create mode 100644 zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md create mode 100644 zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md create mode 100644 zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md create mode 100644 zh/1-Beginner/README.md create mode 100644 zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md create mode 100644 zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md create mode 100644 zh/1-Beginner/Team-Skills/03-How to Find Out Information.md create mode 100644 zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md create mode 100644 zh/1-Beginner/Team-Skills/05-How to Document Wisely.md create mode 100644 zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md create mode 100644 zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md create mode 100644 zh/1-Beginner/Team-Skills/08-How to Unit Test.md create mode 100644 zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md create mode 100644 zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md create mode 100644 zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md create mode 100644 zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md create mode 100644 zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md create mode 100644 zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md create mode 100644 zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md create mode 100644 zh/2-Intermediate/Judgment/05-How to Grow Professionally.md create mode 100644 zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md create mode 100644 zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md create mode 100644 zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md create mode 100644 zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md create mode 100644 zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md create mode 100644 zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md create mode 100644 zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md create mode 100644 zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md create mode 100644 zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md create mode 100644 zh/2-Intermediate/Personal-Skills/07-Learn to Type.md create mode 100644 zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md create mode 100644 zh/2-Intermediate/Personal-Skills/09-Communication Languages.md create mode 100644 zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md create mode 100644 zh/2-Intermediate/Personal-Skills/11-How to analyze data.md create mode 100644 zh/2-Intermediate/README.md create mode 100644 zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md create mode 100644 zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md create mode 100644 zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md create mode 100644 zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md create mode 100644 zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md create mode 100644 zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md create mode 100644 zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md create mode 100644 zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md create mode 100644 zh/3-Advanced/README.md create mode 100644 zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md create mode 100644 zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md create mode 100644 zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md create mode 100644 zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md create mode 100644 zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md create mode 100644 zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md create mode 100644 zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md create mode 100644 zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md create mode 100644 zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md create mode 100644 zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md create mode 100644 zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md create mode 100644 zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md create mode 100644 zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md create mode 100644 zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md create mode 100644 zh/4-Glossary.md create mode 100644 zh/5-Bibliography.md create mode 100644 zh/6-History.md create mode 100644 zh/7-Contributions.md create mode 100644 zh/LICENSE.md create mode 100644 zh/README.md diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md new file mode 100644 index 0000000..67d1f5d --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -0,0 +1,22 @@ +# 学会Debug + +调试(Debug)是作为一个程åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸èƒ½è°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ + +那些认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿æ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿çš„ç†æƒ³ä¸»ä¹‰è€…们䏿˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你周围也会有,并且也需è¦ä¸Žä¸»è¦çš„è½¯ä»¶å…¬å¸æˆ–组织,比如GNU,或者与你的åŒäº‹ï¼Œå†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果没有获得代ç çš„æ‰§è¡Œè¿‡ç¨‹å¯è§æ€§çš„能力,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ + +调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£è¿™æ ·çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ï¼Œä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 + +ä¸ºäº†èŽ·å¾—ä¸€ä¸ªç¨‹åºæ‰§è¡Œçš„å¯è§æ€§ï¼Œä½ å¿…须能够执行代ç å¹¶ä¸”从这个过程中观察到什么。有时候这是å¯è§çš„,比如一些正在呈现在å±å¹•上的东西,或者两个事件之间的延迟。在许多其他的案例中,它与一些ä¸ä¸€å®šå¯è§çš„东西相关,比如代ç ä¸­ä¸€äº›å˜é‡çš„状æ€ï¼Œå½“å‰çœŸæ­£åœ¨æ‰§è¡Œçš„代ç è¡Œï¼Œæˆ–者是å¦ä¸€äº›æ–­è¨€æŒæœ‰äº†ä¸€ä¸ªå¤æ‚的数æ®ç»“构。这些éšè—的细节必须被显露出æ¥ã€‚ + + +通常的(一些)观察一个正在执行的程åºçš„内部的方法å¯ä»¥å¦‚下分类: + +- 使用一个调试工具; +- Printlining[(戳这里看释义)](../../4-Glossary.md) - 对程åºåšä¸€ä¸ªä¸´æ—¶çš„修改,通常是加一些行去打å°ä¸€äº›ä¿¡æ¯; +- 日志 - 用日志的形å¼ä¸ºåœ¨ç¨‹åºçš„è¿è¡Œä¸­åˆ›å»ºä¸€ä¸ªæ°¸ä¹…的视窗。 + +当调试工具稳定å¯ç”¨æ—¶ï¼Œå®ƒä»¬æ˜¯éžå¸¸ç¾Žå¦™çš„,但[Printlining](../../4-Glossary.md)和写日志是更加é‡è¦çš„。调试工具通常è½åŽäºŽç¼–程语言的å‘展,所以在任何时间点它们都å¯èƒ½æ˜¯æ— æ•ˆçš„。å¦å¤–,调试工具å¯èƒ½è½»å¾®æ”¹å˜ç¨‹åºå®žé™…执行的方å¼ã€‚最åŽï¼Œè°ƒè¯•有许多ç§ï¼Œæ¯”如检查一个断言和一个巨大的数æ®ç»“构,这需è¦å†™ä»£ç å¹¶æ”¹å˜ç¨‹åºçš„è¿è¡Œã€‚当调试工具å¯ç”¨æ—¶ï¼ŒçŸ¥é“æ€Žæ ·ä½¿ç”¨è°ƒè¯•å·¥å…·æ˜¯å¥½çš„ï¼Œä½†å­¦ä¼šä½¿ç”¨å…¶ä»–ä¸¤ç§æ–¹å¼æ˜¯è‡³å…³é‡è¦çš„。 + +当需è¦ä¿®æ”¹ä»£ç æ—¶ï¼Œä¸€äº›åˆå­¦è€…会害怕调试。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - (å¦åˆ™ï¼‰åœ¨è®¸å¤šäººé¢å¯¹è¿™ç§ææƒ§çš„脆弱的开始时刻,我们会因此失去很多优秀的程åºå‘˜ã€‚ + +Next [如何通过分离问题空间æ¥Debug](02-How to Debug by Splitting the Problem Space.md) diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md new file mode 100644 index 0000000..2759d55 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -0,0 +1,15 @@ +# 如何通过分割问题空间æ¥Debug + +调试是有趣的,因为它一开始是个迷。你认为它应该这样åšï¼Œä½†å®žé™…上它å´é‚£æ ·åšã€‚很多时候并ä¸ä»…是这么简å•---我给出的任何例å­éƒ½ä¼šè¢«è®¾è®¡æ¥ä¸Žä¸€äº›å¶å°”在现实中会å‘生的情况相比较。调试需è¦åˆ›é€ åŠ›ä¸Žæ™ºè°‹ã€‚å¦‚æžœè¯´è°ƒè¯•æœ‰ç®€å•之é“,那就是在这个谜题上使用分治法。 + +å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šåœ¨ä¸€ä¸ªåºåˆ—里åšå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´©æºƒäº†ã€‚因为你写的代ç å¹¶ä¸æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä½ æœ‰ä¸€ä¸ªè°œé¢˜äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ + +ä½ å¯ä»¥è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥è§‚察它是在哪件事情上崩溃的å—?当然,你å¯ä»¥ç”¨ä¸€ä¸ªè°ƒè¯•器或者我们å¯ä»¥åœ¨ç¬¬8第9件事åŽé¢åŠ ä¸€äº›[printlining](../../4-Glossary.md)的语å¥ï¼ˆæˆ–è€…ä½ æ­£åœ¨ä½¿ç”¨çš„ä»»ä½•è¯­è¨€é‡Œçš„ç­‰ä»·çš„äº‹æƒ…ï¼‰ï¼Œå½“æˆ‘ä»¬é‡æ–°è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œæˆ‘们的谜题会å˜å¾—æ›´å°ï¼Œæ¯”如“它是在åšç¬¬ä¹ä»¶äº‹çš„æ—¶å€™å´©æºƒçš„â€ã€‚我å‘çŽ°ï¼ŒæŠŠè°œé¢˜æ˜¯æ€Žæ ·çš„ä¸€ç›´æ¸…æ¥šåœ°è®°åœ¨å¿ƒé‡Œèƒ½è®©æˆ‘ä»¬ä¿æŒæ³¨æ„力。当几个人在一个问题的压力下一起工作时,很容易忘记最é‡è¦çš„谜题是什么。 + +调试技术中分治的关键和算法设计里的分治是一样的。你åªè¦ä»Žä¸­é—´å¼€å§‹åˆ’分,就ä¸ç”¨åˆ’分太多次,并且能快速地调试。但问题的中点在哪里?这就是真正创造力和ç»éªŒéœ€è¦å‚与的地方。 + +对于一个真正的åˆå­¦è€…æ¥è¯´ï¼Œå¯èƒ½å‘生错误的地方好åƒåœ¨ä»£ç çš„æ¯ä¸€è¡Œé‡Œéƒ½æœ‰ã€‚ä¸€å¼€å§‹ï¼Œä½ çœ‹ä¸åˆ°ä¸€äº›å…¶ä»–的你ç¨åŽå°†ä¼šå­¦åˆ°çš„ç»´åº¦ï¼Œæ¯”å¦‚æ‰§è¡Œè¿‡çš„ä»£ç æ®µï¼Œæ•°æ®ç»“构,内存管ç†ï¼Œä¸Žå¤–部代ç çš„交互,一些有风险的代ç ï¼Œä¸€äº›ç®€å•的代ç ã€‚对于一个有ç»éªŒçš„程åºå‘˜ï¼Œè¿™äº›å…¶ä»–的维度为整个å¯èƒ½å‡ºé”™çš„事情展示了一个ä¸å®Œç¾Žä½†æ˜¯æœ‰ç”¨çš„æ€ç»´æ¨¡åž‹ã€‚æ‹¥æœ‰è¿™æ ·çš„æ€ç»´æ¨¡åž‹èƒ½è®©ä¸€ä¸ªäººæ›´é«˜æ•ˆåœ°æ‰¾åˆ°è°œé¢˜çš„中点。 + +一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 + +Next [如何移除错误](03-How to Remove an Error.md) diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md new file mode 100644 index 0000000..67a60bf --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -0,0 +1,9 @@ +# 如果移除一个错误 + +æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统,所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ + +在修å¤bug时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯•å›¾ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤bugæœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çްbugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察bugä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ªbug。 + +有时候,å¯èƒ½å®žé™…上有几个bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释/或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 + +Next [如何使用日志调试](04-How to Debug Using a Log.md) diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md new file mode 100644 index 0000000..ba29229 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -0,0 +1,13 @@ +# 如何使用日志调试 + +*Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为log。*Printlining*åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚ç†æƒ³åœ°ï¼Œç¨‹åºè¿è¡Œæ—¶ï¼Œæ—¥å¿—产生的信æ¯çš„æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: + +- 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„bug的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„bug。 +- 日志å¯ä»¥æä¾›ç»Ÿè®¡å’Œä¸Žæ€§èƒ½ç›¸å…³çš„æ•°æ®ï¼Œæ¯”如语å¥é—´æµé€è¿‡çš„æ—¶é—´ã€‚ +- å¯é…置的情况下,日志å…è®¸æˆ‘ä»¬èŽ·å–æ™®é€šçš„ä¿¡æ¯ï¼Œä½¿å¾—我们å¯ä»¥åœ¨ä¸ä¿®æ”¹æˆ–釿–°éƒ¨ç½²ä»£ç çš„æƒ…况下调试以处ç†å…·ä½“的问题。 + +需è¦è¾“å‡ºçš„æ—¥å¿—æ•°é‡æ€»æ˜¯ä¸€ä¸ªç®€çº¦ä¸Žä¿¡æ¯çš„æƒè¡¡ã€‚å¤ªå¤šçš„ä¿¡æ¯ä¼šä½¿å¾—日志å˜å¾—昂贵,并且造æˆ[*滚动目盲*](../../4-Glossary.md),使得å‘现你想è¦çš„ä¿¡æ¯å˜å¾—很困难。但信æ¯å¤ªå°‘çš„è¯ï¼Œæ—¥å¿—å¯èƒ½ä¸åŒ…å«ä½ éœ€è¦çš„ä¿¡æ¯ã€‚出于这个原因,让日志的输出å¯é…置是éžå¸¸æœ‰ç”¨çš„。通常,日志中的æ¯ä¸ªè®°å½•会标记它在æºä»£ç é‡Œçš„ä½ç½®ï¼Œæ‰§è¡Œå®ƒçš„线程(如果å¯ç”¨çš„è¯ï¼‰ï¼Œæ—¶é—´ç²¾åº¦ï¼Œå¹¶ä¸”,通常有,一些é¢å¤–的有效信æ¯ï¼Œæ¯”如一些å˜é‡çš„值,剩余内存大å°ï¼Œæ•°æ®å¯¹è±¡çš„æ•°é‡ï¼Œç­‰ç­‰ã€‚è¿™äº›æ—¥å¿—è¯­å¥æ’’éæºç ï¼Œä½†åªå‡ºçŽ°åœ¨ä¸»è¦çš„功能点和一些å¯èƒ½å‡ºçް屿œºçš„代ç é‡Œã€‚æ¯ä¸ªè¯­å¥å¯ä»¥è¢«èµ‹äºˆä¸€ä¸ªç­‰çº§ï¼Œå¹¶ä¸”å°†ä¼šåœ¨ç³»ç»Ÿè®¾ç½®è¾“å‡ºè¿™ä¸ªç­‰çº§æ—¶è¾“å‡ºè¿™ä¸ªè®°å½•ã€‚ä½ åº”è¯¥è®¾è®¡å¥½æ—¥å¿—è¯­å¥æ¥æ ‡è®°ä½ é¢„期的问题。预估测é‡ç¨‹åºè¡¨çŽ°çš„å¿…è¦æ€§ã€‚ + +如果你有一个永久的日志,printling现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 + +Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How to Understand Performance Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md new file mode 100644 index 0000000..d718574 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -0,0 +1,11 @@ +# 如何ç†è§£æ€§èƒ½é—®é¢˜ + +学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹ debug是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žåœ°ç†è§£äº†ä½ å†™çš„代ç çš„代价,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 + +å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨I/O上。å‘现昂贵的I/O和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 + +计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯èŠ±è´¹äº†ç¨å¾®å¤šä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ + +竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”和线程饥饿,如果这是å¯é¢„è§çš„ï¼Œæœ€å¥½æœ‰ä¸€ç§æ–¹å¼æ¥åˆé€‚地测é‡è¿™ç§ç«žäº‰ã€‚å³ä½¿ç«žäº‰ä¸ä¼šå‘ç”Ÿï¼Œèƒ½å¤Ÿæ–­è¨€è¿™ç§æƒ…况也是éžå¸¸æœ‰å¸®åŠ©çš„ã€‚ + +Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How to Fix Performance Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md new file mode 100644 index 0000000..8841c9a --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -0,0 +1,13 @@ +# å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜ + +大部分软件都å¯ä»¥é€šè¿‡ç›¸å¯¹å°å¾—多的努力,å˜å¾—比它们刚å‘布时,在时间上快10到100å€ã€‚在市场å‘布时间的压力下,选择一个简å•快速的解决性能问题的方法而éžå…¶ä»–æ–¹æ³•æ˜¯èªæ˜Žè€Œæœ‰æ•ˆçŽ‡çš„ã€‚ç„¶è€Œï¼Œæ€§èƒ½æ˜¯å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 + +æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œä»¥å‘现“瓶颈â€ï¼Œæˆ–者资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 + +当你在æŸä¸ªæ–¹é¢åšäº†ä¸€ä¸ªä¸¤å€æå‡åŽï¼Œä½ éœ€è¦è‡³å°‘釿–°è€ƒè™‘并且å¯èƒ½é‡æ–°åˆ†æžï¼ŒåŽ»å‘çŽ°ç³»ç»Ÿä¸­ä¸‹ä¸€ä¸ªæœ€æ˜‚è´µçš„ç“¶é¢ˆï¼Œå¹¶ä¸”æ”»ç ´é‚£ä¸ªç“¶é¢ˆï¼Œå¾—åˆ°ä¸‹ä¸€ä¸ªä¸¤å€æå‡ã€‚ + +é€šå¸¸ï¼Œæ€§èƒ½çš„ç“¶é¢ˆçš„ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œæ•°ç‰›çš„æ•°ç›®ï¼šé€šè¿‡æ•°è„šçš„æ•°é‡ç„¶åŽé™¤ä»¥4,还是数头的数é‡ã€‚举些例å­ï¼Œæˆ‘曾犯过的一些错误:没能在关系数æ®åº“中,为我ç»å¸¸æŸ¥è¯¢çš„那一列æä¾›é€‚当的索引,这å¯èƒ½ä¼šä½¿å¾—它至少慢了20å€ã€‚其他例å­è¿˜åŒ…括在循环里åšä¸å¿…è¦çš„I/Oæ“作,留下ä¸å†éœ€è¦çš„调试语å¥ï¼Œä¸å†éœ€è¦çš„内存分é…,还有,尤其是,ä¸ä¸“业地使用库和其他的没有为性能充分编写过的å­ç³»ç»Ÿã€‚è¿™ç§æå‡æœ‰æ—¶å€™è¢«å«åšâ€œä½Žåž‚的水果â€ï¼Œæ„æ€æ˜¯å®ƒå¯ä»¥è¢«è½»æ˜“地获å–,然åŽäº§ç”Ÿå·¨å¤§çš„好处。 + +你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的boss这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ + +Next [如何优化循环](07-How to Optimize Loops.md) diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md new file mode 100644 index 0000000..f2f0c23 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -0,0 +1,15 @@ +# 如何优化循环 + +有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…需è¦ç‹¬åˆ›æ€§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: + +- 删除浮点è¿ç®—æ“作。 +- éžå¿…è¦æ—¶ä¸è¦åˆ†é…新的内存。 +- 把常é‡éƒ½æ”¾åœ¨ä¸€èµ·å£°æ˜Žã€‚ +- 把I/O放在缓冲里åšã€‚ +- å°½é‡ä¸ä½¿ç”¨é™¤æ³•。 +- å°½é‡ä¸é€‚用昂贵的类型转æ¢ã€‚ +- 移动指针而éžé‡æ–°è®¡ç®—索引。 + +这些æ“作的具体代价å–决于你的具体系统。在一些系统中,编译器和硬件会为你åšä¸€äº›äº‹æƒ…ã€‚ä½†å¿…é¡»æ¸…æ¥šï¼Œæœ‰æ•ˆçš„ä»£ç æ¯”需è¦åœ¨ç‰¹æ®Šå¹³å°ä¸‹ç†è§£çš„代ç è¦å¥½ã€‚ + +Next [如何处ç†I/O开销](08-How to Deal with IO Expense.md) diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md new file mode 100644 index 0000000..8593339 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -0,0 +1,13 @@ +# 如何处ç†I/O代价 + +在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜I/O,数æ®åº“查询,文件I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜I/O的问题,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法。 + +有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ–I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦æ‰§è¡ŒI/O,以此æ¥é¿å…I/O(通常é¿å…读å–ä¸€äº›æŠ½è±¡çš„å€¼ï¼‰ã€‚ç¼“å­˜çš„å…³é”®åœ¨äºŽè®©ï¼ˆä¸Šå±‚å¯¹äºŽï¼‰å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬ï¼Œå®Œå…¨é€æ˜Žã€‚主干的数æ®åªæœ‰ä¸€ä»½-周期。缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 + +ä»£è¡¨æ˜¯é€šè¿‡æ›´é«˜æ•ˆåœ°è¡¨ç¤ºæ•°æ®æ¥è®©I/O更廉价。这通常会é™åˆ¶å…¶ä»–çš„è¦æ±‚,比如å¯è¯»æ€§å’Œå¯ç§»æ¤æ€§ã€‚ + +代表通常å¯ä»¥ç”¨ä»–ä»¬ç¬¬ä¸€å®žçŽ°ä¸­çš„ä¸¤åˆ°ä¸‰ä¸ªå› å­æ¥åšä¼˜åŒ–。实现这点的技术包括使用二进制表示而éžäººç±»å¯è¯†åˆ«çš„æ–¹å¼,传递数æ®çš„åŒæ—¶ä¹Ÿä¼ é€’一个符å·è¡¨ï¼Œè¿™æ ·é•¿çš„符å·å°±ä¸éœ€è¦è¢«ç¼–ç ï¼Œæžç«¯çš„,å¯èƒ½ä¼šåƒå“ˆå¼—曼编ç ã€‚ + +一个å¶å°”å¯è¡Œçš„第三方技术是让计算更接近数æ®ï¼Œæ¥ä¼˜åŒ–本地引用。例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 + +Next [如何管ç†å†…å­˜](09-How to Manage Memory.md) diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md new file mode 100644 index 0000000..0f72b6a --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -0,0 +1,14 @@ +# 如何管ç†å†…å­˜ + +内存是一ç§ä½ ä¸å¯ä»¥è€—尽的ç贵资æºã€‚在一段时期里,你å¯ä»¥æ— è§†å®ƒï¼Œä½†æœ€ç»ˆä½ å¿…须决定如何管ç†å†…存。 + +堆内存是在å•一å­ç¨‹åºèŒƒå›´å¤–ï¼Œéœ€è¦æŒç»­ï¼ˆä¿ç•™ï¼‰çš„空间。一大å—内存,在没有东西指å‘它的时候,是无用的,因此被称为*垃圾*。根æ®ä½ æ‰€ä½¿ç”¨çš„系统的ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦è‡ªå·±æ˜¾å¼é‡Šæ”¾å°†è¦å˜æˆåžƒåœ¾çš„内存。更多时候你å¯èƒ½ä½¿ç”¨ä¸€ä¸ªæœ‰*垃圾回收器*的系统。一个垃圾回收器会自己注æ„到垃圾的存在并且在ä¸éœ€è¦ç¨‹åºå‘˜åšä»»ä½•事情的情况下释放它的内存空间。垃圾回收器是奇妙的:它å‡å°äº†é”™è¯¯ï¼Œç„¶åŽå¢žåŠ äº†ä»£ç çš„ç®€æ´æ€§ã€‚如果å¯ä»¥çš„è¯ï¼Œä½¿ç”¨åžƒåœ¾å›žæ”¶å™¨ã€‚ +但是å³ä½¿æœ‰äº†åžƒåœ¾å›žæ”¶æœºåˆ¶ï¼Œä½ è¿˜æ˜¯å¯èƒ½æŠŠæ‰€æœ‰çš„内存填满垃圾。一个典型的错误是把哈希表作为一个缓存,但是忘了删除对哈希表的引用。因为引用ä»ç„¶å­˜åœ¨ï¼Œè¢«å¼•用者是ä¸å¯å›žæ”¶ä½†å´æ— ç”¨çš„。这就å«åš*内存泄露*。你应该尽早å‘现并且修å¤å†…存泄露。如果你会长时间è¿è¡Œç³»ç»Ÿï¼Œå†…å­˜å¯èƒ½åœ¨æµ‹è¯•中ä¸ä¼šè¢«è€—尽,但å¯èƒ½åœ¨ç”¨æˆ·é‚£é‡Œè¢«è€—尽。 + +创建新对象在任何系统里都是有点昂贵的。然而,在å­ç¨‹åºé‡Œç›´æŽ¥ä¸ºå±€éƒ¨å˜é‡åˆ†é…内存通常很便宜,因为释放它的策略很简å•。你应该é¿å…ä¸å¿…è¦çš„对象创建。 + +当你å¯ä»¥å®šä¹‰ä½ ä¸€æ¬¡éœ€è¦çš„æ•°é‡çš„上界的时候,一个é‡è¦çš„æƒ…况出现了:如果这些对象都å ç”¨ç›¸åŒå¤§å°çš„内存,你å¯ä»¥ä½¿ç”¨å•独的一å—å†…å­˜ï¼Œæˆ–ç¼“å­˜ï¼Œæ¥æŒæœ‰æ‰€æœ‰çš„这些对象。你需è¦çš„对象å¯ä»¥åœ¨è¿™ä¸ªç¼“存里以循环的方å¼åˆ†é…å’Œé‡Šæ”¾ï¼Œæ‰€ä»¥å®ƒæœ‰æ—¶å€™è¢«ç§°ä¸ºçŽ¯ç¼“å­˜ã€‚è¿™é€šå¸¸æ¯”å †å†…å­˜åˆ†é…æ›´å¿«ã€‚(译者注:这也被称为对象池。) + +æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…须在æ¯å—内存上使用谨慎的智慧,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚你必须确定æ¯ä¸ªå†…å­˜åˆ†é…æ–¹æ³•的执行与最终都匹é…一个内存释放æ“作。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no free)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 + +Next [如何处ç†å¶çŽ°çš„Bug](10-How to Deal with Intermittent Bugs.md) diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md new file mode 100644 index 0000000..dba41e3 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -0,0 +1,17 @@ +# 如何处ç†å¶çŽ°çš„Bugs + +å¶çްbug是外部ä¸å¯è§çš„50足的èŽå­çš„亲戚。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ + +尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„bugå¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•记录这个bug会出现的情况,这样你å¯ä»¥çŒœæµ‹çœŸå®žçš„å½±å“å˜é‡æ˜¯ä»€ä¹ˆã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å˜é‡çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 + +å°è¯•,å°è¯•,å°è¯•去在一ç§å¯æŽ§çš„æ–¹å¼ä¸‹é‡çŽ°è¿™ä¸ªbug。如果你ä¸èƒ½é‡çŽ°å®ƒï¼Œç”¨æ—¥å¿—ç³»ç»Ÿç»™å®ƒè®¾ç½®ä¸€ä¸ªåœˆå¥—ï¼Œæ¥åœ¨ä½ éœ€è¦çš„æ—¶å€™ï¼Œåœ¨å®ƒçœŸçš„å‘生的时候,记录你猜想的,需è¦çš„ä¸œè¥¿ã€‚é‡æ–°è®¾è®¡è¿™ä¸ªåœˆå¥—,如果这个bugåªå‘生在产å“中,且ä¸åœ¨ä½ çš„猜想中的è¯ï¼Œè¿™å¯èƒ½æ˜¯ä¸€ä¸ªé•¿çš„过程。你从日志中得到的(信æ¯ï¼‰å¯èƒ½ä¸èƒ½æä¾›è§£å†³æ–¹æ¡ˆï¼Œä½†å¯èƒ½ç»™ä½ è¶³å¤Ÿçš„ä¿¡æ¯åŽ»ä¼˜åŒ–è¿™ä¸ªæ—¥å¿—ã€‚ä¼˜åŒ–åŽçš„æ—¥å¿—系统å¯èƒ½èŠ±å¾ˆé•¿æ—¶é—´æ‰èƒ½è¢«æ”¾å…¥äº§å“中使用。然åŽï¼Œä½ å¿…须等待bug釿–°å‡ºçŽ°ä»¥èŽ·å¾—æ›´å¤šçš„ä¿¡æ¯ã€‚这个循环å¯èƒ½ä¼šç»§ç»­å¥½å‡ æ¬¡ã€‚ + +我曾创建过的最愚蠢的å¶çްbug出现在,一个函数å¼ç¼–程语言里为类工程åšå¤šçº¿ç¨‹å®žçŽ°ã€‚æˆ‘éžå¸¸ä»”细地ä¿è¯äº†å‡½æ•°å¼ç¨‹åºçš„å¹¶å‘估计,还有好的CPU使用(在这个例å­é‡Œï¼Œæ˜¯8个CPU)。我简å•åœ°å¿˜è®°äº†åŒæ­¥åžƒåœ¾å›žæ”¶å™¨ã€‚系统å¯èƒ½è¿è¡Œäº†å¾ˆé•¿ä¸€æ®µæ—¶é—´ï¼Œç»å¸¸ç»“æŸåœ¨æˆ‘开始任何一个任务的时候,在任何能被注æ„到的事情出错之å‰ã€‚æˆ‘å¾ˆé—æ†¾åœ°æ‰¿è®¤åœ¨æˆ‘ç†è§£æˆ‘的错误之å‰ï¼Œæˆ‘甚至开始怀疑硬件了。 + +在工作中我们最近有这样一个å¶çŽ°çš„bug让我们花了几个星期æ‰å‘现。我们有一个多线程的基于Apache™的Javaâ„¢webæœåС噍,在维护第一个页é¢è·³è½¬çš„æ—¶å€™ï¼Œæˆ‘们在四个独立线程里以4个独立的线程而éžé¡µé¢è·³è½¬çº¿ç¨‹ä¸ºä¸€ä¸ªå°çš„é›†åˆæ‰§è¡Œæ‰€æœ‰çš„I/Oæ“作。æ¯ä¸€æ¬¡è·³è½¬ä¼šäº§ç”Ÿæ˜Žæ˜¾çš„å¡é¡¿ç„¶åŽåœæ­¢åšä»»ä½•æœ‰ç”¨çš„äº‹æƒ…ï¼Œç›´åˆ°å‡ ä¸ªå°æ—¶åŽï¼Œæˆ‘们的日志å…许我们去了解å‘生了什么。因为我们有四个线程,在一个线程内部å‘ç”Ÿè¿™ç§æƒ…况并䏿˜¯ä»€ä¹ˆå¤§é—®é¢˜ï¼Œé™¤éžæ‰€æœ‰çš„四个线程都阻塞了。然åŽè¢«è¿™äº›çº¿ç¨‹æŽ’空的队列会迅速填充所有å¯ç”¨çš„内存,然åŽå¯¼è‡´æˆ‘们的æœåŠ¡å™¨å´©æºƒã€‚è¿™ä¸ªbug花了我们一个星期去æªä½è¿™ä¸ªé—®é¢˜ï¼Œä½†æˆ‘们ä»ç„¶ä¸çŸ¥é“什么导致了这个现象,ä¸çŸ¥é“它什么时候会å‘生,甚至ä¸çŸ¥é“它们阻塞的时候,线程们在干什么。 + +这表明了有关使用第三方软件的一些风险。我们在使用一段授æƒçš„代ç ï¼Œä»Žæ–‡æœ¬ä¸­ç§»é™¤HTML标签。å—它的起æºçš„å½±å“,我们把它å«åšæ³•å›½è„±è¡£èˆžè€…ã€‚å°½ç®¡æˆ‘ä»¬æœ‰æºä»£ç ï¼ˆç”±è¡·æ„Ÿè°¢ï¼ï¼‰ï¼Œæˆ‘们没有仔细研究它,直到查看我们æœåŠ¡å™¨çš„æ—¥å¿—çš„æ—¶å€™ï¼Œæˆ‘ä»¬æœ€ç»ˆæ„识到“法国脱衣舞者â€ä¸­ï¼Œé€šä¿¡çº¿ç¨‹é˜»å¡žäº†ã€‚ + +这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是N平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。由于这些文本通常都会出现,我们å¯ä»¥é©¬ä¸Šå‘现这个bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 + +Next [如何学习设计技能](11-How to Learn Design Skills.md) diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md new file mode 100644 index 0000000..1fea37e --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -0,0 +1,9 @@ +# 如何学习设计技能 + +为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œå‡ºçŽ°åœ¨ä»–èº«è¾¹ï¼Œå­¦ä¹ ä»–çš„è¡Œä¸ºã€‚ç„¶åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如android系统中的谷歌官方应用)。在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 + +ç„¶åŽä½ å¿…须自己动手了。从一个å°çš„工程开始,当你最åŽå®Œæˆæ—¶ï¼Œè€ƒè™‘为什么这个设计失败了或æˆåŠŸäº†ï¼Œä½ æ˜¯æ€Žæ ·å离你最åˆçš„设想的。然åŽç»§ç»­åŽ»ç€æ‰‹å¤§ä¸€ç‚¹çš„å·¥ç¨‹ï¼Œåœ¨ä¸Žå…¶ä»–äººç»“åˆæ—¶ä¼šæ›´æœ‰å¸Œæœ›ã€‚设计是一ç§éœ€è¦èŠ±å¾ˆå¤šå¹´åŽ»å­¦ä¹ çš„å…³äºŽè¯„åˆ¤çš„äº‹æƒ…ã€‚ä¸€ä¸ªèªæ˜Žçš„程åºå‘˜å¯ä»¥å­¦ä¹ åœ¨ä¸¤ä¸ªæœˆå†…充分学好这ç§åŸºç¡€ç„¶åŽä»Žè¿™é‡Œå¼€å§‹è¿›æ­¥ã€‚ + +å‘展出你自己的风格是自然而有用的,但记ä½ï¼Œè®¾è®¡æ˜¯ä¸€ç§è‰ºæœ¯ï¼Œè€Œä¸æ˜¯ä¸€ç§ç§‘学。人们写的关于这个主题的书都有一ç§ä½¿å¾—å®ƒå¥½åƒæ˜¯ç§‘学的既定的兴趣。ä¸è¦æ­¦æ–­å¯¹å¾…特定的设计风格。 + +Next [如何进行实验](12-How to Conduct Experiments.md) diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md new file mode 100644 index 0000000..d497904 --- /dev/null +++ b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -0,0 +1,22 @@ +# 如何进行实验 + +已故的伟大的Edsger Dijkstra曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] + +> ...å±å®³å·²ç»å‡ºçŽ°ï¼šä¸»é¢˜çŽ°åœ¨å·²ç»å˜æˆäº†â€œè®¡ç®—机科学†- è¿™å®žé™…ä¸Šï¼Œåƒæ˜¯æŠŠå¤–科手术引用为“手术刀科学†- 这在人们心中深深æ¤å…¥äº†è¿™æ ·ä¸€ä¸ªæ¦‚念:计算机科学是关于机器和它们的外围设备的。 + +编程ä¸åº”该是一门实验科学,但大多数èŒä¸šç¨‹åºå‘˜å¹¶æ²¡æœ‰ä¿å«Dijkstra对于计算机科学的解释的è£è€€ã€‚æˆ‘ä»¬å¿…é¡»åœ¨å®žéªŒçš„é¢†åŸŸé‡Œå·¥ä½œï¼Œæ­£å¦‚ä¸€éƒ¨åˆ†ï¼Œä½†éžæ‰€æœ‰çš„,物ç†å­¦å®¶åšçš„。如果三åå¹´åŽï¼Œç¼–程å¯ä»¥åœ¨ä¸è¿›è¡Œä»»ä½•å®žéªŒçš„å‰æä¸‹è¿›è¡Œï¼Œè¿™å°†æ˜¯è®¡ç®—æœºç§‘å­¦çš„ä¸€ä¸ªå·¨å¤§æˆå°±ã€‚ + +你需è¦è¿›è¡Œçš„实验包括: +- 用å°çš„例孿µ‹è¯•系统以验è¯å®ƒä»¬éµå¾ªæ–‡æ¡£ï¼Œæˆ–者在没有文档时,ç†è§£å®ƒä»¬çš„å应; +- 测试一些å°çš„代ç ä¿®æ”¹åŽ»éªŒè¯å®ƒä»¬æ˜¯å¦ç¡®å®žä¿®å¤äº†ä¸€ä¸ªbugï¼› +- 由于对一个系统ä¸å®Œå…¨çš„ç†è§£ï¼Œéœ€è¦åœ¨ä¸¤ç§ä¸åŒæƒ…况下测é‡å®ƒä»¬çš„æ€§èƒ½è¡¨çŽ°ï¼› +- 检查数æ®çš„完整性,和 +- 对困难的或者难以é‡çŽ°çš„bug,收集解决方案中å¯èƒ½æç¤ºçš„统计数æ®ã€‚ + +我ä¸è®¤ä¸ºåœ¨è¿™ç¯‡æ–‡ç« é‡Œæˆ‘å¯ä»¥è®²è¿°å®žéªŒçš„设计,你会在实践中学习到这方é¢çš„知识。然而,我å¯ä»¥æä¾›ä¸¤ç‚¹å»ºè®®ï¼š + +第一,对你的å‡è®¾æˆ–è€…ä½ è¦æµ‹è¯•的断言è¦éžå¸¸æ¸…楚。把å‡è®¾å†™ä¸‹æ¥ä¹Ÿæ˜¯å¾ˆæœ‰ç”¨çš„,尤其是如果你有点迷惑或者与其他人åˆä½œæ—¶ã€‚ + +你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验去æä¾›å¤§éƒ¨åˆ†å¯èƒ½çš„ä¿¡æ¯ã€‚ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šå½±å“ä¿æŒå®žéªŒç®€å•的目的 - 你必须通过ç»éªŒæ¥å‘展这ç§è¯„判的能力。 + +Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why Estimation is Important.md) diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md new file mode 100644 index 0000000..c610027 --- /dev/null +++ b/zh/1-Beginner/README.md @@ -0,0 +1,27 @@ +# 1. 入门 + +- 个人技能 + - [学会Debug](Personal-Skills/01-Learn To Debug.md) + - [如何分离问题debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何去掉一个Error](Personal-Skills/03-How to Remove an Error.md) + - [如何用Logæ¥Debug](Personal-Skills/04-How to Debug Using a Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How to Understand Performance Problems.md) + - [如何解决性能问题](Personal-Skills/06-How to Fix Performance Problems.md) + - [如何优化循环](Personal-Skills/07-How to Optimize Loops.md) + - [如何处ç†I/O开销](Personal-Skills/08-How to Deal with IO Expense.md) + - [如何管ç†å†…å­˜](Personal-Skills/09-How to Manage Memory.md) + - [如何处ç†å¶çŽ°çš„Bug](Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何学习设计技能](Personal-Skills/11-How to Learn Design Skills.md) + - [如何进行实验](Personal-Skills/12-How to Conduct Experiments.md) +- 团队技能 + - [为什么预估很é‡è¦](Team-Skills/01-Why Estimation is Important.md) + - [如何预估编程时间](Team-Skills/02-How to Estimate Programming Time.md) + - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How to Find Out Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How to Utilize People as Information Sources.md) + - [如何优雅地写文档](Team-Skills/05-How to Document Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How to Work with Poor Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How to Use Source Code Control.md) + - [如何进行å•元测试](Team-Skills/08-How to Unit Test.md) + - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](Team-Skills/09-Take Breaks when Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How to Recognize When to Go Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How to Deal with Difficult People.md) diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md new file mode 100644 index 0000000..37e646b --- /dev/null +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -0,0 +1,14 @@ +# 为什么评估很é‡è¦ + +为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 + +好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件消耗的时间总是被管ç†è€…å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšè¿™äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ç„¶è€Œï¼Œä¸æŽ¥å—这个任务的ä¸å¯èƒ½æ€§æ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚然而,评估这件事情,有很大的错误传达的空间,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地想: +> 我估计,如果我确实ç†è§£äº†è¿™ä¸ªé—®é¢˜ï¼Œæˆ‘们在5周内有50%çš„å¯èƒ½å®Œæˆä»»åŠ¡ï¼ˆå¦‚æžœåœ¨æ­¤æœŸé—´æ²¡æœ‰äººå¹²æ‰°æˆ‘ä»¬çš„è¯ï¼‰ã€‚ + +真实的å«ä¹‰æ˜¯ï¼š + +> 我ä¿è¯ä»ŽçŽ°åœ¨å¼€å§‹äº”ä¸ªæ˜ŸæœŸå†…å®Œæˆä»»åŠ¡ã€‚ + +这个常è§çš„解释问题需è¦ä½ ä¸“门与你的bosså’Œé¡¾å®¢è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡ä»–们对你æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ + +Next [如何估计编程时间](02-How to Estimate Programming Time.md) diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md new file mode 100644 index 0000000..6b9c3b8 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -0,0 +1,21 @@ +# 如何评估编程时间 + +评估需è¦å®žè·µï¼Œä¹Ÿéœ€è¦åŠ³åŠ¨ã€‚å› ä¸ºå®ƒéœ€è¦èŠ±å¦‚æ­¤é•¿çš„æ—¶é—´ä»¥è‡³äºŽè¯„ä¼°è¯„ä¼°çš„æ—¶é—´å¯èƒ½æ˜¯ä¸€ä¸ªå¥½ä¸»æ„ï¼Œå°¤å…¶æ˜¯ä½ è¢«è¦æ±‚去评估一些巨大的事情。 + +å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且想è¦å¼€å¿ƒçš„,åœä¸‹æ¥å½“然会让åœä¸‹æ¥çš„事情ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 + +åœä¸‹æ¥æ—¶ï¼Œè€ƒè™‘ä¸€äº›äº‹æƒ…æˆ–è€…é‡æ–°ä¸ºä»»åС釿–°å®šåž‹æˆä¸ºå¯èƒ½ã€‚如果政策压力å…许,这是执行评估的最准确的方å¼ï¼Œå¹¶ä¸”它会产生确实的进度。 + +在没有时间åšè°ƒæŸ¥çš„æ—¶å€™ï¼Œä½ é¦–先应该éžå¸¸æ¸…晰地建立评估的å«ä¹‰ã€‚é¦–å…ˆé‡æ–°é˜è¿°è¦è¯„估的内容,还有你编写的评估的最åŽéƒ¨åˆ†ã€‚釿–°æž„建任务为进度化的更å°çš„å­ä»»åŠ¡ï¼Œç›´åˆ°æ¯ä¸ªå°ä»»åŠ¡éœ€è¦çš„æ—¶é—´ä¸è¶…è¿‡ä¸€å¤©ï¼ˆç†æƒ³æƒ…况是æ¯ä¸ªä»»åŠ¡çš„é•¿åº¦æœ€å¤šä¸ºä¸€å¤©ï¼‰ï¼Œä»¥æ­¤å‡†å¤‡ä¸€ä¸ªå†™å¥½çš„è¯„ä¼°è®¡åˆ’ã€‚æœ€é‡è¦çš„事情是ä¸è¦æ¼æŽ‰ä»»ä½•事情。例如,文档,测试,规划的时间,与其他å°ç»„交æµçš„æ—¶é—´ï¼Œè¿˜æœ‰åº¦å‡æ—¶é—´ï¼Œè¿™äº›éƒ½æ˜¯å¾ˆé‡è¦çš„。如果你æ¯å¤©éƒ½è¦èŠ±æ—¶é—´å’Œä¸€äº›å‚»é€¼äº¤æµï¼Œåœ¨è¯„估里为这件事情划一个明确的时间界é™ã€‚这能让你的boss对于你将è¦èŠ±è´¹çš„æœ€å°‘æ—¶é—´æœ‰äº†ä¸€ä¸ªè®¤è¯†ï¼Œå¹¶ä¸”å¯èƒ½ç»™ä½ æ›´å¤šçš„æ—¶é—´ã€‚ + +我认识一些会éšå¼åœ°å¡«å……评估时间的好的程åºå‘˜ï¼Œä½†æˆ‘推èä½ ä¸è¦è¿™æ ·åšã€‚填充的一个结果是对你的信任å¯èƒ½è¢«è€—尽。例如,一个工程师å¯èƒ½ä¸ºä¸€ä¸ªå°†è¦èŠ±è´¹ä¸€å¤©çš„å·¥ä½œè¯„ä¼°ä¸ºä¸‰å¤©ã€‚è¿™ä¸ªå·¥ç¨‹å¸ˆå¯èƒ½è®¡åˆ’花两天去为代ç å†™æ–‡æ¡£ï¼Œæˆ–者花两天去åšä¸€äº›å…¶ä»–æœ‰ç”¨çš„å·¥ç¨‹ã€‚ä½†å½“ä»»åŠ¡åœ¨ä¸€å¤©å†…å®Œæˆæ—¶ï¼Œå¦‚果它在那天暴露出æ¥çš„è¯ï¼Œè¿™æ˜¯å¯ä»¥å¯Ÿè§‰çš„ï¼Œå¹¶ä¸”æ¾æ‡ˆæˆ–高估的表现会出现。为你确实è¦åšçš„事情åšåˆé€‚的剖æžè¦å¥½å¾—多。如果写文档需è¦èб䏤å€äºŽç¼–程的时间,并且评估的结果就是这样的,让这对管ç†è€…å¯è§å°±èƒ½å¾—到巨大的好处。 + +相å,显å¼å¡«å……。如果一个任务å¯èƒ½èŠ±ä¸€å¤©ï¼Œä½†å¦‚æžœä½ çš„æ–¹æ³•æ²¡æœ‰ç”Ÿæ•ˆï¼Œå¯èƒ½èбå天 - 用æŸç§æ–¹å¼åœ¨ä½ çš„评估里记下这个情况,å¦åˆ™ï¼Œè‡³å°‘为这个å¯èƒ½æ€§ï¼Œè¯„估一个æƒé‡è®¡ç®—å¯èƒ½çš„æ—¶é—´ã€‚任何你å¯ä»¥è¯†åˆ«å’Œè¿›è¡Œè¯„估的风险因素应该在时间表里被体现。一个人ä¸å¤ªå¯èƒ½åœ¨ç»™å®šçš„任何星期都生病。但一个有很多工程师的大项目会需è¦ä¸€äº›ç–¾ç—…æ—¶é—´ï¼Œè¿˜æœ‰ä¼‘å‡æ—¶é—´ã€‚或者,强制的公å¸èŒƒå›´çš„培训研讨会的å¯èƒ½æ€§ï¼Ÿå¦‚果这å¯ä»¥é¢„估,也把它算进æ¥ã€‚当然,还有一些未知的未知,或者 [unk-unk](../../4-Glossary.md) 。Unk-unk在定义上是ä¸èƒ½è¢«ç‹¬ç«‹è¯„估的。你å¯ä»¥å°è¯•为所有unk-unk创建一个全局的界线,或者用你与你的boss交æµå¥½çš„å…¶ä»–æ–¹å¼å޻处ç†å®ƒä»¬ã€‚然而,你ä¸èƒ½è®©ä½ çš„bosså¿˜è®°å®ƒä»¬çš„å­˜åœ¨ã€‚åœ¨æŠŠè¯„ä¼°å˜æˆæ—¶é—´è¡¨çš„过程中,把它们é—忘是超级容易的。 + +在一个团队环境里,你应该让任务的执行者去åšè¿™ç§è¯„估,而且你们应该在团队范围内对评估的结果å–得一致。人与人在技术,ç»éªŒï¼Œå‡†å¤‡å’Œä¿¡å¿ƒä¸Šéƒ½æœ‰å¾ˆå¤šçš„ä¸åŒã€‚当一个牛逼的程åºå‘˜ä¸ºä»–自己评估了时间,然åŽä¸€äº›å¼±ä¸€ç‚¹çš„程åºå‘˜è¢«è¿™ç§è¯„ä¼°çº¦æŸæ—¶ï¼Œç¾éš¾é™ä¸´äº†ã€‚整个团队在一个一行一行的细致的评估计划上å–得的一致,é˜è¿°äº†å›¢é˜Ÿçš„ç†è§£ï¼Œä»¥åŠå…许在策略上对资æºçš„釿–°åˆ†é…的机会(比如,把负担从弱一点的团队æˆå‘˜é‚£é‡Œç§»åˆ°å¼ºä¸€ç‚¹çš„æˆå‘˜é‚£é‡Œï¼‰ã€‚ + +如果有ä¸èƒ½è¯„估的大风险,你的责任是足够有力地é˜è¿°ä»¥è‡³äºŽä½ çš„管ç†è€…ä¸ä¼šåœ¨è¿™ä¸ªé—®é¢˜ä¸Šåšæ‰¿è¯ºï¼Œåœ¨é£Žé™©å‘生时也ä¸ä¼šå˜å¾—çª˜è¿«ã€‚è¿™ç§æƒ…况下,任何需è¦çš„事情都有希望被执行æ¥å‡å°è¿™ä¸ªé£Žé™©ã€‚ + +如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 + +Next [如何å‘现信æ¯](03-How to Find Out Information.md) diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md new file mode 100644 index 0000000..f291976 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -0,0 +1,19 @@ +# 如何å‘çŽ°ä¿¡æ¯ + +你所æœå¯»çš„事情的本质决定了你应该如何去寻找它。 + +如果你需è¦å®¢è§‚的而且容易辨认的*关于具体事物*的信æ¯ï¼Œä¾‹å¦‚一个软件的最新补ä¸ç‰ˆæœ¬ï¼Œå¯ä»¥åœ¨Internetæœç´¢ï¼Œç¤¼è²Œçš„询问很多的人,或者å‘起一个讨论组。ä¸è¦åœ¨ç½‘上æœç´¢ä»»ä½•带有观点或主观解释的东西:能够抵达真相的概率太低了。 + +如果你需è¦â€œä¸€äº›ä¸»è§‚的普é知识â€ï¼Œäººä»¬å¯¹è¿™äº›ä¸œè¥¿å·²æœ‰çš„æ€è€ƒåŽ†å²ï¼Œé‚£å°±å޻图书馆å§ã€‚ä¾‹å¦‚ï¼Œå­¦ä¹ æ•°å­¦æˆ–è˜‘è‡æˆ–神秘的东西,去图书馆å§ã€‚ + +如果你需è¦çŸ¥é“*如何åšä¸€äº›ç碎的事情*,找两三本关于这个主题的书,仔细阅读。你å¯ä»¥ä»Žç½‘络上学到如何åšå¥½è¿™äº›ç碎的事情,比如安装一个软件包。你甚至å¯ä»¥å­¦åˆ°ä¸€äº›é‡è¦çš„东西,例如好的编程技术,但相比读一本纸质书的相关部分,你很容易花更多时间在æœç´¢å’Œå¯¹ç»“果排åºï¼Œä»¥åŠè¯„估结果的æƒå¨æ€§ã€‚ + +如果你需è¦*å¯èƒ½æ²¡æœ‰äººçŸ¥é“的信æ¯*,例如,“这个新å“ç‰Œçš„è½¯ä»¶åœ¨æµ·é‡æ•°æ®çš„æƒ…况下能工作å—â€ï¼Œä½ ä»ç„¶å¿…须在网络和图书馆里æœç´¢ã€‚在这些选项都完全竭尽åŽï¼Œä½ å¯èƒ½éœ€è¦è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥æžæ¸…楚这个问题。 + +如果你需è¦ä¸€äº›è€ƒè™‘了æŸäº›ç‰¹æ®ŠçŽ¯å¢ƒçš„è§‚ç‚¹æˆ–ä¼°å€¼ï¼Œå’Œä¸€ä¸ªä¸“å®¶èŠèŠã€‚例如,如果你想è¦çŸ¥é“用Lisp构建一个现代数æ®åº“管ç†ç³»ç»Ÿæ˜¯å¦æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,你应该和一个Lisp专家和一个数æ®åº“专家èŠä¸€èŠã€‚ + +如果你想è¦çŸ¥é“*它具体是怎样的*,比如一个还未å‘布的在一个特定程åºä¸Šæ›´å¿«çš„算法,跟一些在这个领域工作的人èŠèŠã€‚ + +如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且已ç»å®Œæˆäº†ä½ çš„ä»»åŠ¡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒèµžåŒçš„æ„è§ï¼Œå对的æ„è§ï¼Œä½†å¯èƒ½ä»ç„¶æœ‰è¿Ÿç–‘。你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 + +Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How to Utilize People as Information Sources.md) diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md new file mode 100644 index 0000000..cc3cbf1 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -0,0 +1,15 @@ +# å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº + +å°Šé‡å…¶ä»–æ¯ä¸ªäººçš„æ—¶é—´ï¼Œä¸Žä½ çš„æ—¶é—´ç›¸å¹³è¡¡ã€‚问别人问题比得到答案能获得更多。人们会从你的存在和倾å¬ç‰¹å®šçš„问题从你身上学到东西。你也å¯ä»¥ç”¨åŒæ ·çš„æ–¹å¼ä»Žåˆ«äººèº«ä¸Šå­¦ä¹ åˆ°ä¸œè¥¿ï¼Œä½ å¯èƒ½å­¦åˆ°ä½ æ­£åœ¨æœå¯»çš„东西的答案。这通常比你的问题更加é‡è¦å¾—多。 + +然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的boss交谈而éžå’Œä½ bossçš„boss交谈,但你å¶å°”也å¯ä»¥å’Œä½ bossçš„boss交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ + +基本的规则是,æ¯ä¸ªä¸Žä½ äº¤è°ˆçš„人都能ç¨å¾®å—益,他们与你èŠå¾—更多,他们能获得的收益越少。你的应该给他们æä¾›è¿™ç§å¥½å¤„,还有得到与他们交æµçš„好处,平衡这ç§å¥½å¤„与花费的时间。 + +å°Šé‡ä½ è‡ªå·±çš„æ—¶é—´æ˜¯å¾ˆé‡è¦çš„。如果和一些人èŠå¤©ï¼Œå³ä½¿è¿™ä¼šæ¶ˆè€—他们的时间,结果会节çœä½ å¾ˆå¤šçš„æ—¶é—´ï¼Œé‚£ä¹ˆä½ åº”该这样åšï¼Œé™¤éžä½ è®¤ä¸ºä»–们的时间在这个因素上,对整个集体,比你的时间更加有价值。 + +ä¸€ä¸ªå¥‡æ€ªçš„ä¾‹å­æ˜¯æš‘期实习生。一个处于高技术å«é‡ä½ç½®çš„æš‘期实习生ä¸èƒ½è¢«æœŸæœ›åŽ»å®Œæˆå¤ªå¤šä¸œè¥¿ï¼›ä»–们å¯èƒ½ä¼šæŠŠæ¯ä¸ªäººçº ç¼ åˆ°åœ°ç‹±ã€‚但为什么这是被å…许的呢?因为被纠缠的人从实习生身上å¯ä»¥æŽ¥æ”¶åˆ°ä¸€äº›é‡è¦çš„东西。他们得到了一点炫耀的机会,他们å¯èƒ½æœ‰æœºä¼šåŽ»å¬åˆ°ä¸€äº›æ–°çš„æ€æƒ³ï¼Œä»–ä»¬æœ‰æœºä¼šå¯ä»¥ä»Žä¸åŒçš„角度去看问题。他们å¯èƒ½ä¼šå°è¯•æ‹›è˜è¿™ä¸ªå®žä¹ ç”Ÿï¼Œä½†å³ä½¿ä¸æ˜¯è¿™æ ·ï¼Œä»–们也获得了很多。 + +如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但我认为å°çš„努力å¯ä»¥åœ¨é”€å”®åŽ‹åŠ›ä¸Šäº§ç”Ÿå¥½çš„å½±å“。 + +Next [如何优雅地写文档](05-How to Document Wisely.md) diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md new file mode 100644 index 0000000..889b3c8 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -0,0 +1,20 @@ +# å¦‚ä½•ç¿æ™ºåœ°å†™æ–‡æ¡£ + +人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥ä¸€ç‚¹å¥½çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 + +没有其他事情比精确估计 æŠŠå¥½çš„æ–‡æ¡£è½¬ä¸ºæ”¾æ¾æ–‡æ¡£è¦æ±‚的估计 æ›´ä¸ºæœ‰æ•ˆçŽ‡ã€‚çœŸç›¸æ˜¯å†·é…·è€Œè‰°éš¾çš„ï¼šæ–‡æ¡£ï¼Œå°±åƒæµ‹è¯•,会花比开å‘代ç å¤šå‡ å€çš„æ—¶é—´ã€‚ + +首先,写好的文档是好的写作。我建议你找一些关于写作的事情,学习,练习他们。但å³ä½¿ä½ æ˜¯ä¸€ä¸ªç³Ÿç³•的写手或者对你需è¦å†™æ–‡æ¡£çš„语言掌æ¡ä¸å¥½ï¼Œè¿™æ¡é»„金规则是你真正需è¦çš„ï¼šå·±æ‰€ä¸æ¬²ï¼Œå‹¿æ–½äºŽäººã€‚花时间去确实地æ€è€ƒè°ä¼šè¯»ä½ çš„æ–‡æ¡£ï¼Œä»–们从文档中想è¦èŽ·å¾—çš„çœŸæ­£çš„ä¸œè¥¿æ˜¯ä»€ä¹ˆï¼Œå¹¶ä¸”ä½ å¯ä»¥å¦‚何把这些东西交给他们。如果你这样åšï¼Œä½ å°†ä¼šå˜æˆä¸€ä¸ªè¶…è¿‡å¹³å‡æ°´å¹³çš„æ–‡æ¡£ç¼–写者,和一个好的程åºå‘˜ã€‚ + +当代ç å¯ä»¥è‡ªæˆæ–‡æ¡£æ—¶ï¼Œä¸Žæä¾›æ–‡æ¡£ç»™éžç¨‹åºå‘˜çœ‹ç›¸å,我认识的最好的程åºå‘˜ä»¬æœ‰è¿™æ ·ä¸€ä¸ªæ™®é的观点:编写具有自我解释功能的代ç ï¼Œä»…在你ä¸èƒ½é€šè¿‡ä»£ç æ¸…晰解释其å«ä¹‰çš„地方,æ‰å†™æ³¨é‡Šã€‚æœ‰ä¸¤ä¸ªå¥½çš„åŽŸå› ï¼šç¬¬ä¸€ï¼Œä»»ä½•äººéœ€è¦æŸ¥çœ‹ä»£ç çº§åˆ«çš„æ–‡æ¡£å¤§å¤šæ•°æƒ…况下都能够并且更喜欢阅读代ç ã€‚ä¸å¯å¦è®¤çš„,有ç»éªŒçš„程åºå‘˜ä¼¼ä¹Žæ¯”åˆå­¦è€…更容易åšåˆ°è¿™ä»¶äº‹ï¼Œç„¶è€Œï¼Œæ›´é‡è¦çš„æ˜¯ï¼Œæ²¡æœ‰æ–‡æ¡£çš„è¯ï¼Œä»£ç å’Œæ–‡æ¡£ä¸ä¼šæ˜¯è‡ªç›¸çŸ›ç›¾çš„。æºä»£ç æœ€ç³Ÿç³•的情况下å¯èƒ½æ˜¯é”™è¯¯å¹¶ä¸”令人困惑的。没有完美编写的文档,å¯èƒ½è¯´è°Žï¼Œè¿™å¯ç³Ÿç³•一åƒå€ã€‚ + +负责任的程åºå‘˜ä¹Ÿä¸èƒ½è®©è¿™ä»¶äº‹å˜å¾—更简å•些。如何写自解释的代ç ï¼Ÿé‚£æ„味ç€ä»€ä¹ˆï¼Ÿå®ƒæ„味ç€ï¼š + +- 编写知é“别人会去阅读的代ç (译者注:编写给人看的代ç ) +- è¿ç”¨é»„金法则 +- 选择直接的解决方案,å³ä½¿ä½ å¯ä»¥æ›´å¿«åœ°èŽ·å¾—å¦ä¸€ä¸ªè§£å†³æ–¹æ¡ˆ +- 牺牲那些å¯èƒ½æ··æ·†ä»£ç çš„å°çš„优化 +- 为读者考虑,把你ç贵的时间花在让她更加容易阅读的事情上,并且 +- 永远ä¸è¦ä½¿ç”¨è¿™æ ·çš„å‡½æ•°åæ¯”如 `foo`,`bar`, 或 `doIt`! + +Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How to Work with Poor Code.md) diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md new file mode 100644 index 0000000..0042b75 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -0,0 +1,11 @@ +# 如何在糟糕的代ç ä¸Šå·¥ä½œ + +工作在别人写的糟糕的代ç ä¸Šæ˜¯å¸¸æœ‰çš„事。ä¸è¦æŠŠä»–们想得太糟,直到你用他们的鞋å­èµ°è·¯æ—¶ã€‚他们å¯èƒ½è¢«è¦æ±‚éžå¸¸è‡ªè§‰åœ°å¿«é€Ÿå®Œæˆä¸€äº›ä¸œè¥¿æ¥æ»¡è¶³æ—¶é—´è¡¨çš„压力。ä¸ç®¡ä¹‹å‰å‘ç”Ÿäº†ä»€ä¹ˆï¼Œä¸ºäº†åœ¨ä¸æ¸…晰的代ç ä¸Šå·¥ä½œï¼Œä½ å¿…é¡»ç†è§£å®ƒã€‚ç†è§£å®ƒéœ€è¦èŠ±è´¹ä¸€äº›å­¦ä¹ æ—¶é—´ï¼Œä½ å¿…é¡»åšæŒä»Žæ—¶é—´è¡¨ä¸­æŸäº›éƒ¨åˆ†åˆ’出一部分时间æ¥åšè¿™ä»¶äº‹ã€‚为了ç†è§£å®ƒä»¬ï¼Œä½ å¿…须读æºä»£ç ï¼Œä½ å¯èƒ½éœ€è¦åœ¨ä¸Šé¢åšä¸€äº›å®žéªŒã€‚ + +å³ä½¿æ˜¯ä¸ºä½ è‡ªå·±ï¼Œç¼–写文档也是一个好的时机,因为å°è¯•为你的代ç ç¼–写文档会强迫你从你å¯èƒ½æ²¡æœ‰è€ƒè™‘过的角度æ€è€ƒï¼Œå¹¶ä¸”完æˆçš„æ–‡æ¡£å¯èƒ½ä¼šæœ‰ç”¨ã€‚当你在åšè¿™ä¸ªæ—¶ï¼Œè€ƒè™‘é‡å†™éƒ¨åˆ†æˆ–所有代ç ä¼šæ¶ˆè€—你什么东西。是å¦é‡å†™ä¸€éƒ¨åˆ†ä»£ç äº‹å®žä¸ŠçœŸçš„ä¼šèŠ‚çœæ—¶é—´ï¼Ÿä½ é‡å†™ä»£ç åŽä½ ä¼šæ›´ä¿¡ä»»å®ƒå—?在这里å°å¿ƒä½ çš„傲慢。如果你é‡å†™å®ƒï¼Œä½ å¤„ç†å®ƒä¼šæ›´å®¹æ˜“,但下一个必须阅读它的人是å¦çœŸçš„æ›´åŠ å®¹æ˜“ï¼Ÿå¦‚æžœä½ é‡å†™äº†ï¼Œæµ‹è¯•çš„è´Ÿæ‹…åœ¨å“ªé‡Œï¼Ÿé‡æ–°æµ‹è¯•çš„éœ€è¦æ˜¯å¦å¤§äºŽå¯èƒ½èŽ·å¾—çš„å¥½å¤„ï¼Ÿ + +在任何对你没有编写的代ç çš„评估中,代ç çš„è´¨é‡ä¼šå½±å“你对风险问题的认识以åŠä¸€äº›æœªçŸ¥çš„事情。 + +铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡çš„å¥½å¤„ã€‚ç‰¹åˆ«çš„ï¼Œä½ å¯ä»¥å°è¯•隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 + +Next [如何使用æºä»£ç æŽ§åˆ¶](07-How to Use Source Code Control.md) diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md new file mode 100644 index 0000000..9cbf927 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -0,0 +1,9 @@ +# 如何使用æºä»£ç æŽ§åˆ¶ + +æºä»£ç æŽ§åˆ¶ç³»ç»Ÿè®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ + +我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 + +使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。æäº¤é”™è¯¯é™ä½Žä½ é˜Ÿå‹çš„速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ + +Next [如何进行å•元测试](08-How to Unit Test.md) diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md new file mode 100644 index 0000000..63bc314 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -0,0 +1,9 @@ +# 如何进行å•元测试 + +å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该被如何测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ + +无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 + +æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ + +Next [没有æ€è·¯æ—¶ä¼‘æ¯ä¸€ä¸‹](09-Take Breaks when Stumped.md) diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md new file mode 100644 index 0000000..c4af4c3 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -0,0 +1,5 @@ +# 没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ + +没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¼šç”Ÿæ•ˆã€‚ + +Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How to Recognize When to Go Home.md) diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md new file mode 100644 index 0000000..e7c8cf0 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -0,0 +1,15 @@ +# å¦‚ä½•è¯†åˆ«ä¸‹ç­æ—¶é—´ + +è®¡ç®—æœºç¼–ç¨‹æ˜¯ä¸€ç§æ´»åŠ¨ä¹Ÿæ˜¯ä¸€ç§æ–‡åŒ–。ä¸å¹¸çš„äº‹å®žæ˜¯å®ƒä¸æ˜¯ä¸€ç§çœ‹é‡èº«å¿ƒå¥åº·çš„æ–‡åŒ–。从文化/历å²ç¼˜ç”±çœ‹ï¼ˆä¾‹å¦‚,在机器空载的晚上工作的需è¦ï¼‰ï¼Œè¿˜æœ‰å› ä¸ºè¶…过市场时间的压力和程åºå‘˜çš„缺ä¹ï¼Œè®¡ç®—机程åºå‘˜ä¼ ç»Ÿä¸Šæ€»æ˜¯è¿‡åº¦å·¥ä½œã€‚我ä¸è®¤ä¸ºä½ å¯ä»¥ç›¸ä¿¡ä½ å¬åˆ°çš„æ‰€æœ‰æ•…事,但我认为一周工作60å°æ—¶æ˜¯å¸¸è§çš„,50å°æ—¶æ›´å¤šçš„åƒä¸€ä¸ªæœ€å°å€¼ã€‚è¿™æ„味ç€å®žé™…总是比需è¦çš„æ—¶é—´èŠ±è´¹å¾—æ›´å¤šã€‚è¿™å¯¹ä¸€ä¸ªå¥½çš„ï¼Œä¸ä»…为他们自己负责而且为他们的åŒäº‹è´Ÿè´£çš„程åºå‘˜æ¥è¯´æ˜¯ä¸€ä¸ªä¸¥é‡çš„问题。你需è¦è¯†åˆ«ä»€ä¹ˆæ—¶å€™ä¸‹ç­ï¼Œæœ‰æ—¶å€™è¿˜è¦å»ºè®®å…¶ä»–人回家的时间。解决这个问题的固定规则ä¸å­˜åœ¨ï¼ŒæŠšå…»ä¸€ä¸ªå­©å­çš„å›ºå®šè§„åˆ™ä¹Ÿæ˜¯ï¼Œå‡ºäºŽåŒæ ·çš„原因---æ¯ä¸ªäººéƒ½æ˜¯ä¸åŒçš„。 + +一周超过60ä¸ªå°æ—¶å·¥ä½œå¯¹æˆ‘æ¥è¯´æ˜¯éžå¸¸è¾›è‹¦çš„,我å¯ä»¥ç”³è¯·æŒºçŸ­çš„一段时间(大概是一周),有时候在我的预料中。我ä¸çŸ¥é“对一个人æ¥è¯´ä¸€å‘¨å·¥ä½œè¶…过60å°æ—¶æ˜¯å¦å…¬å¹³ï¼Œæˆ‘甚至ä¸çŸ¥é“40å°æ—¶æ˜¯å¦æ˜¯å…¬å¹³çš„。然而,我确定,如果你努力工作,å´åœ¨ä½ é¢å¤–工作的时间里获得了很少东西,这是很愚蠢的。对我个人æ¥è¯´ï¼Œæˆ‘认为åšä¸€ä¸ªæ‡¦å¤«ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜è¯¥åšçš„äº‹ã€‚é—æ†¾çš„æ˜¯ï¼Œäº‹å®žä¸Šï¼Œç¨‹åºå‘˜ç»å¸¸*被*è¦æ±‚åšä¸€ä¸ªæ‡¦å¤«æ¥ä¸ºä¸€äº›äººè¡¨æ¼”,例如一个ç»ç†æƒ³è¦ç»™æ€»ç»ç†ç•™ä¸‹æ·±åˆ»å°è±¡ã€‚程åºå‘˜ç»å¸¸å¯¹æ­¤å±ˆæœï¼Œå› ä¸ºä»–们希望开心,并且ä¸å–„æ‹’ç»ï¼Œä¸Žæ­¤ç›¸å的有四é“防护墙: +- å°½å¯èƒ½ä¸Žå…¬å¸é‡Œçš„任何人交æµï¼Œè¿™æ ·æ²¡äººå¯ä»¥è¯¯å¯¼æ€»ç»ç†æ­£åœ¨å‘生的事情; +- 学习明确而防御性地评估和规划,让æ¯ä¸ªäººçœ‹åˆ°æ—¶é—´è¡¨çš„内容以åŠå®ƒçš„立场; +- 学会拒ç»ï¼Œåœ¨å¿…è¦æ—¶ä½œä¸ºä¸€ä¸ªå›¢é˜Ÿæ‹’ç»ï¼Œå¹¶ä¸” +- 如果必须的è¯ï¼Œé€€å‡ºå›¢é˜Ÿ + +大多数程åºå‘˜æ˜¯å¥½çš„程åºå‘˜ï¼Œå¥½çš„程åºå‘˜æƒ³è¦åšå¾ˆå¤šä¸œè¥¿ã€‚为了åšåˆ°è¿™ç‚¹ï¼Œä»–们需è¦é«˜æ•ˆç®¡ç†ä»–们的时间。从一个问题中兴奋和深陷其中都有一定é‡çš„å¿ƒç†æƒ¯æ€§ã€‚许多程åºå‘˜å‘现他们在长久ä¸è¢«æ‰“扰的一段时间兴奋和集中注æ„力åŽå·¥ä½œå¾—最好。然而,人们必须ç¡è§‰ï¼Œå¹¶ä¸”有其他的责任。æ¯ä¸ªäººéœ€è¦æ‰¾åˆ°ä¸€ç§æ–¹å¼åŽ»æ»¡è¶³ä»–ä»¬çš„ç”Ÿç‰©èŠ‚å¥å’Œå·¥ä½œèŠ‚å¥ã€‚æ¯ä¸ªç¨‹åºå‘˜éœ€è¦åšä»»ä½•å¿…é¡»çš„äº‹æƒ…æ¥æä¾›é«˜æ•ˆçš„å·¥ä½œå‘¨æœŸï¼Œæ¯”å¦‚åªå‚加的æŸäº›æœ€å…³é”®çš„会议,以此ä¿ç•™ä¸€å®šçš„æ—¶é—´ã€‚ + +因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 + +Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How to Deal with Difficult People.md) diff --git a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md new file mode 100644 index 0000000..799fb28 --- /dev/null +++ b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -0,0 +1,15 @@ +# 如何与ä¸å¥½ç›¸å¤„的人相处 + +ä½ å¯èƒ½å¿…须和ä¸å¥½ç›¸å¤„的人相处。甚至å¯èƒ½ä½ æœ¬èº«å°±æ˜¯ä¸€ä¸ªä¸å¥½ç›¸å¤„的人。如果你是那ç§ä¸ŽåŒäº‹å’Œæƒå¨äººç‰©æœ‰è®¸å¤šçŸ›ç›¾çš„äººï¼Œä½ åº”è¯¥çæƒœè¿™ç§ç‹¬ç«‹æ‰€æš—示的东西,但需è¦åœ¨ä¸ç‰ºç‰²ä½ çš„æ™ºåŠ›æˆ–åŽŸåˆ™çš„å‰æä¸‹æé«˜ä½ çš„人际交往能力。 + +åœ¨è¿™æ–¹é¢æ²¡æœ‰ä»€ä¹ˆç»éªŒ,或者先å‰ç”Ÿæ´»çš„行为模å¼åœ¨å·¥ä½œåœºåˆçš„ç»éªŒä¸èƒ½é€‚用的一些程åºå‘˜,对这ç§äº‹æƒ…会éžå¸¸å›°æ‰°ã€‚ä¸å¥½ç›¸å¤„的人ç»å¸¸ä¹ æƒ¯äºŽæ‹’ç»ï¼Œå¹¶ä¸”与他人相比,他们更ä¸å®¹æ˜“å—社交压力所影å“。关键是åˆé€‚地尊é‡ä»–们,而éžä½ å¯èƒ½æƒ³åšçš„事,但ä¸è¦å……分地满足他们想è¦çš„(译者注:他们想è¦çš„往往是过分的)。 + +程åºå‘˜å¿…须作为一个团队一起工作。当分歧出现时,它必须用æŸç§æ–¹å¼è§£å†³ï¼Œå®ƒä¸èƒ½è¢«é•¿æ—¶é—´æŒ‚起。ä¸å¥½ç›¸å¤„的人通常是æžåº¦èªæ˜Žçš„,并且有一些很有用的æ„è§å¯ä»¥å‘表。ä¸å¸¦å¯¹è¿™ä¸ªäººçš„åè§ï¼Œå€¾å¬å¹¶ç†è§£ä¸å¥½ç›¸å¤„的人是éžå¸¸è‡³å…³é‡è¦çš„。失败的交æµé€šå¸¸æ˜¯åˆ†æ­§çš„基础,但它有时候å¯ä»¥è¢«å·¨å¤§çš„è€å¿ƒç§»é™¤ã€‚å°è¯•冷é™è¯šæ³åœ°ä¿æŒäº¤æµï¼Œå¹¶ä¸”䏿ޥå—任何å¯èƒ½äº§ç”Ÿæ›´å¤§çŸ›ç›¾çš„引诱。在一个åˆç†çš„å°è¯•ç†è§£çš„周期åŽï¼Œå†åšå†³å®šã€‚ + +ä¸è¦è®©ä¸€ä¸ªæ¶éœ¸å¼ºè¿«ä½ åšä½ æ‰€ä¸åŒæ„的事情。如果你是è€å¤§ï¼Œåšä½ è®¤ä¸ºæœ€å¥½çš„事情。ä¸è¦ä¸ºä»»ä½•个人因素åšå‡ºå†³å®šï¼Œå¹¶æ—¶åˆ»å‡†å¤‡å¥½ä¸ºä½ çš„决定åšå‡ºè§£é‡Šã€‚如果你是一个有ç€ä¸å¥½ç›¸å¤„çš„åŒäº‹çš„团队æˆå‘˜ï¼Œä¸è¦è®©è€å¤§çš„决定有任何个人影å“。如果没有按你的想法å‘展,全身心地按(已æˆäº‹å®žçš„)å¦ä¸€ç§æ–¹æ³•去åšã€‚ + +ä¸å¥½ç›¸å¤„的人能够改å˜ä¸Žè¿›æ­¥ã€‚我曾亲眼目ç¹è¿™ç§æƒ…况,但这很稀少。然而,æ¯ä¸ªäººéƒ½æœ‰æš‚æ—¶çš„é«˜å…´ä¸Žå¤±è½æƒ…绪。 + +有这样一个,æ¯ä¸ªç¨‹åºå‘˜é™¤äº†ç‰¹æ®Šçš„è€å¤§éƒ½ä¼šé¢å¯¹çš„æŒ‘战是:让ä¸å¥½ç›¸å¤„çš„äººä¿æŒå®Œå…¨çš„忙碌。他们比别人更倾å‘于枯燥的工作,并且更能被动地å¿å—。 + +Next [进阶技能](../../2-Intermediate) diff --git a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md new file mode 100644 index 0000000..71930bb --- /dev/null +++ b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -0,0 +1,13 @@ +# 如何在开å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´æƒè¡¡ + +è½¯ä»¶å¼€å‘æ€»æ˜¯åœ¨å·¥ç¨‹è¯¥åšä»€ä¹ˆä¸Žå®Œæˆå·¥ç¨‹é—´å¦¥å。但你å¯èƒ½è¢«è¦æ±‚以牺牲你的工程适用性或商业适用性的方å¼ï¼ŒåŽ»äº¤æ¢å·¥ç¨‹çš„å¼€å‘速度。例如,你å¯èƒ½è¢«è¦æ±‚åšä¸€äº›ç³Ÿç³•çš„å¯èƒ½å¯¼è‡´å¤§é‡ç»´æŠ¤é—®é¢˜çš„软件工程实践。 + +如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„bossçš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”该会很有用。如果质é‡äº¤æ¢å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„boss和质é‡ä¿è¯éƒ¨åˆ†)指出这个问题。如果质é‡äº¤æ¢ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„bug,指出æ¥ã€‚ + +如果她ä»ç„¶åšæŒï¼Œä½ åº”该把劣质部分隔离到特殊的你å¯ä»¥åœ¨ä¸‹ä¸€ä¸ªå¼€å‘周期计划é‡å†™æˆ–优化的组件中。å‘你的团队解释这个问题,这样他们å¯ä»¥ä¸ºæ­¤åšäº›è®¡åˆ’。 + +å¿è€…程åºå‘˜åœ¨Slashdot写下了这样的格言: + +> è®°ä½ï¼Œä¸€ä¸ªå¥½çš„设计会被糟糕的代ç å®žçŽ°å¼¹å›žã€‚å¦‚æžœå¥½çš„æŽ¥å£å’ŒæŠ½è±¡åœ¨ä»£ç ä¸­åˆ°å¤„存在,最åŽçš„é‡å†™ä¼šæ›´åŠ ç—›è‹¦ã€‚å¦‚æžœå†™éš¾ä»¥ä¿®å¤çš„æ¸…晰代ç å¾ˆå›°éš¾ï¼Œè€ƒè™‘是什么与核心设计冲çªçš„东西导致了这个问题。 + +Next [如何管ç†è½¯ä»¶ä¾èµ–](02-How to Manage Software System Dependence.md) diff --git a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md new file mode 100644 index 0000000..32c01f9 --- /dev/null +++ b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -0,0 +1,13 @@ +# 如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ– + +现代软件系统趋å‘于ä¾èµ–大é‡çš„éžç›´æŽ¥å¯æŽ§çš„组件。通过ååŒä¸Žé‡ç”¨ï¼Œè¿™å¢žåŠ äº†ç”Ÿäº§æ•ˆçŽ‡ã€‚ç„¶è€Œï¼Œæ¯ä¸ªç»„件会带æ¥ä¸€äº›é—®é¢˜ï¼š + +- 你该如何修å¤ç»„件中的bug? +- 组件é™åˆ¶ä½ ä½¿ç”¨ç‰¹æ®Šçš„硬件或软件系统了å—? +- å¦‚æžœç»„ä»¶å®Œå…¨åæŽ‰äº†ï¼Œä½ è¯¥åšä»€ä¹ˆï¼Ÿ + +æŸäº›ç¨‹åº¦ä¸Šè§£è€¦ç»„件,让它独立å¯ä»¥è¢«ç§»é™¤ï¼Œæ€»æ˜¯æœ€å¥½çš„ã€‚å¦‚æžœç»„ä»¶è¢«è¯æ˜Žå®Œå…¨ä¸å¯ç”¨ï¼Œä½ å¯èƒ½èƒ½å¤Ÿä½¿ç”¨ä¸åŒçš„组件,但你å¯èƒ½å¿…é¡»è‡ªå·±å†™ä¸€ä¸ªç»„ä»¶ã€‚è§£è€¦ä¸æ˜¯å¯ç§»æ¤æ€§ï¼Œä½†è¿™è®©ç§»æ¤å˜å¾—简å•,这大多数时候是好事。 + +拥有组件æºä»£ç å¯ä»¥æŠŠé£Žé™©é™åˆ°1/4.有了æºä»£ç ï¼Œä½ å¯ä»¥æ›´å®¹æ˜“地评估它,调试它,找到é¿å…踩å‘çš„æ–¹æ³•ï¼Œå¹¶ä¸”ä½¿å¾—ä¿®å¤æ›´å®¹æ˜“。如果你进行修å¤ï¼Œä½ å¿…须把修å¤çš„内容æäº¤ç»™ç»„件的拥有者,并且让修改åˆå¹¶åˆ°å®˜æ–¹å‘布版中,å¦åˆ™ä½ å°†ä¸é€‚地必须维护一个éžå®˜æ–¹ç‰ˆæœ¬ã€‚ + +Next [如何判断软件是å¦å¤ªä¸æˆç†Ÿäº†](03-How to Decide if Software is Too Immature.md) diff --git a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md new file mode 100644 index 0000000..2afa1c5 --- /dev/null +++ b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -0,0 +1,18 @@ +# 如何判断软件是å¦å¤ªä¸æˆç†Ÿäº† + +ä½¿ç”¨å…¶ä»–äººå†™çš„è½¯ä»¶æ˜¯ä¸€ç§æœ€æœ‰æ•ˆçŽ‡çš„æž„å»ºä¸€ä¸ªåšå®žçš„系统的方法之一。这本ä¸è¯¥è¢«æŽ’æ–¥ï¼Œä½†ä¸Žæ­¤ç›¸å…³çš„å±æœºå¿…须被检验。最大的一ç§é£Žé™©åœ¨äºŽï¼Œå®ƒé€šè¿‡ä½¿ç”¨å˜æˆä¸€ä¸ªå¯ç”¨äº§å“æˆç†Ÿå‰çš„,bug周期和与软件相关的故障时期。在你考虑将软件系统集æˆå‰ï¼Œä¸è®ºæ˜¯ä½ è‡ªå·±å†™çš„还是第三方的,考虑它是å¦è¶³å¤Ÿæˆç†Ÿä»¥ä½¿ç”¨æ˜¯éžå¸¸é‡è¦çš„。这里有å个你应该自问的相关问题: + +1. 它是蒸汽å—ï¼Ÿï¼ˆé‚£è‚¯å®šæ˜¯ä¸æˆç†Ÿçš„) +2. 有å¯ç”¨çš„æ‡‚这个软件的人å—? +3. 你是第一使用者å—? +4. 有æŒç»­ä½¿ç”¨çš„强烈动机å—? +5. 有维护负担å—? +6. 没有当å‰çš„维护者的è¯ï¼Œå®ƒè¿˜èƒ½ç”¨å—? +7. 有至少和它的一åŠé‚£æ ·å¥½çš„ç»éªŒä¸°å¯Œçš„å…¶ä»–å¯ç”¨é€”径? +8. 你的团队或公å¸äº†è§£å®ƒå—? +9. 你的团队或公å¸å¯¹å®ƒæ»¡æ„å—? +10. å³ä½¿å®ƒä¸å¥½ï¼Œä½ å¯ä»¥é›‡äººåœ¨å®ƒä¸Šé¢å·¥ä½œå—? + +对这些标准的一点考虑论è¯äº†è‰¯å¥½æž„建的自由软件和开æºè½¯ä»¶åœ¨å‡å°ä¼ä¸šå®¶é£Žé™©ä¸Šçš„巨大价值 + +Next [如何åšä¸€ä¸ªè´­ä¹°æˆ–构建决定](04-How to Make a Buy vs Build Decision.md) diff --git a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md new file mode 100644 index 0000000..f70d301 --- /dev/null +++ b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -0,0 +1,16 @@ +# 如何åšè´­ä¹°è¿˜æ˜¯æž„建的决定 + +一个å°è¯•用软件完æˆä¸€äº›ä»»åŠ¡çš„ä¼ä¸šçº§å…¬å¸æˆ–å·¥ç¨‹å¿…é¡»ä¸æ–­åšæ‰€è°“çš„*buy vs. build*的决定。这个问题的ä¸å¹¸åœ¨ä¸¤ä¸ªæ–¹é¢ï¼šä¼¼ä¹Žå¿½è§†äº†ä¸å¿…*被购买*的开æºè½¯ä»¶å’Œè‡ªç”±è½¯ä»¶ã€‚æ›´é‡è¦çš„æ˜¯ï¼Œè¿™å¯èƒ½åº”该被称作*获å–ä¸Žé›†æˆ vs. 购买与集æˆ*决定,因为集æˆçš„代价需è¦è¢«è€ƒè™‘。这需è¦å•†ä¸šä¸Šï¼Œç®¡ç†ä¸Šï¼Œå·¥ç¨‹ç†è§£ä¸Šçš„大é‡ç»“åˆã€‚ + +- 你的需è¦ä¸Žå®ƒçš„设计æ„图有多接近? +- å¯¹äºŽä½ è´­ä¹°çš„è½¯ä»¶ï¼Œä½ æƒ³è¦æ€Žæ ·çš„å¯ç§»æ¤æ€§ï¼Ÿ +- 评估集æˆçš„代价是什么? +- 集æˆçš„代价是什么? +- 购买会增加还是å‡å°‘长期维护代价? +- æž„å»ºä¼šæŠŠä½ æ”¾åœ¨ä¸€ä¸ªä½ ä¸æƒ³è¦çš„商业ä½ç½®å—? + +三æ€ï¼Œå¦‚果你想è¦è´­ä¹°ä¸€äº›å¤§åˆ°è¶³å¤Ÿæˆä¸ºå¦ä¸€æ•´ä¸ªå•†å“的基础的东西。这样的想法通常是ä¹è§‚积æžçš„将会对你的团队åšå‡ºè®¸å¤šè´¡çŒ®çš„人æå‡ºæ¥çš„。如果他们的想法很引人注目,你å¯èƒ½ä¼šæƒ³è¦æ”¹å˜ä½ çš„商业计划,但ä¸è¦åœ¨æ²¡æœ‰å‘¨å…¨è€ƒè™‘å‰å°±æŠ•资一个比你自己的商业还大的解决方案。 + +在考虑了这些问题åŽï¼Œä½ å¯èƒ½åº”å½“å‡†å¤‡ä¸¤ä¸ªå·¥ç¨‹è®¡åˆ’è‰æ¡ˆï¼Œä¸€ä¸ªç»™è´­ä¹°ï¼Œä¸€ä¸ªç»™æž„建。这会强迫你考虑集æˆä»£ä»·ã€‚ä½ ä¹Ÿåº”å½“è€ƒè™‘ä¸¤ç§æŽªæ–½çš„é•¿æœŸç»´æŠ¤ä»£ä»·ã€‚ä¸ºäº†è¯„ä¼°é›†æˆä»£ä»·ï¼Œä½ å¿…须在购买软件å‰å¯¹å®ƒåšä¸€ä¸ªå½»åº•的评估。如果你ä¸èƒ½è¯„估好它,你å¯ä»¥å‡è®¾è´­ä¹°å®ƒä¼šæœ‰ä¸€ä¸ªä¸å¯é¢„料的风险,你应该以此决定是å¦è´­ä¹°ç‰¹å®šçš„产å“ã€‚å¦‚æžœè€ƒè™‘åŽæœ‰å‡ ä¸ªè´­ä¹°å†³å®šï¼Œéœ€è¦èŠ±ä¸€äº›ç²¾åŠ›åŽ»è¯„ä¼°æ¯ä¸ªå†³å®šã€‚ + +Next [如何专业地æˆé•¿](05-How to Grow Professionally.md) diff --git a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md new file mode 100644 index 0000000..ca827e5 --- /dev/null +++ b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -0,0 +1,11 @@ +# 如何专业地æˆé•¿ + +承担超过你的æƒå¨çš„è´£ä»»ã€‚æ‰®æ¼”ä½ æƒ³è¦æ‰®æ¼”的角色。对人们对更大组织的æˆåŠŸçš„è´¡çŒ®ä»¥åŠå¯¹ä½ ä¸ªäººçš„帮助表示感谢与欣èµã€‚ + +如果你想æˆä¸ºå›¢é˜Ÿçš„领导,去激励与团结。如果你想æˆä¸ºä¸€ä¸ªç»ç†ï¼Œæ‹…起规划的责任。你通常å¯ä»¥åœ¨å’Œé¢†å¯¼æˆ–ç»ç†åœ¨ä¸€èµ·æ—¶ï¼Œèˆ’æœåœ°å®Œæˆè¿™äº›äº‹æƒ…,因为这使得他们å¯ä»¥æŠ½ç©ºåŽ»æ‰¿æ‹…æ›´å¤§çš„è´£ä»»ã€‚å¦‚æžœè¿™å¤ªå¤šäº†ä»¥è‡³äºŽä½ ä¸èƒ½å°è¯•,一次åªåšä¸€ç‚¹ç‚¹ã€‚ + +评估你自己。如果你想è¦å˜æˆä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¯¢é—®ä¸€äº›ä½ æ¬£èµçš„人你怎样æ‰èƒ½å˜æˆä»–们那样。你也å¯ä»¥é—®ä½ çš„boss,他å¯ä»¥å‘Šè¯‰ä½ çš„东西会少一些,但对你的事业会有更大的影å“。 + +计划学习新技能的方å¼ï¼ŒåŒ…括çç¢Žçš„æŠ€æœ¯ç±»åž‹ï¼Œæ¯”å¦‚å­¦ä¹ ä¸€ä¸ªæ–°çš„è½¯ä»¶ç³»ç»Ÿï¼Œå’Œå›°éš¾çš„ç¤¾äº¤ç±»åž‹ï¼Œåƒæ¼‚亮的写作,把它们集æˆåˆ°ä½ çš„工作中。 + +Next [如何评估é¢è¯•](06-How to Evaluate Interviewees.md) diff --git a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md new file mode 100644 index 0000000..e4923aa --- /dev/null +++ b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -0,0 +1,15 @@ +# 如何评估é¢è¯•者 + +评估å¯èƒ½çš„å‘˜å·¥ï¼Œå´æ²¡æœ‰å¾—到它应得的能é‡ã€‚一个糟糕的雇佣,就åƒç³Ÿç³•的婚姻,是éžå¸¸ç³Ÿç³•的。æ¯ä¸ªäººçš„能é‡çš„一个é‡è¦çš„部分应该用于补充,尽管这很少å‘生。 + +有ä¸åŒçš„é¢è¯•é£Žæ ¼ã€‚æœ‰çš„æ˜¯æŠ˜ç£¨äººçš„ï¼Œè®¾è®¡ç”¨æ¥æŠŠå€™é€‰äººæ”¾åœ¨å·¨å¤§åŽ‹åŠ›ä¸‹ã€‚è¿™æ˜¯ä¸ºäº†è¿™æ ·ä¸€ä¸ªæœ‰ç”¨çš„ç›®çš„ï¼šåœ¨åŽ‹åŠ›ä¸‹æŠ˜å°„å‡ºæ€§æ ¼ç¼ºé™·å’Œå¼±ç‚¹ã€‚å€™é€‰äººä¸ä¼šå¯¹ä»–们自己之外的其他é¢è¯•官更诚实,而且,人的自欺能力是令人惊奇的。 + +ä½ åº”å½“ï¼Œæœ€å°‘ï¼Œå¯¹å€™é€‰äººè¿›è¡Œä¸¤ä¸ªå°æ—¶çš„与å£å¤´è€ƒæ ¸ç­‰ä»·çš„æŠ€æœ¯æŠ€èƒ½è€ƒæ ¸ã€‚实践åŽï¼Œä½ ä¼šèƒ½å¤Ÿå¿«é€Ÿäº†è§£ä»–们知é“什么,快速收缩他们ä¸çŸ¥é“çš„æ¥æ ‡æ˜Žè¾¹ç•Œã€‚é¢è¯•者会尊é‡è¿™ä»¶äº‹è¯·ã€‚我有几次å¬é¢è¯•者说é¢è¯•çš„è´¨é‡æ˜¯ä»–们选择公å¸çš„ä¸€ä¸ªåŠ¨æœºã€‚èªæ˜Žäººä¼šå› ä»–们的技能而被雇佣,而éžä»–们之å‰å·¥ä½œè¿‡çš„地方或他们上了哪个学校或者一些无关紧è¦çš„特å¾ã€‚ + +åšè¿™äº›äº‹æƒ…,你也应当评估他们的学习能力,这比他们所知é“çš„è¦æ›´åŠ é‡è¦å¾—多。你也应当ä¸åŒçš„人散å‘出æ¥çš„硫磺味。你å¯èƒ½èƒ½å¤Ÿåœ¨é¢è¯•åŽé€šè¿‡æ¯”较笔记æ¥è¯†åˆ«è¿™ä¸€ç‚¹ï¼Œä½†åœ¨é¢è¯•的热烈环境中这很难分辨。人们交æµçš„能力以åŠä¸Žäººåˆä½œçš„能力比在最新的编程语言上领先更为é‡è¦ã€‚ + +ä¸€ä¸ªè¯»è€…æœ‰â€œåœ¨å®¶â€æµ‹éªŒé¢è¯•çš„ç»éªŒã€‚这有一个优点是æ­éœ²äº†ä¸€äº›é¢è¯•者能良好地自我表现但ä¸èƒ½å†™ä»£ç çš„缺点 - 这样的人是很多的。我个人没有å°è¯•è¿‡è¿™ç§æŠ€æœ¯ï¼Œä½†è¿™å¬èµ·æ¥æŒºåˆé€‚的。 + +最åŽï¼Œé¢è¯•ä¹Ÿæ˜¯ä¸€ä¸ªé”€å”®çš„è¿‡ç¨‹ã€‚ä½ åº”è¯¥æŠŠä½ çš„å…¬å¸æˆ–工程销售给候选人。然而,你是在与程åºå‘˜è°ˆè¯ï¼Œæ‰€ä»¥ä¸è¦å°è¯•改å˜äº‹å®žã€‚从没有å员工开始,到与好员工一起强大而结æŸã€‚ + +Next [怎么决定什么时候使用奇妙的计算机科学](07-How to Know When to Apply Fancy Computer Science.md) diff --git a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md new file mode 100644 index 0000000..bbc1d45 --- /dev/null +++ b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -0,0 +1,15 @@ +# 如何决定什么时候使用奇妙的计算机科学 + +有这样一些,算法,数æ®ç»“构,数学,还有其他æžå®¢èŒƒçš„大多数程åºå‘˜çŸ¥é“但很少了解的东西。实践中,这ç§å¥‡å¦™çš„ä¸œè¥¿å¤ªå¤æ‚了,通常是ä¸éœ€è¦çš„。例如,当你花费大多数时间在低效的数æ®åº“调用上时,æé«˜ç®—法是没有什么用的。ä¸å¹¸çš„大é‡ç¼–程由让系统相互交æµä»¥åŠä½¿ç”¨éžå¸¸ç®€å•的数æ®ç»“构去构建漂亮的用户界é¢ç»„æˆã€‚ + +高科技什么时候是åˆé€‚的科技?你什么时候应当打开一本书去找一些东西而éžä¸€ä¸ªæ¯«ç§’级算法?åšè¿™äº›æœ‰æ—¶å€™æ˜¯æœ‰ç”¨çš„,但这需è¦è¢«å°å¿ƒè¯„估。 + +对于潜在的计算机技术三个最é‡è¦çš„考虑是: + +- 它是å¦å……分å°è£…æ‰€ä»¥å…¶ä»–ä½Žçº§ç³»ç»Ÿé£Žé™©å’Œå¤æ‚度过é‡å¢žåР以åŠç»´æŠ¤ä»£ä»·å¾ˆä½Žï¼Ÿ +- å¥½å¤„æ˜¯å¦æ˜¯ä»¤äººæƒŠå¥‡çš„(例如,æˆç†Ÿç³»ç»Ÿçš„䏤倿ˆ–新系统的åå€ï¼Ÿï¼‰ +- 你能够高效测试和评估它å—? + +如果一个充分独立算法使用了些许奇妙的å¯ä»¥å‡å°‘ç¡¬ä»¶æ¶ˆè€—æˆ–å¢žåŠ æ•´ä¸ªç³»ç»Ÿçš„ä¸¤å€æ€§èƒ½è¡¨çŽ°çš„ç®—æ³•ï¼Œä¸è€ƒè™‘它å¯èƒ½æ˜¯æœ‰ç½ªçš„ã€‚äº‰è®ºè¿™æ ·ä¸€ä¸ªæ–¹æ³•çš„ä¸€ä¸ªå…³é”®æ˜¯ï¼Œè¯æ˜Žé£Žé™©ç¡®å®žæ˜¯ç›¸å½“的低,因为目标技术å¯èƒ½è¢«å……分研究过了,唯一的è¯é¢˜æ˜¯é›†æˆçš„风险。在这里一个程åºå‘˜çš„ç»éªŒå’Œè¯„ä¼°å¯ä»¥çœŸçš„与奇妙的算法å作使得集æˆå˜å¾—容易。 + +Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How to Talk to Non-Engineers.md) diff --git a/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md new file mode 100644 index 0000000..0900299 --- /dev/null +++ b/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -0,0 +1,19 @@ +# 如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ + +工程师和程åºå‘˜ï¼ˆå°¤å…¶æ˜¯ï¼‰é€šå¸¸è¢«ä¸»æµæ–‡åŒ–认为与他人ä¸åŒã€‚è¿™æ„味ç€å…¶ä»–人与我们ä¸åŒã€‚与éžå·¥ç¨‹å¸ˆäº¤æµæ—¶ï¼Œè¿™æ˜¯å€¼å¾—记在心里的,你应该时刻去ç†è§£è§‚众。 + +éžå·¥ç¨‹å¸ˆèªæ˜Žï¼Œä½†åœ¨åˆ›é€ æŠ€æœ¯ç±»çš„东西ä¸åƒæˆ‘们那样è¸å®žã€‚我们制造东西。他们销售,处ç†ï¼Œç»Ÿè®¡ï¼Œç®¡ç†ï¼Œä½†ä»–ä»¬åœ¨åˆ¶é€ ä¸Šä¸æ˜¯ä¸“家。他们ä¸åƒå·¥ç¨‹å¸ˆé‚£æ ·æ“…长团队åˆä½œï¼ˆæ¯«æ— ç–‘问会有例外。)他们的社交技能在éžå›¢é˜ŸçŽ¯å¢ƒé‡Œé€šå¸¸åƒå·¥ç¨‹å¸ˆé‚£æ ·ï¼Œç”šè‡³æ¯”工程师è¦å¥½ï¼Œä½†ä»–ä»¬çš„å·¥ä½œä¸æ€»è¦æ±‚ä»–ä»¬åƒæˆ‘们那样进行亲密,ç贵的交æµï¼Œä»¥åŠç»†è‡´çš„任务划分。 + +éžå·¥ç¨‹å¸ˆå¯èƒ½å¤ªæ¸´æœ›ä»¥è‡³äºŽä¸èƒ½è¢«å–悦和与你亲近,他们å¯èƒ½åœ¨ä¸æ˜¯çœŸçš„对你满æ„的时候å´å¯¹ä½ è¯´â€œæ˜¯â€ï¼Œæˆ–者是因为他们有点怕你,然åŽä¸ä¼šå¯¹ä½ è¯´å®žè¯ã€‚ + +éžå·¥ç¨‹å¸ˆå¯ä»¥ç†è§£æŠ€æœ¯çš„东西,但他们ä¸ä¼šåšé‚£ä»¶ç”šè‡³å¯¹æˆ‘们æ¥è®²éƒ½å¾ˆå›°éš¾çš„事情 - 技术评审。他们确实ç†è§£æŠ€æœ¯æ˜¯å¦‚何工作的,但他们ä¸èƒ½ç†è§£ä¸ºä»€ä¹ˆä¸€ä¸ªç‰¹å®šçš„æ–¹æ³•需è¦èŠ±ä¸‰ä¸ªæœˆè€Œå¦ä¸€ç§æ–¹æ³•è¦èŠ±ä¸‰å¤©ã€‚ï¼ˆæ¯•ç«Ÿï¼Œç¨‹åºå‘˜å¯¹è¿™ç§ä¼°è®¡ä¹Ÿæ„Ÿåˆ°äº‹å¤šå¾—坿€•。)这代表了一个巨大的和他们å作的机会。 + +与你的团队交谈时,你会,ä¸å‡æ€ç´¢çš„ï¼Œä½¿ç”¨ä¸€ç§æ·å¾„的形å¼ï¼Œä¸€ç§ç®€å•的语言更有效率,因为你通常对技术或者特别是你的产å“会有许多的共享ç»éªŒã€‚ + +与你的团队一起,基本的å‡è®¾å’Œç›®æ ‡ä¸éœ€è¦ç»å¸¸é‡ç”³ï¼Œå¤§å¤šæ•°è°ˆè¯é›†ä¸­äºŽç»†èŠ‚ã€‚ä¸Žå¤–äººä¸€èµ·ï¼Œå°±æ˜¯å¦ä¸€å›žäº‹äº†ã€‚他们å¯èƒ½ä¸ç†è§£ä½ è®¤ä¸ºç†æ‰€å½“然的东西。由于你把这当åšç†æ‰€å½“然,并且没有é‡ç”³å®ƒä»¬ï¼Œä½¿å¾—你们的谈è¯é™·å…¥è¿™æ ·ä¸€ç§æƒ…况:你å¯èƒ½è®¤ä¸ºä½ ä»¬ç›¸äº’ç†è§£ï¼Œä½†äº‹å®žä¸Šæœ‰ä¸€ä¸ªå·¨å¤§çš„误解。你应当å‡è®¾ä½ ä¼šæœ‰é”™è¯¯çš„交æµï¼Œå¹¶ä¸”ä»”ç»†è§‚å¯ŸåŽ»æ‰¾å‡ºè¿™æ ·çš„è¯¯è§£ã€‚è¯•ç€æ€»ç»“或将你说的东西分点,æ¥ç¡®ä¿ä»–们能够ç†è§£ã€‚如果你有机会ç»å¸¸ä¸Žä»–们è§é¢ï¼ŒèŠ±ä¸€ç‚¹æ—¶é—´è¯¢é—®ä½ æ˜¯å¦åœ¨æœ‰æ•ˆåœ°äº¤æµï¼Œä»¥åŠä½ å¯ä»¥æ€Žæ ·æŠŠå®ƒåšå¾—æ›´å¥½ã€‚å¦‚æžœäº¤æµæœ‰é—®é¢˜ï¼Œåœ¨å¯¹ä»–们失望å‰ï¼Œå¯»æ‰¾æ–¹æ³•去æé«˜ä½ è‡ªå·±çš„实践。 + +我喜欢与éžå·¥ç¨‹å¸ˆå·¥ä½œã€‚è¿™æä¾›äº†ç»å¤§çš„æœºä¼šæ¥å­¦ä¹ ä¸Žä¼ æŽˆã€‚ä½ å¯ä»¥ç»å¸¸ç”±å®žä¾‹å¾—到关于你的交æµçš„é˜è¿°çš„æŒ‡å¼•。工程师被训练于从混乱中梳ç†ç§©åºï¼Œä»Žå›°æƒ‘中得到解释,éžå·¥ç¨‹å¸ˆä¼šå› æ­¤å–œæ¬¢æˆ‘们。因为我们有技术评审,并且通常å¯ä»¥ç†è§£å•†ä¸šè¯é¢˜ï¼Œæˆ‘们ç»å¸¸å‘现一个简å•的方法æ¥è§£å†³é—®é¢˜ã€‚ + +很多时候éžå·¥ç¨‹å¸ˆä¼šå‡ºäºŽå¥½æ„以åŠä¸€ç§æ­£ç¡®åšäº‹æƒ…的欲望去规划他们认为会让我们更容易的事情,事实上存在一个仅能通过借助你的技术评审å助外人的观点看到的好得多的方法。我个人喜欢æžé™ç¼–程因为它处ç†äº†è¿™ç§ä½Žæ•ˆï¼Œé€šè¿‡å°†ä¼°è®¡å¿«é€Ÿä¸Žä¸»æ„结åˆï¼Œä½¿å¾—å‘çŽ°æˆæœ¬ä¸Žå¥½å¤„最佳结åˆçš„æ–¹æ³•更加容易。 + +Next [高级技能](../../3-Advanced) diff --git a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md new file mode 100644 index 0000000..c5b7e67 --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -0,0 +1,14 @@ +# å¦‚ä½•ä¿æŒæ´»åŠ› + +åˆ›å»ºç¾Žä¸½ï¼Œæœ‰ç”¨ï¼Œèªæ˜Žçš„东西的欲望能高度调动程åºå‘˜çš„ç§¯æžæ€§ã€‚è¿™æ˜¯å¥‡å¦™è€Œä»¤äººæƒŠå¥‡çš„ã€‚è¿™ç§æ¬²æœ›å¯¹ç¨‹åºå‘˜æ—¢ä¸ç‰¹æ®Šä¹Ÿä¸æ™®é,但在程åºå‘˜ä¸­ï¼Œå®ƒæ˜¯å¦‚此强烈而普é以至于它把程åºå‘˜ä¸Žå…¶ä»–角色的人们分割开æ¥ã€‚ + +这有一个现实而é‡è¦çš„æŽ¨è®ºã€‚如果程åºå‘˜è¢«è¦æ±‚åšä¸€äº›ä¸ç¾Žä¸½/有用/漂亮的事情,他们会斗志低è½ã€‚åšä¸‘陋,愚蠢,无èŠçš„员工å¯èƒ½å¯ä»¥èµšå¾ˆå¤šé’±ï¼Œä½†æœ€åŽï¼Œä¹è¶£æ‰ä¼šä¸ºå…¬å¸èµšæœ€å¤šçš„钱。 + +很明显,有一些完全由动机技术组织起æ¥çš„工业适用这里的情况。这些我å¯ä»¥è¯†åˆ«çš„特定的编程中的事情有: +- 为工作使用最好的语言 +- 寻找机会去使用新技术,新语言,新科技 +- å°è¯•在æ¯ä¸ªå·¥ç¨‹é‡Œå­¦ä¹ æˆ–教授一些东西,å³ä½¿å¾ˆå° + +最åŽï¼Œå¯èƒ½çš„è¯ï¼Œä¼°é‡ä¸ªäººæ¿€åŠ±çš„ä¸œè¥¿å¯¹ä½ å·¥ä½œçš„å½±å“。例如,修å¤bugæ—¶ï¼Œæ•°ä¸€æ•°æˆ‘å®Œå…¨ä¸æ„Ÿå…´è¶£çš„bug的数目,因为这和ä»ç„¶å­˜åœ¨çš„bugæ•°ç›®æ˜¯ç‹¬ç«‹çš„ï¼Œå¹¶ä¸”ä¹Ÿå½±å“æˆ‘在最å°å¯èƒ½çš„æ–¹å¼ä¸Šå½±å“我对我公å¸çš„顾客的增值。把æ¯ä¸ªbug和一个高兴的顾客关è”èµ·æ¥ï¼Œ*是*对我个人的激励。 + +Next [如何被广泛信任](02-How to be Widely Trusted.md) diff --git a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md new file mode 100644 index 0000000..719eeaf --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -0,0 +1,7 @@ +# 如何被广泛信任 + +值得信任,æ‰èƒ½è¢«ä¿¡ä»»ã€‚你也应该让别人了解你。如果没人了解你,没人会为你投票。跟与你亲近的人一起,比如队å‹ï¼Œè¿™ä¸èƒ½æˆä¸ºä¸€ä¸ªè¯é¢˜ã€‚对你部门或团队以外的人,你通过责任和åšçŸ¥å»ºç«‹ä¿¡ä»»ã€‚æœ‰æ—¶æœ‰äººä¼šæ»¥ç”¨ä¿¡ä»»ï¼Œå¹¶è¦æ±‚æ— ç†ç”±çš„喜爱。ä¸è¦å®³æ€•,解释这ç§å–œçˆ±ä¼šè®©ä½ å¿…须放弃什么。 + +ä¸è¦ä¸æ‡‚装懂。与队å‹ä»¥å¤–的人一起时,你必须清除地区分“当下在我脑å­é‡Œä¸æ‡‚的东西â€ä»¥åŠâ€œæˆ‘æ›¾ç»æ²¡æœ‰è®¤è¯†åˆ°çš„东西â€ã€‚ + +Next [如何在时间和空间æƒè¡¡](03-How to Tradeoff Time vs Space.md) diff --git a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md new file mode 100644 index 0000000..c0a7479 --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -0,0 +1,15 @@ +# 如何在时间与空间æƒè¡¡ + +没有上过大学的è¯ï¼Œä½ ä¹Ÿå¯ä»¥æˆä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œä½†ä½ ä¸çŸ¥é“åŸºæœ¬çš„è®¡ç®—å¤æ‚度ç†è®ºçš„è¯ï¼Œä½ ä¸å¯èƒ½æˆä¸ºä¸€ä¸ªå¥½çš„进阶程åºå‘˜ã€‚ä½ ä¸éœ€è¦çŸ¥é“‘O’的定义,但我个人认为你应该ç†è§£â€˜å¸¸é‡æ—¶é—´â€™ï¼Œâ€˜nlogn’,'n²'的区别。你å¯èƒ½å¯ä»¥ä¸é è¿™æ–¹é¢çš„知识,凭直觉知é“如何在时间和空间之间æƒè¡¡ï¼Œä½†æ²¡æœ‰è¿™ç§çŸ¥è¯†ï¼Œä½ ä¸ä¼šæœ‰ä¸€ä¸ªç¨³å›ºçš„ç†è§£ä½ çš„åŒäº‹çš„基础。 + +在设计或ç†è§£ç®—法的过程中,算法花费的时间有时候是一个以输入é‡ä¸ºè‡ªå˜é‡çš„å‡½æ•°ã€‚å½“è¿™ç§æƒ…况å‘生时,如果è¿è¡Œæ—¶é—´ä¸Žè¾“å…¥é‡çš„对数的n倿ˆæ­£æ¯”,我们å¯ä»¥è¯´ä¸€ä¸ªç®—法的最å/期望/最好情况è¿è¡Œæ—¶é—´æ˜¯'nlogn',这个定义和é˜è¿°çš„æ–¹å¼ä¹Ÿå¯ä»¥è¢«åº”用在数æ®ç»“æž„å ç”¨çš„空间上。 + +å¯¹æˆ‘æ¥æ—¶å€™ï¼Œè®¡ç®—夿‚度ç†è®ºæ˜¯ç¾Žå¦™çš„,并且与物ç†å­¦ä¸€æ ·æ„义深远,并且å¯èƒ½è¿˜æœ‰å¾ˆé•¿çš„è·¯è¦èµ°ï¼ + +时间(处ç†å™¨å‘¨æœŸï¼‰å’Œç©ºé—´ï¼ˆå†…存)å¯ä»¥ç›¸äº’交易。工程是一ç§å¦¥å,这是一个好的例å­ã€‚å®ƒä¸æ€»æ˜¯ç³»ç»Ÿçš„,然而,编ç ä¸€äº›ä¸œè¥¿æ—¶æ›´åŠ ç´§å‡‘å¯ä»¥èŠ‚çœç©ºé—´ï¼Œä½†è¦ä»¥è§£ç æ—¶æ›´å¤šçš„å¤„ç†æ—¶é—´ä¸ºä»£ä»·ã€‚ä½ å¯ä»¥é€šè¿‡ç¼“å­˜èŠ‚çœæ—¶é—´ï¼Œä¹Ÿå°±æ˜¯ï¼ŒèŠ±è´¹ç©ºé—´åŽ»å­˜å‚¨æŸäº›ä¸œè¥¿çš„一个本地副本,但è¦ä»¥ç»´æŒç¼“存的一致性为代价。你å¶å°”å¯ä»¥é€šè¿‡æŠŠæ›´å¤šä¿¡æ¯æ”¾åœ¨ä¸€ä¸ªæ•°æ®ç»“构里æ¥èŠ‚çœæ—¶é—´ã€‚但这通常导致å°çš„空间å ç”¨ï¼ŒåŒæ—¶å¤æ‚化算法。 + +æé«˜æ—¶é—´ç©ºé—´è½¬æ¢ç»å¸¸æŠŠå®ƒä»¬ä¸­çš„一个或å¦ä¸€ä¸ªæˆå‰§æ€§åœ°æ”¹å˜ã€‚然而,在你开始åšè¿™ä¸ªå·¥ä½œå‰ï¼Œä½ åº”该问你自己,你将è¦ä¼˜åŒ–çš„æ˜¯å¦æ˜¯æœ€éœ€è¦ä¼˜åŒ–的?研究算法是有趣的,但你ä¸èƒ½è®©è¿™é®è”½äº†ä½ çš„åŒçœ¼è®©ä½ çœ‹ä¸åˆ°è¿™æ ·ä¸€ä¸ªå†·é…·çš„äº‹å®žï¼šä¼˜åŒ–ä¸€äº›ä¸æ˜¯é—®é¢˜çš„问题ä¸ä¼šäº§ç”Ÿå¯è§çš„å½±å“å¹¶ä¸”ä¼šé€ æˆæµ‹è¯•负担。 + +现代计算机内存越æ¥è¶Šä¾¿å®œï¼Œå› ä¸ºä¸åƒå¤„ç†å™¨æ—¶é—´ï¼Œä½ åœ¨è¾¾åˆ°è¾¹ç•Œå‰ä½ ä¸èƒ½çœ‹è§å®ƒï¼Œä½†è¿™ç§å¤±è´¥æ˜¯ç¾é𾿀§çš„。使用内存也有éšè—的代价,比如你影å“了其他需è¦è¢«ä¿ç•™çš„程åºï¼Œä»¥åŠä½ åˆ†é…和释放内存的时间。在你想è¦èŠ±æ›´å¤šç©ºé—´åŽ»æ¢å–速度之å‰ï¼Œä»”细考虑这一点。 + +Next [如何进行压力测试](04-How to Stress Test.md) diff --git a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md new file mode 100644 index 0000000..67b12cd --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -0,0 +1,17 @@ +# 如何进行压力测试 + +压力测试很有趣,一开始好åƒåŽ‹æµ‹çš„ç›®çš„æ˜¯æ‰¾å‡ºç³»ç»Ÿåœ¨è´Ÿè½½ä¸‹èƒ½ä¸èƒ½å·¥ä½œã€‚现实中,系统在负载下确实能工作,但在负载足够é‡çš„æŸäº›æƒ…å†µä¸‹ä¸èƒ½å·¥ä½œã€‚我把这å«åš*碰å£*或*æ’žå“*[1]。å¯èƒ½ä¼šæœ‰ä¾‹å¤–,但大多数情况下会有这么一堵“墙â€ã€‚åŽ‹æµ‹çš„ç›®çš„æ˜¯ä¸ºäº†æŒ‡å‡ºå¢™åœ¨å“ªé‡Œï¼Œç„¶åŽæŒ‡å‡ºæ€Žä¹ˆæŠŠå¢™ç§»å¾—远些。 + +压测计划需è¦åœ¨å·¥ç¨‹çš„æ—©æœŸå°±è§„划好,因为它ç»å¸¸æœ‰åŠ©äºŽè§£é‡ŠçœŸå®žæœŸæœ›çš„ä¸œè¥¿å…·ä½“æ˜¯ä»€ä¹ˆã€‚ä¸¤ç§’çš„ç½‘é¡µè¯·æ±‚æ˜¯ä¸€ä¸ªæ‚²ä¼¤çš„å¤±è´¥è¿˜æ˜¯ä¸€ä¸ªäº†ä¸èµ·çš„æˆåŠŸï¼Ÿ500个并å‘用户是å¦è¶³å¤Ÿï¼Ÿè¿™ï¼Œå½“ç„¶ï¼Œè§†æƒ…å†µè€Œå®šï¼Œä½†ä¸€ä¸ªäººåœ¨è®¾è®¡ç³»ç»Ÿæ—¶å°±åº”è¯¥çŸ¥é“æ»¡è¶³éœ€æ±‚的答案。压测需è¦è¶³å¤Ÿå¥½åœ°ä¸ºçŽ°å®žå»ºæ¨¡ï¼Œä½¿ä¹‹è¶³å¤Ÿæœ‰ç”¨ã€‚éžå¸¸å®¹æ˜“地模拟500个ä¸ç¨³å®šå¹¶ä¸”ä¸å¯é¢„æµ‹çš„äººå¹¶è¡Œä½¿ç”¨ç³»ç»Ÿä¸æ˜¯çœŸçš„å¯èƒ½çš„,但我们å¯ä»¥è‡³å°‘创造500个模拟(用户),然åŽå°è¯•模拟他们å¯èƒ½åšçš„部分事情。 + +在压测中,从轻负载开始,然åŽä¸ºç³»ç»Ÿåœ¨ä¸€äº›ç»´åº¦ä¸Šå¢žåР夿‚ - 比如输入频率和输入规模 - 直到你抵达那堵墙。如果墙太近了以至于ä¸èƒ½æ»¡è¶³ä½ çš„需è¦ï¼ŒæŒ‡å‡ºå“ªä¸ªèµ„æºæ˜¯ç“¶é¢ˆï¼ˆè¿™é€šå¸¸æ˜¯é‚£ä¸ªä¸»è¦çš„资æºï¼‰ã€‚它是内存?处ç†å™¨ï¼ŸI/O?网络带宽?还是数æ®è¿žæŽ¥ï¼Ÿç„¶åŽæŒ‡å‡ºä½ å¯ä»¥æ€Žä¹ˆç§»åŠ¨é‚£å µå¢™ã€‚è®°å½•ä¸‹ç§»åŠ¨å¢™çš„é‚£ä¸ªè¦ç´ ï¼Œä¹Ÿå°±æ˜¯å¢žåŠ äº†ç³»ç»Ÿå¯ä»¥å¤„ç†çš„负载的那个è¦ç´ ï¼Œå®ƒå¯èƒ½ä¸èƒ½çœŸæ­£åœ¨ä½Žè´Ÿè½½ç³»ç»Ÿä¸‹äº§ç”Ÿå±å®³ã€‚但通常é‡è´Ÿè½½ä¸‹çš„表现比轻负载下更é‡è¦ã€‚ + +你必须能够观察几个ä¸åŒç»´åº¦ï¼Œä»¥æ­¤æ¥ä¸ºä¹‹æž„建一个æ€ç»´æ¨¡åž‹ï¼›å•一的技术是ä¸å¤Ÿçš„。例如,日志ç»å¸¸æ˜¯ç»™å‡ºç³»ç»Ÿä¸­ä¸¤ä¸ªäº‹ä»¶é—´çš„æŒ‚钟时间的好主æ„。但除éžä»”细构建,日志ä¸ä¼šç»™å‡ºå†…存使用的å¯è§æ€§ç”šè‡³æ˜¯æ•°æ®ç»“构的大å°ã€‚相似的,在现代系统里,大é‡ç”µè„‘和许多软件系统是åˆä½œçš„ã€‚ç‰¹åˆ«æ˜¯åœ¨ä½ ç¢°åˆ°é‚£å µå¢™æ—¶ï¼ˆä¹Ÿå°±æ˜¯ï¼Œè¡¨çŽ°ä¸Žè¾“å…¥ä¸æˆçº¿æ€§æ¯”例时),这些软件系统å¯èƒ½æˆä¸ºç“¶é¢ˆã€‚对这些系统的é€è§†åŠ›ï¼Œç”šè‡³ä»…ä»…å¯¹æ‰€æœ‰å‚与工作的机器的处ç†å™¨å𿵋é‡ï¼Œéƒ½å¯èƒ½æ˜¯éžå¸¸æœ‰å¸®åŠ©çš„ã€‚ + +æ„识到墙的存在ä¸ä»…对移动墙是éžå¸¸å…³é”®çš„,而且对于æä¾›é¢„报能力也是如此。这样公å¸å¯ä»¥å¾—到更高效的管ç†ã€‚ + +--- + +[1] "æ’žå“" + +Next [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](05-How to Balance Brevity and Abstraction.md) diff --git a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md new file mode 100644 index 0000000..f17312b --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -0,0 +1,9 @@ +# 如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡ + +æŠ½è±¡æ˜¯ç¼–ç¨‹çš„å…³é”®ã€‚ä½ åº”è¯¥ä»”ç»†é€‰æ‹©ä½ éœ€è¦æŠ½è±¡çš„ç¨‹åº¦ã€‚å……æ»¡æ´»åŠ›çš„åˆå­¦è€…ç»å¸¸åˆ›å»ºè®¸å¤šæ²¡æœ‰ä»€ä¹ˆç”¨çš„æŠ½è±¡ã€‚一个标识是,你是å¦åˆ›å»ºäº†è¿™æ ·ä¸€ä¸ªç±»,ä¸åŒ…å«ä»»ä½•代ç å¹¶ä¸”没有真的åšä»€ä¹ˆäº‹æƒ…,é™¤äº†æŠ½è±¡ä¸€äº›ä¸œè¥¿ã€‚è¿™ç§æŠ½è±¡æ˜¯å¯ä»¥ç†è§£çš„,但代ç çš„ç®€æ´æ€§çš„价值必须与代ç çš„æŠ½è±¡ä»·å€¼ç›¸æƒè¡¡ã€‚有时候,我们å¯ä»¥çœ‹åˆ°ä¸€ç§çƒ­æƒ…çš„ç†æƒ³ä¸»ä¹‰è€…çŠ¯çš„é”™è¯¯ï¼šåœ¨å·¥ç¨‹çš„ä¸€å¼€å§‹ï¼Œå®šä¹‰äº†ä¸€å¤§å †çš„çœ‹èµ·æ¥æŠ½è±¡å¾—å¾ˆç¾Žçš„ç±»ï¼Œç„¶åŽä»–会推测说它们å¯ä»¥å¤„ç†æ¯ä¸€ä¸ªå¯èƒ½å‡ºçŽ°çš„æƒ…å†µã€‚éšç€é¡¹ç›®æŽ¨è¿›åŠç事掺æ‚è¿›æ¥ï¼Œè¿™äº›ä»£ç æœ¬èº«å˜å¾—混乱了。函数体比他们本æ¥è¯¥æœ‰çš„æ ·å­è¿˜è¦é•¿ã€‚空的类是一ç§å†™æ–‡æ¡£çš„è´Ÿæ‹…ï¼Œåœ¨åŽ‹åŠ›ä¹‹ä¸‹ï¼Œå®ƒä»¬ä¼šè¢«å¿½ç•¥ã€‚å¦‚æžœèŠ±åœ¨æŠ½è±¡ä¸Šçš„ç²¾åŠ›èŠ±åœ¨äº†ä¿æŒäº‹æƒ…简短上,最åŽçš„结果应该会更好。这是一ç§*推测编程*的形å¼ã€‚我强烈推èPAUL gRAHAM[PGSite]的这篇文章['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html)。 + +有这样一ç§å…³äºŽ*ä¿¡æ¯å°è£…*å’Œ*é¢å‘对象编程*的有用技能,但有时候它们被带远了。这些技术让一个人抽象地编ç å¹¶é¢„è®¡å˜æ•°ã€‚然而,我个人认为,你ä¸åº”该写太多推测性的代ç ã€‚例如,在一个对象里用增é‡å™¨å’Œè®¿é—®å™¨éšè—一个整数å˜é‡æ˜¯ä¸€ç§å¯æŽ¥å—的风格,这样å˜é‡æœ¬èº«å°±æ²¡æœ‰æš´éœ²ï¼Œä»…仅暴露了很少的关于它的接å£ã€‚这确实å…许了å˜é‡çš„实现的改å˜ä¸å½±å“调用代ç ï¼Œå¹¶ä¸”å¯èƒ½å¯¹ä¸€ä¸ªå¿…é¡»æä¾›ä¸€ä¸ªç¨³å®šAPI的库编写者是åˆé€‚的。但我ä¸è®¤ä¸ºè¿™ç§å¥½å¤„会超过,当我的团队拥有调用代ç å¹¶å› æ­¤å¯ä»¥æŠŠè°ƒç”¨å™¨é‡æž„为比原æ¥çš„æ›´å®¹æ˜“时,冗长的代价。四到五行多余的代ç ä¼šæ˜¯è¿™ç§æŽ¨æµ‹æ€§å¥½å¤„的沉é‡ä»£ä»·ã€‚ + +å¯ç§»æ¤æ€§ä¹Ÿæœ‰ç±»ä¼¼çš„é—®é¢˜ã€‚ä»£ç æ˜¯å¦åº”当å¯ç§»æ¤åˆ°ä¸åŒçš„电脑,编译器,软件系统或平å°ï¼Ÿè¿˜æ˜¯ç®€å•地传输?我认为,ä¸å¯ç§»æ¤ï¼ŒçŸ­è€Œç®€å•ä¼ è¾“çš„ä»£ç æ¯”长而å¯ç§»æ¤çš„代ç è¦å¥½ã€‚把ä¸å¯ç§»æ¤ä»£ç é™åˆ¶åœ¨ç‰¹å®šçš„领域是相当方便的,并且当然是一个好主æ„。比如一个使用了特定DBMS的数æ®åº“查询的类。 + +Next [如何学习新技能](06-How to Learn New Skills.md) diff --git a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md new file mode 100644 index 0000000..1bf2ee4 --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -0,0 +1,13 @@ +# 如何学习新技能 + +å­¦ä¹ æ–°æŠ€èƒ½ï¼Œå°¤å…¶æ˜¯éžæŠ€æœ¯ç±»ï¼Œæ˜¯æœ€å¤§çš„ä¸€ç§ä¹è¶£ã€‚大多数公å¸åœ¨ç†è§£äº†è¿™å¯¹ç¨‹åºå‘˜çš„æ¿€åŠ±ç¨‹åº¦æ—¶ï¼Œä¼šæ›´åŠ åœ°æœ‰æ–—å¿—ã€‚ + +人类通过*åš*æ¥å­¦ã€‚读书和上课是有用的。但你对一个从ä¸å†™ç¨‹åºçš„程åºå‘˜ä¼šæœ‰ä»»ä½•敬æ„å—?学习任何技能,你应该把自己放在一个å¯ä»¥ç»ƒä¹ æŠ€èƒ½çš„宽容的ä½ç½®ã€‚学习一个新的编程语言时,在你必须åšä¸€ä¸ªå¤§å·¥ç¨‹å‰ï¼Œè¯•ç€ç”¨å®ƒåšä¸€ä¸ªå°çš„工程。学习管ç†è½¯ä»¶é¡¹ç›®æ—¶ï¼Œå…ˆè¯•ç€ç®¡ç†ä¸€ä¸ªå°çš„工程。 + +ä¸€ä¸ªå¥½çš„å¯¼å¸ˆä¸æ˜¯ä½ åšäº‹æƒ…的替代å“,而是比一本书更好的存在。你å¯ä»¥æä¾›ä»€ä¹ˆç»™ä¸€ä¸ªæ½œåœ¨çš„导师,作为他的知识的交æ¢ï¼Ÿè‡³å°‘,你应该努力学习这样他们的时间æ‰ä¸ä¼šè¢«æµªè´¹ã€‚ + +试ç€è®©ä½ çš„boss给你正规的训练,但必须知é“,这通常并ä¸ä¼šæ¯”,把相åŒé‡çš„æ—¶é—´èŠ±åœ¨ï¼Œç®€å•地用你想学的技能玩è€ä¸Šï¼Œè¦å¥½å¤šå°‘ã€‚ç„¶è€Œï¼Œè¦æ±‚训练比在我们ä¸å®Œç¾Žä¸–ç•Œé‡Œçš„çŽ©è€æ—¶é—´è¦å®¹æ˜“å¾—å¤šï¼Œå°½ç®¡å¤§é‡æ­£è§„è®­ç»ƒåªæ˜¯åœ¨è¯¾ç¨‹ä¸Šç¡è§‰ï¼Œç­‰ç€æ™šé¤èšä¼šã€‚ + +如果你领导团队,需è¦çŸ¥é“他们是怎么学习的,并且通过给他们安排适é‡çš„å’Œå¯ä»¥é”»ç‚¼ä»–们感兴趣的技能的工程。ä¸è¦å¿˜è®°ç¨‹åºå‘˜æœ€é‡è¦çš„æŠ€èƒ½ä¸æ˜¯æŠ€æœ¯ã€‚让你的团队æˆå‘˜æœ‰ä¸€ä¸ªæœºä¼šåŽ»çŽ©ï¼Œé”»ç‚¼å‹‡æ°”ï¼Œè¯šå®žï¼Œä»¥åŠäº¤æµã€‚ + +Next [学会分类](07-Learn to Type.md) diff --git a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md new file mode 100644 index 0000000..f75f60c --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -0,0 +1,5 @@ +# 学会打字 + +å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„æ‰¿è¯ºçš„ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当Michael Tiemann在MCC的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³å¦‚此急促以至于是ä¸å¯åˆ†è¾¨çš„。 + +Next [如何åšé›†æˆæµ‹è¯•](08-How to Do Integration Testing.md) diff --git a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md new file mode 100644 index 0000000..06dd8ce --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -0,0 +1,7 @@ +# 如何åšé›†æˆæµ‹è¯• + +é›†æˆæµ‹è¯•是对已ç»è¿›è¡Œå•元测试的å„ä¸ªéƒ¨åˆ†çš„ä¸€ç§æ•´åˆæµ‹è¯•ã€‚é›†æˆæ˜¯æ˜‚贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 + +ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯é›†æˆå¿…须显å¼è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,仔细评估。 + +Next [交æµè¯­è¨€](09-Communication Languages.md) diff --git a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md new file mode 100644 index 0000000..30fe064 --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -0,0 +1,11 @@ +# 交æµè¯­è¨€ + +在语法系统里,有一些正å¼å®šä¹‰çš„,éžç¼–程语言但是*交æµè¯­è¨€*的语言,它们为促进交æµè€Œéžæ ‡å‡†è€Œç‰¹åˆ«è®¾è®¡ã€‚2003年,最é‡è¦çš„è¿™ç§è¯­è¨€æœ‰ï¼šUML,XML, SQL。你应该熟悉这些东西,这样你就å¯ä»¥å¾ˆå¥½åœ°äº¤æµå¹¶ä¸”决定什么时候去使用它们。 + +UML是一个丰富的用图表æè¿°è®¾è®¡çš„æ­£å¼ç³»ç»Ÿã€‚å®ƒçš„ç¾Žä¸½ä¹‹å¤„åœ¨äºŽå®ƒæ—¢è™šæ‹Ÿåˆæ­£å¼ï¼Œåœ¨ä½œè€…和观众都了解UMLçš„å‰æä¸‹ï¼Œå¯ä»¥å®¹çº³å¤§é‡çš„ä¿¡æ¯ã€‚你需è¦äº†è§£å®ƒï¼Œå› ä¸ºè®¾è®¡æœ‰æ—¶å€™å°±æ˜¯ç”¨è¿™ç§æ–¹å¼äº¤æµçš„。有一些éžå¸¸æœ‰ç”¨çš„工具å¯ä»¥è®©åˆ¶ä½œUML图看起æ¥éžå¸¸ä¸“业。在很多情况下,UML太正å¼äº†ï¼Œæˆ‘自己会使用更简å•çš„*ç®±å­ä¸Žç®­å¤´*的风格æ¥è®¾è®¡å›¾æ ‡ã€‚但我éžå¸¸ç¡®å®šUML对你æ¥è¯´è‡³å°‘跟学习拉ä¸è¯­ä¸€æ ·æœ‰ç”¨ï¼ˆè¯‘者注:国外拉ä¸è¯­ä½¿ç”¨å¾ˆå¹¿æ³›ï¼‰ã€‚ + +XMLæ˜¯è®¾è®¡æ–°æ ‡å‡†çš„æ ‡å‡†ã€‚è¿™ä¸æ˜¯ä¸€ä¸ªæ•°æ®é—´äº¤æ¢çš„é—®é¢˜çš„è§£å†³æ–¹æ¡ˆï¼Œå°½ç®¡ä½ æœ‰æ—¶å€™ä¼šçœ‹åˆ°å®ƒåœ¨è¿™ç§æƒ…况下出现。更进一步,它是一ç§å—欢迎的对大部分数æ®äº¤æ¢çš„æ— èŠéƒ¨åˆ†çš„自动化,也就是,把表现结构化为线性åºåˆ—,还有将其转回一个结构。它æä¾›äº†ä¸€äº›æ¼‚亮的类型和正确性检查,尽管,åˆä¸€æ¬¡ï¼Œå®žè·µä¸­ä½ å¯èƒ½éœ€è¦çš„åªæ˜¯å…¶ä¸­çš„一部分。 + +SQL是一ç§éžå¸¸æœ‰åŠ›è€Œä¸°å¯Œçš„æ•°æ®æŸ¥è¯¢å’Œæ“作语言,而éžä¸€ç§ç¼–程语言。它有许多ç§ç±»ï¼Œå…¸åž‹åœ°ä¾èµ–于产å“,但这没有标准核心那么é‡è¦ã€‚SQL是关系数æ®åº“çš„*巧舌弗兰å¡*。你å¯èƒ½å¯ä»¥ä¹Ÿå¯èƒ½ä¸å¯ä»¥åœ¨ä»»ä½•领域从对关系数æ®åº“çš„ç†è§£ä¸­å—益,但你必须对它们和SQL的语法和å«ä¹‰æœ‰åŸºæœ¬çš„ç†è§£ã€‚ + +Next [é‡åž‹å·¥å…·](10-Heavy Tools.md) diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md new file mode 100644 index 0000000..cf08ddb --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -0,0 +1,14 @@ +# é‡åž‹å·¥å…· + +éšç€æˆ‘们的科技文化的进步,软件技术从ä¸å¯æƒ³è±¡ï¼Œåˆ°ç ”究,到新的产å“,到标准化产å“,到广泛å¯ç”¨å’Œå»‰ä»·äº§å“。这些é‡åž‹å·¥å…·å¯ä»¥æ‹‰åŠ¨å¾ˆå¤§çš„è´Ÿè½½ï¼Œä½†å¯èƒ½æ˜¯è¿›é˜¶çš„,并且需è¦èŠ±å¤§é‡æŠ•èµ„åŽ»ç†è§£ã€‚进阶程åºå‘˜å¿…须知é“如何管ç†å®ƒä»¬ä»¥åŠå®ƒä»¬ä»€ä¹ˆæ—¶å€™åº”该被使用或考虑。 + +现在在我看æ¥ï¼Œæœ€å¥½çš„é‡åž‹å·¥å…·æ˜¯ï¼š + +- 关系数æ®åº“ï¼› +- 全文æœç´¢å¼•擎; +- 数学库; +- OpenGl; +- XMLè§£æžå™¨ï¼› +- 电å­è¡¨æ ¼ã€‚ + +Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How to analyze data.md) diff --git a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md new file mode 100644 index 0000000..f653768 --- /dev/null +++ b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -0,0 +1,17 @@ +# å¦‚ä½•åˆ†æžæ•°æ® + +当你检查一个商业活动并且å‘现了把它转æ¢ä¸ºè½¯ä»¶åº”用程åºçš„需求时,数æ®åˆ†æžæ˜¯è½¯ä»¶å¼€å‘早期的一个过程。这是一个官方的定义,当你,一个程åºå‘˜ï¼Œåº”该集中注æ„åŠ›åœ¨å†™åˆ«äººè®¾è®¡çš„ä¸œè¥¿çš„ä»£ç æ—¶ï¼Œè¿™å¯èƒ½ä¼šè®©ä½ ç›¸ä¿¡æ•°æ®åˆ†æžæ˜¯ä¸€ç§æ›´åº”该归入系统分æžçš„行为。如果我们严格éµå¾ªè½¯ä»¶å·¥ç¨‹èŒƒå¼ï¼Œè¿™å¯èƒ½æ˜¯æ­£ç¡®çš„。有ç»éªŒçš„程åºå‘˜ä¼šæˆä¸ºè®¾è®¡è€…,最尖é”çš„è®¾è®¡è€…å˜æˆå•†ä¸šåˆ†æžå¸ˆï¼Œå› æ­¤è¢«å† å去æ€è€ƒæ‰€æœ‰æ•°æ®éœ€è¦ï¼Œå¹¶ä¸”给你充分定义的任务去执行。这ä¸å®Œå…¨æ˜¯å¯¹çš„ï¼Œå› ä¸ºæ•°æ®æ˜¯æ¯ç§ç¼–程活动的核心。ä¸ç®¡ä½ åœ¨ä½ çš„程åºé‡Œåšä»€ä¹ˆï¼Œä½ ä¸æ˜¯åœ¨ç§»åŠ¨æ•°æ®å°±æ˜¯åœ¨ä¿®æ”¹æ•°æ®ã€‚商业分æžå¸ˆåˆ†æžçš„æ˜¯æ›´å¤§å°ºåº¦ä¸Šçš„需è¦ï¼Œè½¯ä»¶è®¾è®¡è€…更加压榨这个比例以至于,当问题在你的桌上è½åœ°æ—¶ï¼Œå¥½åƒä½ éœ€è¦åšçš„æ‰€æœ‰äº‹æƒ…æ˜¯åº”ç”¨èªæ˜Žçš„算法,开始移动已ç»å­˜åœ¨çš„æ•°æ®ã€‚ + +䏿˜¯è¿™æ ·çš„。 + +ä¸ç®¡ä½ å¼€å§‹è§‚å¯Ÿå®ƒçš„æ˜¯å“ªä¸ªé˜¶æ®µï¼Œæ•°æ®æ˜¯è‰¯å¥½è®¾è®¡çš„应用程åºçš„主è¦è€ƒè™‘因素,如果你仔细观察一个数æ®åˆ†æžå¸ˆæ˜¯æ€Žä¹ˆä»Žå®¢æˆ·è¯·æ±‚中获å–需求的,你会æ„è¯†åˆ°ï¼Œæ•°æ®æ‰®æ¼”了一个基本的角色。分æžå¸ˆåˆ›å»ºäº†æ‰€è°“çš„æ•°æ®æµè¡¨ï¼Œæ‰€æœ‰çš„æ•°æ®æºè¢«æ ‡è®°å‡ºæ¥ï¼Œä¿¡æ¯çš„æµåŠ¨è¢«å¡‘é€ å‡ºæ¥ã€‚清晰定义了什么数æ®åº”该是系统的一部分,设计师将会用数æ®å…³ç³»ï¼Œæ•°æ®äº¤æ¢å议,文件格å¼çš„å½¢å¼å¡‘é€ æ•°æ®æºï¼Œè¿™æ ·ä»»åŠ¡å°±å‡†å¤‡å¥½ä¼ é€’ç»™ç¨‹åºå‘˜äº†ã€‚然而,这个过程还没结æŸï¼Œå› ä¸ºä½ ï¼ˆç¨‹åºå‘˜ï¼‰åœ¨è¿™ä¸ªå‘¨å¯†çš„æ•°æ®æå–过程åŽï¼Œéœ€è¦åˆ†æžæ•°æ®ä»¥ç”¨æœ€å¥½çš„å¯èƒ½æ–¹å¼è¡¨çŽ°ä»»åŠ¡ã€‚ä½ çš„ä»»åŠ¡çš„åº•çº¿æ˜¯Niklaus Wirth,多ç§è¯­è¨€ä¹‹çˆ¶ï¼Œçš„金å¥ï¼šâ€œç®—法+æ•°æ®ç»“æž„=程åºâ€ã€‚è¿™æ°¸è¿œä¸æ˜¯ä¸€ä¸ªç‹¬ç«‹çš„自嗨的算法。æ¯ä¸ªç®—法都至少被设计去åšä¸€äº›è‡³å°‘与一段数æ®ç›¸å…³çš„事情。 + +因此,由于算法ä¸ä¼šåœ¨çœŸç©ºä¸­æ»šåŠ¨è½®å­ï¼Œä½ éœ€è¦åˆ†æžå…¶ä»–人已ç»ä¸ºä½ æ ‡è®°å¥½çš„æ•°æ®å’Œå¿…须写入代ç çš„å¿…è¦çš„æ•°æ®ã€‚ +一个å°ä¾‹å­ä¼šä½¿å¾—事情更清楚。实现一个图书馆的æœç´¢ç¨‹åºæ—¶ï¼Œé€šè¿‡ä½ çš„说明书,用户用类型/作者标题/出版社/出版年份/页数æ¥é€‰æ‹©ä¹¦æœ¬ã€‚你的程åºçš„中级目标是æä¾›ä¸€ä¸ªåˆæ³•çš„SQL语å¥åŽ»æœç´¢åŽç«¯æ•°æ®åº“。基于这些需è¦ï¼Œä½ æœ‰å‡ ä¸ªé€‰æ‹©ï¼šæŒ‰é¡ºåºæ£€æŸ¥æ¯ä¸ªæŽ§åˆ¶æ¡ä»¶ï¼Œä½¿ç”¨ä¸€ä¸ªswitch语å¥ï¼Œæˆ–者几个if语å¥ï¼›ç”¨ä¸€ä¸ªæ•°æ®æŽ§åˆ¶æ•°ç»„,把它们与一个事件驱动引擎相连。 + +如果你的需求也包括æé«˜æŸ¥è¯¢æ€§èƒ½ï¼Œé€šè¿‡ç¡®è®¤æ¯ä¸ªé¡¹åœ¨ä¸€ä¸ªç‰¹æ®Šé¡ºåºé‡Œï¼Œä½ å¯èƒ½è€ƒè™‘使用组件树去构建你的SQL语å¥ã€‚正如你å¯ä»¥çœ‹åˆ°çš„,算法的选择ä¾èµ–于你决定使用或将è¦åˆ›å»ºçš„æ•°æ®ã€‚这样的决定产生高效算法和糟糕算法间的区别。 +然而,æ•ˆçŽ‡ä¸æ˜¯å”¯ä¸€è¦è€ƒè™‘的因素。你å¯èƒ½åœ¨ä½ çš„代ç é‡Œä½¿ç”¨ä¸€æ‰“命åå˜é‡ï¼Œè®©å®ƒå˜å¾—å°½å¯èƒ½é«˜æ•ˆã€‚但这样一段代ç å¯èƒ½ä¸èƒ½å®¹æ˜“地维护。å¯èƒ½ä¸ºä½ çš„å˜é‡é€‰æ‹©ä¸€ç§åˆé€‚的容器å¯ä»¥ä¿æŒç›¸åŒçš„速度,此外,在的你åŒäº‹æ˜Žå¹´çœ‹ä»£ç çš„æ—¶å€™ï¼Œè®©ä»–们能够更好地ç†è§£ä»£ç ã€‚更多的,选择一个良好设计的数æ®ç»“æž„å¯èƒ½å…许他们在ä¸é‡å†™ä»£ç çš„å‰æä¸‹ï¼Œæ‹“å±•ä½ çš„ä»£ç çš„功能。长久看æ¥ï¼Œä½ å¯¹æ•°æ®çš„选择决定了你结æŸä»£ç çš„工作åŽï¼Œå®ƒèƒ½å·¥ä½œå¤šä¹…。 + +让我给你看å¦ä¸€ä¸ªä¾‹å­ï¼Œåªæ˜¯ä¸€äº›æ€æƒ³ç²®é£Ÿï¼Œè®©æˆ‘们å‡è®¾ä½ çš„任务是找到字典里超过三ä½çš„åŒå­—异构è¯ï¼ˆä¸€ä¸ªå¼‚æž„è¯å¿…é¡»åœ¨åŒæ ·çš„字典里有å¦ä¸€ä¸ªè¯ï¼‰ã€‚如果你把这当åšä¸€ä¸ªè®¡ç®—任务,你将会结æŸäºŽæ— å°½çš„,å°è¯•找出æ¯ä¸ªå•è¯çš„æ‰€æœ‰ç»„åˆï¼Œç„¶åŽæ‹¿å®ƒè·Ÿåˆ—表里的所有其他å•è¯æ¯”较,这样一个无尽的努力中。然而,如果你分æžäº†æ‰‹å¤´çš„æ•°æ®ï¼Œä½ ä¼šæ„识到,æ¯ä¸ªå•è¯å¯èƒ½è¢«ä¸€ä¸ªåŒ…å«è¿™ä¸ªè¯æœ¬èº«ä»¥åŠç”¨å®ƒçš„å­—æ¯ä½œä¸ºIDçš„æŽ’åºæ•°ç»„的记录所代表,这个蛮力算法å¯èƒ½éœ€è¦è¿è¡Œå‡ å¤©ï¼Œè€Œå°çš„é‚£ä¸ªç®—æ³•åªæ˜¯ä¸€ä»¶å‡ ç§’的事。下次é¢å¯¹ä¸€ä¸ªæ£˜æ‰‹çš„问题时,记ä½è¿™ä¸ªä¾‹å­ã€‚ + +Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How to Manage Development Time.md) diff --git a/zh/2-Intermediate/README.md b/zh/2-Intermediate/README.md new file mode 100644 index 0000000..61384be --- /dev/null +++ b/zh/2-Intermediate/README.md @@ -0,0 +1,29 @@ +# 2. 进阶 + +- 个人技能 + - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How to Stay Motivated.md) + - [如何被广泛信任](Personal-Skills/02-How to be Widely Trusted.md) + - [如何在时间和空间æƒè¡¡](Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [如何进行压力测试](Personal-Skills/04-How to Stress Test.md) + - [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [如何学习新技能](Personal-Skills/06-How to Learn New Skills.md) + - [学会打字](Personal-Skills/07-Learn to Type.md) + - [如何åšé›†æˆæµ‹è¯•](Personal-Skills/08-How to Do Integration Testing.md) + - [沟通语言](Personal-Skills/09-Communication Languages.md) + - [é‡åž‹å·¥å…·](Personal-Skills/10-Heavy Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](Personal-Skills/11-How to analyze data.md) +- 团队技能 + - [如何管ç†å¼€å‘æ—¶é—´](Team-Skills/01-How to Manage Development Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶çš„风险](Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [如何管ç†å’¨è¯¢å¸ˆ](Team-Skills/03-How to Manage Consultants.md) + - [如何适é‡äº¤æµ](Team-Skills/04-How to Communicate the Right Amount.md) + - [如何直言å对æ„è§ä»¥åŠé¿å…如此](Team-Skills/05-How to Disagree Honestly and Get Away with It.md) +- 判断 + - [如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´æƒè¡¡](Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](Judgment/02-How to Manage Software System Dependence.md) + - [如何判断一个软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How to Decide if Software is Too Immature.md) + - [如何决定购买还是构建](Judgment/04-How to Make a Buy vs Build Decision.md) + - [如何专业地æˆé•¿](Judgment/05-How to Grow Professionally.md) + - [如何评估é¢è¯•](Judgment/06-How to Evaluate Interviewees.md) + - [如何知é“何时实施昂贵的计算机科学](Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How to Talk to Non-Engineers.md) diff --git a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md new file mode 100644 index 0000000..3a4159f --- /dev/null +++ b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -0,0 +1,11 @@ +# 如何管ç†å¼€å‘æ—¶é—´ + +管ç†å¼€å‘时间,需è¦ç»´æŠ¤ä¸€ä¸ªç®€æ˜Žä¸”实时更新的计划。一个工程计划是一个估计,一个时间表,一系列å–得进步的里程碑,还有对你的团队或者你的时间在æ¯ä¸ªä»»åŠ¡çš„ä¼°è®¡å’Œå®‰æŽ’ã€‚è¿™ä¹Ÿåº”è¯¥åŒ…æ‹¬ä½ éœ€è¦è®°å¾—去åšçš„其他事,比如与质é‡ä¿éšœäººå‘˜è§é¢ï¼Œå‡†å¤‡æ–‡æ¡£ï¼Œæˆ–è€…è®¢è´­è®¾å¤‡ã€‚å¦‚æžœä½ åœ¨ä¸€ä¸ªå›¢é˜Ÿé‡Œï¼Œå·¥ç¨‹è®¡åˆ’ä¼šæ˜¯ä¸€ä¸ªå…±åŒæ‰¿è®¤çš„å议,ä¸è®ºæ˜¯åœ¨å¼€å§‹ï¼Œè¿˜æ˜¯è¿›è¡Œçš„过程中。 + +功能工程计划存在的æ„义是帮助åšå‡ºå†³å®šï¼Œè€Œéžå±•ç¤ºä½ æ˜¯å¦‚ä½•ç»„ç»‡çš„ã€‚å¦‚æžœä¸€ä¸ªå·¥ç¨‹è®¡åˆ’å¤ªé•¿æˆ–è€…ä¸æ˜¯æœ€æ–°çš„,它对åšå‡ºå†³å®šå°†æ˜¯æ— ç”¨çš„。现实中,这些决定通常是关于独立的个人的。计划和你的判断让你决定你是å¦åº”当把任务从一个人身上移到å¦ä¸€ä¸ªäººèº«ä¸Šã€‚里程碑标识了你的进步。如果你有一个奇妙的工程规划工具,ä¸è¦è¢«ä¸ºå·¥ç¨‹åˆ›å»ºä¸€ä¸ªè¡¨é¢å·¨å¤§è®¾è®¡ï¼ˆBig Design Up Front)所迷惑,但å¯ä»¥ç”¨å®ƒä¿æŒæ¸…晰和实时性。 + +如果你没有一个里程碑,你应该采å–峿—¶çš„行动,比如通知你的bosså·¥ç¨‹å·²ç»æ»‘过的部分中进度的完æˆã€‚è¿™ç§ä¼°è®¡å’Œæ—¶é—´è¡¨å¯èƒ½ä¸ä¼šåœ¨å¼€å§‹æ—¶å¾ˆå®Œç¾Žï¼Œè¿™ä¼šäº§ç”Ÿè¿™æ ·ä¸€ç§å¹»è§‰ï¼Œä½ èƒ½å¤Ÿå¡«è¡¥å·¥ç¨‹çš„上一个部分中错过的日志。你å¯ä»¥ã€‚但这很å¯èƒ½æ˜¯å› ä¸ºä½ ä½Žä¼°äº†é‚£ä¸ªéƒ¨åˆ†æˆ–者高估了一部分。所以工程进度的完æˆå·²ç»æ»‘过了,ä¸ç®¡ä½ æ˜¯å¦å–œæ¬¢ã€‚ + +ç¡®ä¿ä½ çš„计划包括了:内部团队会议,写代ç ï¼Œæ–‡æ¡£ï¼Œè§„åˆ’å‘¨æœŸæ´»åŠ¨ï¼Œé›†æˆæµ‹è¯•,处ç†å¤–部关系,疾病,休å‡ï¼Œå·²æœ‰å·¥ç¨‹ç»´æŠ¤ï¼Œè¿˜æœ‰å¼€å‘环境维护。工程计划å¯ä»¥ä½œä¸ºä¸€ç§ä¸ºå±€å¤–人或你的boss准备的关于你或你的团队正在åšçš„äº‹æƒ…çš„è§†å›¾ã€‚å› ä¸ºå¦‚æ­¤ï¼Œæ‰€ä»¥å®ƒåº”è¯¥æ˜¯çŸ­ä¸”åŠæ—¶æ›´æ–°çš„。 + +Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How to Manage Third-Party Software Risks.md) diff --git a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md new file mode 100644 index 0000000..5e09cff --- /dev/null +++ b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -0,0 +1,11 @@ +# 如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº + +一个工程通常ä¾èµ–于它所ä¸èƒ½æŽ§åˆ¶çš„ç»„ç»‡ï¼Œç¬¬ä¸‰æ–¹è½¯ä»¶å±æœºæ˜¯æ¯ä¸ªç›¸å…³çš„人都必须æ„识到的。 + +永远也ä¸è¦æŠŠå¸Œæœ›æ”¾åœ¨*蒸汽*上é¢ã€‚蒸汽是任何所谓的尚未å¯ç”¨ç„¶è€Œå£°ç§°å¯ç”¨çš„软件。这是最确定的一ç§ç ´äº§çš„æ–¹å¼ã€‚仅仅怀疑一个软件公å¸åœ¨æŸä¸ªæ—¥æœŸå¯¹äºŽæŸä¸ªè½¯ä»¶äº§å“çš„æŸä¸ªç‰¹æ€§çš„æ‰¿è¯ºæ˜¯ä¸æ˜Žæ™ºçš„ã€‚æ›´æ˜Žæ™ºçš„åšæ³•是完全忽略它,并且忘记你曾å¬è¯´è¿‡è¿™ç§äº‹ã€‚ä¸è¦åœ¨ä½ çš„å…¬å¸ä½¿ç”¨çš„任何文档里写下这些东西。 + +å¦‚æžœä¸€ä¸ªç¬¬ä¸‰æ–¹è½¯ä»¶ä¸æ˜¯è’¸æ±½ï¼Œå®ƒä»ç„¶æ˜¯æœ‰é£Žé™©çš„,但至少它是一个å¯ä»¥å¤„ç†çš„蒸汽。如果你正在考虑使用第三方软件, 你应该早点投入一点精力去评估它。人们å¯èƒ½æ²¡å¬è¯´è¿‡ï¼Œè¯„估三个产å“çš„é€‚åˆæ€§è¦èŠ±ä¸¤ä¸ªæ˜ŸæœŸè¿˜æ˜¯ä¸¤ä¸ªæœˆï¼Œä½†è¿™å¿…é¡»å°½å¯èƒ½åŠæ—©åšã€‚没有åˆé€‚的估计,集æˆçš„代价ä¸èƒ½è¢«å‡†ç¡®è®¡ç®—。 + +ç†è§£å·²æœ‰çš„为æŸä¸ªç‰¹æ®Šç›®çš„的第三方软件的适用性是éžå¸¸è§ä»è§æ™ºçš„东西。这是éžå¸¸å®¢è§‚的,并且通常ä½åœ¨ä¸“家心里。如果你å‘现了那些专家,你å¯ä»¥èŠ‚çœå¾ˆå¤šæ—¶é—´ã€‚很多时候,一个工程会如此完全地ä¾èµ–于第三方软件,以至于如果集æˆå¤±è´¥äº†ï¼Œå·¥ç¨‹å°±å¤±è´¥äº†ã€‚åƒæ—¶é—´è¡¨é‡Œå†™çš„é‚£æ ·æ¸…æ™°åœ°è¡¨è¾¾äº†å±æœºã€‚å¦‚æžœå±æœºä¸èƒ½è¢«å°½æ—©æ¶ˆé™¤ï¼Œè¯•ç€è®¢ä¸€ä¸ªä¸ºæ„外准备的计划,比如å¯ç”¨çš„第二方案,或者自己写下功能点的能力。永远ä¸è¦è®©æ—¶é—´è¡¨ä¾èµ–于蒸汽。 + +Next [如何管ç†å’¨è¯¢å¸ˆ](03-How to Manage Consultants.md) diff --git a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md new file mode 100644 index 0000000..08c3fca --- /dev/null +++ b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -0,0 +1,9 @@ +# 如何管ç†å’¨è¯¢å¸ˆ + +使用咨询师,但ä¸è¦ä¾èµ–他们。他们是神奇的人,éžå¸¸å€¼å¾—尊敬。因为他们看过许多ä¸åŒçš„å·¥ç¨‹ï¼Œä»–ä»¬é€šå¸¸æ¯”ä½ çŸ¥é“æ›´å¤šå…·ä½“æŠ€æœ¯ï¼Œç”šè‡³æ˜¯ç¼–ç¨‹æŠ€æœ¯ã€‚æœ€å¥½çš„ä½¿ç”¨ä»–ä»¬çš„æ–¹å¼æ˜¯åƒå®¶æ•™é‚£æ ·ç”¨ä¾‹å­æ•™å­¦ã€‚ + +然而,他们通常ä¸èƒ½åƒæ­£å¸¸å‘˜å·¥é‚£æ ·ç”¨ç›¸åŒçš„æ„Ÿè§‰èžå…¥å›¢é˜Ÿï¼Œå¯èƒ½ä»…仅是因为你没有足够的时间去学习他们的优点和缺点。他们的工资更低。他们更容易离开。如果公å¸åšå¾—好,他们å¯èƒ½å¾—到的更少。有些å¯èƒ½æ˜¯å¥½çš„,有些å¯èƒ½ä¸Žå¹³å‡æ°´å¹³ä¸€è‡´ï¼Œæœ‰äº›å¯èƒ½æŒºç³Ÿç³•,但希望你对咨询师的选择ä¸ä¼šåƒä½ å¯¹é›‡å‘˜çš„选择那样仔细,这样你会获得更多ä¸å¥½çš„咨询师。 + +如果咨询师è¦å†™ä»£ç ï¼Œä½ å¿…须在你使用它们å‰ä»”细review。有ç€å¤§æ®µå¸¦é£Žé™©çš„代ç ï¼Œä½ åˆ°ä¸äº†å·¥ç¨‹çš„终点。事实上这对所有的团队æˆå‘˜éƒ½æ˜¯æˆç«‹çš„,但你通常有更多与你接近的团队æˆå‘˜çš„知识。 + +Next [如何适é‡äº¤æµ](04-How to Communicate the Right Amount.md) diff --git a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md new file mode 100644 index 0000000..7ad241c --- /dev/null +++ b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -0,0 +1,7 @@ +# 如何适é‡äº¤æµ + +仔细考虑会议的代价:这花费了*éšå‚与者数é‡å€å¢žçš„æ—¶é—´*。会议有时候是必è¦çš„,但越å°è¶Šå¥½ã€‚å°ä¼šè®®çš„交æµè´¨é‡æ›´å¥½ï¼Œè¿‡åº¦æµªè´¹çš„æ—¶é—´æ›´å°‘。如果一个人在会议感到厌烦,把这当åšä¼šè®®åº”该更å°çš„æ ‡è¯†ã€‚ + +éžæ­£å¼äº¤æµå€¼å¾—åšä»»ä½•事情去鼓励。更多有用的沟通工作在åŒäº‹é—´çš„åˆé¥­å¯ä»¥è¿›è¡Œï¼Œè€Œéžå…¶ä»–çš„æ—¶é—´ã€‚è®¸å¤šå…¬å¸æ²¡æœ‰æ„è¯†åˆ°æˆ–è€…ä¸æ”¯æŒè¿™ä¸€ç‚¹ï¼Œè¿™æ˜¯ä¸€ç§é—憾。 + +Next [如何直言异议以åŠé¿å…](05-How to Disagree Honestly and Get Away with It.md) diff --git a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md new file mode 100644 index 0000000..0cc1766 --- /dev/null +++ b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -0,0 +1,11 @@ +# 如何直言异议以åŠå¦‚何é¿å… + +异议是一个åšå‡ºå¥½å†³å®šçš„ç»ä½³æœºä¼šï¼Œä½†è¿™éœ€è¦è¢«è°¨æ…Žå¤„ç†ã€‚ä½ å¯èƒ½ä¼šè§‰å¾—你充分的表达了你的想法,并且在决定åšå‡ºå‰ï¼Œä½ çš„æ„è§å·²ç»è¢«å¬å–ã€‚è¿™ç§æƒ…况下,没有什么å¯ä»¥å†è¯´çš„,你应该决定你是å¦è¦æ”¯æŒè¿™ä¸ªå†³å®šï¼Œå³ä½¿ä½ ä¸åŒæ„它。如果你å¯ä»¥åœ¨è‡ªå·±ä¸åŒæ„的情况下,支æŒè¿™ä¸ªå†³å®šï¼Œå°±è¿™æ ·è¯´å®žè¯ã€‚è¿™å±•ç¤ºäº†ä½ æ˜¯å¤šä¹ˆæœ‰ä»·å€¼ï¼Œå› ä¸ºä½ æ˜¯ç‹¬ç«‹çš„ï¼Œä¸æ˜¯ä¸€ä¸ªå”¯å”¯è¯ºè¯ºä¹‹äººï¼ŒåŒæ—¶æ˜¯ä¸€ä¸ªå°Šé‡å†³å®šçš„团队æˆå‘˜ã€‚ + +有时候一个你ä¸åŒæ„的决定,会在决策者没有充分å¬å–你的观点å‰åšå‡ºã€‚你应该在公å¸å’Œé›†ä½“的基础上评估是å¦åº”该æå‡ºè¿™ä¸ªè¯é¢˜ã€‚如果在你看æ¥è¿™åªæ˜¯ä¸€ä¸ªå°é”™è¯¯ï¼Œè¿™å¯èƒ½ä¸å€¼å¾—釿–°è€ƒè™‘。如果在你看æ¥è¿™æ˜¯ä¸€ä¸ªå¤§é”™ï¼Œä½ å½“ç„¶å¿…é¡»æå‡ºå¼‚议。 + +é€šå¸¸ï¼Œè¿™ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚在一些充满压力的环境下,在一些个人因素下,这会导致事情个人化。例如,一些éžå¸¸ç‰›é€¼çš„程åºå‘˜åœ¨ä»–们有好的ç†ç”±è®¤ä¸ºä¸€ä»¶ä¸œè¥¿æ˜¯é”™çš„æ—¶å€™ï¼Œç¼ºä¹æŒ‘战决议的信心。在最糟的情况下,决策者是ä¸å®‰å…¨çš„ï¼Œå¹¶ä¼šæŠŠè¿™å˜æˆä¸€ä¸ªå¯¹æƒå¨çš„æŒ‘战。最好记ä½ï¼Œè¿™ç§æƒ…况下,人们会用他们大脑中爬虫动物的部分æ¥åšå‡ºå应。你应该ç§ä¸‹æå‡ºä½ çš„争议,然åŽå°è¯•展示新的知识是如何改å˜å†³è®®åšå‡ºçš„基础的。 + +ä¸ç®¡å†³è®®æ˜¯å¦è¢«æŽ¨ç¿»ï¼Œä½ å¿…须记ä½ä½ æ°¸è¿œä¸èƒ½è¯´å‡ºâ€œæˆ‘çš„è¯æ’‚这了,我早就这样告诉你了â€è¿™æ ·çš„è¯ï¼Œå› ä¸ºè¿™ä¸ªå†³å®šå·²ç»å¾—到了充分探讨。 + +Next [判断 - 如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´é—´æƒè¡¡](../Judgment/01-How to Tradeoff Quality Against Development Time.md) diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md new file mode 100644 index 0000000..f146765 --- /dev/null +++ b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -0,0 +1,11 @@ +# å¦‚ä½•ä¸Žæ—¶é—´åŽ‹åŠ›åšæ–—争 + +å‘布压力是快速推出好产å“çš„åŽ‹åŠ›ã€‚è¿™æ˜¯å¥½çš„ï¼Œå› ä¸ºå®ƒåæ˜ äº†å¸‚场事实,并且在æŸä¸ªæ„义上是å¥åº·çš„ã€‚æ—¶é—´åŽ‹åŠ›æ˜¯è¿«ä½¿ä¸€ä¸ªäº§å“æ›´å¿«åœ°æŽ¨å‡ºçš„压力,这是浪费的,ä¸å¥åº·çš„,并且太普é了。 + +时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–们对我们所åšçš„äº‹æƒ…ï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。看ä¸åˆ°åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一的事情是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ + +与时间压力斗争的方法是简å•地把它当åšå‘布压力,实现的方法是让å¯ç”¨åŠ³åŠ›ä¸Žäº§å“间的关系å˜å¾—逿˜Žã€‚æä¾›ä¸€ä¸ªè¯šå®žï¼Œç»†è‡´ï¼Œå¤§éƒ¨åˆ†å¯ç†è§£çš„å¯¹æ‰€æœ‰ç›¸å…³åŠ³åŠ›çš„ä¼°è®¡ï¼Œæ˜¯ä¸€ç§æœ€å¥½çš„实现方å¼ã€‚å…许åšå‡ºå¥½çš„管ç†å†³å®šä»¥æƒè¡¡å¯èƒ½çš„功能也是一个附加的好处。 + +必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其他èŒä¸šä»»æ„所表现的。程åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构造了一个过程,我希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ + +Next [如何ç†è§£ç”¨æˆ·](02-How to Understand the User.md) diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md new file mode 100644 index 0000000..4f73816 --- /dev/null +++ b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -0,0 +1,17 @@ +# 如何ç†è§£ç”¨æˆ· + +ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„bossç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š + +- 用户通常会åšå‡ºç®€çŸ­çš„判断 +- 用户有他们自己的工作,他们主è¦ä¼šæ€è€ƒä½ çš„产å“中å°çš„æ”¹è¿›ï¼Œè€Œéžå¤§çš„æ”¹è¿› +- 用户看ä¸åˆ°ä½ çš„产å“çš„æ•´ä¸ªç”¨æˆ·ç”»åƒ + +你的责任是找出他们真实需è¦çš„东西,而éžä»–们说他们需è¦çš„东西,然而,更好的是,在你开始å‰ï¼Œå»ºè®®ä»–ä»¬ï¼Œè®©ä»–ä»¬åŒæ„你想åšçš„,就是他们真实想è¦çš„东西,但他们å¯èƒ½æ²¡æœ‰è¿™ç§æ„¿æ™¯ã€‚你对你自己的主æ„的信心是è¦çœ‹æƒ…å†µçš„ã€‚ä½ å¿…é¡»åŒæ—¶ä¸Žè‡ªå¤§å’Œé”™è¯¯çš„è°¦é€Šåšæ–—争去找出什么是人们真实想è¦çš„。这两ç§äººï¼Œæˆ–者åŒä¸€ä¸ªäººèº«ä¸Šä¸¤ç§æ€ç»´æ¨¡å¼ï¼Œä¸€åŒå’Œè°å·¥ä½œä¼šç»™å‡ºæœ€å¥½çš„æœºä¼šæ¥ç»™å‡ºæ­£ç¡®çš„æ„¿æ™¯ã€‚ + +你在用户身上花费的时间更多,你就能够更好地ç†è§£ä»€ä¹ˆèƒ½å¤ŸçœŸæ­£åœ°æˆåŠŸã€‚ä½ åº”å½“å°è¯•在你的用户上尽å¯èƒ½æµ‹è¯•你的想法,如果å¯èƒ½çš„è¯ï¼Œä½ ç”šè‡³åº”当和他们一起åƒé¥­ã€‚ + +Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ã€‚ + +我相信,åˆä¼™äººå’Œå’¨è¯¢å¸ˆè®©å®¢æˆ·è¯´å‡ºä»–们内心真正想è¦çš„东西有巨大的困难。如果你想æˆä¸ºä¸€ä¸ªå’¨è¯¢å¸ˆï¼Œå»ºè®®ä½ åŸºäºŽç”¨æˆ·æ¸…晰的头脑以åŠä»–们的钱包æ¥é€‰æ‹©å®¢æˆ·ã€‚ + +Next [如何得到晋å‡](03-How to Get a Promotion.md) diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md new file mode 100644 index 0000000..36572cd --- /dev/null +++ b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -0,0 +1,13 @@ +# å¦‚ä½•èŽ·å¾—æ™‹å‡ + +想è¦è¢«æå‡ä¸ºæŸç§è§’色,先åšé‚£ä¸ªè§’色该åšçš„事情。 + +为了æå‡åˆ°æŸä¸ªä½ç½®ï¼Œæ‰¾åˆ°é‚£ä¸ªä½ç½®æœŸæœ›åšçš„事情,然åŽåŽ»åšã€‚ + +想è¦å¾—到薪酬的æå‡ï¼Œå¸¦ç€ä¿¡æ¯åŽ»å商。 + +如果你觉得你值得得到æå‡ï¼Œä¸Žä½ çš„bossèŠä¸€èŠã€‚清楚地问他们你需è¦åšä»€ä¹ˆæ‰èƒ½èŽ·å¾—æå‡ï¼Œç„¶åŽåŠªåŠ›åŽ»åšã€‚è¿™å¬èµ·æ¥å¾ˆè€å¥—,但大多数时候你对你需è¦åšçš„事情的追求与你boss的想法是ä¸åŒçš„。这å¯èƒ½ä¼šè®©ä½ çš„boss在æŸäº›ç¨‹åº¦ä¸Šæœ‰äº›å¤±è½ã€‚ + +大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和boss地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 + +Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How to Develop Talent.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md new file mode 100644 index 0000000..73d2295 --- /dev/null +++ b/zh/3-Advanced/README.md @@ -0,0 +1,21 @@ +# 3. 高级 +- 技术评审 + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„地方](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何使用嵌入å¼è¯­è¨€](Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [选择语言](Technical-Judgment/03-Choosing Languages.md) +- 明智地妥å + - [如何与时间压力斗争](Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How to Understand the User.md) + - [如何得到晋å‡](Compromising-Wisely/03-How to Get a Promotion.md) +- æœåŠ¡ä½ ä»¬çš„å›¢é˜Ÿ + - [如何å‘展你们的æ‰èƒ½](Serving-Your-Team/01-How to Develop Talent.md) + - [如何选择工作的内容](Serving-Your-Team/02-How to Choose What to Work On.md) + - [如何从你的队å‹å­¦åˆ°æœ€å¤šä¸œè¥¿](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何划分问题](Serving-Your-Team/04-How to Divide Problems Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„任务](Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [如何获得对工程的支æŒ](Serving-Your-Team/06-How to Gather Support for a Project.md) + - [如何å‘展一个系统](Serving-Your-Team/07-How to Grow a System.md) + - [如何有效地交æµ](Serving-Your-Team/08-How to Communicate Well.md) + - [如何告诉别人他们ä¸åƒçŸ¥é“的东西](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [如何处ç†ç»„织混乱](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md new file mode 100644 index 0000000..c4ba737 --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -0,0 +1,23 @@ +# 如何å‘展æ‰èƒ½ + +Nietschze夸大了他所说的: + +>æ€ä¸æ­»æˆ‘们的,åªä¼šè®©æˆ‘们更强大。 + +你最大的责任是对你的团队负责。你应该éžå¸¸äº†è§£ä»–们中的æ¯ä¸ªäººã€‚你应该激励你的团队,但ä¸è¦è®©ä»–们过劳。你通常应该告诉他们他们被激励的方å¼ã€‚如果他们觉得划算,他们会被很好的激励。æ¯ä¸ªå·¥ç¨‹ä¸­ï¼Œæˆ–者在æ¯ä¸ªå…¶ä»–的工程里,试ç€åŒæ—¶ç”¨ä»–们建议的以åŠä½ è®¤ä¸ºå¯¹ä»–们好的方å¼åŽ»æ¿€åŠ±ä»–ä»¬ã€‚æ¿€åŠ±ä»–ä»¬çš„æ–¹æ³•ä¸æ˜¯ç»™ä»–们更多工作,而是给他们一个新的技能或在团队里扮演一个新的角色。 + +你应该å…许人们(包括你自己)å¶å°”失败,并且应该为一些失败预留一些时间。如果从未有失败,冒险也就没有æ„义。如果没有å¶ç„¶çš„失败,说明其实你没有足够努力。当一个人失败了,你应该尽å¯èƒ½æ¸©æŸ”地对待他,ä¸è¯¥æŠŠä»–ä»¬å½“åšæˆåŠŸäº†é‚£æ ·å­ã€‚ + +为了让æ¯ä¸ªå›¢é˜Ÿæˆå‘˜è¢«å……分激励,问清楚他们中的æ¯ä¸ªäººï¼Œå¦‚果他们没有动力的è¯ï¼Œä»–们需è¦ä»€ä¹ˆæ‰èƒ½è¢«å……分激励。你å¯èƒ½éœ€è¦è®©ä»–ä»¬ä¿æŒä¸æ»¡æ„的状æ€ï¼Œä½†ä½ éœ€è¦çŸ¥é“æ¯ä¸ªäººéœ€è¦çš„æ˜¯ä»€ä¹ˆã€‚ + +ä½ ä¸è¯¥å› ä¸ºè¿™æ ·çš„åŽŸå› æ”¾å¼ƒï¼Œæˆ–è€…è®©ä¸€äº›äººæ¾æ‡ˆï¼šä»–ä»¬å£«æ°”ä½Žè½æˆ–è€…ä¸æ»¡å› æ­¤æ•…æ„æ²¡æœ‰æ‰¿æ‹…分担到的责任。你必须试ç€è®©ä»–们充分被激励并且有效率。åªè¦ä½ æœ‰è€å¿ƒï¼ŒåšæŒè¿™æ ·åšã€‚当你的è€å¿ƒè€—尽时,就解雇他们å§ã€‚ä½ ä¸èƒ½å…许故æ„ä¸å¸å…¶èŒçš„员工留在团队里,因为这对团队ä¸å…¬å¹³ã€‚ + +通过在公众场åˆè¿™æ ·è¯´ï¼Œè®©ä½ å›¢é˜Ÿä¸­çš„强大æˆå‘˜æ¸…楚地知é“他们是强大的。表扬应当公开,批评应当ç§å¯†ã€‚ + +团队中的强大æˆå‘˜ä¼šè‡ªç„¶åœ°æ¯”弱的æˆå‘˜æœ‰æ›´å¤šå›°éš¾çš„任务。这是完美而自然的,没人为因此困扰,因为æ¯ä¸ªäººéƒ½åŠªåŠ›å·¥ä½œã€‚ + +一个在工资中没有å馈出æ¥çš„奇怪的事实是,好的程åºå‘˜æ¯”å个糟糕的程åºå‘˜è¦æœ‰æ•ˆçŽ‡å¾—å¤šã€‚è¿™å¯¼è‡´äº†ä¸€ç§å¥‡æ€ªçš„现象。通常,如果你们的弱程åºå‘˜ä¸æŒ¡é“çš„è¯ï¼Œä½ èƒ½è·‘的更快。如果你这样åšäº†ï¼Œäº‹å®žä¸Šä½ åœ¨çŸ­æœŸèƒ½å–得更多进度。然而, 你的交易会失去一些é‡è¦çš„好处,å«åšå¯¹å¼±å°æˆå‘˜çš„训练,对集体知识的传递,失去强大程åºå‘˜åŽçš„æ¢å¤èƒ½åŠ›ã€‚å¼ºå¤§çš„ç¨‹åºå‘˜å¯¹è¿™ç§çŽ°è±¡åº”è¯¥æ¸©å’Œäº›ï¼Œå¹¶ä¸”ä»Žå„ç§è§’度去考虑这个问题。 + +ä½ ç»å¸¸èƒ½å¤Ÿç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 + +Next [如何选择工作的内容](02-How to Choose What to Work On.md) diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md new file mode 100644 index 0000000..11d7f14 --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -0,0 +1,5 @@ +# 如何选择工作的内容 + +你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 + +Next [如何最大化利用你的队å‹](03-How to Get the Most From Your Teammates.md) diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md new file mode 100644 index 0000000..cb6d19b --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -0,0 +1,15 @@ +# 如何让你的队å‹çš„价值最大化 + +为了让你的队å‹çš„价值最大化,å‘展好的团队精神,试ç€ä¿æŒæ¯ä¸ªäººçš„个人挑战与渴望。 + +为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œæ²¡æœ‰ä¼šæƒ³è¦è®©å…¶ä»–任何人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ + +团队领导力的一个关键是促进团结,这样æ¯ä¸ªäººéƒ½ä¼šå¬ä½ çš„。有时候这æ„味ç€å…许你的队å‹çŠ¯é”™ã€‚ä¹Ÿå°±æ˜¯ï¼ŒåŸºäºŽè¿™ç§å›¢ç»“,如果对项目没有太大的æŸå®³ï¼Œä½ å¿…é¡»å…许你团队的一部分æˆå‘˜ç”¨ä»–们自己的方å¼åšäº‹ï¼Œå³ä½¿ä½ æœ‰å¾ˆå¤§çš„ä¿¡å¿ƒè®¤ä¸ºè¿™æ˜¯ä¸€ä»¶é”™äº‹ã€‚å½“è¿™ç§æƒ…况确实å‘生时,ä¸è¦åŒæ„他们的观点,简å•公开地åå¯¹ä¹‹ï¼Œç„¶åŽæŽ¥å—è¿™ç§å›¢ç»“。ä¸è¦è®©äººè§‰å¾—ä½ å—伤了,或者认为你是被迫的,简å•地陈述你ä¸åŒæ„,但认为团队的团结是更加é‡è¦çš„。这ç»å¸¸ä¼šå¯¼è‡´ä»–们忂”ã€‚å¦‚æžœä»–ä»¬çœŸçš„åæ‚”了,ä¸è¦åšæŒä»–们一开始的计划。 + +如果在你们从所有åˆé€‚的角度讨论了这个è¯é¢˜åŽï¼Œæœ‰ä¸ªäººä¼šå对,简å•地告诉他们,你必须åšä¸€ä¸ªå†³å®šï¼Œå¹¶ä¸”è¿™å°±æ˜¯ä½ çš„å†³å®šã€‚å¦‚æžœæœ‰æ–¹æ³•åŽ»è¯„ä¼°ä½ çš„å†³å®šæ˜¯å¦æ˜¯é”™çš„,或者它ç¨åŽæ˜¯å¦æ˜¯é”™çš„,尽å¯èƒ½å¿«é€Ÿåˆ‡æ¢ï¼Œå¹¶æ„Ÿæ¿€é‚£ä¸ªå¯¹çš„人。 + +询问你的团队,包括集体与个人,这样一个问题:他们认为什么能创造团队精神以åŠåˆ›é€ ä¸€ä¸ªé«˜æ•ˆçš„团队。 + +ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ + +Next [如何划分问题](04-How to Divide Problems Up.md) diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md new file mode 100644 index 0000000..e6b7cc7 --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -0,0 +1,9 @@ +# 如何划分问题 + +接手一个软件工程并把它分为å¯ä»¥ç”±ä¸ªäººå®žçŽ°çš„ä»»åŠ¡æ˜¯å¾ˆæœ‰è¶£çš„ã€‚è¿™äº‹åº”è¯¥åŠæ—©è¿›è¡Œã€‚有时候ç»ç†å¯èƒ½ä¼šè®¤ä¸ºä¸è€ƒè™‘个人的项目能够起作用。这是ä¸å¯èƒ½çš„,因为æ¯ä¸ªäººçš„生产力是如此广泛地ä¸åŒã€‚对æŸä¸ªç»„件有特殊知识的人也ç»å¸¸æ”¹å˜ï¼Œå¹¶ä¸”å¯ä»¥å¯¹å·¥ä½œæ•ˆæžœæœ‰ä¸€ä¸ªæ•°é‡çº§çš„å½±å“。 + +正如一个作曲家认为ä¹å™¨çš„音色会其é‡è¦ä½œç”¨ï¼Œæˆ–者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 + +因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–ä»¬çš„ä¸æ“…é•¿çš„æ–¹å‘æˆ–者学习新的技能。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 + +Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How to Handle Boring Tasks.md) diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md new file mode 100644 index 0000000..4c94c4d --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -0,0 +1,7 @@ +# å¦‚ä½•å¤„ç†æ— èŠçš„任务 + +有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬Larry Wall的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 + +如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ + +Next [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How to Gather Support for a Project.md) diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md new file mode 100644 index 0000000..257563f --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -0,0 +1,5 @@ +# å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ + +è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你的创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的智慧。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 + +Next [如何å‘展一个系统](07-How to Grow a System.md) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md new file mode 100644 index 0000000..6021f7c --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -0,0 +1,23 @@ +# 如何å‘展一个系统 + +æ ‘çš„ç§å­åŒ…å«äº†æˆé•¿çš„æ€æƒ³ï¼Œä½†ä¸å®Œå…¨å®žçްæˆé•¿ä½“的形å¼ä¸ŽåŠ›é‡ã€‚胚胎会æˆé•¿ã€‚它会å˜å¤§ã€‚å®ƒçœ‹èµ·æ¥æ›´åƒæˆé•¿ä½“,并越æ¥è¶Šæœ‰ç”¨ã€‚最终它孕育果实。最åŽï¼Œå®ƒæ­»äº¡å¹¶ä¸”它的躯体喂养了其他的有机体。 + +对待软件我们也应当有这样的è£è€€ã€‚ä¸€æž¶æ¡¥ä¸æ˜¯è¿™æ ·çš„,永远ä¸ä¼šæœ‰ä¸€æž¶å©´å„¿æ¡¥ï¼Œä½†åªæ˜¯æœ‰ä¸€åº§æœªå®Œæˆçš„æ¡¥ã€‚桥比软件è¦ç®€å•得多。 + +认识到软件的æˆé•¿æ˜¯æœ‰ç›Šçš„,因为这å…许我们在有一个完美的æ€ç»´å›¾æ™¯å‰å–得有用的进步。我们å¯ä»¥ä»Žç”¨æˆ·é‚£é‡ŒèŽ·å¾—åé¦ˆï¼Œå¹¶ç”¨ä¹‹çº æ­£è¿™ç§æˆé•¿ã€‚修剪掉疲软的四肢æ‰èƒ½å¥åº·ã€‚ + +程åºå‘˜å¿…须设计一个完æˆçš„å¯åˆ†å‘å¯ä½¿ç”¨çš„系统。但高级程åºå‘˜éœ€è¦åšçš„æ›´å¤šã€‚你必须设计一个终于完结系统的æˆé•¿è·¯çº¿ã€‚你的工作是,得到一个想法的èŒèŠ½ï¼Œç„¶åŽæŠŠå®ƒå°½å¯èƒ½é¡ºåˆ©åœ°å˜æˆä¸€ä¸ªæœ‰ç”¨çš„人工制å“。 + +因此,你必须模拟最终的结果,用一ç§å·¥ç¨‹å›¢é˜Ÿå¯ä»¥ä¸ºä¹‹é›€è·ƒçš„æ–¹å¼åŽ»äº¤æµã€‚但你也必须和他们交æµä¸€æ¡éžè·³è·ƒå¼çš„è·¯å¾„ï¼Œä»Žä»–ä»¬æ‰€çŸ¥åˆ°ä»–ä»¬æƒ³è¦æˆä¸ºçš„地方去。在整个过程中,这棵树必须活ç€ï¼Œå®ƒä¸èƒ½åœ¨ä»€ä¹ˆæ—¶å€™æ­»åŽ»ï¼Œç„¶åŽåˆå¤æ´»è¿‡æ¥ã€‚ + +è¿™æ¡è·¯å¾„会是螺旋å‘展的。里程碑之间永远ä¸ä¼šå¤ªè¿œï¼Œè¿™å¯¹äºŽåœ¨è·¯ä¸Šå–得进步是有用的。在æžç«¯çš„商业环境里,如果里程碑å¯ä»¥å®žçŽ°å¹¶å°½æ—©èµšé’±æ˜¯æœ€å¥½çš„ã€‚ï¼Œå³ä½¿ä»–们离良好设计的端点还有很远。程åºå‘˜çš„ä¸€ä¸ªå·¥ä½œå°±æ˜¯é€šè¿‡ç†æ™ºçš„选择用里程碑表示的æˆé•¿è·¯å¾„æ¥å¹³è¡¡å³æ—¶çš„æŠ¥é…¬ä¸Žå°†æ¥çš„æŠ¥é…¬ã€‚ + +高级程åºå‘˜å¯¹è½¯ä»¶ï¼Œå›¢é˜Ÿï¼Œä¸ªäººçš„æˆé•¿æœ‰é›†ä½“è´£ä»»ã€‚ + +一个读者,Rob Hafernik,在这一节中写下了这样的评论: + +> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚å½“ä½ å·¥ä½œåœ¨ä¸€ä¸ªå¤§çš„ç³»ç»Ÿä¸­ï¼Œå¿…é¡»æœ‰å³æ—¶ç›®æ ‡ç›¸å…³çš„坿µ‹é‡çš„进步时,这些也是*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 + +对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ + +Next [如何良好地交æµ](08-How to Communicate Well.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md new file mode 100644 index 0000000..06c64ab --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -0,0 +1,11 @@ +# 如何有效地沟通 + +ä¸ºäº†è‰¯å¥½åœ°æ²Ÿé€šï¼Œä½ å¿…é¡»è®¤è¯†åˆ°å®ƒçš„å›°éš¾ã€‚å®ƒæœ¬èº«å°±æ˜¯ä¸€ç§æŠ€èƒ½ã€‚ä¸Žä½ äº¤æµçš„人本身是有瑕疵的,这一事实使得沟通å˜å¾—更加困难。他们ä¸ä¼šåŠªåŠ›åŽ»ç†è§£ä½ ã€‚他们ä¸å–„言辞。他们ç»å¸¸è¿‡åº¦å·¥ä½œæˆ–者无èŠï¼Œè‡³å°‘,有时候åªå…³æ³¨ä»–们自己的工作而éžä½ è¦å‘表的长篇大论。上课,练习写作,公共演讲,è†å¬ï¼Œè¿™äº›ä¸œè¥¿çš„一个好处是,如果你擅长它们,你å¯ä»¥æ›´å®¹æ˜“看到问题所在以åŠè§£å†³æ–¹æ³•。 + +程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„ç”Ÿå­˜ä¾èµ–于与团队的交æµã€‚高级程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„æ»¡æ„ä¾èµ–于与团队外的人的交æµã€‚ + +程åºå‘˜ä»Žæ··æ²Œä¸­å¸¦æ¥ç§©åºï¼Œä¸€ç§å®žçŽ°è¿™ä¸€ç›®æ ‡çš„æœ‰è¶£æ–¹æ³•æ˜¯ä»Žå¤–éƒ¨çš„ä¸€ä¸ªæè®®å¼€å§‹ã€‚这能用*稻è‰äºº*或*白纸*æ¨¡å¼æˆ–者å£å¤´çš„æ–¹å¼æ¥å®Œæˆã€‚è¿™ç§é¢†å¯¼å¯¹äºŽè®©å›¢é˜Ÿç½®èº«äºŽè¾©è®ºä¸­æœ‰æžå¤§çš„好处。这也把你暴露到批评,或者,拒ç»ä¸Žå¦å®šä¸­ã€‚高级程åºå‘˜å¿…须准备好接å—这些,因为他有特殊的能力,也因此有特殊的责任。éžç¨‹åºå‘˜å‡ºèº«çš„ä¼ä¸šå®¶éœ€è¦ç¨‹åºå‘˜åœ¨æŸäº›æ–¹é¢æä¾›é¢†å¯¼ã€‚程åºå‘˜æ˜¯æ€æƒ³ä¸ŽçŽ°å®žä¹‹é—´çš„ä¸€éƒ¨åˆ†æ¡¥æ¢ã€‚ + +æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了能é‡ï¼Œæ²¡æœ‰äººå› æ­¤ä¼šçœ‹ä½Žä½ ã€‚ + +Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How to Tell People Things They Don't Want to Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md new file mode 100644 index 0000000..f91d89e --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -0,0 +1,9 @@ +# å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西 + +你会ç»å¸¸éœ€è¦å‘Šè¯‰äººä»¬ä¸€äº›è®©ä»–们ä¸èˆ’æœçš„事情。记ä½ï¼Œä½ å¿…须为æŸç§åŽŸå› æ‰è¿™æ ·åšã€‚å³ä½¿æ²¡æœ‰ä»€ä¹ˆå¯ä»¥ç”¨æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ ä¹Ÿè¯¥å°½æ—©å‘Šè¯‰ä»–们,这样他们æ‰èƒ½å……分警觉。 + +å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你å¯èƒ½ä¼šä¸è¢«ä¿¡ä»»ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ + +一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯”deadline抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ + +Next [如何处ç†ç®¡ç†ç¥žè¯](10-How to Deal with Managerial Myths.md) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md new file mode 100644 index 0000000..74d2fc4 --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -0,0 +1,12 @@ +# 如何处ç†ç®¡ç†ç¥žè¯ + +*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›å®—教内容æ¥è§£é‡Šå®‡å®™å’Œäººç±»ä¸Žä¹‹çš„关系。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š + +- æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ +- 程åºå‘˜æ˜¯å¹³ç­‰çš„。(程åºå‘˜å¯ä»¥æŒ‰é‡è¦ç¨‹åº¦åˆ†ç±»ã€‚) +- åˆ†é…æ›´å¤šèµ„æºç»™è¿Ÿæ¥çš„项目å¯ä»¥è®©å®ƒåŠ é€Ÿã€‚ï¼ˆä¸Žæ–°äººçš„äº¤æµçš„代价大多数时候很ç¹é‡å¹¶ä¸”无用。) +- 程åºå‘˜çš„æ•ˆçއå¯ä»¥ç”¨ä¸€äº›ç®€å•的标准尺度æ¥åº¦é‡ï¼Œæ¯”如代ç è¡Œæ•°ï¼ˆå¦‚æžœç®€æ´æ‰æ˜¯åŠ›é‡ï¼Œé‚£ä¹ˆä»£ç è¡Œæ•°æ˜¯å的,而éžå¥½çš„。) + +如果有机会,你å¯ä»¥è¯•ç€è§£é‡Šè¿™äº›ä¸œè¥¿ï¼Œä½†å¦‚果你没有æˆåŠŸï¼Œä¸è¦è§‰å¾—悲伤,ä¸è¦å¥½æ–—地å对这些神è¯ä»¥è‡´æŸå®³äº†ä½ çš„声望。æ¯ä¸ªè¿™æ ·çš„神è¯å¢žå¼ºäº†ç®¡ç†è€…关于他们有一些对正在进行的事情的实际控制的想法。真相是,如果管ç†è€…是好的,他们会帮助你,如果他们是å的,他们会妨ç¢ä½ ã€‚ + +Next [如何处ç†ç»„织混乱](11-How to Deal with Organizational Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md new file mode 100644 index 0000000..f611e0c --- /dev/null +++ b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -0,0 +1,11 @@ +# 如何处ç†ç»„织混乱 + +ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ + +> 工程师有能力创造与维æŒã€‚ + +éžå·¥ç¨‹å¸ˆå¯ä»¥å®‰æŽ’人们,但,在典型的软件公å¸ï¼Œå¦‚果没有程åºå‘˜çš„è¯ï¼Œä»–们ä¸èƒ½åˆ›é€ ä¸Žç»´æŒä»»ä½•东西,正如工程师通常ä¸èƒ½æœ‰æ•ˆåœ°é”€å”®äº§å“或者管ç†å•†ä¸šã€‚è¿™ç§åŠ›é‡å¯¹äºŽå¤§å¤šæ•°ä¸Žä¸´æ—¶ç»„ç»‡æ··ä¹±ç›¸å…³çš„é—®é¢˜æ˜¯ä¸€ç§æŠµæŠ—ã€‚å¦‚æžœä½ æœ‰è¿™ç§åŠ›é‡ï¼Œä½ åº”å½“å®Œå…¨å¿½è§†è¿™ç§æ··ä¹±å¹¶å½“åšä»€ä¹ˆéƒ½æ²¡å‘ç”Ÿé‚£æ ·åšæŒä¸‹åŽ»ã€‚ä½ å¯èƒ½ï¼Œå½“然,被解雇,但如果这å‘生了,你å¯èƒ½å› ä¸ºè¿™ç§åŠ›é‡å¾—到新的工作。更普é的,一些紧张的没有这ç§é­”力的人会进入你的空间并告诉你åšä¸€äº›è ¢äº‹ã€‚å¦‚æžœä½ çœŸçš„ç¡®ä¿¡è¿™æ˜¯ä¸€ä»¶è ¢äº‹ï¼Œæœ€å¥½çš„åšæ³•是微笑,点头,直到他们走开,然åŽç»§ç»­åšä½ è®¤ä¸ºå¯¹å…¬å¸æœ€å¥½çš„事情。 + +如果你是一个领导者,告诉你的员工åšä¸€æ ·çš„事情,告诉他们忽视其他任何人告诉他们的东西。这ç§è¡Œä¸ºçš„è¿‡ç¨‹å¯¹ä½ ä¸ªäººæ˜¯æœ€å¥½çš„ï¼Œå¯¹ä½ çš„å…¬å¸æˆ–工程也是最好的。 + +Next [è¯æ±‡è¡¨](../../4-Glossary.md) diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md new file mode 100644 index 0000000..f268928 --- /dev/null +++ b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -0,0 +1,9 @@ +# 如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分 + +解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。,大é‡çš„工作是困难的,但ä¸å¿…然是ä¸å¯èƒ½çš„。 + +è¿™ç§åŒºåˆ«æ˜¯æ»‘稽的,因为你å¯èƒ½ç»å¸¸è¢«è¦æ±‚åšä¸€äº›äº‹å®žä¸Šä¸å¯èƒ½çš„事情,ä¸è®ºæ˜¯ä»Žç§‘学观点还是从软件工程观点。然åŽä½ çš„å·¥ä½œå°±å˜æˆäº†å¸®åŠ©è€æ¿æ‰¾åˆ°ä¸€ä¸ªåˆç†çš„,仅仅是困难而éžä¸å¯èƒ½çš„解决方案,去满足他们大部分的需è¦ã€‚当一个解决方案å¯ä»¥è¢«è‡ªä¿¡åœ°è§„划且风险å¯ä»¥é¢„æ–™æ—¶ï¼Œå®ƒåªæ˜¯å›°éš¾è€Œå·²ã€‚ + +ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有清晰的æˆåŠŸçš„å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ + +Next [如何使用嵌入型语言](02-How to Utilize Embedded Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md new file mode 100644 index 0000000..0ea3730 --- /dev/null +++ b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -0,0 +1,11 @@ +# 如何使用嵌入型语言 + +把一ç§ç¼–程语言嵌入到一个系统对程åºå‘˜æ¥è®²æœ‰ç€å‡ ä¹Žä¸Žæ€§ä¸€æ ·çš„é­”åŠ›ã€‚è¿™æ˜¯ä¸€ç§æœ€å…·æœ‰åˆ›é€ åŠ›çš„å¯ä»¥è¡¨çŽ°çš„è¡Œä¸ºã€‚è¿™ä½¿å¾—ç³»ç»ŸæƒŠäººåœ°å¼ºå¤§ã€‚è¿™ä¹Ÿå…è®¸ä½ é”»ç‚¼å¤§å¤šæ•°åˆ›é€ æ€§å’Œæœ‰ç”Ÿå‘½åŠ›çš„èƒ½åŠ›ï¼ŒæŠŠç³»ç»Ÿå˜æˆä½ çš„æœ‹å‹ã€‚ + +世界上最好的文本编辑器都有嵌入性语言。这å¯ä»¥è¢«ç”¨äºŽé¢„计的观众å¯ä»¥æŽŒæ¡çš„语言的范围,语言的使用å¯ä»¥å˜ä¸ºå¯é€‰çš„,正如文本编辑器里那样,这样在一开始å¯ä»¥ä½¿ç”¨å®ƒï¼Œè€Œæ²¡æœ‰å…¶ä»–人必须使用它。 + +我和许多其他的程åºå‘˜æ›¾å å…¥åˆ›é€ ç‰¹æ®Šç›®çš„的嵌入型语言的困境里。我曾ç»åŽ†è¿‡ä¸¤æ¬¡ã€‚å·²ç»å­˜åœ¨äº†è®¸å¤šä¸ºåµŒå…¥åž‹è¯­è¨€è®¾è®¡çš„语言,在创造一个新的语言å‰ï¼Œä½ åº”该三æ€ã€‚ + +使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢APIå—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ä¸ªå·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ + +Next [选择语言](03-Choosing Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md new file mode 100644 index 0000000..2fe19d9 --- /dev/null +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -0,0 +1,15 @@ +# 选择语言 + +喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„boss说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜é©±åŠ¨ã€‚æ¯«æ— ç–‘é—®ä»–ä»¬æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ + +但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣 + +一门编程语言,如果学习它比学习自然语言还è¦éš¾ï¼Œé‚£å®ƒçœŸçš„应该被称为符å·ã€‚对åˆå­¦è€…和一些门外汉æ¥è¯´â€œå­¦ä¹ ä¸€é—¨æ–°è¯­è¨€â€åƒæ˜¯ä¸€ä¸ªä»¤äººç”Ÿç•的任务,但在你掌æ¡äº†ä¸‰ç§è¯­è¨€åŽï¼Œè¿™åªæ˜¯ä¸€ä¸ªç†Ÿæ‚‰å¯ç”¨çš„库的简å•问题。一个程åºå‘˜è¶‹å‘于æ€è€ƒä¸€ä¸ªç”±ä¸‰å››é—¨è¯­è¨€ç»„æˆçš„一个大æ‚çƒ©ç³»ç»Ÿï¼Œä½†æˆ‘è®¤ä¸ºè¿™æ ·ä¸€ä¸ªç³»ç»Ÿåœ¨å¾ˆå¤šæƒ…å†µä¸‹è¦æ¯”å•一语言系统è¦å¼ºå¤§ï¼Œç†ç”±æœ‰ä»¥ä¸‹å‡ ä¸ªæ–¹é¢ï¼š + +- ä¸åŒç¬¦å·ç¼–写的部分间,必è¦çš„æ¾è€¦åˆå­˜åœ¨ï¼ˆè™½ç„¶å¯èƒ½æ²¡æœ‰å¹²å‡€çš„æŽ¥å£ï¼‰ +- 通过独立é‡å†™æ¯ä¸ªç»„件,你å¯ä»¥è½»æ¾åœ°å†™å‡ºä¸€ä¸ªæ–°çš„è¯­è¨€å¹³å° +- åªæœ‰ä¸€é—¨è¯­è¨€å¯èƒ½å¯¹ä¸€ä¸ªåºžå¤§çš„系统ä¸å¤ªé€‚åˆ - 你的多个模å—由多ç§è¯­è¨€ç»„æˆï¼Œèƒ½è®©ä½ ä¸ºä»»åŠ¡æ‰¾åˆ°æ­£ç¡®çš„å·¥å…·ã€‚ + +这些效应å¯èƒ½æœ‰äº›åªæ˜¯å¿ƒç†ä¸Šçš„,但心ç†ä¸Šçš„东西也很é‡è¦ã€‚最åŽè¦è¯´çš„æ˜¯ï¼Œè¯­è¨€æš´æ”¿çš„代价超过了它能æä¾›çš„æ‰€æœ‰å¥½å¤„。 + +Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) diff --git a/zh/4-Glossary.md b/zh/4-Glossary.md new file mode 100644 index 0000000..e939d6d --- /dev/null +++ b/zh/4-Glossary.md @@ -0,0 +1,110 @@ +# è¯æ±‡è¡¨ + +è¿™æ˜¯è¿™ç¯‡æ–‡ç« é‡Œç”¨åˆ°çš„ä¸€äº›çŸ­è¯­çš„è¯æ±‡è¡¨ã€‚它们ä¸ä¸€å®šæ˜¯äººä»¬ç†Ÿæ‚‰çš„æ ‡å‡†å«ä¹‰ï¼ŒEric S. Raymond曾ç»ç¼–译过一份信æ¯é‡å·¨å¤§çš„è¯æ±‡è¡¨[HackerDict],如果你能ç†è§£å…¶ä¸­çš„ä¸€äº›ç‰‡æ®µï¼Œé˜…è¯»è¿™ä¸ªè¯æ±‡è¡¨å°†æ˜¯æƒŠå–œè€Œæ„‰æ‚¦çš„。 + +**unk-unk** +: unknown-unknown的简写。指的是一些暂时ä¸èƒ½è¢«æ¦‚念化的问题,它们会å·èµ°é¡¹ç›®çš„æ—¶é—´å¹¶ä¸”阻塞时间表。 + +**boss** +: 给你任务的人或实体,有些地方å¯èƒ½æ³›æŒ‡å…¬ä¼—。 + +**printlining** +: 在严格的临时机制上,在程åºä¸­æ’入一些语å¥ï¼Œä¸ºè°ƒè¯•è¾“å‡ºä¸€äº›ç¨‹åºæ‰§è¡Œè¿‡ç¨‹ä¸­çš„ä¿¡æ¯ã€‚ + +**logging** +: 实践中编写程åºçš„ä¸€ç§æ–¹å¼ï¼Œä½¿å¾—它能够产生å¯è®¾ç½®çš„输出以æè¿°å®ƒçš„æ‰§è¡Œè¿‡ç¨‹ã€‚ + +**分治** +: 一ç§è‡ªä¸Šè€Œä¸‹è®¾è®¡çš„æŠ€æœ¯ï¼Œæ›´é‡è¦çš„æ˜¯ï¼Œä¸€ç§è°ƒè¯•的技术,划分问题或谜题为å°çš„问题或谜题。 + +**vapour** +: 幻觉,而且通常是对还ä¸èƒ½å‡ºå”®çš„软件虚å‡çš„æ‰¿è¯ºï¼Œå¾€å¾€ä¸ä¼šç‰©è´¨åŒ–为任何固定的东西。 + +**boss** +: 给你设定任务的人,有些时候,也指用户。 + +**tribe** +: 与你一åŒä¸ºç›¸åŒç›®æ ‡å¥‹æ–—的人们。 + +**低垂的水果** +: 轻易能达到的巨大æå‡ã€‚ + +**主办人** +:项目的å‘起人 + +**垃圾** +: ä¸å†éœ€è¦è¢«æ”¾åœ¨å†…存中的对象 + +**商业** +: 一群为财富èšåˆåœ¨ä¸€èµ·çš„人 + +**å…¬å¸** +: 一群为财富èšåˆåœ¨ä¸€èµ·çš„人 + +**集体** +: 一群与你共享文化亲缘与忠诚的人。 + +**滚动目盲** +: 一ç§ç”±äºŽæœ‰æ•ˆä¿¡æ¯è¢«å¤ªå¤šæ— æ•ˆä¿¡æ¯æŽ©ç›–导致你ä¸èƒ½å‘现它的效应 + +**挂钟** +: 由挂钟测é‡çš„现实中真实的时间,与CPU时间相对。 + +**瓶颈** +: 系统性能最é‡è¦çš„é™åˆ¶/一个å¯ä»¥é™åˆ¶æ€§èƒ½çš„界é™ã€‚ + +**主线** +: 一个独特的信æ¯å—,所有缓存副本都从它继承而æ¥ï¼Œä½œä¸ºè¿™ä»½æ•°æ®çš„官方版本。 + +**分é…的堆** +: 一份内存在这样的情况下å¯ä»¥è¢«ç§°ä¸ºåˆ†é…了堆:当释放它的机制已ç»å®Œæˆæ—¶ã€‚ + +**垃圾** +: å·²ç»è¢«åˆ†é…但ä¸å†æœ‰æœ‰æ•ˆæ„义的内存。 + +**GC** +: 一个回收垃圾的系统。 + +**内存泄露** +: æ— æ„æŒæœ‰çš„一系列对象的引用,它们é¿å…了垃圾回收(或者垃圾回收器或内存管ç†ç³»ç»Ÿä¸­çš„bugï¼ï¼‰å¯¼è‡´ç¨‹åºé𿗶间逿¸å¢žåŠ äº†å®ƒçš„å†…å­˜å ç”¨ã€‚ + +**æžé™ç¼–程** +: 一ç§å¼ºè°ƒä¸Žå®¢æˆ·äº¤æµä»¥åŠè‡ªåŠ¨åŒ–æµ‹è¯•çš„ç¼–ç¨‹é£Žæ ¼ã€‚ + +**碰å£** +: 因为耗尽了æŸç§ç‰¹å®šçš„资æºå¯¼è‡´æ€§èƒ½çªç„¶å¤§å¹…度地é™çº§ + +**投机编程** +: 在知é“一个东西有用å‰å°±æŠŠå®ƒåšå‡ºæ¥ã€‚ + +**ä¿¡æ¯éšè—(å°è£…)** +: 通过使用尽å¯èƒ½å°‘暴露信æ¯çš„æŽ¥å£æ¥è®©äº‹æƒ…ä¿æŒç‹¬ç«‹è§£è€¦çš„一ç§è®¾è®¡åŽŸåˆ™ã€‚ + +**é¢å‘对象编程** +: 一ç§å¼ºè°ƒåœ¨å¯¹è±¡å†…部管ç†çжæ€çš„编程风格。 + +**交æµè¯­è¨€** +: 一ç§ä¼˜å…ˆä¸ºæ ‡å‡†åŒ–è€Œéžæ‰§è¡Œè®¾è®¡çš„语言。 + +**ç®±å­ä¸Žç®­å¤´** +: 一ç§å®½æ¾ï¼Œéžæ­£å¼çš„,由箱å­å’Œç®­å¤´ç»„åˆè€Œæˆè¡¨è¾¾å…³ç³»çš„图表制作风格,这与正å¼çš„图表方法论,比如UML,相对。 + +**通用语** +: 一ç§è¯­è¨€æ˜¯å¦‚æ­¤å—æ¬¢è¿Žä»¥è‡³äºŽå®ƒæˆäº†å®ƒçš„领域中实际上的标准,例如法语一度æˆä¸ºå›½é™…外交的手段。 + +**buy vs. build** +: 用æ¥å½¢å®¹è´­ä¹°è½¯ä»¶è¿˜æ˜¯è‡ªå·±ç¼–写软件这样的选择。 + +**åˆå¹¶å·¥ä½œ** +: 需è¦å¾ˆå°‘创造力并产生很少风险的工作,åˆå¹¶å·¥ä½œå¯ä»¥è¢«å¾ˆå®¹æ˜“地评估。 + +**编程符å·** +: 编程语言的åŒä¹‰è¯ï¼Œå¼ºè°ƒç¼–程语言的数学本质以åŠå®ƒä»¬ä¸Žè‡ªç„¶è¯­è¨€ç›¸æ¯”的简å•之处。 + +**稻è‰äºº** +: 一ç§ç”¨æ¥ä½œä¸ºæŠ€æœ¯è®¨è®ºèµ·ç‚¹çš„æ–‡æ¡£ã€‚稻è‰äººä¹Ÿå¯ä»¥å¼•ç”³å‡ºç«æŸ´äººï¼Œç½å¤´äººï¼Œæœ¨å¤´äººï¼Œé“人,等等。 + +**白纸** +: 一ç§ä¿¡æ¯æ–‡æ¡£ï¼Œé€šå¸¸ç”¨æ¥è§£é‡Šæˆ–å°†äº§å“æˆ–æ€æƒ³å–给观众而éžç¨‹åºå‘˜ã€‚ + +Next [书ç±/网站](5-Bibliography.md) diff --git a/zh/5-Bibliography.md b/zh/5-Bibliography.md new file mode 100644 index 0000000..8a9ff70 --- /dev/null +++ b/zh/5-Bibliography.md @@ -0,0 +1,31 @@ +# 附录 A - 书目/网站目录 + +## 书目 + +[Rules00] Guy Kawasaki, Michelle Moreno, and Gary Kawasaki. 2000. HarperBusiness. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services. + +[RDev96] Steve McConnell. 1996. Microsoft Press. Redmond, Wash. Rapid Development: Taming Wild Software Schedules. + +[CodeC93] Steve McConnell. 1993. Microsoft Press. Redmond, Wash. Code Complete. + +[XP99] Kent Beck. 1999. 0201616416. Addison-Wesley. Extreme Programming Explained: Embrace Change. + +[PlanXP00] Kent Beck and Martin Fowler. 2000. 0201710919. Addison-Wesley. Planning Extreme Programming. + +[Prag99] Andrew Hunt, David Thomas, and Ward Cunningham. 1999. 020161622X. Addison-Wesley. The Pragmatic Programmer: From Journeyman to Master. + +[Stronger] Friedrich Nietzsche. 1889. Twilight of the Idols, "Maxims and Arrows", section 8.. + +## 网站 + +[PGSite] Paul Graham. 2002. Articles on his website: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). All of them, but especially "Beating the Averages". + +[Hacker] Eric S. Raymond. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). + +[HackDict] Eric S. Raymond. 2003. The New Hacker Dictionary. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). + +[ExpCS] Edsger W. Dijkstra. 1986. How Experimental is Computing Science?. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). + +[Knife] Edsger W. Dijkstra. 1984. On a Cultural Gap. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). + +Next [History](6-History.md) diff --git a/zh/6-History.md b/zh/6-History.md new file mode 100644 index 0000000..2f3507e --- /dev/null +++ b/zh/6-History.md @@ -0,0 +1,47 @@ +# 附录 B - åŽ†å² + +## è¿ç§»åˆ°Github + +这篇文章已ç»åœ¨github上作为一个仓库创建了,这样它å¯ä»¥å¾ˆå®¹æ˜“åœ°è¢«åˆ†äº«ã€æ›´æ–°ã€æé«˜ã€‚它是从这里å¤åˆ¶è¿‡æ¥çš„。[http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie)。 2016å¹´1月è¿ç§»åˆ°github。 + +## 希望å馈或扩展。 + +请将你对这篇文章的任何评论å‘给我,我会考虑所有的建议,大部分都会对这篇文章有所帮助。 + +这篇文章处于GNUå…费文档授æƒä¸‹ã€‚这个授æƒä¸æ˜¯ä¸“门为文章而设计的。文章通常有连贯的令人信æœçš„æœåŠ¡äºŽä¸€ä¸ªä¸­å¿ƒçš„è®ºæ®ã€‚我希望这篇文章尽é‡çŸ­è€Œæ˜“读。 + +æˆ‘å¸Œæœ›å®ƒæ˜¯è¯´æ˜Žæ€§çš„ï¼Œå°½ç®¡ä¸æ˜¯ä¸€æœ¬æ•™ç§‘书,它被划分æˆè®¸å¤šå°èŠ‚ï¼Œè¿™æ ·æ–°çš„ç« èŠ‚å¯ä»¥è¢«è‡ªç”±åœ°æ·»åŠ è¿›åŽ»ã€‚æœ‰äº†è¿™æ ·çš„å€¾å‘,你å¯ä»¥ç”¨ä½ è§‰å¾—åˆé€‚çš„æ–¹å¼æ¥æ‰©å±•这篇文章,且æœä»Žè¿™ä¸ªæŽˆæƒçš„规定。 + +å¯èƒ½è®¤ä¸ºè¿™ä¸ªæ–‡æ¡£å€¼å¾—æ‰©å±•æœ‰ç‚¹è‡ªå¤§ï¼Œä½†å¸Œæœ›ç”Ÿç”Ÿä¸æ¯ã€‚æˆ‘ä¼šå¾ˆé«˜å…´çœ‹åˆ°ä½ ç”¨ä»¥ä¸‹çš„æ–¹å¼æ‰©å±•它: + +对æ¯ä¸ªç« èŠ‚å¢žåŠ ä¸€äº›é˜…è¯»ç†è§£ï¼Œ + +增加更多章节, + +翻译为其他语言,å³ä½¿åªæ˜¯ä¸€å°éƒ¨åˆ†ä¸€å°éƒ¨åˆ†åœ°ç¿»è¯‘,或者 + +在文字间留下批评或评论, + +用ä¸åŒå½¢å¼æž„建的能力:比如palmæ ¼å¼æˆ–更好的HTMLæ ¼å¼ã€‚ + +å¦‚æžœä½ å‘æˆ‘传达了你的工作,我会考虑把它包括在我的å­ç‰ˆæœ¬é‡Œï¼Œéµå¾ªè¿™ä¸ªè®¸å¯è¯çš„规定。你也å¯ä»¥åœ¨æˆ‘的了解之外制作你自己的版本,正如这个å议所说的。 + +Thank you. + +Robert L. Read + +## 原始版本 + +这个文档的原始版本由Robert L. Read 在2000年制作,并且以电å­å½¢å¼åœ¨2002年首å‘于Samizdat Press(http://Samizdat.mines.edu) 。被Hire.com的程åºå‘˜æ‰€ä½¿ç”¨ã€‚ + +在这篇文章2003年被Slashdot刊载åŽï¼Œå¤§æ¦‚有75个人给我å‘过邮件æè¿‡å»ºè®®ä¸Žé”™è¯¯ä¿®æ”¹ã€‚我感激他们中的所有人。å¯èƒ½æœ‰å¾ˆå¤šé‡å¤ï¼Œä½†è¿™äº›äººä¸æ˜¯æå‡ºæ¥æœ€ä¸»è¦çš„建议就是第一个找到了我的bug:Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, 以åŠTom Corcoran。 + +最åŽï¼Œæˆ‘想感谢Christina Vallery,他的编辑和校对巨大地æé«˜äº†ç¬¬äºŒä»½è‰ç¨¿ï¼Œè¿˜æœ‰Wayne Allen,他鼓励我开始了这件事情。 + +## 原始作者的简介 + +Robert L. Read ç”Ÿæ´»åœ¨å¾·å…‹è¨æ–¯ï¼Œå¥¥æ–¯æ±€, 有一个妻å­å’Œä¸¤ä¸ªå­©å­ï¼Œä»–现在是Hire.com的首席工程师。他在那里工作了四年。在这之å‰ä»–建立了4R科技,为造纸工业生产基于扫æçš„图åƒåˆ†æžè´¨é‡æŽ§åˆ¶å·¥å…·ã€‚ + +Rob在1995年在德州大学获得数æ®åº“ç†è®ºæ–¹å‘的计算机åšå£«å­¦ä½ã€‚1987年他在Rice大学获得计算机科学学士学ä½ï¼Œåœ¨16岿—¶ï¼Œä»–就是一个带薪程åºå‘˜äº†ã€‚ + +Next [License](LICENSE.md) diff --git a/zh/7-Contributions.md b/zh/7-Contributions.md new file mode 100644 index 0000000..c9669c6 --- /dev/null +++ b/zh/7-Contributions.md @@ -0,0 +1,23 @@ +# Contributions + +这个仓库目标是æˆä¸ºä¸€ä¸ªç¤¾åŒºé©±åŠ¨çš„å·¥ç¨‹ï¼Œä½ çš„åŠ å…¥ä¼šæžå¤§åœ°ä¿ƒè¿›è¿™ä¸ªå‘导的质é‡ã€‚ + +## 我å¯ä»¥åšä»€ä¹ˆè´¡çŒ®ï¼Ÿ + +有很多方å¼ä¸º"How to be a Programmer"åšè´¡çŒ® + +- æ–°ç« èŠ‚çš„æ€æƒ³ +- æå‡å·²æœ‰çš„章节 +- 识别排版错误或其他章节中的问题 +- 为章节æä¾›é¢å¤–的资æºé“¾æŽ¥ +- 一般的用于æå‡å·¥ç¨‹çš„建议 + +## 贡献者 + +Github在这里会维护一个所有贡献者的列表[contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) + +## 校正与è¿ç§»åˆ°GitHub + +[Braydie Grove](https://www.github.com/braydie)å·²ç»åŒæ„作为主编。 + +Braydie把原始的文档转æˆäº†Markdown的形å¼å¹¶åˆ›å»ºäº†è¿™ä¸ªä»“库。 diff --git a/zh/LICENSE.md b/zh/LICENSE.md new file mode 100644 index 0000000..15ca9b3 --- /dev/null +++ b/zh/LICENSE.md @@ -0,0 +1,12 @@ + +## Creative Commons Attribution Share-Alike + +"How To Be A Programmer: Community Version" by Robert L. Read with Community is licensed under Creative Commons Attribution Share-Alike Internal v 4.0. + +At present this work will be edited by Braydie Grove and Robert L. Read. + +We will make reasonable attempts to maintain proper attributions of contributions in the section entittle "Contributions". If you make a pull-request with a significant contribution, please add a very brief description of your contribution to that section. + + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/zh/README.md b/zh/README.md new file mode 100644 index 0000000..33a685f --- /dev/null +++ b/zh/README.md @@ -0,0 +1,101 @@ +# How to be a Programmer 中文版 +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + +æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 + +## 引言 +  åšä¸€ä¸ªå¥½çš„程åºå‘˜æ˜¯å›°éš¾è€Œé«˜å°šçš„。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程,而且需è¦å·¨å¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但与好的程åºå‘˜æž„建一个让自己所负责的客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„的软件系统åšçš„é‚£äº›äº‹ç›¸æ¯”ï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶å¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 + +  这是éžå¸¸ä¸»è§‚的,所以,这篇文章注定是个人的并且一定程度上有点武断。我尽é‡å†™ä¸€äº›ä¸€ä¸ªç¨‹åºå‘˜åœ¨ta的工作中éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中是如此的普é以至于我(说的)å¯èƒ½çœ‹èµ·æ¥æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 + +  编程是在课程上教授的。 那些了ä¸èµ·çš„书: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识)以åŠåšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者此时,你当然也应该读一读Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 + +  在这篇文章里,bossè¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œé™¤äº†ä¸€äº›è¯­å¢ƒï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚ + +  欢迎æ¥åˆ°è¿™ä¸ªç¾¤ä½“。 + +## 目录 + +1. [入门](1-Beginner) + - 个人技能 + - [学会Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [如何分离问题debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [如何用Logæ¥Debug](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [如何处ç†I/O开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [如何处ç†å¶çŽ°çš„Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - 团队技能 + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) + - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [进阶](2-Intermediate) + - 个人技能 + - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [é‡è¦çš„工具](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - 团队技能 + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [如何直言ä¸èµžåŒä»¥åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - 评判 + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [如何知é“何时实施昂贵的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [高级](3-Advanced) + - 技术评判 + - [如何从ä¸å¯èƒ½çš„事情中找到困难的地方](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - 机智地妥å + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [如何从你的åŒä¼´èº«ä¸ŠèŽ·å¾—æœ€å¤§æ”¶ç›Š](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何分割问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [如何高效交æµ](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [å¦‚ä½•æŠŠåˆ«äººä¸æƒ³å¬çš„è¯è¯´ç»™ä»–们å¬](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [è¯æ±‡è¡¨](4-Glossary.md) +5. [附录 A - 书ç±/网站](5-Bibliography.md) +6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) +6. [附录 C - 贡献 (至January 2016)](7-Contributions.md) + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + From c65770a77a4554ee4bf4aed916b0a65fadbbcc15 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 13:55:32 +0800 Subject: [PATCH 030/149] add_summary.md --- zh/SUMMARY.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 zh/SUMMARY.md diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md new file mode 100644 index 0000000..bda8399 --- /dev/null +++ b/zh/SUMMARY.md @@ -0,0 +1,89 @@ +# How to be a Programmer 中文版 +原文出自 https://github.com/braydie/HowToBeAProgrammer +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + +## 目录 + +1. [入门](1-Beginner) + - 个人技能 + - [学会Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [如何分离问题debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [如何用Logæ¥Debug](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [如何处ç†I/O开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [如何处ç†å¶çŽ°çš„Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - 团队技能 + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) + - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [进阶](2-Intermediate) + - 个人技能 + - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [é‡è¦çš„工具](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - 团队技能 + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [如何直言ä¸èµžåŒä»¥åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - 评判 + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [如何知é“何时实施昂贵的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [高级](3-Advanced) + - 技术评判 + - [如何从ä¸å¯èƒ½çš„事情中找到困难的地方](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - 机智地妥å + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [如何从你的åŒä¼´èº«ä¸ŠèŽ·å¾—æœ€å¤§æ”¶ç›Š](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何分割问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [如何高效交æµ](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [å¦‚ä½•æŠŠåˆ«äººä¸æƒ³å¬çš„è¯è¯´ç»™ä»–们å¬](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [è¯æ±‡è¡¨](4-Glossary.md) +5. [附录 A - 书ç±/网站](5-Bibliography.md) +6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) +6. [附录 C - 贡献 (至January 2016)](7-Contributions.md) + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + From 9ff5d6b7dba2d416056bdb1284f62e79520a7ca7 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 14:18:22 +0800 Subject: [PATCH 031/149] link_header_to_readme --- zh/SUMMARY.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index bda8399..a9bf747 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -4,7 +4,7 @@ ## 目录 -1. [入门](1-Beginner) +1. [入门](1-Beginner/README.md) - 个人技能 - [学会Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - [如何分离问题debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) @@ -30,7 +30,7 @@ - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) -2. [进阶](2-Intermediate) +2. [进阶](2-Intermediate/README.md) - 个人技能 - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) @@ -58,7 +58,7 @@ - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - [如何知é“何时实施昂贵的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) -3. [高级](3-Advanced) +3. [高级](3-Advanced/README.md) - 技术评判 - [如何从ä¸å¯èƒ½çš„事情中找到困难的地方](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) From 553b306e1eec17178cf42a78fb39b505a6513737 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 17 Feb 2016 14:49:42 +0800 Subject: [PATCH 032/149] fix_missed_word --- zh/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/README.md b/zh/README.md index 33a685f..4e49afd 100644 --- a/zh/README.md +++ b/zh/README.md @@ -4,7 +4,7 @@ æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 ## 引言 -  åšä¸€ä¸ªå¥½çš„程åºå‘˜æ˜¯å›°éš¾è€Œé«˜å°šçš„。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程,而且需è¦å·¨å¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但与好的程åºå‘˜æž„建一个让自己所负责的客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„的软件系统åšçš„é‚£äº›äº‹ç›¸æ¯”ï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶å¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 +  åšä¸€ä¸ªå¥½çš„程åºå‘˜æ˜¯å›°éš¾è€Œé«˜å°šçš„。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程是é‡è¦çš„,而且需è¦å·¨å¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但与好的程åºå‘˜æž„建一个让自己所负责的客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„的软件系统åšçš„é‚£äº›äº‹ç›¸æ¯”ï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶å¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。   这是éžå¸¸ä¸»è§‚的,所以,这篇文章注定是个人的并且一定程度上有点武断。我尽é‡å†™ä¸€äº›ä¸€ä¸ªç¨‹åºå‘˜åœ¨ta的工作中éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中是如此的普é以至于我(说的)å¯èƒ½çœ‹èµ·æ¥æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 From c3282f4ac3fae73abc8e57c35cfb53db349be197 Mon Sep 17 00:00:00 2001 From: braydie Date: Fri, 19 Feb 2016 22:00:50 +0000 Subject: [PATCH 033/149] Merged in chinese version whilst moving english into own folder --- LANGS.md | 2 + README.md | 144 +++++++++--------- .../Personal-Skills/01-Learn To Debug.md | 0 ...to Debug by Splitting the Problem Space.md | 0 .../03-How to Remove an Error.md | 0 .../04-How to Debug Using a Log.md | 0 ...-How to Understand Performance Problems.md | 0 .../06-How to Fix Performance Problems.md | 0 .../07-How to Optimize Loops.md | 0 .../08-How to Deal with IO Expense.md | 0 .../09-How to Manage Memory.md | 0 .../10-How to Deal with Intermittent Bugs.md | 0 .../11-How to Learn Design Skills.md | 0 .../12-How to Conduct Experiments.md | 0 {1-Beginner => en/1-Beginner}/README.md | 52 +++---- .../01-Why Estimation is Important.md | 0 .../02-How to Estimate Programming Time.md | 0 .../03-How to Find Out Information.md | 0 ...o Utilize People as Information Sources.md | 0 .../Team-Skills/05-How to Document Wisely.md | 0 .../06-How to Work with Poor Code.md | 0 .../07-How to Use Source Code Control.md | 0 .../Team-Skills/08-How to Unit Test.md | 0 .../09-Take Breaks when Stumped.md | 0 .../10-How to Recognize When to Go Home.md | 0 .../11-How to Deal with Difficult People.md | 0 ...adeoff Quality Against Development Time.md | 0 ...ow to Manage Software System Dependence.md | 0 ...w to Decide if Software is Too Immature.md | 0 .../04-How to Make a Buy vs Build Decision.md | 0 .../Judgment/05-How to Grow Professionally.md | 0 .../06-How to Evaluate Interviewees.md | 0 ...ow When to Apply Fancy Computer Science.md | 0 .../08-How to Talk to Non-Engineers.md | 0 .../01-How to Stay Motivated.md | 0 .../02-How to be Widely Trusted.md | 0 .../03-How to Tradeoff Time vs Space.md | 0 .../Personal-Skills/04-How to Stress Test.md | 0 ...-How to Balance Brevity and Abstraction.md | 0 .../06-How to Learn New Skills.md | 0 .../Personal-Skills/07-Learn to Type.md | 0 .../08-How to Do Integration Testing.md | 0 .../09-Communication Languages.md | 0 .../Personal-Skills/10-Heavy Tools.md | 0 .../Personal-Skills/11-How to analyze data.md | 0 .../2-Intermediate}/README.md | 0 .../01-How to Manage Development Time.md | 0 ...ow to Manage Third-Party Software Risks.md | 0 .../03-How to Manage Consultants.md | 0 .../04-How to Communicate the Right Amount.md | 0 ... Disagree Honestly and Get Away with It.md | 0 .../01-How to Fight Schedule Pressure.md | 0 .../02-How to Understand the User.md | 0 .../03-How to Get a Promotion.md | 0 {3-Advanced => en/3-Advanced}/README.md | 0 .../01-How to Develop Talent.md | 0 .../02-How to Choose What to Work On.md | 0 ...How to Get the Most From Your Teammates.md | 0 .../04-How to Divide Problems Up.md | 0 .../05-How to Handle Boring Tasks.md | 0 .../06-How to Gather Support for a Project.md | 0 .../07-How to Grow a System.md | 0 .../08-How to Communicate Well.md | 0 ...l People Things They Don't Want to Hear.md | 0 .../10-How to Deal with Managerial Myths.md | 0 ...1-How to Deal with Organizational Chaos.md | 0 ...ow to Tell the Hard From the Impossible.md | 0 .../02-How to Utilize Embedded Languages.md | 0 .../03-Choosing Languages.md | 0 5-Bibliography.md => en/5-Bibliography.md | 0 6-History.md => en/6-History.md | 0 7-Contributions.md => en/7-Contributions.md | 0 GLOSSARY.md => en/GLOSSARY.md | 0 LICENSE.md => en/LICENSE.md | 0 en/README.md | 103 +++++++++++++ SUMMARY.md => en/SUMMARY.md | 0 76 files changed, 204 insertions(+), 97 deletions(-) create mode 100644 LANGS.md rename {1-Beginner => en/1-Beginner}/Personal-Skills/01-Learn To Debug.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/02-How to Debug by Splitting the Problem Space.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/03-How to Remove an Error.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/04-How to Debug Using a Log.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/05-How to Understand Performance Problems.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/06-How to Fix Performance Problems.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/07-How to Optimize Loops.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/08-How to Deal with IO Expense.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/09-How to Manage Memory.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/10-How to Deal with Intermittent Bugs.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/11-How to Learn Design Skills.md (100%) rename {1-Beginner => en/1-Beginner}/Personal-Skills/12-How to Conduct Experiments.md (100%) rename {1-Beginner => en/1-Beginner}/README.md (98%) rename {1-Beginner => en/1-Beginner}/Team-Skills/01-Why Estimation is Important.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/02-How to Estimate Programming Time.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/03-How to Find Out Information.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/04-How to Utilize People as Information Sources.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/05-How to Document Wisely.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/06-How to Work with Poor Code.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/07-How to Use Source Code Control.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/08-How to Unit Test.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/09-Take Breaks when Stumped.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/10-How to Recognize When to Go Home.md (100%) rename {1-Beginner => en/1-Beginner}/Team-Skills/11-How to Deal with Difficult People.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/01-How to Tradeoff Quality Against Development Time.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/02-How to Manage Software System Dependence.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/03-How to Decide if Software is Too Immature.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/04-How to Make a Buy vs Build Decision.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/05-How to Grow Professionally.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/06-How to Evaluate Interviewees.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/07-How to Know When to Apply Fancy Computer Science.md (100%) rename {2-Intermediate => en/2-Intermediate}/Judgment/08-How to Talk to Non-Engineers.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/01-How to Stay Motivated.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/02-How to be Widely Trusted.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/03-How to Tradeoff Time vs Space.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/04-How to Stress Test.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/05-How to Balance Brevity and Abstraction.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/06-How to Learn New Skills.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/07-Learn to Type.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/08-How to Do Integration Testing.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/09-Communication Languages.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/10-Heavy Tools.md (100%) rename {2-Intermediate => en/2-Intermediate}/Personal-Skills/11-How to analyze data.md (100%) rename {2-Intermediate => en/2-Intermediate}/README.md (100%) rename {2-Intermediate => en/2-Intermediate}/Team-Skills/01-How to Manage Development Time.md (100%) rename {2-Intermediate => en/2-Intermediate}/Team-Skills/02-How to Manage Third-Party Software Risks.md (100%) rename {2-Intermediate => en/2-Intermediate}/Team-Skills/03-How to Manage Consultants.md (100%) rename {2-Intermediate => en/2-Intermediate}/Team-Skills/04-How to Communicate the Right Amount.md (100%) rename {2-Intermediate => en/2-Intermediate}/Team-Skills/05-How to Disagree Honestly and Get Away with It.md (100%) rename {3-Advanced => en/3-Advanced}/Compromising-Wisely/01-How to Fight Schedule Pressure.md (100%) rename {3-Advanced => en/3-Advanced}/Compromising-Wisely/02-How to Understand the User.md (100%) rename {3-Advanced => en/3-Advanced}/Compromising-Wisely/03-How to Get a Promotion.md (100%) rename {3-Advanced => en/3-Advanced}/README.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/01-How to Develop Talent.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/02-How to Choose What to Work On.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/03-How to Get the Most From Your Teammates.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/04-How to Divide Problems Up.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/05-How to Handle Boring Tasks.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/06-How to Gather Support for a Project.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/07-How to Grow a System.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/08-How to Communicate Well.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/10-How to Deal with Managerial Myths.md (100%) rename {3-Advanced => en/3-Advanced}/Serving-Your-Team/11-How to Deal with Organizational Chaos.md (100%) rename {3-Advanced => en/3-Advanced}/Technical-Judgment/01-How to Tell the Hard From the Impossible.md (100%) rename {3-Advanced => en/3-Advanced}/Technical-Judgment/02-How to Utilize Embedded Languages.md (100%) rename {3-Advanced => en/3-Advanced}/Technical-Judgment/03-Choosing Languages.md (100%) rename 5-Bibliography.md => en/5-Bibliography.md (100%) rename 6-History.md => en/6-History.md (100%) rename 7-Contributions.md => en/7-Contributions.md (100%) rename GLOSSARY.md => en/GLOSSARY.md (100%) rename LICENSE.md => en/LICENSE.md (100%) create mode 100644 en/README.md rename SUMMARY.md => en/SUMMARY.md (100%) diff --git a/LANGS.md b/LANGS.md new file mode 100644 index 0000000..c4fcc4c --- /dev/null +++ b/LANGS.md @@ -0,0 +1,2 @@ +* [English](en/) +* [Chinese](zh/) \ No newline at end of file diff --git a/README.md b/README.md index 903288f..52df9ef 100644 --- a/README.md +++ b/README.md @@ -19,85 +19,87 @@ Welcome to the tribe. ## Contents -1. [Beginner](1-Beginner) +**[Also available in Chinese](zh/README.md)** + +1. [Beginner](en/1-Beginner) - Personal Skills - - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [Learn to Debug](en/1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](en/1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](en/1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - Team Skills - - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) -2. [Intermediate](2-Intermediate) + - [Why Estimation is Important](en/1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](en/1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](en/1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](en/1-Beginner/Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [How to Deal with Difficult People](en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [Intermediate](en/2-Intermediate) - Personal Skills - - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - [How to Stay Motivated](en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [How to be Widely Trusted](en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [How to Tradeoff Time vs. Space](en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [How to Stress Test](en/2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [How to Balance Brevity and Abstraction](en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [How to Learn New Skills](en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [Learn to Type](en/2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [How to Do Integration Testing](en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [Communication Languages](en/2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [Heavy Tools](en/2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [How to analyze data](en/2-Intermediate/Personal-Skills/11-How to analyze data.md) - Team Skills - - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [How to Manage Development Time](en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [How to Manage Third-Party Software Risks](en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [How to Manage Consultants](en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [How to Communicate the Right Amount](en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [How to Disagree Honestly and Get Away with It](en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) -3. [Advanced](3-Advanced) + - [How to Tradeoff Quality Against Development Time](en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [How to Manage Software System Dependence](en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [How to Decide if Software is Too Immature](en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [How to Make a Buy vs. Build Decision](en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [Advanced](en/3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [How to Utilize Embedded Languages](en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [Choosing Languages](en/3-Advanced/Technical-Judgment/03-Choosing Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - [How to Fight Schedule Pressure](en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [How to Understand the User](en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [How to Get a Promotion](en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) -4. [Glossary](GLOSSARY.md) -5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) -6. [Appendix B - History (As of January 2016)](6-History.md) -6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) + - [How to Develop Talent](en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [How to Choose What to Work On](en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [How to Get the Most From Your Team-mates](en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [How to Divide Problems Up](en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [How to Handle Boring Tasks](en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [How to Gather Support for a Project](en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [How to Grow a System](en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [How to Communicate Well](en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [How to Deal with Managerial Myths](en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [How to Deal with Organizational Chaos](en/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [Glossary](en/GLOSSARY.md) +5. [Appendix A - Bibliography/Websiteography](en/5-Bibliography.md) +6. [Appendix B - History (As of January 2016)](en/6-History.md) +6. [Appendix C - Contributions (As of January 2016)](en/7-Contributions.md) Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/1-Beginner/Personal-Skills/01-Learn To Debug.md b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md similarity index 100% rename from 1-Beginner/Personal-Skills/01-Learn To Debug.md rename to en/1-Beginner/Personal-Skills/01-Learn To Debug.md diff --git a/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md similarity index 100% rename from 1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md rename to en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md diff --git a/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md similarity index 100% rename from 1-Beginner/Personal-Skills/03-How to Remove an Error.md rename to en/1-Beginner/Personal-Skills/03-How to Remove an Error.md diff --git a/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md similarity index 100% rename from 1-Beginner/Personal-Skills/04-How to Debug Using a Log.md rename to en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md diff --git a/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md similarity index 100% rename from 1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md rename to en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md diff --git a/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md similarity index 100% rename from 1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md rename to en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md diff --git a/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md similarity index 100% rename from 1-Beginner/Personal-Skills/07-How to Optimize Loops.md rename to en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md diff --git a/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md similarity index 100% rename from 1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md rename to en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md diff --git a/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md similarity index 100% rename from 1-Beginner/Personal-Skills/09-How to Manage Memory.md rename to en/1-Beginner/Personal-Skills/09-How to Manage Memory.md diff --git a/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md similarity index 100% rename from 1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md rename to en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md diff --git a/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md similarity index 100% rename from 1-Beginner/Personal-Skills/11-How to Learn Design Skills.md rename to en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md diff --git a/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md similarity index 100% rename from 1-Beginner/Personal-Skills/12-How to Conduct Experiments.md rename to en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md diff --git a/1-Beginner/README.md b/en/1-Beginner/README.md similarity index 98% rename from 1-Beginner/README.md rename to en/1-Beginner/README.md index 519bcd9..fb30975 100644 --- a/1-Beginner/README.md +++ b/en/1-Beginner/README.md @@ -1,27 +1,27 @@ -# 1. Beginner - -- Personal Skills - - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) -- Team Skills - - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) +# 1. Beginner + +- Personal Skills + - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) +- Team Skills + - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) - [How to Deal with Difficult People](Team-Skills/11-How to Deal with Difficult People.md) \ No newline at end of file diff --git a/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md similarity index 100% rename from 1-Beginner/Team-Skills/01-Why Estimation is Important.md rename to en/1-Beginner/Team-Skills/01-Why Estimation is Important.md diff --git a/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md similarity index 100% rename from 1-Beginner/Team-Skills/02-How to Estimate Programming Time.md rename to en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md diff --git a/1-Beginner/Team-Skills/03-How to Find Out Information.md b/en/1-Beginner/Team-Skills/03-How to Find Out Information.md similarity index 100% rename from 1-Beginner/Team-Skills/03-How to Find Out Information.md rename to en/1-Beginner/Team-Skills/03-How to Find Out Information.md diff --git a/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md similarity index 100% rename from 1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md rename to en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md diff --git a/1-Beginner/Team-Skills/05-How to Document Wisely.md b/en/1-Beginner/Team-Skills/05-How to Document Wisely.md similarity index 100% rename from 1-Beginner/Team-Skills/05-How to Document Wisely.md rename to en/1-Beginner/Team-Skills/05-How to Document Wisely.md diff --git a/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md similarity index 100% rename from 1-Beginner/Team-Skills/06-How to Work with Poor Code.md rename to en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md diff --git a/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md similarity index 100% rename from 1-Beginner/Team-Skills/07-How to Use Source Code Control.md rename to en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md diff --git a/1-Beginner/Team-Skills/08-How to Unit Test.md b/en/1-Beginner/Team-Skills/08-How to Unit Test.md similarity index 100% rename from 1-Beginner/Team-Skills/08-How to Unit Test.md rename to en/1-Beginner/Team-Skills/08-How to Unit Test.md diff --git a/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md similarity index 100% rename from 1-Beginner/Team-Skills/09-Take Breaks when Stumped.md rename to en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md diff --git a/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md similarity index 100% rename from 1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md rename to en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md diff --git a/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md similarity index 100% rename from 1-Beginner/Team-Skills/11-How to Deal with Difficult People.md rename to en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md diff --git a/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md similarity index 100% rename from 2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md rename to en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md diff --git a/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md similarity index 100% rename from 2-Intermediate/Judgment/02-How to Manage Software System Dependence.md rename to en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md diff --git a/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md similarity index 100% rename from 2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md rename to en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md diff --git a/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md similarity index 100% rename from 2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md rename to en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md diff --git a/2-Intermediate/Judgment/05-How to Grow Professionally.md b/en/2-Intermediate/Judgment/05-How to Grow Professionally.md similarity index 100% rename from 2-Intermediate/Judgment/05-How to Grow Professionally.md rename to en/2-Intermediate/Judgment/05-How to Grow Professionally.md diff --git a/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md similarity index 100% rename from 2-Intermediate/Judgment/06-How to Evaluate Interviewees.md rename to en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md diff --git a/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md similarity index 100% rename from 2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md rename to en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md diff --git a/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md similarity index 100% rename from 2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md rename to en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md diff --git a/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md similarity index 100% rename from 2-Intermediate/Personal-Skills/01-How to Stay Motivated.md rename to en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md diff --git a/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md similarity index 100% rename from 2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md rename to en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md diff --git a/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md similarity index 100% rename from 2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md rename to en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md diff --git a/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md similarity index 100% rename from 2-Intermediate/Personal-Skills/04-How to Stress Test.md rename to en/2-Intermediate/Personal-Skills/04-How to Stress Test.md diff --git a/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md similarity index 100% rename from 2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md rename to en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md diff --git a/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md similarity index 100% rename from 2-Intermediate/Personal-Skills/06-How to Learn New Skills.md rename to en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md diff --git a/2-Intermediate/Personal-Skills/07-Learn to Type.md b/en/2-Intermediate/Personal-Skills/07-Learn to Type.md similarity index 100% rename from 2-Intermediate/Personal-Skills/07-Learn to Type.md rename to en/2-Intermediate/Personal-Skills/07-Learn to Type.md diff --git a/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md similarity index 100% rename from 2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md rename to en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md diff --git a/2-Intermediate/Personal-Skills/09-Communication Languages.md b/en/2-Intermediate/Personal-Skills/09-Communication Languages.md similarity index 100% rename from 2-Intermediate/Personal-Skills/09-Communication Languages.md rename to en/2-Intermediate/Personal-Skills/09-Communication Languages.md diff --git a/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md similarity index 100% rename from 2-Intermediate/Personal-Skills/10-Heavy Tools.md rename to en/2-Intermediate/Personal-Skills/10-Heavy Tools.md diff --git a/2-Intermediate/Personal-Skills/11-How to analyze data.md b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md similarity index 100% rename from 2-Intermediate/Personal-Skills/11-How to analyze data.md rename to en/2-Intermediate/Personal-Skills/11-How to analyze data.md diff --git a/2-Intermediate/README.md b/en/2-Intermediate/README.md similarity index 100% rename from 2-Intermediate/README.md rename to en/2-Intermediate/README.md diff --git a/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md similarity index 100% rename from 2-Intermediate/Team-Skills/01-How to Manage Development Time.md rename to en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md diff --git a/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md similarity index 100% rename from 2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md rename to en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md diff --git a/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md similarity index 100% rename from 2-Intermediate/Team-Skills/03-How to Manage Consultants.md rename to en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md diff --git a/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md similarity index 100% rename from 2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md rename to en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md diff --git a/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md similarity index 100% rename from 2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md rename to en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md diff --git a/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md similarity index 100% rename from 3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md rename to en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md diff --git a/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md similarity index 100% rename from 3-Advanced/Compromising-Wisely/02-How to Understand the User.md rename to en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md diff --git a/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md similarity index 100% rename from 3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md rename to en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md diff --git a/3-Advanced/README.md b/en/3-Advanced/README.md similarity index 100% rename from 3-Advanced/README.md rename to en/3-Advanced/README.md diff --git a/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/01-How to Develop Talent.md rename to en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md diff --git a/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md rename to en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md diff --git a/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md rename to en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md diff --git a/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md rename to en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md diff --git a/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md rename to en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md diff --git a/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md rename to en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md diff --git a/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/07-How to Grow a System.md rename to en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md diff --git a/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/08-How to Communicate Well.md rename to en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md diff --git a/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md rename to en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md diff --git a/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md rename to en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md diff --git a/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/en/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md similarity index 100% rename from 3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md rename to en/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md diff --git a/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md similarity index 100% rename from 3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md rename to en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md diff --git a/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md similarity index 100% rename from 3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md rename to en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md diff --git a/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md similarity index 100% rename from 3-Advanced/Technical-Judgment/03-Choosing Languages.md rename to en/3-Advanced/Technical-Judgment/03-Choosing Languages.md diff --git a/5-Bibliography.md b/en/5-Bibliography.md similarity index 100% rename from 5-Bibliography.md rename to en/5-Bibliography.md diff --git a/6-History.md b/en/6-History.md similarity index 100% rename from 6-History.md rename to en/6-History.md diff --git a/7-Contributions.md b/en/7-Contributions.md similarity index 100% rename from 7-Contributions.md rename to en/7-Contributions.md diff --git a/GLOSSARY.md b/en/GLOSSARY.md similarity index 100% rename from GLOSSARY.md rename to en/GLOSSARY.md diff --git a/LICENSE.md b/en/LICENSE.md similarity index 100% rename from LICENSE.md rename to en/LICENSE.md diff --git a/en/README.md b/en/README.md new file mode 100644 index 0000000..903288f --- /dev/null +++ b/en/README.md @@ -0,0 +1,103 @@ +# How to be a Programmer: Community Version + +Robert L. Read with Community + +Copyright 2002, 2003, 2016 Robert L. Read + +Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +## Introduction +To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. + +This is very subjective and, therefore, this essay is doomed to be personal and somewhat opinionated. I confine myself to problems that a programmer is very likely to have to face in her work. Many of these problems and their solutions are so general to the human condition that I will probably seem preachy. I hope in spite of this that this essay will be useful. + +Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. + +In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. + +Welcome to the tribe. + +## Contents + +1. [Beginner](1-Beginner) + - Personal Skills + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - Team Skills + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [Intermediate](2-Intermediate) + - Personal Skills + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - Team Skills + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - Judgment + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [Advanced](3-Advanced) + - Technological Judgment + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - Compromising Wisely + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - Serving Your Team + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [Glossary](GLOSSARY.md) +5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) +6. [Appendix B - History (As of January 2016)](6-History.md) +6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/SUMMARY.md b/en/SUMMARY.md similarity index 100% rename from SUMMARY.md rename to en/SUMMARY.md From 1de1e7f34fcc825ff3947c99810c9082f7e0d70b Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Sat, 20 Feb 2016 11:41:03 +0800 Subject: [PATCH 034/149] translation of newly commit --- zh/README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/zh/README.md b/zh/README.md index 4e49afd..b3bf26e 100644 --- a/zh/README.md +++ b/zh/README.md @@ -1,5 +1,11 @@ # How to be a Programmer 中文版 -Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. +Robert L. Read with Community + +Copyright 2002, 2003, 2016 Robert L. Read + +Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +Translate by [ahangchen](https://github.com/ahangchen) æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 @@ -8,7 +14,7 @@   这是éžå¸¸ä¸»è§‚的,所以,这篇文章注定是个人的并且一定程度上有点武断。我尽é‡å†™ä¸€äº›ä¸€ä¸ªç¨‹åºå‘˜åœ¨ta的工作中éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中是如此的普é以至于我(说的)å¯èƒ½çœ‹èµ·æ¥æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 -  编程是在课程上教授的。 那些了ä¸èµ·çš„书: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识)以åŠåšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者此时,你当然也应该读一读Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 +  编程是在课程上教授的。 那些著作: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识)以åŠåšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者此时,你当然也应该读一读Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。   在这篇文章里,bossè¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œé™¤äº†ä¸€äº›è¯­å¢ƒï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚ From 8fc0cc8f5525d6515c4b407ea0d565cb465601d4 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Sat, 20 Feb 2016 11:42:13 +0800 Subject: [PATCH 035/149] fix mispell --- zh/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/README.md b/zh/README.md index b3bf26e..a505a28 100644 --- a/zh/README.md +++ b/zh/README.md @@ -5,7 +5,7 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -Translate by [ahangchen](https://github.com/ahangchen) +Translated by [ahangchen](https://github.com/ahangchen) æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 From 4fce1390c4b9a753ab1e28749ce531cf00b73cbe Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Sat, 20 Feb 2016 11:46:14 +0800 Subject: [PATCH 036/149] translate update from from Popsiclestand --- zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 9cbf927..c41a159 100644 --- a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,6 +1,6 @@ # 如何使用æºä»£ç æŽ§åˆ¶ -æºä»£ç æŽ§åˆ¶ç³»ç»Ÿè®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ +æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼ˆåˆç§°ç‰ˆæœ¬æŽ§åˆ¶ç³»ç»Ÿï¼‰è®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ 我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 From ca5e2144cec7ba3e137dffc88eac62542e1b3cac Mon Sep 17 00:00:00 2001 From: lightencc Date: Sun, 21 Feb 2016 14:34:34 +0800 Subject: [PATCH 037/149] Update 05-How to Understand Performance Problems.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加了原文对于死é”和互斥的解释。 --- .../05-How to Understand Performance Problems.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index d718574..31aff0e 100644 --- a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -6,6 +6,6 @@ 计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯èŠ±è´¹äº†ç¨å¾®å¤šä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ -竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”和线程饥饿,如果这是å¯é¢„è§çš„ï¼Œæœ€å¥½æœ‰ä¸€ç§æ–¹å¼æ¥åˆé€‚地测é‡è¿™ç§ç«žäº‰ã€‚å³ä½¿ç«žäº‰ä¸ä¼šå‘ç”Ÿï¼Œèƒ½å¤Ÿæ–­è¨€è¿™ç§æƒ…况也是éžå¸¸æœ‰å¸®åŠ©çš„ã€‚ +竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How to Fix Performance Problems.md) From 81ee445df61dabec4e30f7e79dd7bbb85e5fefbe Mon Sep 17 00:00:00 2001 From: Kenneth Lim Date: Sun, 28 Feb 2016 13:24:31 +0800 Subject: [PATCH 038/149] missing "is" Signed-off-by: Kenneth Lim kennethlimcp@gmail.com --- en/3-Advanced/Technical-Judgment/03-Choosing Languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 22b3a22..e759f73 100644 --- a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,6 +1,6 @@ # Choosing Languages -The solitary programmer that loves his work (a hacker) can choose the best language for the task. Most working programmers have very little control of the language they will use. Generally, this issue is dictated by pointy-haired bosses who are making a political decision, rather than a technological decision, and lack the courage to promote an unconventional tool even when they know, often with first-hand knowledge, that the less accepted tool is best. In other cases the very real benefit of unity among the team, and to some extent with a larger community, precludes choice on the part of the individual. Often managers are driven by the need to be able to hire programmers with experience in a given language. No doubt they are serving what they perceive to be the best interests of the project or company, and must be respected for that. However, I personally believe this the most wasteful and erroneous common practice you are likely to encounter. +The solitary programmer that loves his work (a hacker) can choose the best language for the task. Most working programmers have very little control of the language they will use. Generally, this issue is dictated by pointy-haired bosses who are making a political decision, rather than a technological decision, and lack the courage to promote an unconventional tool even when they know, often with first-hand knowledge, that the less accepted tool is best. In other cases the very real benefit of unity among the team, and to some extent with a larger community, precludes choice on the part of the individual. Often managers are driven by the need to be able to hire programmers with experience in a given language. No doubt they are serving what they perceive to be the best interests of the project or company, and must be respected for that. However, I personally believe this is the most wasteful and erroneous common practice you are likely to encounter. But of course, things are never one-dimensional. Even if a core language is mandated and beyond your control, it is often the case that tools and other programs can and should be written in a different language. If a language is to be embedded (and you should always consider it!) the choice of language will depend a lot on the culture of the users. One should take advantage of this to serve your company or project by using the best language for the job, and in so doing make work more interesting. From 7ddcf4267e8939ac871b76afaa27053e31a6426d Mon Sep 17 00:00:00 2001 From: Carl Mungazi Date: Fri, 25 Mar 2016 13:59:29 +0000 Subject: [PATCH 039/149] Update 01-How to Manage Development Time.md Fixed typo. --- .../Team-Skills/01-How to Manage Development Time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index d66cc90..eca71f0 100644 --- a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -2,7 +2,7 @@ To manage development time, maintain a concise and up-to-date project plan. A project plan is an estimate, a schedule, a set of milestones for marking progress, and an assignment of your team or your own time to each task on the estimate. It should also include other things you have to remember to do, such as meeting with the quality assurance people, preparing documentation, or ordering equipment. If you are on a team, the project plan should be a consensual agreement, both at the start and as you go. -The project plan exists to help make decisions, not to show how organized you are. If the project plan is either too long or not up-to-date, it will be useless for making decisions. In reality, these decisions are about individual persons. The plan and your judgement let you decide if you should shift tasks from one person to another. The milestones mark your progress. If you use a fancy project planning tool, do not be seduced into creating a Big Design Up Front (BDUF) for the project, but use it maintain concision and up-to-dateness. +The project plan exists to help make decisions, not to show how organized you are. If the project plan is either too long or not up-to-date, it will be useless for making decisions. In reality, these decisions are about individual persons. The plan and your judgement let you decide if you should shift tasks from one person to another. The milestones mark your progress. If you use a fancy project planning tool, do not be seduced into creating a Big Design Up Front (BDUF) for the project, but use it to maintain concision and up-to-dateness. If you miss a milestone, you should take immediate action such as informing your boss that the scheduled completion of that project has slipped by that amount. The estimate and schedule could never have been perfect to begin with; this creates the illusion that you might be able to make up the days you missed in the latter part of the project. You might. But it is just as likely that you have underestimated that part as that you have overestimated it. Therefore the scheduled completion of the project has already slipped, whether you like it or not. From 9ea37c60aeef75be8293620e233d4be51655b321 Mon Sep 17 00:00:00 2001 From: Carl Mungazi Date: Fri, 25 Mar 2016 14:02:34 +0000 Subject: [PATCH 040/149] Update 06-How to Learn New Skills.md Fixed typo in the phrase "...but understand that it often not much better than the same amount..." --- en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index bebcc82..dbd0b75 100644 --- a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -6,7 +6,7 @@ Humans learn by doing. Book-reading and class-taking are useful. But could you h A good mentor is no replacement for doing things yourself, but is a lot better than a book. What can you offer a potential mentor in exchange for their knowledge? At a minimum, you should offer to study hard so their time won't be wasted. -Try to get your boss to let you have formal training, but understand that it often not much better than the same amount of time spent simply playing with the new skill you want to learn. It is, however, easier to ask for training than playtime in our imperfect world, even though a lot of formal training is just sleeping through lectures waiting for the dinner party. +Try to get your boss to let you have formal training, but understand that it is often not much better than the same amount of time spent simply playing with the new skill you want to learn. It is, however, easier to ask for training than playtime in our imperfect world, even though a lot of formal training is just sleeping through lectures waiting for the dinner party. If you lead people, understand how they learn and assist them by assigning them projects that are the right size and that exercise skills they are interested in. Don't forget that the most important skills for a programmer are not the technical ones. Give your people a chance to play and practice courage, honesty, and communication. From 74d0f5a5c03a26e5b5291b68cb846c624217b6bf Mon Sep 17 00:00:00 2001 From: Weng Shiwei Date: Fri, 25 Mar 2016 23:11:30 +0800 Subject: [PATCH 041/149] Update 10-Heavy Tools.md --- zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md index cf08ddb..10860c9 100644 --- a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -7,7 +7,7 @@ - 关系数æ®åº“ï¼› - 全文æœç´¢å¼•擎; - 数学库; -- OpenGl; +- OpenGL; - XMLè§£æžå™¨ï¼› - 电å­è¡¨æ ¼ã€‚ From dc33b7ddc1c519fd1390447dfcd17ba2edd0921a Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Sat, 26 Mar 2016 11:07:15 +0800 Subject: [PATCH 042/149] Change some links Link my name to the book's Chinese version repository, add link to English version. --- zh/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zh/README.md b/zh/README.md index a505a28..cc9acc3 100644 --- a/zh/README.md +++ b/zh/README.md @@ -5,7 +5,8 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -Translated by [ahangchen](https://github.com/ahangchen) +翻译:[梦里风林](https://github.com/ahangchen/How-to-Be-A-Programmer-CN) +原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 From 196b33e5c6f5c87b42e81eed5797dfab412e862f Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Sat, 26 Mar 2016 11:08:56 +0800 Subject: [PATCH 043/149] markdown format fix --- zh/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/zh/README.md b/zh/README.md index cc9acc3..75fac9f 100644 --- a/zh/README.md +++ b/zh/README.md @@ -6,6 +6,7 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). 翻译:[梦里风林](https://github.com/ahangchen/How-to-Be-A-Programmer-CN) + 原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 From f418f8f68bcb0c9121649eddf34a8e2ad5697f80 Mon Sep 17 00:00:00 2001 From: Ben Weinstein-Raun Date: Sat, 26 Mar 2016 02:57:37 -0700 Subject: [PATCH 044/149] Add (optional but helpful) comma after conditional Even unambiguous grammars can result in lots of backtracking. --- .../01-How to Tradeoff Quality Against Development Time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index 9665e22..528e996 100644 --- a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -4,7 +4,7 @@ Software development is always a compromise between what the project does and ge If this happens your first responsibility is to inform your team and to clearly explain the cost of the decrease in quality. After all, your understanding of it should be much better than your boss's understanding. Make it clear what is being lost and what is being gained, and at what cost the lost ground will be regained in the next cycle. In this, the visibility provided by a good project plan should be helpful. If the quality tradeoff affects the quality assurance effort, point that out (both to your boss and quality assurance people). If the quality tradeoff will lead to more bugs being reported after the quality assurance period, point that out. -If she still insists you should try to isolate the shoddiness into particular components that you can plan to rewrite or improve in the next cycle. Explain this to your team so that they can plan for it. +If she still insists, you should try to isolate the shoddiness into particular components that you can plan to rewrite or improve in the next cycle. Explain this to your team so that they can plan for it. NinjaProgrammer at Slashdot sent in this gem: From bfa1f2144b4b4230775160553dbb28412930b17a Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Sat, 26 Mar 2016 10:07:56 +0000 Subject: [PATCH 045/149] Added a link to gitbook version of book --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 52df9ef..9cbc2d7 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). +[Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) + ## Introduction To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. From 5f3ee0988aa344d43f81579a48737a2267326ebe Mon Sep 17 00:00:00 2001 From: evelynmitchell Date: Sat, 26 Mar 2016 08:47:32 -0600 Subject: [PATCH 046/149] Update 07-How to Grow a System.md Fixed a spelling error. --- en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index 5aa9f8c..f41cd4b 100644 --- a/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -20,4 +20,4 @@ A reader, Rob Hafernik, sent in this comment on this section that I can do no be To which one can only reply *Fiat lux*! -Next [How to Communiate Well](08-How to Communicate Well.md) \ No newline at end of file +Next [How to Communicate Well](08-How to Communicate Well.md) From c90397ba5591fbac3ea50186f7f2d08d78da5641 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Mon, 28 Mar 2016 23:50:05 +0800 Subject: [PATCH 047/149] patch-fix-typo --- zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 67a60bf..5fd82e2 100644 --- a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,4 +1,4 @@ -# 如果移除一个错误 +# 如何移除一个错误 æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统,所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ From 6e2cc23d855c5e5aa314d22e184ce3085853d92d Mon Sep 17 00:00:00 2001 From: aidewoode Date: Tue, 29 Mar 2016 18:17:43 +0800 Subject: [PATCH 048/149] improve readability in zh --- .../Personal-Skills/01-Learn To Debug.md | 16 +++---- ...to Debug by Splitting the Problem Space.md | 10 ++--- .../03-How to Remove an Error.md | 6 +-- .../04-How to Debug Using a Log.md | 8 ++-- ...-How to Understand Performance Problems.md | 6 +-- .../06-How to Fix Performance Problems.md | 8 ++-- .../07-How to Optimize Loops.md | 4 +- .../08-How to Deal with IO Expense.md | 10 ++--- .../09-How to Manage Memory.md | 7 +-- .../10-How to Deal with Intermittent Bugs.md | 16 +++---- .../11-How to Learn Design Skills.md | 2 +- .../12-How to Conduct Experiments.md | 10 ++--- zh/1-Beginner/README.md | 14 +++--- .../01-Why Estimation is Important.md | 4 +- .../02-How to Estimate Programming Time.md | 14 +++--- .../03-How to Find Out Information.md | 6 +-- ...o Utilize People as Information Sources.md | 4 +- .../Team-Skills/05-How to Document Wisely.md | 2 +- .../06-How to Work with Poor Code.md | 2 +- .../07-How to Use Source Code Control.md | 2 +- .../Team-Skills/08-How to Unit Test.md | 6 +-- .../09-Take Breaks when Stumped.md | 4 +- .../10-How to Recognize When to Go Home.md | 2 +- .../11-How to Deal with Difficult People.md | 4 +- zh/README.md | 45 +++++++++---------- 25 files changed, 106 insertions(+), 106 deletions(-) diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md index 67d1f5d..00b1f02 100644 --- a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,22 +1,22 @@ -# 学会Debug +# 学会 Debug 调试(Debug)是作为一个程åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸èƒ½è°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ -那些认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿æ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿çš„ç†æƒ³ä¸»ä¹‰è€…们䏿˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你周围也会有,并且也需è¦ä¸Žä¸»è¦çš„è½¯ä»¶å…¬å¸æˆ–组织,比如GNU,或者与你的åŒäº‹ï¼Œå†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果没有获得代ç çš„æ‰§è¡Œè¿‡ç¨‹å¯è§æ€§çš„能力,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ +那些认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿æ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿çš„ç†æƒ³ä¸»ä¹‰è€…们䏿˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如 GNU ) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果没有获得代ç çš„æ‰§è¡Œè¿‡ç¨‹å¯è§æ€§çš„能力,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ -调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£è¿™æ ·çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ï¼Œä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 +调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ã€‚æ›´å¸¸è§çš„æ˜¯ï¼Œä½ çš„程åºå‡ºçŽ°äº†ä¸€ä¸ªé”™è¯¯ï¼Œå½“ä½ æ£€æŸ¥ä½ å†™çš„ä»£ç çš„æ—¶å€™ï¼Œå´ä¸çŸ¥é“这个错误是怎么å‘生的。ä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 -ä¸ºäº†èŽ·å¾—ä¸€ä¸ªç¨‹åºæ‰§è¡Œçš„å¯è§æ€§ï¼Œä½ å¿…须能够执行代ç å¹¶ä¸”从这个过程中观察到什么。有时候这是å¯è§çš„,比如一些正在呈现在å±å¹•上的东西,或者两个事件之间的延迟。在许多其他的案例中,它与一些ä¸ä¸€å®šå¯è§çš„东西相关,比如代ç ä¸­ä¸€äº›å˜é‡çš„状æ€ï¼Œå½“å‰çœŸæ­£åœ¨æ‰§è¡Œçš„代ç è¡Œï¼Œæˆ–者是å¦ä¸€äº›æ–­è¨€æŒæœ‰äº†ä¸€ä¸ªå¤æ‚的数æ®ç»“构。这些éšè—的细节必须被显露出æ¥ã€‚ +ä¸ºäº†èŽ·å¾—ä¸€ä¸ªç¨‹åºæ‰§è¡Œçš„å¯è§æ€§ï¼Œä½ å¿…须能够执行代ç å¹¶ä¸”从这个过程中观察到什么。有时候这是å¯è§çš„,比如一些正在呈现在å±å¹•上的东西,或者两个事件之间的延迟。在许多其他的案例中,它与一些ä¸ä¸€å®šå¯è§çš„东西相关,比如代ç ä¸­ä¸€äº›å˜é‡çš„状æ€ï¼Œå“ªä¸€è¡Œä»£ç æ­£åœ¨è¢«æ‰§è¡Œï¼Œæˆ–者是å¦ä¸€äº›æ–­è¨€æŒæœ‰äº†ä¸€ä¸ªå¤æ‚的数æ®ç»“构。这些éšè—的细节必须被显露出æ¥ã€‚ -通常的(一些)观察一个正在执行的程åºçš„内部的方法å¯ä»¥å¦‚下分类: +观察一个正在执行程åºçš„å†…éƒ¨çš„æ–¹æ³•é€šå¸¸å¯æŒ‰å¦‚下分类: - 使用一个调试工具; - Printlining[(戳这里看释义)](../../4-Glossary.md) - 对程åºåšä¸€ä¸ªä¸´æ—¶çš„修改,通常是加一些行去打å°ä¸€äº›ä¿¡æ¯; - 日志 - 用日志的形å¼ä¸ºåœ¨ç¨‹åºçš„è¿è¡Œä¸­åˆ›å»ºä¸€ä¸ªæ°¸ä¹…的视窗。 -当调试工具稳定å¯ç”¨æ—¶ï¼Œå®ƒä»¬æ˜¯éžå¸¸ç¾Žå¦™çš„,但[Printlining](../../4-Glossary.md)和写日志是更加é‡è¦çš„。调试工具通常è½åŽäºŽç¼–程语言的å‘展,所以在任何时间点它们都å¯èƒ½æ˜¯æ— æ•ˆçš„。å¦å¤–,调试工具å¯èƒ½è½»å¾®æ”¹å˜ç¨‹åºå®žé™…执行的方å¼ã€‚最åŽï¼Œè°ƒè¯•有许多ç§ï¼Œæ¯”如检查一个断言和一个巨大的数æ®ç»“构,这需è¦å†™ä»£ç å¹¶æ”¹å˜ç¨‹åºçš„è¿è¡Œã€‚当调试工具å¯ç”¨æ—¶ï¼ŒçŸ¥é“æ€Žæ ·ä½¿ç”¨è°ƒè¯•å·¥å…·æ˜¯å¥½çš„ï¼Œä½†å­¦ä¼šä½¿ç”¨å…¶ä»–ä¸¤ç§æ–¹å¼æ˜¯è‡³å…³é‡è¦çš„。 +当调试工具稳定å¯ç”¨æ—¶ï¼Œå®ƒä»¬æ˜¯éžå¸¸ç¾Žå¦™çš„,但 [Printlining](../../4-Glossary.md) 和写日志甚至是更加é‡è¦çš„。调试工具通常è½åŽäºŽç¼–程语言的å‘展,所以在æŸäº›æ—¶å€™å®ƒä»¬å¯èƒ½ä¼šæ˜¯æ— æ•ˆçš„。å¦å¤–,调试工具å¯èƒ½è½»å¾®æ”¹å˜ç¨‹åºå®žé™…执行的方å¼ã€‚最åŽï¼Œè°ƒè¯•有许多ç§ï¼Œæ¯”如检查一个断言和一个巨大的数æ®ç»“构,这需è¦å†™ä»£ç å¹¶æ”¹å˜ç¨‹åºçš„è¿è¡Œã€‚当调试工具å¯ç”¨æ—¶ï¼ŒçŸ¥é“æ€Žæ ·ä½¿ç”¨è°ƒè¯•å·¥å…·æ˜¯å¥½çš„ï¼Œä½†å­¦ä¼šä½¿ç”¨å…¶ä»–ä¸¤ç§æ–¹å¼ä¹Ÿæ˜¯è‡³å…³é‡è¦çš„。 -当需è¦ä¿®æ”¹ä»£ç æ—¶ï¼Œä¸€äº›åˆå­¦è€…会害怕调试。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - (å¦åˆ™ï¼‰åœ¨è®¸å¤šäººé¢å¯¹è¿™ç§ææƒ§çš„脆弱的开始时刻,我们会因此失去很多优秀的程åºå‘˜ã€‚ +当调试需è¦ä¿®æ”¹ä»£ç çš„æ—¶å€™ï¼Œä¸€äº›åˆå­¦è€…会感到害怕。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - 就是因为许多人在一开始é¢å¯¹è¿™ç§ææƒ§çš„的时候表现的太脆弱,我们因此失去了很多本å¯ä»¥å˜æˆä¼˜ç§€ç¨‹åºå‘˜çš„人。 -Next [如何通过分离问题空间æ¥Debug](02-How to Debug by Splitting the Problem Space.md) +Next [如何通过分离问题 Debug](02-How to Debug by Splitting the Problem Space.md) diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index 2759d55..9d04270 100644 --- a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -1,14 +1,14 @@ -# 如何通过分割问题空间æ¥Debug +# 如何通过分割问题 Debug 调试是有趣的,因为它一开始是个迷。你认为它应该这样åšï¼Œä½†å®žé™…上它å´é‚£æ ·åšã€‚很多时候并ä¸ä»…是这么简å•---我给出的任何例å­éƒ½ä¼šè¢«è®¾è®¡æ¥ä¸Žä¸€äº›å¶å°”在现实中会å‘生的情况相比较。调试需è¦åˆ›é€ åŠ›ä¸Žæ™ºè°‹ã€‚å¦‚æžœè¯´è°ƒè¯•æœ‰ç®€å•之é“,那就是在这个谜题上使用分治法。 -å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šåœ¨ä¸€ä¸ªåºåˆ—里åšå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´©æºƒäº†ã€‚因为你写的代ç å¹¶ä¸æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä½ æœ‰ä¸€ä¸ªè°œé¢˜äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ +å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šä¾æ¬¡æ‰§è¡Œå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´å´©æºƒäº†ã€‚但你本æ¥çš„ç›®çš„å¹¶ä¸æ˜¯æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä¸€ä¸ªè°œé¢˜æ‰”ç»™ä½ äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ -ä½ å¯ä»¥è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥è§‚察它是在哪件事情上崩溃的å—?当然,你å¯ä»¥ç”¨ä¸€ä¸ªè°ƒè¯•器或者我们å¯ä»¥åœ¨ç¬¬8第9件事åŽé¢åŠ ä¸€äº›[printlining](../../4-Glossary.md)的语å¥ï¼ˆæˆ–è€…ä½ æ­£åœ¨ä½¿ç”¨çš„ä»»ä½•è¯­è¨€é‡Œçš„ç­‰ä»·çš„äº‹æƒ…ï¼‰ï¼Œå½“æˆ‘ä»¬é‡æ–°è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œæˆ‘们的谜题会å˜å¾—æ›´å°ï¼Œæ¯”如“它是在åšç¬¬ä¹ä»¶äº‹çš„æ—¶å€™å´©æºƒçš„â€ã€‚我å‘çŽ°ï¼ŒæŠŠè°œé¢˜æ˜¯æ€Žæ ·çš„ä¸€ç›´æ¸…æ¥šåœ°è®°åœ¨å¿ƒé‡Œèƒ½è®©æˆ‘ä»¬ä¿æŒæ³¨æ„力。当几个人在一个问题的压力下一起工作时,很容易忘记最é‡è¦çš„谜题是什么。 +你是å¦å¯ä»¥è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥è§‚察它是在哪件事情上崩溃呢?当然,你å¯ä»¥ç”¨ä¸€ä¸ªè°ƒè¯•器或者我们å¯ä»¥åœ¨ç¬¬8第9件事åŽé¢åŠ ä¸€äº›[printlining](../../4-Glossary.md)的语å¥ï¼ˆæˆ–è€…ä½ æ­£åœ¨ä½¿ç”¨çš„ä»»ä½•è¯­è¨€é‡Œçš„ç­‰ä»·çš„äº‹æƒ…ï¼‰ï¼Œå½“æˆ‘ä»¬é‡æ–°è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œæˆ‘们的谜题会å˜å¾—æ›´å°ï¼Œæ¯”如“它是在åšç¬¬ä¹ä»¶äº‹çš„æ—¶å€™å´©æºƒçš„â€ã€‚我å‘çŽ°ï¼ŒæŠŠè°œé¢˜æ˜¯æ€Žæ ·çš„ä¸€ç›´æ¸…æ¥šåœ°è®°åœ¨å¿ƒé‡Œèƒ½è®©æˆ‘ä»¬ä¿æŒæ³¨æ„力。当几个人在一个问题的压力下一起工作时,很容易忘记最é‡è¦çš„谜题是什么。 -调试技术中分治的关键和算法设计里的分治是一样的。你åªè¦ä»Žä¸­é—´å¼€å§‹åˆ’分,就ä¸ç”¨åˆ’分太多次,并且能快速地调试。但问题的中点在哪里?这就是真正创造力和ç»éªŒéœ€è¦å‚与的地方。 +调试技术中分治的关键和算法设计里的分治是一样的。你åªè¦ä»Žä¸­é—´å¼€å§‹åˆ’分,就ä¸ç”¨åˆ’分太多次,并且能快速地调试。但问题的中点在哪里?这就是真正需è¦åˆ›é€ åŠ›å’Œç»éªŒçš„地方了。 -对于一个真正的åˆå­¦è€…æ¥è¯´ï¼Œå¯èƒ½å‘生错误的地方好åƒåœ¨ä»£ç çš„æ¯ä¸€è¡Œé‡Œéƒ½æœ‰ã€‚ä¸€å¼€å§‹ï¼Œä½ çœ‹ä¸åˆ°ä¸€äº›å…¶ä»–的你ç¨åŽå°†ä¼šå­¦åˆ°çš„ç»´åº¦ï¼Œæ¯”å¦‚æ‰§è¡Œè¿‡çš„ä»£ç æ®µï¼Œæ•°æ®ç»“构,内存管ç†ï¼Œä¸Žå¤–部代ç çš„交互,一些有风险的代ç ï¼Œä¸€äº›ç®€å•的代ç ã€‚对于一个有ç»éªŒçš„程åºå‘˜ï¼Œè¿™äº›å…¶ä»–的维度为整个å¯èƒ½å‡ºé”™çš„事情展示了一个ä¸å®Œç¾Žä½†æ˜¯æœ‰ç”¨çš„æ€ç»´æ¨¡åž‹ã€‚æ‹¥æœ‰è¿™æ ·çš„æ€ç»´æ¨¡åž‹èƒ½è®©ä¸€ä¸ªäººæ›´é«˜æ•ˆåœ°æ‰¾åˆ°è°œé¢˜çš„中点。 +对于一个真正的åˆå­¦è€…æ¥è¯´ï¼Œå¯èƒ½å‘生错误的地方好åƒåœ¨ä»£ç çš„æ¯ä¸€è¡Œé‡Œéƒ½æœ‰ã€‚ä¸€å¼€å§‹ï¼Œä½ çœ‹ä¸åˆ°ä¸€äº›ä½ ç¨åŽå¼€å‘的时候æ‰ä¼šçœ‹åˆ°çš„å…¶å®ƒçº¬åº¦ï¼Œæ¯”å¦‚æ‰§è¡Œè¿‡çš„ä»£ç æ®µï¼Œæ•°æ®ç»“构,内存管ç†ï¼Œä¸Žå¤–部代ç çš„交互,一些有风险的代ç ï¼Œä¸€äº›ç®€å•的代ç ã€‚对于一个有ç»éªŒçš„程åºå‘˜ï¼Œè¿™äº›å…¶ä»–的维度为整个å¯èƒ½å‡ºé”™çš„事情展示了一个ä¸å®Œç¾Žä½†æ˜¯æœ‰ç”¨çš„æ€ç»´æ¨¡åž‹ã€‚æ‹¥æœ‰è¿™æ ·çš„æ€ç»´æ¨¡åž‹èƒ½è®©ä¸€ä¸ªäººæ›´é«˜æ•ˆåœ°æ‰¾åˆ°è°œé¢˜çš„中点。 一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 5fd82e2..157db67 100644 --- a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,9 +1,9 @@ # 如何移除一个错误 -æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统,所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ +æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤ bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统,所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ -在修å¤bug时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯•å›¾ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤bugæœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çްbugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察bugä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ªbug。 +åœ¨ä¿®å¤ bug 时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯•å›¾ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤ bug æœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çް bugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察 bug 是å¦ä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ª bug。 -有时候,å¯èƒ½å®žé™…上有几个bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释/或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 +有时候,å¯èƒ½å®žé™…上有几个 bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义 bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 Next [如何使用日志调试](04-How to Debug Using a Log.md) diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index ba29229..c53c1bc 100644 --- a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,13 +1,13 @@ # 如何使用日志调试 -*Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为log。*Printlining*åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚ç†æƒ³åœ°ï¼Œç¨‹åºè¿è¡Œæ—¶ï¼Œæ—¥å¿—产生的信æ¯çš„æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: +*Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为 log。*Printlining* åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚åœ¨ç†æƒ³çš„状æ€ä¸‹ï¼Œç¨‹åºè¿è¡Œæ—¶äº§ç”Ÿçš„æ—¥å¿—ä¿¡æ¯æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: -- 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„bug的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„bug。 +- 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„ bug 的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„ bug。 - 日志å¯ä»¥æä¾›ç»Ÿè®¡å’Œä¸Žæ€§èƒ½ç›¸å…³çš„æ•°æ®ï¼Œæ¯”如语å¥é—´æµé€è¿‡çš„æ—¶é—´ã€‚ - å¯é…置的情况下,日志å…è®¸æˆ‘ä»¬èŽ·å–æ™®é€šçš„ä¿¡æ¯ï¼Œä½¿å¾—我们å¯ä»¥åœ¨ä¸ä¿®æ”¹æˆ–釿–°éƒ¨ç½²ä»£ç çš„æƒ…况下调试以处ç†å…·ä½“的问题。 -需è¦è¾“å‡ºçš„æ—¥å¿—æ•°é‡æ€»æ˜¯ä¸€ä¸ªç®€çº¦ä¸Žä¿¡æ¯çš„æƒè¡¡ã€‚å¤ªå¤šçš„ä¿¡æ¯ä¼šä½¿å¾—日志å˜å¾—昂贵,并且造æˆ[*滚动目盲*](../../4-Glossary.md),使得å‘现你想è¦çš„ä¿¡æ¯å˜å¾—很困难。但信æ¯å¤ªå°‘çš„è¯ï¼Œæ—¥å¿—å¯èƒ½ä¸åŒ…å«ä½ éœ€è¦çš„ä¿¡æ¯ã€‚出于这个原因,让日志的输出å¯é…置是éžå¸¸æœ‰ç”¨çš„。通常,日志中的æ¯ä¸ªè®°å½•会标记它在æºä»£ç é‡Œçš„ä½ç½®ï¼Œæ‰§è¡Œå®ƒçš„线程(如果å¯ç”¨çš„è¯ï¼‰ï¼Œæ—¶é—´ç²¾åº¦ï¼Œå¹¶ä¸”,通常有,一些é¢å¤–的有效信æ¯ï¼Œæ¯”如一些å˜é‡çš„值,剩余内存大å°ï¼Œæ•°æ®å¯¹è±¡çš„æ•°é‡ï¼Œç­‰ç­‰ã€‚è¿™äº›æ—¥å¿—è¯­å¥æ’’éæºç ï¼Œä½†åªå‡ºçŽ°åœ¨ä¸»è¦çš„功能点和一些å¯èƒ½å‡ºçް屿œºçš„代ç é‡Œã€‚æ¯ä¸ªè¯­å¥å¯ä»¥è¢«èµ‹äºˆä¸€ä¸ªç­‰çº§ï¼Œå¹¶ä¸”å°†ä¼šåœ¨ç³»ç»Ÿè®¾ç½®è¾“å‡ºè¿™ä¸ªç­‰çº§æ—¶è¾“å‡ºè¿™ä¸ªè®°å½•ã€‚ä½ åº”è¯¥è®¾è®¡å¥½æ—¥å¿—è¯­å¥æ¥æ ‡è®°ä½ é¢„期的问题。预估测é‡ç¨‹åºè¡¨çŽ°çš„å¿…è¦æ€§ã€‚ +需è¦è¾“å‡ºçš„æ—¥å¿—æ•°é‡æ€»æ˜¯ä¸€ä¸ªç®€çº¦ä¸Žä¿¡æ¯é‡çš„æƒè¡¡ã€‚å¤ªå¤šçš„ä¿¡æ¯ä¼šä½¿å¾—日志å˜å¾—昂贵,并且造æˆ[*滚动目盲*](../../4-Glossary.md),使得å‘现你想è¦çš„ä¿¡æ¯å˜å¾—很困难。但信æ¯å¤ªå°‘çš„è¯ï¼Œæ—¥å¿—å¯èƒ½ä¸åŒ…å«ä½ éœ€è¦çš„ä¿¡æ¯ã€‚出于这个原因,让日志的输出å¯é…置是éžå¸¸æœ‰ç”¨çš„。通常,日志中的æ¯ä¸ªè®°å½•会标记它在æºä»£ç é‡Œçš„ä½ç½®ï¼Œæ‰§è¡Œå®ƒçš„线程(如果å¯ç”¨çš„è¯ï¼‰ï¼Œæ—¶é—´ç²¾åº¦ï¼Œå¹¶ä¸”通常还有一些é¢å¤–的有效信æ¯ï¼Œæ¯”如一些å˜é‡çš„值,剩余内存大å°ï¼Œæ•°æ®å¯¹è±¡çš„æ•°é‡ï¼Œç­‰ç­‰ã€‚è¿™äº›æ—¥å¿—è¯­å¥æ’’éæºç ï¼Œä½†åªå‡ºçŽ°åœ¨ä¸»è¦çš„功能点和一些å¯èƒ½å‡ºçް屿œºçš„代ç é‡Œã€‚æ¯ä¸ªè¯­å¥å¯ä»¥è¢«èµ‹äºˆä¸€ä¸ªç­‰çº§ï¼Œå¹¶ä¸”åªæœ‰åœ¨ç³»ç»Ÿè¢«é…ç½®æˆè¾“出相应等级的记录的时候æ‰è¾“å‡ºè¿™ä¸ªç­‰çº§çš„è®°å½•ã€‚ä½ åº”è¯¥è®¾è®¡å¥½æ—¥å¿—è¯­å¥æ¥æ ‡è®°ä½ é¢„期的问题。预估测é‡ç¨‹åºè¡¨çŽ°çš„å¿…è¦æ€§ã€‚ -如果你有一个永久的日志,printling现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 +如果你有一个永久的日志,printling 现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How to Understand Performance Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index 31aff0e..46b50b0 100644 --- a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,10 +1,10 @@ # 如何ç†è§£æ€§èƒ½é—®é¢˜ -学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹ debug是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žåœ°ç†è§£äº†ä½ å†™çš„代ç çš„代价,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 +学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹  debug 是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žã€ç²¾ç¡®åœ°ç†è§£äº†ä½ çš„代ç è¿è¡Œæ—¶æ‰€äº§ç”Ÿçš„开销,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 -å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨I/O上。å‘现昂贵的I/O和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 +å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨ I/O 上。å‘现昂贵的 I/O 和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 -计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯èŠ±è´¹äº†ç¨å¾®å¤šä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ +计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯ç¨å¾®å¤šèŠ±è´¹äº†ä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ 竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index 8841c9a..c2778f8 100644 --- a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,13 +1,13 @@ # å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜ -大部分软件都å¯ä»¥é€šè¿‡ç›¸å¯¹å°å¾—多的努力,å˜å¾—比它们刚å‘布时,在时间上快10到100å€ã€‚在市场å‘布时间的压力下,选择一个简å•快速的解决性能问题的方法而éžå…¶ä»–æ–¹æ³•æ˜¯èªæ˜Žè€Œæœ‰æ•ˆçŽ‡çš„ã€‚ç„¶è€Œï¼Œæ€§èƒ½æ˜¯å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 +大部分软件都å¯ä»¥é€šè¿‡ä»˜å‡ºç›¸å¯¹è¾ƒå°çš„努力,让他们比刚å‘布时快上10到100å€ã€‚在市场的压力下,选择一个简å•而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 -æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œä»¥å‘现“瓶颈â€ï¼Œæˆ–者资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 +æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œæ¥å‘现其“瓶颈â€ï¼Œæˆ–者其资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 当你在æŸä¸ªæ–¹é¢åšäº†ä¸€ä¸ªä¸¤å€æå‡åŽï¼Œä½ éœ€è¦è‡³å°‘釿–°è€ƒè™‘并且å¯èƒ½é‡æ–°åˆ†æžï¼ŒåŽ»å‘çŽ°ç³»ç»Ÿä¸­ä¸‹ä¸€ä¸ªæœ€æ˜‚è´µçš„ç“¶é¢ˆï¼Œå¹¶ä¸”æ”»ç ´é‚£ä¸ªç“¶é¢ˆï¼Œå¾—åˆ°ä¸‹ä¸€ä¸ªä¸¤å€æå‡ã€‚ -é€šå¸¸ï¼Œæ€§èƒ½çš„ç“¶é¢ˆçš„ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œæ•°ç‰›çš„æ•°ç›®ï¼šé€šè¿‡æ•°è„šçš„æ•°é‡ç„¶åŽé™¤ä»¥4,还是数头的数é‡ã€‚举些例å­ï¼Œæˆ‘曾犯过的一些错误:没能在关系数æ®åº“中,为我ç»å¸¸æŸ¥è¯¢çš„那一列æä¾›é€‚当的索引,这å¯èƒ½ä¼šä½¿å¾—它至少慢了20å€ã€‚其他例å­è¿˜åŒ…括在循环里åšä¸å¿…è¦çš„I/Oæ“作,留下ä¸å†éœ€è¦çš„调试语å¥ï¼Œä¸å†éœ€è¦çš„内存分é…,还有,尤其是,ä¸ä¸“业地使用库和其他的没有为性能充分编写过的å­ç³»ç»Ÿã€‚è¿™ç§æå‡æœ‰æ—¶å€™è¢«å«åšâ€œä½Žåž‚的水果â€ï¼Œæ„æ€æ˜¯å®ƒå¯ä»¥è¢«è½»æ˜“地获å–,然åŽäº§ç”Ÿå·¨å¤§çš„好处。 +é€šå¸¸ï¼Œæ€§èƒ½çš„ç“¶é¢ˆçš„ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œæ•°ç‰›çš„æ•°ç›®ï¼šé€šè¿‡æ•°è„šçš„æ•°é‡ç„¶åŽé™¤ä»¥4,还是数头的数é‡ã€‚举些例å­ï¼Œæˆ‘曾犯过的一些错误:没能在关系数æ®åº“中,为我ç»å¸¸æŸ¥è¯¢çš„那一列æä¾›é€‚当的索引,这å¯èƒ½ä¼šä½¿å¾—它至少慢了20å€ã€‚其他例å­è¿˜åŒ…括在循环里åšä¸å¿…è¦çš„ I/O æ“作,留下ä¸å†éœ€è¦çš„调试语å¥ï¼Œä¸å†éœ€è¦çš„内存分é…,还有,尤其是,ä¸ä¸“业地使用库和其他的没有为性能充分编写过的å­ç³»ç»Ÿã€‚è¿™ç§æå‡æœ‰æ—¶å€™è¢«å«åšâ€œä½Žåž‚的水果â€ï¼Œæ„æ€æ˜¯å®ƒå¯ä»¥è¢«è½»æ˜“地获å–,然åŽäº§ç”Ÿå·¨å¤§çš„好处。 -你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的boss这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ +你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的 boss 这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ Next [如何优化循环](07-How to Optimize Loops.md) diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index f2f0c23..8d5f4ec 100644 --- a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,11 +1,11 @@ # 如何优化循环 -有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…需è¦ç‹¬åˆ›æ€§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: +有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…éœ€è¦æ™ºæ…§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: - 删除浮点è¿ç®—æ“作。 - éžå¿…è¦æ—¶ä¸è¦åˆ†é…新的内存。 - 把常é‡éƒ½æ”¾åœ¨ä¸€èµ·å£°æ˜Žã€‚ -- 把I/O放在缓冲里åšã€‚ +- 把 I/O 放在缓冲里åšã€‚ - å°½é‡ä¸ä½¿ç”¨é™¤æ³•。 - å°½é‡ä¸é€‚用昂贵的类型转æ¢ã€‚ - 移动指针而éžé‡æ–°è®¡ç®—索引。 diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index 8593339..afaf84b 100644 --- a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,13 +1,13 @@ # 如何处ç†I/O代价 -在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜I/O,数æ®åº“查询,文件I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜I/O的问题,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法。 +在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„ I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜ I/O,数æ®åº“查询,文件 I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜ I/O,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法的问题。 -有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ–I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦æ‰§è¡ŒI/O,以此æ¥é¿å…I/O(通常é¿å…读å–ä¸€äº›æŠ½è±¡çš„å€¼ï¼‰ã€‚ç¼“å­˜çš„å…³é”®åœ¨äºŽè®©ï¼ˆä¸Šå±‚å¯¹äºŽï¼‰å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬ï¼Œå®Œå…¨é€æ˜Žã€‚主干的数æ®åªæœ‰ä¸€ä»½-周期。缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 +有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ– I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦å†æ‰§è¡Œ I/O,以此æ¥é¿å… I/O(通常é¿å…读å–一些抽象的值)。缓存的关键在于è¦è®©å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬å˜å¾—显而易è§ã€‚主干的数æ®åªæœ‰ä¸€ä»½-周期。缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 -ä»£è¡¨æ˜¯é€šè¿‡æ›´é«˜æ•ˆåœ°è¡¨ç¤ºæ•°æ®æ¥è®©I/O更廉价。这通常会é™åˆ¶å…¶ä»–çš„è¦æ±‚,比如å¯è¯»æ€§å’Œå¯ç§»æ¤æ€§ã€‚ +ä»£è¡¨æ˜¯é€šè¿‡æ›´é«˜æ•ˆåœ°è¡¨ç¤ºæ•°æ®æ¥è®© I/O 更廉价。这通常会é™åˆ¶å…¶ä»–çš„è¦æ±‚,比如å¯è¯»æ€§å’Œå¯ç§»æ¤æ€§ã€‚ -代表通常å¯ä»¥ç”¨ä»–ä»¬ç¬¬ä¸€å®žçŽ°ä¸­çš„ä¸¤åˆ°ä¸‰ä¸ªå› å­æ¥åšä¼˜åŒ–。实现这点的技术包括使用二进制表示而éžäººç±»å¯è¯†åˆ«çš„æ–¹å¼,传递数æ®çš„åŒæ—¶ä¹Ÿä¼ é€’一个符å·è¡¨ï¼Œè¿™æ ·é•¿çš„符å·å°±ä¸éœ€è¦è¢«ç¼–ç ï¼Œæžç«¯çš„,å¯èƒ½ä¼šåƒå“ˆå¼—曼编ç ã€‚ +代表通常å¯ä»¥ç”¨ä»–ä»¬ç¬¬ä¸€å®žçŽ°ä¸­çš„ä¸¤åˆ°ä¸‰ä¸ªå› å­æ¥åšä¼˜åŒ–。实现这点的技术包括使用二进制表示而éžäººç±»å¯è¯†åˆ«çš„æ–¹å¼,传递数æ®çš„åŒæ—¶ä¹Ÿä¼ é€’一个符å·è¡¨ï¼Œè¿™æ ·é•¿çš„符å·å°±ä¸éœ€è¦è¢«ç¼–ç ï¼Œä¸€ä¸ªæžç«¯çš„例孿˜¯å“ˆå¼—曼编ç ã€‚ -一个å¶å°”å¯è¡Œçš„第三方技术是让计算更接近数æ®ï¼Œæ¥ä¼˜åŒ–本地引用。例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 +å¦ä¸€ç§æœ‰æ—¶èƒ½å¤Ÿç”¨æ¥ä¼˜åŒ–本地引用的技术是让计算更接近数æ®ã€‚例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 Next [如何管ç†å†…å­˜](09-How to Manage Memory.md) diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md index 0f72b6a..a87e0ad 100644 --- a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -3,12 +3,13 @@ 内存是一ç§ä½ ä¸å¯ä»¥è€—尽的ç贵资æºã€‚在一段时期里,你å¯ä»¥æ— è§†å®ƒï¼Œä½†æœ€ç»ˆä½ å¿…须决定如何管ç†å†…存。 堆内存是在å•一å­ç¨‹åºèŒƒå›´å¤–ï¼Œéœ€è¦æŒç»­ï¼ˆä¿ç•™ï¼‰çš„空间。一大å—内存,在没有东西指å‘它的时候,是无用的,因此被称为*垃圾*。根æ®ä½ æ‰€ä½¿ç”¨çš„系统的ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦è‡ªå·±æ˜¾å¼é‡Šæ”¾å°†è¦å˜æˆåžƒåœ¾çš„内存。更多时候你å¯èƒ½ä½¿ç”¨ä¸€ä¸ªæœ‰*垃圾回收器*的系统。一个垃圾回收器会自己注æ„到垃圾的存在并且在ä¸éœ€è¦ç¨‹åºå‘˜åšä»»ä½•事情的情况下释放它的内存空间。垃圾回收器是奇妙的:它å‡å°äº†é”™è¯¯ï¼Œç„¶åŽå¢žåŠ äº†ä»£ç çš„ç®€æ´æ€§ã€‚如果å¯ä»¥çš„è¯ï¼Œä½¿ç”¨åžƒåœ¾å›žæ”¶å™¨ã€‚ -但是å³ä½¿æœ‰äº†åžƒåœ¾å›žæ”¶æœºåˆ¶ï¼Œä½ è¿˜æ˜¯å¯èƒ½æŠŠæ‰€æœ‰çš„内存填满垃圾。一个典型的错误是把哈希表作为一个缓存,但是忘了删除对哈希表的引用。因为引用ä»ç„¶å­˜åœ¨ï¼Œè¢«å¼•用者是ä¸å¯å›žæ”¶ä½†å´æ— ç”¨çš„。这就å«åš*内存泄露*。你应该尽早å‘现并且修å¤å†…存泄露。如果你会长时间è¿è¡Œç³»ç»Ÿï¼Œå†…å­˜å¯èƒ½åœ¨æµ‹è¯•中ä¸ä¼šè¢«è€—尽,但å¯èƒ½åœ¨ç”¨æˆ·é‚£é‡Œè¢«è€—尽。 + +但是å³ä½¿æœ‰äº†åžƒåœ¾å›žæ”¶æœºåˆ¶ï¼Œä½ è¿˜æ˜¯å¯èƒ½æŠŠæ‰€æœ‰çš„内存填满垃圾。一个典型的错误是把哈希表作为一个缓存,但是忘了删除对哈希表的引用。因为引用ä»ç„¶å­˜åœ¨ï¼Œè¢«å¼•用者是ä¸å¯å›žæ”¶ä½†å´æ— ç”¨çš„。这就å«åš*内存泄露*。你应该尽早å‘现并且修å¤å†…存泄露。如果你有一个长时间è¿è¡Œçš„系统,内存å¯èƒ½åœ¨æµ‹è¯•中ä¸ä¼šè¢«è€—尽,但å¯èƒ½åœ¨ç”¨æˆ·é‚£é‡Œè¢«è€—尽。 创建新对象在任何系统里都是有点昂贵的。然而,在å­ç¨‹åºé‡Œç›´æŽ¥ä¸ºå±€éƒ¨å˜é‡åˆ†é…内存通常很便宜,因为释放它的策略很简å•。你应该é¿å…ä¸å¿…è¦çš„对象创建。 当你å¯ä»¥å®šä¹‰ä½ ä¸€æ¬¡éœ€è¦çš„æ•°é‡çš„上界的时候,一个é‡è¦çš„æƒ…况出现了:如果这些对象都å ç”¨ç›¸åŒå¤§å°çš„内存,你å¯ä»¥ä½¿ç”¨å•独的一å—å†…å­˜ï¼Œæˆ–ç¼“å­˜ï¼Œæ¥æŒæœ‰æ‰€æœ‰çš„这些对象。你需è¦çš„对象å¯ä»¥åœ¨è¿™ä¸ªç¼“存里以循环的方å¼åˆ†é…å’Œé‡Šæ”¾ï¼Œæ‰€ä»¥å®ƒæœ‰æ—¶å€™è¢«ç§°ä¸ºçŽ¯ç¼“å­˜ã€‚è¿™é€šå¸¸æ¯”å †å†…å­˜åˆ†é…æ›´å¿«ã€‚(译者注:这也被称为对象池。) -æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…须在æ¯å—内存上使用谨慎的智慧,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚你必须确定æ¯ä¸ªå†…å­˜åˆ†é…æ–¹æ³•的执行与最终都匹é…一个内存释放æ“作。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no free)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 +æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no free)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 -Next [如何处ç†å¶çŽ°çš„Bug](10-How to Deal with Intermittent Bugs.md) +Next [如何处ç†å¶çŽ°çš„ Bug](10-How to Deal with Intermittent Bugs.md) diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index dba41e3..44a142b 100644 --- a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,17 +1,17 @@ -# 如何处ç†å¶çŽ°çš„Bugs +# 如何处ç†å¶çŽ°çš„ Bugs -å¶çްbug是外部ä¸å¯è§çš„50足的èŽå­çš„亲戚。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ +å¶çް bug 是一ç§ç±»ä¼¼äºŽå¤–太空50è¶³éšèº«èŽå­çš„东西。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ -尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„bugå¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•记录这个bug会出现的情况,这样你å¯ä»¥çŒœæµ‹çœŸå®žçš„å½±å“å˜é‡æ˜¯ä»€ä¹ˆã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å˜é‡çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 +尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„ bug å¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•ç€åŽ»è®°å½•è¿™ä¸ª bug 出现时的情景,这样你å¯ä»¥åŽ»æŽ¨æµ‹åˆ°åº•æ˜¯ä»€ä¹ˆæ ·çš„å¯å˜æ€§ã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å¯å˜æ€§çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 -å°è¯•,å°è¯•,å°è¯•去在一ç§å¯æŽ§çš„æ–¹å¼ä¸‹é‡çŽ°è¿™ä¸ªbug。如果你ä¸èƒ½é‡çŽ°å®ƒï¼Œç”¨æ—¥å¿—ç³»ç»Ÿç»™å®ƒè®¾ç½®ä¸€ä¸ªåœˆå¥—ï¼Œæ¥åœ¨ä½ éœ€è¦çš„æ—¶å€™ï¼Œåœ¨å®ƒçœŸçš„å‘生的时候,记录你猜想的,需è¦çš„ä¸œè¥¿ã€‚é‡æ–°è®¾è®¡è¿™ä¸ªåœˆå¥—,如果这个bugåªå‘生在产å“中,且ä¸åœ¨ä½ çš„猜想中的è¯ï¼Œè¿™å¯èƒ½æ˜¯ä¸€ä¸ªé•¿çš„过程。你从日志中得到的(信æ¯ï¼‰å¯èƒ½ä¸èƒ½æä¾›è§£å†³æ–¹æ¡ˆï¼Œä½†å¯èƒ½ç»™ä½ è¶³å¤Ÿçš„ä¿¡æ¯åŽ»ä¼˜åŒ–è¿™ä¸ªæ—¥å¿—ã€‚ä¼˜åŒ–åŽçš„æ—¥å¿—系统å¯èƒ½èŠ±å¾ˆé•¿æ—¶é—´æ‰èƒ½è¢«æ”¾å…¥äº§å“中使用。然åŽï¼Œä½ å¿…须等待bug釿–°å‡ºçŽ°ä»¥èŽ·å¾—æ›´å¤šçš„ä¿¡æ¯ã€‚这个循环å¯èƒ½ä¼šç»§ç»­å¥½å‡ æ¬¡ã€‚ +å°è¯•,å°è¯•,å°è¯•去在一ç§å¯æŽ§çš„æ–¹å¼ä¸‹é‡çŽ°è¿™ä¸ª bug。如果你ä¸èƒ½é‡çŽ°å®ƒï¼Œç”¨æ—¥å¿—ç³»ç»Ÿç»™å®ƒè®¾ç½®ä¸€ä¸ªåœˆå¥—ï¼Œæ¥åœ¨ä½ éœ€è¦çš„æ—¶å€™ï¼Œåœ¨å®ƒçœŸçš„å‘生的时候,记录你猜想的,需è¦çš„ä¸œè¥¿ã€‚é‡æ–°è®¾è®¡è¿™ä¸ªåœˆå¥—,如果这个bugåªå‘生在产å“中,且ä¸åœ¨ä½ çš„猜想中的è¯ï¼Œè¿™å¯èƒ½æ˜¯ä¸€ä¸ªé•¿çš„过程。你从日志中得到的(信æ¯ï¼‰å¯èƒ½ä¸èƒ½æä¾›è§£å†³æ–¹æ¡ˆï¼Œä½†å¯èƒ½ç»™ä½ è¶³å¤Ÿçš„ä¿¡æ¯åŽ»ä¼˜åŒ–è¿™ä¸ªæ—¥å¿—ã€‚ä¼˜åŒ–åŽçš„æ—¥å¿—系统å¯èƒ½èŠ±å¾ˆé•¿æ—¶é—´æ‰èƒ½è¢«æ”¾å…¥äº§å“中使用。然åŽï¼Œä½ å¿…须等待 bug 釿–°å‡ºçŽ°ä»¥èŽ·å¾—æ›´å¤šçš„ä¿¡æ¯ã€‚这个循环å¯èƒ½ä¼šç»§ç»­å¥½å‡ æ¬¡ã€‚ -我曾创建过的最愚蠢的å¶çްbug出现在,一个函数å¼ç¼–程语言里为类工程åšå¤šçº¿ç¨‹å®žçŽ°ã€‚æˆ‘éžå¸¸ä»”细地ä¿è¯äº†å‡½æ•°å¼ç¨‹åºçš„å¹¶å‘估计,还有好的CPU使用(在这个例å­é‡Œï¼Œæ˜¯8个CPU)。我简å•åœ°å¿˜è®°äº†åŒæ­¥åžƒåœ¾å›žæ”¶å™¨ã€‚系统å¯èƒ½è¿è¡Œäº†å¾ˆé•¿ä¸€æ®µæ—¶é—´ï¼Œç»å¸¸ç»“æŸåœ¨æˆ‘开始任何一个任务的时候,在任何能被注æ„到的事情出错之å‰ã€‚æˆ‘å¾ˆé—æ†¾åœ°æ‰¿è®¤åœ¨æˆ‘ç†è§£æˆ‘的错误之å‰ï¼Œæˆ‘甚至开始怀疑硬件了。 +我曾创建过的最愚蠢的å¶çް bug 是在用一个函数å¼ç¼–程语言里为类工程åšå¤šçº¿ç¨‹å®žçŽ°çš„æ—¶å€™ã€‚æˆ‘éžå¸¸ä»”细地ä¿è¯äº†å‡½æ•°å¼ç¨‹åºçš„å¹¶å‘估计, CPU 的充分使用(在这个例å­é‡Œï¼Œæ˜¯8个 CPU)。我å´ç®€å•åœ°å¿˜è®°äº†åŽ»åŒæ­¥åžƒåœ¾å›žæ”¶å™¨ã€‚系统å¯èƒ½è¿è¡Œäº†å¾ˆé•¿ä¸€æ®µæ—¶é—´ï¼Œç»å¸¸ç»“æŸåœ¨æˆ‘开始任何一个任务的时候,在任何能被注æ„到的事情出错之å‰ã€‚æˆ‘å¾ˆé—æ†¾åœ°æ‰¿è®¤åœ¨æˆ‘ç†è§£æˆ‘的错误之å‰ï¼Œæˆ‘甚至开始怀疑硬件了。 -在工作中我们最近有这样一个å¶çŽ°çš„bug让我们花了几个星期æ‰å‘现。我们有一个多线程的基于Apache™的Javaâ„¢webæœåС噍,在维护第一个页é¢è·³è½¬çš„æ—¶å€™ï¼Œæˆ‘们在四个独立线程里以4个独立的线程而éžé¡µé¢è·³è½¬çº¿ç¨‹ä¸ºä¸€ä¸ªå°çš„é›†åˆæ‰§è¡Œæ‰€æœ‰çš„I/Oæ“作。æ¯ä¸€æ¬¡è·³è½¬ä¼šäº§ç”Ÿæ˜Žæ˜¾çš„å¡é¡¿ç„¶åŽåœæ­¢åšä»»ä½•æœ‰ç”¨çš„äº‹æƒ…ï¼Œç›´åˆ°å‡ ä¸ªå°æ—¶åŽï¼Œæˆ‘们的日志å…许我们去了解å‘生了什么。因为我们有四个线程,在一个线程内部å‘ç”Ÿè¿™ç§æƒ…况并䏿˜¯ä»€ä¹ˆå¤§é—®é¢˜ï¼Œé™¤éžæ‰€æœ‰çš„四个线程都阻塞了。然åŽè¢«è¿™äº›çº¿ç¨‹æŽ’空的队列会迅速填充所有å¯ç”¨çš„内存,然åŽå¯¼è‡´æˆ‘们的æœåŠ¡å™¨å´©æºƒã€‚è¿™ä¸ªbug花了我们一个星期去æªä½è¿™ä¸ªé—®é¢˜ï¼Œä½†æˆ‘们ä»ç„¶ä¸çŸ¥é“什么导致了这个现象,ä¸çŸ¥é“它什么时候会å‘生,甚至ä¸çŸ¥é“它们阻塞的时候,线程们在干什么。 +在工作中我们最近有这样一个å¶çŽ°çš„ bug 让我们花了几个星期æ‰å‘现。我们有一个多线程的基于 Apacheâ„¢ çš„ Javaâ„¢web æœåС噍,在维护第一个页é¢è·³è½¬çš„æ—¶å€™ï¼Œæˆ‘们在四个独立线程里以4个独立的线程而éžé¡µé¢è·³è½¬çº¿ç¨‹ä¸ºä¸€ä¸ªå°çš„é›†åˆæ‰§è¡Œæ‰€æœ‰çš„ I/O æ“作。æ¯ä¸€æ¬¡è·³è½¬ä¼šäº§ç”Ÿæ˜Žæ˜¾çš„å¡é¡¿ç„¶åŽåœæ­¢åšä»»ä½•æœ‰ç”¨çš„äº‹æƒ…ï¼Œç›´åˆ°å‡ ä¸ªå°æ—¶åŽï¼Œæˆ‘们的日志æ‰è®©æˆ‘们了解到底å‘生了什么。因为我们有四个线程,在一个线程内部å‘ç”Ÿè¿™ç§æƒ…况并䏿˜¯ä»€ä¹ˆå¤§é—®é¢˜ï¼Œé™¤éžæ‰€æœ‰çš„四个线程都阻塞了。然åŽè¢«è¿™äº›çº¿ç¨‹æŽ’空的队列会迅速填充所有å¯ç”¨çš„内存,然åŽå¯¼è‡´æˆ‘们的æœåŠ¡å™¨å´©æºƒã€‚è¿™ä¸ª bug 花了我们一个星期去æªä½è¿™ä¸ªé—®é¢˜ï¼Œä½†æˆ‘们ä»ç„¶ä¸çŸ¥é“什么导致了这个现象,ä¸çŸ¥é“它什么时候会å‘生,甚至ä¸çŸ¥é“它们阻塞的时候,线程们在干什么。 -这表明了有关使用第三方软件的一些风险。我们在使用一段授æƒçš„代ç ï¼Œä»Žæ–‡æœ¬ä¸­ç§»é™¤HTML标签。å—它的起æºçš„å½±å“,我们把它å«åšæ³•å›½è„±è¡£èˆžè€…ã€‚å°½ç®¡æˆ‘ä»¬æœ‰æºä»£ç ï¼ˆç”±è¡·æ„Ÿè°¢ï¼ï¼‰ï¼Œæˆ‘们没有仔细研究它,直到查看我们æœåŠ¡å™¨çš„æ—¥å¿—çš„æ—¶å€™ï¼Œæˆ‘ä»¬æœ€ç»ˆæ„识到“法国脱衣舞者â€ä¸­ï¼Œé€šä¿¡çº¿ç¨‹é˜»å¡žäº†ã€‚ +这表明了有关使用第三方软件的一些风险。我们在使用一段授æƒçš„代ç ï¼Œä»Žæ–‡æœ¬ä¸­ç§»é™¤HTML标签。å—它的起æºçš„å½±å“,我们把它å«åšæ³•å›½è„±è¡£èˆžè€…ã€‚å°½ç®¡æˆ‘ä»¬æœ‰æºä»£ç ï¼ˆç”±è¡·æ„Ÿè°¢ï¼ï¼‰ï¼Œæˆ‘们没有仔细研究它,直到查看我们æœåŠ¡å™¨çš„æ—¥å¿—çš„æ—¶å€™ï¼Œæˆ‘ä»¬æœ€ç»ˆæ„识到是“法国脱衣舞者â€ä½¿é‚®ä»¶çº¿ç¨‹é˜»å¡žäº†ã€‚ -这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是N平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。由于这些文本通常都会出现,我们å¯ä»¥é©¬ä¸Šå‘现这个bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 +这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是 N 的平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。正å¼ç”±äºŽè¿™äº›æ–‡æœ¬é€šå¸¸éƒ½ä¼šå‡ºçŽ°ï¼Œæ‰€ä»¥æˆ‘ä»¬æ‰å¯ä»¥é©¬ä¸Šå‘现这个 bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 Next [如何学习设计技能](11-How to Learn Design Skills.md) diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 1fea37e..0427c7c 100644 --- a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,6 +1,6 @@ # 如何学习设计技能 -为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œå‡ºçŽ°åœ¨ä»–èº«è¾¹ï¼Œå­¦ä¹ ä»–çš„è¡Œä¸ºã€‚ç„¶åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如android系统中的谷歌官方应用)。在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 +为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œåœ¨ä»–身边学习他的行为。然åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如 android 系统中的谷歌官方应用)。在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 ç„¶åŽä½ å¿…须自己动手了。从一个å°çš„工程开始,当你最åŽå®Œæˆæ—¶ï¼Œè€ƒè™‘为什么这个设计失败了或æˆåŠŸäº†ï¼Œä½ æ˜¯æ€Žæ ·å离你最åˆçš„设想的。然åŽç»§ç»­åŽ»ç€æ‰‹å¤§ä¸€ç‚¹çš„å·¥ç¨‹ï¼Œåœ¨ä¸Žå…¶ä»–äººç»“åˆæ—¶ä¼šæ›´æœ‰å¸Œæœ›ã€‚设计是一ç§éœ€è¦èŠ±å¾ˆå¤šå¹´åŽ»å­¦ä¹ çš„å…³äºŽè¯„åˆ¤çš„äº‹æƒ…ã€‚ä¸€ä¸ªèªæ˜Žçš„程åºå‘˜å¯ä»¥å­¦ä¹ åœ¨ä¸¤ä¸ªæœˆå†…充分学好这ç§åŸºç¡€ç„¶åŽä»Žè¿™é‡Œå¼€å§‹è¿›æ­¥ã€‚ diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index d497904..7607763 100644 --- a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,22 +1,22 @@ # 如何进行实验 -已故的伟大的Edsger Dijkstra曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] +已故的伟大的 Edsger Dijkstra 曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] > ...å±å®³å·²ç»å‡ºçŽ°ï¼šä¸»é¢˜çŽ°åœ¨å·²ç»å˜æˆäº†â€œè®¡ç®—机科学†- è¿™å®žé™…ä¸Šï¼Œåƒæ˜¯æŠŠå¤–科手术引用为“手术刀科学†- 这在人们心中深深æ¤å…¥äº†è¿™æ ·ä¸€ä¸ªæ¦‚念:计算机科学是关于机器和它们的外围设备的。 -编程ä¸åº”该是一门实验科学,但大多数èŒä¸šç¨‹åºå‘˜å¹¶æ²¡æœ‰ä¿å«Dijkstra对于计算机科学的解释的è£è€€ã€‚æˆ‘ä»¬å¿…é¡»åœ¨å®žéªŒçš„é¢†åŸŸé‡Œå·¥ä½œï¼Œæ­£å¦‚ä¸€éƒ¨åˆ†ï¼Œä½†éžæ‰€æœ‰çš„,物ç†å­¦å®¶åšçš„。如果三åå¹´åŽï¼Œç¼–程å¯ä»¥åœ¨ä¸è¿›è¡Œä»»ä½•å®žéªŒçš„å‰æä¸‹è¿›è¡Œï¼Œè¿™å°†æ˜¯è®¡ç®—æœºç§‘å­¦çš„ä¸€ä¸ªå·¨å¤§æˆå°±ã€‚ +编程ä¸åº”该是一门实验科学,但大多数èŒä¸šç¨‹åºå‘˜å¹¶æ²¡æœ‰ä¿å« Dijkstra 对于计算机科学的解释的è£è€€ã€‚æˆ‘ä»¬å¿…é¡»åœ¨å®žéªŒçš„é¢†åŸŸé‡Œå·¥ä½œï¼Œæ­£å¦‚ä¸€éƒ¨åˆ†ï¼Œä½†éžæ‰€æœ‰çš„物ç†å­¦å®¶åšçš„那样。如果三åå¹´åŽï¼Œç¼–程å¯ä»¥åœ¨ä¸è¿›è¡Œä»»ä½•å®žéªŒçš„å‰æä¸‹è¿›è¡Œï¼Œè¿™å°†æ˜¯è®¡ç®—æœºç§‘å­¦çš„ä¸€ä¸ªå·¨å¤§æˆå°±ã€‚ 你需è¦è¿›è¡Œçš„实验包括: - 用å°çš„例孿µ‹è¯•系统以验è¯å®ƒä»¬éµå¾ªæ–‡æ¡£ï¼Œæˆ–者在没有文档时,ç†è§£å®ƒä»¬çš„å应; -- 测试一些å°çš„代ç ä¿®æ”¹åŽ»éªŒè¯å®ƒä»¬æ˜¯å¦ç¡®å®žä¿®å¤äº†ä¸€ä¸ªbugï¼› +- 测试一些å°çš„代ç ä¿®æ”¹åŽ»éªŒè¯å®ƒä»¬æ˜¯å¦ç¡®å®žä¿®å¤äº†ä¸€ä¸ª bugï¼› - 由于对一个系统ä¸å®Œå…¨çš„ç†è§£ï¼Œéœ€è¦åœ¨ä¸¤ç§ä¸åŒæƒ…况下测é‡å®ƒä»¬çš„æ€§èƒ½è¡¨çŽ°ï¼› - 检查数æ®çš„完整性,和 -- 对困难的或者难以é‡çŽ°çš„bug,收集解决方案中å¯èƒ½æç¤ºçš„统计数æ®ã€‚ +- 对困难的或者难以é‡çŽ°çš„ bug,收集解决方案中å¯èƒ½æç¤ºçš„统计数æ®ã€‚ 我ä¸è®¤ä¸ºåœ¨è¿™ç¯‡æ–‡ç« é‡Œæˆ‘å¯ä»¥è®²è¿°å®žéªŒçš„设计,你会在实践中学习到这方é¢çš„知识。然而,我å¯ä»¥æä¾›ä¸¤ç‚¹å»ºè®®ï¼š 第一,对你的å‡è®¾æˆ–è€…ä½ è¦æµ‹è¯•的断言è¦éžå¸¸æ¸…楚。把å‡è®¾å†™ä¸‹æ¥ä¹Ÿæ˜¯å¾ˆæœ‰ç”¨çš„,尤其是如果你有点迷惑或者与其他人åˆä½œæ—¶ã€‚ -你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验去æä¾›å¤§éƒ¨åˆ†å¯èƒ½çš„ä¿¡æ¯ã€‚ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šå½±å“ä¿æŒå®žéªŒç®€å•的目的 - 你必须通过ç»éªŒæ¥å‘展这ç§è¯„判的能力。 +你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验尽é‡åŽ»æä¾›æœ€å¤šçš„ä¿¡æ¯ã€‚但ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šè®©å®žéªŒä¿æŒç®€å•å˜çš„å›°éš¾ - 你必须通过ç»éªŒæ¥æå‡è¿™ç§åˆ¤æ–­çš„能力。 Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why Estimation is Important.md) diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md index c610027..14e1080 100644 --- a/zh/1-Beginner/README.md +++ b/zh/1-Beginner/README.md @@ -1,16 +1,16 @@ # 1. 入门 - 个人技能 - - [学会Debug](Personal-Skills/01-Learn To Debug.md) - - [如何分离问题debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何去掉一个Error](Personal-Skills/03-How to Remove an Error.md) - - [如何用Logæ¥Debug](Personal-Skills/04-How to Debug Using a Log.md) + - [学会 Debug](Personal-Skills/01-Learn To Debug.md) + - [如何通过分割问题 Debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除一个错误](Personal-Skills/03-How to Remove an Error.md) + - [如何使用日志调试](Personal-Skills/04-How to Debug Using a Log.md) - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How to Understand Performance Problems.md) - [如何解决性能问题](Personal-Skills/06-How to Fix Performance Problems.md) - [如何优化循环](Personal-Skills/07-How to Optimize Loops.md) - - [如何处ç†I/O开销](Personal-Skills/08-How to Deal with IO Expense.md) + - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How to Deal with IO Expense.md) - [如何管ç†å†…å­˜](Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„Bug](Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - [如何学习设计技能](Personal-Skills/11-How to Learn Design Skills.md) - [如何进行实验](Personal-Skills/12-How to Conduct Experiments.md) - 团队技能 @@ -22,6 +22,6 @@ - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How to Work with Poor Code.md) - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How to Use Source Code Control.md) - [如何进行å•元测试](Team-Skills/08-How to Unit Test.md) - - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](Team-Skills/09-Take Breaks when Stumped.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take Breaks when Stumped.md) - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How to Recognize When to Go Home.md) - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How to Deal with Difficult People.md) diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 37e646b..250fac9 100644 --- a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -2,13 +2,13 @@ 为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 -好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件消耗的时间总是被管ç†è€…å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšè¿™äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ç„¶è€Œï¼Œä¸æŽ¥å—这个任务的ä¸å¯èƒ½æ€§æ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚然而,评估这件事情,有很大的错误传达的空间,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地想: +好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…的情况,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地想: > 我估计,如果我确实ç†è§£äº†è¿™ä¸ªé—®é¢˜ï¼Œæˆ‘们在5周内有50%çš„å¯èƒ½å®Œæˆä»»åŠ¡ï¼ˆå¦‚æžœåœ¨æ­¤æœŸé—´æ²¡æœ‰äººå¹²æ‰°æˆ‘ä»¬çš„è¯ï¼‰ã€‚ 真实的å«ä¹‰æ˜¯ï¼š > 我ä¿è¯ä»ŽçŽ°åœ¨å¼€å§‹äº”ä¸ªæ˜ŸæœŸå†…å®Œæˆä»»åŠ¡ã€‚ -这个常è§çš„解释问题需è¦ä½ ä¸“门与你的bosså’Œé¡¾å®¢è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡ä»–们对你æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ +这个常è§çš„解释问题需è¦ä½ ä¸“门与你的 boss å’Œé¡¾å®¢è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡ä»–们对你æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ Next [如何估计编程时间](02-How to Estimate Programming Time.md) diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 6b9c3b8..4126af5 100644 --- a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -2,19 +2,19 @@ 评估需è¦å®žè·µï¼Œä¹Ÿéœ€è¦åŠ³åŠ¨ã€‚å› ä¸ºå®ƒéœ€è¦èŠ±å¦‚æ­¤é•¿çš„æ—¶é—´ä»¥è‡³äºŽè¯„ä¼°è¯„ä¼°çš„æ—¶é—´å¯èƒ½æ˜¯ä¸€ä¸ªå¥½ä¸»æ„ï¼Œå°¤å…¶æ˜¯ä½ è¢«è¦æ±‚去评估一些巨大的事情。 -å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且想è¦å¼€å¿ƒçš„,åœä¸‹æ¥å½“然会让åœä¸‹æ¥çš„事情ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 +å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且是渴望愉悦的,而åœä¸‹æ¥å½“然会让他们ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 -åœä¸‹æ¥æ—¶ï¼Œè€ƒè™‘ä¸€äº›äº‹æƒ…æˆ–è€…é‡æ–°ä¸ºä»»åС釿–°å®šåž‹æˆä¸ºå¯èƒ½ã€‚如果政策压力å…许,这是执行评估的最准确的方å¼ï¼Œå¹¶ä¸”它会产生确实的进度。 +åœä¸‹æ¥æ—¶ï¼Œä½¿å¾—è€ƒè™‘ä¸€äº›äº‹æƒ…æˆ–è€…ä¸ºä»»åŠ¡é‡æ–°å®šåž‹æˆä¸ºå¯èƒ½ã€‚如果政策压力å…许,这是执行评估的最准确的方å¼ï¼Œå¹¶ä¸”它会产生确实的进度。 -在没有时间åšè°ƒæŸ¥çš„æ—¶å€™ï¼Œä½ é¦–先应该éžå¸¸æ¸…晰地建立评估的å«ä¹‰ã€‚é¦–å…ˆé‡æ–°é˜è¿°è¦è¯„估的内容,还有你编写的评估的最åŽéƒ¨åˆ†ã€‚釿–°æž„建任务为进度化的更å°çš„å­ä»»åŠ¡ï¼Œç›´åˆ°æ¯ä¸ªå°ä»»åŠ¡éœ€è¦çš„æ—¶é—´ä¸è¶…è¿‡ä¸€å¤©ï¼ˆç†æƒ³æƒ…况是æ¯ä¸ªä»»åŠ¡çš„é•¿åº¦æœ€å¤šä¸ºä¸€å¤©ï¼‰ï¼Œä»¥æ­¤å‡†å¤‡ä¸€ä¸ªå†™å¥½çš„è¯„ä¼°è®¡åˆ’ã€‚æœ€é‡è¦çš„事情是ä¸è¦æ¼æŽ‰ä»»ä½•事情。例如,文档,测试,规划的时间,与其他å°ç»„交æµçš„æ—¶é—´ï¼Œè¿˜æœ‰åº¦å‡æ—¶é—´ï¼Œè¿™äº›éƒ½æ˜¯å¾ˆé‡è¦çš„。如果你æ¯å¤©éƒ½è¦èŠ±æ—¶é—´å’Œä¸€äº›å‚»é€¼äº¤æµï¼Œåœ¨è¯„估里为这件事情划一个明确的时间界é™ã€‚这能让你的boss对于你将è¦èŠ±è´¹çš„æœ€å°‘æ—¶é—´æœ‰äº†ä¸€ä¸ªè®¤è¯†ï¼Œå¹¶ä¸”å¯èƒ½ç»™ä½ æ›´å¤šçš„æ—¶é—´ã€‚ +在没有时间åšè°ƒæŸ¥çš„æ—¶å€™ï¼Œä½ é¦–先应该éžå¸¸æ¸…晰地建立评估的å«ä¹‰ã€‚é¦–å…ˆé‡æ–°é˜è¿°è¦è¯„估的内容和你编写的评估的最åŽéƒ¨åˆ†ã€‚在你准备编写评估的时候应该把这项任务分解为一个个更å°çš„å¾ªåºæ¸è¿›çš„任务,并且使æ¯ä¸ªå°ä»»åŠ¡éœ€è¦çš„æ—¶é—´ä¸è¶…è¿‡ä¸€å¤©ï¼ˆç†æƒ³æƒ…况是æ¯ä¸ªä»»åŠ¡çš„é•¿åº¦æœ€å¤šä¸ºä¸€å¤©ï¼‰ã€‚æœ€é‡è¦çš„事情是ä¸è¦æ¼æŽ‰ä»»ä½•事情。例如,文档,测试,规划的时间,与其他å°ç»„交æµçš„æ—¶é—´ï¼Œè¿˜æœ‰åº¦å‡æ—¶é—´ï¼Œè¿™äº›éƒ½æ˜¯å¾ˆé‡è¦çš„。如果你æ¯å¤©éƒ½è¦èŠ±æ—¶é—´å’Œä¸€äº›å‚»é€¼äº¤æµï¼Œåœ¨è¯„估里为这件事情划一个明确的时间界é™ã€‚这能让你的boss对于你将è¦èŠ±è´¹çš„æœ€å°‘æ—¶é—´æœ‰äº†ä¸€ä¸ªè®¤è¯†ï¼Œå¹¶ä¸”å¯èƒ½ç»™ä½ æ›´å¤šçš„æ—¶é—´ã€‚ -我认识一些会éšå¼åœ°å¡«å……评估时间的好的程åºå‘˜ï¼Œä½†æˆ‘推èä½ ä¸è¦è¿™æ ·åšã€‚填充的一个结果是对你的信任å¯èƒ½è¢«è€—尽。例如,一个工程师å¯èƒ½ä¸ºä¸€ä¸ªå°†è¦èŠ±è´¹ä¸€å¤©çš„å·¥ä½œè¯„ä¼°ä¸ºä¸‰å¤©ã€‚è¿™ä¸ªå·¥ç¨‹å¸ˆå¯èƒ½è®¡åˆ’花两天去为代ç å†™æ–‡æ¡£ï¼Œæˆ–者花两天去åšä¸€äº›å…¶ä»–æœ‰ç”¨çš„å·¥ç¨‹ã€‚ä½†å½“ä»»åŠ¡åœ¨ä¸€å¤©å†…å®Œæˆæ—¶ï¼Œå¦‚果它在那天暴露出æ¥çš„è¯ï¼Œè¿™æ˜¯å¯ä»¥å¯Ÿè§‰çš„ï¼Œå¹¶ä¸”æ¾æ‡ˆæˆ–高估的表现会出现。为你确实è¦åšçš„事情åšåˆé€‚的剖æžè¦å¥½å¾—多。如果写文档需è¦èб䏤å€äºŽç¼–程的时间,并且评估的结果就是这样的,让这对管ç†è€…å¯è§å°±èƒ½å¾—到巨大的好处。 +我认识一些会éšå¼åœ°å¡«å……评估时间的好的程åºå‘˜ï¼Œä½†æˆ‘推èä½ ä¸è¦è¿™æ ·åšã€‚填充的一个结果是你å¯èƒ½ä¼šè€—尽别人对你的信任。例如,一个工程师å¯èƒ½ä¸ºä¸€ä¸ªå°†è¦èŠ±è´¹ä¸€å¤©çš„å·¥ä½œè¯„ä¼°ä¸ºä¸‰å¤©ã€‚è¿™ä¸ªå·¥ç¨‹å¸ˆå¯èƒ½è®¡åˆ’花两天去为代ç å†™æ–‡æ¡£ï¼Œæˆ–者花两天去åšä¸€äº›å…¶ä»–æœ‰ç”¨çš„å·¥ç¨‹ã€‚ä½†å½“ä»»åŠ¡åœ¨ä¸€å¤©å†…å®Œæˆæ—¶ï¼Œå¦‚果它在那天暴露出æ¥çš„è¯ï¼Œè¿™æ˜¯å¯ä»¥å¯Ÿè§‰çš„ï¼Œå¹¶ä¸”æ¾æ‡ˆæˆ–高估的表现会出现。为你确实è¦åšçš„事情åšåˆé€‚的剖æžè¦å¥½å¾—多。如果写文档需è¦èб䏤å€äºŽç¼–程的时间,并且评估的结果就是这样的,让这对管ç†è€…å¯è§å°±èƒ½å¾—到巨大的好处。 -相å,显å¼å¡«å……。如果一个任务å¯èƒ½èŠ±ä¸€å¤©ï¼Œä½†å¦‚æžœä½ çš„æ–¹æ³•æ²¡æœ‰ç”Ÿæ•ˆï¼Œå¯èƒ½èбå天 - 用æŸç§æ–¹å¼åœ¨ä½ çš„评估里记下这个情况,å¦åˆ™ï¼Œè‡³å°‘为这个å¯èƒ½æ€§ï¼Œè¯„估一个æƒé‡è®¡ç®—å¯èƒ½çš„æ—¶é—´ã€‚任何你å¯ä»¥è¯†åˆ«å’Œè¿›è¡Œè¯„估的风险因素应该在时间表里被体现。一个人ä¸å¤ªå¯èƒ½åœ¨ç»™å®šçš„任何星期都生病。但一个有很多工程师的大项目会需è¦ä¸€äº›ç–¾ç—…æ—¶é—´ï¼Œè¿˜æœ‰ä¼‘å‡æ—¶é—´ã€‚或者,强制的公å¸èŒƒå›´çš„培训研讨会的å¯èƒ½æ€§ï¼Ÿå¦‚果这å¯ä»¥é¢„估,也把它算进æ¥ã€‚当然,还有一些未知的未知,或者 [unk-unk](../../4-Glossary.md) 。Unk-unk在定义上是ä¸èƒ½è¢«ç‹¬ç«‹è¯„估的。你å¯ä»¥å°è¯•为所有unk-unk创建一个全局的界线,或者用你与你的boss交æµå¥½çš„å…¶ä»–æ–¹å¼å޻处ç†å®ƒä»¬ã€‚然而,你ä¸èƒ½è®©ä½ çš„bosså¿˜è®°å®ƒä»¬çš„å­˜åœ¨ã€‚åœ¨æŠŠè¯„ä¼°å˜æˆæ—¶é—´è¡¨çš„过程中,把它们é—忘是超级容易的。 +相å,显å¼å¡«å……。如果一个任务å¯èƒ½èŠ±ä¸€å¤©ï¼Œä½†å¦‚æžœä½ çš„æ–¹æ³•æ²¡æœ‰ç”Ÿæ•ˆï¼Œå¯èƒ½èбå天 - 用æŸç§æ–¹å¼åœ¨ä½ çš„评估里记下这个情况,å¦åˆ™ï¼Œè‡³å°‘为这个å¯èƒ½æ€§ï¼Œè¯„估一个æƒé‡è®¡ç®—å¯èƒ½çš„æ—¶é—´ã€‚任何你å¯ä»¥è¯†åˆ«å’Œè¿›è¡Œè¯„估的风险因素应该在时间表里被体现。一个人ä¸å¤ªå¯èƒ½åœ¨ç»™å®šçš„任何星期都生病。但一个有很多工程师的大项目å¯èƒ½ä¼šæœ‰ä¸€äº›ç–¾ç—…æ—¶é—´ï¼Œè¿˜æœ‰ä¼‘å‡æ—¶é—´ã€‚或者,是å¦ä¼šæœ‰å…¬å¸å†…部的强制培训研讨会的å¯èƒ½æ€§å‘¢ï¼Ÿå¦‚果这å¯ä»¥é¢„估,也把它算进æ¥ã€‚当然,还有一些未知的未知,或者 [unk-unk](../../4-Glossary.md) 。Unk-unk 在定义上是ä¸èƒ½è¢«ç‹¬ç«‹è¯„估的。你å¯ä»¥å°è¯•为所有 unk-unk 创建一个全局的界线,或者用你与你的 boss 交æµå¥½çš„å…¶ä»–æ–¹å¼å޻处ç†å®ƒä»¬ã€‚然而,你ä¸èƒ½è®©ä½ çš„ boss å¿˜è®°å®ƒä»¬çš„å­˜åœ¨ã€‚åœ¨æŠŠè¯„ä¼°å˜æˆæ—¶é—´è¡¨çš„过程中,把它们é—忘是超级容易的。 -在一个团队环境里,你应该让任务的执行者去åšè¿™ç§è¯„估,而且你们应该在团队范围内对评估的结果å–得一致。人与人在技术,ç»éªŒï¼Œå‡†å¤‡å’Œä¿¡å¿ƒä¸Šéƒ½æœ‰å¾ˆå¤šçš„ä¸åŒã€‚当一个牛逼的程åºå‘˜ä¸ºä»–自己评估了时间,然åŽä¸€äº›å¼±ä¸€ç‚¹çš„程åºå‘˜è¢«è¿™ç§è¯„ä¼°çº¦æŸæ—¶ï¼Œç¾éš¾é™ä¸´äº†ã€‚整个团队在一个一行一行的细致的评估计划上å–得的一致,é˜è¿°äº†å›¢é˜Ÿçš„ç†è§£ï¼Œä»¥åŠå…许在策略上对资æºçš„釿–°åˆ†é…的机会(比如,把负担从弱一点的团队æˆå‘˜é‚£é‡Œç§»åˆ°å¼ºä¸€ç‚¹çš„æˆå‘˜é‚£é‡Œï¼‰ã€‚ +在一个团队环境里,你应该让任务的执行者去åšè¿™ç§è¯„估,而且你们应该在团队范围内对评估的结果达æˆä¸€è‡´ã€‚人与人在技术,ç»éªŒï¼Œå‡†å¤‡å’Œä¿¡å¿ƒä¸Šéƒ½æœ‰å¾ˆå¤šçš„ä¸åŒã€‚当一个牛逼的程åºå‘˜ä¸ºä»–自己评估了时间,然åŽä¸€äº›å¼±ä¸€ç‚¹çš„程åºå‘˜è¢«è¿™ç§è¯„ä¼°çº¦æŸæ—¶ï¼Œç¾éš¾é™ä¸´äº†ã€‚整个团队在一个一行一行的细致的评估计划上å–得的一致,é˜è¿°äº†å›¢é˜Ÿçš„ç†è§£ï¼Œä»¥åŠå…许在策略上对资æºçš„釿–°åˆ†é…的机会(比如,把负担从弱一点的团队æˆå‘˜é‚£é‡Œç§»åˆ°å¼ºä¸€ç‚¹çš„æˆå‘˜é‚£é‡Œï¼‰ã€‚ -如果有ä¸èƒ½è¯„估的大风险,你的责任是足够有力地é˜è¿°ä»¥è‡³äºŽä½ çš„管ç†è€…ä¸ä¼šåœ¨è¿™ä¸ªé—®é¢˜ä¸Šåšæ‰¿è¯ºï¼Œåœ¨é£Žé™©å‘生时也ä¸ä¼šå˜å¾—çª˜è¿«ã€‚è¿™ç§æƒ…况下,任何需è¦çš„事情都有希望被执行æ¥å‡å°è¿™ä¸ªé£Žé™©ã€‚ +如果有ä¸èƒ½è¯„ä¼°çš„å¤§é£Žé™©ï¼Œä½ åº”è¯¥æ— è®ºå¦‚ä½•éƒ½è¦æå‡ºæ¥ï¼Œè¿™æ˜¯ä½ çš„责任,这让æ‰èƒ½è®©ç®¡ç†è€…ä¸ä¼šåœ¨è¿™ä¸ªé—®é¢˜ä¸Šåšæ‰¿è¯ºï¼Œä»¥å…在风险å‘生时让管ç†è€…éš¾å ªã€‚è¿™ç§æƒ…况下,任何需è¦çš„事情都有希望被执行æ¥å‡å°è¿™ä¸ªé£Žé™©ã€‚ 如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md index f291976..72928aa 100644 --- a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -4,16 +4,16 @@ 如果你需è¦å®¢è§‚的而且容易辨认的*关于具体事物*的信æ¯ï¼Œä¾‹å¦‚一个软件的最新补ä¸ç‰ˆæœ¬ï¼Œå¯ä»¥åœ¨Internetæœç´¢ï¼Œç¤¼è²Œçš„询问很多的人,或者å‘起一个讨论组。ä¸è¦åœ¨ç½‘上æœç´¢ä»»ä½•带有观点或主观解释的东西:能够抵达真相的概率太低了。 -如果你需è¦â€œä¸€äº›ä¸»è§‚的普é知识â€ï¼Œäººä»¬å¯¹è¿™äº›ä¸œè¥¿å·²æœ‰çš„æ€è€ƒåŽ†å²ï¼Œé‚£å°±å޻图书馆å§ã€‚ä¾‹å¦‚ï¼Œå­¦ä¹ æ•°å­¦æˆ–è˜‘è‡æˆ–神秘的东西,去图书馆å§ã€‚ +如果你需è¦â€œä¸€äº›ä¸»è§‚的普é知识â€ï¼Œäººä»¬å¯¹è¿™äº›ä¸œè¥¿å·²æœ‰çš„æ€è€ƒåŽ†å²ï¼Œé‚£å°±å޻图书馆å§ã€‚例如,想è¦äº†è§£æ•°å­¦ï¼Œè˜‘è‡æˆ–ç€ç¥žç§˜ä¸»ä¹‰ï¼Œå°±å޻图书馆å§ã€‚ 如果你需è¦çŸ¥é“*如何åšä¸€äº›ç碎的事情*,找两三本关于这个主题的书,仔细阅读。你å¯ä»¥ä»Žç½‘络上学到如何åšå¥½è¿™äº›ç碎的事情,比如安装一个软件包。你甚至å¯ä»¥å­¦åˆ°ä¸€äº›é‡è¦çš„东西,例如好的编程技术,但相比读一本纸质书的相关部分,你很容易花更多时间在æœç´¢å’Œå¯¹ç»“果排åºï¼Œä»¥åŠè¯„估结果的æƒå¨æ€§ã€‚ 如果你需è¦*å¯èƒ½æ²¡æœ‰äººçŸ¥é“的信æ¯*,例如,“这个新å“ç‰Œçš„è½¯ä»¶åœ¨æµ·é‡æ•°æ®çš„æƒ…况下能工作å—â€ï¼Œä½ ä»ç„¶å¿…须在网络和图书馆里æœç´¢ã€‚在这些选项都完全竭尽åŽï¼Œä½ å¯èƒ½éœ€è¦è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥æžæ¸…楚这个问题。 -如果你需è¦ä¸€äº›è€ƒè™‘了æŸäº›ç‰¹æ®ŠçŽ¯å¢ƒçš„è§‚ç‚¹æˆ–ä¼°å€¼ï¼Œå’Œä¸€ä¸ªä¸“å®¶èŠèŠã€‚例如,如果你想è¦çŸ¥é“用Lisp构建一个现代数æ®åº“管ç†ç³»ç»Ÿæ˜¯å¦æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,你应该和一个Lisp专家和一个数æ®åº“专家èŠä¸€èŠã€‚ +如果你需è¦ä¸€äº›è€ƒè™‘了æŸäº›ç‰¹æ®ŠçŽ¯å¢ƒçš„è§‚ç‚¹æˆ–ä¼°å€¼ï¼Œå’Œä¸€ä¸ªä¸“å®¶èŠèŠã€‚例如,如果你想è¦çŸ¥é“用 Lisp 构建一个现代数æ®åº“管ç†ç³»ç»Ÿæ˜¯å¦æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,你应该和一个 Lisp 专家和一个数æ®åº“专家èŠä¸€èŠã€‚ 如果你想è¦çŸ¥é“*它具体是怎样的*,比如一个还未å‘布的在一个特定程åºä¸Šæ›´å¿«çš„算法,跟一些在这个领域工作的人èŠèŠã€‚ -如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且已ç»å®Œæˆäº†ä½ çš„ä»»åŠ¡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒèµžåŒçš„æ„è§ï¼Œå对的æ„è§ï¼Œä½†å¯èƒ½ä»ç„¶æœ‰è¿Ÿç–‘。你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 +如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且åšäº†æ‰€æœ‰è¯¥åšçš„å‡†å¤‡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒåŒ…括好的和å的,但你ä»å¯èƒ½çŠ¹è±«ä¸å†³ã€‚你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How to Utilize People as Information Sources.md) diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index cc3cbf1..51ef771 100644 --- a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -2,7 +2,7 @@ å°Šé‡å…¶ä»–æ¯ä¸ªäººçš„æ—¶é—´ï¼Œä¸Žä½ çš„æ—¶é—´ç›¸å¹³è¡¡ã€‚问别人问题比得到答案能获得更多。人们会从你的存在和倾å¬ç‰¹å®šçš„问题从你身上学到东西。你也å¯ä»¥ç”¨åŒæ ·çš„æ–¹å¼ä»Žåˆ«äººèº«ä¸Šå­¦ä¹ åˆ°ä¸œè¥¿ï¼Œä½ å¯èƒ½å­¦åˆ°ä½ æ­£åœ¨æœå¯»çš„东西的答案。这通常比你的问题更加é‡è¦å¾—多。 -然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的boss交谈而éžå’Œä½ bossçš„boss交谈,但你å¶å°”也å¯ä»¥å’Œä½ bossçš„boss交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ +然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的 boss 交谈而éžå’Œä½  boss çš„ boss 交谈,但你å¶å°”也å¯ä»¥å’Œä½  boss çš„ boss 交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ 基本的规则是,æ¯ä¸ªä¸Žä½ äº¤è°ˆçš„人都能ç¨å¾®å—益,他们与你èŠå¾—更多,他们能获得的收益越少。你的应该给他们æä¾›è¿™ç§å¥½å¤„,还有得到与他们交æµçš„好处,平衡这ç§å¥½å¤„与花费的时间。 @@ -10,6 +10,6 @@ ä¸€ä¸ªå¥‡æ€ªçš„ä¾‹å­æ˜¯æš‘期实习生。一个处于高技术å«é‡ä½ç½®çš„æš‘期实习生ä¸èƒ½è¢«æœŸæœ›åŽ»å®Œæˆå¤ªå¤šä¸œè¥¿ï¼›ä»–们å¯èƒ½ä¼šæŠŠæ¯ä¸ªäººçº ç¼ åˆ°åœ°ç‹±ã€‚但为什么这是被å…许的呢?因为被纠缠的人从实习生身上å¯ä»¥æŽ¥æ”¶åˆ°ä¸€äº›é‡è¦çš„东西。他们得到了一点炫耀的机会,他们å¯èƒ½æœ‰æœºä¼šåŽ»å¬åˆ°ä¸€äº›æ–°çš„æ€æƒ³ï¼Œä»–ä»¬æœ‰æœºä¼šå¯ä»¥ä»Žä¸åŒçš„角度去看问题。他们å¯èƒ½ä¼šå°è¯•æ‹›è˜è¿™ä¸ªå®žä¹ ç”Ÿï¼Œä½†å³ä½¿ä¸æ˜¯è¿™æ ·ï¼Œä»–们也获得了很多。 -如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但我认为å°çš„努力å¯ä»¥åœ¨é”€å”®åŽ‹åŠ›ä¸Šäº§ç”Ÿå¥½çš„å½±å“。 +如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但å´è®©æˆ‘通过这么å°çš„付出就对公å¸çš„é”€å”®é˜Ÿä¼æœ‰äº†æ·±åˆ»çš„å°è±¡ã€‚ Next [如何优雅地写文档](05-How to Document Wisely.md) diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md index 889b3c8..b17d1d6 100644 --- a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,6 +1,6 @@ # å¦‚ä½•ç¿æ™ºåœ°å†™æ–‡æ¡£ -人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥ä¸€ç‚¹å¥½çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 +人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥å¥½ä¸€ç‚¹çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 没有其他事情比精确估计 æŠŠå¥½çš„æ–‡æ¡£è½¬ä¸ºæ”¾æ¾æ–‡æ¡£è¦æ±‚的估计 æ›´ä¸ºæœ‰æ•ˆçŽ‡ã€‚çœŸç›¸æ˜¯å†·é…·è€Œè‰°éš¾çš„ï¼šæ–‡æ¡£ï¼Œå°±åƒæµ‹è¯•,会花比开å‘代ç å¤šå‡ å€çš„æ—¶é—´ã€‚ diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index 0042b75..a1d1f62 100644 --- a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -6,6 +6,6 @@ 在任何对你没有编写的代ç çš„评估中,代ç çš„è´¨é‡ä¼šå½±å“你对风险问题的认识以åŠä¸€äº›æœªçŸ¥çš„事情。 -铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡çš„å¥½å¤„ã€‚ç‰¹åˆ«çš„ï¼Œä½ å¯ä»¥å°è¯•隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 +铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡æ‰€å¸¦æ¥çš„好处。特别的,你å¯ä»¥å°è¯•去隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 Next [如何使用æºä»£ç æŽ§åˆ¶](07-How to Use Source Code Control.md) diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index c41a159..2cbbf50 100644 --- a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -4,6 +4,6 @@ 我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 -使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。æäº¤é”™è¯¯é™ä½Žä½ é˜Ÿå‹çš„速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ +使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。因æäº¤é”™è¯¯çš„代ç è€Œé™ä½Žä½ é˜Ÿå‹çš„å¼€å‘速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ Next [如何进行å•元测试](08-How to Unit Test.md) diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md index 63bc314..11aa2b7 100644 --- a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,9 +1,9 @@ # 如何进行å•元测试 -å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该被如何测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ +å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该如何被测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ -无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 +无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现 bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ -Next [没有æ€è·¯æ—¶ä¼‘æ¯ä¸€ä¸‹](09-Take Breaks when Stumped.md) +Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take Breaks when Stumped.md) diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index c4af4c3..1f69cf5 100644 --- a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ -# 没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ +# 毫无头绪?,休æ¯ä¸€ä¸‹ -没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¼šç”Ÿæ•ˆã€‚ +没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How to Recognize When to Go Home.md) diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index e7c8cf0..ce3b4e5 100644 --- a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -8,7 +8,7 @@ - 学会拒ç»ï¼Œåœ¨å¿…è¦æ—¶ä½œä¸ºä¸€ä¸ªå›¢é˜Ÿæ‹’ç»ï¼Œå¹¶ä¸” - 如果必须的è¯ï¼Œé€€å‡ºå›¢é˜Ÿ -大多数程åºå‘˜æ˜¯å¥½çš„程åºå‘˜ï¼Œå¥½çš„程åºå‘˜æƒ³è¦åšå¾ˆå¤šä¸œè¥¿ã€‚为了åšåˆ°è¿™ç‚¹ï¼Œä»–们需è¦é«˜æ•ˆç®¡ç†ä»–们的时间。从一个问题中兴奋和深陷其中都有一定é‡çš„å¿ƒç†æƒ¯æ€§ã€‚许多程åºå‘˜å‘现他们在长久ä¸è¢«æ‰“扰的一段时间兴奋和集中注æ„力åŽå·¥ä½œå¾—最好。然而,人们必须ç¡è§‰ï¼Œå¹¶ä¸”有其他的责任。æ¯ä¸ªäººéœ€è¦æ‰¾åˆ°ä¸€ç§æ–¹å¼åŽ»æ»¡è¶³ä»–ä»¬çš„ç”Ÿç‰©èŠ‚å¥å’Œå·¥ä½œèŠ‚å¥ã€‚æ¯ä¸ªç¨‹åºå‘˜éœ€è¦åšä»»ä½•å¿…é¡»çš„äº‹æƒ…æ¥æä¾›é«˜æ•ˆçš„å·¥ä½œå‘¨æœŸï¼Œæ¯”å¦‚åªå‚加的æŸäº›æœ€å…³é”®çš„会议,以此ä¿ç•™ä¸€å®šçš„æ—¶é—´ã€‚ +大多数程åºå‘˜æ˜¯å¥½çš„程åºå‘˜ï¼Œå¥½çš„程åºå‘˜æƒ³è¦åšå¾ˆå¤šä¸œè¥¿ã€‚为了åšåˆ°è¿™ç‚¹ï¼Œä»–们需è¦é«˜æ•ˆç®¡ç†ä»–们的时间。从一个问题中兴奋和深陷其中都有一定é‡çš„å¿ƒç†æƒ¯æ€§ã€‚许多程åºå‘˜å‘现他们在长久ä¸è¢«æ‰“æ‰°çš„ä¸€æ®µæ—¶é—´é‡Œèƒ½å¤Ÿä¿æŒå…´å¥‹å’Œé›†ä¸­æ³¨æ„力,这让他们能最好地工作。然而,人们必须ç¡è§‰ï¼Œå¹¶ä¸”有其他的责任。æ¯ä¸ªäººéœ€è¦æ‰¾åˆ°ä¸€ç§æ–¹å¼åŽ»æ»¡è¶³ä»–ä»¬çš„ç”Ÿç‰©èŠ‚å¥å’Œå·¥ä½œèŠ‚å¥ã€‚æ¯ä¸ªç¨‹åºå‘˜éœ€è¦åšä»»ä½•å¿…é¡»çš„äº‹æƒ…æ¥æä¾›é«˜æ•ˆçš„å·¥ä½œå‘¨æœŸï¼Œæ¯”å¦‚åªå‚加的æŸäº›æœ€å…³é”®çš„会议,以此ä¿ç•™ä¸€å®šçš„æ—¶é—´ã€‚ 因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 diff --git a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index 799fb28..e15794b 100644 --- a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -4,12 +4,12 @@ åœ¨è¿™æ–¹é¢æ²¡æœ‰ä»€ä¹ˆç»éªŒ,或者先å‰ç”Ÿæ´»çš„行为模å¼åœ¨å·¥ä½œåœºåˆçš„ç»éªŒä¸èƒ½é€‚用的一些程åºå‘˜,对这ç§äº‹æƒ…会éžå¸¸å›°æ‰°ã€‚ä¸å¥½ç›¸å¤„的人ç»å¸¸ä¹ æƒ¯äºŽæ‹’ç»ï¼Œå¹¶ä¸”与他人相比,他们更ä¸å®¹æ˜“å—社交压力所影å“。关键是åˆé€‚地尊é‡ä»–们,而éžä½ å¯èƒ½æƒ³åšçš„事,但ä¸è¦å……分地满足他们想è¦çš„(译者注:他们想è¦çš„往往是过分的)。 -程åºå‘˜å¿…须作为一个团队一起工作。当分歧出现时,它必须用æŸç§æ–¹å¼è§£å†³ï¼Œå®ƒä¸èƒ½è¢«é•¿æ—¶é—´æŒ‚起。ä¸å¥½ç›¸å¤„的人通常是æžåº¦èªæ˜Žçš„,并且有一些很有用的æ„è§å¯ä»¥å‘表。ä¸å¸¦å¯¹è¿™ä¸ªäººçš„åè§ï¼Œå€¾å¬å¹¶ç†è§£ä¸å¥½ç›¸å¤„的人是éžå¸¸è‡³å…³é‡è¦çš„。失败的交æµé€šå¸¸æ˜¯åˆ†æ­§çš„基础,但它有时候å¯ä»¥è¢«å·¨å¤§çš„è€å¿ƒç§»é™¤ã€‚å°è¯•冷é™è¯šæ³åœ°ä¿æŒäº¤æµï¼Œå¹¶ä¸”䏿ޥå—任何å¯èƒ½äº§ç”Ÿæ›´å¤§çŸ›ç›¾çš„引诱。在一个åˆç†çš„å°è¯•ç†è§£çš„周期åŽï¼Œå†åšå†³å®šã€‚ +程åºå‘˜å¿…须作为一个团队一起工作。当分歧出现时,它必须用æŸç§æ–¹å¼è§£å†³ï¼Œå®ƒä¸èƒ½è¢«é•¿æ—¶é—´æŒ‚起。ä¸å¥½ç›¸å¤„的人通常是æžåº¦èªæ˜Žçš„,并且有一些很有用的æ„è§å¯ä»¥å‘表。ä¸å¸¦å¯¹è¿™ä¸ªäººçš„åè§ï¼Œå€¾å¬å¹¶ç†è§£ä¸å¥½ç›¸å¤„的人是至关é‡è¦çš„。失败的交æµé€šå¸¸æ˜¯åˆ†æ­§çš„基础,但它有时候å¯ä»¥è¢«å·¨å¤§çš„è€å¿ƒç§»é™¤ã€‚å°è¯•冷é™è¯šæ³åœ°ä¿æŒäº¤æµï¼Œå¹¶ä¸”䏿ޥå—任何å¯èƒ½äº§ç”Ÿæ›´å¤§çŸ›ç›¾çš„引诱。在一个åˆç†çš„å°è¯•ç†è§£çš„周期åŽï¼Œå†åšå†³å®šã€‚ ä¸è¦è®©ä¸€ä¸ªæ¶éœ¸å¼ºè¿«ä½ åšä½ æ‰€ä¸åŒæ„的事情。如果你是è€å¤§ï¼Œåšä½ è®¤ä¸ºæœ€å¥½çš„事情。ä¸è¦ä¸ºä»»ä½•个人因素åšå‡ºå†³å®šï¼Œå¹¶æ—¶åˆ»å‡†å¤‡å¥½ä¸ºä½ çš„决定åšå‡ºè§£é‡Šã€‚如果你是一个有ç€ä¸å¥½ç›¸å¤„çš„åŒäº‹çš„团队æˆå‘˜ï¼Œä¸è¦è®©è€å¤§çš„决定有任何个人影å“。如果没有按你的想法å‘展,全身心地按(已æˆäº‹å®žçš„)å¦ä¸€ç§æ–¹æ³•去åšã€‚ ä¸å¥½ç›¸å¤„的人能够改å˜ä¸Žè¿›æ­¥ã€‚我曾亲眼目ç¹è¿™ç§æƒ…况,但这很稀少。然而,æ¯ä¸ªäººéƒ½æœ‰æš‚æ—¶çš„é«˜å…´ä¸Žå¤±è½æƒ…绪。 -有这样一个,æ¯ä¸ªç¨‹åºå‘˜é™¤äº†ç‰¹æ®Šçš„è€å¤§éƒ½ä¼šé¢å¯¹çš„æŒ‘战是:让ä¸å¥½ç›¸å¤„çš„äººä¿æŒå®Œå…¨çš„忙碌。他们比别人更倾å‘于枯燥的工作,并且更能被动地å¿å—。 +æ¯ä¸ªç¨‹åºå‘˜ä½†å°¤å…¶æ˜¯é¢†å¯¼éƒ½ä¼šé¢ä¸´è¿™æ ·ä¸€ä¸ªæŒ‘战:让ä¸å¥½ç›¸å¤„çš„äººä¿æŒå®Œå…¨çš„忙碌。他们比别人更倾å‘于枯燥的工作,并且更能被动地å¿å—。 Next [进阶技能](../../2-Intermediate) diff --git a/zh/README.md b/zh/README.md index 75fac9f..79718ee 100644 --- a/zh/README.md +++ b/zh/README.md @@ -14,11 +14,11 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens ## 引言   åšä¸€ä¸ªå¥½çš„程åºå‘˜æ˜¯å›°éš¾è€Œé«˜å°šçš„。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程是é‡è¦çš„,而且需è¦å·¨å¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但与好的程åºå‘˜æž„建一个让自己所负责的客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„的软件系统åšçš„é‚£äº›äº‹ç›¸æ¯”ï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶å¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 -  这是éžå¸¸ä¸»è§‚的,所以,这篇文章注定是个人的并且一定程度上有点武断。我尽é‡å†™ä¸€äº›ä¸€ä¸ªç¨‹åºå‘˜åœ¨ta的工作中éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中是如此的普é以至于我(说的)å¯èƒ½çœ‹èµ·æ¥æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 +  这是éžå¸¸ä¸»è§‚的,所以,这篇文章注定是个人化的并且一定程度上有点武断。我尽é‡å†™ä¸€äº›ä¸€ä¸ªç¨‹åºå‘˜åœ¨ ta 的工作中éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中是如此的普é以至于我(说的)å¯èƒ½çœ‹èµ·æ¥æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 -  编程是在课程上教授的。 那些著作: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识)以åŠåšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者此时,你当然也应该读一读Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 +  编程是在课程上教授的。 那些著作: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识)以åŠåšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者此时,你当然也应该读一读 Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 -  在这篇文章里,bossè¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œé™¤äº†ä¸€äº›è¯­å¢ƒï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚ +  在这篇文章里,boss è¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œé™¤äº†ä¸€äº›è¯­å¢ƒï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚   欢迎æ¥åˆ°è¿™ä¸ªç¾¤ä½“。 @@ -26,16 +26,16 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens 1. [入门](1-Beginner) - 个人技能 - - [学会Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [如何分离问题debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [如何用Logæ¥Debug](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [如何使用日志调试](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [如何处ç†I/O开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - 团队技能 @@ -47,7 +47,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) 2. [进阶](2-Intermediate) @@ -61,26 +61,26 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [é‡è¦çš„工具](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) - 团队技能 - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [如何直言ä¸èµžåŒä»¥åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) - 评判 - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [如何知é“何时实施昂贵的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) 3. [高级](3-Advanced) - 技术评判 - - [如何从ä¸å¯èƒ½çš„事情中找到困难的地方](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) - 机智地妥å @@ -90,20 +90,19 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - æœåŠ¡ä½ çš„å›¢é˜Ÿ - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何从你的åŒä¼´èº«ä¸ŠèŽ·å¾—æœ€å¤§æ”¶ç›Š](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何分割问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [如何让你的队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [如何高效交æµ](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [å¦‚ä½•æŠŠåˆ«äººä¸æƒ³å¬çš„è¯è¯´ç»™ä»–们å¬](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) -6. [附录 C - 贡献 (至January 2016)](7-Contributions.md) +6. [附录 C - 贡献 (至2016å¹´1月)](7-Contributions.md) Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. - From c9f2b8ded3a557459b973926656087036df6b241 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Tue, 29 Mar 2016 22:24:44 +0800 Subject: [PATCH 049/149] Add declaration for Chinese version fix Direct developers to make pull request when they when to fix Chinese version. --- zh/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zh/README.md b/zh/README.md index 75fac9f..6753dc1 100644 --- a/zh/README.md +++ b/zh/README.md @@ -9,6 +9,8 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens 原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) +如果您希望改进这份中文翻译,请å‘这个[分支](https://github.com/ahangchen/HowToBeAProgrammer)æäº¤Pull request. + æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 ## 引言 From af636ffff1cdcea26635da9cafc85184163ce8e0 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Tue, 29 Mar 2016 16:27:56 +0100 Subject: [PATCH 050/149] Added details on providing translations of guide --- en/7-Contributions.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/en/7-Contributions.md b/en/7-Contributions.md index 52892e9..ef578cf 100644 --- a/en/7-Contributions.md +++ b/en/7-Contributions.md @@ -10,6 +10,15 @@ There are a number of ways to contribute to "How to be a Programmer". - Identifying typos or other issues in sections - Contributing additional links to resources for sections - General suggestions for improving the project +- Provide translations of the guide + +## Translations + +Currently this guide has been translated from English into the following languages: + +- [Chinese](https://github.com/ahangchen/HowToBeAProgrammer) by [ahangchen](https://github.com/ahangchen) + +In order to verify the quality of the translations, we ask that any changes to an existing translation be submitted as a pull request against that version of the repository (linked above), which will then be submitted to the [master repository](https://github.com/braydie/HowToBeAProgrammer). ## Contributors From 085ba149b4dac63807ea5de83845155b23d54842 Mon Sep 17 00:00:00 2001 From: mmarica Date: Tue, 29 Mar 2016 21:28:32 +0300 Subject: [PATCH 051/149] Update 02-How to Debug by Splitting the Problem Space.md Fixed a typo --- .../02-How to Debug by Splitting the Problem Space.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index c536c89..8301bde 100644 --- a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -6,7 +6,7 @@ Suppose, for example, you created a program that should do ten things in a seque Can you design an experiment to see which thing it crashed on? Sure. You can use a debugger or we can add printline statements (or the equivalent in whatever language you are working in) after #8 and #9. When we run it again, our mystery will be smaller, such as ‘It crashed on thing #9.’ I find that bearing in mind exactly what the mystery is at any point in time helps keep one focused. When several people are working together under pressure on a problem it is easy to forget what the most important mystery is. -The key to divide and conquer as a debugging technique is the same as it is for algorithm design: as long as you do a good job splitting the mystery in the middle, you won't have to split it too many times, and you will be debugging quickly. But what is the middle of a mystery? There is where true creativity and experience comes in. +The key to divide and conquer as a debugging technique is the same as it is for algorithm design: as long as you do a good job splitting the mystery in the middle, you won't have to split it too many times, and you will be debugging quickly. But what is the middle of a mystery? This is where true creativity and experience comes in. To a true beginner, the space of all possible errors looks like every line in the source code. You don't have the vision you will later develop to see the other dimensions of the program, such as the space of executed lines, the data structure, the memory management, the interaction with foreign code, the code that is risky, and the code that is simple. For the experienced programmer, these other dimensions form an imperfect but very useful mental model of all the things that can go wrong. Having that mental model is what helps one find the middle of the mystery effectively. From ba76c42712b843fccddc87656017a34c6292a2bc Mon Sep 17 00:00:00 2001 From: mmarica Date: Tue, 29 Mar 2016 22:27:35 +0300 Subject: [PATCH 052/149] Update 10-How to Deal with Intermittent Bugs.md Fixed a typo --- .../Personal-Skills/10-How to Deal with Intermittent Bugs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 4108f58..4c3ff2b 100644 --- a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -2,7 +2,7 @@ The intermittent bug is a cousin of the 50-foot-invisible-scorpion-from-outer-space kind of bug. This nightmare occurs so rarely that it is hard to observe, yet often enough that it can't be ignored. You can't debug because you can't find it. -Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess at what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. +Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. Try, try, try to reproduce the bug in a controlled way. If you can't reproduce it, set a trap for it by building a logging system, a special one if you have to, that can log what you guess you need when it really does occur. Resign yourself to that if the bug only occurs in production and not at your whim, this may be a long process. The hints that you get from the log may not provide the solution but may give you enough information to improve the logging. The improved logging system may take a long time to be put into production. Then, you have to wait for the bug to reoccur to get more information. This cycle can go on for some time. From 1a0fb9ff097be5365583ad8edba4c1b1eef94a89 Mon Sep 17 00:00:00 2001 From: mmarica Date: Tue, 29 Mar 2016 22:45:17 +0300 Subject: [PATCH 053/149] Update 02-How to Estimate Programming Time.md Fixed a typo --- .../Team-Skills/02-How to Estimate Programming Time.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index b9be737..5a58bf8 100644 --- a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -10,7 +10,7 @@ When not possible to take the time for some investigation, you should first esta I know good engineers who pad estimates implicitly, but I recommend that you do not. One of the results of padding is trust in you may be depleted. For instance, an engineer might estimate three days for a task that she truly thinks will take one day. The engineer may plan to spend two days documenting it, or two days working on some other useful project. But it will be detectable that the task was done in only one day (if it turns out that way), and the appearance of slacking or overestimating is born. It's far better to give proper visibility into what you are actually doing. If documentation takes twice as long as coding and the estimate says so, tremendous advantage is gained by making this visible to the manager. -Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate to should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. +Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate that should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate. The act of having the whole team agree on a line-by-line basis to the estimate clarifies the team understanding, as well as allowing the opportunity for tactical reassignment of resources (for instance, shifting burden away from weaker team members to stronger). @@ -18,4 +18,4 @@ If there are big risks that cannot be evaluated, it is your duty to state so for If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. -Next [How to Find Out Information](03-How to Find Out Information.md) \ No newline at end of file +Next [How to Find Out Information](03-How to Find Out Information.md) From 27617796fb5d11dbe61178652414fac30d591319 Mon Sep 17 00:00:00 2001 From: mmarica Date: Wed, 30 Mar 2016 08:06:34 +0300 Subject: [PATCH 054/149] Update 02-How to Estimate Programming Time.md Added comma for clarity --- .../Team-Skills/02-How to Estimate Programming Time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 5a58bf8..866ca48 100644 --- a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -10,7 +10,7 @@ When not possible to take the time for some investigation, you should first esta I know good engineers who pad estimates implicitly, but I recommend that you do not. One of the results of padding is trust in you may be depleted. For instance, an engineer might estimate three days for a task that she truly thinks will take one day. The engineer may plan to spend two days documenting it, or two days working on some other useful project. But it will be detectable that the task was done in only one day (if it turns out that way), and the appearance of slacking or overestimating is born. It's far better to give proper visibility into what you are actually doing. If documentation takes twice as long as coding and the estimate says so, tremendous advantage is gained by making this visible to the manager. -Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate that should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. +Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate to, should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate. The act of having the whole team agree on a line-by-line basis to the estimate clarifies the team understanding, as well as allowing the opportunity for tactical reassignment of resources (for instance, shifting burden away from weaker team members to stronger). From 3976acf98088678761e681c1789a80ce8e471d25 Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 30 Mar 2016 13:43:09 +0800 Subject: [PATCH 055/149] improve readability --- .../Personal-Skills/01-Learn To Debug.md | 25 ++- ...to Debug by Splitting the Problem Space.md | 16 +- .../03-How to Remove an Error.md | 10 +- .../04-How to Debug Using a Log.md | 16 +- ...-How to Understand Performance Problems.md | 12 +- .../06-How to Fix Performance Problems.md | 14 +- .../07-How to Optimize Loops.md | 22 +-- .../08-How to Deal with IO Expense.md | 14 +- .../09-How to Manage Memory.md | 16 +- .../10-How to Deal with Intermittent Bugs.md | 18 +- .../11-How to Learn Design Skills.md | 10 +- .../12-How to Conduct Experiments.md | 29 +-- zh/1-Beginner/README.md | 52 ++--- .../01-Why Estimation is Important.md | 17 +- .../02-How to Estimate Programming Time.md | 22 +-- .../03-How to Find Out Information.md | 20 +- ...o Utilize People as Information Sources.md | 16 +- .../Team-Skills/05-How to Document Wisely.md | 26 +-- .../06-How to Work with Poor Code.md | 12 +- .../07-How to Use Source Code Control.md | 10 +- .../Team-Skills/08-How to Unit Test.md | 10 +- .../09-Take Breaks when Stumped.md | 6 +- .../10-How to Recognize When to Go Home.md | 21 +- .../11-How to Deal with Difficult People.md | 16 +- .../01-How to Fight Schedule Pressure.md | 12 +- .../02-How to Understand the User.md | 20 +- .../03-How to Get a Promotion.md | 14 +- zh/3-Advanced/README.md | 43 ++-- .../01-How to Develop Talent.md | 24 +-- .../02-How to Choose What to Work On.md | 6 +- ...How to Get the Most From Your Teammates.md | 16 +- .../04-How to Divide Problems Up.md | 10 +- .../05-How to Handle Boring Tasks.md | 8 +- .../06-How to Gather Support for a Project.md | 6 +- .../07-How to Grow a System.md | 24 +-- .../08-How to Communicate Well.md | 12 +- ...l People Things They Don't Want to Hear.md | 10 +- .../10-How to Deal with Managerial Myths.md | 17 +- ...1-How to Deal with Organizational Chaos.md | 12 +- ...ow to Tell the Hard From the Impossible.md | 10 +- .../02-How to Utilize Embedded Languages.md | 12 +- .../03-Choosing Languages.md | 18 +- zh/README.md | 183 +++++++++--------- 43 files changed, 442 insertions(+), 445 deletions(-) diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md index 00b1f02..0e2e0bf 100644 --- a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,22 +1,21 @@ -# 学会 Debug +# Learn to Debug -调试(Debug)是作为一个程åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸èƒ½è°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ +Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. -那些认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿æ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿çš„ç†æƒ³ä¸»ä¹‰è€…们䏿˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如 GNU ) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果没有获得代ç çš„æ‰§è¡Œè¿‡ç¨‹å¯è§æ€§çš„能力,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ +Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. -调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ã€‚æ›´å¸¸è§çš„æ˜¯ï¼Œä½ çš„程åºå‡ºçŽ°äº†ä¸€ä¸ªé”™è¯¯ï¼Œå½“ä½ æ£€æŸ¥ä½ å†™çš„ä»£ç çš„æ—¶å€™ï¼Œå´ä¸çŸ¥é“这个错误是怎么å‘生的。ä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 +Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. -ä¸ºäº†èŽ·å¾—ä¸€ä¸ªç¨‹åºæ‰§è¡Œçš„å¯è§æ€§ï¼Œä½ å¿…须能够执行代ç å¹¶ä¸”从这个过程中观察到什么。有时候这是å¯è§çš„,比如一些正在呈现在å±å¹•上的东西,或者两个事件之间的延迟。在许多其他的案例中,它与一些ä¸ä¸€å®šå¯è§çš„东西相关,比如代ç ä¸­ä¸€äº›å˜é‡çš„状æ€ï¼Œå“ªä¸€è¡Œä»£ç æ­£åœ¨è¢«æ‰§è¡Œï¼Œæˆ–者是å¦ä¸€äº›æ–­è¨€æŒæœ‰äº†ä¸€ä¸ªå¤æ‚的数æ®ç»“构。这些éšè—的细节必须被显露出æ¥ã€‚ +To get visibility into the execution of a program you must be able to execute the code and observe something about it. Sometimes this is visible, like what is being displayed on a screen, or the delay between two events. In many other cases, it involves things that are not meant to be visible, like the state of some variables inside the code, which lines of code are actually being executed, or whether certain assertions hold across a complicated data structure. These hidden things must be revealed. +The common ways of looking into the ‘innards’ of an executing program can be categorized as: -观察一个正在执行程åºçš„å†…éƒ¨çš„æ–¹æ³•é€šå¸¸å¯æŒ‰å¦‚下分类: +- Using a debugging tool, +- Printlining - Making a temporary modification to the program, typically adding lines that print information out, and +- Logging - Creating a permanent window into the programs execution in the form of a log. -- 使用一个调试工具; -- Printlining[(戳这里看释义)](../../4-Glossary.md) - 对程åºåšä¸€ä¸ªä¸´æ—¶çš„修改,通常是加一些行去打å°ä¸€äº›ä¿¡æ¯; -- 日志 - 用日志的形å¼ä¸ºåœ¨ç¨‹åºçš„è¿è¡Œä¸­åˆ›å»ºä¸€ä¸ªæ°¸ä¹…的视窗。 +Debugging tools are wonderful when they are stable and available, but the printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. -当调试工具稳定å¯ç”¨æ—¶ï¼Œå®ƒä»¬æ˜¯éžå¸¸ç¾Žå¦™çš„,但 [Printlining](../../4-Glossary.md) 和写日志甚至是更加é‡è¦çš„。调试工具通常è½åŽäºŽç¼–程语言的å‘展,所以在æŸäº›æ—¶å€™å®ƒä»¬å¯èƒ½ä¼šæ˜¯æ— æ•ˆçš„。å¦å¤–,调试工具å¯èƒ½è½»å¾®æ”¹å˜ç¨‹åºå®žé™…执行的方å¼ã€‚最åŽï¼Œè°ƒè¯•有许多ç§ï¼Œæ¯”如检查一个断言和一个巨大的数æ®ç»“构,这需è¦å†™ä»£ç å¹¶æ”¹å˜ç¨‹åºçš„è¿è¡Œã€‚当调试工具å¯ç”¨æ—¶ï¼ŒçŸ¥é“æ€Žæ ·ä½¿ç”¨è°ƒè¯•å·¥å…·æ˜¯å¥½çš„ï¼Œä½†å­¦ä¼šä½¿ç”¨å…¶ä»–ä¸¤ç§æ–¹å¼ä¹Ÿæ˜¯è‡³å…³é‡è¦çš„。 +Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. -当调试需è¦ä¿®æ”¹ä»£ç çš„æ—¶å€™ï¼Œä¸€äº›åˆå­¦è€…会感到害怕。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - 就是因为许多人在一开始é¢å¯¹è¿™ç§ææƒ§çš„的时候表现的太脆弱,我们因此失去了很多本å¯ä»¥å˜æˆä¼˜ç§€ç¨‹åºå‘˜çš„人。 - -Next [如何通过分离问题 Debug](02-How to Debug by Splitting the Problem Space.md) +Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index 9d04270..c536c89 100644 --- a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -1,15 +1,15 @@ -# 如何通过分割问题 Debug +# How to Debug by Splitting the Problem Space -调试是有趣的,因为它一开始是个迷。你认为它应该这样åšï¼Œä½†å®žé™…上它å´é‚£æ ·åšã€‚很多时候并ä¸ä»…是这么简å•---我给出的任何例å­éƒ½ä¼šè¢«è®¾è®¡æ¥ä¸Žä¸€äº›å¶å°”在现实中会å‘生的情况相比较。调试需è¦åˆ›é€ åŠ›ä¸Žæ™ºè°‹ã€‚å¦‚æžœè¯´è°ƒè¯•æœ‰ç®€å•之é“,那就是在这个谜题上使用分治法。 +Debugging is fun, because it begins with a mystery. You think it should do something, but instead it does something else. It is not always quite so simple---any examples I can give will be contrived compared to what sometimes happens in practice. Debugging requires creativity and ingenuity. If there is a single key to debugging it is to use the divide and conquer technique on the mystery. -å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šä¾æ¬¡æ‰§è¡Œå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´å´©æºƒäº†ã€‚但你本æ¥çš„ç›®çš„å¹¶ä¸æ˜¯æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä¸€ä¸ªè°œé¢˜æ‰”ç»™ä½ äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ +Suppose, for example, you created a program that should do ten things in a sequence. When you run it, it crashes. Since you didn't program it to crash, you now have a mystery. When you look at the output, you see that the first seven things in the sequence were run successfully. The last three are not visible from the output, so now your mystery is smaller: ‘It crashed on thing #8, #9, or #10.’ -你是å¦å¯ä»¥è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥è§‚察它是在哪件事情上崩溃呢?当然,你å¯ä»¥ç”¨ä¸€ä¸ªè°ƒè¯•器或者我们å¯ä»¥åœ¨ç¬¬8第9件事åŽé¢åŠ ä¸€äº›[printlining](../../4-Glossary.md)的语å¥ï¼ˆæˆ–è€…ä½ æ­£åœ¨ä½¿ç”¨çš„ä»»ä½•è¯­è¨€é‡Œçš„ç­‰ä»·çš„äº‹æƒ…ï¼‰ï¼Œå½“æˆ‘ä»¬é‡æ–°è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œæˆ‘们的谜题会å˜å¾—æ›´å°ï¼Œæ¯”如“它是在åšç¬¬ä¹ä»¶äº‹çš„æ—¶å€™å´©æºƒçš„â€ã€‚我å‘çŽ°ï¼ŒæŠŠè°œé¢˜æ˜¯æ€Žæ ·çš„ä¸€ç›´æ¸…æ¥šåœ°è®°åœ¨å¿ƒé‡Œèƒ½è®©æˆ‘ä»¬ä¿æŒæ³¨æ„力。当几个人在一个问题的压力下一起工作时,很容易忘记最é‡è¦çš„谜题是什么。 +Can you design an experiment to see which thing it crashed on? Sure. You can use a debugger or we can add printline statements (or the equivalent in whatever language you are working in) after #8 and #9. When we run it again, our mystery will be smaller, such as ‘It crashed on thing #9.’ I find that bearing in mind exactly what the mystery is at any point in time helps keep one focused. When several people are working together under pressure on a problem it is easy to forget what the most important mystery is. -调试技术中分治的关键和算法设计里的分治是一样的。你åªè¦ä»Žä¸­é—´å¼€å§‹åˆ’分,就ä¸ç”¨åˆ’分太多次,并且能快速地调试。但问题的中点在哪里?这就是真正需è¦åˆ›é€ åŠ›å’Œç»éªŒçš„地方了。 +The key to divide and conquer as a debugging technique is the same as it is for algorithm design: as long as you do a good job splitting the mystery in the middle, you won't have to split it too many times, and you will be debugging quickly. But what is the middle of a mystery? There is where true creativity and experience comes in. -对于一个真正的åˆå­¦è€…æ¥è¯´ï¼Œå¯èƒ½å‘生错误的地方好åƒåœ¨ä»£ç çš„æ¯ä¸€è¡Œé‡Œéƒ½æœ‰ã€‚ä¸€å¼€å§‹ï¼Œä½ çœ‹ä¸åˆ°ä¸€äº›ä½ ç¨åŽå¼€å‘的时候æ‰ä¼šçœ‹åˆ°çš„å…¶å®ƒçº¬åº¦ï¼Œæ¯”å¦‚æ‰§è¡Œè¿‡çš„ä»£ç æ®µï¼Œæ•°æ®ç»“构,内存管ç†ï¼Œä¸Žå¤–部代ç çš„交互,一些有风险的代ç ï¼Œä¸€äº›ç®€å•的代ç ã€‚对于一个有ç»éªŒçš„程åºå‘˜ï¼Œè¿™äº›å…¶ä»–的维度为整个å¯èƒ½å‡ºé”™çš„事情展示了一个ä¸å®Œç¾Žä½†æ˜¯æœ‰ç”¨çš„æ€ç»´æ¨¡åž‹ã€‚æ‹¥æœ‰è¿™æ ·çš„æ€ç»´æ¨¡åž‹èƒ½è®©ä¸€ä¸ªäººæ›´é«˜æ•ˆåœ°æ‰¾åˆ°è°œé¢˜çš„中点。 +To a true beginner, the space of all possible errors looks like every line in the source code. You don't have the vision you will later develop to see the other dimensions of the program, such as the space of executed lines, the data structure, the memory management, the interaction with foreign code, the code that is risky, and the code that is simple. For the experienced programmer, these other dimensions form an imperfect but very useful mental model of all the things that can go wrong. Having that mental model is what helps one find the middle of the mystery effectively. -一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 +Once you have evenly subdivided the space of all that can go wrong, you must try to decide in which space the error lies. In the simple case where the mystery is: ‘Which single unknown line makes my program crash?’, you can ask yourself: ‘Is the unknown line executed before or after this line that I judge to be executed in the middle of the running program?’ Usually you will not be so lucky as to know that the error exists in a single line, or even a single block. Often the mystery will be more like: ‘Either there is a pointer in that graph that points to the wrong node, or my algorithm that adds up the variables in that graph doesn't work.’ In that case you may have to write a small program to check that the pointers in the graph are all correct in order to decide which part of the subdivided mystery can be eliminated. -Next [如何移除错误](03-How to Remove an Error.md) +Next [How to Remove an Error](03-How to Remove an Error.md) diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 157db67..8edb6b1 100644 --- a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,9 +1,9 @@ -# 如何移除一个错误 +# How to Remove an Error -æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤ bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统,所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ +I've intentionally separated the act of examining a program's execution from the act of fixing an error. But of course, debugging does also mean removing the bug. Ideally you will have perfect understanding of the code and will reach an ‘A-Ha!’ moment where you perfectly see the error and how to fix it. But since your program will often use insufficiently documented systems into which you have no visibility, this is not always possible. In other cases the code is so complicated that your understanding cannot be perfect. -åœ¨ä¿®å¤ bug 时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯•å›¾ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤ bug æœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çް bugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察 bug 是å¦ä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ª bug。 +In fixing a bug, you want to make the smallest change that fixes the bug. You may see other things that need improvement; but don't fix those at the same time. Attempt to employ the scientific method of changing one thing and only one thing at a time. The best process for this is to be able to easily reproduce the bug, then put your fix in place, and then rerun the program and observe that the bug no longer exists. Of course, sometimes more than one line must be changed, but you should still conceptually apply a single atomic change to fix the bug. -有时候,å¯èƒ½å®žé™…上有几个 bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义 bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 +Sometimes, there are really several bugs that look like one. It is up to you to define the bugs and fix them one at a time. Sometimes it is unclear what the program should do or what the original author intended. In this case, you must exercise your experience and judgment and assign your own meaning to the code. Decide what it should do, and comment it or clarify it in some way and then make the code conform to your meaning. This is an intermediate or advanced skill that is sometimes harder than writing the original function in the first place, but the real world is often messy. You may have to fix a system you cannot rewrite. -Next [如何使用日志调试](04-How to Debug Using a Log.md) +Next [How to Debug Using a Log](04-How to Debug Using a Log.md) \ No newline at end of file diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index c53c1bc..320c45a 100644 --- a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,13 +1,13 @@ -# 如何使用日志调试 +# How to Debug Using a Log -*Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为 log。*Printlining* åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚åœ¨ç†æƒ³çš„状æ€ä¸‹ï¼Œç¨‹åºè¿è¡Œæ—¶äº§ç”Ÿçš„æ—¥å¿—ä¿¡æ¯æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: +*Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of the programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: -- 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„ bug 的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„ bug。 -- 日志å¯ä»¥æä¾›ç»Ÿè®¡å’Œä¸Žæ€§èƒ½ç›¸å…³çš„æ•°æ®ï¼Œæ¯”如语å¥é—´æµé€è¿‡çš„æ—¶é—´ã€‚ -- å¯é…置的情况下,日志å…è®¸æˆ‘ä»¬èŽ·å–æ™®é€šçš„ä¿¡æ¯ï¼Œä½¿å¾—我们å¯ä»¥åœ¨ä¸ä¿®æ”¹æˆ–釿–°éƒ¨ç½²ä»£ç çš„æƒ…况下调试以处ç†å…·ä½“的问题。 +- Logs can provide useful information about bugs that are hard to reproduce (such as those that occur in the production environment but that cannot be reproduced in the test environment). +- Logs can provide statistics and data relevant to performance, such as the time passing between statements. +- When configurable, logs allow general information to be captured in order to debug unanticipated specific problems without having to modify and/or redeploy the code just to deal with those specific problems. -需è¦è¾“å‡ºçš„æ—¥å¿—æ•°é‡æ€»æ˜¯ä¸€ä¸ªç®€çº¦ä¸Žä¿¡æ¯é‡çš„æƒè¡¡ã€‚å¤ªå¤šçš„ä¿¡æ¯ä¼šä½¿å¾—日志å˜å¾—昂贵,并且造æˆ[*滚动目盲*](../../4-Glossary.md),使得å‘现你想è¦çš„ä¿¡æ¯å˜å¾—很困难。但信æ¯å¤ªå°‘çš„è¯ï¼Œæ—¥å¿—å¯èƒ½ä¸åŒ…å«ä½ éœ€è¦çš„ä¿¡æ¯ã€‚出于这个原因,让日志的输出å¯é…置是éžå¸¸æœ‰ç”¨çš„。通常,日志中的æ¯ä¸ªè®°å½•会标记它在æºä»£ç é‡Œçš„ä½ç½®ï¼Œæ‰§è¡Œå®ƒçš„线程(如果å¯ç”¨çš„è¯ï¼‰ï¼Œæ—¶é—´ç²¾åº¦ï¼Œå¹¶ä¸”通常还有一些é¢å¤–的有效信æ¯ï¼Œæ¯”如一些å˜é‡çš„值,剩余内存大å°ï¼Œæ•°æ®å¯¹è±¡çš„æ•°é‡ï¼Œç­‰ç­‰ã€‚è¿™äº›æ—¥å¿—è¯­å¥æ’’éæºç ï¼Œä½†åªå‡ºçŽ°åœ¨ä¸»è¦çš„功能点和一些å¯èƒ½å‡ºçް屿œºçš„代ç é‡Œã€‚æ¯ä¸ªè¯­å¥å¯ä»¥è¢«èµ‹äºˆä¸€ä¸ªç­‰çº§ï¼Œå¹¶ä¸”åªæœ‰åœ¨ç³»ç»Ÿè¢«é…ç½®æˆè¾“出相应等级的记录的时候æ‰è¾“å‡ºè¿™ä¸ªç­‰çº§çš„è®°å½•ã€‚ä½ åº”è¯¥è®¾è®¡å¥½æ—¥å¿—è¯­å¥æ¥æ ‡è®°ä½ é¢„期的问题。预估测é‡ç¨‹åºè¡¨çŽ°çš„å¿…è¦æ€§ã€‚ +The amount to output into the log is always a compromise between information and brevity. Too much information makes the log expensive and produces *scroll blindness*, making it hard to find the information you need. Too little information and it may not contain what you need. For this reason, making what is output configurable is very useful. Typically, each record in the log will identify its position in the source code, the thread that executed it if applicable, the precise time of execution, and, commonly, an additional useful piece of information, such as the value of some variable, the amount of free memory, the number of data objects, etc. These log statements are sprinkled throughout the source code but are particularly at major functionality points and around risky code. Each statement can be assigned a level and will only output a record if the system is currently configured to output that level. You should design the log statements to address problems that you anticipate. Anticipate the need to measure performance. -如果你有一个永久的日志,printling 现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 +If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. -Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How to Understand Performance Problems.md) +Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) \ No newline at end of file diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index 46b50b0..e08f054 100644 --- a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,11 +1,11 @@ -# 如何ç†è§£æ€§èƒ½é—®é¢˜ +# How to Understand Performance Problems -学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹  debug 是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žã€ç²¾ç¡®åœ°ç†è§£äº†ä½ çš„代ç è¿è¡Œæ—¶æ‰€äº§ç”Ÿçš„开销,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 +Learning to understand the performance of a running system is unavoidable for the same reason that learning debugging is. Even if you understand perfectly precisely the cost of the code you write, your code will make calls into other software systems that you have little control over or visibility into. However, in practice performance problems are a little different and a little easier than debugging in general. -å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨ I/O 上。å‘现昂贵的 I/O 和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 +Suppose that you or your customers consider a system or a subsystem to be too slow. Before you try to make it faster, you must build a mental model of why it is slow. To do this you can use a profiling tool or a good log to figure out where the time or other resources are really being spent. There is a famous dictum that 90% of the time will be spent in 10% of the code. I would add to that the importance of input/output expense (I/O) to performance issues. Often most of the time is spent in I/O in one way or another. Finding the expensive I/O and the expensive 10% of the code is a good first step to building your mental model. -计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯ç¨å¾®å¤šèŠ±è´¹äº†ä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ +There are many dimensions to the performance of a computer system, and many resources consumed. The first resource to measure is *wall-clock time*, the total time that passes for the computation. Logging *wall-clock time* is particularly valuable because it can inform about unpredictable circumstances that arise in situations where other profiling is impractical. However, this may not always represent the whole picture. Sometimes something that takes a little longer but doesn't burn up so many processor seconds will be much better in the computing environment you actually have to deal with. Similarly, memory, network bandwidth, database or other server accesses may, in the end, be far more expensive than processor seconds. -竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 +Contention for shared resources that are synchronized can cause deadlock and starvation. Deadlock is the inability to proceed because of improper synchronization or resource demands. Starvation is the failure to schedule a component properly. If it can be at all anticipated, it is best to have a way of measuring this contention from the start of your project. Even if this contention does not occur, it is very helpful to be able to assert that with confidence. -Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How to Fix Performance Problems.md) +Next [How to Fix Performance Problems](06-How to Fix Performance Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index c2778f8..8949e74 100644 --- a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,13 +1,13 @@ -# å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜ +# How to Fix Performance Problems -大部分软件都å¯ä»¥é€šè¿‡ä»˜å‡ºç›¸å¯¹è¾ƒå°çš„努力,让他们比刚å‘布时快上10到100å€ã€‚在市场的压力下,选择一个简å•而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 +Most software projects can be made with relatively little effort 10 to 100 times faster than they are at the time they are first released. Under time-to-market pressure, it is both wise and effective to choose a solution that gets the job done simply and quickly, but less efficiently than some other solution. However, performance is a part of usability, and often it must eventually be considered more carefully. -æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œæ¥å‘现其“瓶颈â€ï¼Œæˆ–者其资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 +The key to improving the performance of a very complicated system is to analyse it well enough to find the *bottlenecks*, or places where most of the resources are consumed. There is not much sense in optimizing a function that accounts for only 1% of the computation time. As a rule of thumb you should think carefully before doing anything unless you think it is going to make the system or a significant part of it at least twice as fast. There is usually a way to do this. Consider the test and quality assurance effort that your change will require. Each change brings a test burden with it, so it is much better to have a few big changes. -当你在æŸä¸ªæ–¹é¢åšäº†ä¸€ä¸ªä¸¤å€æå‡åŽï¼Œä½ éœ€è¦è‡³å°‘釿–°è€ƒè™‘并且å¯èƒ½é‡æ–°åˆ†æžï¼ŒåŽ»å‘çŽ°ç³»ç»Ÿä¸­ä¸‹ä¸€ä¸ªæœ€æ˜‚è´µçš„ç“¶é¢ˆï¼Œå¹¶ä¸”æ”»ç ´é‚£ä¸ªç“¶é¢ˆï¼Œå¾—åˆ°ä¸‹ä¸€ä¸ªä¸¤å€æå‡ã€‚ +After you've made a two-fold improvement in something, you need to at least rethink and perhaps reanalyze to discover the next-most-expensive bottleneck in the system, and attack that to get another two-fold improvement. -é€šå¸¸ï¼Œæ€§èƒ½çš„ç“¶é¢ˆçš„ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œæ•°ç‰›çš„æ•°ç›®ï¼šé€šè¿‡æ•°è„šçš„æ•°é‡ç„¶åŽé™¤ä»¥4,还是数头的数é‡ã€‚举些例å­ï¼Œæˆ‘曾犯过的一些错误:没能在关系数æ®åº“中,为我ç»å¸¸æŸ¥è¯¢çš„那一列æä¾›é€‚当的索引,这å¯èƒ½ä¼šä½¿å¾—它至少慢了20å€ã€‚其他例å­è¿˜åŒ…括在循环里åšä¸å¿…è¦çš„ I/O æ“作,留下ä¸å†éœ€è¦çš„调试语å¥ï¼Œä¸å†éœ€è¦çš„内存分é…,还有,尤其是,ä¸ä¸“业地使用库和其他的没有为性能充分编写过的å­ç³»ç»Ÿã€‚è¿™ç§æå‡æœ‰æ—¶å€™è¢«å«åšâ€œä½Žåž‚的水果â€ï¼Œæ„æ€æ˜¯å®ƒå¯ä»¥è¢«è½»æ˜“地获å–,然åŽäº§ç”Ÿå·¨å¤§çš„好处。 +Often, the bottlenecks in performance will be an example of counting cows by counting legs and dividing by four, instead of counting heads. For example, I've made errors such as failing to provide a relational database system with a proper index on a column I look up a lot, which probably made it at least 20 times slower. Other examples include doing unnecessary I/O in inner loops, leaving in debugging statements that are no longer needed, unnecessary memory allocation, and, in particular, inexpert use of libraries and other subsystems that are often poorly documented with respect to performance. This kind of improvement is sometimes called *low-hanging fruit*, meaning that it can be easily picked to provide some benefit. -你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的 boss 这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ +What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down. You can continue making small improvements or you can seriously redesign a system or a subsystem. (This is a great opportunity to use your skills as a good programmer, not only in the new design but also in convincing your boss that this is a good idea.) However, before you argue for the redesign of a subsystem, you should ask yourself whether or not your proposal will make it five to ten time better. -Next [如何优化循环](07-How to Optimize Loops.md) +Next [How to Optimize Loops](07-How to Optimize Loops.md) diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index 8d5f4ec..491a6b2 100644 --- a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,15 +1,15 @@ -# 如何优化循环 +# How to Optimize Loops -有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…éœ€è¦æ™ºæ…§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: +Sometimes you'll encounter loops, or recursive functions, that take a long time to execute and are bottlenecks in your product. Before you try to make the loop a little faster, spend a few minutes considering if there is a way to remove it entirely. Would a different algorithm do? Could you compute that while computing something else? If you can't find a way around it, then you can optimize the loop. This is simple; move stuff out. In the end, this will require not only ingenuity but also an understanding of the expense of each kind of statement and expression. Here are some suggestions: -- 删除浮点è¿ç®—æ“作。 -- éžå¿…è¦æ—¶ä¸è¦åˆ†é…新的内存。 -- 把常é‡éƒ½æ”¾åœ¨ä¸€èµ·å£°æ˜Žã€‚ -- 把 I/O 放在缓冲里åšã€‚ -- å°½é‡ä¸ä½¿ç”¨é™¤æ³•。 -- å°½é‡ä¸é€‚用昂贵的类型转æ¢ã€‚ -- 移动指针而éžé‡æ–°è®¡ç®—索引。 +- Remove floating point operations. +- Don't allocate new memory blocks unnecessarily. +- Fold constants together. +- Move I/O into a buffer. +- Try not to divide. +- Try not to do expensive typecasts. +- Move a pointer rather than recomputing indices. -这些æ“作的具体代价å–决于你的具体系统。在一些系统中,编译器和硬件会为你åšä¸€äº›äº‹æƒ…ã€‚ä½†å¿…é¡»æ¸…æ¥šï¼Œæœ‰æ•ˆçš„ä»£ç æ¯”需è¦åœ¨ç‰¹æ®Šå¹³å°ä¸‹ç†è§£çš„代ç è¦å¥½ã€‚ +The cost of each of these operations depends on your specific system. On some systems compilers and hardware do these things for you. Clear, efficient code is better than code that requires an understanding of a particular platform. -Next [如何处ç†I/O开销](08-How to Deal with IO Expense.md) +Next [How to Deal with I/O Expense](08-How to Deal with IO Expense.md) diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index afaf84b..f396d5b 100644 --- a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,13 +1,13 @@ -# 如何处ç†I/O代价 +# How to Deal with I/O Expense -在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„ I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜ I/O,数æ®åº“查询,文件 I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜ I/O,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法的问题。 +For a lot of problems, processors are fast compared to the cost of communicating with a hardware device. This cost is usually abbreviated I/O, and can include network cost, disk I/O, database queries, file I/O, and other use of some hardware not very close to the processor. Therefore building a fast system is often more a question of improving I/O than improving the code in some tight loop, or even improving an algorithm. -有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ– I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦å†æ‰§è¡Œ I/O,以此æ¥é¿å… I/O(通常é¿å…读å–一些抽象的值)。缓存的关键在于è¦è®©å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬å˜å¾—显而易è§ã€‚主干的数æ®åªæœ‰ä¸€ä»½-周期。缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 +There are two very fundamental techniques to improving I/O: caching and representation. Caching is avoiding I/O (generally avoiding the reading of some abstract value) by storing a copy of that value locally so no I/O is performed to get the value. The first key to caching is to make it crystal clear which data is the master and which are copies. There is only one master - period. Caching brings with it the danger that the copy sometimes can't reflect changes to the master instantaneously. -ä»£è¡¨æ˜¯é€šè¿‡æ›´é«˜æ•ˆåœ°è¡¨ç¤ºæ•°æ®æ¥è®© I/O 更廉价。这通常会é™åˆ¶å…¶ä»–çš„è¦æ±‚,比如å¯è¯»æ€§å’Œå¯ç§»æ¤æ€§ã€‚ +Representation is the approach of making I/O cheaper by representing data more efficiently. This is often in tension with other demands, like human readability and portability. -代表通常å¯ä»¥ç”¨ä»–ä»¬ç¬¬ä¸€å®žçŽ°ä¸­çš„ä¸¤åˆ°ä¸‰ä¸ªå› å­æ¥åšä¼˜åŒ–。实现这点的技术包括使用二进制表示而éžäººç±»å¯è¯†åˆ«çš„æ–¹å¼,传递数æ®çš„åŒæ—¶ä¹Ÿä¼ é€’一个符å·è¡¨ï¼Œè¿™æ ·é•¿çš„符å·å°±ä¸éœ€è¦è¢«ç¼–ç ï¼Œä¸€ä¸ªæžç«¯çš„例孿˜¯å“ˆå¼—曼编ç ã€‚ +Representations can often be improved by a factor of two or three from their first implementation. Techniques for doing this include using a binary representation instead of one that is human readable, transmitting a dictionary of symbols along with the data so that long symbols don't have to be encoded, and, at the extreme, things like Huffman encoding. -å¦ä¸€ç§æœ‰æ—¶èƒ½å¤Ÿç”¨æ¥ä¼˜åŒ–本地引用的技术是让计算更接近数æ®ã€‚例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 +A third technique that is sometimes possible is to improve the locality of reference by pushing the computation closer to the data. For instance, if you are reading some data from a database and computing something simple from it, such as a summation, try to get the database server to do it for you. This is highly dependent on the kind of system you're working with, but you should explore it. -Next [如何管ç†å†…å­˜](09-How to Manage Memory.md) +Next [How to Manage Memory](09-How to Manage Memory.md) \ No newline at end of file diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md index a87e0ad..a20adf4 100644 --- a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -1,15 +1,15 @@ -# 如何管ç†å†…å­˜ +# How to Manage Memory -内存是一ç§ä½ ä¸å¯ä»¥è€—尽的ç贵资æºã€‚在一段时期里,你å¯ä»¥æ— è§†å®ƒï¼Œä½†æœ€ç»ˆä½ å¿…须决定如何管ç†å†…存。 +Memory is a precious resource that you can't afford to run out of. You can ignore it for a while but eventually you will have to decide how to manage memory. -堆内存是在å•一å­ç¨‹åºèŒƒå›´å¤–ï¼Œéœ€è¦æŒç»­ï¼ˆä¿ç•™ï¼‰çš„空间。一大å—内存,在没有东西指å‘它的时候,是无用的,因此被称为*垃圾*。根æ®ä½ æ‰€ä½¿ç”¨çš„系统的ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦è‡ªå·±æ˜¾å¼é‡Šæ”¾å°†è¦å˜æˆåžƒåœ¾çš„内存。更多时候你å¯èƒ½ä½¿ç”¨ä¸€ä¸ªæœ‰*垃圾回收器*的系统。一个垃圾回收器会自己注æ„到垃圾的存在并且在ä¸éœ€è¦ç¨‹åºå‘˜åšä»»ä½•事情的情况下释放它的内存空间。垃圾回收器是奇妙的:它å‡å°äº†é”™è¯¯ï¼Œç„¶åŽå¢žåŠ äº†ä»£ç çš„ç®€æ´æ€§ã€‚如果å¯ä»¥çš„è¯ï¼Œä½¿ç”¨åžƒåœ¾å›žæ”¶å™¨ã€‚ +Space that needs to persist beyond the scope of a single subroutine is often called *heap allocated*. A chunk of memory is useless, hence *garbage*, when nothing refers to it. Depending on the system you use, you may have to explicitly deallocate memory yourself when it is about to become garbage. More often you may be able to use a system that provides a *garbage collector*. A garbage collector notices garbage and frees its space without any action required by the programmer. Garbage collection is wonderful: it lessens errors and increases code brevity and concision cheaply. Use it when you can. -但是å³ä½¿æœ‰äº†åžƒåœ¾å›žæ”¶æœºåˆ¶ï¼Œä½ è¿˜æ˜¯å¯èƒ½æŠŠæ‰€æœ‰çš„内存填满垃圾。一个典型的错误是把哈希表作为一个缓存,但是忘了删除对哈希表的引用。因为引用ä»ç„¶å­˜åœ¨ï¼Œè¢«å¼•用者是ä¸å¯å›žæ”¶ä½†å´æ— ç”¨çš„。这就å«åš*内存泄露*。你应该尽早å‘现并且修å¤å†…存泄露。如果你有一个长时间è¿è¡Œçš„系统,内存å¯èƒ½åœ¨æµ‹è¯•中ä¸ä¼šè¢«è€—尽,但å¯èƒ½åœ¨ç”¨æˆ·é‚£é‡Œè¢«è€—尽。 +But even with garbage collection, you can fill up all memory with garbage. A classic mistake is to use a hash table as a cache and forget to remove the references in the hash table. Since the reference remains, the referent is non-collectable but useless. This is called a *memory leak*. You should look for and fix memory leaks early. If you have long running systems memory may never be exhausted in testing but will be exhausted by the user. -创建新对象在任何系统里都是有点昂贵的。然而,在å­ç¨‹åºé‡Œç›´æŽ¥ä¸ºå±€éƒ¨å˜é‡åˆ†é…内存通常很便宜,因为释放它的策略很简å•。你应该é¿å…ä¸å¿…è¦çš„对象创建。 +The creation of new objects is moderately expensive on any system. Memory allocated directly in the local variables of a subroutine, however, is usually cheap because the policy for freeing it can be very simple. You should avoid unnecessary object creation. -当你å¯ä»¥å®šä¹‰ä½ ä¸€æ¬¡éœ€è¦çš„æ•°é‡çš„上界的时候,一个é‡è¦çš„æƒ…况出现了:如果这些对象都å ç”¨ç›¸åŒå¤§å°çš„内存,你å¯ä»¥ä½¿ç”¨å•独的一å—å†…å­˜ï¼Œæˆ–ç¼“å­˜ï¼Œæ¥æŒæœ‰æ‰€æœ‰çš„这些对象。你需è¦çš„对象å¯ä»¥åœ¨è¿™ä¸ªç¼“存里以循环的方å¼åˆ†é…å’Œé‡Šæ”¾ï¼Œæ‰€ä»¥å®ƒæœ‰æ—¶å€™è¢«ç§°ä¸ºçŽ¯ç¼“å­˜ã€‚è¿™é€šå¸¸æ¯”å †å†…å­˜åˆ†é…æ›´å¿«ã€‚(译者注:这也被称为对象池。) +An important case occurs when you can define an upper bound on the number of objects you will need at one time. If these objects all take up the same amount of memory, you may be able to allocate a single block of memory, or a buffer, to hold them all. The objects you need can be allocated and released inside this buffer in a set rotation pattern, so it is sometimes called a ring buffer. This is usually faster than heap allocation. -æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no free)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 +Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form or garbage collection, such as reference counting, to do this for them. -Next [如何处ç†å¶çŽ°çš„ Bug](10-How to Deal with Intermittent Bugs.md) +Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) \ No newline at end of file diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 44a142b..4108f58 100644 --- a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,17 +1,17 @@ -# 如何处ç†å¶çŽ°çš„ Bugs +# How to Deal with Intermittent Bugs -å¶çް bug 是一ç§ç±»ä¼¼äºŽå¤–太空50è¶³éšèº«èŽå­çš„东西。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ +The intermittent bug is a cousin of the 50-foot-invisible-scorpion-from-outer-space kind of bug. This nightmare occurs so rarely that it is hard to observe, yet often enough that it can't be ignored. You can't debug because you can't find it. -尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„ bug å¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•ç€åŽ»è®°å½•è¿™ä¸ª bug 出现时的情景,这样你å¯ä»¥åŽ»æŽ¨æµ‹åˆ°åº•æ˜¯ä»€ä¹ˆæ ·çš„å¯å˜æ€§ã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å¯å˜æ€§çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 +Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess at what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. -å°è¯•,å°è¯•,å°è¯•去在一ç§å¯æŽ§çš„æ–¹å¼ä¸‹é‡çŽ°è¿™ä¸ª bug。如果你ä¸èƒ½é‡çŽ°å®ƒï¼Œç”¨æ—¥å¿—ç³»ç»Ÿç»™å®ƒè®¾ç½®ä¸€ä¸ªåœˆå¥—ï¼Œæ¥åœ¨ä½ éœ€è¦çš„æ—¶å€™ï¼Œåœ¨å®ƒçœŸçš„å‘生的时候,记录你猜想的,需è¦çš„ä¸œè¥¿ã€‚é‡æ–°è®¾è®¡è¿™ä¸ªåœˆå¥—,如果这个bugåªå‘生在产å“中,且ä¸åœ¨ä½ çš„猜想中的è¯ï¼Œè¿™å¯èƒ½æ˜¯ä¸€ä¸ªé•¿çš„过程。你从日志中得到的(信æ¯ï¼‰å¯èƒ½ä¸èƒ½æä¾›è§£å†³æ–¹æ¡ˆï¼Œä½†å¯èƒ½ç»™ä½ è¶³å¤Ÿçš„ä¿¡æ¯åŽ»ä¼˜åŒ–è¿™ä¸ªæ—¥å¿—ã€‚ä¼˜åŒ–åŽçš„æ—¥å¿—系统å¯èƒ½èŠ±å¾ˆé•¿æ—¶é—´æ‰èƒ½è¢«æ”¾å…¥äº§å“中使用。然åŽï¼Œä½ å¿…须等待 bug 釿–°å‡ºçŽ°ä»¥èŽ·å¾—æ›´å¤šçš„ä¿¡æ¯ã€‚这个循环å¯èƒ½ä¼šç»§ç»­å¥½å‡ æ¬¡ã€‚ +Try, try, try to reproduce the bug in a controlled way. If you can't reproduce it, set a trap for it by building a logging system, a special one if you have to, that can log what you guess you need when it really does occur. Resign yourself to that if the bug only occurs in production and not at your whim, this may be a long process. The hints that you get from the log may not provide the solution but may give you enough information to improve the logging. The improved logging system may take a long time to be put into production. Then, you have to wait for the bug to reoccur to get more information. This cycle can go on for some time. -我曾创建过的最愚蠢的å¶çް bug 是在用一个函数å¼ç¼–程语言里为类工程åšå¤šçº¿ç¨‹å®žçŽ°çš„æ—¶å€™ã€‚æˆ‘éžå¸¸ä»”细地ä¿è¯äº†å‡½æ•°å¼ç¨‹åºçš„å¹¶å‘估计, CPU 的充分使用(在这个例å­é‡Œï¼Œæ˜¯8个 CPU)。我å´ç®€å•åœ°å¿˜è®°äº†åŽ»åŒæ­¥åžƒåœ¾å›žæ”¶å™¨ã€‚系统å¯èƒ½è¿è¡Œäº†å¾ˆé•¿ä¸€æ®µæ—¶é—´ï¼Œç»å¸¸ç»“æŸåœ¨æˆ‘开始任何一个任务的时候,在任何能被注æ„到的事情出错之å‰ã€‚æˆ‘å¾ˆé—æ†¾åœ°æ‰¿è®¤åœ¨æˆ‘ç†è§£æˆ‘的错误之å‰ï¼Œæˆ‘甚至开始怀疑硬件了。 +The stupidest intermittent bug I ever created was in a multi-threaded implementation of a functional programming language for a class project. I had very carefully ensured correct concurrent evaluation of the functional program, good utilization of all the CPUs available (eight, in this case). I simply forgot to synchronize the garbage collector. The system could run a long time, often finishing whatever task I began, before anything noticeable went wrong. I'm ashamed to admit I had begun to question the hardware before my mistake dawned on me. -在工作中我们最近有这样一个å¶çŽ°çš„ bug 让我们花了几个星期æ‰å‘现。我们有一个多线程的基于 Apacheâ„¢ çš„ Javaâ„¢web æœåС噍,在维护第一个页é¢è·³è½¬çš„æ—¶å€™ï¼Œæˆ‘们在四个独立线程里以4个独立的线程而éžé¡µé¢è·³è½¬çº¿ç¨‹ä¸ºä¸€ä¸ªå°çš„é›†åˆæ‰§è¡Œæ‰€æœ‰çš„ I/O æ“作。æ¯ä¸€æ¬¡è·³è½¬ä¼šäº§ç”Ÿæ˜Žæ˜¾çš„å¡é¡¿ç„¶åŽåœæ­¢åšä»»ä½•æœ‰ç”¨çš„äº‹æƒ…ï¼Œç›´åˆ°å‡ ä¸ªå°æ—¶åŽï¼Œæˆ‘们的日志æ‰è®©æˆ‘们了解到底å‘生了什么。因为我们有四个线程,在一个线程内部å‘ç”Ÿè¿™ç§æƒ…况并䏿˜¯ä»€ä¹ˆå¤§é—®é¢˜ï¼Œé™¤éžæ‰€æœ‰çš„四个线程都阻塞了。然åŽè¢«è¿™äº›çº¿ç¨‹æŽ’空的队列会迅速填充所有å¯ç”¨çš„内存,然åŽå¯¼è‡´æˆ‘们的æœåŠ¡å™¨å´©æºƒã€‚è¿™ä¸ª bug 花了我们一个星期去æªä½è¿™ä¸ªé—®é¢˜ï¼Œä½†æˆ‘们ä»ç„¶ä¸çŸ¥é“什么导致了这个现象,ä¸çŸ¥é“它什么时候会å‘生,甚至ä¸çŸ¥é“它们阻塞的时候,线程们在干什么。 +At work we recently had an intermittent bug that took us several weeks to find. We have multi-threaded application servers in Javaâ„¢ behind Apacheâ„¢ web servers. To maintain fast page turns, we do all I/O in small set of four separate threads that are different than the page-turning threads. Every once in a while these would apparently get ‘stuck’ and cease doing anything useful, so far as our logging allowed us to tell, for hours. Since we had four threads, this was not in itself a giant problem - unless all four got stuck. Then the queues emptied by these threads would quickly fill up all available memory and crash our server. It took us about a week to figure this much out, and we still didn't know what caused it, when it would happen, or even what the threads where doing when they got ‘stuck’. -这表明了有关使用第三方软件的一些风险。我们在使用一段授æƒçš„代ç ï¼Œä»Žæ–‡æœ¬ä¸­ç§»é™¤HTML标签。å—它的起æºçš„å½±å“,我们把它å«åšæ³•å›½è„±è¡£èˆžè€…ã€‚å°½ç®¡æˆ‘ä»¬æœ‰æºä»£ç ï¼ˆç”±è¡·æ„Ÿè°¢ï¼ï¼‰ï¼Œæˆ‘们没有仔细研究它,直到查看我们æœåŠ¡å™¨çš„æ—¥å¿—çš„æ—¶å€™ï¼Œæˆ‘ä»¬æœ€ç»ˆæ„识到是“法国脱衣舞者â€ä½¿é‚®ä»¶çº¿ç¨‹é˜»å¡žäº†ã€‚ +This illustrates some risk associated with third-party software. We were using a licensed piece of code that removed HTML tags from text. Due to its place of origin we affectionately referred to this as ‘the French stripper‘. Although we had the source code (thank goodness!) we had not studied it carefully until by turning up the logging on our servers we finally realized that the email threads were getting stuck in the French stripper. -这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是 N 的平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。正å¼ç”±äºŽè¿™äº›æ–‡æœ¬é€šå¸¸éƒ½ä¼šå‡ºçŽ°ï¼Œæ‰€ä»¥æˆ‘ä»¬æ‰å¯ä»¥é©¬ä¸Šå‘现这个 bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 +The stripper performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. -Next [如何学习设计技能](11-How to Learn Design Skills.md) +Next [How to Learn Design Skills](11-How to Learn Design Skills.md) diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 0427c7c..30c495c 100644 --- a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,9 +1,9 @@ -# 如何学习设计技能 +# How to Learn Design Skills -为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œåœ¨ä»–身边学习他的行为。然åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如 android 系统中的谷歌官方应用)。在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 +To learn how to design software, study the action of a mentor by being physically present when they are designing. Then study well-written pieces of software. After that, you can read some books on the latest design techniques. -ç„¶åŽä½ å¿…须自己动手了。从一个å°çš„工程开始,当你最åŽå®Œæˆæ—¶ï¼Œè€ƒè™‘为什么这个设计失败了或æˆåŠŸäº†ï¼Œä½ æ˜¯æ€Žæ ·å离你最åˆçš„设想的。然åŽç»§ç»­åŽ»ç€æ‰‹å¤§ä¸€ç‚¹çš„å·¥ç¨‹ï¼Œåœ¨ä¸Žå…¶ä»–äººç»“åˆæ—¶ä¼šæ›´æœ‰å¸Œæœ›ã€‚设计是一ç§éœ€è¦èŠ±å¾ˆå¤šå¹´åŽ»å­¦ä¹ çš„å…³äºŽè¯„åˆ¤çš„äº‹æƒ…ã€‚ä¸€ä¸ªèªæ˜Žçš„程åºå‘˜å¯ä»¥å­¦ä¹ åœ¨ä¸¤ä¸ªæœˆå†…充分学好这ç§åŸºç¡€ç„¶åŽä»Žè¿™é‡Œå¼€å§‹è¿›æ­¥ã€‚ +Then you must do it yourself. Start with a small project. When you are finally done, consider how the design failed or succeeded and how you diverged from your original conception. Then move on to larger projects, hopefully in conjunction with other people. Design is a matter of judgement that takes years to acquire. A smart programmer can learn the basics adequately in two months and can improve from there. -å‘展出你自己的风格是自然而有用的,但记ä½ï¼Œè®¾è®¡æ˜¯ä¸€ç§è‰ºæœ¯ï¼Œè€Œä¸æ˜¯ä¸€ç§ç§‘学。人们写的关于这个主题的书都有一ç§ä½¿å¾—å®ƒå¥½åƒæ˜¯ç§‘学的既定的兴趣。ä¸è¦æ­¦æ–­å¯¹å¾…特定的设计风格。 +It is natural and helpful to develop your own style, but remember that design is an art, not a science. People who write books on the subject have a vested interest in making it seem scientific. Don't become dogmatic about particular design styles. -Next [如何进行实验](12-How to Conduct Experiments.md) +Next [How to Conduct Experiments](12-How to Conduct Experiments.md) diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index 7607763..916a540 100644 --- a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,22 +1,23 @@ -# 如何进行实验 +# How to Conduct Experiments -已故的伟大的 Edsger Dijkstra 曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] +The late, great Edsger Dijkstra has eloquently explained that Computer Science is not an experimental science[ExpCS] and doesn't depend on electronic computers. As he puts it referring to the 1960s [Knife], -> ...å±å®³å·²ç»å‡ºçŽ°ï¼šä¸»é¢˜çŽ°åœ¨å·²ç»å˜æˆäº†â€œè®¡ç®—机科学†- è¿™å®žé™…ä¸Šï¼Œåƒæ˜¯æŠŠå¤–科手术引用为“手术刀科学†- 这在人们心中深深æ¤å…¥äº†è¿™æ ·ä¸€ä¸ªæ¦‚念:计算机科学是关于机器和它们的外围设备的。 +> ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. -编程ä¸åº”该是一门实验科学,但大多数èŒä¸šç¨‹åºå‘˜å¹¶æ²¡æœ‰ä¿å« Dijkstra 对于计算机科学的解释的è£è€€ã€‚æˆ‘ä»¬å¿…é¡»åœ¨å®žéªŒçš„é¢†åŸŸé‡Œå·¥ä½œï¼Œæ­£å¦‚ä¸€éƒ¨åˆ†ï¼Œä½†éžæ‰€æœ‰çš„物ç†å­¦å®¶åšçš„那样。如果三åå¹´åŽï¼Œç¼–程å¯ä»¥åœ¨ä¸è¿›è¡Œä»»ä½•å®žéªŒçš„å‰æä¸‹è¿›è¡Œï¼Œè¿™å°†æ˜¯è®¡ç®—æœºç§‘å­¦çš„ä¸€ä¸ªå·¨å¤§æˆå°±ã€‚ +Programming ought not to be an experimental science, but most working programmers do not have the luxury of engaging in what Dijkstra means by computing science. We must work in the realm of experimentation, just as some, but not all, physicists do. If thirty years from now programming can be performed without experimentation, it will be a great accomplishment of Computer Science. -你需è¦è¿›è¡Œçš„实验包括: -- 用å°çš„例孿µ‹è¯•系统以验è¯å®ƒä»¬éµå¾ªæ–‡æ¡£ï¼Œæˆ–者在没有文档时,ç†è§£å®ƒä»¬çš„å应; -- 测试一些å°çš„代ç ä¿®æ”¹åŽ»éªŒè¯å®ƒä»¬æ˜¯å¦ç¡®å®žä¿®å¤äº†ä¸€ä¸ª bugï¼› -- 由于对一个系统ä¸å®Œå…¨çš„ç†è§£ï¼Œéœ€è¦åœ¨ä¸¤ç§ä¸åŒæƒ…况下测é‡å®ƒä»¬çš„æ€§èƒ½è¡¨çŽ°ï¼› -- 检查数æ®çš„完整性,和 -- 对困难的或者难以é‡çŽ°çš„ bug,收集解决方案中å¯èƒ½æç¤ºçš„统计数æ®ã€‚ +The kinds of experiments you will have to perform include: -我ä¸è®¤ä¸ºåœ¨è¿™ç¯‡æ–‡ç« é‡Œæˆ‘å¯ä»¥è®²è¿°å®žéªŒçš„设计,你会在实践中学习到这方é¢çš„知识。然而,我å¯ä»¥æä¾›ä¸¤ç‚¹å»ºè®®ï¼š +- Testing systems with small examples to verify that they conform to the documentation or to understand their response when there is no documentation, +- Testing small code changes to see if they actually fix a bug, +- Measuring the performance of a system under two different conditions due to imperfect knowledge of their performance characteristics, +- Checking the integrity of data, and +- Collecting statistics that may hint at the solution to difficult or hard-to-repeat bugs. -第一,对你的å‡è®¾æˆ–è€…ä½ è¦æµ‹è¯•的断言è¦éžå¸¸æ¸…楚。把å‡è®¾å†™ä¸‹æ¥ä¹Ÿæ˜¯å¾ˆæœ‰ç”¨çš„,尤其是如果你有点迷惑或者与其他人åˆä½œæ—¶ã€‚ +I don't think in this essay I can explain the design of experiments; you will have to study and practice. However, I can offer two bits of advice. -你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验尽é‡åŽ»æä¾›æœ€å¤šçš„ä¿¡æ¯ã€‚但ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šè®©å®žéªŒä¿æŒç®€å•å˜çš„å›°éš¾ - 你必须通过ç»éªŒæ¥æå‡è¿™ç§åˆ¤æ–­çš„能力。 +First, try to be very clear about your hypothesis, or the assertion that you are trying to test. It also helps to write the hypothesis down, especially if you find yourself confused or are working with others. -Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why Estimation is Important.md) +You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. + +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md index 14e1080..fb30975 100644 --- a/zh/1-Beginner/README.md +++ b/zh/1-Beginner/README.md @@ -1,27 +1,27 @@ -# 1. 入门 +# 1. Beginner -- 个人技能 - - [学会 Debug](Personal-Skills/01-Learn To Debug.md) - - [如何通过分割问题 Debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除一个错误](Personal-Skills/03-How to Remove an Error.md) - - [如何使用日志调试](Personal-Skills/04-How to Debug Using a Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How to Understand Performance Problems.md) - - [如何解决性能问题](Personal-Skills/06-How to Fix Performance Problems.md) - - [如何优化循环](Personal-Skills/07-How to Optimize Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How to Deal with IO Expense.md) - - [如何管ç†å†…å­˜](Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [如何学习设计技能](Personal-Skills/11-How to Learn Design Skills.md) - - [如何进行实验](Personal-Skills/12-How to Conduct Experiments.md) -- 团队技能 - - [为什么预估很é‡è¦](Team-Skills/01-Why Estimation is Important.md) - - [如何预估编程时间](Team-Skills/02-How to Estimate Programming Time.md) - - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How to Find Out Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How to Utilize People as Information Sources.md) - - [如何优雅地写文档](Team-Skills/05-How to Document Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How to Work with Poor Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How to Use Source Code Control.md) - - [如何进行å•元测试](Team-Skills/08-How to Unit Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take Breaks when Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How to Recognize When to Go Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How to Deal with Difficult People.md) +- Personal Skills + - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) +- Team Skills + - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) + - [How to Deal with Difficult People](Team-Skills/11-How to Deal with Difficult People.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 250fac9..39ffba8 100644 --- a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -1,14 +1,15 @@ -# 为什么评估很é‡è¦ +# Why Estimation is Important -为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 +To get a working software system in active use as quickly as possible requires not only planning the development, but also planning the documentation, deployment, and marketing. In a commercial project it also requires sales and finance. Without predictability of the development time, it is impossible to plan these effectively. -好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…的情况,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地想: -> 我估计,如果我确实ç†è§£äº†è¿™ä¸ªé—®é¢˜ï¼Œæˆ‘们在5周内有50%çš„å¯èƒ½å®Œæˆä»»åŠ¡ï¼ˆå¦‚æžœåœ¨æ­¤æœŸé—´æ²¡æœ‰äººå¹²æ‰°æˆ‘ä»¬çš„è¯ï¼‰ã€‚ +Good estimation provides predictability. Managers love it, as well they should. The fact that it is impossible, both theoretically and practically, to predict accurately how long it will take to develop software is often lost on managers. We are asked to do this impossible thing all the time, and we must face up to it honestly. However, it would be dishonest not to admit the impossibility of this task, and when necessary, explain it. There is a lot of room for miscommunication about estimates, as people have a startling tendency to think wishfully that the sentence: -真实的å«ä¹‰æ˜¯ï¼š +> I estimate that, if I really understand the problem, it is about 50% likely that we will be done in five weeks (if no one bothers us during that time). -> 我ä¿è¯ä»ŽçŽ°åœ¨å¼€å§‹äº”ä¸ªæ˜ŸæœŸå†…å®Œæˆä»»åŠ¡ã€‚ +really means: -这个常è§çš„解释问题需è¦ä½ ä¸“门与你的 boss å’Œé¡¾å®¢è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡ä»–们对你æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ +> I promise to have it all done five weeks from now. -Next [如何估计编程时间](02-How to Estimate Programming Time.md) +This common interpretation problem requires that you explicitly discuss what the estimate means with your boss or customer as if they were a simpleton. Restate your assumptions, no matter how obvious they seem to you. + +Next [How to Estimate Programming Time](02-How to Estimate Programming Time.md) diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 4126af5..b9be737 100644 --- a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -1,21 +1,21 @@ -# 如何评估编程时间 +# How to Estimate Programming Time -评估需è¦å®žè·µï¼Œä¹Ÿéœ€è¦åŠ³åŠ¨ã€‚å› ä¸ºå®ƒéœ€è¦èŠ±å¦‚æ­¤é•¿çš„æ—¶é—´ä»¥è‡³äºŽè¯„ä¼°è¯„ä¼°çš„æ—¶é—´å¯èƒ½æ˜¯ä¸€ä¸ªå¥½ä¸»æ„ï¼Œå°¤å…¶æ˜¯ä½ è¢«è¦æ±‚去评估一些巨大的事情。 +Estimation takes practice. It also takes labour. It takes so much labour it may be a good idea to estimate the time it will take to make the estimate, especially if you are asked to estimate something big. -å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且是渴望愉悦的,而åœä¸‹æ¥å½“然会让他们ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 +When asked to provide an estimate of something big, the most honest thing to do is to stall. Most engineers are enthusiastic and eager to please, and stalling certainly will displease the stalled. But an on-the-spot estimate probably won't be accurate and honest. -åœä¸‹æ¥æ—¶ï¼Œä½¿å¾—è€ƒè™‘ä¸€äº›äº‹æƒ…æˆ–è€…ä¸ºä»»åŠ¡é‡æ–°å®šåž‹æˆä¸ºå¯èƒ½ã€‚如果政策压力å…许,这是执行评估的最准确的方å¼ï¼Œå¹¶ä¸”它会产生确实的进度。 +While stalling, it may be possible to consider doing or prototyping the task. If political pressure permits, this is the most accurate way of producing the estimate, and it makes real progress. -在没有时间åšè°ƒæŸ¥çš„æ—¶å€™ï¼Œä½ é¦–先应该éžå¸¸æ¸…晰地建立评估的å«ä¹‰ã€‚é¦–å…ˆé‡æ–°é˜è¿°è¦è¯„估的内容和你编写的评估的最åŽéƒ¨åˆ†ã€‚在你准备编写评估的时候应该把这项任务分解为一个个更å°çš„å¾ªåºæ¸è¿›çš„任务,并且使æ¯ä¸ªå°ä»»åŠ¡éœ€è¦çš„æ—¶é—´ä¸è¶…è¿‡ä¸€å¤©ï¼ˆç†æƒ³æƒ…况是æ¯ä¸ªä»»åŠ¡çš„é•¿åº¦æœ€å¤šä¸ºä¸€å¤©ï¼‰ã€‚æœ€é‡è¦çš„事情是ä¸è¦æ¼æŽ‰ä»»ä½•事情。例如,文档,测试,规划的时间,与其他å°ç»„交æµçš„æ—¶é—´ï¼Œè¿˜æœ‰åº¦å‡æ—¶é—´ï¼Œè¿™äº›éƒ½æ˜¯å¾ˆé‡è¦çš„。如果你æ¯å¤©éƒ½è¦èŠ±æ—¶é—´å’Œä¸€äº›å‚»é€¼äº¤æµï¼Œåœ¨è¯„估里为这件事情划一个明确的时间界é™ã€‚这能让你的boss对于你将è¦èŠ±è´¹çš„æœ€å°‘æ—¶é—´æœ‰äº†ä¸€ä¸ªè®¤è¯†ï¼Œå¹¶ä¸”å¯èƒ½ç»™ä½ æ›´å¤šçš„æ—¶é—´ã€‚ +When not possible to take the time for some investigation, you should first establish the meaning of the estimate very clearly. Restate that meaning as the first and last part of your written estimate. Prepare a written estimate by de-constructing the task into progressively smaller subtasks until each small task is no more than a day; ideally at most in length. The most important thing is not to leave anything out. For instance, documentation, testing, time for planning, time for communicating with other groups, and vacation time are all very important. If you spend part of each day dealing with knuckleheads, put a line item for that in the estimate. This gives your boss visibility into what is using up your time at a minimum, and might get you more time. -我认识一些会éšå¼åœ°å¡«å……评估时间的好的程åºå‘˜ï¼Œä½†æˆ‘推èä½ ä¸è¦è¿™æ ·åšã€‚填充的一个结果是你å¯èƒ½ä¼šè€—尽别人对你的信任。例如,一个工程师å¯èƒ½ä¸ºä¸€ä¸ªå°†è¦èŠ±è´¹ä¸€å¤©çš„å·¥ä½œè¯„ä¼°ä¸ºä¸‰å¤©ã€‚è¿™ä¸ªå·¥ç¨‹å¸ˆå¯èƒ½è®¡åˆ’花两天去为代ç å†™æ–‡æ¡£ï¼Œæˆ–者花两天去åšä¸€äº›å…¶ä»–æœ‰ç”¨çš„å·¥ç¨‹ã€‚ä½†å½“ä»»åŠ¡åœ¨ä¸€å¤©å†…å®Œæˆæ—¶ï¼Œå¦‚果它在那天暴露出æ¥çš„è¯ï¼Œè¿™æ˜¯å¯ä»¥å¯Ÿè§‰çš„ï¼Œå¹¶ä¸”æ¾æ‡ˆæˆ–高估的表现会出现。为你确实è¦åšçš„事情åšåˆé€‚的剖æžè¦å¥½å¾—多。如果写文档需è¦èб䏤å€äºŽç¼–程的时间,并且评估的结果就是这样的,让这对管ç†è€…å¯è§å°±èƒ½å¾—到巨大的好处。 +I know good engineers who pad estimates implicitly, but I recommend that you do not. One of the results of padding is trust in you may be depleted. For instance, an engineer might estimate three days for a task that she truly thinks will take one day. The engineer may plan to spend two days documenting it, or two days working on some other useful project. But it will be detectable that the task was done in only one day (if it turns out that way), and the appearance of slacking or overestimating is born. It's far better to give proper visibility into what you are actually doing. If documentation takes twice as long as coding and the estimate says so, tremendous advantage is gained by making this visible to the manager. -相å,显å¼å¡«å……。如果一个任务å¯èƒ½èŠ±ä¸€å¤©ï¼Œä½†å¦‚æžœä½ çš„æ–¹æ³•æ²¡æœ‰ç”Ÿæ•ˆï¼Œå¯èƒ½èбå天 - 用æŸç§æ–¹å¼åœ¨ä½ çš„评估里记下这个情况,å¦åˆ™ï¼Œè‡³å°‘为这个å¯èƒ½æ€§ï¼Œè¯„估一个æƒé‡è®¡ç®—å¯èƒ½çš„æ—¶é—´ã€‚任何你å¯ä»¥è¯†åˆ«å’Œè¿›è¡Œè¯„估的风险因素应该在时间表里被体现。一个人ä¸å¤ªå¯èƒ½åœ¨ç»™å®šçš„任何星期都生病。但一个有很多工程师的大项目å¯èƒ½ä¼šæœ‰ä¸€äº›ç–¾ç—…æ—¶é—´ï¼Œè¿˜æœ‰ä¼‘å‡æ—¶é—´ã€‚或者,是å¦ä¼šæœ‰å…¬å¸å†…部的强制培训研讨会的å¯èƒ½æ€§å‘¢ï¼Ÿå¦‚果这å¯ä»¥é¢„估,也把它算进æ¥ã€‚当然,还有一些未知的未知,或者 [unk-unk](../../4-Glossary.md) 。Unk-unk 在定义上是ä¸èƒ½è¢«ç‹¬ç«‹è¯„估的。你å¯ä»¥å°è¯•为所有 unk-unk 创建一个全局的界线,或者用你与你的 boss 交æµå¥½çš„å…¶ä»–æ–¹å¼å޻处ç†å®ƒä»¬ã€‚然而,你ä¸èƒ½è®©ä½ çš„ boss å¿˜è®°å®ƒä»¬çš„å­˜åœ¨ã€‚åœ¨æŠŠè¯„ä¼°å˜æˆæ—¶é—´è¡¨çš„过程中,把它们é—忘是超级容易的。 +Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate to should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. -在一个团队环境里,你应该让任务的执行者去åšè¿™ç§è¯„估,而且你们应该在团队范围内对评估的结果达æˆä¸€è‡´ã€‚人与人在技术,ç»éªŒï¼Œå‡†å¤‡å’Œä¿¡å¿ƒä¸Šéƒ½æœ‰å¾ˆå¤šçš„ä¸åŒã€‚当一个牛逼的程åºå‘˜ä¸ºä»–自己评估了时间,然åŽä¸€äº›å¼±ä¸€ç‚¹çš„程åºå‘˜è¢«è¿™ç§è¯„ä¼°çº¦æŸæ—¶ï¼Œç¾éš¾é™ä¸´äº†ã€‚整个团队在一个一行一行的细致的评估计划上å–得的一致,é˜è¿°äº†å›¢é˜Ÿçš„ç†è§£ï¼Œä»¥åŠå…许在策略上对资æºçš„釿–°åˆ†é…的机会(比如,把负担从弱一点的团队æˆå‘˜é‚£é‡Œç§»åˆ°å¼ºä¸€ç‚¹çš„æˆå‘˜é‚£é‡Œï¼‰ã€‚ +In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate. The act of having the whole team agree on a line-by-line basis to the estimate clarifies the team understanding, as well as allowing the opportunity for tactical reassignment of resources (for instance, shifting burden away from weaker team members to stronger). -如果有ä¸èƒ½è¯„ä¼°çš„å¤§é£Žé™©ï¼Œä½ åº”è¯¥æ— è®ºå¦‚ä½•éƒ½è¦æå‡ºæ¥ï¼Œè¿™æ˜¯ä½ çš„责任,这让æ‰èƒ½è®©ç®¡ç†è€…ä¸ä¼šåœ¨è¿™ä¸ªé—®é¢˜ä¸Šåšæ‰¿è¯ºï¼Œä»¥å…在风险å‘生时让管ç†è€…éš¾å ªã€‚è¿™ç§æƒ…况下,任何需è¦çš„事情都有希望被执行æ¥å‡å°è¿™ä¸ªé£Žé™©ã€‚ +If there are big risks that cannot be evaluated, it is your duty to state so forcefully enough that your manager does not commit to them and then become embarrassed when the risk occurs. Hopefully in such a case whatever is needed will be done to decrease the risk. -如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 +If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. -Next [如何å‘现信æ¯](03-How to Find Out Information.md) +Next [How to Find Out Information](03-How to Find Out Information.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md index 72928aa..b1f0e45 100644 --- a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -1,19 +1,19 @@ -# 如何å‘çŽ°ä¿¡æ¯ +# How to Find Out Information -你所æœå¯»çš„事情的本质决定了你应该如何去寻找它。 +The nature of what you need to know determines how you should find it. -如果你需è¦å®¢è§‚的而且容易辨认的*关于具体事物*的信æ¯ï¼Œä¾‹å¦‚一个软件的最新补ä¸ç‰ˆæœ¬ï¼Œå¯ä»¥åœ¨Internetæœç´¢ï¼Œç¤¼è²Œçš„询问很多的人,或者å‘起一个讨论组。ä¸è¦åœ¨ç½‘上æœç´¢ä»»ä½•带有观点或主观解释的东西:能够抵达真相的概率太低了。 +If you need information *about concrete things* that are objective and easy to verify, for example the latest patch level of a software product, ask a large number of people politely by searching the internet for it or by posting on a discussion group. Don't search on the internet for anything that smacks of either opinion or subjective interpretation: the ratio of drivel to truth is too high. -如果你需è¦â€œä¸€äº›ä¸»è§‚的普é知识â€ï¼Œäººä»¬å¯¹è¿™äº›ä¸œè¥¿å·²æœ‰çš„æ€è€ƒåŽ†å²ï¼Œé‚£å°±å޻图书馆å§ã€‚例如,想è¦äº†è§£æ•°å­¦ï¼Œè˜‘è‡æˆ–ç€ç¥žç§˜ä¸»ä¹‰ï¼Œå°±å޻图书馆å§ã€‚ +If you need *general knowledge about something subjective* the history of what people have thought about it, go to the library (the physical building in which books are stored). For example, to learn about math or mushrooms or mysticism, go to the library. -如果你需è¦çŸ¥é“*如何åšä¸€äº›ç碎的事情*,找两三本关于这个主题的书,仔细阅读。你å¯ä»¥ä»Žç½‘络上学到如何åšå¥½è¿™äº›ç碎的事情,比如安装一个软件包。你甚至å¯ä»¥å­¦åˆ°ä¸€äº›é‡è¦çš„东西,例如好的编程技术,但相比读一本纸质书的相关部分,你很容易花更多时间在æœç´¢å’Œå¯¹ç»“果排åºï¼Œä»¥åŠè¯„估结果的æƒå¨æ€§ã€‚ +If you need to know *how to do something that is not trivial* get two or three books on the subject and read them. You might learn how to do something trivial, like install a software package, from the Internet. You can even learn important things, like good programming technique, but you can easily spend more time searching and sorting the results and attempting to divine the authority of the results than it would take to read the pertinent part of a solid book. -如果你需è¦*å¯èƒ½æ²¡æœ‰äººçŸ¥é“的信æ¯*,例如,“这个新å“ç‰Œçš„è½¯ä»¶åœ¨æµ·é‡æ•°æ®çš„æƒ…况下能工作å—â€ï¼Œä½ ä»ç„¶å¿…须在网络和图书馆里æœç´¢ã€‚在这些选项都完全竭尽åŽï¼Œä½ å¯èƒ½éœ€è¦è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥æžæ¸…楚这个问题。 +If you need *information that no one else could be expected to know* for example, ‘does this software that is brand new work on gigantic data sets?’, you must still search the internet and the library. After those options are completely exhausted, you may design an experiment to ascertain it. -如果你需è¦ä¸€äº›è€ƒè™‘了æŸäº›ç‰¹æ®ŠçŽ¯å¢ƒçš„è§‚ç‚¹æˆ–ä¼°å€¼ï¼Œå’Œä¸€ä¸ªä¸“å®¶èŠèŠã€‚例如,如果你想è¦çŸ¥é“用 Lisp 构建一个现代数æ®åº“管ç†ç³»ç»Ÿæ˜¯å¦æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,你应该和一个 Lisp 专家和一个数æ®åº“专家èŠä¸€èŠã€‚ +If you want an opinion or a value judgement that takes into account some unique circumstance, talk to an expert. For instance, if you want to know whether or not it is a good idea to build a modern database management system in LISP, you should talk to a LISP expert and a database expert. -如果你想è¦çŸ¥é“*它具体是怎样的*,比如一个还未å‘布的在一个特定程åºä¸Šæ›´å¿«çš„算法,跟一些在这个领域工作的人èŠèŠã€‚ +If you want to know *how likely it is* that a faster algorithm for a particular application exists that has not yet been published, talk to someone working in that field. -如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且åšäº†æ‰€æœ‰è¯¥åšçš„å‡†å¤‡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒåŒ…括好的和å的,但你ä»å¯èƒ½çŠ¹è±«ä¸å†³ã€‚你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 +If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. -Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How to Utilize People as Information Sources.md) +Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index 51ef771..f62a077 100644 --- a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -1,15 +1,15 @@ -# å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº +# How to Utilize People as Information Sources -å°Šé‡å…¶ä»–æ¯ä¸ªäººçš„æ—¶é—´ï¼Œä¸Žä½ çš„æ—¶é—´ç›¸å¹³è¡¡ã€‚问别人问题比得到答案能获得更多。人们会从你的存在和倾å¬ç‰¹å®šçš„问题从你身上学到东西。你也å¯ä»¥ç”¨åŒæ ·çš„æ–¹å¼ä»Žåˆ«äººèº«ä¸Šå­¦ä¹ åˆ°ä¸œè¥¿ï¼Œä½ å¯èƒ½å­¦åˆ°ä½ æ­£åœ¨æœå¯»çš„东西的答案。这通常比你的问题更加é‡è¦å¾—多。 +Respect every person's time and balance it against your own. Asking someone a question accomplishes far more than just receiving the answer. The person learns about you, both by enjoying your presence and hearing the particular question. You learn about the person in the same way, and you may learn the answer you seek. This is usually far more important than your question. -然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的 boss 交谈而éžå’Œä½  boss çš„ boss 交谈,但你å¶å°”也å¯ä»¥å’Œä½  boss çš„ boss 交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ +However, the value of this diminishes the more you do it. You are, after all, using the most precious commodity a person has: their time. The benefits of communication must be weighed against the costs. Furthermore, the particular costs and benefits derived differ from person to person. I strongly believe that an executive of 100 people should spend five minutes a month talking to each person in her organization, which would be about 5% of their time. But ten minutes might be too much, and five minutes is too much if they have one thousand employees. The amount of time you spend talking to each person in your organization depends on their role (more than their position). You should talk to your boss more than your boss's boss, but you should talk to your boss's boss a little. It may be uncomfortable, but I believe you have a duty to talk a little bit to all your superiors, each month, no matter what. -基本的规则是,æ¯ä¸ªä¸Žä½ äº¤è°ˆçš„人都能ç¨å¾®å—益,他们与你èŠå¾—更多,他们能获得的收益越少。你的应该给他们æä¾›è¿™ç§å¥½å¤„,还有得到与他们交æµçš„好处,平衡这ç§å¥½å¤„与花费的时间。 +The basic rule is that everyone benefits from talking to you a little bit, and the more they talk to you, the less benefit they derive. It is your job to provide them this benefit, and to get the benefit of communicating with them, keeping the benefit in balance with the time spent. -å°Šé‡ä½ è‡ªå·±çš„æ—¶é—´æ˜¯å¾ˆé‡è¦çš„。如果和一些人èŠå¤©ï¼Œå³ä½¿è¿™ä¼šæ¶ˆè€—他们的时间,结果会节çœä½ å¾ˆå¤šçš„æ—¶é—´ï¼Œé‚£ä¹ˆä½ åº”该这样åšï¼Œé™¤éžä½ è®¤ä¸ºä»–们的时间在这个因素上,对整个集体,比你的时间更加有价值。 +It is important to respect your own time. If talking to someone, even if it will cost them time, will save you a great deal of time, then you should do it unless you think their time is more valuable than yours, to the tribe, by that factor. -ä¸€ä¸ªå¥‡æ€ªçš„ä¾‹å­æ˜¯æš‘期实习生。一个处于高技术å«é‡ä½ç½®çš„æš‘期实习生ä¸èƒ½è¢«æœŸæœ›åŽ»å®Œæˆå¤ªå¤šä¸œè¥¿ï¼›ä»–们å¯èƒ½ä¼šæŠŠæ¯ä¸ªäººçº ç¼ åˆ°åœ°ç‹±ã€‚但为什么这是被å…许的呢?因为被纠缠的人从实习生身上å¯ä»¥æŽ¥æ”¶åˆ°ä¸€äº›é‡è¦çš„东西。他们得到了一点炫耀的机会,他们å¯èƒ½æœ‰æœºä¼šåŽ»å¬åˆ°ä¸€äº›æ–°çš„æ€æƒ³ï¼Œä»–ä»¬æœ‰æœºä¼šå¯ä»¥ä»Žä¸åŒçš„角度去看问题。他们å¯èƒ½ä¼šå°è¯•æ‹›è˜è¿™ä¸ªå®žä¹ ç”Ÿï¼Œä½†å³ä½¿ä¸æ˜¯è¿™æ ·ï¼Œä»–们也获得了很多。 +A strange example of this is the summer intern. A summer intern in a highly technical position can't be expected to accomplish too much; they can be expected to pester the hell out of everybody there. So why is this tolerated? Because the pestered are receiving something important from the intern. They get a chance to show-off a little. They get a chance to hear some new ideas, maybe; they get a chance to see things from a different perspective. They may also be trying to recruit the intern, but even if this is not the case there is much to gain. -如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但å´è®©æˆ‘通过这么å°çš„付出就对公å¸çš„é”€å”®é˜Ÿä¼æœ‰äº†æ·±åˆ»çš„å°è±¡ã€‚ +You should ask people for a little bit of their wisdom and judgement whenever you honestly believe they have something to say. This flatters them and you will learn something and teach them something. A good programmer does not often need the advice of a Vice President of Sales, but if you ever do, you be sure to ask for it. I once asked to listen in on a few sales calls to better understand the job of our sales staff. This took no more than 30 minutes but I think that small effort made an impression on the sales force. -Next [如何优雅地写文档](05-How to Document Wisely.md) +Next [How to Document Wisely](05-How to Document Wisely.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md index b17d1d6..895062f 100644 --- a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,20 +1,20 @@ -# å¦‚ä½•ç¿æ™ºåœ°å†™æ–‡æ¡£ +# How to Document Wisely -人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥å¥½ä¸€ç‚¹çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 +Life is too short to write crap nobody will read; if you write crap, nobody will read it. Therefore a little good documentation is best. Managers often don't understand this, because even bad documentation gives them a false sense of security that they are not dependent on their programmers. If someone absolutely insists that you write truly useless documentation, say 'yes' and quietly begin looking for a better job. -没有其他事情比精确估计 æŠŠå¥½çš„æ–‡æ¡£è½¬ä¸ºæ”¾æ¾æ–‡æ¡£è¦æ±‚的估计 æ›´ä¸ºæœ‰æ•ˆçŽ‡ã€‚çœŸç›¸æ˜¯å†·é…·è€Œè‰°éš¾çš„ï¼šæ–‡æ¡£ï¼Œå°±åƒæµ‹è¯•,会花比开å‘代ç å¤šå‡ å€çš„æ—¶é—´ã€‚ +There's nothing quite as effective as putting an accurate estimate of the amount of time it will take to produce good documentation into an estimate to slacken the demand for documentation. The truth is cold and hard: documentation, like testing, can take many times longer than developing code. -首先,写好的文档是好的写作。我建议你找一些关于写作的事情,学习,练习他们。但å³ä½¿ä½ æ˜¯ä¸€ä¸ªç³Ÿç³•的写手或者对你需è¦å†™æ–‡æ¡£çš„语言掌æ¡ä¸å¥½ï¼Œè¿™æ¡é»„金规则是你真正需è¦çš„ï¼šå·±æ‰€ä¸æ¬²ï¼Œå‹¿æ–½äºŽäººã€‚花时间去确实地æ€è€ƒè°ä¼šè¯»ä½ çš„æ–‡æ¡£ï¼Œä»–们从文档中想è¦èŽ·å¾—çš„çœŸæ­£çš„ä¸œè¥¿æ˜¯ä»€ä¹ˆï¼Œå¹¶ä¸”ä½ å¯ä»¥å¦‚何把这些东西交给他们。如果你这样åšï¼Œä½ å°†ä¼šå˜æˆä¸€ä¸ªè¶…è¿‡å¹³å‡æ°´å¹³çš„æ–‡æ¡£ç¼–写者,和一个好的程åºå‘˜ã€‚ +Writing good documentation is, first of all, good writing. I suggest you find books on writing, study them, and practice. But even if you are a lousy writer or have poor command of the language in which you must document, the Golden Rule is all you really need: 'Do unto others as you would have them do unto you.' Take time to really think about who will be reading your documentation, what they need to get out of it, and how you can teach that to them. If you do that, you will be an above average documentation writer, and a good programmer. -当代ç å¯ä»¥è‡ªæˆæ–‡æ¡£æ—¶ï¼Œä¸Žæä¾›æ–‡æ¡£ç»™éžç¨‹åºå‘˜çœ‹ç›¸å,我认识的最好的程åºå‘˜ä»¬æœ‰è¿™æ ·ä¸€ä¸ªæ™®é的观点:编写具有自我解释功能的代ç ï¼Œä»…在你ä¸èƒ½é€šè¿‡ä»£ç æ¸…晰解释其å«ä¹‰çš„地方,æ‰å†™æ³¨é‡Šã€‚æœ‰ä¸¤ä¸ªå¥½çš„åŽŸå› ï¼šç¬¬ä¸€ï¼Œä»»ä½•äººéœ€è¦æŸ¥çœ‹ä»£ç çº§åˆ«çš„æ–‡æ¡£å¤§å¤šæ•°æƒ…况下都能够并且更喜欢阅读代ç ã€‚ä¸å¯å¦è®¤çš„,有ç»éªŒçš„程åºå‘˜ä¼¼ä¹Žæ¯”åˆå­¦è€…更容易åšåˆ°è¿™ä»¶äº‹ï¼Œç„¶è€Œï¼Œæ›´é‡è¦çš„æ˜¯ï¼Œæ²¡æœ‰æ–‡æ¡£çš„è¯ï¼Œä»£ç å’Œæ–‡æ¡£ä¸ä¼šæ˜¯è‡ªç›¸çŸ›ç›¾çš„。æºä»£ç æœ€ç³Ÿç³•的情况下å¯èƒ½æ˜¯é”™è¯¯å¹¶ä¸”令人困惑的。没有完美编写的文档,å¯èƒ½è¯´è°Žï¼Œè¿™å¯ç³Ÿç³•一åƒå€ã€‚ +When it comes to actually documenting code itself, as opposed to producing documents that can actually be read by non-programmers, the best programmers I've ever known hold a universal sentiment: write self-explanatory code and only document code in the places that you cannot make it clear by writing the code itself. There are two good reasons for this. First, anyone who needs to see code-level documentation will in most cases be able to and prefer to read the code anyway. Admittedly, this seems easier to the experienced programmer than to the beginner. More importantly however, is that the code and the documentation cannot be inconsistent if there is no documentation. The source code can at worst be wrong and confusing. The documentation, if not written perfectly, can lie, and that is a thousand times worse. -负责任的程åºå‘˜ä¹Ÿä¸èƒ½è®©è¿™ä»¶äº‹å˜å¾—更简å•些。如何写自解释的代ç ï¼Ÿé‚£æ„味ç€ä»€ä¹ˆï¼Ÿå®ƒæ„味ç€ï¼š +This does not make it easier on the responsible programmer. How does one write self-explanatory code? What does that even mean? It means: -- 编写知é“别人会去阅读的代ç (译者注:编写给人看的代ç ) -- è¿ç”¨é»„金法则 -- 选择直接的解决方案,å³ä½¿ä½ å¯ä»¥æ›´å¿«åœ°èŽ·å¾—å¦ä¸€ä¸ªè§£å†³æ–¹æ¡ˆ -- 牺牲那些å¯èƒ½æ··æ·†ä»£ç çš„å°çš„优化 -- 为读者考虑,把你ç贵的时间花在让她更加容易阅读的事情上,并且 -- 永远ä¸è¦ä½¿ç”¨è¿™æ ·çš„å‡½æ•°åæ¯”如 `foo`,`bar`, 或 `doIt`! +- Writing code knowing that someone will have to read it; +- Applying the golden rule; +- Choosing a solution that is straightforward, even if you could get by with another solution faster; +- Sacrificing small optimizations that obfuscate the code; +- Thinking about the reader and spending some of your precious time to make it easier on her; and +- Not ever using a function name like `foo`,`bar`, or `doIt`! -Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How to Work with Poor Code.md) +Next [How to Work with Poor Code](06-How to Work with Poor Code.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index a1d1f62..431ce28 100644 --- a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -1,11 +1,11 @@ -# 如何在糟糕的代ç ä¸Šå·¥ä½œ +# How to Work with Poor Code -工作在别人写的糟糕的代ç ä¸Šæ˜¯å¸¸æœ‰çš„事。ä¸è¦æŠŠä»–们想得太糟,直到你用他们的鞋å­èµ°è·¯æ—¶ã€‚他们å¯èƒ½è¢«è¦æ±‚éžå¸¸è‡ªè§‰åœ°å¿«é€Ÿå®Œæˆä¸€äº›ä¸œè¥¿æ¥æ»¡è¶³æ—¶é—´è¡¨çš„压力。ä¸ç®¡ä¹‹å‰å‘ç”Ÿäº†ä»€ä¹ˆï¼Œä¸ºäº†åœ¨ä¸æ¸…晰的代ç ä¸Šå·¥ä½œï¼Œä½ å¿…é¡»ç†è§£å®ƒã€‚ç†è§£å®ƒéœ€è¦èŠ±è´¹ä¸€äº›å­¦ä¹ æ—¶é—´ï¼Œä½ å¿…é¡»åšæŒä»Žæ—¶é—´è¡¨ä¸­æŸäº›éƒ¨åˆ†åˆ’出一部分时间æ¥åšè¿™ä»¶äº‹ã€‚为了ç†è§£å®ƒä»¬ï¼Œä½ å¿…须读æºä»£ç ï¼Œä½ å¯èƒ½éœ€è¦åœ¨ä¸Šé¢åšä¸€äº›å®žéªŒã€‚ +It is very common to have to work with poor quality code that someone else has written. Don't think too poorly of them, however, until you have walked in their shoes. They may have been asked very consciously to get something done quickly to meet schedule pressure. Regardless, in order to work with unclear code you must understand it. To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it. To understand it, you will have to read the source code. You will probably have to experiment with it. -å³ä½¿æ˜¯ä¸ºä½ è‡ªå·±ï¼Œç¼–写文档也是一个好的时机,因为å°è¯•为你的代ç ç¼–写文档会强迫你从你å¯èƒ½æ²¡æœ‰è€ƒè™‘过的角度æ€è€ƒï¼Œå¹¶ä¸”完æˆçš„æ–‡æ¡£å¯èƒ½ä¼šæœ‰ç”¨ã€‚当你在åšè¿™ä¸ªæ—¶ï¼Œè€ƒè™‘é‡å†™éƒ¨åˆ†æˆ–所有代ç ä¼šæ¶ˆè€—你什么东西。是å¦é‡å†™ä¸€éƒ¨åˆ†ä»£ç äº‹å®žä¸ŠçœŸçš„ä¼šèŠ‚çœæ—¶é—´ï¼Ÿä½ é‡å†™ä»£ç åŽä½ ä¼šæ›´ä¿¡ä»»å®ƒå—?在这里å°å¿ƒä½ çš„傲慢。如果你é‡å†™å®ƒï¼Œä½ å¤„ç†å®ƒä¼šæ›´å®¹æ˜“,但下一个必须阅读它的人是å¦çœŸçš„æ›´åŠ å®¹æ˜“ï¼Ÿå¦‚æžœä½ é‡å†™äº†ï¼Œæµ‹è¯•çš„è´Ÿæ‹…åœ¨å“ªé‡Œï¼Ÿé‡æ–°æµ‹è¯•çš„éœ€è¦æ˜¯å¦å¤§äºŽå¯èƒ½èŽ·å¾—çš„å¥½å¤„ï¼Ÿ +This is a good time to document, even if it is only for yourself, because the act of trying to document the code will force you to consider angles you might not have considered, and the resulting document may be useful. While you're doing this, consider what it would take to rewrite some or all of the code. Would it actually save time to rewrite some of it? Could you trust it better if you rewrote it? Be careful of arrogance here. If you rewrite it, it will be easier for you to deal with, but will it really be easier for the next person who has to read it? If you rewrite it, what will the test burden be? Will the need to re-test it outweigh any benefits that might be gained? -在任何对你没有编写的代ç çš„评估中,代ç çš„è´¨é‡ä¼šå½±å“你对风险问题的认识以åŠä¸€äº›æœªçŸ¥çš„事情。 +In any estimate that you make for work against code you didn't write, the quality of that code should affect your perception of the risk of problems and unk-unks. -铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡æ‰€å¸¦æ¥çš„好处。特别的,你å¯ä»¥å°è¯•去隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 +It is important to remember that abstraction and encapsulation, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. -Next [如何使用æºä»£ç æŽ§åˆ¶](07-How to Use Source Code Control.md) +Next [How to Use Source Code Control](07-How to Use Source Code Control.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 2cbbf50..91dbf5c 100644 --- a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,9 +1,9 @@ -# 如何使用æºä»£ç æŽ§åˆ¶ +# How to Use Source Code Control -æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼ˆåˆç§°ç‰ˆæœ¬æŽ§åˆ¶ç³»ç»Ÿï¼‰è®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ +Source code control systems (also known as Version Control Systems) let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. -我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 +I was late to appreciate the benefits of source code control systems but now I wouldn't live without one even on a one-person project. Generally they are necessary when you have team working on the same code base. However, they have another great advantage: they encourage thinking about the code as a growing, organic system. Since each change is marked as a new revision with a new name or number, one begins to think of the software as a visibly progressive series of improvements. I think this is especially useful for beginners. -使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。因æäº¤é”™è¯¯çš„代ç è€Œé™ä½Žä½ é˜Ÿå‹çš„å¼€å‘速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ +A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. -Next [如何进行å•元测试](08-How to Unit Test.md) +Next [How to Unit Test](08-How to Unit Test.md) diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md index 11aa2b7..c1dc402 100644 --- a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,9 +1,9 @@ -# 如何进行å•元测试 +# How to Unit Test -å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该如何被测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ +Unit testing, the testing of an individual piece of coded functionality by the team that wrote it, is a part of coding, not something different from it. Part of designing the code is designing how it will be tested. You should write down a test plan, even if it is only one sentence. Sometimes the test will be simple: 'Does the button look good?' Sometimes it will be complex: 'Did this matching algorithm return precisely the correct matches?' -无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现 bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 +Use assertion checking and test drivers whenever possible. This not only catches bugs early, but is very useful later on and lets you eliminate mysteries that you would otherwise have to worry about. -æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ +The Extreme Programming developers are writing extensively on unit testing effectively; I can do no better than to recommend their writings. -Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take Breaks when Stumped.md) +Next [Take Breaks when Stumped](09-Take Breaks when Stumped.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index 1f69cf5..c578991 100644 --- a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ -# 毫无头绪?,休æ¯ä¸€ä¸‹ +# Take Breaks when Stumped -没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ +When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. -Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How to Recognize When to Go Home.md) +Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index ce3b4e5..a6ae9b4 100644 --- a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,15 +1,16 @@ -# å¦‚ä½•è¯†åˆ«ä¸‹ç­æ—¶é—´ +# How to Recognize When to Go Home -è®¡ç®—æœºç¼–ç¨‹æ˜¯ä¸€ç§æ´»åŠ¨ä¹Ÿæ˜¯ä¸€ç§æ–‡åŒ–。ä¸å¹¸çš„äº‹å®žæ˜¯å®ƒä¸æ˜¯ä¸€ç§çœ‹é‡èº«å¿ƒå¥åº·çš„æ–‡åŒ–。从文化/历å²ç¼˜ç”±çœ‹ï¼ˆä¾‹å¦‚,在机器空载的晚上工作的需è¦ï¼‰ï¼Œè¿˜æœ‰å› ä¸ºè¶…过市场时间的压力和程åºå‘˜çš„缺ä¹ï¼Œè®¡ç®—机程åºå‘˜ä¼ ç»Ÿä¸Šæ€»æ˜¯è¿‡åº¦å·¥ä½œã€‚我ä¸è®¤ä¸ºä½ å¯ä»¥ç›¸ä¿¡ä½ å¬åˆ°çš„æ‰€æœ‰æ•…事,但我认为一周工作60å°æ—¶æ˜¯å¸¸è§çš„,50å°æ—¶æ›´å¤šçš„åƒä¸€ä¸ªæœ€å°å€¼ã€‚è¿™æ„味ç€å®žé™…总是比需è¦çš„æ—¶é—´èŠ±è´¹å¾—æ›´å¤šã€‚è¿™å¯¹ä¸€ä¸ªå¥½çš„ï¼Œä¸ä»…为他们自己负责而且为他们的åŒäº‹è´Ÿè´£çš„程åºå‘˜æ¥è¯´æ˜¯ä¸€ä¸ªä¸¥é‡çš„问题。你需è¦è¯†åˆ«ä»€ä¹ˆæ—¶å€™ä¸‹ç­ï¼Œæœ‰æ—¶å€™è¿˜è¦å»ºè®®å…¶ä»–人回家的时间。解决这个问题的固定规则ä¸å­˜åœ¨ï¼ŒæŠšå…»ä¸€ä¸ªå­©å­çš„å›ºå®šè§„åˆ™ä¹Ÿæ˜¯ï¼Œå‡ºäºŽåŒæ ·çš„原因---æ¯ä¸ªäººéƒ½æ˜¯ä¸åŒçš„。 +Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. -一周超过60ä¸ªå°æ—¶å·¥ä½œå¯¹æˆ‘æ¥è¯´æ˜¯éžå¸¸è¾›è‹¦çš„,我å¯ä»¥ç”³è¯·æŒºçŸ­çš„一段时间(大概是一周),有时候在我的预料中。我ä¸çŸ¥é“对一个人æ¥è¯´ä¸€å‘¨å·¥ä½œè¶…过60å°æ—¶æ˜¯å¦å…¬å¹³ï¼Œæˆ‘甚至ä¸çŸ¥é“40å°æ—¶æ˜¯å¦æ˜¯å…¬å¹³çš„。然而,我确定,如果你努力工作,å´åœ¨ä½ é¢å¤–工作的时间里获得了很少东西,这是很愚蠢的。对我个人æ¥è¯´ï¼Œæˆ‘认为åšä¸€ä¸ªæ‡¦å¤«ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜è¯¥åšçš„äº‹ã€‚é—æ†¾çš„æ˜¯ï¼Œäº‹å®žä¸Šï¼Œç¨‹åºå‘˜ç»å¸¸*被*è¦æ±‚åšä¸€ä¸ªæ‡¦å¤«æ¥ä¸ºä¸€äº›äººè¡¨æ¼”,例如一个ç»ç†æƒ³è¦ç»™æ€»ç»ç†ç•™ä¸‹æ·±åˆ»å°è±¡ã€‚程åºå‘˜ç»å¸¸å¯¹æ­¤å±ˆæœï¼Œå› ä¸ºä»–们希望开心,并且ä¸å–„æ‹’ç»ï¼Œä¸Žæ­¤ç›¸å的有四é“防护墙: -- å°½å¯èƒ½ä¸Žå…¬å¸é‡Œçš„任何人交æµï¼Œè¿™æ ·æ²¡äººå¯ä»¥è¯¯å¯¼æ€»ç»ç†æ­£åœ¨å‘生的事情; -- 学习明确而防御性地评估和规划,让æ¯ä¸ªäººçœ‹åˆ°æ—¶é—´è¡¨çš„内容以åŠå®ƒçš„立场; -- 学会拒ç»ï¼Œåœ¨å¿…è¦æ—¶ä½œä¸ºä¸€ä¸ªå›¢é˜Ÿæ‹’ç»ï¼Œå¹¶ä¸” -- 如果必须的è¯ï¼Œé€€å‡ºå›¢é˜Ÿ +Beyond 60 hours a week is an extraordinary effort for me, which I can apply for short periods of time (about one week), and that is sometimes expected of me. I don't know if it is fair to expect 60 hours of work from a person; I don't even know if 40 is fair. I am sure, however, that it is stupid to work so much that you are getting little out of that extra hour you work. For me personally, that's any more than 60 hours a week. I personally think a programmer should exercise noblesse oblige and shoulder a heavy burden. However, it is not a programmer's duty to be a patsy. The sad fact is programmers *are* often asked to be patsies in order to put on a show for somebody, for example a manager trying to impress an executive. Programmers often succumb to this because they are eager to please and not very good at saying no. There are four defences against this: -大多数程åºå‘˜æ˜¯å¥½çš„程åºå‘˜ï¼Œå¥½çš„程åºå‘˜æƒ³è¦åšå¾ˆå¤šä¸œè¥¿ã€‚为了åšåˆ°è¿™ç‚¹ï¼Œä»–们需è¦é«˜æ•ˆç®¡ç†ä»–们的时间。从一个问题中兴奋和深陷其中都有一定é‡çš„å¿ƒç†æƒ¯æ€§ã€‚许多程åºå‘˜å‘现他们在长久ä¸è¢«æ‰“æ‰°çš„ä¸€æ®µæ—¶é—´é‡Œèƒ½å¤Ÿä¿æŒå…´å¥‹å’Œé›†ä¸­æ³¨æ„力,这让他们能最好地工作。然而,人们必须ç¡è§‰ï¼Œå¹¶ä¸”有其他的责任。æ¯ä¸ªäººéœ€è¦æ‰¾åˆ°ä¸€ç§æ–¹å¼åŽ»æ»¡è¶³ä»–ä»¬çš„ç”Ÿç‰©èŠ‚å¥å’Œå·¥ä½œèŠ‚å¥ã€‚æ¯ä¸ªç¨‹åºå‘˜éœ€è¦åšä»»ä½•å¿…é¡»çš„äº‹æƒ…æ¥æä¾›é«˜æ•ˆçš„å·¥ä½œå‘¨æœŸï¼Œæ¯”å¦‚åªå‚加的æŸäº›æœ€å…³é”®çš„会议,以此ä¿ç•™ä¸€å®šçš„æ—¶é—´ã€‚ +- Communicate as much as possible with everyone in the company so that no one can mislead the executives about what is going on, +- Learn to estimate and schedule defensively and explicitly and give everyone visibility into what the schedule is and where it stands, +- Learn to say no, and say no as a team when necessary, and +- Quit if you have to. -因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 +Most programmers are good programmers, and good programmers want to get a lot done. To do that, they have to manage their time effectively. There is a certain amount of mental inertia associated with getting warmed-up to a problem and deeply involved in it. Many programmers find they work best when they have long, uninterrupted blocks of time in which to get warmed-up and concentrate. However, people must sleep and perform other duties. Each person needs to find a way to satisfy both their human rhythm and their work rhythm. Each programmer needs to do whatever it takes to procure efficient work periods, such as reserving certain days in which you will attend only the most critical meetings. -Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How to Deal with Difficult People.md) +Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. + +Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) \ No newline at end of file diff --git a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index e15794b..d9678e5 100644 --- a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -1,15 +1,15 @@ -# 如何与ä¸å¥½ç›¸å¤„的人相处 +# How to Deal with Difficult People -ä½ å¯èƒ½å¿…须和ä¸å¥½ç›¸å¤„的人相处。甚至å¯èƒ½ä½ æœ¬èº«å°±æ˜¯ä¸€ä¸ªä¸å¥½ç›¸å¤„的人。如果你是那ç§ä¸ŽåŒäº‹å’Œæƒå¨äººç‰©æœ‰è®¸å¤šçŸ›ç›¾çš„äººï¼Œä½ åº”è¯¥çæƒœè¿™ç§ç‹¬ç«‹æ‰€æš—示的东西,但需è¦åœ¨ä¸ç‰ºç‰²ä½ çš„æ™ºåŠ›æˆ–åŽŸåˆ™çš„å‰æä¸‹æé«˜ä½ çš„人际交往能力。 +You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. -åœ¨è¿™æ–¹é¢æ²¡æœ‰ä»€ä¹ˆç»éªŒ,或者先å‰ç”Ÿæ´»çš„行为模å¼åœ¨å·¥ä½œåœºåˆçš„ç»éªŒä¸èƒ½é€‚用的一些程åºå‘˜,对这ç§äº‹æƒ…会éžå¸¸å›°æ‰°ã€‚ä¸å¥½ç›¸å¤„的人ç»å¸¸ä¹ æƒ¯äºŽæ‹’ç»ï¼Œå¹¶ä¸”与他人相比,他们更ä¸å®¹æ˜“å—社交压力所影å“。关键是åˆé€‚地尊é‡ä»–们,而éžä½ å¯èƒ½æƒ³åšçš„事,但ä¸è¦å……分地满足他们想è¦çš„(译者注:他们想è¦çš„往往是过分的)。 +This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often inured to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. -程åºå‘˜å¿…须作为一个团队一起工作。当分歧出现时,它必须用æŸç§æ–¹å¼è§£å†³ï¼Œå®ƒä¸èƒ½è¢«é•¿æ—¶é—´æŒ‚起。ä¸å¥½ç›¸å¤„的人通常是æžåº¦èªæ˜Žçš„,并且有一些很有用的æ„è§å¯ä»¥å‘表。ä¸å¸¦å¯¹è¿™ä¸ªäººçš„åè§ï¼Œå€¾å¬å¹¶ç†è§£ä¸å¥½ç›¸å¤„的人是至关é‡è¦çš„。失败的交æµé€šå¸¸æ˜¯åˆ†æ­§çš„基础,但它有时候å¯ä»¥è¢«å·¨å¤§çš„è€å¿ƒç§»é™¤ã€‚å°è¯•冷é™è¯šæ³åœ°ä¿æŒäº¤æµï¼Œå¹¶ä¸”䏿ޥå—任何å¯èƒ½äº§ç”Ÿæ›´å¤§çŸ›ç›¾çš„引诱。在一个åˆç†çš„å°è¯•ç†è§£çš„周期åŽï¼Œå†åšå†³å®šã€‚ +Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. -ä¸è¦è®©ä¸€ä¸ªæ¶éœ¸å¼ºè¿«ä½ åšä½ æ‰€ä¸åŒæ„的事情。如果你是è€å¤§ï¼Œåšä½ è®¤ä¸ºæœ€å¥½çš„事情。ä¸è¦ä¸ºä»»ä½•个人因素åšå‡ºå†³å®šï¼Œå¹¶æ—¶åˆ»å‡†å¤‡å¥½ä¸ºä½ çš„决定åšå‡ºè§£é‡Šã€‚如果你是一个有ç€ä¸å¥½ç›¸å¤„çš„åŒäº‹çš„团队æˆå‘˜ï¼Œä¸è¦è®©è€å¤§çš„决定有任何个人影å“。如果没有按你的想法å‘展,全身心地按(已æˆäº‹å®žçš„)å¦ä¸€ç§æ–¹æ³•去åšã€‚ +Don't let a bully force you to do something you don't agree with. If you are the leader, do what you think is best. Don't make a decision for any personal reasons, and be prepared to explain the reasons for your decision. If you are a team-mate with a difficult person, don't let the leader's decision have any personal impact. If it doesn't go your way, do it the other way whole-heartedly. -ä¸å¥½ç›¸å¤„的人能够改å˜ä¸Žè¿›æ­¥ã€‚我曾亲眼目ç¹è¿™ç§æƒ…况,但这很稀少。然而,æ¯ä¸ªäººéƒ½æœ‰æš‚æ—¶çš„é«˜å…´ä¸Žå¤±è½æƒ…绪。 +Difficult people do change and improve. I've seen it with my own eyes, but it is very rare. However, everyone has transitory ups and downs. -æ¯ä¸ªç¨‹åºå‘˜ä½†å°¤å…¶æ˜¯é¢†å¯¼éƒ½ä¼šé¢ä¸´è¿™æ ·ä¸€ä¸ªæŒ‘战:让ä¸å¥½ç›¸å¤„çš„äººä¿æŒå®Œå…¨çš„忙碌。他们比别人更倾å‘于枯燥的工作,并且更能被动地å¿å—。 +One of the challenges that every programmer but especially leaders face is keeping the difficult person fully engaged. They are more prone to duck work and resist passively than others. -Next [进阶技能](../../2-Intermediate) +Next [Intermediate skills](../../2-Intermediate) \ No newline at end of file diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index f146765..4cbbf85 100644 --- a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -1,11 +1,11 @@ -# å¦‚ä½•ä¸Žæ—¶é—´åŽ‹åŠ›åšæ–—争 +# How to Fight Schedule Pressure -å‘布压力是快速推出好产å“çš„åŽ‹åŠ›ã€‚è¿™æ˜¯å¥½çš„ï¼Œå› ä¸ºå®ƒåæ˜ äº†å¸‚场事实,并且在æŸä¸ªæ„义上是å¥åº·çš„ã€‚æ—¶é—´åŽ‹åŠ›æ˜¯è¿«ä½¿ä¸€ä¸ªäº§å“æ›´å¿«åœ°æŽ¨å‡ºçš„压力,这是浪费的,ä¸å¥åº·çš„,并且太普é了。 +Time-to-market pressure is the pressure to deliver a good product quickly. It is good because it reflects a financial reality, and is healthy up to a point. Schedule pressure is the pressure to deliver something faster than it can be delivered and it is wasteful, unhealthy, and all too common. -时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–们对我们所åšçš„äº‹æƒ…ï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。看ä¸åˆ°åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一的事情是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ +Schedule pressure exists for several reasons. The people who task programmers do not fully appreciate what a strong work ethic we have and how much fun it is to be a programmer. Perhaps because they project their own behaviour onto us, they believe that asking for it sooner will make us work harder to get it there sooner. This is probably actually true, but the effect is very small, and the damage is very great. Additionally, they have no visibility into what it really takes to produce software. Not being able to see it, and not be able to create it themselves, the only thing they can do is see time-to-market pressure and fuss at programmers about it. -与时间压力斗争的方法是简å•地把它当åšå‘布压力,实现的方法是让å¯ç”¨åŠ³åŠ›ä¸Žäº§å“间的关系å˜å¾—逿˜Žã€‚æä¾›ä¸€ä¸ªè¯šå®žï¼Œç»†è‡´ï¼Œå¤§éƒ¨åˆ†å¯ç†è§£çš„å¯¹æ‰€æœ‰ç›¸å…³åŠ³åŠ›çš„ä¼°è®¡ï¼Œæ˜¯ä¸€ç§æœ€å¥½çš„实现方å¼ã€‚å…许åšå‡ºå¥½çš„管ç†å†³å®šä»¥æƒè¡¡å¯èƒ½çš„功能也是一个附加的好处。 +The key to fighting schedule pressure is simply to turn it into time-to-market pressure. The way to do this to give visibility into the relationship between the available labour and the product. Producing an honest, detailed, and most of all, understandable estimate of all the labour involved is the best way to do this. It has the added advantage of allowing good management decisions to be made about possible functionality trade-offs. -必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其他èŒä¸šä»»æ„所表现的。程åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构造了一个过程,我希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ +The key insight that the estimate must make plain is that labour is an almost incompressible fluid. You can't pack more into a span of time anymore than you can pack more water into a container over and above that container's volume. In a sense, a programmer should never say ‘no’, but rather to say ‘What will you give up to get that thing you want?’ The effect of producing clear estimates will be to increase the respect for programmers. This is how other professionals behave. Programmers' hard work will be visible. Setting an unrealistic schedule will also be painfully obvious to everyone. Programmers cannot be hoodwinked. It is disrespectful and demoralizing to ask them to do something unrealistic. Extreme Programming amplifies this and builds a process around it; I hope that every reader will be lucky enough to use it. -Next [如何ç†è§£ç”¨æˆ·](02-How to Understand the User.md) +Next [How to Understand the User](02-How to Understand the User.md) \ No newline at end of file diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 4f73816..1e3d1c0 100644 --- a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,17 +1,17 @@ -# 如何ç†è§£ç”¨æˆ· +# How to Understand the User -ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„bossç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š +It is your duty to understand the user, and to help your boss understand the user. Because the user is not as intimately involved in the creation of your product as you are, they behave a little differently: -- 用户通常会åšå‡ºç®€çŸ­çš„判断 -- 用户有他们自己的工作,他们主è¦ä¼šæ€è€ƒä½ çš„产å“中å°çš„æ”¹è¿›ï¼Œè€Œéžå¤§çš„æ”¹è¿› -- 用户看ä¸åˆ°ä½ çš„产å“çš„æ•´ä¸ªç”¨æˆ·ç”»åƒ +- The user generally makes short pronouncements. +- The user has their own job; they will mainly think of small improvements in your product, not big improvements. +- The user can't have a vision that represents the complete body of your product users. -你的责任是找出他们真实需è¦çš„东西,而éžä»–们说他们需è¦çš„东西,然而,更好的是,在你开始å‰ï¼Œå»ºè®®ä»–ä»¬ï¼Œè®©ä»–ä»¬åŒæ„你想åšçš„,就是他们真实想è¦çš„东西,但他们å¯èƒ½æ²¡æœ‰è¿™ç§æ„¿æ™¯ã€‚你对你自己的主æ„的信心是è¦çœ‹æƒ…å†µçš„ã€‚ä½ å¿…é¡»åŒæ—¶ä¸Žè‡ªå¤§å’Œé”™è¯¯çš„è°¦é€Šåšæ–—争去找出什么是人们真实想è¦çš„。这两ç§äººï¼Œæˆ–者åŒä¸€ä¸ªäººèº«ä¸Šä¸¤ç§æ€ç»´æ¨¡å¼ï¼Œä¸€åŒå’Œè°å·¥ä½œä¼šç»™å‡ºæœ€å¥½çš„æœºä¼šæ¥ç»™å‡ºæ­£ç¡®çš„æ„¿æ™¯ã€‚ +It is your duty to give them what they really want, not what they say they want. It is however, better to propose it to them and get them to agree that your proposal is what they really want before you begin, but they may not have the vision to do this. Your confidence in your own ideas about this should vary. You must guard against both arrogance and false modesty in terms of knowing what the customer really wants. Programmers are trained to design and create. Market researchers are trained to figure out what people want. These two kinds of people, or two modes of thought in the same person, working harmoniously together give the best chance of formulating the correct vision. -你在用户身上花费的时间更多,你就能够更好地ç†è§£ä»€ä¹ˆèƒ½å¤ŸçœŸæ­£åœ°æˆåŠŸã€‚ä½ åº”å½“å°è¯•在你的用户上尽å¯èƒ½æµ‹è¯•你的想法,如果å¯èƒ½çš„è¯ï¼Œä½ ç”šè‡³åº”当和他们一起åƒé¥­ã€‚ +The more time you spend with users the better you will be able to understand what will really be successful. You should try to test your ideas against them as much as you can. You should eat and drink with them if you can. -Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ã€‚ +Guy Kawasaki [Rules] has emphasized the importance of *watching* what your users do in addition to listening to them. -我相信,åˆä¼™äººå’Œå’¨è¯¢å¸ˆè®©å®¢æˆ·è¯´å‡ºä»–们内心真正想è¦çš„东西有巨大的困难。如果你想æˆä¸ºä¸€ä¸ªå’¨è¯¢å¸ˆï¼Œå»ºè®®ä½ åŸºäºŽç”¨æˆ·æ¸…晰的头脑以åŠä»–们的钱包æ¥é€‰æ‹©å®¢æˆ·ã€‚ +I believe contractors and consultants often have tremendous problems getting their clients to clarify in their own minds what they really want. If you intend to be a consultant, I suggest you choose your clients based on their clear-headedness as well as their pocketbooks. -Next [如何得到晋å‡](03-How to Get a Promotion.md) +Next [How to Get a Promotion](03-How to Get a Promotion.md) \ No newline at end of file diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 36572cd..1ea1510 100644 --- a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -1,13 +1,13 @@ -# å¦‚ä½•èŽ·å¾—æ™‹å‡ +# How to Get a Promotion -想è¦è¢«æå‡ä¸ºæŸç§è§’色,先åšé‚£ä¸ªè§’色该åšçš„事情。 +To be promoted to a role, act out that role first. -为了æå‡åˆ°æŸä¸ªä½ç½®ï¼Œæ‰¾åˆ°é‚£ä¸ªä½ç½®æœŸæœ›åšçš„事情,然åŽåŽ»åšã€‚ +To get promoted to a title, find out what is expected of that title and do that. -想è¦å¾—到薪酬的æå‡ï¼Œå¸¦ç€ä¿¡æ¯åŽ»å商。 +To get a pay raise, negotiate armed with information. -如果你觉得你值得得到æå‡ï¼Œä¸Žä½ çš„bossèŠä¸€èŠã€‚清楚地问他们你需è¦åšä»€ä¹ˆæ‰èƒ½èŽ·å¾—æå‡ï¼Œç„¶åŽåŠªåŠ›åŽ»åšã€‚è¿™å¬èµ·æ¥å¾ˆè€å¥—,但大多数时候你对你需è¦åšçš„事情的追求与你boss的想法是ä¸åŒçš„。这å¯èƒ½ä¼šè®©ä½ çš„boss在æŸäº›ç¨‹åº¦ä¸Šæœ‰äº›å¤±è½ã€‚ +If you feel like you are past due for a promotion, talk to your boss about it. Ask them explicitly what you need to do to get promoted, and try to do it. This sounds trite, but often times your perception of what you need to do will differ considerably from your boss's. Also this will pin your boss down in some ways. -大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和boss地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 +Most programmers probably have an exaggerated sense of their relative abilities in some ways---after all, we can't all be in the top 10%! However, I have seen some people who were seriously unappreciated. One cannot expect everyone's evaluation to perfectly match reality at all times, but I think people are generally moderately fair, with one caveat: you cannot be appreciated without visibility into your work. Sometimes, due to happenstance or personal habits, someone will not be noticed much. Working from home a lot or being geographically separated from your team and boss makes this especially difficult. -Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How to Develop Talent.md) +Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How to Develop Talent.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index 73d2295..7f66191 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -1,21 +1,22 @@ -# 3. 高级 -- 技术评审 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„地方](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [如何使用嵌入å¼è¯­è¨€](Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [选择语言](Technical-Judgment/03-Choosing Languages.md) -- 明智地妥å - - [如何与时间压力斗争](Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How to Understand the User.md) - - [如何得到晋å‡](Compromising-Wisely/03-How to Get a Promotion.md) -- æœåŠ¡ä½ ä»¬çš„å›¢é˜Ÿ - - [如何å‘展你们的æ‰èƒ½](Serving-Your-Team/01-How to Develop Talent.md) - - [如何选择工作的内容](Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何从你的队å‹å­¦åˆ°æœ€å¤šä¸œè¥¿](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何划分问题](Serving-Your-Team/04-How to Divide Problems Up.md) - - [å¦‚ä½•å¤„ç†æ— èŠçš„任务](Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [如何获得对工程的支æŒ](Serving-Your-Team/06-How to Gather Support for a Project.md) - - [如何å‘展一个系统](Serving-Your-Team/07-How to Grow a System.md) - - [如何有效地交æµ](Serving-Your-Team/08-How to Communicate Well.md) - - [如何告诉别人他们ä¸åƒçŸ¥é“的东西](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [如何处ç†ç»„织混乱](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +# 3. Advanced + +- Technological Judgment + - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [How to Utilize Embedded Languages](Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [Choosing Languages](Technical-Judgment/03-Choosing Languages.md) +- Compromising Wisely + - [How to Fight Schedule Pressure](Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [How to Understand the User](Compromising-Wisely/02-How to Understand the User.md) + - [How to Get a Promotion](Compromising-Wisely/03-How to Get a Promotion.md) +- Serving Your Team + - [How to Develop Talent](Serving-Your-Team/01-How to Develop Talent.md) + - [How to Choose What to Work On](Serving-Your-Team/02-How to Choose What to Work On.md) + - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [How to Divide Problems Up](Serving-Your-Team/04-How to Divide Problems Up.md) + - [How to Handle Boring Tasks](Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [How to Gather Support for a Project](Serving-Your-Team/06-How to Gather Support for a Project.md) + - [How to Grow a System](Serving-Your-Team/07-How to Grow a System.md) + - [How to Communicate Well](Serving-Your-Team/08-How to Communicate Well.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [How to Deal with Managerial Myths](Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index c4ba737..e853798 100644 --- a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -1,23 +1,23 @@ -# 如何å‘展æ‰èƒ½ +# How to Develop Talent -Nietschze夸大了他所说的: +Nietschze exaggerated when he said [Stronger]: ->æ€ä¸æ­»æˆ‘们的,åªä¼šè®©æˆ‘们更强大。 +> What does not destroy me, makes me stronger. -你最大的责任是对你的团队负责。你应该éžå¸¸äº†è§£ä»–们中的æ¯ä¸ªäººã€‚你应该激励你的团队,但ä¸è¦è®©ä»–们过劳。你通常应该告诉他们他们被激励的方å¼ã€‚如果他们觉得划算,他们会被很好的激励。æ¯ä¸ªå·¥ç¨‹ä¸­ï¼Œæˆ–者在æ¯ä¸ªå…¶ä»–的工程里,试ç€åŒæ—¶ç”¨ä»–们建议的以åŠä½ è®¤ä¸ºå¯¹ä»–们好的方å¼åŽ»æ¿€åŠ±ä»–ä»¬ã€‚æ¿€åŠ±ä»–ä»¬çš„æ–¹æ³•ä¸æ˜¯ç»™ä»–们更多工作,而是给他们一个新的技能或在团队里扮演一个新的角色。 +Your greatest responsibility is to your team. You should know each of them well. You should stretch your team, but not overburden them. You should usually talk to them about the way they are being stretched. If they buy in to it, they will be well motivated. On each project, or every other project, try to stretch them in both a way that they suggest and a way that you think will be good for them. Stretch them not by giving them more work, but by giving them a new skill or better yet a new role to play on the team. -你应该å…许人们(包括你自己)å¶å°”失败,并且应该为一些失败预留一些时间。如果从未有失败,冒险也就没有æ„义。如果没有å¶ç„¶çš„失败,说明其实你没有足够努力。当一个人失败了,你应该尽å¯èƒ½æ¸©æŸ”地对待他,ä¸è¯¥æŠŠä»–ä»¬å½“åšæˆåŠŸäº†é‚£æ ·å­ã€‚ +You should allow people (including yourself) to fail occasionally and should plan for some failure in your schedule. If there is never any failure, there can be no sense of adventure. If there are not occasional failures, you are not trying hard enough. When someone fails, you should be as gentle as you can with them while not treating them as though they had succeeded. -为了让æ¯ä¸ªå›¢é˜Ÿæˆå‘˜è¢«å……分激励,问清楚他们中的æ¯ä¸ªäººï¼Œå¦‚果他们没有动力的è¯ï¼Œä»–们需è¦ä»€ä¹ˆæ‰èƒ½è¢«å……分激励。你å¯èƒ½éœ€è¦è®©ä»–ä»¬ä¿æŒä¸æ»¡æ„的状æ€ï¼Œä½†ä½ éœ€è¦çŸ¥é“æ¯ä¸ªäººéœ€è¦çš„æ˜¯ä»€ä¹ˆã€‚ +Try to get each team member to buy in and be well motivated. Ask each of them explicitly what they need to be well-motivated if they are not. You may have to leave them dissatisfied, but you should know what everybody desires. -ä½ ä¸è¯¥å› ä¸ºè¿™æ ·çš„åŽŸå› æ”¾å¼ƒï¼Œæˆ–è€…è®©ä¸€äº›äººæ¾æ‡ˆï¼šä»–ä»¬å£«æ°”ä½Žè½æˆ–è€…ä¸æ»¡å› æ­¤æ•…æ„æ²¡æœ‰æ‰¿æ‹…分担到的责任。你必须试ç€è®©ä»–们充分被激励并且有效率。åªè¦ä½ æœ‰è€å¿ƒï¼ŒåšæŒè¿™æ ·åšã€‚当你的è€å¿ƒè€—尽时,就解雇他们å§ã€‚ä½ ä¸èƒ½å…许故æ„ä¸å¸å…¶èŒçš„员工留在团队里,因为这对团队ä¸å…¬å¹³ã€‚ +You can't give up on someone who is intentionally not carrying their share of the load because of low morale or dissatisfaction and just let them be slack. You must try to get them well-motivated and productive. As long as you have the patience, keep this up. When your patience is exhausted, fire them. You cannot allow someone who is intentionally working below their level to remain on the team, since it is not fair to the team. -通过在公众场åˆè¿™æ ·è¯´ï¼Œè®©ä½ å›¢é˜Ÿä¸­çš„强大æˆå‘˜æ¸…楚地知é“他们是强大的。表扬应当公开,批评应当ç§å¯†ã€‚ +Make it clear to the strong members of your team that you think they are strong by saying so in public. Praise should be public and criticism private. -团队中的强大æˆå‘˜ä¼šè‡ªç„¶åœ°æ¯”弱的æˆå‘˜æœ‰æ›´å¤šå›°éš¾çš„任务。这是完美而自然的,没人为因此困扰,因为æ¯ä¸ªäººéƒ½åŠªåŠ›å·¥ä½œã€‚ +The strong members of the team will naturally have more difficult tasks than the weak members of the team. This is perfectly natural and nobody will be bothered by it as long as everyone works hard. -一个在工资中没有å馈出æ¥çš„奇怪的事实是,好的程åºå‘˜æ¯”å个糟糕的程åºå‘˜è¦æœ‰æ•ˆçŽ‡å¾—å¤šã€‚è¿™å¯¼è‡´äº†ä¸€ç§å¥‡æ€ªçš„现象。通常,如果你们的弱程åºå‘˜ä¸æŒ¡é“çš„è¯ï¼Œä½ èƒ½è·‘的更快。如果你这样åšäº†ï¼Œäº‹å®žä¸Šä½ åœ¨çŸ­æœŸèƒ½å–得更多进度。然而, 你的交易会失去一些é‡è¦çš„好处,å«åšå¯¹å¼±å°æˆå‘˜çš„训练,对集体知识的传递,失去强大程åºå‘˜åŽçš„æ¢å¤èƒ½åŠ›ã€‚å¼ºå¤§çš„ç¨‹åºå‘˜å¯¹è¿™ç§çŽ°è±¡åº”è¯¥æ¸©å’Œäº›ï¼Œå¹¶ä¸”ä»Žå„ç§è§’度去考虑这个问题。 +It is an odd fact that is not reflected in salaries that a good programmer is more productive than 10 bad programmers. This creates a strange situation. It will often be true that you could move faster if your weak programmers would just get out of the way. If you did this you would in fact make more progress in the short term. However, your tribe would lose some important benefits, namely the training of the weaker members, the spreading of tribal knowledge, and the ability to recover from the loss of the strong members. The strong must be gentle in this regard and consider the issue from all angles. -ä½ ç»å¸¸èƒ½å¤Ÿç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 +You can often give the stronger team members challenging, but carefully delineated, tasks. -Next [如何选择工作的内容](02-How to Choose What to Work On.md) +Next [How to Choose What to Work On](02-How to Choose What to Work On.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index 11d7f14..c13705c 100644 --- a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -1,5 +1,5 @@ -# 如何选择工作的内容 +# How to Choose What to Work On -你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 +You balance your personal needs against the needs of the team in choosing what aspect of a project to work on. You should do what you are best at, but try to find a way to stretch yourself not by taking on more work but by exercising a new skill. Leadership and communication skills are more important than technical skills. If you are very strong, take on the hardest or riskiest task, and do it as early as possible in the project to decrease risk. -Next [如何最大化利用你的队å‹](03-How to Get the Most From Your Teammates.md) +Next [How to Get the Most From Your Team-mates](03-How to Get the Most From Your Teammates.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index cb6d19b..1b046db 100644 --- a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -1,15 +1,15 @@ -# 如何让你的队å‹çš„价值最大化 +# How to Get the Most From Your Team-mates -为了让你的队å‹çš„价值最大化,å‘展好的团队精神,试ç€ä¿æŒæ¯ä¸ªäººçš„个人挑战与渴望。 +To get the most from your team-mates, develop a good team spirit and try to keep every individual both personally challenged and personally engaged. -为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œæ²¡æœ‰ä¼šæƒ³è¦è®©å…¶ä»–任何人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ +To develop team spirit, corny stuff like logoized clothing and parties are good, but not as good as personal respect. If everyone respects everyone else, nobody will want to let anybody down. Team spirit is created when people make sacrifices for the team and think in terms of the good of the team before their own personal good. As a leader, you can't ask for more than you give yourself in this respect. -团队领导力的一个关键是促进团结,这样æ¯ä¸ªäººéƒ½ä¼šå¬ä½ çš„。有时候这æ„味ç€å…许你的队å‹çŠ¯é”™ã€‚ä¹Ÿå°±æ˜¯ï¼ŒåŸºäºŽè¿™ç§å›¢ç»“,如果对项目没有太大的æŸå®³ï¼Œä½ å¿…é¡»å…许你团队的一部分æˆå‘˜ç”¨ä»–们自己的方å¼åšäº‹ï¼Œå³ä½¿ä½ æœ‰å¾ˆå¤§çš„ä¿¡å¿ƒè®¤ä¸ºè¿™æ˜¯ä¸€ä»¶é”™äº‹ã€‚å½“è¿™ç§æƒ…况确实å‘生时,ä¸è¦åŒæ„他们的观点,简å•公开地åå¯¹ä¹‹ï¼Œç„¶åŽæŽ¥å—è¿™ç§å›¢ç»“。ä¸è¦è®©äººè§‰å¾—ä½ å—伤了,或者认为你是被迫的,简å•地陈述你ä¸åŒæ„,但认为团队的团结是更加é‡è¦çš„。这ç»å¸¸ä¼šå¯¼è‡´ä»–们忂”ã€‚å¦‚æžœä»–ä»¬çœŸçš„åæ‚”了,ä¸è¦åšæŒä»–们一开始的计划。 +One of the keys to team leadership is to facilitate consensus so that everyone has buy in. This occasionally means allowing your team-mates to be wrong. That is, if it does not harm the project too much, you must let some of your team do things their own way, based on consensus, even if you believe with great confidence it is the wrong thing to do. When this happens, don't agree, simply disagree openly and accept the consensus. Don't sound hurt, or like you're being forced into it, simply state that you disagree but think the consensus of the team is more important. This will often cause them to backtrack. Don't insist that they go through with their initial plan if they do backtrack. -如果在你们从所有åˆé€‚的角度讨论了这个è¯é¢˜åŽï¼Œæœ‰ä¸ªäººä¼šå对,简å•地告诉他们,你必须åšä¸€ä¸ªå†³å®šï¼Œå¹¶ä¸”è¿™å°±æ˜¯ä½ çš„å†³å®šã€‚å¦‚æžœæœ‰æ–¹æ³•åŽ»è¯„ä¼°ä½ çš„å†³å®šæ˜¯å¦æ˜¯é”™çš„,或者它ç¨åŽæ˜¯å¦æ˜¯é”™çš„,尽å¯èƒ½å¿«é€Ÿåˆ‡æ¢ï¼Œå¹¶æ„Ÿæ¿€é‚£ä¸ªå¯¹çš„人。 +If there is an individual who will not consent after you have discussed the issues from all appropriate sides, simply assert that you have to make a decision and that is what your decision is. If there is a way to judge if your decision will be wrong or if it is later shown to be wrong, switch as quickly as you can and recognize the persons who were right. -询问你的团队,包括集体与个人,这样一个问题:他们认为什么能创造团队精神以åŠåˆ›é€ ä¸€ä¸ªé«˜æ•ˆçš„团队。 +Ask your team, both as a group and individually, what they think would create team spirit and make for an effective team. -ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ +Praise frequently rather than lavishly. Especially praise those who disagree with you when they are praiseworthy. Praise in public and criticize in private; with one exception: sometimes growth or the correction of a fault can't be praised without drawing embarrassing attention to the original fault, so that growth should be praised in private. -Next [如何划分问题](04-How to Divide Problems Up.md) +Next [How to Divide Problems Up](04-How to Divide Problems Up.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index e6b7cc7..4ee4d14 100644 --- a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -1,9 +1,9 @@ -# 如何划分问题 +# How to Divide Problems Up -接手一个软件工程并把它分为å¯ä»¥ç”±ä¸ªäººå®žçŽ°çš„ä»»åŠ¡æ˜¯å¾ˆæœ‰è¶£çš„ã€‚è¿™äº‹åº”è¯¥åŠæ—©è¿›è¡Œã€‚有时候ç»ç†å¯èƒ½ä¼šè®¤ä¸ºä¸è€ƒè™‘个人的项目能够起作用。这是ä¸å¯èƒ½çš„,因为æ¯ä¸ªäººçš„生产力是如此广泛地ä¸åŒã€‚对æŸä¸ªç»„件有特殊知识的人也ç»å¸¸æ”¹å˜ï¼Œå¹¶ä¸”å¯ä»¥å¯¹å·¥ä½œæ•ˆæžœæœ‰ä¸€ä¸ªæ•°é‡çº§çš„å½±å“。 +It's fun to take a software project and divide it up into tasks that will be performed by individuals. This should be done early. Sometimes managers like to think that an estimate can be made without consideration of the individuals that will perform the work. This is impossible since the productivity of individuals varies so widely. Who has particular knowledge about a component also constantly changes and can have an order of magnitude effect on performance. -正如一个作曲家认为ä¹å™¨çš„音色会其é‡è¦ä½œç”¨ï¼Œæˆ–者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 +Just as a composer considers the timbre of the instrument that will play a part or the coach of an athletic team considers the strengths of each player, the experienced team leader will not usually be able to separate the division of the project into tasks from the team members to which they will be assigned. This is part of the reason that a high-performing team should not be broken up. -因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–ä»¬çš„ä¸æ“…é•¿çš„æ–¹å‘æˆ–者学习新的技能。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 +There is a certain danger in this given that people will become bored as they build upon their strengths and never improve their weaknesses or learn new skills. However, specialization is a very useful productivity tool when not overused. -Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How to Handle Boring Tasks.md) +Next [How to Handle Boring Tasks](05-How to Handle Boring Tasks.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index 4c94c4d..dfdb8b9 100644 --- a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -1,7 +1,7 @@ -# å¦‚ä½•å¤„ç†æ— èŠçš„任务 +# How to Handle Boring Tasks -有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬Larry Wall的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 +Sometimes it is not possible to avoid boring tasks that are critical to the success of the company or the project. These tasks can really hurt the morale of those that have to do them. The best technique for dealing with this is to invoke or promote Larry Wall's programmer's virtue of Laziness. Try to find some way to get the computer to do the task for you or to help your team-mates do this. Working for a week on a program to do a task that will take a week to do by hand has the great advantage of being more educational and sometimes more repeatable. -如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ +If all else fails, apologize to those who have to do the boring task, but under no circumstances allow them to do it alone. At a minimum assign a team of two to do the work and promote healthy teamwork to get the task done. -Next [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How to Gather Support for a Project.md) +Next [How to Gather Support for a Project](06-How to Gather Support for a Project.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 257563f..3ba9eaf 100644 --- a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -1,5 +1,5 @@ -# å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ +# How to Gather Support for a Project -è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你的创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的智慧。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 +To gather support for a project, create and communicate a vision that demonstrates real value to the organization as a whole. Attempt to let others share in your vision creation. This gives them a reason to support you and gives you the benefit of their ideas. Individually recruit key supporters for your project. Wherever possible, show, don't tell. If possible, construct a prototype or a mock-up to demonstrate your ideas. A prototype is always powerful but in software it is far superior to any written description. -Next [如何å‘展一个系统](07-How to Grow a System.md) +Next [How to Grow a System](07-How to Grow a System.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index 6021f7c..f41cd4b 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -1,23 +1,23 @@ -# 如何å‘展一个系统 +# How to Grow a System -æ ‘çš„ç§å­åŒ…å«äº†æˆé•¿çš„æ€æƒ³ï¼Œä½†ä¸å®Œå…¨å®žçްæˆé•¿ä½“的形å¼ä¸ŽåŠ›é‡ã€‚胚胎会æˆé•¿ã€‚它会å˜å¤§ã€‚å®ƒçœ‹èµ·æ¥æ›´åƒæˆé•¿ä½“,并越æ¥è¶Šæœ‰ç”¨ã€‚最终它孕育果实。最åŽï¼Œå®ƒæ­»äº¡å¹¶ä¸”它的躯体喂养了其他的有机体。 +The seed of a tree contains the idea of the adult but does not fully realize the form and potency of the adult. The embryo grows. It becomes larger. It looks more like the adult and has more of the uses. Eventually it bears fruit. Later, it dies and its body feeds other organisms. -对待软件我们也应当有这样的è£è€€ã€‚ä¸€æž¶æ¡¥ä¸æ˜¯è¿™æ ·çš„,永远ä¸ä¼šæœ‰ä¸€æž¶å©´å„¿æ¡¥ï¼Œä½†åªæ˜¯æœ‰ä¸€åº§æœªå®Œæˆçš„æ¡¥ã€‚桥比软件è¦ç®€å•得多。 +We have the luxury of treating software like that. A bridge is not like that; there is never a baby bridge, but merely an unfinished bridge. Bridges are a lot simpler than software. -认识到软件的æˆé•¿æ˜¯æœ‰ç›Šçš„,因为这å…许我们在有一个完美的æ€ç»´å›¾æ™¯å‰å–得有用的进步。我们å¯ä»¥ä»Žç”¨æˆ·é‚£é‡ŒèŽ·å¾—åé¦ˆï¼Œå¹¶ç”¨ä¹‹çº æ­£è¿™ç§æˆé•¿ã€‚修剪掉疲软的四肢æ‰èƒ½å¥åº·ã€‚ +It is good to think of software as growing, because it allows us to make useful progress before we have a perfect mental image. We can get feedback from users and use that to correct the growth. Pruning off weak limbs is healthful. -程åºå‘˜å¿…须设计一个完æˆçš„å¯åˆ†å‘å¯ä½¿ç”¨çš„系统。但高级程åºå‘˜éœ€è¦åšçš„æ›´å¤šã€‚你必须设计一个终于完结系统的æˆé•¿è·¯çº¿ã€‚你的工作是,得到一个想法的èŒèŠ½ï¼Œç„¶åŽæŠŠå®ƒå°½å¯èƒ½é¡ºåˆ©åœ°å˜æˆä¸€ä¸ªæœ‰ç”¨çš„人工制å“。 +The programmer must design a finished system that can be delivered and used. But the advanced programmer must do more. You must design a growth path that ends in the finished system. It is your job to take a germ of an idea and build a path that takes it as smoothly as possible into a useful artefact. -因此,你必须模拟最终的结果,用一ç§å·¥ç¨‹å›¢é˜Ÿå¯ä»¥ä¸ºä¹‹é›€è·ƒçš„æ–¹å¼åŽ»äº¤æµã€‚但你也必须和他们交æµä¸€æ¡éžè·³è·ƒå¼çš„è·¯å¾„ï¼Œä»Žä»–ä»¬æ‰€çŸ¥åˆ°ä»–ä»¬æƒ³è¦æˆä¸ºçš„地方去。在整个过程中,这棵树必须活ç€ï¼Œå®ƒä¸èƒ½åœ¨ä»€ä¹ˆæ—¶å€™æ­»åŽ»ï¼Œç„¶åŽåˆå¤æ´»è¿‡æ¥ã€‚ +To do this, you must visualize the end result and communicate it in a way that the engineering team can get excited about. But you must also communicate to them a path that goes from wherever they are now to where they want to be with no large leaps. The tree must stay alive the whole time; it cannot be dead at one point and resurrected later. -è¿™æ¡è·¯å¾„会是螺旋å‘展的。里程碑之间永远ä¸ä¼šå¤ªè¿œï¼Œè¿™å¯¹äºŽåœ¨è·¯ä¸Šå–得进步是有用的。在æžç«¯çš„商业环境里,如果里程碑å¯ä»¥å®žçŽ°å¹¶å°½æ—©èµšé’±æ˜¯æœ€å¥½çš„ã€‚ï¼Œå³ä½¿ä»–们离良好设计的端点还有很远。程åºå‘˜çš„ä¸€ä¸ªå·¥ä½œå°±æ˜¯é€šè¿‡ç†æ™ºçš„选择用里程碑表示的æˆé•¿è·¯å¾„æ¥å¹³è¡¡å³æ—¶çš„æŠ¥é…¬ä¸Žå°†æ¥çš„æŠ¥é…¬ã€‚ +This approach is captured in spiral development. Milestones that are never too far apart are used to mark progress along the path. In the ultra-competitive environment of business, it is best if the milestones can be released and make money as early as possible, even if they are far away from a well-designed endpoint. One of the programmer's jobs is to balance the immediate pay-off against future pay-off by wisely choosing a growth path expressed in milestones. -高级程åºå‘˜å¯¹è½¯ä»¶ï¼Œå›¢é˜Ÿï¼Œä¸ªäººçš„æˆé•¿æœ‰é›†ä½“è´£ä»»ã€‚ +The advanced programmer has the triple responsibility of growing software, teams, and persons. -一个读者,Rob Hafernik,在这一节中写下了这样的评论: +A reader, Rob Hafernik, sent in this comment on this section that I can do no better than to quote in full: -> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚å½“ä½ å·¥ä½œåœ¨ä¸€ä¸ªå¤§çš„ç³»ç»Ÿä¸­ï¼Œå¿…é¡»æœ‰å³æ—¶ç›®æ ‡ç›¸å…³çš„坿µ‹é‡çš„进步时,这些也是*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 +> I think you under-emphasize the importance here. It's not just systems, but algorithms, user interfaces, data models, and so on. It's absolutely *vital* as you work on a large system to have measurable progress toward intermediate goals. Nothing is as bad as the special horror of getting down to the end and discovering that the whole thing just isn't going to work (look at the recent debacle of the Voter News System). I would even go further and state it as a law of nature: no large, complex system can be implemented from scratch, it can only be evolved from a simple system to a complex system in a series of intentional steps. -对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ +To which one can only reply *Fiat lux*! -Next [如何良好地交æµ](08-How to Communicate Well.md) +Next [How to Communicate Well](08-How to Communicate Well.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index 06c64ab..4e55ee2 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -1,11 +1,11 @@ -# 如何有效地沟通 +# How to Communicate Well -ä¸ºäº†è‰¯å¥½åœ°æ²Ÿé€šï¼Œä½ å¿…é¡»è®¤è¯†åˆ°å®ƒçš„å›°éš¾ã€‚å®ƒæœ¬èº«å°±æ˜¯ä¸€ç§æŠ€èƒ½ã€‚ä¸Žä½ äº¤æµçš„人本身是有瑕疵的,这一事实使得沟通å˜å¾—更加困难。他们ä¸ä¼šåŠªåŠ›åŽ»ç†è§£ä½ ã€‚他们ä¸å–„言辞。他们ç»å¸¸è¿‡åº¦å·¥ä½œæˆ–者无èŠï¼Œè‡³å°‘,有时候åªå…³æ³¨ä»–们自己的工作而éžä½ è¦å‘表的长篇大论。上课,练习写作,公共演讲,è†å¬ï¼Œè¿™äº›ä¸œè¥¿çš„一个好处是,如果你擅长它们,你å¯ä»¥æ›´å®¹æ˜“看到问题所在以åŠè§£å†³æ–¹æ³•。 +To communicate well, you have to recognize how hard it is. It is a skill unto itself. It is made harder by the fact that the persons with whom you have to communicate are flawed. They do not work hard at understanding you. They speak poorly and write poorly. They are often overworked or bored, and, at a minimum, somewhat focused on their own work rather than the larger issues you may be addressing. One of the advantages of taking classes and practising writing, public speaking, and listening is that if you become good at it you can more readily see where problems lie and how to correct them. -程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„ç”Ÿå­˜ä¾èµ–于与团队的交æµã€‚高级程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„æ»¡æ„ä¾èµ–于与团队外的人的交æµã€‚ +The programmer is a social animal whose survival depends on communication with her team. The advanced programmer is a social animal whose satisfaction depends on communication with people outside her team. -程åºå‘˜ä»Žæ··æ²Œä¸­å¸¦æ¥ç§©åºï¼Œä¸€ç§å®žçŽ°è¿™ä¸€ç›®æ ‡çš„æœ‰è¶£æ–¹æ³•æ˜¯ä»Žå¤–éƒ¨çš„ä¸€ä¸ªæè®®å¼€å§‹ã€‚这能用*稻è‰äºº*或*白纸*æ¨¡å¼æˆ–者å£å¤´çš„æ–¹å¼æ¥å®Œæˆã€‚è¿™ç§é¢†å¯¼å¯¹äºŽè®©å›¢é˜Ÿç½®èº«äºŽè¾©è®ºä¸­æœ‰æžå¤§çš„好处。这也把你暴露到批评,或者,拒ç»ä¸Žå¦å®šä¸­ã€‚高级程åºå‘˜å¿…须准备好接å—这些,因为他有特殊的能力,也因此有特殊的责任。éžç¨‹åºå‘˜å‡ºèº«çš„ä¼ä¸šå®¶éœ€è¦ç¨‹åºå‘˜åœ¨æŸäº›æ–¹é¢æä¾›é¢†å¯¼ã€‚程åºå‘˜æ˜¯æ€æƒ³ä¸ŽçŽ°å®žä¹‹é—´çš„ä¸€éƒ¨åˆ†æ¡¥æ¢ã€‚ +The programmer brings order out of chaos. One interesting way to do this is to initiate a proposal of some kind outside the team. This can be done in a *strawman* or *white-paper* format or just verbally. This leadership has the tremendous advantage of setting the terms of the debate. It also exposes you to criticism, and worse, rejection and neglect. The advanced programmer must be prepared to accept this, because she has a unique power and therefore a unique responsibility. Entrepreneurs who are not programmers need programmers to provide leadership in some ways. Programmers are the part of the bridge between ideas and reality that rests on reality. -æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了能é‡ï¼Œæ²¡æœ‰äººå› æ­¤ä¼šçœ‹ä½Žä½ ã€‚ +I haven't mastered communicating well, but what I'm currently trying is what I think of a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. -Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How to Tell People Things They Don't Want to Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index f91d89e..dc6c539 100644 --- a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -1,9 +1,9 @@ -# å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西 +# How to Tell People Things They Don't Want to Hear -你会ç»å¸¸éœ€è¦å‘Šè¯‰äººä»¬ä¸€äº›è®©ä»–们ä¸èˆ’æœçš„事情。记ä½ï¼Œä½ å¿…须为æŸç§åŽŸå› æ‰è¿™æ ·åšã€‚å³ä½¿æ²¡æœ‰ä»€ä¹ˆå¯ä»¥ç”¨æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ ä¹Ÿè¯¥å°½æ—©å‘Šè¯‰ä»–们,这样他们æ‰èƒ½å……分警觉。 +You will often have to tell people things that will make them uncomfortable. Remember that you are doing this for a reason. Even if nothing can be done about the problem, you are telling them as early as possible so they will be well-informed. -å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你å¯èƒ½ä¼šä¸è¢«ä¿¡ä»»ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ +The best way to tell someone about a problem is to offer a solution at the same time. The second best way is to appeal to them for help with the problem. If there is a danger that you won't be believed, you should gather some support for your assertion. -一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯”deadline抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ +One of the most unpleasant and common things you will have to say is, ‘The schedule will have to slip.’ The conscientious programmer hates to say this, but must say it as early as possible. There is nothing worse than postponing action when a milestone slips, even if the only action is to inform everyone. In doing this, it is better to do it as a team, at least in spirit, if not physically. You will want your team's input on both where you stand and what can be done about it, and the team will have to face the consequences with you. -Next [如何处ç†ç®¡ç†ç¥žè¯](10-How to Deal with Managerial Myths.md) +Next [How to Deal with Managerial Myths](10-How to Deal with Managerial Myths.md) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 74d2fc4..6acb49d 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,12 +1,13 @@ -# 如何处ç†ç®¡ç†ç¥žè¯ +# How to Deal with Managerial Myths -*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›å®—教内容æ¥è§£é‡Šå®‡å®™å’Œäººç±»ä¸Žä¹‹çš„关系。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š +The word *myth* sometimes means fiction. But it has a deeper connotation. It also means a story of religious significance that explains the universe and mankind's relationship to it. Managers tend to forget what they learned as programmers and believe in certain myths. It would be as rude and unsuccessful to try to convince them these myths are false as to try to disillusion a devoutly religious person of their beliefs. For that reason, you should recognize these beliefs as myths: -- æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ -- 程åºå‘˜æ˜¯å¹³ç­‰çš„。(程åºå‘˜å¯ä»¥æŒ‰é‡è¦ç¨‹åº¦åˆ†ç±»ã€‚) -- åˆ†é…æ›´å¤šèµ„æºç»™è¿Ÿæ¥çš„项目å¯ä»¥è®©å®ƒåŠ é€Ÿã€‚ï¼ˆä¸Žæ–°äººçš„äº¤æµçš„代价大多数时候很ç¹é‡å¹¶ä¸”无用。) -- 程åºå‘˜çš„æ•ˆçއå¯ä»¥ç”¨ä¸€äº›ç®€å•的标准尺度æ¥åº¦é‡ï¼Œæ¯”如代ç è¡Œæ•°ï¼ˆå¦‚æžœç®€æ´æ‰æ˜¯åŠ›é‡ï¼Œé‚£ä¹ˆä»£ç è¡Œæ•°æ˜¯å的,而éžå¥½çš„。) +- More documentation is always better. (They want it, but they don't want you to spend any time on it.) +- Programmers can be equated. (Programmers vary by an order of magnitude.) +- Resources can be added to a late project to speed it. (The cost of communication with the new persons is almost always more taxing than helpful.) +- It is possible to estimate software development reliably. (It is not even theoretically possible.) +- Programmers' productivity can be measured in terms of some simple metric, like lines of code. (If succinctness is power, lines of code are bad, not good.) -如果有机会,你å¯ä»¥è¯•ç€è§£é‡Šè¿™äº›ä¸œè¥¿ï¼Œä½†å¦‚果你没有æˆåŠŸï¼Œä¸è¦è§‰å¾—悲伤,ä¸è¦å¥½æ–—地å对这些神è¯ä»¥è‡´æŸå®³äº†ä½ çš„声望。æ¯ä¸ªè¿™æ ·çš„神è¯å¢žå¼ºäº†ç®¡ç†è€…关于他们有一些对正在进行的事情的实际控制的想法。真相是,如果管ç†è€…是好的,他们会帮助你,如果他们是å的,他们会妨ç¢ä½ ã€‚ +If you have an opportunity, you can try to explain these things, but don't feel bad if you have no success and don't damage your reputation by confronting these myths belligerently. Each of these myths reinforces the manager's idea that they have some actual control over what is going on. The truth is that managers facilitate if they are good, and impede if they are bad. -Next [如何处ç†ç»„织混乱](11-How to Deal with Organizational Chaos.md) +Next [How to Deal with Organizational Chaos](11-How to Deal with Organizational Chaos.md) \ No newline at end of file diff --git a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md index f611e0c..247a626 100644 --- a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md +++ b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -1,11 +1,11 @@ -# 如何处ç†ç»„织混乱 +# How to Deal with Organizational Chaos -ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ +There are often brief periods of great organizational chaos, such as lay-offs, buyouts, ipos, firings, new hirings, and so on. These are unsettling to everyone, but perhaps a little less unsettling to the programmer whose personal self-esteem is founded in capacity rather than in position. Organizational chaos is a great opportunity for programmers to exercise their magic power. I've saved this for last because it is a deep tribal secret. If you are not a programmer, please stop reading now. -> 工程师有能力创造与维æŒã€‚ +> Engineers have the power to create and sustain. -éžå·¥ç¨‹å¸ˆå¯ä»¥å®‰æŽ’人们,但,在典型的软件公å¸ï¼Œå¦‚果没有程åºå‘˜çš„è¯ï¼Œä»–们ä¸èƒ½åˆ›é€ ä¸Žç»´æŒä»»ä½•东西,正如工程师通常ä¸èƒ½æœ‰æ•ˆåœ°é”€å”®äº§å“或者管ç†å•†ä¸šã€‚è¿™ç§åŠ›é‡å¯¹äºŽå¤§å¤šæ•°ä¸Žä¸´æ—¶ç»„ç»‡æ··ä¹±ç›¸å…³çš„é—®é¢˜æ˜¯ä¸€ç§æŠµæŠ—ã€‚å¦‚æžœä½ æœ‰è¿™ç§åŠ›é‡ï¼Œä½ åº”å½“å®Œå…¨å¿½è§†è¿™ç§æ··ä¹±å¹¶å½“åšä»€ä¹ˆéƒ½æ²¡å‘ç”Ÿé‚£æ ·åšæŒä¸‹åŽ»ã€‚ä½ å¯èƒ½ï¼Œå½“然,被解雇,但如果这å‘生了,你å¯èƒ½å› ä¸ºè¿™ç§åŠ›é‡å¾—到新的工作。更普é的,一些紧张的没有这ç§é­”力的人会进入你的空间并告诉你åšä¸€äº›è ¢äº‹ã€‚å¦‚æžœä½ çœŸçš„ç¡®ä¿¡è¿™æ˜¯ä¸€ä»¶è ¢äº‹ï¼Œæœ€å¥½çš„åšæ³•是微笑,点头,直到他们走开,然åŽç»§ç»­åšä½ è®¤ä¸ºå¯¹å…¬å¸æœ€å¥½çš„事情。 +Non-engineers can order people around but, in a typical software company, can create and sustain nothing without engineers, just as engineers typically cannot sell a product or manage a business effectively. This power is proof against almost all of the problems associated with temporary organizational mayhem. When you have it you should ignore the chaos completely and carry on as if nothing is happening. You may, of course, get fired, but if that happens you can probably get a new job because of the magic power. More commonly, some stressed-out person who does not have the magic power will come into your cube and tell you to do something stupid. If you are really sure that it is stupid, it is best to smile and nod until they go away and then carry on doing what you know is best for the company. -如果你是一个领导者,告诉你的员工åšä¸€æ ·çš„事情,告诉他们忽视其他任何人告诉他们的东西。这ç§è¡Œä¸ºçš„è¿‡ç¨‹å¯¹ä½ ä¸ªäººæ˜¯æœ€å¥½çš„ï¼Œå¯¹ä½ çš„å…¬å¸æˆ–工程也是最好的。 +If you are a leader, tell your people to do the same thing and tell them to ignore what anybody else tells them. This course of action is the best for you personally, and is the best for your company or project. -Next [è¯æ±‡è¡¨](../../4-Glossary.md) +Next [Glossary](../../GLOSSARY.md) diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index f268928..a1146c0 100644 --- a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,9 +1,9 @@ -# 如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分 +# How to Tell the Hard From the Impossible -解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。,大é‡çš„工作是困难的,但ä¸å¿…然是ä¸å¯èƒ½çš„。 +It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. -è¿™ç§åŒºåˆ«æ˜¯æ»‘稽的,因为你å¯èƒ½ç»å¸¸è¢«è¦æ±‚åšä¸€äº›äº‹å®žä¸Šä¸å¯èƒ½çš„事情,ä¸è®ºæ˜¯ä»Žç§‘学观点还是从软件工程观点。然åŽä½ çš„å·¥ä½œå°±å˜æˆäº†å¸®åŠ©è€æ¿æ‰¾åˆ°ä¸€ä¸ªåˆç†çš„,仅仅是困难而éžä¸å¯èƒ½çš„解决方案,去满足他们大部分的需è¦ã€‚当一个解决方案å¯ä»¥è¢«è‡ªä¿¡åœ°è§„划且风险å¯ä»¥é¢„æ–™æ—¶ï¼Œå®ƒåªæ˜¯å›°éš¾è€Œå·²ã€‚ +The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. -ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有清晰的æˆåŠŸçš„å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ +It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is not crisp definition of success, you will not succeed. -Next [如何使用嵌入型语言](02-How to Utilize Embedded Languages.md) +Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) \ No newline at end of file diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index 0ea3730..dc1d8ac 100644 --- a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -1,11 +1,11 @@ -# 如何使用嵌入型语言 +# How to Utilize Embedded Languages -把一ç§ç¼–程语言嵌入到一个系统对程åºå‘˜æ¥è®²æœ‰ç€å‡ ä¹Žä¸Žæ€§ä¸€æ ·çš„é­”åŠ›ã€‚è¿™æ˜¯ä¸€ç§æœ€å…·æœ‰åˆ›é€ åŠ›çš„å¯ä»¥è¡¨çŽ°çš„è¡Œä¸ºã€‚è¿™ä½¿å¾—ç³»ç»ŸæƒŠäººåœ°å¼ºå¤§ã€‚è¿™ä¹Ÿå…è®¸ä½ é”»ç‚¼å¤§å¤šæ•°åˆ›é€ æ€§å’Œæœ‰ç”Ÿå‘½åŠ›çš„èƒ½åŠ›ï¼ŒæŠŠç³»ç»Ÿå˜æˆä½ çš„æœ‹å‹ã€‚ +Embedding a programming language into a system has an almost erotic fascination to a programmer. It is one of the most creative acts that can be performed. It makes the system tremendously powerful. It allows you to exercise her most creative and Promethean skills. It makes the system into your friend. -世界上最好的文本编辑器都有嵌入性语言。这å¯ä»¥è¢«ç”¨äºŽé¢„计的观众å¯ä»¥æŽŒæ¡çš„语言的范围,语言的使用å¯ä»¥å˜ä¸ºå¯é€‰çš„,正如文本编辑器里那样,这样在一开始å¯ä»¥ä½¿ç”¨å®ƒï¼Œè€Œæ²¡æœ‰å…¶ä»–人必须使用它。 +The best text editors in the world all have embedded languages. This can be used to the extent that the intended audience can master the language. Of course, use of the language can be made optional, as it is in text editors, so that initiates can use it and no one else has to. -我和许多其他的程åºå‘˜æ›¾å å…¥åˆ›é€ ç‰¹æ®Šç›®çš„的嵌入型语言的困境里。我曾ç»åŽ†è¿‡ä¸¤æ¬¡ã€‚å·²ç»å­˜åœ¨äº†è®¸å¤šä¸ºåµŒå…¥åž‹è¯­è¨€è®¾è®¡çš„语言,在创造一个新的语言å‰ï¼Œä½ åº”该三æ€ã€‚ +I and many other programmers have fallen into the trap of creating special purpose embedded languages. I fell into it twice. There already exist many languages designed specifically to be embedded languages. You should think twice before creating a new one. -使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢APIå—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ä¸ªå·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ +The real question to ask oneself before embedding a language is: Does this work with or against the culture of my audience? If you intended audience is exclusively non-programmers, how will it help? If your intended audience is exclusively programmers, would they prefer an applications programmers interface (API)? And what language will it be? Programmers don't want to learn a new language that is narrowly used; but if it meshes with their culture they will not have to spend much time learning it. It is a joy to create a new language. But we should not let that blind us to the needs of the user. Unless you have some truly original needs and ideas, why not use an existing language so that you can leverage the familiarity users already have with it? -Next [选择语言](03-Choosing Languages.md) +Next [Choosing Languages](03-Choosing Languages.md) \ No newline at end of file diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 2fe19d9..e759f73 100644 --- a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,15 +1,15 @@ -# 选择语言 +# Choosing Languages -喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„boss说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜é©±åŠ¨ã€‚æ¯«æ— ç–‘é—®ä»–ä»¬æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ +The solitary programmer that loves his work (a hacker) can choose the best language for the task. Most working programmers have very little control of the language they will use. Generally, this issue is dictated by pointy-haired bosses who are making a political decision, rather than a technological decision, and lack the courage to promote an unconventional tool even when they know, often with first-hand knowledge, that the less accepted tool is best. In other cases the very real benefit of unity among the team, and to some extent with a larger community, precludes choice on the part of the individual. Often managers are driven by the need to be able to hire programmers with experience in a given language. No doubt they are serving what they perceive to be the best interests of the project or company, and must be respected for that. However, I personally believe this is the most wasteful and erroneous common practice you are likely to encounter. -但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣 +But of course, things are never one-dimensional. Even if a core language is mandated and beyond your control, it is often the case that tools and other programs can and should be written in a different language. If a language is to be embedded (and you should always consider it!) the choice of language will depend a lot on the culture of the users. One should take advantage of this to serve your company or project by using the best language for the job, and in so doing make work more interesting. -一门编程语言,如果学习它比学习自然语言还è¦éš¾ï¼Œé‚£å®ƒçœŸçš„应该被称为符å·ã€‚对åˆå­¦è€…和一些门外汉æ¥è¯´â€œå­¦ä¹ ä¸€é—¨æ–°è¯­è¨€â€åƒæ˜¯ä¸€ä¸ªä»¤äººç”Ÿç•的任务,但在你掌æ¡äº†ä¸‰ç§è¯­è¨€åŽï¼Œè¿™åªæ˜¯ä¸€ä¸ªç†Ÿæ‚‰å¯ç”¨çš„库的简å•问题。一个程åºå‘˜è¶‹å‘于æ€è€ƒä¸€ä¸ªç”±ä¸‰å››é—¨è¯­è¨€ç»„æˆçš„一个大æ‚çƒ©ç³»ç»Ÿï¼Œä½†æˆ‘è®¤ä¸ºè¿™æ ·ä¸€ä¸ªç³»ç»Ÿåœ¨å¾ˆå¤šæƒ…å†µä¸‹è¦æ¯”å•一语言系统è¦å¼ºå¤§ï¼Œç†ç”±æœ‰ä»¥ä¸‹å‡ ä¸ªæ–¹é¢ï¼š +Programming languages should really be called notations in that learning one is not at all as difficult as learning a natural language. To beginners and to some outsiders 'learning a new language' seems a daunting task; but after you have three under your belt it's really just a question of becoming familiar with the available libraries. One tends to think of a large system that has components in three or four languages as a messy hodgepodge; but I argue that such a system is in many cases stronger than a one-language system in several ways: -- ä¸åŒç¬¦å·ç¼–写的部分间,必è¦çš„æ¾è€¦åˆå­˜åœ¨ï¼ˆè™½ç„¶å¯èƒ½æ²¡æœ‰å¹²å‡€çš„æŽ¥å£ï¼‰ -- 通过独立é‡å†™æ¯ä¸ªç»„件,你å¯ä»¥è½»æ¾åœ°å†™å‡ºä¸€ä¸ªæ–°çš„è¯­è¨€å¹³å° -- åªæœ‰ä¸€é—¨è¯­è¨€å¯èƒ½å¯¹ä¸€ä¸ªåºžå¤§çš„系统ä¸å¤ªé€‚åˆ - 你的多个模å—由多ç§è¯­è¨€ç»„æˆï¼Œèƒ½è®©ä½ ä¸ºä»»åŠ¡æ‰¾åˆ°æ­£ç¡®çš„å·¥å…·ã€‚ +- There is necessarily loose coupling between the components that are written in different notations (though maybe not clean interfaces), +- You can evolve to a new language/platform easily by rewriting each component individually, +- One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. -这些效应å¯èƒ½æœ‰äº›åªæ˜¯å¿ƒç†ä¸Šçš„,但心ç†ä¸Šçš„东西也很é‡è¦ã€‚最åŽè¦è¯´çš„æ˜¯ï¼Œè¯­è¨€æš´æ”¿çš„代价超过了它能æä¾›çš„æ‰€æœ‰å¥½å¤„。 +Some of these effects may only be psychological; but psychology matters. In the end the costs of language tyranny outweigh any advantage that it provides. -Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) +Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) diff --git a/zh/README.md b/zh/README.md index aee3521..903288f 100644 --- a/zh/README.md +++ b/zh/README.md @@ -1,110 +1,103 @@ -# How to be a Programmer 中文版 +# How to be a Programmer: Community Version + Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -翻译:[梦里风林](https://github.com/ahangchen/How-to-Be-A-Programmer-CN) - -原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) - -如果您希望改进这份中文翻译,请å‘这个[分支](https://github.com/ahangchen/HowToBeAProgrammer)æäº¤Pull request. - -æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 - -## 引言 -  åšä¸€ä¸ªå¥½çš„程åºå‘˜æ˜¯å›°éš¾è€Œé«˜å°šçš„。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程是é‡è¦çš„,而且需è¦å·¨å¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但与好的程åºå‘˜æž„建一个让自己所负责的客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„的软件系统åšçš„é‚£äº›äº‹ç›¸æ¯”ï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶å¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 +## Introduction +To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. -  这是éžå¸¸ä¸»è§‚的,所以,这篇文章注定是个人化的并且一定程度上有点武断。我尽é‡å†™ä¸€äº›ä¸€ä¸ªç¨‹åºå‘˜åœ¨ ta 的工作中éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中是如此的普é以至于我(说的)å¯èƒ½çœ‹èµ·æ¥æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 +This is very subjective and, therefore, this essay is doomed to be personal and somewhat opinionated. I confine myself to problems that a programmer is very likely to have to face in her work. Many of these problems and their solutions are so general to the human condition that I will probably seem preachy. I hope in spite of this that this essay will be useful. -  编程是在课程上教授的。 那些著作: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识)以åŠåšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者此时,你当然也应该读一读 Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 +Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. -  在这篇文章里,boss è¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œé™¤äº†ä¸€äº›è¯­å¢ƒï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚ +In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. -  欢迎æ¥åˆ°è¿™ä¸ªç¾¤ä½“。 +Welcome to the tribe. -## 目录 +## Contents -1. [入门](1-Beginner) - - 个人技能 - - [学会 Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除一个错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [如何使用日志调试](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - - 团队技能 - - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [如何预估编程时间](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [如何优雅地写文档](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) -2. [进阶](2-Intermediate) - - 个人技能 - - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [如何学习新技能](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) - - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) - - 评判 - - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) -3. [高级](3-Advanced) - - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) - - 机智地妥å - - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) - - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何让你的队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) -4. [è¯æ±‡è¡¨](4-Glossary.md) -5. [附录 A - 书ç±/网站](5-Bibliography.md) -6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) -6. [附录 C - 贡献 (至2016å¹´1月)](7-Contributions.md) +1. [Beginner](1-Beginner) + - Personal Skills + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - Team Skills + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [Intermediate](2-Intermediate) + - Personal Skills + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - Team Skills + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - Judgment + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [Advanced](3-Advanced) + - Technological Judgment + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - Compromising Wisely + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - Serving Your Team + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [Glossary](GLOSSARY.md) +5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) +6. [Appendix B - History (As of January 2016)](6-History.md) +6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. From ed0cea215c1176e2f2f3247f63519204107ebece Mon Sep 17 00:00:00 2001 From: ahangchen <1418659400@qq.com> Date: Wed, 30 Mar 2016 13:54:18 +0800 Subject: [PATCH 056/149] revert_miss_ci --- .../Personal-Skills/01-Learn To Debug.md | 25 +-- ...to Debug by Splitting the Problem Space.md | 16 +- .../03-How to Remove an Error.md | 10 +- .../04-How to Debug Using a Log.md | 16 +- ...-How to Understand Performance Problems.md | 12 +- .../06-How to Fix Performance Problems.md | 14 +- .../07-How to Optimize Loops.md | 22 +-- .../08-How to Deal with IO Expense.md | 14 +- .../09-How to Manage Memory.md | 16 +- .../10-How to Deal with Intermittent Bugs.md | 18 +- .../11-How to Learn Design Skills.md | 10 +- .../12-How to Conduct Experiments.md | 29 ++- zh/1-Beginner/README.md | 52 ++--- .../01-Why Estimation is Important.md | 17 +- .../02-How to Estimate Programming Time.md | 22 +-- .../03-How to Find Out Information.md | 20 +- ...o Utilize People as Information Sources.md | 16 +- .../Team-Skills/05-How to Document Wisely.md | 26 +-- .../06-How to Work with Poor Code.md | 12 +- .../07-How to Use Source Code Control.md | 10 +- .../Team-Skills/08-How to Unit Test.md | 10 +- .../09-Take Breaks when Stumped.md | 6 +- .../10-How to Recognize When to Go Home.md | 21 +- .../11-How to Deal with Difficult People.md | 16 +- .../01-How to Fight Schedule Pressure.md | 12 +- .../02-How to Understand the User.md | 20 +- .../03-How to Get a Promotion.md | 14 +- zh/3-Advanced/README.md | 43 ++-- .../01-How to Develop Talent.md | 24 +-- .../02-How to Choose What to Work On.md | 6 +- ...How to Get the Most From Your Teammates.md | 16 +- .../04-How to Divide Problems Up.md | 10 +- .../05-How to Handle Boring Tasks.md | 8 +- .../06-How to Gather Support for a Project.md | 6 +- .../07-How to Grow a System.md | 24 +-- .../08-How to Communicate Well.md | 12 +- ...l People Things They Don't Want to Hear.md | 10 +- .../10-How to Deal with Managerial Myths.md | 17 +- ...1-How to Deal with Organizational Chaos.md | 12 +- ...ow to Tell the Hard From the Impossible.md | 10 +- .../02-How to Utilize Embedded Languages.md | 12 +- .../03-Choosing Languages.md | 18 +- zh/README.md | 183 +++++++++--------- 43 files changed, 445 insertions(+), 442 deletions(-) diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md index 0e2e0bf..6d5a06f 100644 --- a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,21 +1,22 @@ -# Learn to Debug +# 学会 Debug -Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. +调试(Debug)是æˆä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸ä¼šè°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ -Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. +ç†æƒ³ä¸»ä¹‰è€…认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿ï¼Œæ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿ï¼Œä»–ä»¬ä¸æ˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如 GNU ) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果ä¸èƒ½çœ‹é€ä»£ç çš„具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ -Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. +调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ã€‚æ›´å¸¸è§çš„æ˜¯ï¼Œä½ çš„程åºå‡ºçŽ°äº†ä¸€ä¸ªé”™è¯¯ï¼Œå½“ä½ æ£€æŸ¥ä½ å†™çš„ä»£ç çš„æ—¶å€™ï¼Œå´ä¸çŸ¥é“这个错误是怎么å‘生的。ä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 -To get visibility into the execution of a program you must be able to execute the code and observe something about it. Sometimes this is visible, like what is being displayed on a screen, or the delay between two events. In many other cases, it involves things that are not meant to be visible, like the state of some variables inside the code, which lines of code are actually being executed, or whether certain assertions hold across a complicated data structure. These hidden things must be revealed. +ä¸ºäº†èŽ·å¾—ä¸€ä¸ªç¨‹åºæ‰§è¡Œè¿‡ç¨‹çš„å¯è§æ€§ï¼Œä½ å¿…须能够执行代ç å¹¶ä¸”从这个过程中观察到什么。有时候这是显而易è§çš„,比如一些正在呈现在å±å¹•上的东西,或者两个事件之间的延迟。在许多其他的案例中,调试与一些ä¸ä¸€å®šå¯è§çš„东西相关,比如代ç ä¸­ä¸€äº›å˜é‡çš„状æ€ï¼Œå“ªä¸€è¡Œä»£ç æ­£åœ¨è¢«æ‰§è¡Œï¼Œæˆ–è€…ä¸€äº›æ–­è¨€æ˜¯å¦æŒæœ‰äº†ä¸€ä¸ªå¤æ‚的数æ®ç»“构。这些éšè—的细节必须被显露出æ¥ã€‚ -The common ways of looking into the ‘innards’ of an executing program can be categorized as: -- Using a debugging tool, -- Printlining - Making a temporary modification to the program, typically adding lines that print information out, and -- Logging - Creating a permanent window into the programs execution in the form of a log. +观察一个正在执行程åºçš„å†…éƒ¨çš„æ–¹æ³•é€šå¸¸å¯æŒ‰å¦‚下分类: -Debugging tools are wonderful when they are stable and available, but the printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. +- 使用一个调试工具; +- Printlining[(戳这里看释义)](../../4-Glossary.md) - 对程åºåšä¸€ä¸ªä¸´æ—¶çš„修改,通常是加一些行去打å°ä¸€äº›ä¿¡æ¯; +- 日志 - 用日志的形å¼ä¸ºåœ¨ç¨‹åºçš„è¿è¡Œä¸­åˆ›å»ºä¸€ä¸ªæ°¸ä¹…的视窗。 -Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. +当调试工具稳定å¯ç”¨æ—¶ï¼Œå®ƒä»¬æ˜¯éžå¸¸ç¾Žå¦™çš„,但 [Printlining](../../4-Glossary.md) 和写日志甚至是更加é‡è¦çš„。调试工具通常è½åŽäºŽç¼–程语言的å‘展,所以在æŸäº›æ—¶å€™å®ƒä»¬éƒ½å¯èƒ½æ˜¯æ— æ•ˆçš„。å¦å¤–,调试工具å¯èƒ½è½»å¾®æ”¹å˜ç¨‹åºå®žé™…执行的方å¼ã€‚最åŽï¼Œè°ƒè¯•有许多ç§ï¼Œæ¯”如检查一个断言和一个巨大的数æ®ç»“构,这需è¦å†™ä»£ç å¹¶æ”¹å˜ç¨‹åºçš„è¿è¡Œã€‚当调试工具å¯ç”¨æ—¶ï¼ŒçŸ¥é“å¦‚ä½•ä½¿ç”¨è°ƒè¯•å·¥å…·æ˜¯ä¸€ä»¶å¥½äº‹ï¼Œä½†å­¦ä¼šä½¿ç”¨å…¶ä»–ä¸¤ç§æ–¹å¼ä¹Ÿæ˜¯è‡³å…³é‡è¦çš„。 -Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) +当调试需è¦ä¿®æ”¹ä»£ç çš„æ—¶å€™ï¼Œä¸€äº›åˆå­¦è€…会感到害怕。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - 就是因为许多人在一开始é¢å¯¹è¿™ç§ææƒ§çš„的时候表现的太脆弱,我们因此失去了很多本å¯ä»¥å˜æˆä¼˜ç§€ç¨‹åºå‘˜çš„人。 + +Next [å¦‚ä½•é€šè¿‡åˆ†ç¦»é—®é¢˜ç©ºé—´æ¥ Debug](02-How to Debug by Splitting the Problem Space.md) diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index c536c89..9d04270 100644 --- a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -1,15 +1,15 @@ -# How to Debug by Splitting the Problem Space +# 如何通过分割问题 Debug -Debugging is fun, because it begins with a mystery. You think it should do something, but instead it does something else. It is not always quite so simple---any examples I can give will be contrived compared to what sometimes happens in practice. Debugging requires creativity and ingenuity. If there is a single key to debugging it is to use the divide and conquer technique on the mystery. +调试是有趣的,因为它一开始是个迷。你认为它应该这样åšï¼Œä½†å®žé™…上它å´é‚£æ ·åšã€‚很多时候并ä¸ä»…是这么简å•---我给出的任何例å­éƒ½ä¼šè¢«è®¾è®¡æ¥ä¸Žä¸€äº›å¶å°”在现实中会å‘生的情况相比较。调试需è¦åˆ›é€ åŠ›ä¸Žæ™ºè°‹ã€‚å¦‚æžœè¯´è°ƒè¯•æœ‰ç®€å•之é“,那就是在这个谜题上使用分治法。 -Suppose, for example, you created a program that should do ten things in a sequence. When you run it, it crashes. Since you didn't program it to crash, you now have a mystery. When you look at the output, you see that the first seven things in the sequence were run successfully. The last three are not visible from the output, so now your mystery is smaller: ‘It crashed on thing #8, #9, or #10.’ +å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šä¾æ¬¡æ‰§è¡Œå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´å´©æºƒäº†ã€‚但你本æ¥çš„ç›®çš„å¹¶ä¸æ˜¯æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä¸€ä¸ªè°œé¢˜æ‰”ç»™ä½ äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ -Can you design an experiment to see which thing it crashed on? Sure. You can use a debugger or we can add printline statements (or the equivalent in whatever language you are working in) after #8 and #9. When we run it again, our mystery will be smaller, such as ‘It crashed on thing #9.’ I find that bearing in mind exactly what the mystery is at any point in time helps keep one focused. When several people are working together under pressure on a problem it is easy to forget what the most important mystery is. +你是å¦å¯ä»¥è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥è§‚察它是在哪件事情上崩溃呢?当然,你å¯ä»¥ç”¨ä¸€ä¸ªè°ƒè¯•器或者我们å¯ä»¥åœ¨ç¬¬8第9件事åŽé¢åŠ ä¸€äº›[printlining](../../4-Glossary.md)的语å¥ï¼ˆæˆ–è€…ä½ æ­£åœ¨ä½¿ç”¨çš„ä»»ä½•è¯­è¨€é‡Œçš„ç­‰ä»·çš„äº‹æƒ…ï¼‰ï¼Œå½“æˆ‘ä»¬é‡æ–°è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œæˆ‘们的谜题会å˜å¾—æ›´å°ï¼Œæ¯”如“它是在åšç¬¬ä¹ä»¶äº‹çš„æ—¶å€™å´©æºƒçš„â€ã€‚我å‘çŽ°ï¼ŒæŠŠè°œé¢˜æ˜¯æ€Žæ ·çš„ä¸€ç›´æ¸…æ¥šåœ°è®°åœ¨å¿ƒé‡Œèƒ½è®©æˆ‘ä»¬ä¿æŒæ³¨æ„力。当几个人在一个问题的压力下一起工作时,很容易忘记最é‡è¦çš„谜题是什么。 -The key to divide and conquer as a debugging technique is the same as it is for algorithm design: as long as you do a good job splitting the mystery in the middle, you won't have to split it too many times, and you will be debugging quickly. But what is the middle of a mystery? There is where true creativity and experience comes in. +调试技术中分治的关键和算法设计里的分治是一样的。你åªè¦ä»Žä¸­é—´å¼€å§‹åˆ’分,就ä¸ç”¨åˆ’分太多次,并且能快速地调试。但问题的中点在哪里?这就是真正需è¦åˆ›é€ åŠ›å’Œç»éªŒçš„地方了。 -To a true beginner, the space of all possible errors looks like every line in the source code. You don't have the vision you will later develop to see the other dimensions of the program, such as the space of executed lines, the data structure, the memory management, the interaction with foreign code, the code that is risky, and the code that is simple. For the experienced programmer, these other dimensions form an imperfect but very useful mental model of all the things that can go wrong. Having that mental model is what helps one find the middle of the mystery effectively. +对于一个真正的åˆå­¦è€…æ¥è¯´ï¼Œå¯èƒ½å‘生错误的地方好åƒåœ¨ä»£ç çš„æ¯ä¸€è¡Œé‡Œéƒ½æœ‰ã€‚ä¸€å¼€å§‹ï¼Œä½ çœ‹ä¸åˆ°ä¸€äº›ä½ ç¨åŽå¼€å‘的时候æ‰ä¼šçœ‹åˆ°çš„å…¶å®ƒçº¬åº¦ï¼Œæ¯”å¦‚æ‰§è¡Œè¿‡çš„ä»£ç æ®µï¼Œæ•°æ®ç»“构,内存管ç†ï¼Œä¸Žå¤–部代ç çš„交互,一些有风险的代ç ï¼Œä¸€äº›ç®€å•的代ç ã€‚对于一个有ç»éªŒçš„程åºå‘˜ï¼Œè¿™äº›å…¶ä»–的维度为整个å¯èƒ½å‡ºé”™çš„事情展示了一个ä¸å®Œç¾Žä½†æ˜¯æœ‰ç”¨çš„æ€ç»´æ¨¡åž‹ã€‚æ‹¥æœ‰è¿™æ ·çš„æ€ç»´æ¨¡åž‹èƒ½è®©ä¸€ä¸ªäººæ›´é«˜æ•ˆåœ°æ‰¾åˆ°è°œé¢˜çš„中点。 -Once you have evenly subdivided the space of all that can go wrong, you must try to decide in which space the error lies. In the simple case where the mystery is: ‘Which single unknown line makes my program crash?’, you can ask yourself: ‘Is the unknown line executed before or after this line that I judge to be executed in the middle of the running program?’ Usually you will not be so lucky as to know that the error exists in a single line, or even a single block. Often the mystery will be more like: ‘Either there is a pointer in that graph that points to the wrong node, or my algorithm that adds up the variables in that graph doesn't work.’ In that case you may have to write a small program to check that the pointers in the graph are all correct in order to decide which part of the subdivided mystery can be eliminated. +一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 -Next [How to Remove an Error](03-How to Remove an Error.md) +Next [如何移除错误](03-How to Remove an Error.md) diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 8edb6b1..1a24042 100644 --- a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,9 +1,9 @@ -# How to Remove an Error +# 如何移除一个错误 -I've intentionally separated the act of examining a program's execution from the act of fixing an error. But of course, debugging does also mean removing the bug. Ideally you will have perfect understanding of the code and will reach an ‘A-Ha!’ moment where you perfectly see the error and how to fix it. But since your program will often use insufficiently documented systems into which you have no visibility, this is not always possible. In other cases the code is so complicated that your understanding cannot be perfect. +æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤ bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨å…¶ä»–ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统(比如第三方库),所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ -In fixing a bug, you want to make the smallest change that fixes the bug. You may see other things that need improvement; but don't fix those at the same time. Attempt to employ the scientific method of changing one thing and only one thing at a time. The best process for this is to be able to easily reproduce the bug, then put your fix in place, and then rerun the program and observe that the bug no longer exists. Of course, sometimes more than one line must be changed, but you should still conceptually apply a single atomic change to fix the bug. +åœ¨ä¿®å¤ bug 时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯·ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤ bug æœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çް bugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察,直到 bug ä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ª bug。 -Sometimes, there are really several bugs that look like one. It is up to you to define the bugs and fix them one at a time. Sometimes it is unclear what the program should do or what the original author intended. In this case, you must exercise your experience and judgment and assign your own meaning to the code. Decide what it should do, and comment it or clarify it in some way and then make the code conform to your meaning. This is an intermediate or advanced skill that is sometimes harder than writing the original function in the first place, but the real world is often messy. You may have to fix a system you cannot rewrite. +有时候,å¯èƒ½å®žé™…上有几个 bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义 bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 -Next [How to Debug Using a Log](04-How to Debug Using a Log.md) \ No newline at end of file +Next [如何使用日志调试](04-How to Debug Using a Log.md) diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index 320c45a..c53c1bc 100644 --- a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,13 +1,13 @@ -# How to Debug Using a Log +# 如何使用日志调试 -*Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of the programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: +*Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为 log。*Printlining* åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚åœ¨ç†æƒ³çš„状æ€ä¸‹ï¼Œç¨‹åºè¿è¡Œæ—¶äº§ç”Ÿçš„æ—¥å¿—ä¿¡æ¯æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: -- Logs can provide useful information about bugs that are hard to reproduce (such as those that occur in the production environment but that cannot be reproduced in the test environment). -- Logs can provide statistics and data relevant to performance, such as the time passing between statements. -- When configurable, logs allow general information to be captured in order to debug unanticipated specific problems without having to modify and/or redeploy the code just to deal with those specific problems. +- 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„ bug 的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„ bug。 +- 日志å¯ä»¥æä¾›ç»Ÿè®¡å’Œä¸Žæ€§èƒ½ç›¸å…³çš„æ•°æ®ï¼Œæ¯”如语å¥é—´æµé€è¿‡çš„æ—¶é—´ã€‚ +- å¯é…置的情况下,日志å…è®¸æˆ‘ä»¬èŽ·å–æ™®é€šçš„ä¿¡æ¯ï¼Œä½¿å¾—我们å¯ä»¥åœ¨ä¸ä¿®æ”¹æˆ–釿–°éƒ¨ç½²ä»£ç çš„æƒ…况下调试以处ç†å…·ä½“的问题。 -The amount to output into the log is always a compromise between information and brevity. Too much information makes the log expensive and produces *scroll blindness*, making it hard to find the information you need. Too little information and it may not contain what you need. For this reason, making what is output configurable is very useful. Typically, each record in the log will identify its position in the source code, the thread that executed it if applicable, the precise time of execution, and, commonly, an additional useful piece of information, such as the value of some variable, the amount of free memory, the number of data objects, etc. These log statements are sprinkled throughout the source code but are particularly at major functionality points and around risky code. Each statement can be assigned a level and will only output a record if the system is currently configured to output that level. You should design the log statements to address problems that you anticipate. Anticipate the need to measure performance. +需è¦è¾“å‡ºçš„æ—¥å¿—æ•°é‡æ€»æ˜¯ä¸€ä¸ªç®€çº¦ä¸Žä¿¡æ¯é‡çš„æƒè¡¡ã€‚å¤ªå¤šçš„ä¿¡æ¯ä¼šä½¿å¾—日志å˜å¾—昂贵,并且造æˆ[*滚动目盲*](../../4-Glossary.md),使得å‘现你想è¦çš„ä¿¡æ¯å˜å¾—很困难。但信æ¯å¤ªå°‘çš„è¯ï¼Œæ—¥å¿—å¯èƒ½ä¸åŒ…å«ä½ éœ€è¦çš„ä¿¡æ¯ã€‚出于这个原因,让日志的输出å¯é…置是éžå¸¸æœ‰ç”¨çš„。通常,日志中的æ¯ä¸ªè®°å½•会标记它在æºä»£ç é‡Œçš„ä½ç½®ï¼Œæ‰§è¡Œå®ƒçš„线程(如果å¯ç”¨çš„è¯ï¼‰ï¼Œæ—¶é—´ç²¾åº¦ï¼Œå¹¶ä¸”通常还有一些é¢å¤–的有效信æ¯ï¼Œæ¯”如一些å˜é‡çš„值,剩余内存大å°ï¼Œæ•°æ®å¯¹è±¡çš„æ•°é‡ï¼Œç­‰ç­‰ã€‚è¿™äº›æ—¥å¿—è¯­å¥æ’’éæºç ï¼Œä½†åªå‡ºçŽ°åœ¨ä¸»è¦çš„功能点和一些å¯èƒ½å‡ºçް屿œºçš„代ç é‡Œã€‚æ¯ä¸ªè¯­å¥å¯ä»¥è¢«èµ‹äºˆä¸€ä¸ªç­‰çº§ï¼Œå¹¶ä¸”åªæœ‰åœ¨ç³»ç»Ÿè¢«é…ç½®æˆè¾“出相应等级的记录的时候æ‰è¾“å‡ºè¿™ä¸ªç­‰çº§çš„è®°å½•ã€‚ä½ åº”è¯¥è®¾è®¡å¥½æ—¥å¿—è¯­å¥æ¥æ ‡è®°ä½ é¢„期的问题。预估测é‡ç¨‹åºè¡¨çŽ°çš„å¿…è¦æ€§ã€‚ -If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. +如果你有一个永久的日志,printling 现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 -Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) \ No newline at end of file +Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How to Understand Performance Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index e08f054..46b50b0 100644 --- a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,11 +1,11 @@ -# How to Understand Performance Problems +# 如何ç†è§£æ€§èƒ½é—®é¢˜ -Learning to understand the performance of a running system is unavoidable for the same reason that learning debugging is. Even if you understand perfectly precisely the cost of the code you write, your code will make calls into other software systems that you have little control over or visibility into. However, in practice performance problems are a little different and a little easier than debugging in general. +学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹  debug 是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žã€ç²¾ç¡®åœ°ç†è§£äº†ä½ çš„代ç è¿è¡Œæ—¶æ‰€äº§ç”Ÿçš„开销,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 -Suppose that you or your customers consider a system or a subsystem to be too slow. Before you try to make it faster, you must build a mental model of why it is slow. To do this you can use a profiling tool or a good log to figure out where the time or other resources are really being spent. There is a famous dictum that 90% of the time will be spent in 10% of the code. I would add to that the importance of input/output expense (I/O) to performance issues. Often most of the time is spent in I/O in one way or another. Finding the expensive I/O and the expensive 10% of the code is a good first step to building your mental model. +å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨ I/O 上。å‘现昂贵的 I/O 和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 -There are many dimensions to the performance of a computer system, and many resources consumed. The first resource to measure is *wall-clock time*, the total time that passes for the computation. Logging *wall-clock time* is particularly valuable because it can inform about unpredictable circumstances that arise in situations where other profiling is impractical. However, this may not always represent the whole picture. Sometimes something that takes a little longer but doesn't burn up so many processor seconds will be much better in the computing environment you actually have to deal with. Similarly, memory, network bandwidth, database or other server accesses may, in the end, be far more expensive than processor seconds. +计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯ç¨å¾®å¤šèŠ±è´¹äº†ä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ -Contention for shared resources that are synchronized can cause deadlock and starvation. Deadlock is the inability to proceed because of improper synchronization or resource demands. Starvation is the failure to schedule a component properly. If it can be at all anticipated, it is best to have a way of measuring this contention from the start of your project. Even if this contention does not occur, it is very helpful to be able to assert that with confidence. +竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 -Next [How to Fix Performance Problems](06-How to Fix Performance Problems.md) +Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How to Fix Performance Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index 8949e74..c2778f8 100644 --- a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,13 +1,13 @@ -# How to Fix Performance Problems +# å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜ -Most software projects can be made with relatively little effort 10 to 100 times faster than they are at the time they are first released. Under time-to-market pressure, it is both wise and effective to choose a solution that gets the job done simply and quickly, but less efficiently than some other solution. However, performance is a part of usability, and often it must eventually be considered more carefully. +大部分软件都å¯ä»¥é€šè¿‡ä»˜å‡ºç›¸å¯¹è¾ƒå°çš„努力,让他们比刚å‘布时快上10到100å€ã€‚在市场的压力下,选择一个简å•而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 -The key to improving the performance of a very complicated system is to analyse it well enough to find the *bottlenecks*, or places where most of the resources are consumed. There is not much sense in optimizing a function that accounts for only 1% of the computation time. As a rule of thumb you should think carefully before doing anything unless you think it is going to make the system or a significant part of it at least twice as fast. There is usually a way to do this. Consider the test and quality assurance effort that your change will require. Each change brings a test burden with it, so it is much better to have a few big changes. +æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œæ¥å‘现其“瓶颈â€ï¼Œæˆ–者其资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 -After you've made a two-fold improvement in something, you need to at least rethink and perhaps reanalyze to discover the next-most-expensive bottleneck in the system, and attack that to get another two-fold improvement. +当你在æŸä¸ªæ–¹é¢åšäº†ä¸€ä¸ªä¸¤å€æå‡åŽï¼Œä½ éœ€è¦è‡³å°‘釿–°è€ƒè™‘并且å¯èƒ½é‡æ–°åˆ†æžï¼ŒåŽ»å‘çŽ°ç³»ç»Ÿä¸­ä¸‹ä¸€ä¸ªæœ€æ˜‚è´µçš„ç“¶é¢ˆï¼Œå¹¶ä¸”æ”»ç ´é‚£ä¸ªç“¶é¢ˆï¼Œå¾—åˆ°ä¸‹ä¸€ä¸ªä¸¤å€æå‡ã€‚ -Often, the bottlenecks in performance will be an example of counting cows by counting legs and dividing by four, instead of counting heads. For example, I've made errors such as failing to provide a relational database system with a proper index on a column I look up a lot, which probably made it at least 20 times slower. Other examples include doing unnecessary I/O in inner loops, leaving in debugging statements that are no longer needed, unnecessary memory allocation, and, in particular, inexpert use of libraries and other subsystems that are often poorly documented with respect to performance. This kind of improvement is sometimes called *low-hanging fruit*, meaning that it can be easily picked to provide some benefit. +é€šå¸¸ï¼Œæ€§èƒ½çš„ç“¶é¢ˆçš„ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œæ•°ç‰›çš„æ•°ç›®ï¼šé€šè¿‡æ•°è„šçš„æ•°é‡ç„¶åŽé™¤ä»¥4,还是数头的数é‡ã€‚举些例å­ï¼Œæˆ‘曾犯过的一些错误:没能在关系数æ®åº“中,为我ç»å¸¸æŸ¥è¯¢çš„那一列æä¾›é€‚当的索引,这å¯èƒ½ä¼šä½¿å¾—它至少慢了20å€ã€‚其他例å­è¿˜åŒ…括在循环里åšä¸å¿…è¦çš„ I/O æ“作,留下ä¸å†éœ€è¦çš„调试语å¥ï¼Œä¸å†éœ€è¦çš„内存分é…,还有,尤其是,ä¸ä¸“业地使用库和其他的没有为性能充分编写过的å­ç³»ç»Ÿã€‚è¿™ç§æå‡æœ‰æ—¶å€™è¢«å«åšâ€œä½Žåž‚的水果â€ï¼Œæ„æ€æ˜¯å®ƒå¯ä»¥è¢«è½»æ˜“地获å–,然åŽäº§ç”Ÿå·¨å¤§çš„好处。 -What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down. You can continue making small improvements or you can seriously redesign a system or a subsystem. (This is a great opportunity to use your skills as a good programmer, not only in the new design but also in convincing your boss that this is a good idea.) However, before you argue for the redesign of a subsystem, you should ask yourself whether or not your proposal will make it five to ten time better. +你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的 boss 这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ -Next [How to Optimize Loops](07-How to Optimize Loops.md) +Next [如何优化循环](07-How to Optimize Loops.md) diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index 491a6b2..8d5f4ec 100644 --- a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,15 +1,15 @@ -# How to Optimize Loops +# 如何优化循环 -Sometimes you'll encounter loops, or recursive functions, that take a long time to execute and are bottlenecks in your product. Before you try to make the loop a little faster, spend a few minutes considering if there is a way to remove it entirely. Would a different algorithm do? Could you compute that while computing something else? If you can't find a way around it, then you can optimize the loop. This is simple; move stuff out. In the end, this will require not only ingenuity but also an understanding of the expense of each kind of statement and expression. Here are some suggestions: +有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…éœ€è¦æ™ºæ…§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: -- Remove floating point operations. -- Don't allocate new memory blocks unnecessarily. -- Fold constants together. -- Move I/O into a buffer. -- Try not to divide. -- Try not to do expensive typecasts. -- Move a pointer rather than recomputing indices. +- 删除浮点è¿ç®—æ“作。 +- éžå¿…è¦æ—¶ä¸è¦åˆ†é…新的内存。 +- 把常é‡éƒ½æ”¾åœ¨ä¸€èµ·å£°æ˜Žã€‚ +- 把 I/O 放在缓冲里åšã€‚ +- å°½é‡ä¸ä½¿ç”¨é™¤æ³•。 +- å°½é‡ä¸é€‚用昂贵的类型转æ¢ã€‚ +- 移动指针而éžé‡æ–°è®¡ç®—索引。 -The cost of each of these operations depends on your specific system. On some systems compilers and hardware do these things for you. Clear, efficient code is better than code that requires an understanding of a particular platform. +这些æ“作的具体代价å–决于你的具体系统。在一些系统中,编译器和硬件会为你åšä¸€äº›äº‹æƒ…ã€‚ä½†å¿…é¡»æ¸…æ¥šï¼Œæœ‰æ•ˆçš„ä»£ç æ¯”需è¦åœ¨ç‰¹æ®Šå¹³å°ä¸‹ç†è§£çš„代ç è¦å¥½ã€‚ -Next [How to Deal with I/O Expense](08-How to Deal with IO Expense.md) +Next [如何处ç†I/O开销](08-How to Deal with IO Expense.md) diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index f396d5b..81f2971 100644 --- a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,13 +1,13 @@ -# How to Deal with I/O Expense +# 如何处ç†I/O代价 -For a lot of problems, processors are fast compared to the cost of communicating with a hardware device. This cost is usually abbreviated I/O, and can include network cost, disk I/O, database queries, file I/O, and other use of some hardware not very close to the processor. Therefore building a fast system is often more a question of improving I/O than improving the code in some tight loop, or even improving an algorithm. +在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„ I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜ I/O,数æ®åº“查询,文件 I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜ I/O,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法的问题。 -There are two very fundamental techniques to improving I/O: caching and representation. Caching is avoiding I/O (generally avoiding the reading of some abstract value) by storing a copy of that value locally so no I/O is performed to get the value. The first key to caching is to make it crystal clear which data is the master and which are copies. There is only one master - period. Caching brings with it the danger that the copy sometimes can't reflect changes to the master instantaneously. +有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ– I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦å†æ‰§è¡Œ I/O,以此æ¥é¿å… I/O(通常é¿å…读å–一些抽象的值)。缓存的关键在于è¦è®©å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬å˜å¾—显而易è§ã€‚主干的数æ®åªæœ‰ä¸€ä»½ï¼ˆåœ¨ä¸€ä¸ªæ›´æ–°å‘¨æœŸé‡Œï¼‰ã€‚缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 -Representation is the approach of making I/O cheaper by representing data more efficiently. This is often in tension with other demands, like human readability and portability. +ä»£è¡¨æ˜¯é€šè¿‡æ›´é«˜æ•ˆåœ°è¡¨ç¤ºæ•°æ®æ¥è®© I/O 更廉价。这通常会é™åˆ¶å…¶ä»–çš„è¦æ±‚,比如å¯è¯»æ€§å’Œå¯ç§»æ¤æ€§ã€‚ -Representations can often be improved by a factor of two or three from their first implementation. Techniques for doing this include using a binary representation instead of one that is human readable, transmitting a dictionary of symbols along with the data so that long symbols don't have to be encoded, and, at the extreme, things like Huffman encoding. +代表通常å¯ä»¥ç”¨ä»–ä»¬ç¬¬ä¸€å®žçŽ°ä¸­çš„ä¸¤åˆ°ä¸‰ä¸ªå› å­æ¥åšä¼˜åŒ–。实现这点的技术包括使用二进制表示而éžäººç±»å¯è¯†åˆ«çš„æ–¹å¼,传递数æ®çš„åŒæ—¶ä¹Ÿä¼ é€’一个符å·è¡¨ï¼Œè¿™æ ·é•¿çš„符å·å°±ä¸éœ€è¦è¢«ç¼–ç ï¼Œä¸€ä¸ªæžç«¯çš„例孿˜¯å“ˆå¼—曼编ç ã€‚ -A third technique that is sometimes possible is to improve the locality of reference by pushing the computation closer to the data. For instance, if you are reading some data from a database and computing something simple from it, such as a summation, try to get the database server to do it for you. This is highly dependent on the kind of system you're working with, but you should explore it. +å¦ä¸€ç§æœ‰æ—¶èƒ½å¤Ÿç”¨æ¥ä¼˜åŒ–本地引用的技术是让计算更接近数æ®ã€‚例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 -Next [How to Manage Memory](09-How to Manage Memory.md) \ No newline at end of file +Next [如何管ç†å†…å­˜](09-How to Manage Memory.md) diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md index a20adf4..a87e0ad 100644 --- a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -1,15 +1,15 @@ -# How to Manage Memory +# 如何管ç†å†…å­˜ -Memory is a precious resource that you can't afford to run out of. You can ignore it for a while but eventually you will have to decide how to manage memory. +内存是一ç§ä½ ä¸å¯ä»¥è€—尽的ç贵资æºã€‚在一段时期里,你å¯ä»¥æ— è§†å®ƒï¼Œä½†æœ€ç»ˆä½ å¿…须决定如何管ç†å†…存。 -Space that needs to persist beyond the scope of a single subroutine is often called *heap allocated*. A chunk of memory is useless, hence *garbage*, when nothing refers to it. Depending on the system you use, you may have to explicitly deallocate memory yourself when it is about to become garbage. More often you may be able to use a system that provides a *garbage collector*. A garbage collector notices garbage and frees its space without any action required by the programmer. Garbage collection is wonderful: it lessens errors and increases code brevity and concision cheaply. Use it when you can. +堆内存是在å•一å­ç¨‹åºèŒƒå›´å¤–ï¼Œéœ€è¦æŒç»­ï¼ˆä¿ç•™ï¼‰çš„空间。一大å—内存,在没有东西指å‘它的时候,是无用的,因此被称为*垃圾*。根æ®ä½ æ‰€ä½¿ç”¨çš„系统的ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦è‡ªå·±æ˜¾å¼é‡Šæ”¾å°†è¦å˜æˆåžƒåœ¾çš„内存。更多时候你å¯èƒ½ä½¿ç”¨ä¸€ä¸ªæœ‰*垃圾回收器*的系统。一个垃圾回收器会自己注æ„到垃圾的存在并且在ä¸éœ€è¦ç¨‹åºå‘˜åšä»»ä½•事情的情况下释放它的内存空间。垃圾回收器是奇妙的:它å‡å°äº†é”™è¯¯ï¼Œç„¶åŽå¢žåŠ äº†ä»£ç çš„ç®€æ´æ€§ã€‚如果å¯ä»¥çš„è¯ï¼Œä½¿ç”¨åžƒåœ¾å›žæ”¶å™¨ã€‚ -But even with garbage collection, you can fill up all memory with garbage. A classic mistake is to use a hash table as a cache and forget to remove the references in the hash table. Since the reference remains, the referent is non-collectable but useless. This is called a *memory leak*. You should look for and fix memory leaks early. If you have long running systems memory may never be exhausted in testing but will be exhausted by the user. +但是å³ä½¿æœ‰äº†åžƒåœ¾å›žæ”¶æœºåˆ¶ï¼Œä½ è¿˜æ˜¯å¯èƒ½æŠŠæ‰€æœ‰çš„内存填满垃圾。一个典型的错误是把哈希表作为一个缓存,但是忘了删除对哈希表的引用。因为引用ä»ç„¶å­˜åœ¨ï¼Œè¢«å¼•用者是ä¸å¯å›žæ”¶ä½†å´æ— ç”¨çš„。这就å«åš*内存泄露*。你应该尽早å‘现并且修å¤å†…存泄露。如果你有一个长时间è¿è¡Œçš„系统,内存å¯èƒ½åœ¨æµ‹è¯•中ä¸ä¼šè¢«è€—尽,但å¯èƒ½åœ¨ç”¨æˆ·é‚£é‡Œè¢«è€—尽。 -The creation of new objects is moderately expensive on any system. Memory allocated directly in the local variables of a subroutine, however, is usually cheap because the policy for freeing it can be very simple. You should avoid unnecessary object creation. +创建新对象在任何系统里都是有点昂贵的。然而,在å­ç¨‹åºé‡Œç›´æŽ¥ä¸ºå±€éƒ¨å˜é‡åˆ†é…内存通常很便宜,因为释放它的策略很简å•。你应该é¿å…ä¸å¿…è¦çš„对象创建。 -An important case occurs when you can define an upper bound on the number of objects you will need at one time. If these objects all take up the same amount of memory, you may be able to allocate a single block of memory, or a buffer, to hold them all. The objects you need can be allocated and released inside this buffer in a set rotation pattern, so it is sometimes called a ring buffer. This is usually faster than heap allocation. +当你å¯ä»¥å®šä¹‰ä½ ä¸€æ¬¡éœ€è¦çš„æ•°é‡çš„上界的时候,一个é‡è¦çš„æƒ…况出现了:如果这些对象都å ç”¨ç›¸åŒå¤§å°çš„内存,你å¯ä»¥ä½¿ç”¨å•独的一å—å†…å­˜ï¼Œæˆ–ç¼“å­˜ï¼Œæ¥æŒæœ‰æ‰€æœ‰çš„这些对象。你需è¦çš„对象å¯ä»¥åœ¨è¿™ä¸ªç¼“存里以循环的方å¼åˆ†é…å’Œé‡Šæ”¾ï¼Œæ‰€ä»¥å®ƒæœ‰æ—¶å€™è¢«ç§°ä¸ºçŽ¯ç¼“å­˜ã€‚è¿™é€šå¸¸æ¯”å †å†…å­˜åˆ†é…æ›´å¿«ã€‚(译者注:这也被称为对象池。) -Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form or garbage collection, such as reference counting, to do this for them. +æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no free)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 -Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) \ No newline at end of file +Next [如何处ç†å¶çŽ°çš„ Bug](10-How to Deal with Intermittent Bugs.md) diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 4108f58..0cf8680 100644 --- a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,17 +1,17 @@ -# How to Deal with Intermittent Bugs +# 如何处ç†å¶çŽ°çš„ Bugs -The intermittent bug is a cousin of the 50-foot-invisible-scorpion-from-outer-space kind of bug. This nightmare occurs so rarely that it is hard to observe, yet often enough that it can't be ignored. You can't debug because you can't find it. +å¶çް bug 是一ç§ç±»ä¼¼äºŽå¤–太空50è¶³éšèº«èŽå­çš„东西。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ -Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess at what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. +尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„ bug å¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•ç€åŽ»è®°å½•è¿™ä¸ª bug 出现时的情景,这样你å¯ä»¥åŽ»æŽ¨æµ‹åˆ°åº•æ˜¯ä»€ä¹ˆæ ·çš„å¯å˜æ€§ã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å¯å˜æ€§çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 -Try, try, try to reproduce the bug in a controlled way. If you can't reproduce it, set a trap for it by building a logging system, a special one if you have to, that can log what you guess you need when it really does occur. Resign yourself to that if the bug only occurs in production and not at your whim, this may be a long process. The hints that you get from the log may not provide the solution but may give you enough information to improve the logging. The improved logging system may take a long time to be put into production. Then, you have to wait for the bug to reoccur to get more information. This cycle can go on for some time. +å°è¯•,å°è¯•,å°è¯•去在一ç§å¯æŽ§çš„æ–¹å¼ä¸‹é‡çŽ°è¿™ä¸ª bug。如果你ä¸èƒ½é‡çŽ°å®ƒï¼Œç”¨æ—¥å¿—ç³»ç»Ÿç»™å®ƒè®¾ç½®ä¸€ä¸ªåœˆå¥—ï¼Œæ¥åœ¨ä½ éœ€è¦çš„æ—¶å€™ï¼Œåœ¨å®ƒçœŸçš„å‘生的时候,记录你猜想的,需è¦çš„ä¸œè¥¿ã€‚é‡æ–°è®¾è®¡è¿™ä¸ªåœˆå¥—,如果这个bugåªå‘生在产å“中,且ä¸åœ¨ä½ çš„猜想中的è¯ï¼Œè¿™å¯èƒ½æ˜¯ä¸€ä¸ªæ¼«é•¿çš„过程。你从日志中得到的(信æ¯ï¼‰å¯èƒ½ä¸èƒ½æä¾›è§£å†³æ–¹æ¡ˆï¼Œä½†å¯èƒ½ç»™ä½ è¶³å¤Ÿçš„ä¿¡æ¯åŽ»ä¼˜åŒ–è¿™ä¸ªæ—¥å¿—ã€‚ä¼˜åŒ–åŽçš„æ—¥å¿—系统å¯èƒ½èŠ±å¾ˆé•¿æ—¶é—´æ‰èƒ½è¢«æ”¾å…¥äº§å“中使用。然åŽï¼Œä½ å¿…须等待 bug 釿–°å‡ºçŽ°ä»¥èŽ·å¾—æ›´å¤šçš„ä¿¡æ¯ã€‚这个循环å¯èƒ½ä¼šç»§ç»­å¥½å‡ æ¬¡ã€‚ -The stupidest intermittent bug I ever created was in a multi-threaded implementation of a functional programming language for a class project. I had very carefully ensured correct concurrent evaluation of the functional program, good utilization of all the CPUs available (eight, in this case). I simply forgot to synchronize the garbage collector. The system could run a long time, often finishing whatever task I began, before anything noticeable went wrong. I'm ashamed to admit I had begun to question the hardware before my mistake dawned on me. +我曾创建过的最愚蠢的å¶çް bug 是在用一个函数å¼ç¼–程语言里为类工程åšå¤šçº¿ç¨‹å®žçŽ°çš„æ—¶å€™ã€‚æˆ‘éžå¸¸ä»”细地ä¿è¯äº†å‡½æ•°å¼ç¨‹åºçš„å¹¶å‘估计, CPU 的充分使用(在这个例å­é‡Œï¼Œæ˜¯8个 CPU)。我å´ç®€å•åœ°å¿˜è®°äº†åŽ»åŒæ­¥åžƒåœ¾å›žæ”¶å™¨ã€‚系统å¯èƒ½è¿è¡Œäº†å¾ˆé•¿ä¸€æ®µæ—¶é—´ï¼Œç»å¸¸ç»“æŸåœ¨æˆ‘开始任何一个任务的时候,在任何能被注æ„到的事情出错之å‰ã€‚æˆ‘å¾ˆé—æ†¾åœ°æ‰¿è®¤åœ¨æˆ‘ç†è§£æˆ‘的错误之å‰ï¼Œæˆ‘甚至开始怀疑硬件了。 -At work we recently had an intermittent bug that took us several weeks to find. We have multi-threaded application servers in Javaâ„¢ behind Apacheâ„¢ web servers. To maintain fast page turns, we do all I/O in small set of four separate threads that are different than the page-turning threads. Every once in a while these would apparently get ‘stuck’ and cease doing anything useful, so far as our logging allowed us to tell, for hours. Since we had four threads, this was not in itself a giant problem - unless all four got stuck. Then the queues emptied by these threads would quickly fill up all available memory and crash our server. It took us about a week to figure this much out, and we still didn't know what caused it, when it would happen, or even what the threads where doing when they got ‘stuck’. +在工作中我们最近有这样一个å¶çŽ°çš„ bug 让我们花了几个星期æ‰å‘现。我们有一个多线程的基于 Apacheâ„¢ çš„ Javaâ„¢web æœåС噍,在维护第一个页é¢è·³è½¬çš„æ—¶å€™ï¼Œæˆ‘们在四个独立线程而éžé¡µé¢è·³è½¬çº¿ç¨‹é‡Œï¼Œä¸ºä¸€ä¸ªå°çš„é›†åˆæ‰§è¡Œæ‰€æœ‰çš„ I/O æ“作。æ¯ä¸€æ¬¡è·³è½¬ä¼šäº§ç”Ÿæ˜Žæ˜¾çš„å¡é¡¿ç„¶åŽåœæ­¢åšä»»ä½•æœ‰ç”¨çš„äº‹æƒ…ï¼Œç›´åˆ°å‡ ä¸ªå°æ—¶åŽï¼Œæˆ‘们的日志æ‰è®©æˆ‘们了解到底å‘生了什么。因为我们有四个线程,在一个线程内部å‘ç”Ÿè¿™ç§æƒ…况并䏿˜¯ä»€ä¹ˆå¤§é—®é¢˜ï¼Œé™¤éžæ‰€æœ‰çš„四个线程都阻塞了。然åŽè¢«è¿™äº›çº¿ç¨‹æŽ’空的队列会迅速填充所有å¯ç”¨çš„内存,然åŽå¯¼è‡´æˆ‘们的æœåŠ¡å™¨å´©æºƒã€‚è¿™ä¸ª bug 花了我们一个星期去æªå‡ºè¿™ä¸ªé—®é¢˜ï¼Œä½†æˆ‘们ä»ç„¶ä¸çŸ¥é“什么导致了这个现象,ä¸çŸ¥é“它什么时候会å‘生,甚至ä¸çŸ¥é“它们阻塞的时候,线程们在干什么。 -This illustrates some risk associated with third-party software. We were using a licensed piece of code that removed HTML tags from text. Due to its place of origin we affectionately referred to this as ‘the French stripper‘. Although we had the source code (thank goodness!) we had not studied it carefully until by turning up the logging on our servers we finally realized that the email threads were getting stuck in the French stripper. +这表明了有关使用第三方软件的一些风险。我们在使用一段授æƒçš„代ç ï¼Œä»Žæ–‡æœ¬ä¸­ç§»é™¤HTML标签。å—它的起æºçš„å½±å“,我们把它å«åšæ³•å›½è„±è¡£èˆžè€…ã€‚å°½ç®¡æˆ‘ä»¬æœ‰æºä»£ç ï¼ˆç”±è¡·æ„Ÿè°¢ï¼ï¼‰ï¼Œæˆ‘们没有仔细研究它,直到查看我们æœåŠ¡å™¨çš„æ—¥å¿—çš„æ—¶å€™ï¼Œæˆ‘ä»¬æœ€ç»ˆæ„识到是“法国脱衣舞者â€ä½¿é‚®ä»¶çº¿ç¨‹é˜»å¡žäº†ã€‚ -The stripper performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. +这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是 N 的平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。正å¼ç”±äºŽè¿™äº›æ–‡æœ¬é€šå¸¸éƒ½ä¼šå‡ºçŽ°ï¼Œæ‰€ä»¥æˆ‘ä»¬æ‰å¯ä»¥é©¬ä¸Šå‘现这个 bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 -Next [How to Learn Design Skills](11-How to Learn Design Skills.md) +Next [如何学习设计技能](11-How to Learn Design Skills.md) diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 30c495c..916c1be 100644 --- a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,9 +1,9 @@ -# How to Learn Design Skills +# 如何学习设计技能 -To learn how to design software, study the action of a mentor by being physically present when they are designing. Then study well-written pieces of software. After that, you can read some books on the latest design techniques. +为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œåœ¨ä»–身边学习他的行为。然åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如 android 系统中的谷歌官方应用æºç ï¼‰ã€‚在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 -Then you must do it yourself. Start with a small project. When you are finally done, consider how the design failed or succeeded and how you diverged from your original conception. Then move on to larger projects, hopefully in conjunction with other people. Design is a matter of judgement that takes years to acquire. A smart programmer can learn the basics adequately in two months and can improve from there. +ç„¶åŽä½ å¿…须自己动手了。从一个å°çš„工程开始,当你最åŽå®Œæˆæ—¶ï¼Œè€ƒè™‘为什么这个设计失败了或æˆåŠŸäº†ï¼Œä½ æ˜¯æ€Žæ ·å离你最åˆçš„设想的。然åŽç»§ç»­åŽ»ç€æ‰‹å¤§ä¸€ç‚¹çš„工程,在与其他人åˆä½œæ—¶ä¼šæ›´æœ‰å¸Œæœ›ã€‚设计是一ç§éœ€è¦èŠ±å¾ˆå¤šå¹´åŽ»å­¦ä¹ çš„å…³äºŽè¯„åˆ¤çš„äº‹æƒ…ã€‚ä¸€ä¸ªèªæ˜Žçš„程åºå‘˜å¯ä»¥åœ¨ä¸¤ä¸ªæœˆå†…充分打好这ç§åŸºç¡€ï¼Œç„¶åŽä»Žè¿™é‡Œå¼€å§‹è¿›æ­¥ã€‚ -It is natural and helpful to develop your own style, but remember that design is an art, not a science. People who write books on the subject have a vested interest in making it seem scientific. Don't become dogmatic about particular design styles. +å‘展出你自己的风格是自然而有用的,但记ä½ï¼Œè®¾è®¡æ˜¯ä¸€ç§è‰ºæœ¯ï¼Œè€Œä¸æ˜¯ä¸€ç§æŠ€æœ¯ã€‚人们写的关于这个主题的书都有一ç§ä½¿å¾—å®ƒå¥½åƒæ˜¯æŠ€æœ¯çš„æ—¢å®šçš„兴趣。ä¸è¦æ­¦æ–­å¯¹å¾…特定的设计风格。 -Next [How to Conduct Experiments](12-How to Conduct Experiments.md) +Next [如何进行实验](12-How to Conduct Experiments.md) diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index 916a540..dce60d6 100644 --- a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,23 +1,22 @@ -# How to Conduct Experiments +# 如何进行实验 -The late, great Edsger Dijkstra has eloquently explained that Computer Science is not an experimental science[ExpCS] and doesn't depend on electronic computers. As he puts it referring to the 1960s [Knife], +已故的伟大的 Edsger Dijkstra 曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] -> ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. +> ...å±å®³å·²ç»å‡ºçŽ°ï¼šä¸»é¢˜çŽ°åœ¨å·²ç»å˜æˆäº†â€œè®¡ç®—机科学†- è¿™å®žé™…ä¸Šï¼Œåƒæ˜¯æŠŠå¤–科手术引用为“手术刀科学†- 这在人们心中深深æ¤å…¥äº†è¿™æ ·ä¸€ä¸ªæ¦‚念:计算机科学是关于机器和它们的外围设备的。 -Programming ought not to be an experimental science, but most working programmers do not have the luxury of engaging in what Dijkstra means by computing science. We must work in the realm of experimentation, just as some, but not all, physicists do. If thirty years from now programming can be performed without experimentation, it will be a great accomplishment of Computer Science. +编程ä¸åº”该是一门实验科学,但大多数èŒä¸šç¨‹åºå‘˜å¹¶æ²¡æœ‰ä¿å« Dijkstra 对于计算机科学的解释的è£è€€ã€‚æˆ‘ä»¬å¿…é¡»åœ¨å®žéªŒçš„é¢†åŸŸé‡Œå·¥ä½œï¼Œæ­£å¦‚ä¸€éƒ¨åˆ†ï¼Œä½†éžæ‰€æœ‰çš„物ç†å­¦å®¶åšçš„那样。如果三åå¹´åŽï¼Œç¼–程å¯ä»¥åœ¨ä¸è¿›è¡Œä»»ä½•å®žéªŒçš„å‰æä¸‹è¿›è¡Œï¼Œè¿™å°†æ˜¯è®¡ç®—æœºç§‘å­¦çš„ä¸€ä¸ªå·¨å¤§æˆå°±ã€‚ -The kinds of experiments you will have to perform include: +你需è¦è¿›è¡Œçš„实验包括: +- 用å°çš„例孿µ‹è¯•系统以验è¯å®ƒä»¬éµå¾ªæ–‡æ¡£ï¼Œæˆ–者在没有文档时,ç†è§£å®ƒä»¬çš„å应; +- 测试一些å°çš„代ç ä¿®æ”¹åŽ»éªŒè¯å®ƒä»¬æ˜¯å¦ç¡®å®žä¿®å¤äº†ä¸€ä¸ª bugï¼› +- 由于对一个系统ä¸å®Œå…¨çš„ç†è§£ï¼Œéœ€è¦åœ¨ä¸¤ç§ä¸åŒæƒ…况下测é‡å®ƒä»¬çš„æ€§èƒ½è¡¨çŽ°ï¼› +- 检查数æ®çš„完整性; +- 对困难的或者难以é‡çŽ°çš„ bug,收集解决方案中å¯èƒ½æç¤ºçš„统计数æ®ã€‚ -- Testing systems with small examples to verify that they conform to the documentation or to understand their response when there is no documentation, -- Testing small code changes to see if they actually fix a bug, -- Measuring the performance of a system under two different conditions due to imperfect knowledge of their performance characteristics, -- Checking the integrity of data, and -- Collecting statistics that may hint at the solution to difficult or hard-to-repeat bugs. +我ä¸è®¤ä¸ºåœ¨è¿™ç¯‡æ–‡ç« é‡Œæˆ‘å¯ä»¥è®²è¿°å®žéªŒçš„设计,你会在实践中学习到这方é¢çš„知识。然而,我å¯ä»¥æä¾›ä¸¤ç‚¹å»ºè®®ï¼š -I don't think in this essay I can explain the design of experiments; you will have to study and practice. However, I can offer two bits of advice. +第一,对你的å‡è®¾æˆ–è€…ä½ è¦æµ‹è¯•的断言è¦éžå¸¸æ¸…楚。把å‡è®¾å†™ä¸‹æ¥ä¹Ÿæ˜¯å¾ˆæœ‰ç”¨çš„,尤其是如果你有点迷惑或者与其他人åˆä½œæ—¶ã€‚ -First, try to be very clear about your hypothesis, or the assertion that you are trying to test. It also helps to write the hypothesis down, especially if you find yourself confused or are working with others. +第二,你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验尽é‡åŽ»æä¾›æœ€å¤šçš„ä¿¡æ¯ã€‚但ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šè®©å®žéªŒä¿æŒç®€å•å˜çš„å›°éš¾ - 你必须通过ç»éªŒæ¥æå‡è¿™ç§æƒè¡¡çš„能力。 -You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. - -Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) +Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why Estimation is Important.md) diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md index fb30975..14e1080 100644 --- a/zh/1-Beginner/README.md +++ b/zh/1-Beginner/README.md @@ -1,27 +1,27 @@ -# 1. Beginner +# 1. 入门 -- Personal Skills - - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) -- Team Skills - - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](Team-Skills/11-How to Deal with Difficult People.md) \ No newline at end of file +- 个人技能 + - [学会 Debug](Personal-Skills/01-Learn To Debug.md) + - [如何通过分割问题 Debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除一个错误](Personal-Skills/03-How to Remove an Error.md) + - [如何使用日志调试](Personal-Skills/04-How to Debug Using a Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How to Understand Performance Problems.md) + - [如何解决性能问题](Personal-Skills/06-How to Fix Performance Problems.md) + - [如何优化循环](Personal-Skills/07-How to Optimize Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How to Deal with IO Expense.md) + - [如何管ç†å†…å­˜](Personal-Skills/09-How to Manage Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何学习设计技能](Personal-Skills/11-How to Learn Design Skills.md) + - [如何进行实验](Personal-Skills/12-How to Conduct Experiments.md) +- 团队技能 + - [为什么预估很é‡è¦](Team-Skills/01-Why Estimation is Important.md) + - [如何预估编程时间](Team-Skills/02-How to Estimate Programming Time.md) + - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How to Find Out Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How to Utilize People as Information Sources.md) + - [如何优雅地写文档](Team-Skills/05-How to Document Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How to Work with Poor Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How to Use Source Code Control.md) + - [如何进行å•元测试](Team-Skills/08-How to Unit Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take Breaks when Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How to Recognize When to Go Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How to Deal with Difficult People.md) diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 39ffba8..29c211e 100644 --- a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -1,15 +1,14 @@ -# Why Estimation is Important +# 为什么评估很é‡è¦ -To get a working software system in active use as quickly as possible requires not only planning the development, but also planning the documentation, deployment, and marketing. In a commercial project it also requires sales and finance. Without predictability of the development time, it is impossible to plan these effectively. +为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 -Good estimation provides predictability. Managers love it, as well they should. The fact that it is impossible, both theoretically and practically, to predict accurately how long it will take to develop software is often lost on managers. We are asked to do this impossible thing all the time, and we must face up to it honestly. However, it would be dishonest not to admit the impossibility of this task, and when necessary, explain it. There is a lot of room for miscommunication about estimates, as people have a startling tendency to think wishfully that the sentence: +好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…的情况,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地认为: +> 我估计,如果我确实ç†è§£äº†è¿™ä¸ªé—®é¢˜ï¼Œæˆ‘们在5周内有50%çš„å¯èƒ½å®Œæˆä»»åŠ¡ï¼ˆå¦‚æžœåœ¨æ­¤æœŸé—´æ²¡æœ‰äººå¹²æ‰°æˆ‘ä»¬çš„è¯ï¼‰ã€‚ -> I estimate that, if I really understand the problem, it is about 50% likely that we will be done in five weeks (if no one bothers us during that time). +的真实的å«ä¹‰æ˜¯ï¼š -really means: +> 我ä¿è¯ä»ŽçŽ°åœ¨å¼€å§‹äº”ä¸ªæ˜ŸæœŸå†…å®Œæˆä»»åŠ¡ã€‚ -> I promise to have it all done five weeks from now. +这个常è§çš„解释问题需è¦ä½ ä¸“门与你的 boss å’Œå®¢æˆ·è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡å¯¹ä½ æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ -This common interpretation problem requires that you explicitly discuss what the estimate means with your boss or customer as if they were a simpleton. Restate your assumptions, no matter how obvious they seem to you. - -Next [How to Estimate Programming Time](02-How to Estimate Programming Time.md) +Next [如何估计编程时间](02-How to Estimate Programming Time.md) diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index b9be737..7949f59 100644 --- a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -1,21 +1,21 @@ -# How to Estimate Programming Time +# 如何评估编程时间 -Estimation takes practice. It also takes labour. It takes so much labour it may be a good idea to estimate the time it will take to make the estimate, especially if you are asked to estimate something big. +评估需è¦å®žè·µï¼Œä¹Ÿéœ€è¦åŠ³åŠ¨ã€‚å› ä¸ºå®ƒéœ€è¦èŠ±å¦‚æ­¤é•¿çš„æ—¶é—´ï¼Œä»¥è‡³äºŽè¯„ä¼°è¯„ä¼°æœ¬èº«çš„æ—¶é—´å¯èƒ½æ˜¯ä¸€ä¸ªå¥½ä¸»æ„ï¼Œå°¤å…¶æ˜¯ä½ è¢«è¦æ±‚去评估一些巨大的事情。 -When asked to provide an estimate of something big, the most honest thing to do is to stall. Most engineers are enthusiastic and eager to please, and stalling certainly will displease the stalled. But an on-the-spot estimate probably won't be accurate and honest. +å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且是渴望愉悦的,而åœä¸‹æ¥å½“然会让他们ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 -While stalling, it may be possible to consider doing or prototyping the task. If political pressure permits, this is the most accurate way of producing the estimate, and it makes real progress. +åœä¸‹æ¥ï¼Œä½¿å¾—è€ƒè™‘ä¸€äº›äº‹æƒ…æˆ–è€…ä¸ºä»»åŠ¡é‡æ–°å®šåž‹æˆä¸ºå¯èƒ½ã€‚如果政策压力å…许,这是执行评估的最准确的方å¼ï¼Œå¹¶ä¸”它会产生确实的进度。 -When not possible to take the time for some investigation, you should first establish the meaning of the estimate very clearly. Restate that meaning as the first and last part of your written estimate. Prepare a written estimate by de-constructing the task into progressively smaller subtasks until each small task is no more than a day; ideally at most in length. The most important thing is not to leave anything out. For instance, documentation, testing, time for planning, time for communicating with other groups, and vacation time are all very important. If you spend part of each day dealing with knuckleheads, put a line item for that in the estimate. This gives your boss visibility into what is using up your time at a minimum, and might get you more time. +在没有时间åšè°ƒæŸ¥çš„æ—¶å€™ï¼Œä½ é¦–先应该éžå¸¸æ¸…晰地建立评估的å«ä¹‰ã€‚é¦–å…ˆé‡æ–°é˜è¿°è¦è¯„估的内容和你编写的评估的最åŽéƒ¨åˆ†ã€‚在你准备编写评估的时候应该把这项任务分解为一个个更å°çš„å¾ªåºæ¸è¿›çš„任务,并且使æ¯ä¸ªå°ä»»åŠ¡éœ€è¦çš„æ—¶é—´ä¸è¶…è¿‡ä¸€å¤©ï¼ˆç†æƒ³æƒ…况是æ¯ä¸ªä»»åŠ¡çš„é•¿åº¦æœ€å¤šä¸ºä¸€å¤©ï¼‰ã€‚æœ€é‡è¦çš„事情是ä¸è¦æ¼æŽ‰ä»»ä½•事情。例如,文档,测试,规划的时间,与其他å°ç»„交æµçš„æ—¶é—´ï¼Œè¿˜æœ‰åº¦å‡æ—¶é—´ï¼Œè¿™äº›éƒ½æ˜¯å¾ˆé‡è¦çš„。如果你æ¯å¤©éƒ½è¦èŠ±æ—¶é—´å’Œä¸€äº›å‚»é€¼äº¤æµï¼Œåœ¨è¯„估里为这件事情划一个明确的时间界é™ã€‚这能让你的boss对于你将è¦èŠ±è´¹çš„æœ€å°‘æ—¶é—´æœ‰äº†ä¸€ä¸ªè®¤è¯†ï¼Œå¹¶ä¸”å¯èƒ½ç»™ä½ æ›´å¤šçš„æ—¶é—´ã€‚ -I know good engineers who pad estimates implicitly, but I recommend that you do not. One of the results of padding is trust in you may be depleted. For instance, an engineer might estimate three days for a task that she truly thinks will take one day. The engineer may plan to spend two days documenting it, or two days working on some other useful project. But it will be detectable that the task was done in only one day (if it turns out that way), and the appearance of slacking or overestimating is born. It's far better to give proper visibility into what you are actually doing. If documentation takes twice as long as coding and the estimate says so, tremendous advantage is gained by making this visible to the manager. +我认识一些会éšå¼åœ°å¡«å……评估时间的好的程åºå‘˜ï¼Œä½†æˆ‘推èä½ ä¸è¦è¿™æ ·åšã€‚填充的一个结果是你å¯èƒ½ä¼šè€—尽别人对你的信任。例如,一个工程师å¯èƒ½ä¸ºä¸€ä¸ªå°†è¦èŠ±è´¹ä¸€å¤©çš„å·¥ä½œè¯„ä¼°ä¸ºä¸‰å¤©ã€‚è¿™ä¸ªå·¥ç¨‹å¸ˆå¯èƒ½è®¡åˆ’花两天去为代ç å†™æ–‡æ¡£ï¼Œæˆ–者花两天去åšä¸€äº›å…¶ä»–æœ‰ç”¨çš„å·¥ç¨‹ã€‚ä½†å½“ä»»åŠ¡åœ¨ä¸€å¤©å†…å®Œæˆæ—¶ï¼Œå¦‚果它在那天暴露出æ¥çš„è¯ï¼Œè¿™æ˜¯å¯ä»¥å¯Ÿè§‰çš„ï¼Œå¹¶ä¸”æ¾æ‡ˆæˆ–高估的表现会出现。为你确实è¦åšçš„事情åšåˆé€‚的剖æžè¦å¥½å¾—多。如果写文档需è¦èб䏤å€äºŽç¼–程的时间,并且评估的结果就是这样的,让这对管ç†è€…å¯è§å°±èƒ½å¾—到巨大的好处。 -Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate to should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. +相å,显å¼å¡«å……。如果一个任务å¯èƒ½èŠ±ä¸€å¤©ï¼Œä½†å¦‚æžœä½ çš„æ–¹æ³•æ²¡æœ‰ç”Ÿæ•ˆï¼Œå¯èƒ½èбå天 - 用æŸç§æ–¹å¼åœ¨ä½ çš„评估里记下这个情况,å¦åˆ™ï¼Œè‡³å°‘为这个å¯èƒ½æ€§ï¼Œè¯„估一个æƒé‡è®¡ç®—å¯èƒ½çš„æ—¶é—´ã€‚任何你å¯ä»¥è¯†åˆ«å’Œè¿›è¡Œè¯„估的风险因素应该在时间表里被体现。一个人ä¸å¤ªå¯èƒ½åœ¨ç»™å®šçš„任何星期都生病。但一个有很多工程师的大项目å¯èƒ½ä¼šæœ‰ä¸€äº›ç–¾ç—…æ—¶é—´ï¼Œè¿˜æœ‰ä¼‘å‡æ—¶é—´ã€‚或者,是å¦ä¼šæœ‰å…¬å¸å†…部的强制培训研讨会的å¯èƒ½æ€§å‘¢ï¼Ÿå¦‚果这å¯ä»¥é¢„估,也把它算进æ¥ã€‚当然,还有一些未知的未知,或者 [unk-unk](../../4-Glossary.md) 。Unk-unk 在定义上是ä¸èƒ½è¢«ç‹¬ç«‹è¯„估的。你å¯ä»¥å°è¯•为所有 unk-unk 创建一个全局的界线,或者用你与你的 boss 交æµå¥½çš„å…¶ä»–æ–¹å¼å޻处ç†å®ƒä»¬ã€‚然而,你ä¸èƒ½è®©ä½ çš„ boss å¿˜è®°å®ƒä»¬çš„å­˜åœ¨ã€‚åœ¨æŠŠè¯„ä¼°å˜æˆæ—¶é—´è¡¨çš„过程中,把它们é—忘是超级容易的。 -In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate. The act of having the whole team agree on a line-by-line basis to the estimate clarifies the team understanding, as well as allowing the opportunity for tactical reassignment of resources (for instance, shifting burden away from weaker team members to stronger). +在一个团队环境里,你应该让任务的执行者去åšè¿™ç§è¯„估,而且你们应该在团队范围内对评估的结果达æˆä¸€è‡´ã€‚人与人在技术,ç»éªŒï¼Œå‡†å¤‡å’Œä¿¡å¿ƒä¸Šéƒ½æœ‰å¾ˆå¤šçš„ä¸åŒã€‚当一个牛逼的程åºå‘˜ä¸ºä»–自己评估了时间,然åŽä¸€äº›å¼±ä¸€ç‚¹çš„程åºå‘˜è¢«è¿™ç§è¯„ä¼°çº¦æŸæ—¶ï¼Œç¾éš¾å°±ä¼šé™ä¸´ã€‚整个团队在一个一行一行的细致的评估计划上å–得的一致,é˜è¿°äº†å›¢é˜Ÿçš„ç†è§£ï¼Œä»¥åŠå…许在策略上对资æºçš„釿–°åˆ†é…的机会(比如,把负担从弱一点的团队æˆå‘˜é‚£é‡Œç§»åˆ°å¼ºä¸€ç‚¹çš„æˆå‘˜é‚£é‡Œï¼‰ã€‚ -If there are big risks that cannot be evaluated, it is your duty to state so forcefully enough that your manager does not commit to them and then become embarrassed when the risk occurs. Hopefully in such a case whatever is needed will be done to decrease the risk. +如果有ä¸èƒ½è¯„ä¼°çš„å¤§é£Žé™©ï¼Œä½ åº”è¯¥æ— è®ºå¦‚ä½•éƒ½è¦æå‡ºæ¥ï¼Œè¿™æ˜¯ä½ çš„责任,这让æ‰èƒ½è®©ç®¡ç†è€…ä¸ä¼šåœ¨è¿™ä¸ªé—®é¢˜ä¸Šåšæ‰¿è¯ºï¼Œä»¥å…在风险å‘生时让管ç†è€…éš¾å ªã€‚è¿™ç§æƒ…况下,任何需è¦çš„事情都有希望被执行æ¥å‡å°è¿™ä¸ªé£Žé™©ã€‚ -If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. +如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 -Next [How to Find Out Information](03-How to Find Out Information.md) \ No newline at end of file +Next [如何å‘现信æ¯](03-How to Find Out Information.md) diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md index b1f0e45..72928aa 100644 --- a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -1,19 +1,19 @@ -# How to Find Out Information +# 如何å‘çŽ°ä¿¡æ¯ -The nature of what you need to know determines how you should find it. +你所æœå¯»çš„事情的本质决定了你应该如何去寻找它。 -If you need information *about concrete things* that are objective and easy to verify, for example the latest patch level of a software product, ask a large number of people politely by searching the internet for it or by posting on a discussion group. Don't search on the internet for anything that smacks of either opinion or subjective interpretation: the ratio of drivel to truth is too high. +如果你需è¦å®¢è§‚的而且容易辨认的*关于具体事物*的信æ¯ï¼Œä¾‹å¦‚一个软件的最新补ä¸ç‰ˆæœ¬ï¼Œå¯ä»¥åœ¨Internetæœç´¢ï¼Œç¤¼è²Œçš„询问很多的人,或者å‘起一个讨论组。ä¸è¦åœ¨ç½‘上æœç´¢ä»»ä½•带有观点或主观解释的东西:能够抵达真相的概率太低了。 -If you need *general knowledge about something subjective* the history of what people have thought about it, go to the library (the physical building in which books are stored). For example, to learn about math or mushrooms or mysticism, go to the library. +如果你需è¦â€œä¸€äº›ä¸»è§‚的普é知识â€ï¼Œäººä»¬å¯¹è¿™äº›ä¸œè¥¿å·²æœ‰çš„æ€è€ƒåŽ†å²ï¼Œé‚£å°±å޻图书馆å§ã€‚例如,想è¦äº†è§£æ•°å­¦ï¼Œè˜‘è‡æˆ–ç€ç¥žç§˜ä¸»ä¹‰ï¼Œå°±å޻图书馆å§ã€‚ -If you need to know *how to do something that is not trivial* get two or three books on the subject and read them. You might learn how to do something trivial, like install a software package, from the Internet. You can even learn important things, like good programming technique, but you can easily spend more time searching and sorting the results and attempting to divine the authority of the results than it would take to read the pertinent part of a solid book. +如果你需è¦çŸ¥é“*如何åšä¸€äº›ç碎的事情*,找两三本关于这个主题的书,仔细阅读。你å¯ä»¥ä»Žç½‘络上学到如何åšå¥½è¿™äº›ç碎的事情,比如安装一个软件包。你甚至å¯ä»¥å­¦åˆ°ä¸€äº›é‡è¦çš„东西,例如好的编程技术,但相比读一本纸质书的相关部分,你很容易花更多时间在æœç´¢å’Œå¯¹ç»“果排åºï¼Œä»¥åŠè¯„估结果的æƒå¨æ€§ã€‚ -If you need *information that no one else could be expected to know* for example, ‘does this software that is brand new work on gigantic data sets?’, you must still search the internet and the library. After those options are completely exhausted, you may design an experiment to ascertain it. +如果你需è¦*å¯èƒ½æ²¡æœ‰äººçŸ¥é“的信æ¯*,例如,“这个新å“ç‰Œçš„è½¯ä»¶åœ¨æµ·é‡æ•°æ®çš„æƒ…况下能工作å—â€ï¼Œä½ ä»ç„¶å¿…须在网络和图书馆里æœç´¢ã€‚在这些选项都完全竭尽åŽï¼Œä½ å¯èƒ½éœ€è¦è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥æžæ¸…楚这个问题。 -If you want an opinion or a value judgement that takes into account some unique circumstance, talk to an expert. For instance, if you want to know whether or not it is a good idea to build a modern database management system in LISP, you should talk to a LISP expert and a database expert. +如果你需è¦ä¸€äº›è€ƒè™‘了æŸäº›ç‰¹æ®ŠçŽ¯å¢ƒçš„è§‚ç‚¹æˆ–ä¼°å€¼ï¼Œå’Œä¸€ä¸ªä¸“å®¶èŠèŠã€‚例如,如果你想è¦çŸ¥é“用 Lisp 构建一个现代数æ®åº“管ç†ç³»ç»Ÿæ˜¯å¦æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,你应该和一个 Lisp 专家和一个数æ®åº“专家èŠä¸€èŠã€‚ -If you want to know *how likely it is* that a faster algorithm for a particular application exists that has not yet been published, talk to someone working in that field. +如果你想è¦çŸ¥é“*它具体是怎样的*,比如一个还未å‘布的在一个特定程åºä¸Šæ›´å¿«çš„算法,跟一些在这个领域工作的人èŠèŠã€‚ -If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. +如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且åšäº†æ‰€æœ‰è¯¥åšçš„å‡†å¤‡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒåŒ…括好的和å的,但你ä»å¯èƒ½çŠ¹è±«ä¸å†³ã€‚你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 -Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) +Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How to Utilize People as Information Sources.md) diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index f62a077..51ef771 100644 --- a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -1,15 +1,15 @@ -# How to Utilize People as Information Sources +# å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº -Respect every person's time and balance it against your own. Asking someone a question accomplishes far more than just receiving the answer. The person learns about you, both by enjoying your presence and hearing the particular question. You learn about the person in the same way, and you may learn the answer you seek. This is usually far more important than your question. +å°Šé‡å…¶ä»–æ¯ä¸ªäººçš„æ—¶é—´ï¼Œä¸Žä½ çš„æ—¶é—´ç›¸å¹³è¡¡ã€‚问别人问题比得到答案能获得更多。人们会从你的存在和倾å¬ç‰¹å®šçš„问题从你身上学到东西。你也å¯ä»¥ç”¨åŒæ ·çš„æ–¹å¼ä»Žåˆ«äººèº«ä¸Šå­¦ä¹ åˆ°ä¸œè¥¿ï¼Œä½ å¯èƒ½å­¦åˆ°ä½ æ­£åœ¨æœå¯»çš„东西的答案。这通常比你的问题更加é‡è¦å¾—多。 -However, the value of this diminishes the more you do it. You are, after all, using the most precious commodity a person has: their time. The benefits of communication must be weighed against the costs. Furthermore, the particular costs and benefits derived differ from person to person. I strongly believe that an executive of 100 people should spend five minutes a month talking to each person in her organization, which would be about 5% of their time. But ten minutes might be too much, and five minutes is too much if they have one thousand employees. The amount of time you spend talking to each person in your organization depends on their role (more than their position). You should talk to your boss more than your boss's boss, but you should talk to your boss's boss a little. It may be uncomfortable, but I believe you have a duty to talk a little bit to all your superiors, each month, no matter what. +然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的 boss 交谈而éžå’Œä½  boss çš„ boss 交谈,但你å¶å°”也å¯ä»¥å’Œä½  boss çš„ boss 交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ -The basic rule is that everyone benefits from talking to you a little bit, and the more they talk to you, the less benefit they derive. It is your job to provide them this benefit, and to get the benefit of communicating with them, keeping the benefit in balance with the time spent. +基本的规则是,æ¯ä¸ªä¸Žä½ äº¤è°ˆçš„人都能ç¨å¾®å—益,他们与你èŠå¾—更多,他们能获得的收益越少。你的应该给他们æä¾›è¿™ç§å¥½å¤„,还有得到与他们交æµçš„好处,平衡这ç§å¥½å¤„与花费的时间。 -It is important to respect your own time. If talking to someone, even if it will cost them time, will save you a great deal of time, then you should do it unless you think their time is more valuable than yours, to the tribe, by that factor. +å°Šé‡ä½ è‡ªå·±çš„æ—¶é—´æ˜¯å¾ˆé‡è¦çš„。如果和一些人èŠå¤©ï¼Œå³ä½¿è¿™ä¼šæ¶ˆè€—他们的时间,结果会节çœä½ å¾ˆå¤šçš„æ—¶é—´ï¼Œé‚£ä¹ˆä½ åº”该这样åšï¼Œé™¤éžä½ è®¤ä¸ºä»–们的时间在这个因素上,对整个集体,比你的时间更加有价值。 -A strange example of this is the summer intern. A summer intern in a highly technical position can't be expected to accomplish too much; they can be expected to pester the hell out of everybody there. So why is this tolerated? Because the pestered are receiving something important from the intern. They get a chance to show-off a little. They get a chance to hear some new ideas, maybe; they get a chance to see things from a different perspective. They may also be trying to recruit the intern, but even if this is not the case there is much to gain. +ä¸€ä¸ªå¥‡æ€ªçš„ä¾‹å­æ˜¯æš‘期实习生。一个处于高技术å«é‡ä½ç½®çš„æš‘期实习生ä¸èƒ½è¢«æœŸæœ›åŽ»å®Œæˆå¤ªå¤šä¸œè¥¿ï¼›ä»–们å¯èƒ½ä¼šæŠŠæ¯ä¸ªäººçº ç¼ åˆ°åœ°ç‹±ã€‚但为什么这是被å…许的呢?因为被纠缠的人从实习生身上å¯ä»¥æŽ¥æ”¶åˆ°ä¸€äº›é‡è¦çš„东西。他们得到了一点炫耀的机会,他们å¯èƒ½æœ‰æœºä¼šåŽ»å¬åˆ°ä¸€äº›æ–°çš„æ€æƒ³ï¼Œä»–ä»¬æœ‰æœºä¼šå¯ä»¥ä»Žä¸åŒçš„角度去看问题。他们å¯èƒ½ä¼šå°è¯•æ‹›è˜è¿™ä¸ªå®žä¹ ç”Ÿï¼Œä½†å³ä½¿ä¸æ˜¯è¿™æ ·ï¼Œä»–们也获得了很多。 -You should ask people for a little bit of their wisdom and judgement whenever you honestly believe they have something to say. This flatters them and you will learn something and teach them something. A good programmer does not often need the advice of a Vice President of Sales, but if you ever do, you be sure to ask for it. I once asked to listen in on a few sales calls to better understand the job of our sales staff. This took no more than 30 minutes but I think that small effort made an impression on the sales force. +如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但å´è®©æˆ‘通过这么å°çš„付出就对公å¸çš„é”€å”®é˜Ÿä¼æœ‰äº†æ·±åˆ»çš„å°è±¡ã€‚ -Next [How to Document Wisely](05-How to Document Wisely.md) \ No newline at end of file +Next [如何优雅地写文档](05-How to Document Wisely.md) diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md index 895062f..b17d1d6 100644 --- a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,20 +1,20 @@ -# How to Document Wisely +# å¦‚ä½•ç¿æ™ºåœ°å†™æ–‡æ¡£ -Life is too short to write crap nobody will read; if you write crap, nobody will read it. Therefore a little good documentation is best. Managers often don't understand this, because even bad documentation gives them a false sense of security that they are not dependent on their programmers. If someone absolutely insists that you write truly useless documentation, say 'yes' and quietly begin looking for a better job. +人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥å¥½ä¸€ç‚¹çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 -There's nothing quite as effective as putting an accurate estimate of the amount of time it will take to produce good documentation into an estimate to slacken the demand for documentation. The truth is cold and hard: documentation, like testing, can take many times longer than developing code. +没有其他事情比精确估计 æŠŠå¥½çš„æ–‡æ¡£è½¬ä¸ºæ”¾æ¾æ–‡æ¡£è¦æ±‚的估计 æ›´ä¸ºæœ‰æ•ˆçŽ‡ã€‚çœŸç›¸æ˜¯å†·é…·è€Œè‰°éš¾çš„ï¼šæ–‡æ¡£ï¼Œå°±åƒæµ‹è¯•,会花比开å‘代ç å¤šå‡ å€çš„æ—¶é—´ã€‚ -Writing good documentation is, first of all, good writing. I suggest you find books on writing, study them, and practice. But even if you are a lousy writer or have poor command of the language in which you must document, the Golden Rule is all you really need: 'Do unto others as you would have them do unto you.' Take time to really think about who will be reading your documentation, what they need to get out of it, and how you can teach that to them. If you do that, you will be an above average documentation writer, and a good programmer. +首先,写好的文档是好的写作。我建议你找一些关于写作的事情,学习,练习他们。但å³ä½¿ä½ æ˜¯ä¸€ä¸ªç³Ÿç³•的写手或者对你需è¦å†™æ–‡æ¡£çš„语言掌æ¡ä¸å¥½ï¼Œè¿™æ¡é»„金规则是你真正需è¦çš„ï¼šå·±æ‰€ä¸æ¬²ï¼Œå‹¿æ–½äºŽäººã€‚花时间去确实地æ€è€ƒè°ä¼šè¯»ä½ çš„æ–‡æ¡£ï¼Œä»–们从文档中想è¦èŽ·å¾—çš„çœŸæ­£çš„ä¸œè¥¿æ˜¯ä»€ä¹ˆï¼Œå¹¶ä¸”ä½ å¯ä»¥å¦‚何把这些东西交给他们。如果你这样åšï¼Œä½ å°†ä¼šå˜æˆä¸€ä¸ªè¶…è¿‡å¹³å‡æ°´å¹³çš„æ–‡æ¡£ç¼–写者,和一个好的程åºå‘˜ã€‚ -When it comes to actually documenting code itself, as opposed to producing documents that can actually be read by non-programmers, the best programmers I've ever known hold a universal sentiment: write self-explanatory code and only document code in the places that you cannot make it clear by writing the code itself. There are two good reasons for this. First, anyone who needs to see code-level documentation will in most cases be able to and prefer to read the code anyway. Admittedly, this seems easier to the experienced programmer than to the beginner. More importantly however, is that the code and the documentation cannot be inconsistent if there is no documentation. The source code can at worst be wrong and confusing. The documentation, if not written perfectly, can lie, and that is a thousand times worse. +当代ç å¯ä»¥è‡ªæˆæ–‡æ¡£æ—¶ï¼Œä¸Žæä¾›æ–‡æ¡£ç»™éžç¨‹åºå‘˜çœ‹ç›¸å,我认识的最好的程åºå‘˜ä»¬æœ‰è¿™æ ·ä¸€ä¸ªæ™®é的观点:编写具有自我解释功能的代ç ï¼Œä»…在你ä¸èƒ½é€šè¿‡ä»£ç æ¸…晰解释其å«ä¹‰çš„地方,æ‰å†™æ³¨é‡Šã€‚æœ‰ä¸¤ä¸ªå¥½çš„åŽŸå› ï¼šç¬¬ä¸€ï¼Œä»»ä½•äººéœ€è¦æŸ¥çœ‹ä»£ç çº§åˆ«çš„æ–‡æ¡£å¤§å¤šæ•°æƒ…况下都能够并且更喜欢阅读代ç ã€‚ä¸å¯å¦è®¤çš„,有ç»éªŒçš„程åºå‘˜ä¼¼ä¹Žæ¯”åˆå­¦è€…更容易åšåˆ°è¿™ä»¶äº‹ï¼Œç„¶è€Œï¼Œæ›´é‡è¦çš„æ˜¯ï¼Œæ²¡æœ‰æ–‡æ¡£çš„è¯ï¼Œä»£ç å’Œæ–‡æ¡£ä¸ä¼šæ˜¯è‡ªç›¸çŸ›ç›¾çš„。æºä»£ç æœ€ç³Ÿç³•的情况下å¯èƒ½æ˜¯é”™è¯¯å¹¶ä¸”令人困惑的。没有完美编写的文档,å¯èƒ½è¯´è°Žï¼Œè¿™å¯ç³Ÿç³•一åƒå€ã€‚ -This does not make it easier on the responsible programmer. How does one write self-explanatory code? What does that even mean? It means: +负责任的程åºå‘˜ä¹Ÿä¸èƒ½è®©è¿™ä»¶äº‹å˜å¾—更简å•些。如何写自解释的代ç ï¼Ÿé‚£æ„味ç€ä»€ä¹ˆï¼Ÿå®ƒæ„味ç€ï¼š -- Writing code knowing that someone will have to read it; -- Applying the golden rule; -- Choosing a solution that is straightforward, even if you could get by with another solution faster; -- Sacrificing small optimizations that obfuscate the code; -- Thinking about the reader and spending some of your precious time to make it easier on her; and -- Not ever using a function name like `foo`,`bar`, or `doIt`! +- 编写知é“别人会去阅读的代ç (译者注:编写给人看的代ç ) +- è¿ç”¨é»„金法则 +- 选择直接的解决方案,å³ä½¿ä½ å¯ä»¥æ›´å¿«åœ°èŽ·å¾—å¦ä¸€ä¸ªè§£å†³æ–¹æ¡ˆ +- 牺牲那些å¯èƒ½æ··æ·†ä»£ç çš„å°çš„优化 +- 为读者考虑,把你ç贵的时间花在让她更加容易阅读的事情上,并且 +- 永远ä¸è¦ä½¿ç”¨è¿™æ ·çš„å‡½æ•°åæ¯”如 `foo`,`bar`, 或 `doIt`! -Next [How to Work with Poor Code](06-How to Work with Poor Code.md) \ No newline at end of file +Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How to Work with Poor Code.md) diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index 431ce28..a1d1f62 100644 --- a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -1,11 +1,11 @@ -# How to Work with Poor Code +# 如何在糟糕的代ç ä¸Šå·¥ä½œ -It is very common to have to work with poor quality code that someone else has written. Don't think too poorly of them, however, until you have walked in their shoes. They may have been asked very consciously to get something done quickly to meet schedule pressure. Regardless, in order to work with unclear code you must understand it. To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it. To understand it, you will have to read the source code. You will probably have to experiment with it. +工作在别人写的糟糕的代ç ä¸Šæ˜¯å¸¸æœ‰çš„事。ä¸è¦æŠŠä»–们想得太糟,直到你用他们的鞋å­èµ°è·¯æ—¶ã€‚他们å¯èƒ½è¢«è¦æ±‚éžå¸¸è‡ªè§‰åœ°å¿«é€Ÿå®Œæˆä¸€äº›ä¸œè¥¿æ¥æ»¡è¶³æ—¶é—´è¡¨çš„压力。ä¸ç®¡ä¹‹å‰å‘ç”Ÿäº†ä»€ä¹ˆï¼Œä¸ºäº†åœ¨ä¸æ¸…晰的代ç ä¸Šå·¥ä½œï¼Œä½ å¿…é¡»ç†è§£å®ƒã€‚ç†è§£å®ƒéœ€è¦èŠ±è´¹ä¸€äº›å­¦ä¹ æ—¶é—´ï¼Œä½ å¿…é¡»åšæŒä»Žæ—¶é—´è¡¨ä¸­æŸäº›éƒ¨åˆ†åˆ’出一部分时间æ¥åšè¿™ä»¶äº‹ã€‚为了ç†è§£å®ƒä»¬ï¼Œä½ å¿…须读æºä»£ç ï¼Œä½ å¯èƒ½éœ€è¦åœ¨ä¸Šé¢åšä¸€äº›å®žéªŒã€‚ -This is a good time to document, even if it is only for yourself, because the act of trying to document the code will force you to consider angles you might not have considered, and the resulting document may be useful. While you're doing this, consider what it would take to rewrite some or all of the code. Would it actually save time to rewrite some of it? Could you trust it better if you rewrote it? Be careful of arrogance here. If you rewrite it, it will be easier for you to deal with, but will it really be easier for the next person who has to read it? If you rewrite it, what will the test burden be? Will the need to re-test it outweigh any benefits that might be gained? +å³ä½¿æ˜¯ä¸ºä½ è‡ªå·±ï¼Œç¼–写文档也是一个好的时机,因为å°è¯•为你的代ç ç¼–写文档会强迫你从你å¯èƒ½æ²¡æœ‰è€ƒè™‘过的角度æ€è€ƒï¼Œå¹¶ä¸”完æˆçš„æ–‡æ¡£å¯èƒ½ä¼šæœ‰ç”¨ã€‚当你在åšè¿™ä¸ªæ—¶ï¼Œè€ƒè™‘é‡å†™éƒ¨åˆ†æˆ–所有代ç ä¼šæ¶ˆè€—你什么东西。是å¦é‡å†™ä¸€éƒ¨åˆ†ä»£ç äº‹å®žä¸ŠçœŸçš„ä¼šèŠ‚çœæ—¶é—´ï¼Ÿä½ é‡å†™ä»£ç åŽä½ ä¼šæ›´ä¿¡ä»»å®ƒå—?在这里å°å¿ƒä½ çš„傲慢。如果你é‡å†™å®ƒï¼Œä½ å¤„ç†å®ƒä¼šæ›´å®¹æ˜“,但下一个必须阅读它的人是å¦çœŸçš„æ›´åŠ å®¹æ˜“ï¼Ÿå¦‚æžœä½ é‡å†™äº†ï¼Œæµ‹è¯•çš„è´Ÿæ‹…åœ¨å“ªé‡Œï¼Ÿé‡æ–°æµ‹è¯•çš„éœ€è¦æ˜¯å¦å¤§äºŽå¯èƒ½èŽ·å¾—çš„å¥½å¤„ï¼Ÿ -In any estimate that you make for work against code you didn't write, the quality of that code should affect your perception of the risk of problems and unk-unks. +在任何对你没有编写的代ç çš„评估中,代ç çš„è´¨é‡ä¼šå½±å“你对风险问题的认识以åŠä¸€äº›æœªçŸ¥çš„事情。 -It is important to remember that abstraction and encapsulation, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. +铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡æ‰€å¸¦æ¥çš„好处。特别的,你å¯ä»¥å°è¯•去隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 -Next [How to Use Source Code Control](07-How to Use Source Code Control.md) \ No newline at end of file +Next [如何使用æºä»£ç æŽ§åˆ¶](07-How to Use Source Code Control.md) diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 91dbf5c..2cbbf50 100644 --- a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,9 +1,9 @@ -# How to Use Source Code Control +# 如何使用æºä»£ç æŽ§åˆ¶ -Source code control systems (also known as Version Control Systems) let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. +æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼ˆåˆç§°ç‰ˆæœ¬æŽ§åˆ¶ç³»ç»Ÿï¼‰è®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ -I was late to appreciate the benefits of source code control systems but now I wouldn't live without one even on a one-person project. Generally they are necessary when you have team working on the same code base. However, they have another great advantage: they encourage thinking about the code as a growing, organic system. Since each change is marked as a new revision with a new name or number, one begins to think of the software as a visibly progressive series of improvements. I think this is especially useful for beginners. +我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 -A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. +使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。因æäº¤é”™è¯¯çš„代ç è€Œé™ä½Žä½ é˜Ÿå‹çš„å¼€å‘速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ -Next [How to Unit Test](08-How to Unit Test.md) +Next [如何进行å•元测试](08-How to Unit Test.md) diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md index c1dc402..11aa2b7 100644 --- a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,9 +1,9 @@ -# How to Unit Test +# 如何进行å•元测试 -Unit testing, the testing of an individual piece of coded functionality by the team that wrote it, is a part of coding, not something different from it. Part of designing the code is designing how it will be tested. You should write down a test plan, even if it is only one sentence. Sometimes the test will be simple: 'Does the button look good?' Sometimes it will be complex: 'Did this matching algorithm return precisely the correct matches?' +å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该如何被测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ -Use assertion checking and test drivers whenever possible. This not only catches bugs early, but is very useful later on and lets you eliminate mysteries that you would otherwise have to worry about. +无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现 bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 -The Extreme Programming developers are writing extensively on unit testing effectively; I can do no better than to recommend their writings. +æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ -Next [Take Breaks when Stumped](09-Take Breaks when Stumped.md) \ No newline at end of file +Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take Breaks when Stumped.md) diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index c578991..1f69cf5 100644 --- a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ -# Take Breaks when Stumped +# 毫无头绪?,休æ¯ä¸€ä¸‹ -When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. +没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ -Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file +Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How to Recognize When to Go Home.md) diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index a6ae9b4..ce3b4e5 100644 --- a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,16 +1,15 @@ -# How to Recognize When to Go Home +# å¦‚ä½•è¯†åˆ«ä¸‹ç­æ—¶é—´ -Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. +è®¡ç®—æœºç¼–ç¨‹æ˜¯ä¸€ç§æ´»åŠ¨ä¹Ÿæ˜¯ä¸€ç§æ–‡åŒ–。ä¸å¹¸çš„äº‹å®žæ˜¯å®ƒä¸æ˜¯ä¸€ç§çœ‹é‡èº«å¿ƒå¥åº·çš„æ–‡åŒ–。从文化/历å²ç¼˜ç”±çœ‹ï¼ˆä¾‹å¦‚,在机器空载的晚上工作的需è¦ï¼‰ï¼Œè¿˜æœ‰å› ä¸ºè¶…过市场时间的压力和程åºå‘˜çš„缺ä¹ï¼Œè®¡ç®—机程åºå‘˜ä¼ ç»Ÿä¸Šæ€»æ˜¯è¿‡åº¦å·¥ä½œã€‚我ä¸è®¤ä¸ºä½ å¯ä»¥ç›¸ä¿¡ä½ å¬åˆ°çš„æ‰€æœ‰æ•…事,但我认为一周工作60å°æ—¶æ˜¯å¸¸è§çš„,50å°æ—¶æ›´å¤šçš„åƒä¸€ä¸ªæœ€å°å€¼ã€‚è¿™æ„味ç€å®žé™…总是比需è¦çš„æ—¶é—´èŠ±è´¹å¾—æ›´å¤šã€‚è¿™å¯¹ä¸€ä¸ªå¥½çš„ï¼Œä¸ä»…为他们自己负责而且为他们的åŒäº‹è´Ÿè´£çš„程åºå‘˜æ¥è¯´æ˜¯ä¸€ä¸ªä¸¥é‡çš„问题。你需è¦è¯†åˆ«ä»€ä¹ˆæ—¶å€™ä¸‹ç­ï¼Œæœ‰æ—¶å€™è¿˜è¦å»ºè®®å…¶ä»–人回家的时间。解决这个问题的固定规则ä¸å­˜åœ¨ï¼ŒæŠšå…»ä¸€ä¸ªå­©å­çš„å›ºå®šè§„åˆ™ä¹Ÿæ˜¯ï¼Œå‡ºäºŽåŒæ ·çš„原因---æ¯ä¸ªäººéƒ½æ˜¯ä¸åŒçš„。 -Beyond 60 hours a week is an extraordinary effort for me, which I can apply for short periods of time (about one week), and that is sometimes expected of me. I don't know if it is fair to expect 60 hours of work from a person; I don't even know if 40 is fair. I am sure, however, that it is stupid to work so much that you are getting little out of that extra hour you work. For me personally, that's any more than 60 hours a week. I personally think a programmer should exercise noblesse oblige and shoulder a heavy burden. However, it is not a programmer's duty to be a patsy. The sad fact is programmers *are* often asked to be patsies in order to put on a show for somebody, for example a manager trying to impress an executive. Programmers often succumb to this because they are eager to please and not very good at saying no. There are four defences against this: +一周超过60ä¸ªå°æ—¶å·¥ä½œå¯¹æˆ‘æ¥è¯´æ˜¯éžå¸¸è¾›è‹¦çš„,我å¯ä»¥ç”³è¯·æŒºçŸ­çš„一段时间(大概是一周),有时候在我的预料中。我ä¸çŸ¥é“对一个人æ¥è¯´ä¸€å‘¨å·¥ä½œè¶…过60å°æ—¶æ˜¯å¦å…¬å¹³ï¼Œæˆ‘甚至ä¸çŸ¥é“40å°æ—¶æ˜¯å¦æ˜¯å…¬å¹³çš„。然而,我确定,如果你努力工作,å´åœ¨ä½ é¢å¤–工作的时间里获得了很少东西,这是很愚蠢的。对我个人æ¥è¯´ï¼Œæˆ‘认为åšä¸€ä¸ªæ‡¦å¤«ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜è¯¥åšçš„äº‹ã€‚é—æ†¾çš„æ˜¯ï¼Œäº‹å®žä¸Šï¼Œç¨‹åºå‘˜ç»å¸¸*被*è¦æ±‚åšä¸€ä¸ªæ‡¦å¤«æ¥ä¸ºä¸€äº›äººè¡¨æ¼”,例如一个ç»ç†æƒ³è¦ç»™æ€»ç»ç†ç•™ä¸‹æ·±åˆ»å°è±¡ã€‚程åºå‘˜ç»å¸¸å¯¹æ­¤å±ˆæœï¼Œå› ä¸ºä»–们希望开心,并且ä¸å–„æ‹’ç»ï¼Œä¸Žæ­¤ç›¸å的有四é“防护墙: +- å°½å¯èƒ½ä¸Žå…¬å¸é‡Œçš„任何人交æµï¼Œè¿™æ ·æ²¡äººå¯ä»¥è¯¯å¯¼æ€»ç»ç†æ­£åœ¨å‘生的事情; +- 学习明确而防御性地评估和规划,让æ¯ä¸ªäººçœ‹åˆ°æ—¶é—´è¡¨çš„内容以åŠå®ƒçš„立场; +- 学会拒ç»ï¼Œåœ¨å¿…è¦æ—¶ä½œä¸ºä¸€ä¸ªå›¢é˜Ÿæ‹’ç»ï¼Œå¹¶ä¸” +- 如果必须的è¯ï¼Œé€€å‡ºå›¢é˜Ÿ -- Communicate as much as possible with everyone in the company so that no one can mislead the executives about what is going on, -- Learn to estimate and schedule defensively and explicitly and give everyone visibility into what the schedule is and where it stands, -- Learn to say no, and say no as a team when necessary, and -- Quit if you have to. +大多数程åºå‘˜æ˜¯å¥½çš„程åºå‘˜ï¼Œå¥½çš„程åºå‘˜æƒ³è¦åšå¾ˆå¤šä¸œè¥¿ã€‚为了åšåˆ°è¿™ç‚¹ï¼Œä»–们需è¦é«˜æ•ˆç®¡ç†ä»–们的时间。从一个问题中兴奋和深陷其中都有一定é‡çš„å¿ƒç†æƒ¯æ€§ã€‚许多程åºå‘˜å‘现他们在长久ä¸è¢«æ‰“æ‰°çš„ä¸€æ®µæ—¶é—´é‡Œèƒ½å¤Ÿä¿æŒå…´å¥‹å’Œé›†ä¸­æ³¨æ„力,这让他们能最好地工作。然而,人们必须ç¡è§‰ï¼Œå¹¶ä¸”有其他的责任。æ¯ä¸ªäººéœ€è¦æ‰¾åˆ°ä¸€ç§æ–¹å¼åŽ»æ»¡è¶³ä»–ä»¬çš„ç”Ÿç‰©èŠ‚å¥å’Œå·¥ä½œèŠ‚å¥ã€‚æ¯ä¸ªç¨‹åºå‘˜éœ€è¦åšä»»ä½•å¿…é¡»çš„äº‹æƒ…æ¥æä¾›é«˜æ•ˆçš„å·¥ä½œå‘¨æœŸï¼Œæ¯”å¦‚åªå‚加的æŸäº›æœ€å…³é”®çš„会议,以此ä¿ç•™ä¸€å®šçš„æ—¶é—´ã€‚ -Most programmers are good programmers, and good programmers want to get a lot done. To do that, they have to manage their time effectively. There is a certain amount of mental inertia associated with getting warmed-up to a problem and deeply involved in it. Many programmers find they work best when they have long, uninterrupted blocks of time in which to get warmed-up and concentrate. However, people must sleep and perform other duties. Each person needs to find a way to satisfy both their human rhythm and their work rhythm. Each programmer needs to do whatever it takes to procure efficient work periods, such as reserving certain days in which you will attend only the most critical meetings. +因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 -Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. - -Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) \ No newline at end of file +Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How to Deal with Difficult People.md) diff --git a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index d9678e5..e15794b 100644 --- a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -1,15 +1,15 @@ -# How to Deal with Difficult People +# 如何与ä¸å¥½ç›¸å¤„的人相处 -You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. +ä½ å¯èƒ½å¿…须和ä¸å¥½ç›¸å¤„的人相处。甚至å¯èƒ½ä½ æœ¬èº«å°±æ˜¯ä¸€ä¸ªä¸å¥½ç›¸å¤„的人。如果你是那ç§ä¸ŽåŒäº‹å’Œæƒå¨äººç‰©æœ‰è®¸å¤šçŸ›ç›¾çš„äººï¼Œä½ åº”è¯¥çæƒœè¿™ç§ç‹¬ç«‹æ‰€æš—示的东西,但需è¦åœ¨ä¸ç‰ºç‰²ä½ çš„æ™ºåŠ›æˆ–åŽŸåˆ™çš„å‰æä¸‹æé«˜ä½ çš„人际交往能力。 -This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often inured to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. +åœ¨è¿™æ–¹é¢æ²¡æœ‰ä»€ä¹ˆç»éªŒ,或者先å‰ç”Ÿæ´»çš„行为模å¼åœ¨å·¥ä½œåœºåˆçš„ç»éªŒä¸èƒ½é€‚用的一些程åºå‘˜,对这ç§äº‹æƒ…会éžå¸¸å›°æ‰°ã€‚ä¸å¥½ç›¸å¤„的人ç»å¸¸ä¹ æƒ¯äºŽæ‹’ç»ï¼Œå¹¶ä¸”与他人相比,他们更ä¸å®¹æ˜“å—社交压力所影å“。关键是åˆé€‚地尊é‡ä»–们,而éžä½ å¯èƒ½æƒ³åšçš„事,但ä¸è¦å……分地满足他们想è¦çš„(译者注:他们想è¦çš„往往是过分的)。 -Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. +程åºå‘˜å¿…须作为一个团队一起工作。当分歧出现时,它必须用æŸç§æ–¹å¼è§£å†³ï¼Œå®ƒä¸èƒ½è¢«é•¿æ—¶é—´æŒ‚起。ä¸å¥½ç›¸å¤„的人通常是æžåº¦èªæ˜Žçš„,并且有一些很有用的æ„è§å¯ä»¥å‘表。ä¸å¸¦å¯¹è¿™ä¸ªäººçš„åè§ï¼Œå€¾å¬å¹¶ç†è§£ä¸å¥½ç›¸å¤„的人是至关é‡è¦çš„。失败的交æµé€šå¸¸æ˜¯åˆ†æ­§çš„基础,但它有时候å¯ä»¥è¢«å·¨å¤§çš„è€å¿ƒç§»é™¤ã€‚å°è¯•冷é™è¯šæ³åœ°ä¿æŒäº¤æµï¼Œå¹¶ä¸”䏿ޥå—任何å¯èƒ½äº§ç”Ÿæ›´å¤§çŸ›ç›¾çš„引诱。在一个åˆç†çš„å°è¯•ç†è§£çš„周期åŽï¼Œå†åšå†³å®šã€‚ -Don't let a bully force you to do something you don't agree with. If you are the leader, do what you think is best. Don't make a decision for any personal reasons, and be prepared to explain the reasons for your decision. If you are a team-mate with a difficult person, don't let the leader's decision have any personal impact. If it doesn't go your way, do it the other way whole-heartedly. +ä¸è¦è®©ä¸€ä¸ªæ¶éœ¸å¼ºè¿«ä½ åšä½ æ‰€ä¸åŒæ„的事情。如果你是è€å¤§ï¼Œåšä½ è®¤ä¸ºæœ€å¥½çš„事情。ä¸è¦ä¸ºä»»ä½•个人因素åšå‡ºå†³å®šï¼Œå¹¶æ—¶åˆ»å‡†å¤‡å¥½ä¸ºä½ çš„决定åšå‡ºè§£é‡Šã€‚如果你是一个有ç€ä¸å¥½ç›¸å¤„çš„åŒäº‹çš„团队æˆå‘˜ï¼Œä¸è¦è®©è€å¤§çš„决定有任何个人影å“。如果没有按你的想法å‘展,全身心地按(已æˆäº‹å®žçš„)å¦ä¸€ç§æ–¹æ³•去åšã€‚ -Difficult people do change and improve. I've seen it with my own eyes, but it is very rare. However, everyone has transitory ups and downs. +ä¸å¥½ç›¸å¤„的人能够改å˜ä¸Žè¿›æ­¥ã€‚我曾亲眼目ç¹è¿™ç§æƒ…况,但这很稀少。然而,æ¯ä¸ªäººéƒ½æœ‰æš‚æ—¶çš„é«˜å…´ä¸Žå¤±è½æƒ…绪。 -One of the challenges that every programmer but especially leaders face is keeping the difficult person fully engaged. They are more prone to duck work and resist passively than others. +æ¯ä¸ªç¨‹åºå‘˜ä½†å°¤å…¶æ˜¯é¢†å¯¼éƒ½ä¼šé¢ä¸´è¿™æ ·ä¸€ä¸ªæŒ‘战:让ä¸å¥½ç›¸å¤„çš„äººä¿æŒå®Œå…¨çš„忙碌。他们比别人更倾å‘于枯燥的工作,并且更能被动地å¿å—。 -Next [Intermediate skills](../../2-Intermediate) \ No newline at end of file +Next [进阶技能](../../2-Intermediate) diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index 4cbbf85..f146765 100644 --- a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -1,11 +1,11 @@ -# How to Fight Schedule Pressure +# å¦‚ä½•ä¸Žæ—¶é—´åŽ‹åŠ›åšæ–—争 -Time-to-market pressure is the pressure to deliver a good product quickly. It is good because it reflects a financial reality, and is healthy up to a point. Schedule pressure is the pressure to deliver something faster than it can be delivered and it is wasteful, unhealthy, and all too common. +å‘布压力是快速推出好产å“çš„åŽ‹åŠ›ã€‚è¿™æ˜¯å¥½çš„ï¼Œå› ä¸ºå®ƒåæ˜ äº†å¸‚场事实,并且在æŸä¸ªæ„义上是å¥åº·çš„ã€‚æ—¶é—´åŽ‹åŠ›æ˜¯è¿«ä½¿ä¸€ä¸ªäº§å“æ›´å¿«åœ°æŽ¨å‡ºçš„压力,这是浪费的,ä¸å¥åº·çš„,并且太普é了。 -Schedule pressure exists for several reasons. The people who task programmers do not fully appreciate what a strong work ethic we have and how much fun it is to be a programmer. Perhaps because they project their own behaviour onto us, they believe that asking for it sooner will make us work harder to get it there sooner. This is probably actually true, but the effect is very small, and the damage is very great. Additionally, they have no visibility into what it really takes to produce software. Not being able to see it, and not be able to create it themselves, the only thing they can do is see time-to-market pressure and fuss at programmers about it. +时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–们对我们所åšçš„äº‹æƒ…ï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。看ä¸åˆ°åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一的事情是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ -The key to fighting schedule pressure is simply to turn it into time-to-market pressure. The way to do this to give visibility into the relationship between the available labour and the product. Producing an honest, detailed, and most of all, understandable estimate of all the labour involved is the best way to do this. It has the added advantage of allowing good management decisions to be made about possible functionality trade-offs. +与时间压力斗争的方法是简å•地把它当åšå‘布压力,实现的方法是让å¯ç”¨åŠ³åŠ›ä¸Žäº§å“间的关系å˜å¾—逿˜Žã€‚æä¾›ä¸€ä¸ªè¯šå®žï¼Œç»†è‡´ï¼Œå¤§éƒ¨åˆ†å¯ç†è§£çš„å¯¹æ‰€æœ‰ç›¸å…³åŠ³åŠ›çš„ä¼°è®¡ï¼Œæ˜¯ä¸€ç§æœ€å¥½çš„实现方å¼ã€‚å…许åšå‡ºå¥½çš„管ç†å†³å®šä»¥æƒè¡¡å¯èƒ½çš„功能也是一个附加的好处。 -The key insight that the estimate must make plain is that labour is an almost incompressible fluid. You can't pack more into a span of time anymore than you can pack more water into a container over and above that container's volume. In a sense, a programmer should never say ‘no’, but rather to say ‘What will you give up to get that thing you want?’ The effect of producing clear estimates will be to increase the respect for programmers. This is how other professionals behave. Programmers' hard work will be visible. Setting an unrealistic schedule will also be painfully obvious to everyone. Programmers cannot be hoodwinked. It is disrespectful and demoralizing to ask them to do something unrealistic. Extreme Programming amplifies this and builds a process around it; I hope that every reader will be lucky enough to use it. +必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其他èŒä¸šä»»æ„所表现的。程åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构造了一个过程,我希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ -Next [How to Understand the User](02-How to Understand the User.md) \ No newline at end of file +Next [如何ç†è§£ç”¨æˆ·](02-How to Understand the User.md) diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 1e3d1c0..4f73816 100644 --- a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,17 +1,17 @@ -# How to Understand the User +# 如何ç†è§£ç”¨æˆ· -It is your duty to understand the user, and to help your boss understand the user. Because the user is not as intimately involved in the creation of your product as you are, they behave a little differently: +ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„bossç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š -- The user generally makes short pronouncements. -- The user has their own job; they will mainly think of small improvements in your product, not big improvements. -- The user can't have a vision that represents the complete body of your product users. +- 用户通常会åšå‡ºç®€çŸ­çš„判断 +- 用户有他们自己的工作,他们主è¦ä¼šæ€è€ƒä½ çš„产å“中å°çš„æ”¹è¿›ï¼Œè€Œéžå¤§çš„æ”¹è¿› +- 用户看ä¸åˆ°ä½ çš„产å“çš„æ•´ä¸ªç”¨æˆ·ç”»åƒ -It is your duty to give them what they really want, not what they say they want. It is however, better to propose it to them and get them to agree that your proposal is what they really want before you begin, but they may not have the vision to do this. Your confidence in your own ideas about this should vary. You must guard against both arrogance and false modesty in terms of knowing what the customer really wants. Programmers are trained to design and create. Market researchers are trained to figure out what people want. These two kinds of people, or two modes of thought in the same person, working harmoniously together give the best chance of formulating the correct vision. +你的责任是找出他们真实需è¦çš„东西,而éžä»–们说他们需è¦çš„东西,然而,更好的是,在你开始å‰ï¼Œå»ºè®®ä»–ä»¬ï¼Œè®©ä»–ä»¬åŒæ„你想åšçš„,就是他们真实想è¦çš„东西,但他们å¯èƒ½æ²¡æœ‰è¿™ç§æ„¿æ™¯ã€‚你对你自己的主æ„的信心是è¦çœ‹æƒ…å†µçš„ã€‚ä½ å¿…é¡»åŒæ—¶ä¸Žè‡ªå¤§å’Œé”™è¯¯çš„è°¦é€Šåšæ–—争去找出什么是人们真实想è¦çš„。这两ç§äººï¼Œæˆ–者åŒä¸€ä¸ªäººèº«ä¸Šä¸¤ç§æ€ç»´æ¨¡å¼ï¼Œä¸€åŒå’Œè°å·¥ä½œä¼šç»™å‡ºæœ€å¥½çš„æœºä¼šæ¥ç»™å‡ºæ­£ç¡®çš„æ„¿æ™¯ã€‚ -The more time you spend with users the better you will be able to understand what will really be successful. You should try to test your ideas against them as much as you can. You should eat and drink with them if you can. +你在用户身上花费的时间更多,你就能够更好地ç†è§£ä»€ä¹ˆèƒ½å¤ŸçœŸæ­£åœ°æˆåŠŸã€‚ä½ åº”å½“å°è¯•在你的用户上尽å¯èƒ½æµ‹è¯•你的想法,如果å¯èƒ½çš„è¯ï¼Œä½ ç”šè‡³åº”当和他们一起åƒé¥­ã€‚ -Guy Kawasaki [Rules] has emphasized the importance of *watching* what your users do in addition to listening to them. +Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ã€‚ -I believe contractors and consultants often have tremendous problems getting their clients to clarify in their own minds what they really want. If you intend to be a consultant, I suggest you choose your clients based on their clear-headedness as well as their pocketbooks. +我相信,åˆä¼™äººå’Œå’¨è¯¢å¸ˆè®©å®¢æˆ·è¯´å‡ºä»–们内心真正想è¦çš„东西有巨大的困难。如果你想æˆä¸ºä¸€ä¸ªå’¨è¯¢å¸ˆï¼Œå»ºè®®ä½ åŸºäºŽç”¨æˆ·æ¸…晰的头脑以åŠä»–们的钱包æ¥é€‰æ‹©å®¢æˆ·ã€‚ -Next [How to Get a Promotion](03-How to Get a Promotion.md) \ No newline at end of file +Next [如何得到晋å‡](03-How to Get a Promotion.md) diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 1ea1510..36572cd 100644 --- a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -1,13 +1,13 @@ -# How to Get a Promotion +# å¦‚ä½•èŽ·å¾—æ™‹å‡ -To be promoted to a role, act out that role first. +想è¦è¢«æå‡ä¸ºæŸç§è§’色,先åšé‚£ä¸ªè§’色该åšçš„事情。 -To get promoted to a title, find out what is expected of that title and do that. +为了æå‡åˆ°æŸä¸ªä½ç½®ï¼Œæ‰¾åˆ°é‚£ä¸ªä½ç½®æœŸæœ›åšçš„事情,然åŽåŽ»åšã€‚ -To get a pay raise, negotiate armed with information. +想è¦å¾—到薪酬的æå‡ï¼Œå¸¦ç€ä¿¡æ¯åŽ»å商。 -If you feel like you are past due for a promotion, talk to your boss about it. Ask them explicitly what you need to do to get promoted, and try to do it. This sounds trite, but often times your perception of what you need to do will differ considerably from your boss's. Also this will pin your boss down in some ways. +如果你觉得你值得得到æå‡ï¼Œä¸Žä½ çš„bossèŠä¸€èŠã€‚清楚地问他们你需è¦åšä»€ä¹ˆæ‰èƒ½èŽ·å¾—æå‡ï¼Œç„¶åŽåŠªåŠ›åŽ»åšã€‚è¿™å¬èµ·æ¥å¾ˆè€å¥—,但大多数时候你对你需è¦åšçš„事情的追求与你boss的想法是ä¸åŒçš„。这å¯èƒ½ä¼šè®©ä½ çš„boss在æŸäº›ç¨‹åº¦ä¸Šæœ‰äº›å¤±è½ã€‚ -Most programmers probably have an exaggerated sense of their relative abilities in some ways---after all, we can't all be in the top 10%! However, I have seen some people who were seriously unappreciated. One cannot expect everyone's evaluation to perfectly match reality at all times, but I think people are generally moderately fair, with one caveat: you cannot be appreciated without visibility into your work. Sometimes, due to happenstance or personal habits, someone will not be noticed much. Working from home a lot or being geographically separated from your team and boss makes this especially difficult. +大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和boss地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 -Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How to Develop Talent.md) +Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How to Develop Talent.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index 7f66191..73d2295 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -1,22 +1,21 @@ -# 3. Advanced - -- Technological Judgment - - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](Technical-Judgment/03-Choosing Languages.md) -- Compromising Wisely - - [How to Fight Schedule Pressure](Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](Compromising-Wisely/03-How to Get a Promotion.md) -- Serving Your Team - - [How to Develop Talent](Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) \ No newline at end of file +# 3. 高级 +- 技术评审 + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„地方](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何使用嵌入å¼è¯­è¨€](Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [选择语言](Technical-Judgment/03-Choosing Languages.md) +- 明智地妥å + - [如何与时间压力斗争](Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How to Understand the User.md) + - [如何得到晋å‡](Compromising-Wisely/03-How to Get a Promotion.md) +- æœåŠ¡ä½ ä»¬çš„å›¢é˜Ÿ + - [如何å‘展你们的æ‰èƒ½](Serving-Your-Team/01-How to Develop Talent.md) + - [如何选择工作的内容](Serving-Your-Team/02-How to Choose What to Work On.md) + - [如何从你的队å‹å­¦åˆ°æœ€å¤šä¸œè¥¿](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何划分问题](Serving-Your-Team/04-How to Divide Problems Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„任务](Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [如何获得对工程的支æŒ](Serving-Your-Team/06-How to Gather Support for a Project.md) + - [如何å‘展一个系统](Serving-Your-Team/07-How to Grow a System.md) + - [如何有效地交æµ](Serving-Your-Team/08-How to Communicate Well.md) + - [如何告诉别人他们ä¸åƒçŸ¥é“的东西](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [如何处ç†ç»„织混乱](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index e853798..c4ba737 100644 --- a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -1,23 +1,23 @@ -# How to Develop Talent +# 如何å‘展æ‰èƒ½ -Nietschze exaggerated when he said [Stronger]: +Nietschze夸大了他所说的: -> What does not destroy me, makes me stronger. +>æ€ä¸æ­»æˆ‘们的,åªä¼šè®©æˆ‘们更强大。 -Your greatest responsibility is to your team. You should know each of them well. You should stretch your team, but not overburden them. You should usually talk to them about the way they are being stretched. If they buy in to it, they will be well motivated. On each project, or every other project, try to stretch them in both a way that they suggest and a way that you think will be good for them. Stretch them not by giving them more work, but by giving them a new skill or better yet a new role to play on the team. +你最大的责任是对你的团队负责。你应该éžå¸¸äº†è§£ä»–们中的æ¯ä¸ªäººã€‚你应该激励你的团队,但ä¸è¦è®©ä»–们过劳。你通常应该告诉他们他们被激励的方å¼ã€‚如果他们觉得划算,他们会被很好的激励。æ¯ä¸ªå·¥ç¨‹ä¸­ï¼Œæˆ–者在æ¯ä¸ªå…¶ä»–的工程里,试ç€åŒæ—¶ç”¨ä»–们建议的以åŠä½ è®¤ä¸ºå¯¹ä»–们好的方å¼åŽ»æ¿€åŠ±ä»–ä»¬ã€‚æ¿€åŠ±ä»–ä»¬çš„æ–¹æ³•ä¸æ˜¯ç»™ä»–们更多工作,而是给他们一个新的技能或在团队里扮演一个新的角色。 -You should allow people (including yourself) to fail occasionally and should plan for some failure in your schedule. If there is never any failure, there can be no sense of adventure. If there are not occasional failures, you are not trying hard enough. When someone fails, you should be as gentle as you can with them while not treating them as though they had succeeded. +你应该å…许人们(包括你自己)å¶å°”失败,并且应该为一些失败预留一些时间。如果从未有失败,冒险也就没有æ„义。如果没有å¶ç„¶çš„失败,说明其实你没有足够努力。当一个人失败了,你应该尽å¯èƒ½æ¸©æŸ”地对待他,ä¸è¯¥æŠŠä»–ä»¬å½“åšæˆåŠŸäº†é‚£æ ·å­ã€‚ -Try to get each team member to buy in and be well motivated. Ask each of them explicitly what they need to be well-motivated if they are not. You may have to leave them dissatisfied, but you should know what everybody desires. +为了让æ¯ä¸ªå›¢é˜Ÿæˆå‘˜è¢«å……分激励,问清楚他们中的æ¯ä¸ªäººï¼Œå¦‚果他们没有动力的è¯ï¼Œä»–们需è¦ä»€ä¹ˆæ‰èƒ½è¢«å……分激励。你å¯èƒ½éœ€è¦è®©ä»–ä»¬ä¿æŒä¸æ»¡æ„的状æ€ï¼Œä½†ä½ éœ€è¦çŸ¥é“æ¯ä¸ªäººéœ€è¦çš„æ˜¯ä»€ä¹ˆã€‚ -You can't give up on someone who is intentionally not carrying their share of the load because of low morale or dissatisfaction and just let them be slack. You must try to get them well-motivated and productive. As long as you have the patience, keep this up. When your patience is exhausted, fire them. You cannot allow someone who is intentionally working below their level to remain on the team, since it is not fair to the team. +ä½ ä¸è¯¥å› ä¸ºè¿™æ ·çš„åŽŸå› æ”¾å¼ƒï¼Œæˆ–è€…è®©ä¸€äº›äººæ¾æ‡ˆï¼šä»–ä»¬å£«æ°”ä½Žè½æˆ–è€…ä¸æ»¡å› æ­¤æ•…æ„æ²¡æœ‰æ‰¿æ‹…分担到的责任。你必须试ç€è®©ä»–们充分被激励并且有效率。åªè¦ä½ æœ‰è€å¿ƒï¼ŒåšæŒè¿™æ ·åšã€‚当你的è€å¿ƒè€—尽时,就解雇他们å§ã€‚ä½ ä¸èƒ½å…许故æ„ä¸å¸å…¶èŒçš„员工留在团队里,因为这对团队ä¸å…¬å¹³ã€‚ -Make it clear to the strong members of your team that you think they are strong by saying so in public. Praise should be public and criticism private. +通过在公众场åˆè¿™æ ·è¯´ï¼Œè®©ä½ å›¢é˜Ÿä¸­çš„强大æˆå‘˜æ¸…楚地知é“他们是强大的。表扬应当公开,批评应当ç§å¯†ã€‚ -The strong members of the team will naturally have more difficult tasks than the weak members of the team. This is perfectly natural and nobody will be bothered by it as long as everyone works hard. +团队中的强大æˆå‘˜ä¼šè‡ªç„¶åœ°æ¯”弱的æˆå‘˜æœ‰æ›´å¤šå›°éš¾çš„任务。这是完美而自然的,没人为因此困扰,因为æ¯ä¸ªäººéƒ½åŠªåŠ›å·¥ä½œã€‚ -It is an odd fact that is not reflected in salaries that a good programmer is more productive than 10 bad programmers. This creates a strange situation. It will often be true that you could move faster if your weak programmers would just get out of the way. If you did this you would in fact make more progress in the short term. However, your tribe would lose some important benefits, namely the training of the weaker members, the spreading of tribal knowledge, and the ability to recover from the loss of the strong members. The strong must be gentle in this regard and consider the issue from all angles. +一个在工资中没有å馈出æ¥çš„奇怪的事实是,好的程åºå‘˜æ¯”å个糟糕的程åºå‘˜è¦æœ‰æ•ˆçŽ‡å¾—å¤šã€‚è¿™å¯¼è‡´äº†ä¸€ç§å¥‡æ€ªçš„现象。通常,如果你们的弱程åºå‘˜ä¸æŒ¡é“çš„è¯ï¼Œä½ èƒ½è·‘的更快。如果你这样åšäº†ï¼Œäº‹å®žä¸Šä½ åœ¨çŸ­æœŸèƒ½å–得更多进度。然而, 你的交易会失去一些é‡è¦çš„好处,å«åšå¯¹å¼±å°æˆå‘˜çš„训练,对集体知识的传递,失去强大程åºå‘˜åŽçš„æ¢å¤èƒ½åŠ›ã€‚å¼ºå¤§çš„ç¨‹åºå‘˜å¯¹è¿™ç§çŽ°è±¡åº”è¯¥æ¸©å’Œäº›ï¼Œå¹¶ä¸”ä»Žå„ç§è§’度去考虑这个问题。 -You can often give the stronger team members challenging, but carefully delineated, tasks. +ä½ ç»å¸¸èƒ½å¤Ÿç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 -Next [How to Choose What to Work On](02-How to Choose What to Work On.md) \ No newline at end of file +Next [如何选择工作的内容](02-How to Choose What to Work On.md) diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index c13705c..11d7f14 100644 --- a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -1,5 +1,5 @@ -# How to Choose What to Work On +# 如何选择工作的内容 -You balance your personal needs against the needs of the team in choosing what aspect of a project to work on. You should do what you are best at, but try to find a way to stretch yourself not by taking on more work but by exercising a new skill. Leadership and communication skills are more important than technical skills. If you are very strong, take on the hardest or riskiest task, and do it as early as possible in the project to decrease risk. +你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 -Next [How to Get the Most From Your Team-mates](03-How to Get the Most From Your Teammates.md) \ No newline at end of file +Next [如何最大化利用你的队å‹](03-How to Get the Most From Your Teammates.md) diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index 1b046db..cb6d19b 100644 --- a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -1,15 +1,15 @@ -# How to Get the Most From Your Team-mates +# 如何让你的队å‹çš„价值最大化 -To get the most from your team-mates, develop a good team spirit and try to keep every individual both personally challenged and personally engaged. +为了让你的队å‹çš„价值最大化,å‘展好的团队精神,试ç€ä¿æŒæ¯ä¸ªäººçš„个人挑战与渴望。 -To develop team spirit, corny stuff like logoized clothing and parties are good, but not as good as personal respect. If everyone respects everyone else, nobody will want to let anybody down. Team spirit is created when people make sacrifices for the team and think in terms of the good of the team before their own personal good. As a leader, you can't ask for more than you give yourself in this respect. +为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œæ²¡æœ‰ä¼šæƒ³è¦è®©å…¶ä»–任何人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ -One of the keys to team leadership is to facilitate consensus so that everyone has buy in. This occasionally means allowing your team-mates to be wrong. That is, if it does not harm the project too much, you must let some of your team do things their own way, based on consensus, even if you believe with great confidence it is the wrong thing to do. When this happens, don't agree, simply disagree openly and accept the consensus. Don't sound hurt, or like you're being forced into it, simply state that you disagree but think the consensus of the team is more important. This will often cause them to backtrack. Don't insist that they go through with their initial plan if they do backtrack. +团队领导力的一个关键是促进团结,这样æ¯ä¸ªäººéƒ½ä¼šå¬ä½ çš„。有时候这æ„味ç€å…许你的队å‹çŠ¯é”™ã€‚ä¹Ÿå°±æ˜¯ï¼ŒåŸºäºŽè¿™ç§å›¢ç»“,如果对项目没有太大的æŸå®³ï¼Œä½ å¿…é¡»å…许你团队的一部分æˆå‘˜ç”¨ä»–们自己的方å¼åšäº‹ï¼Œå³ä½¿ä½ æœ‰å¾ˆå¤§çš„ä¿¡å¿ƒè®¤ä¸ºè¿™æ˜¯ä¸€ä»¶é”™äº‹ã€‚å½“è¿™ç§æƒ…况确实å‘生时,ä¸è¦åŒæ„他们的观点,简å•公开地åå¯¹ä¹‹ï¼Œç„¶åŽæŽ¥å—è¿™ç§å›¢ç»“。ä¸è¦è®©äººè§‰å¾—ä½ å—伤了,或者认为你是被迫的,简å•地陈述你ä¸åŒæ„,但认为团队的团结是更加é‡è¦çš„。这ç»å¸¸ä¼šå¯¼è‡´ä»–们忂”ã€‚å¦‚æžœä»–ä»¬çœŸçš„åæ‚”了,ä¸è¦åšæŒä»–们一开始的计划。 -If there is an individual who will not consent after you have discussed the issues from all appropriate sides, simply assert that you have to make a decision and that is what your decision is. If there is a way to judge if your decision will be wrong or if it is later shown to be wrong, switch as quickly as you can and recognize the persons who were right. +如果在你们从所有åˆé€‚的角度讨论了这个è¯é¢˜åŽï¼Œæœ‰ä¸ªäººä¼šå对,简å•地告诉他们,你必须åšä¸€ä¸ªå†³å®šï¼Œå¹¶ä¸”è¿™å°±æ˜¯ä½ çš„å†³å®šã€‚å¦‚æžœæœ‰æ–¹æ³•åŽ»è¯„ä¼°ä½ çš„å†³å®šæ˜¯å¦æ˜¯é”™çš„,或者它ç¨åŽæ˜¯å¦æ˜¯é”™çš„,尽å¯èƒ½å¿«é€Ÿåˆ‡æ¢ï¼Œå¹¶æ„Ÿæ¿€é‚£ä¸ªå¯¹çš„人。 -Ask your team, both as a group and individually, what they think would create team spirit and make for an effective team. +询问你的团队,包括集体与个人,这样一个问题:他们认为什么能创造团队精神以åŠåˆ›é€ ä¸€ä¸ªé«˜æ•ˆçš„团队。 -Praise frequently rather than lavishly. Especially praise those who disagree with you when they are praiseworthy. Praise in public and criticize in private; with one exception: sometimes growth or the correction of a fault can't be praised without drawing embarrassing attention to the original fault, so that growth should be praised in private. +ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ -Next [How to Divide Problems Up](04-How to Divide Problems Up.md) \ No newline at end of file +Next [如何划分问题](04-How to Divide Problems Up.md) diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index 4ee4d14..e6b7cc7 100644 --- a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -1,9 +1,9 @@ -# How to Divide Problems Up +# 如何划分问题 -It's fun to take a software project and divide it up into tasks that will be performed by individuals. This should be done early. Sometimes managers like to think that an estimate can be made without consideration of the individuals that will perform the work. This is impossible since the productivity of individuals varies so widely. Who has particular knowledge about a component also constantly changes and can have an order of magnitude effect on performance. +接手一个软件工程并把它分为å¯ä»¥ç”±ä¸ªäººå®žçŽ°çš„ä»»åŠ¡æ˜¯å¾ˆæœ‰è¶£çš„ã€‚è¿™äº‹åº”è¯¥åŠæ—©è¿›è¡Œã€‚有时候ç»ç†å¯èƒ½ä¼šè®¤ä¸ºä¸è€ƒè™‘个人的项目能够起作用。这是ä¸å¯èƒ½çš„,因为æ¯ä¸ªäººçš„生产力是如此广泛地ä¸åŒã€‚对æŸä¸ªç»„件有特殊知识的人也ç»å¸¸æ”¹å˜ï¼Œå¹¶ä¸”å¯ä»¥å¯¹å·¥ä½œæ•ˆæžœæœ‰ä¸€ä¸ªæ•°é‡çº§çš„å½±å“。 -Just as a composer considers the timbre of the instrument that will play a part or the coach of an athletic team considers the strengths of each player, the experienced team leader will not usually be able to separate the division of the project into tasks from the team members to which they will be assigned. This is part of the reason that a high-performing team should not be broken up. +正如一个作曲家认为ä¹å™¨çš„音色会其é‡è¦ä½œç”¨ï¼Œæˆ–者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 -There is a certain danger in this given that people will become bored as they build upon their strengths and never improve their weaknesses or learn new skills. However, specialization is a very useful productivity tool when not overused. +因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–ä»¬çš„ä¸æ“…é•¿çš„æ–¹å‘æˆ–者学习新的技能。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 -Next [How to Handle Boring Tasks](05-How to Handle Boring Tasks.md) \ No newline at end of file +Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How to Handle Boring Tasks.md) diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index dfdb8b9..4c94c4d 100644 --- a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -1,7 +1,7 @@ -# How to Handle Boring Tasks +# å¦‚ä½•å¤„ç†æ— èŠçš„任务 -Sometimes it is not possible to avoid boring tasks that are critical to the success of the company or the project. These tasks can really hurt the morale of those that have to do them. The best technique for dealing with this is to invoke or promote Larry Wall's programmer's virtue of Laziness. Try to find some way to get the computer to do the task for you or to help your team-mates do this. Working for a week on a program to do a task that will take a week to do by hand has the great advantage of being more educational and sometimes more repeatable. +有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬Larry Wall的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 -If all else fails, apologize to those who have to do the boring task, but under no circumstances allow them to do it alone. At a minimum assign a team of two to do the work and promote healthy teamwork to get the task done. +如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ -Next [How to Gather Support for a Project](06-How to Gather Support for a Project.md) \ No newline at end of file +Next [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How to Gather Support for a Project.md) diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 3ba9eaf..257563f 100644 --- a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -1,5 +1,5 @@ -# How to Gather Support for a Project +# å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ -To gather support for a project, create and communicate a vision that demonstrates real value to the organization as a whole. Attempt to let others share in your vision creation. This gives them a reason to support you and gives you the benefit of their ideas. Individually recruit key supporters for your project. Wherever possible, show, don't tell. If possible, construct a prototype or a mock-up to demonstrate your ideas. A prototype is always powerful but in software it is far superior to any written description. +è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你的创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的智慧。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 -Next [How to Grow a System](07-How to Grow a System.md) \ No newline at end of file +Next [如何å‘展一个系统](07-How to Grow a System.md) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index f41cd4b..6021f7c 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -1,23 +1,23 @@ -# How to Grow a System +# 如何å‘展一个系统 -The seed of a tree contains the idea of the adult but does not fully realize the form and potency of the adult. The embryo grows. It becomes larger. It looks more like the adult and has more of the uses. Eventually it bears fruit. Later, it dies and its body feeds other organisms. +æ ‘çš„ç§å­åŒ…å«äº†æˆé•¿çš„æ€æƒ³ï¼Œä½†ä¸å®Œå…¨å®žçްæˆé•¿ä½“的形å¼ä¸ŽåŠ›é‡ã€‚胚胎会æˆé•¿ã€‚它会å˜å¤§ã€‚å®ƒçœ‹èµ·æ¥æ›´åƒæˆé•¿ä½“,并越æ¥è¶Šæœ‰ç”¨ã€‚最终它孕育果实。最åŽï¼Œå®ƒæ­»äº¡å¹¶ä¸”它的躯体喂养了其他的有机体。 -We have the luxury of treating software like that. A bridge is not like that; there is never a baby bridge, but merely an unfinished bridge. Bridges are a lot simpler than software. +对待软件我们也应当有这样的è£è€€ã€‚ä¸€æž¶æ¡¥ä¸æ˜¯è¿™æ ·çš„,永远ä¸ä¼šæœ‰ä¸€æž¶å©´å„¿æ¡¥ï¼Œä½†åªæ˜¯æœ‰ä¸€åº§æœªå®Œæˆçš„æ¡¥ã€‚桥比软件è¦ç®€å•得多。 -It is good to think of software as growing, because it allows us to make useful progress before we have a perfect mental image. We can get feedback from users and use that to correct the growth. Pruning off weak limbs is healthful. +认识到软件的æˆé•¿æ˜¯æœ‰ç›Šçš„,因为这å…许我们在有一个完美的æ€ç»´å›¾æ™¯å‰å–得有用的进步。我们å¯ä»¥ä»Žç”¨æˆ·é‚£é‡ŒèŽ·å¾—åé¦ˆï¼Œå¹¶ç”¨ä¹‹çº æ­£è¿™ç§æˆé•¿ã€‚修剪掉疲软的四肢æ‰èƒ½å¥åº·ã€‚ -The programmer must design a finished system that can be delivered and used. But the advanced programmer must do more. You must design a growth path that ends in the finished system. It is your job to take a germ of an idea and build a path that takes it as smoothly as possible into a useful artefact. +程åºå‘˜å¿…须设计一个完æˆçš„å¯åˆ†å‘å¯ä½¿ç”¨çš„系统。但高级程åºå‘˜éœ€è¦åšçš„æ›´å¤šã€‚你必须设计一个终于完结系统的æˆé•¿è·¯çº¿ã€‚你的工作是,得到一个想法的èŒèŠ½ï¼Œç„¶åŽæŠŠå®ƒå°½å¯èƒ½é¡ºåˆ©åœ°å˜æˆä¸€ä¸ªæœ‰ç”¨çš„人工制å“。 -To do this, you must visualize the end result and communicate it in a way that the engineering team can get excited about. But you must also communicate to them a path that goes from wherever they are now to where they want to be with no large leaps. The tree must stay alive the whole time; it cannot be dead at one point and resurrected later. +因此,你必须模拟最终的结果,用一ç§å·¥ç¨‹å›¢é˜Ÿå¯ä»¥ä¸ºä¹‹é›€è·ƒçš„æ–¹å¼åŽ»äº¤æµã€‚但你也必须和他们交æµä¸€æ¡éžè·³è·ƒå¼çš„è·¯å¾„ï¼Œä»Žä»–ä»¬æ‰€çŸ¥åˆ°ä»–ä»¬æƒ³è¦æˆä¸ºçš„地方去。在整个过程中,这棵树必须活ç€ï¼Œå®ƒä¸èƒ½åœ¨ä»€ä¹ˆæ—¶å€™æ­»åŽ»ï¼Œç„¶åŽåˆå¤æ´»è¿‡æ¥ã€‚ -This approach is captured in spiral development. Milestones that are never too far apart are used to mark progress along the path. In the ultra-competitive environment of business, it is best if the milestones can be released and make money as early as possible, even if they are far away from a well-designed endpoint. One of the programmer's jobs is to balance the immediate pay-off against future pay-off by wisely choosing a growth path expressed in milestones. +è¿™æ¡è·¯å¾„会是螺旋å‘展的。里程碑之间永远ä¸ä¼šå¤ªè¿œï¼Œè¿™å¯¹äºŽåœ¨è·¯ä¸Šå–得进步是有用的。在æžç«¯çš„商业环境里,如果里程碑å¯ä»¥å®žçŽ°å¹¶å°½æ—©èµšé’±æ˜¯æœ€å¥½çš„ã€‚ï¼Œå³ä½¿ä»–们离良好设计的端点还有很远。程åºå‘˜çš„ä¸€ä¸ªå·¥ä½œå°±æ˜¯é€šè¿‡ç†æ™ºçš„选择用里程碑表示的æˆé•¿è·¯å¾„æ¥å¹³è¡¡å³æ—¶çš„æŠ¥é…¬ä¸Žå°†æ¥çš„æŠ¥é…¬ã€‚ -The advanced programmer has the triple responsibility of growing software, teams, and persons. +高级程åºå‘˜å¯¹è½¯ä»¶ï¼Œå›¢é˜Ÿï¼Œä¸ªäººçš„æˆé•¿æœ‰é›†ä½“è´£ä»»ã€‚ -A reader, Rob Hafernik, sent in this comment on this section that I can do no better than to quote in full: +一个读者,Rob Hafernik,在这一节中写下了这样的评论: -> I think you under-emphasize the importance here. It's not just systems, but algorithms, user interfaces, data models, and so on. It's absolutely *vital* as you work on a large system to have measurable progress toward intermediate goals. Nothing is as bad as the special horror of getting down to the end and discovering that the whole thing just isn't going to work (look at the recent debacle of the Voter News System). I would even go further and state it as a law of nature: no large, complex system can be implemented from scratch, it can only be evolved from a simple system to a complex system in a series of intentional steps. +> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚å½“ä½ å·¥ä½œåœ¨ä¸€ä¸ªå¤§çš„ç³»ç»Ÿä¸­ï¼Œå¿…é¡»æœ‰å³æ—¶ç›®æ ‡ç›¸å…³çš„坿µ‹é‡çš„进步时,这些也是*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 -To which one can only reply *Fiat lux*! +对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ -Next [How to Communicate Well](08-How to Communicate Well.md) +Next [如何良好地交æµ](08-How to Communicate Well.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index 4e55ee2..06c64ab 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -1,11 +1,11 @@ -# How to Communicate Well +# 如何有效地沟通 -To communicate well, you have to recognize how hard it is. It is a skill unto itself. It is made harder by the fact that the persons with whom you have to communicate are flawed. They do not work hard at understanding you. They speak poorly and write poorly. They are often overworked or bored, and, at a minimum, somewhat focused on their own work rather than the larger issues you may be addressing. One of the advantages of taking classes and practising writing, public speaking, and listening is that if you become good at it you can more readily see where problems lie and how to correct them. +ä¸ºäº†è‰¯å¥½åœ°æ²Ÿé€šï¼Œä½ å¿…é¡»è®¤è¯†åˆ°å®ƒçš„å›°éš¾ã€‚å®ƒæœ¬èº«å°±æ˜¯ä¸€ç§æŠ€èƒ½ã€‚ä¸Žä½ äº¤æµçš„人本身是有瑕疵的,这一事实使得沟通å˜å¾—更加困难。他们ä¸ä¼šåŠªåŠ›åŽ»ç†è§£ä½ ã€‚他们ä¸å–„言辞。他们ç»å¸¸è¿‡åº¦å·¥ä½œæˆ–者无èŠï¼Œè‡³å°‘,有时候åªå…³æ³¨ä»–们自己的工作而éžä½ è¦å‘表的长篇大论。上课,练习写作,公共演讲,è†å¬ï¼Œè¿™äº›ä¸œè¥¿çš„一个好处是,如果你擅长它们,你å¯ä»¥æ›´å®¹æ˜“看到问题所在以åŠè§£å†³æ–¹æ³•。 -The programmer is a social animal whose survival depends on communication with her team. The advanced programmer is a social animal whose satisfaction depends on communication with people outside her team. +程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„ç”Ÿå­˜ä¾èµ–于与团队的交æµã€‚高级程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„æ»¡æ„ä¾èµ–于与团队外的人的交æµã€‚ -The programmer brings order out of chaos. One interesting way to do this is to initiate a proposal of some kind outside the team. This can be done in a *strawman* or *white-paper* format or just verbally. This leadership has the tremendous advantage of setting the terms of the debate. It also exposes you to criticism, and worse, rejection and neglect. The advanced programmer must be prepared to accept this, because she has a unique power and therefore a unique responsibility. Entrepreneurs who are not programmers need programmers to provide leadership in some ways. Programmers are the part of the bridge between ideas and reality that rests on reality. +程åºå‘˜ä»Žæ··æ²Œä¸­å¸¦æ¥ç§©åºï¼Œä¸€ç§å®žçŽ°è¿™ä¸€ç›®æ ‡çš„æœ‰è¶£æ–¹æ³•æ˜¯ä»Žå¤–éƒ¨çš„ä¸€ä¸ªæè®®å¼€å§‹ã€‚这能用*稻è‰äºº*或*白纸*æ¨¡å¼æˆ–者å£å¤´çš„æ–¹å¼æ¥å®Œæˆã€‚è¿™ç§é¢†å¯¼å¯¹äºŽè®©å›¢é˜Ÿç½®èº«äºŽè¾©è®ºä¸­æœ‰æžå¤§çš„好处。这也把你暴露到批评,或者,拒ç»ä¸Žå¦å®šä¸­ã€‚高级程åºå‘˜å¿…须准备好接å—这些,因为他有特殊的能力,也因此有特殊的责任。éžç¨‹åºå‘˜å‡ºèº«çš„ä¼ä¸šå®¶éœ€è¦ç¨‹åºå‘˜åœ¨æŸäº›æ–¹é¢æä¾›é¢†å¯¼ã€‚程åºå‘˜æ˜¯æ€æƒ³ä¸ŽçŽ°å®žä¹‹é—´çš„ä¸€éƒ¨åˆ†æ¡¥æ¢ã€‚ -I haven't mastered communicating well, but what I'm currently trying is what I think of a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. +æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了能é‡ï¼Œæ²¡æœ‰äººå› æ­¤ä¼šçœ‹ä½Žä½ ã€‚ -Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) +Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How to Tell People Things They Don't Want to Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index dc6c539..f91d89e 100644 --- a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -1,9 +1,9 @@ -# How to Tell People Things They Don't Want to Hear +# å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西 -You will often have to tell people things that will make them uncomfortable. Remember that you are doing this for a reason. Even if nothing can be done about the problem, you are telling them as early as possible so they will be well-informed. +你会ç»å¸¸éœ€è¦å‘Šè¯‰äººä»¬ä¸€äº›è®©ä»–们ä¸èˆ’æœçš„事情。记ä½ï¼Œä½ å¿…须为æŸç§åŽŸå› æ‰è¿™æ ·åšã€‚å³ä½¿æ²¡æœ‰ä»€ä¹ˆå¯ä»¥ç”¨æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ ä¹Ÿè¯¥å°½æ—©å‘Šè¯‰ä»–们,这样他们æ‰èƒ½å……分警觉。 -The best way to tell someone about a problem is to offer a solution at the same time. The second best way is to appeal to them for help with the problem. If there is a danger that you won't be believed, you should gather some support for your assertion. +å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你å¯èƒ½ä¼šä¸è¢«ä¿¡ä»»ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ -One of the most unpleasant and common things you will have to say is, ‘The schedule will have to slip.’ The conscientious programmer hates to say this, but must say it as early as possible. There is nothing worse than postponing action when a milestone slips, even if the only action is to inform everyone. In doing this, it is better to do it as a team, at least in spirit, if not physically. You will want your team's input on both where you stand and what can be done about it, and the team will have to face the consequences with you. +一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯”deadline抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ -Next [How to Deal with Managerial Myths](10-How to Deal with Managerial Myths.md) +Next [如何处ç†ç®¡ç†ç¥žè¯](10-How to Deal with Managerial Myths.md) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 6acb49d..74d2fc4 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,13 +1,12 @@ -# How to Deal with Managerial Myths +# 如何处ç†ç®¡ç†ç¥žè¯ -The word *myth* sometimes means fiction. But it has a deeper connotation. It also means a story of religious significance that explains the universe and mankind's relationship to it. Managers tend to forget what they learned as programmers and believe in certain myths. It would be as rude and unsuccessful to try to convince them these myths are false as to try to disillusion a devoutly religious person of their beliefs. For that reason, you should recognize these beliefs as myths: +*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›å®—教内容æ¥è§£é‡Šå®‡å®™å’Œäººç±»ä¸Žä¹‹çš„关系。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š -- More documentation is always better. (They want it, but they don't want you to spend any time on it.) -- Programmers can be equated. (Programmers vary by an order of magnitude.) -- Resources can be added to a late project to speed it. (The cost of communication with the new persons is almost always more taxing than helpful.) -- It is possible to estimate software development reliably. (It is not even theoretically possible.) -- Programmers' productivity can be measured in terms of some simple metric, like lines of code. (If succinctness is power, lines of code are bad, not good.) +- æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ +- 程åºå‘˜æ˜¯å¹³ç­‰çš„。(程åºå‘˜å¯ä»¥æŒ‰é‡è¦ç¨‹åº¦åˆ†ç±»ã€‚) +- åˆ†é…æ›´å¤šèµ„æºç»™è¿Ÿæ¥çš„项目å¯ä»¥è®©å®ƒåŠ é€Ÿã€‚ï¼ˆä¸Žæ–°äººçš„äº¤æµçš„代价大多数时候很ç¹é‡å¹¶ä¸”无用。) +- 程åºå‘˜çš„æ•ˆçއå¯ä»¥ç”¨ä¸€äº›ç®€å•的标准尺度æ¥åº¦é‡ï¼Œæ¯”如代ç è¡Œæ•°ï¼ˆå¦‚æžœç®€æ´æ‰æ˜¯åŠ›é‡ï¼Œé‚£ä¹ˆä»£ç è¡Œæ•°æ˜¯å的,而éžå¥½çš„。) -If you have an opportunity, you can try to explain these things, but don't feel bad if you have no success and don't damage your reputation by confronting these myths belligerently. Each of these myths reinforces the manager's idea that they have some actual control over what is going on. The truth is that managers facilitate if they are good, and impede if they are bad. +如果有机会,你å¯ä»¥è¯•ç€è§£é‡Šè¿™äº›ä¸œè¥¿ï¼Œä½†å¦‚果你没有æˆåŠŸï¼Œä¸è¦è§‰å¾—悲伤,ä¸è¦å¥½æ–—地å对这些神è¯ä»¥è‡´æŸå®³äº†ä½ çš„声望。æ¯ä¸ªè¿™æ ·çš„神è¯å¢žå¼ºäº†ç®¡ç†è€…关于他们有一些对正在进行的事情的实际控制的想法。真相是,如果管ç†è€…是好的,他们会帮助你,如果他们是å的,他们会妨ç¢ä½ ã€‚ -Next [How to Deal with Organizational Chaos](11-How to Deal with Organizational Chaos.md) \ No newline at end of file +Next [如何处ç†ç»„织混乱](11-How to Deal with Organizational Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md index 247a626..f611e0c 100644 --- a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md +++ b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -1,11 +1,11 @@ -# How to Deal with Organizational Chaos +# 如何处ç†ç»„织混乱 -There are often brief periods of great organizational chaos, such as lay-offs, buyouts, ipos, firings, new hirings, and so on. These are unsettling to everyone, but perhaps a little less unsettling to the programmer whose personal self-esteem is founded in capacity rather than in position. Organizational chaos is a great opportunity for programmers to exercise their magic power. I've saved this for last because it is a deep tribal secret. If you are not a programmer, please stop reading now. +ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ -> Engineers have the power to create and sustain. +> 工程师有能力创造与维æŒã€‚ -Non-engineers can order people around but, in a typical software company, can create and sustain nothing without engineers, just as engineers typically cannot sell a product or manage a business effectively. This power is proof against almost all of the problems associated with temporary organizational mayhem. When you have it you should ignore the chaos completely and carry on as if nothing is happening. You may, of course, get fired, but if that happens you can probably get a new job because of the magic power. More commonly, some stressed-out person who does not have the magic power will come into your cube and tell you to do something stupid. If you are really sure that it is stupid, it is best to smile and nod until they go away and then carry on doing what you know is best for the company. +éžå·¥ç¨‹å¸ˆå¯ä»¥å®‰æŽ’人们,但,在典型的软件公å¸ï¼Œå¦‚果没有程åºå‘˜çš„è¯ï¼Œä»–们ä¸èƒ½åˆ›é€ ä¸Žç»´æŒä»»ä½•东西,正如工程师通常ä¸èƒ½æœ‰æ•ˆåœ°é”€å”®äº§å“或者管ç†å•†ä¸šã€‚è¿™ç§åŠ›é‡å¯¹äºŽå¤§å¤šæ•°ä¸Žä¸´æ—¶ç»„ç»‡æ··ä¹±ç›¸å…³çš„é—®é¢˜æ˜¯ä¸€ç§æŠµæŠ—ã€‚å¦‚æžœä½ æœ‰è¿™ç§åŠ›é‡ï¼Œä½ åº”å½“å®Œå…¨å¿½è§†è¿™ç§æ··ä¹±å¹¶å½“åšä»€ä¹ˆéƒ½æ²¡å‘ç”Ÿé‚£æ ·åšæŒä¸‹åŽ»ã€‚ä½ å¯èƒ½ï¼Œå½“然,被解雇,但如果这å‘生了,你å¯èƒ½å› ä¸ºè¿™ç§åŠ›é‡å¾—到新的工作。更普é的,一些紧张的没有这ç§é­”力的人会进入你的空间并告诉你åšä¸€äº›è ¢äº‹ã€‚å¦‚æžœä½ çœŸçš„ç¡®ä¿¡è¿™æ˜¯ä¸€ä»¶è ¢äº‹ï¼Œæœ€å¥½çš„åšæ³•是微笑,点头,直到他们走开,然åŽç»§ç»­åšä½ è®¤ä¸ºå¯¹å…¬å¸æœ€å¥½çš„事情。 -If you are a leader, tell your people to do the same thing and tell them to ignore what anybody else tells them. This course of action is the best for you personally, and is the best for your company or project. +如果你是一个领导者,告诉你的员工åšä¸€æ ·çš„事情,告诉他们忽视其他任何人告诉他们的东西。这ç§è¡Œä¸ºçš„è¿‡ç¨‹å¯¹ä½ ä¸ªäººæ˜¯æœ€å¥½çš„ï¼Œå¯¹ä½ çš„å…¬å¸æˆ–工程也是最好的。 -Next [Glossary](../../GLOSSARY.md) +Next [è¯æ±‡è¡¨](../../4-Glossary.md) diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index a1146c0..a71d212 100644 --- a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,9 +1,9 @@ -# How to Tell the Hard From the Impossible +# 如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分 -It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. +解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。大é‡çš„工作是困难的,但ä¸å¿…然是ä¸å¯èƒ½çš„。 -The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. +è¿™ç§åŒºåˆ«æ˜¯æ»‘稽的,因为你å¯èƒ½ç»å¸¸è¢«è¦æ±‚åšä¸€äº›äº‹å®žä¸Šä¸å¯èƒ½çš„事情,ä¸è®ºæ˜¯ä»Žç§‘学观点还是从软件工程观点。然åŽä½ çš„å·¥ä½œå°±å˜æˆäº†å¸®åŠ©è€æ¿æ‰¾åˆ°ä¸€ä¸ªåˆç†çš„,仅仅是困难而éžä¸å¯èƒ½çš„解决方案,去满足他们大部分的需è¦ã€‚当一个解决方案å¯ä»¥è¢«è‡ªä¿¡åœ°è§„划且风险å¯ä»¥é¢„æ–™æ—¶ï¼Œå®ƒåªæ˜¯å›°éš¾è€Œå·²ã€‚ -It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is not crisp definition of success, you will not succeed. +ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有清晰的æˆåŠŸçš„å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ -Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) \ No newline at end of file +Next [如何使用嵌入型语言](02-How to Utilize Embedded Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index dc1d8ac..0ea3730 100644 --- a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -1,11 +1,11 @@ -# How to Utilize Embedded Languages +# 如何使用嵌入型语言 -Embedding a programming language into a system has an almost erotic fascination to a programmer. It is one of the most creative acts that can be performed. It makes the system tremendously powerful. It allows you to exercise her most creative and Promethean skills. It makes the system into your friend. +把一ç§ç¼–程语言嵌入到一个系统对程åºå‘˜æ¥è®²æœ‰ç€å‡ ä¹Žä¸Žæ€§ä¸€æ ·çš„é­”åŠ›ã€‚è¿™æ˜¯ä¸€ç§æœ€å…·æœ‰åˆ›é€ åŠ›çš„å¯ä»¥è¡¨çŽ°çš„è¡Œä¸ºã€‚è¿™ä½¿å¾—ç³»ç»ŸæƒŠäººåœ°å¼ºå¤§ã€‚è¿™ä¹Ÿå…è®¸ä½ é”»ç‚¼å¤§å¤šæ•°åˆ›é€ æ€§å’Œæœ‰ç”Ÿå‘½åŠ›çš„èƒ½åŠ›ï¼ŒæŠŠç³»ç»Ÿå˜æˆä½ çš„æœ‹å‹ã€‚ -The best text editors in the world all have embedded languages. This can be used to the extent that the intended audience can master the language. Of course, use of the language can be made optional, as it is in text editors, so that initiates can use it and no one else has to. +世界上最好的文本编辑器都有嵌入性语言。这å¯ä»¥è¢«ç”¨äºŽé¢„计的观众å¯ä»¥æŽŒæ¡çš„语言的范围,语言的使用å¯ä»¥å˜ä¸ºå¯é€‰çš„,正如文本编辑器里那样,这样在一开始å¯ä»¥ä½¿ç”¨å®ƒï¼Œè€Œæ²¡æœ‰å…¶ä»–人必须使用它。 -I and many other programmers have fallen into the trap of creating special purpose embedded languages. I fell into it twice. There already exist many languages designed specifically to be embedded languages. You should think twice before creating a new one. +我和许多其他的程åºå‘˜æ›¾å å…¥åˆ›é€ ç‰¹æ®Šç›®çš„的嵌入型语言的困境里。我曾ç»åŽ†è¿‡ä¸¤æ¬¡ã€‚å·²ç»å­˜åœ¨äº†è®¸å¤šä¸ºåµŒå…¥åž‹è¯­è¨€è®¾è®¡çš„语言,在创造一个新的语言å‰ï¼Œä½ åº”该三æ€ã€‚ -The real question to ask oneself before embedding a language is: Does this work with or against the culture of my audience? If you intended audience is exclusively non-programmers, how will it help? If your intended audience is exclusively programmers, would they prefer an applications programmers interface (API)? And what language will it be? Programmers don't want to learn a new language that is narrowly used; but if it meshes with their culture they will not have to spend much time learning it. It is a joy to create a new language. But we should not let that blind us to the needs of the user. Unless you have some truly original needs and ideas, why not use an existing language so that you can leverage the familiarity users already have with it? +使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢APIå—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ä¸ªå·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ -Next [Choosing Languages](03-Choosing Languages.md) \ No newline at end of file +Next [选择语言](03-Choosing Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md index e759f73..2fe19d9 100644 --- a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,15 +1,15 @@ -# Choosing Languages +# 选择语言 -The solitary programmer that loves his work (a hacker) can choose the best language for the task. Most working programmers have very little control of the language they will use. Generally, this issue is dictated by pointy-haired bosses who are making a political decision, rather than a technological decision, and lack the courage to promote an unconventional tool even when they know, often with first-hand knowledge, that the less accepted tool is best. In other cases the very real benefit of unity among the team, and to some extent with a larger community, precludes choice on the part of the individual. Often managers are driven by the need to be able to hire programmers with experience in a given language. No doubt they are serving what they perceive to be the best interests of the project or company, and must be respected for that. However, I personally believe this is the most wasteful and erroneous common practice you are likely to encounter. +喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„boss说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜é©±åŠ¨ã€‚æ¯«æ— ç–‘é—®ä»–ä»¬æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ -But of course, things are never one-dimensional. Even if a core language is mandated and beyond your control, it is often the case that tools and other programs can and should be written in a different language. If a language is to be embedded (and you should always consider it!) the choice of language will depend a lot on the culture of the users. One should take advantage of this to serve your company or project by using the best language for the job, and in so doing make work more interesting. +但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣 -Programming languages should really be called notations in that learning one is not at all as difficult as learning a natural language. To beginners and to some outsiders 'learning a new language' seems a daunting task; but after you have three under your belt it's really just a question of becoming familiar with the available libraries. One tends to think of a large system that has components in three or four languages as a messy hodgepodge; but I argue that such a system is in many cases stronger than a one-language system in several ways: +一门编程语言,如果学习它比学习自然语言还è¦éš¾ï¼Œé‚£å®ƒçœŸçš„应该被称为符å·ã€‚对åˆå­¦è€…和一些门外汉æ¥è¯´â€œå­¦ä¹ ä¸€é—¨æ–°è¯­è¨€â€åƒæ˜¯ä¸€ä¸ªä»¤äººç”Ÿç•的任务,但在你掌æ¡äº†ä¸‰ç§è¯­è¨€åŽï¼Œè¿™åªæ˜¯ä¸€ä¸ªç†Ÿæ‚‰å¯ç”¨çš„库的简å•问题。一个程åºå‘˜è¶‹å‘于æ€è€ƒä¸€ä¸ªç”±ä¸‰å››é—¨è¯­è¨€ç»„æˆçš„一个大æ‚çƒ©ç³»ç»Ÿï¼Œä½†æˆ‘è®¤ä¸ºè¿™æ ·ä¸€ä¸ªç³»ç»Ÿåœ¨å¾ˆå¤šæƒ…å†µä¸‹è¦æ¯”å•一语言系统è¦å¼ºå¤§ï¼Œç†ç”±æœ‰ä»¥ä¸‹å‡ ä¸ªæ–¹é¢ï¼š -- There is necessarily loose coupling between the components that are written in different notations (though maybe not clean interfaces), -- You can evolve to a new language/platform easily by rewriting each component individually, -- One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. +- ä¸åŒç¬¦å·ç¼–写的部分间,必è¦çš„æ¾è€¦åˆå­˜åœ¨ï¼ˆè™½ç„¶å¯èƒ½æ²¡æœ‰å¹²å‡€çš„æŽ¥å£ï¼‰ +- 通过独立é‡å†™æ¯ä¸ªç»„件,你å¯ä»¥è½»æ¾åœ°å†™å‡ºä¸€ä¸ªæ–°çš„è¯­è¨€å¹³å° +- åªæœ‰ä¸€é—¨è¯­è¨€å¯èƒ½å¯¹ä¸€ä¸ªåºžå¤§çš„系统ä¸å¤ªé€‚åˆ - 你的多个模å—由多ç§è¯­è¨€ç»„æˆï¼Œèƒ½è®©ä½ ä¸ºä»»åŠ¡æ‰¾åˆ°æ­£ç¡®çš„å·¥å…·ã€‚ -Some of these effects may only be psychological; but psychology matters. In the end the costs of language tyranny outweigh any advantage that it provides. +这些效应å¯èƒ½æœ‰äº›åªæ˜¯å¿ƒç†ä¸Šçš„,但心ç†ä¸Šçš„东西也很é‡è¦ã€‚最åŽè¦è¯´çš„æ˜¯ï¼Œè¯­è¨€æš´æ”¿çš„代价超过了它能æä¾›çš„æ‰€æœ‰å¥½å¤„。 -Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) +Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) diff --git a/zh/README.md b/zh/README.md index 903288f..cfe9a67 100644 --- a/zh/README.md +++ b/zh/README.md @@ -1,103 +1,110 @@ -# How to be a Programmer: Community Version - +# How to be a Programmer 中文版 Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -## Introduction -To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. +翻译:[梦里风林](https://github.com/ahangchen/How-to-Be-A-Programmer-CN) + +原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) + +如果您希望改进这份中文翻译,请å‘这个[分支](https://github.com/ahangchen/HowToBeAProgrammer)æäº¤Pull request. + +æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 + +## 引言 +  åšä¸€ä¸ªå¥½çš„程åºå‘˜,困难而高尚。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程很é‡è¦ï¼Œè¿™éœ€è¦å¼ºå¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但在好的程åºå‘˜çœ‹æ¥ï¼Œç›¸æ¯”构建一个让客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„çš„è½¯ä»¶ç³»ç»Ÿï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶ï¼Œå¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 -This is very subjective and, therefore, this essay is doomed to be personal and somewhat opinionated. I confine myself to problems that a programmer is very likely to have to face in her work. Many of these problems and their solutions are so general to the human condition that I will probably seem preachy. I hope in spite of this that this essay will be useful. +  这å¯èƒ½å¾ˆä¸»è§‚的,所以,这篇文章注定ä¸é€‚用于所有人,并且有的内容有点武断。我尽é‡å†™ä¸€äº›ç¨‹åºå‘˜åœ¨ta的工作中,éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中如此普é,以至于我(说的)å¯èƒ½æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 -Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. +  我们在课堂上学习编程。 那些著作: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识),并é˜è¿°åšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者就是现在,你当然也应该读一读Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 -In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. +  在这篇文章里,bossè¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 除了一些语境外,我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚ -Welcome to the tribe. +  欢迎æ¥åˆ°è¿™ä¸ªç¾¤ä½“。 -## Contents +## 目录 -1. [Beginner](1-Beginner) - - Personal Skills - - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - - Team Skills - - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) -2. [Intermediate](2-Intermediate) - - Personal Skills - - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) - - Team Skills - - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) - - Judgment - - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) -3. [Advanced](3-Advanced) - - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) - - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) - - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) -4. [Glossary](GLOSSARY.md) -5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) -6. [Appendix B - History (As of January 2016)](6-History.md) -6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) +1. [入门](1-Beginner) + - 个人技能 + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [如何使用日志调试](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - 团队技能 + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [进阶](2-Intermediate) + - 个人技能 + - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - 团队技能 + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - 评判 + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [高级](3-Advanced) + - 技术评判 + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - 机智地妥å + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [如何让你的队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [è¯æ±‡è¡¨](4-Glossary.md) +5. [附录 A - 书ç±/网站](5-Bibliography.md) +6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) +6. [附录 C - 贡献 (至2016å¹´1月)](7-Contributions.md) Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. From 212f4497f5ad8f7d91fe910586e3843144fc4223 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Wed, 30 Mar 2016 09:18:46 +0100 Subject: [PATCH 057/149] Update 7-Contributions.md --- en/7-Contributions.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/en/7-Contributions.md b/en/7-Contributions.md index ef578cf..e2b5d42 100644 --- a/en/7-Contributions.md +++ b/en/7-Contributions.md @@ -16,9 +16,7 @@ There are a number of ways to contribute to "How to be a Programmer". Currently this guide has been translated from English into the following languages: -- [Chinese](https://github.com/ahangchen/HowToBeAProgrammer) by [ahangchen](https://github.com/ahangchen) - -In order to verify the quality of the translations, we ask that any changes to an existing translation be submitted as a pull request against that version of the repository (linked above), which will then be submitted to the [master repository](https://github.com/braydie/HowToBeAProgrammer). +- Chinese by [ahangchen](https://github.com/ahangchen) ## Contributors From d6fe96ca1e76e5d1ff80e84edb0840f8b635ceb5 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Wed, 30 Mar 2016 16:33:38 +0800 Subject: [PATCH 058/149] Patch Add gitbook address in the introduction, and fix some links. --- zh/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/zh/README.md b/zh/README.md index cfe9a67..366bb2d 100644 --- a/zh/README.md +++ b/zh/README.md @@ -5,16 +5,18 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -翻译:[梦里风林](https://github.com/ahangchen/How-to-Be-A-Programmer-CN) +翻译:[梦里风林](https://github.com/ahangchen) 原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) -如果您希望改进这份中文翻译,请å‘这个[分支](https://github.com/ahangchen/HowToBeAProgrammer)æäº¤Pull request. +如果您希望改进这份中文翻译,请å‘这个[分支](https://github.com/ahangchen/HowToBeAProgrammer)æäº¤Pull request。 + +[å¯ä»¥åœ¨gitbook在线阅读或导出PDF。](https://braydie.gitbooks.io/how-to-be-a-programmer/content/zh/index.html) æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 ## 引言 -  åšä¸€ä¸ªå¥½çš„程åºå‘˜,困难而高尚。将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程很é‡è¦ï¼Œè¿™éœ€è¦å¼ºå¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但在好的程åºå‘˜çœ‹æ¥ï¼Œç›¸æ¯”构建一个让客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„çš„è½¯ä»¶ç³»ç»Ÿï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶ï¼Œå¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 +  åšä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œå›°éš¾è€Œé«˜å°šã€‚将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程很é‡è¦ï¼Œè¿™éœ€è¦å¼ºå¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但在好的程åºå‘˜çœ‹æ¥ï¼Œç›¸æ¯”构建一个让客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„çš„è½¯ä»¶ç³»ç»Ÿï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶ï¼Œå¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。   这å¯èƒ½å¾ˆä¸»è§‚的,所以,这篇文章注定ä¸é€‚用于所有人,并且有的内容有点武断。我尽é‡å†™ä¸€äº›ç¨‹åºå‘˜åœ¨ta的工作中,éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中如此普é,以至于我(说的)å¯èƒ½æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 From 15b688035a573a78a7a1459a5bca175fdde51ec1 Mon Sep 17 00:00:00 2001 From: mmarica Date: Wed, 30 Mar 2016 21:23:20 +0300 Subject: [PATCH 059/149] Update 03-How to Tradeoff Time vs Space.md Fixed a typo, added a comma --- .../Personal-Skills/03-How to Tradeoff Time vs Space.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index f31cb83..33ed2a4 100644 --- a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -6,7 +6,7 @@ In designing or understanding an algorithm, the amount of time it takes to run i To me, computational complexity theory is beautiful and as profound as physics - and a little bit goes a long way! -Time (processor cycles) and space (memory) can be traded off against each other. Engineering is about compromise, and this is a fine example. It is not always systematic. In general, however, one can save space by encoding things more tightly, at the expense of more computation time when you have to decode them. You can save time by caching, that is, spending space to store a local copy of something, at the expense of having to maintain the consistency of the cache. You can sometimes save time by maintaining more information in a data structure. This usually cost a small amount of space but may complicate the algorithm. +Time (processor cycles) and space (memory) can be traded off against each other. Engineering is about compromise, and this is a fine example. It is not always systematic. In general, however, one can save space by encoding things more tightly, at the expense of more computation time when you have to decode them. You can save time by caching, that is, spending space to store a local copy of something, at the expense of having to maintain the consistency of the cache. You can sometimes save time by maintaining more information in a data structure. This usually costs a small amount of space, but may complicate the algorithm. Improving the space/time trade-off can often change one or the other dramatically. However, before you work on this you should ask yourself if what you are improving is really the thing that needs the most improvement. It's fun to work on an algorithm, but you can't let that blind you to the cold hard fact that improving something that is not a problem will not make any noticeable difference and will create a test burden. From 054e0023a6724445d582a2ca43eebadc914adfd8 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Wed, 30 Mar 2016 20:49:16 +0100 Subject: [PATCH 060/149] Updated Contributions to include new guidance on translations ( --- en/7-Contributions.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/en/7-Contributions.md b/en/7-Contributions.md index e2b5d42..1918099 100644 --- a/en/7-Contributions.md +++ b/en/7-Contributions.md @@ -18,6 +18,8 @@ Currently this guide has been translated from English into the following languag - Chinese by [ahangchen](https://github.com/ahangchen) +**If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** + ## Contributors Github holds a list of all [contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) to this project. From 57580d0861df5bc1e799e1b8b5a88ccacee4e904 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Thu, 31 Mar 2016 09:31:00 +0800 Subject: [PATCH 061/149] translate for new commit --- zh/7-Contributions.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/zh/7-Contributions.md b/zh/7-Contributions.md index c9669c6..be643a9 100644 --- a/zh/7-Contributions.md +++ b/zh/7-Contributions.md @@ -11,6 +11,16 @@ - 识别排版错误或其他章节中的问题 - 为章节æä¾›é¢å¤–的资æºé“¾æŽ¥ - 一般的用于æå‡å·¥ç¨‹çš„建议 +- 为这份指导æä¾›ç¿»è¯‘ + +## 翻译 + +当å‰ï¼Œè¿™ä»½æŒ‡å¯¼å·²ç»ä»Žè‹±æ–‡ç¿»è¯‘为以下语言: + +- 中文 by [ahangchen](https://github.com/ahangchen) + +**如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和review对翻译版本的修改。 + ## 贡献者 From 5e5175aeeebb3ca886d213b812ec40bbbde608f0 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Thu, 31 Mar 2016 09:31:49 +0800 Subject: [PATCH 062/149] fix markdown format --- zh/7-Contributions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/7-Contributions.md b/zh/7-Contributions.md index be643a9..1f4403d 100644 --- a/zh/7-Contributions.md +++ b/zh/7-Contributions.md @@ -19,7 +19,7 @@ - 中文 by [ahangchen](https://github.com/ahangchen) -**如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和review对翻译版本的修改。 + **如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和review对翻译版本的修改。** ## 贡献者 From 6f777f9624599fe0bcfba0d40027ba4f4eba2347 Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:28:05 -0400 Subject: [PATCH 063/149] Grammar fix --- en/1-Beginner/Personal-Skills/09-How to Manage Memory.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md index a20adf4..5f2de80 100644 --- a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -10,6 +10,6 @@ The creation of new objects is moderately expensive on any system. Memory alloca An important case occurs when you can define an upper bound on the number of objects you will need at one time. If these objects all take up the same amount of memory, you may be able to allocate a single block of memory, or a buffer, to hold them all. The objects you need can be allocated and released inside this buffer in a set rotation pattern, so it is sometimes called a ring buffer. This is usually faster than heap allocation. -Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form or garbage collection, such as reference counting, to do this for them. +Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form of garbage collection, such as reference counting, to do this for them. -Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) \ No newline at end of file +Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) From 8d92b52d2d2cf42cb4eb507401600b28f6a8463b Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:30:42 -0400 Subject: [PATCH 064/149] Grammar fix --- .../Team-Skills/10-How to Recognize When to Go Home.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index a6ae9b4..1a9bae9 100644 --- a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,6 +1,6 @@ # How to Recognize When to Go Home -Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. +Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is a serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. Beyond 60 hours a week is an extraordinary effort for me, which I can apply for short periods of time (about one week), and that is sometimes expected of me. I don't know if it is fair to expect 60 hours of work from a person; I don't even know if 40 is fair. I am sure, however, that it is stupid to work so much that you are getting little out of that extra hour you work. For me personally, that's any more than 60 hours a week. I personally think a programmer should exercise noblesse oblige and shoulder a heavy burden. However, it is not a programmer's duty to be a patsy. The sad fact is programmers *are* often asked to be patsies in order to put on a show for somebody, for example a manager trying to impress an executive. Programmers often succumb to this because they are eager to please and not very good at saying no. There are four defences against this: @@ -13,4 +13,4 @@ Most programmers are good programmers, and good programmers want to get a lot do Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. -Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) \ No newline at end of file +Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) From 74c54f205862898de3561054dae51e2427b19477 Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:31:56 -0400 Subject: [PATCH 065/149] Grammar fix --- .../Team-Skills/11-How to Deal with Difficult People.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index d9678e5..74296e7 100644 --- a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -4,7 +4,7 @@ You will probably have to deal with difficult people. You may even be a difficul This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often inured to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. -Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. +Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen to and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. Don't let a bully force you to do something you don't agree with. If you are the leader, do what you think is best. Don't make a decision for any personal reasons, and be prepared to explain the reasons for your decision. If you are a team-mate with a difficult person, don't let the leader's decision have any personal impact. If it doesn't go your way, do it the other way whole-heartedly. @@ -12,4 +12,4 @@ Difficult people do change and improve. I've seen it with my own eyes, but it is One of the challenges that every programmer but especially leaders face is keeping the difficult person fully engaged. They are more prone to duck work and resist passively than others. -Next [Intermediate skills](../../2-Intermediate) \ No newline at end of file +Next [Intermediate skills](../../2-Intermediate) From 79100a22e54497e6d80819d1bb0277cc4d21387e Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:32:35 -0400 Subject: [PATCH 066/149] Grammar fix --- en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index e441581..37570bf 100644 --- a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -10,6 +10,6 @@ Obviously, there are entire industries organized around motivational techniques - Look for opportunities to apply new techniques, languages, and technologies. - Try to either learn or teach something, however small, in each project. -Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and is also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. +Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and it also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. -Next [How to be Widely Trusted](02-How to be Widely Trusted.md) \ No newline at end of file +Next [How to be Widely Trusted](02-How to be Widely Trusted.md) From 72a46acb10c8d8cfc8b34a059ac7428669909991 Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:34:56 -0400 Subject: [PATCH 067/149] Grammar fix --- en/2-Intermediate/Personal-Skills/11-How to analyze data.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md index b6ede20..005db91 100644 --- a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -6,6 +6,6 @@ Not so. No matter at which stage you start looking at it, data is the main concern of a well designed application. If you look closely at how a business analyst gets the requirements out of the customer's requests, you'll realize that data plays a fundamental role. The analyst creates so called Data Flow Diagrams, where all data sources are identified and the flow of information is shaped. Having clearly defined which data should be part of the system, the designer will shape up the data sources, in terms of database relations, data exchange protocols, and file formats, so that the task is ready to be passed down to the programmer. However, the process is not over yet, because you (the programmer) even after this thorough process of data refinement, are required to analyze data to perform the task in the best possible way. The bottom line of your task is the core message of Niklaus Wirth, the father of several languages. "Algorithms + Data Structures = Programs." There is never an algorithm standing alone, doing something to itself. Every algorithm is supposed to do something to at least one piece of data. -Therefore, since algorithms don't spin their wheels in a vacuum, you need to analyze both the data that somebody else has identified for you and the data that is necessary to write down your code. A trivial example will make the matter clearer. You are implementing a search routine for a library. According to your specifications, the user can select books by a combination of genre, author, title, publisher, printing year, and number of pages. The ultimate goal of your routine is to produce a legal SQL statement to search the back-end database. Based on these requirements, you have several choices: check each control in turn, using a "switch" statement, or several "if" ones; make an array of data controls, checking each element to see if it is set; create (or use) an abstract control object from which inherit all your specific controls, and connect them to an event-driven engine. If your requirements include also tuning up the query performance, by making sure that the items are checked in a specific order, you may consider using a tree of components to build your SQL statement. As you can see, the choice of the algorithm depends on the data you decide to use, or to create. Such decisions can make all the difference between an efficient algorithm and a disastrous one. However, efficiency is not the only concern. You may use a dozen named variables in your code and make it as efficient as it can ever be. But such a piece of code might not be easily maintainable. Perhaps choosing an appropriate container for your variables could keep the same speed and in addition allow your colleagues to understand the code better when they look at it next year. Furthermore, choosing a well defined data structure may allow them to extend the functionality of your code without rewriting it. In the long run, your choices of data determines how long your code will survive after you are finished with it. Let me give you another example, just some more food for thought. Let's suppose that your task is to find all the words in a dictionary with more than three anagrams, where an anagram must be another word in the same dictionary. If you think of it as a computational task, you will end up with an endless effort, trying to work out all the combinations of each word and then comparing it to the other words in the list. However, if you analyze the data at hand, you'll realize that each word may be represented by a record containing the word itself and a sorted array of its letters as ID. Armed with such knowledge, finding anagrams means just sorting the list on the additional field and picking up the ones that share the same ID. The brute force algorithm may take several days to run, while the smart one is just a matter of a few seconds. Remember this example the next time you are facing an intractable problem. +Therefore, since algorithms don't spin their wheels in a vacuum, you need to analyze both the data that somebody else has identified for you and the data that is necessary to write down your code. A trivial example will make the matter clearer. You are implementing a search routine for a library. According to your specifications, the user can select books by a combination of genre, author, title, publisher, printing year, and number of pages. The ultimate goal of your routine is to produce a legal SQL statement to search the back-end database. Based on these requirements, you have several choices: check each control in turn, using a "switch" statement, or several "if" ones; make an array of data controls, checking each element to see if it is set; create (or use) an abstract control object from which to inherit all your specific controls, and connect them to an event-driven engine. If your requirements include also tuning up the query performance, by making sure that the items are checked in a specific order, you may consider using a tree of components to build your SQL statement. As you can see, the choice of the algorithm depends on the data you decide to use, or to create. Such decisions can make all the difference between an efficient algorithm and a disastrous one. However, efficiency is not the only concern. You may use a dozen named variables in your code and make it as efficient as it can ever be. But such a piece of code might not be easily maintainable. Perhaps choosing an appropriate container for your variables could keep the same speed and in addition allow your colleagues to understand the code better when they look at it next year. Furthermore, choosing a well defined data structure may allow them to extend the functionality of your code without rewriting it. In the long run, your choices of data determines how long your code will survive after you are finished with it. Let me give you another example, just some more food for thought. Let's suppose that your task is to find all the words in a dictionary with more than three anagrams, where an anagram must be another word in the same dictionary. If you think of it as a computational task, you will end up with an endless effort, trying to work out all the combinations of each word and then comparing it to the other words in the list. However, if you analyze the data at hand, you'll realize that each word may be represented by a record containing the word itself and a sorted array of its letters as ID. Armed with such knowledge, finding anagrams means just sorting the list on the additional field and picking up the ones that share the same ID. The brute force algorithm may take several days to run, while the smart one is just a matter of a few seconds. Remember this example the next time you are facing an intractable problem. -Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How to Manage Development Time.md) \ No newline at end of file +Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How to Manage Development Time.md) From 633b899cb7a8aa3f0bb90f69ac4208e1bbc8b730 Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:36:35 -0400 Subject: [PATCH 068/149] Grammar fix --- .../01-How to Tradeoff Quality Against Development Time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index 528e996..b1fa293 100644 --- a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -1,6 +1,6 @@ # How to Tradeoff Quality Against Development Time -Software development is always a compromise between what the project does and getting the project done. But you may be asked to tradeoff quality to speed the deployment of a project in a way that offends your engineering sensibilities or business sensibilities. For example, you may be asked to do something that is a poor software engineering practice and that will lead to a lot of maintenance problems. +Software development is always a compromise between what the project does and getting the project done. But you may be asked to tradeoff quality to speed the deployment of a project in a way that offends your engineering or business sensibilities. For example, you may be asked to do something that is a poor software engineering practice and that will lead to a lot of maintenance problems. If this happens your first responsibility is to inform your team and to clearly explain the cost of the decrease in quality. After all, your understanding of it should be much better than your boss's understanding. Make it clear what is being lost and what is being gained, and at what cost the lost ground will be regained in the next cycle. In this, the visibility provided by a good project plan should be helpful. If the quality tradeoff affects the quality assurance effort, point that out (both to your boss and quality assurance people). If the quality tradeoff will lead to more bugs being reported after the quality assurance period, point that out. From 0eb09d4d36073d8dad39c5d7ad4fcde2c2a6755d Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:37:38 -0400 Subject: [PATCH 069/149] Grammar fix --- en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index 3503adb..4836c07 100644 --- a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -8,8 +8,8 @@ You should, at a minimum, give the candidate the equivalent of an oral examinati In doing this, you should also evaluate their ability to learn, which is far more important than what they know. You should also watch for the whiff of brimstone that is given off by difficult people. You may be able to recognize it by comparing notes after the interview, but in the heat of the interview it is hard to recognize. How well people communicate and work with people is more important than being up on the latest programming language. -A reader has had good luck using a ‘take-home’ test for interviewees. This has the advantage that can uncover the interviewee that can present themselves well but can't really code - and there are many such people. I personally have not tried this technique, but it sounds sensible. +A reader has had good luck using a ‘take-home’ test for interviewees. This has the advantage that it can uncover the interviewee that can present themselves well but can't really code - and there are many such people. I personally have not tried this technique, but it sounds sensible. Finally, interviewing is also a process of selling. You should be selling your company or project to the candidate. However, you are talking to a programmer, so don't try to colour the truth. Start off with the bad stuff, then finish strong with the good stuff. -Next [How to Know When to Apply Fancy Computer Science](07-How to Know When to Apply Fancy Computer Science.md) \ No newline at end of file +Next [How to Know When to Apply Fancy Computer Science](07-How to Know When to Apply Fancy Computer Science.md) From 571bd9801ee5181a2d06a82470bf35791681cdde Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:38:33 -0400 Subject: [PATCH 070/149] Grammar fix --- en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index 029c789..7a3d518 100644 --- a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -8,7 +8,7 @@ Non-engineers may be too eager to please and they may be intimidated by you. Jus Non-programmers can understand technical things but they do not have the thing that is so hard even for us - technical judgement. They do understand how technology works, but they cannot understand why a certain approach would take three months and another one three days. (After all, programmers are anecdotally horrible at this kind of estimation as well.) This represents a great opportunity to synergize with them. -When talking to your team you will, without thinking, use a sort of shorthand, an abbreviated language that is effective because you will have much shared experience about technology in general and your product in particular. It takes some effort not to use this shorthand with those that don't have that shared experience, especially when members of your own team are present. This vocabulary create a wall between you and those that do not share it, and, even worse, wastes their time. +When talking to your team you will, without thinking, use a sort of shorthand, an abbreviated language that is effective because you will have much shared experience about technology in general and your product in particular. It takes some effort not to use this shorthand with those that don't have that shared experience, especially when members of your own team are present. This vocabulary creates a wall between you and those that do not share it, and, even worse, wastes their time. With your team, the basic assumptions and goals do not need to be restated often, and most conversation focuses on the details. With outsiders, it must be the other way around. They may not understand things you take for granted. Since you take them for granted and don't repeat them, you can leave a conversation with an outsider thinking that you understand each other when really there is a large misunderstanding. You should assume that you will miscommunicate and watch carefully to find this miscommunication. Try to get them to summarize or paraphrase what you are saying to make sure they understand. If you have the opportunity to meet with them often, spend a little bit of time asking if you are communicating effectively, and how you can do it better. If there is a problem in communication, seek to alter your own practices before becoming frustrated with theirs. From f0fc657da7eac116ca4574e4a2af96913958ed63 Mon Sep 17 00:00:00 2001 From: Greg Date: Wed, 30 Mar 2016 22:40:58 -0400 Subject: [PATCH 071/149] Grammar fix --- en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index 4e55ee2..d189a0d 100644 --- a/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -6,6 +6,6 @@ The programmer is a social animal whose survival depends on communication with h The programmer brings order out of chaos. One interesting way to do this is to initiate a proposal of some kind outside the team. This can be done in a *strawman* or *white-paper* format or just verbally. This leadership has the tremendous advantage of setting the terms of the debate. It also exposes you to criticism, and worse, rejection and neglect. The advanced programmer must be prepared to accept this, because she has a unique power and therefore a unique responsibility. Entrepreneurs who are not programmers need programmers to provide leadership in some ways. Programmers are the part of the bridge between ideas and reality that rests on reality. -I haven't mastered communicating well, but what I'm currently trying is what I think of a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. +I haven't mastered communicating well, but what I'm currently trying is what I think of as a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) From b3978b489f0596c6f8b44c65ca3dc1894c232d5a Mon Sep 17 00:00:00 2001 From: Calvin Evans Date: Fri, 1 Apr 2016 12:00:50 +0100 Subject: [PATCH 072/149] Adds link to physical version of book --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9cbc2d7..2898dca 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens [Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) +[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.co.uk/b/6992138-how-to-be-a-programmer) + ## Introduction To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. From b1f9f2e172621dcdb4125a2429756a22f98e95d8 Mon Sep 17 00:00:00 2001 From: Calvin Evans Date: Fri, 1 Apr 2016 12:12:20 +0100 Subject: [PATCH 073/149] Change link to physical book to US version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2898dca..b8e2d50 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens [Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) -[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.co.uk/b/6992138-how-to-be-a-programmer) +[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6992138-how-to-be-a-programmer) ## Introduction To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. From 1aadbfe37199d86e1f4791d647daa3422b89b7a5 Mon Sep 17 00:00:00 2001 From: Roy Bahat Date: Fri, 1 Apr 2016 23:49:31 -0700 Subject: [PATCH 074/149] Update 10-How to Deal with Intermittent Bugs.md --- .../Personal-Skills/10-How to Deal with Intermittent Bugs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 4c3ff2b..15b4775 100644 --- a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -10,8 +10,8 @@ The stupidest intermittent bug I ever created was in a multi-threaded implementa At work we recently had an intermittent bug that took us several weeks to find. We have multi-threaded application servers in Javaâ„¢ behind Apacheâ„¢ web servers. To maintain fast page turns, we do all I/O in small set of four separate threads that are different than the page-turning threads. Every once in a while these would apparently get ‘stuck’ and cease doing anything useful, so far as our logging allowed us to tell, for hours. Since we had four threads, this was not in itself a giant problem - unless all four got stuck. Then the queues emptied by these threads would quickly fill up all available memory and crash our server. It took us about a week to figure this much out, and we still didn't know what caused it, when it would happen, or even what the threads where doing when they got ‘stuck’. -This illustrates some risk associated with third-party software. We were using a licensed piece of code that removed HTML tags from text. Due to its place of origin we affectionately referred to this as ‘the French stripper‘. Although we had the source code (thank goodness!) we had not studied it carefully until by turning up the logging on our servers we finally realized that the email threads were getting stuck in the French stripper. +This illustrates some risk associated with third-party software. We were using a licensed piece of code that removed HTML tags from text. Although we had the source code (thank goodness!) we had not studied it carefully until by turning up the logging on our servers we finally realized that the email threads were getting stuck in this problematic licensed code. -The stripper performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. +The program performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. Next [How to Learn Design Skills](11-How to Learn Design Skills.md) From df2c26be9da8b148aae1072869e43f080782741b Mon Sep 17 00:00:00 2001 From: Calvin Evans Date: Sat, 2 Apr 2016 10:53:55 +0100 Subject: [PATCH 075/149] Add edition, date to physical book link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8e2d50..8667fd2 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens [Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) -[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6992138-how-to-be-a-programmer) +[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6992138-how-to-be-a-programmer) - Edition 1, published 04/01/17 ## Introduction To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. From ef8780230d48e8cdf86f29b91cb6bbce7e1d1991 Mon Sep 17 00:00:00 2001 From: aidewoode Date: Mon, 4 Apr 2016 19:35:15 +0800 Subject: [PATCH 076/149] improve readability in zh for chapter two --- ...w to Tradeoff Quality Against Development Time.md | 6 +++--- .../02-How to Manage Software System Dependence.md | 2 +- .../03-How to Decide if Software is Too Immature.md | 2 +- .../04-How to Make a Buy vs Build Decision.md | 4 ++-- .../Judgment/05-How to Grow Professionally.md | 6 +++--- .../Judgment/06-How to Evaluate Interviewees.md | 12 ++++++------ ...w to Know When to Apply Fancy Computer Science.md | 4 ++-- .../Judgment/08-How to Talk to Non-Engineers.md | 8 ++++---- .../Personal-Skills/01-How to Stay Motivated.md | 4 ++-- .../Personal-Skills/02-How to be Widely Trusted.md | 2 +- .../03-How to Tradeoff Time vs Space.md | 10 +++++----- .../Personal-Skills/04-How to Stress Test.md | 8 ++++---- .../05-How to Balance Brevity and Abstraction.md | 6 +++--- .../Personal-Skills/06-How to Learn New Skills.md | 8 ++++---- .../Personal-Skills/07-Learn to Type.md | 2 +- .../08-How to Do Integration Testing.md | 2 +- .../Personal-Skills/09-Communication Languages.md | 8 ++++---- zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md | 4 ++-- .../Personal-Skills/11-How to analyze data.md | 8 ++++---- zh/2-Intermediate/README.md | 2 +- .../Team-Skills/01-How to Manage Development Time.md | 6 +++--- .../02-How to Manage Third-Party Software Risks.md | 4 ++-- .../Team-Skills/03-How to Manage Consultants.md | 2 +- .../04-How to Communicate the Right Amount.md | 2 +- ...-How to Disagree Honestly and Get Away with It.md | 2 +- zh/README.md | 4 ++-- 26 files changed, 64 insertions(+), 64 deletions(-) diff --git a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index 71930bb..a010444 100644 --- a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -1,12 +1,12 @@ # 如何在开å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´æƒè¡¡ -è½¯ä»¶å¼€å‘æ€»æ˜¯åœ¨å·¥ç¨‹è¯¥åšä»€ä¹ˆä¸Žå®Œæˆå·¥ç¨‹é—´å¦¥å。但你å¯èƒ½è¢«è¦æ±‚以牺牲你的工程适用性或商业适用性的方å¼ï¼ŒåŽ»äº¤æ¢å·¥ç¨‹çš„å¼€å‘速度。例如,你å¯èƒ½è¢«è¦æ±‚åšä¸€äº›ç³Ÿç³•çš„å¯èƒ½å¯¼è‡´å¤§é‡ç»´æŠ¤é—®é¢˜çš„软件工程实践。 +è½¯ä»¶å¼€å‘æ€»æ˜¯åœ¨å·¥ç¨‹è¯¥åšä»€ä¹ˆä¸Žå®Œæˆå·¥ç¨‹é—´å¦¥å。但你å¯èƒ½è¢«è¦æ±‚以牺牲你的工程适用性或商业适用性的方å¼ï¼ŒåŽ»äº¤æ¢å·¥ç¨‹çš„å¼€å‘速度。例如,你å¯èƒ½è¢«è¦æ±‚åšä¸€äº›ç³Ÿç³•的软件工程实践,但这将会导致大é‡ç»´æŠ¤é—®é¢˜ã€‚ -如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„bossçš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”该会很有用。如果质é‡äº¤æ¢å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„boss和质é‡ä¿è¯éƒ¨åˆ†)指出这个问题。如果质é‡äº¤æ¢ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„bug,指出æ¥ã€‚ +如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„ boss çš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”è¯¥ä¼šå¾ˆæœ‰ç”¨ã€‚å¦‚æžœè´¨é‡æƒè¡¡å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„ boss 和质é‡ä¿è¯äººå‘˜)æŒ‡å‡ºè¿™ä¸ªé—®é¢˜ã€‚å¦‚æžœè´¨é‡æƒè¡¡ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„ bug,指出æ¥ã€‚ 如果她ä»ç„¶åšæŒï¼Œä½ åº”该把劣质部分隔离到特殊的你å¯ä»¥åœ¨ä¸‹ä¸€ä¸ªå¼€å‘周期计划é‡å†™æˆ–优化的组件中。å‘你的团队解释这个问题,这样他们å¯ä»¥ä¸ºæ­¤åšäº›è®¡åˆ’。 -å¿è€…程åºå‘˜åœ¨Slashdot写下了这样的格言: +å¿è€…程åºå‘˜åœ¨ Slashdot 写下了这样的格言: > è®°ä½ï¼Œä¸€ä¸ªå¥½çš„设计会被糟糕的代ç å®žçŽ°å¼¹å›žã€‚å¦‚æžœå¥½çš„æŽ¥å£å’ŒæŠ½è±¡åœ¨ä»£ç ä¸­åˆ°å¤„存在,最åŽçš„é‡å†™ä¼šæ›´åŠ ç—›è‹¦ã€‚å¦‚æžœå†™éš¾ä»¥ä¿®å¤çš„æ¸…晰代ç å¾ˆå›°éš¾ï¼Œè€ƒè™‘是什么与核心设计冲çªçš„东西导致了这个问题。 diff --git a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index 32c01f9..68833aa 100644 --- a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -2,7 +2,7 @@ 现代软件系统趋å‘于ä¾èµ–大é‡çš„éžç›´æŽ¥å¯æŽ§çš„组件。通过ååŒä¸Žé‡ç”¨ï¼Œè¿™å¢žåŠ äº†ç”Ÿäº§æ•ˆçŽ‡ã€‚ç„¶è€Œï¼Œæ¯ä¸ªç»„件会带æ¥ä¸€äº›é—®é¢˜ï¼š -- 你该如何修å¤ç»„件中的bug? +- 你该如何修å¤ç»„件中的 bug? - 组件é™åˆ¶ä½ ä½¿ç”¨ç‰¹æ®Šçš„硬件或软件系统了å—? - å¦‚æžœç»„ä»¶å®Œå…¨åæŽ‰äº†ï¼Œä½ è¯¥åšä»€ä¹ˆï¼Ÿ diff --git a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index 2afa1c5..94b72a1 100644 --- a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -1,6 +1,6 @@ # 如何判断软件是å¦å¤ªä¸æˆç†Ÿäº† -ä½¿ç”¨å…¶ä»–äººå†™çš„è½¯ä»¶æ˜¯ä¸€ç§æœ€æœ‰æ•ˆçŽ‡çš„æž„å»ºä¸€ä¸ªåšå®žçš„系统的方法之一。这本ä¸è¯¥è¢«æŽ’æ–¥ï¼Œä½†ä¸Žæ­¤ç›¸å…³çš„å±æœºå¿…须被检验。最大的一ç§é£Žé™©åœ¨äºŽï¼Œå®ƒé€šè¿‡ä½¿ç”¨å˜æˆä¸€ä¸ªå¯ç”¨äº§å“æˆç†Ÿå‰çš„,bug周期和与软件相关的故障时期。在你考虑将软件系统集æˆå‰ï¼Œä¸è®ºæ˜¯ä½ è‡ªå·±å†™çš„还是第三方的,考虑它是å¦è¶³å¤Ÿæˆç†Ÿä»¥ä½¿ç”¨æ˜¯éžå¸¸é‡è¦çš„。这里有å个你应该自问的相关问题: +ä½¿ç”¨å…¶ä»–äººå†™çš„è½¯ä»¶æ˜¯ä¸€ç§æœ€æœ‰æ•ˆçŽ‡çš„æž„å»ºä¸€ä¸ªåšå®žçš„系统的方法之一。这本ä¸è¯¥è¢«æŽ’斥,但与此相关的风险必须被检验。最大的一ç§é£Žé™©åœ¨äºŽï¼Œå®ƒé€šè¿‡ä½¿ç”¨å˜æˆä¸€ä¸ªå¯ç”¨äº§å“æˆç†Ÿå‰çš„ bug 周期和与软件相关的故障时期。在你考虑将软件系统集æˆå‰ï¼Œä¸è®ºæ˜¯ä½ è‡ªå·±å†™çš„还是第三方的,考虑它是å¦è¶³å¤Ÿæˆç†Ÿä»¥ä½¿ç”¨æ˜¯éžå¸¸é‡è¦çš„。这里有å个你应该自问的相关问题: 1. 它是蒸汽å—ï¼Ÿï¼ˆé‚£è‚¯å®šæ˜¯ä¸æˆç†Ÿçš„) 2. 有å¯ç”¨çš„æ‡‚这个软件的人å—? diff --git a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index f70d301..eee0245 100644 --- a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -1,6 +1,6 @@ # 如何åšè´­ä¹°è¿˜æ˜¯æž„建的决定 -一个å°è¯•用软件完æˆä¸€äº›ä»»åŠ¡çš„ä¼ä¸šçº§å…¬å¸æˆ–å·¥ç¨‹å¿…é¡»ä¸æ–­åšæ‰€è°“çš„*buy vs. build*的决定。这个问题的ä¸å¹¸åœ¨ä¸¤ä¸ªæ–¹é¢ï¼šä¼¼ä¹Žå¿½è§†äº†ä¸å¿…*被购买*的开æºè½¯ä»¶å’Œè‡ªç”±è½¯ä»¶ã€‚æ›´é‡è¦çš„æ˜¯ï¼Œè¿™å¯èƒ½åº”该被称作*获å–ä¸Žé›†æˆ vs. 购买与集æˆ*决定,因为集æˆçš„代价需è¦è¢«è€ƒè™‘。这需è¦å•†ä¸šä¸Šï¼Œç®¡ç†ä¸Šï¼Œå·¥ç¨‹ç†è§£ä¸Šçš„大é‡ç»“åˆã€‚ +一个å°è¯•用软件完æˆä¸€äº›ä»»åŠ¡çš„ä¼ä¸šçº§å…¬å¸æˆ–å·¥ç¨‹å¿…é¡»ä¸æ–­åšæ‰€è°“çš„ *buy vs. build* 的决定。这个问题的ä¸å¹¸åœ¨ä¸¤ä¸ªæ–¹é¢ï¼šä¼¼ä¹Žå¿½è§†äº†ä¸å¿…*被购买*的开æºè½¯ä»¶å’Œè‡ªç”±è½¯ä»¶ã€‚æ›´é‡è¦çš„æ˜¯ï¼Œè¿™å¯èƒ½åº”该被称作*获å–ä¸Žé›†æˆ vs. 购买与集æˆ*决定,因为集æˆçš„代价需è¦è¢«è€ƒè™‘。这需è¦å•†ä¸šä¸Šï¼Œç®¡ç†ä¸Šï¼Œå·¥ç¨‹ç†è§£ä¸Šçš„大é‡ç»“åˆã€‚ - 你的需è¦ä¸Žå®ƒçš„设计æ„图有多接近? - å¯¹äºŽä½ è´­ä¹°çš„è½¯ä»¶ï¼Œä½ æƒ³è¦æ€Žæ ·çš„å¯ç§»æ¤æ€§ï¼Ÿ @@ -9,7 +9,7 @@ - 购买会增加还是å‡å°‘长期维护代价? - æž„å»ºä¼šæŠŠä½ æ”¾åœ¨ä¸€ä¸ªä½ ä¸æƒ³è¦çš„商业ä½ç½®å—? -三æ€ï¼Œå¦‚果你想è¦è´­ä¹°ä¸€äº›å¤§åˆ°è¶³å¤Ÿæˆä¸ºå¦ä¸€æ•´ä¸ªå•†å“的基础的东西。这样的想法通常是ä¹è§‚积æžçš„将会对你的团队åšå‡ºè®¸å¤šè´¡çŒ®çš„人æå‡ºæ¥çš„。如果他们的想法很引人注目,你å¯èƒ½ä¼šæƒ³è¦æ”¹å˜ä½ çš„商业计划,但ä¸è¦åœ¨æ²¡æœ‰å‘¨å…¨è€ƒè™‘å‰å°±æŠ•资一个比你自己的商业还大的解决方案。 +在你构建一些大到足够æˆä¸ºå¦ä¸€æ•´ä¸ªå•†å“的基础的东西å‰è¯·ä¸‰æ€ã€‚这样的想法通常是ä¹è§‚积æžçš„将会对你的团队åšå‡ºè®¸å¤šè´¡çŒ®çš„人æå‡ºæ¥çš„。如果他们的想法很引人注目,你å¯èƒ½ä¼šæƒ³è¦æ”¹å˜ä½ çš„商业计划,但ä¸è¦åœ¨æ²¡æœ‰å‘¨å…¨è€ƒè™‘å‰å°±æŠ•资一个比你自己的商业还大的解决方案。 在考虑了这些问题åŽï¼Œä½ å¯èƒ½åº”å½“å‡†å¤‡ä¸¤ä¸ªå·¥ç¨‹è®¡åˆ’è‰æ¡ˆï¼Œä¸€ä¸ªç»™è´­ä¹°ï¼Œä¸€ä¸ªç»™æž„建。这会强迫你考虑集æˆä»£ä»·ã€‚ä½ ä¹Ÿåº”å½“è€ƒè™‘ä¸¤ç§æŽªæ–½çš„é•¿æœŸç»´æŠ¤ä»£ä»·ã€‚ä¸ºäº†è¯„ä¼°é›†æˆä»£ä»·ï¼Œä½ å¿…须在购买软件å‰å¯¹å®ƒåšä¸€ä¸ªå½»åº•的评估。如果你ä¸èƒ½è¯„估好它,你å¯ä»¥å‡è®¾è´­ä¹°å®ƒä¼šæœ‰ä¸€ä¸ªä¸å¯é¢„料的风险,你应该以此决定是å¦è´­ä¹°ç‰¹å®šçš„产å“ã€‚å¦‚æžœè€ƒè™‘åŽæœ‰å‡ ä¸ªè´­ä¹°å†³å®šï¼Œéœ€è¦èŠ±ä¸€äº›ç²¾åŠ›åŽ»è¯„ä¼°æ¯ä¸ªå†³å®šã€‚ diff --git a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md index ca827e5..955f8cb 100644 --- a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -1,11 +1,11 @@ # 如何专业地æˆé•¿ -承担超过你的æƒå¨çš„è´£ä»»ã€‚æ‰®æ¼”ä½ æƒ³è¦æ‰®æ¼”的角色。对人们对更大组织的æˆåŠŸçš„è´¡çŒ®ä»¥åŠå¯¹ä½ ä¸ªäººçš„帮助表示感谢与欣èµã€‚ +承担超过你的æƒåŠ›çš„è´£ä»»ã€‚æ‰®æ¼”ä½ æƒ³è¦æ‰®æ¼”的角色。对那些对更大组织的æˆåŠŸåšå‡ºè¿‡è´¡çŒ®ä»¥åŠå¯¹ä½ ä¸ªäººæä¾›è¿‡å¸®åŠ©çš„äººè¡¨ç¤ºæ„Ÿè°¢ä¸Žæ¬£èµã€‚ 如果你想æˆä¸ºå›¢é˜Ÿçš„领导,去激励与团结。如果你想æˆä¸ºä¸€ä¸ªç»ç†ï¼Œæ‹…起规划的责任。你通常å¯ä»¥åœ¨å’Œé¢†å¯¼æˆ–ç»ç†åœ¨ä¸€èµ·æ—¶ï¼Œèˆ’æœåœ°å®Œæˆè¿™äº›äº‹æƒ…,因为这使得他们å¯ä»¥æŠ½ç©ºåŽ»æ‰¿æ‹…æ›´å¤§çš„è´£ä»»ã€‚å¦‚æžœè¿™å¤ªå¤šäº†ä»¥è‡³äºŽä½ ä¸èƒ½å°è¯•,一次åªåšä¸€ç‚¹ç‚¹ã€‚ -评估你自己。如果你想è¦å˜æˆä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¯¢é—®ä¸€äº›ä½ æ¬£èµçš„人你怎样æ‰èƒ½å˜æˆä»–们那样。你也å¯ä»¥é—®ä½ çš„boss,他å¯ä»¥å‘Šè¯‰ä½ çš„东西会少一些,但对你的事业会有更大的影å“。 +评估你自己。如果你想è¦å˜æˆä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¯¢é—®ä¸€äº›ä½ æ¬£èµçš„人你怎样æ‰èƒ½å˜æˆä»–们那样。你也å¯ä»¥é—®ä½ çš„ boss,他å¯ä»¥å‘Šè¯‰ä½ çš„东西会少一些,但对你的事业会有更大的影å“。 计划学习新技能的方å¼ï¼ŒåŒ…括çç¢Žçš„æŠ€æœ¯ç±»åž‹ï¼Œæ¯”å¦‚å­¦ä¹ ä¸€ä¸ªæ–°çš„è½¯ä»¶ç³»ç»Ÿï¼Œå’Œå›°éš¾çš„ç¤¾äº¤ç±»åž‹ï¼Œåƒæ¼‚亮的写作,把它们集æˆåˆ°ä½ çš„工作中。 -Next [如何评估é¢è¯•](06-How to Evaluate Interviewees.md) +Next [如何评估é¢è¯•者](06-How to Evaluate Interviewees.md) diff --git a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index e4923aa..2d2c065 100644 --- a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -1,15 +1,15 @@ # 如何评估é¢è¯•者 -评估å¯èƒ½çš„å‘˜å·¥ï¼Œå´æ²¡æœ‰å¾—到它应得的能é‡ã€‚一个糟糕的雇佣,就åƒç³Ÿç³•的婚姻,是éžå¸¸ç³Ÿç³•的。æ¯ä¸ªäººçš„能é‡çš„一个é‡è¦çš„部分应该用于补充,尽管这很少å‘生。 +评估å¯èƒ½çš„å‘˜å·¥ï¼Œå´æ²¡æœ‰å¾—到它应得的能é‡ã€‚一个糟糕的雇佣,就åƒç³Ÿç³•的婚姻,是éžå¸¸ç³Ÿç³•的。æ¯ä¸ªäººé¦–è¦çš„一部分精力应该投入到招è˜ä¸Šï¼Œå°½ç®¡è¿™å¾ˆå°‘å‘生。 -有ä¸åŒçš„é¢è¯•é£Žæ ¼ã€‚æœ‰çš„æ˜¯æŠ˜ç£¨äººçš„ï¼Œè®¾è®¡ç”¨æ¥æŠŠå€™é€‰äººæ”¾åœ¨å·¨å¤§åŽ‹åŠ›ä¸‹ã€‚è¿™æ˜¯ä¸ºäº†è¿™æ ·ä¸€ä¸ªæœ‰ç”¨çš„ç›®çš„ï¼šåœ¨åŽ‹åŠ›ä¸‹æŠ˜å°„å‡ºæ€§æ ¼ç¼ºé™·å’Œå¼±ç‚¹ã€‚å€™é€‰äººä¸ä¼šå¯¹ä»–们自己之外的其他é¢è¯•官更诚实,而且,人的自欺能力是令人惊奇的。 +有ä¸åŒçš„é¢è¯•é£Žæ ¼ã€‚æœ‰çš„æ˜¯æŠ˜ç£¨äººçš„ï¼Œè®¾è®¡ç”¨æ¥æŠŠå€™é€‰äººæ”¾åœ¨å·¨å¤§åŽ‹åŠ›ä¸‹ã€‚è¿™æ˜¯ä¸ºäº†è¿™æ ·ä¸€ä¸ªæœ‰ç”¨çš„ç›®çš„ï¼šåœ¨åŽ‹åŠ›ä¸‹æŠ˜å°„å‡ºæ€§æ ¼ç¼ºé™·å’Œå¼±ç‚¹ã€‚å€™é€‰äººå¯¹å¾…é¢è¯•官ä¸ä¼šæ¯”对待他们自己更诚实,而且,人的自欺能力是令人惊奇的。 -ä½ åº”å½“ï¼Œæœ€å°‘ï¼Œå¯¹å€™é€‰äººè¿›è¡Œä¸¤ä¸ªå°æ—¶çš„与å£å¤´è€ƒæ ¸ç­‰ä»·çš„æŠ€æœ¯æŠ€èƒ½è€ƒæ ¸ã€‚实践åŽï¼Œä½ ä¼šèƒ½å¤Ÿå¿«é€Ÿäº†è§£ä»–们知é“什么,快速收缩他们ä¸çŸ¥é“çš„æ¥æ ‡æ˜Žè¾¹ç•Œã€‚é¢è¯•者会尊é‡è¿™ä»¶äº‹è¯·ã€‚我有几次å¬é¢è¯•者说é¢è¯•çš„è´¨é‡æ˜¯ä»–们选择公å¸çš„ä¸€ä¸ªåŠ¨æœºã€‚èªæ˜Žäººä¼šå› ä»–们的技能而被雇佣,而éžä»–们之å‰å·¥ä½œè¿‡çš„地方或他们上了哪个学校或者一些无关紧è¦çš„特å¾ã€‚ +ä½ åº”å½“ï¼Œæœ€å°‘ï¼Œå¯¹å€™é€‰äººè¿›è¡Œä¸¤ä¸ªå°æ—¶çš„与å£å¤´è€ƒæ ¸ç­‰ä»·çš„æŠ€æœ¯æŠ€èƒ½è€ƒæ ¸ã€‚实践åŽï¼Œä½ ä¼šèƒ½å¤Ÿå¿«é€Ÿäº†è§£ä»–们知é“什么,快速收缩他们ä¸çŸ¥é“çš„æ¥æ ‡æ˜Žè¾¹ç•Œã€‚é¢è¯•者会尊é‡è¿™ä»¶äº‹æƒ…。我有几次å¬é¢è¯•者说é¢è¯•çš„è´¨é‡æ˜¯ä»–们选择公å¸çš„ä¸€ä¸ªåŠ¨æœºã€‚èªæ˜Žäººä¼šå› ä»–们的技能而被雇佣,而éžä»–们之å‰å·¥ä½œè¿‡çš„地方或他们上了哪个学校或者一些无关紧è¦çš„特å¾ã€‚ -åšè¿™äº›äº‹æƒ…,你也应当评估他们的学习能力,这比他们所知é“çš„è¦æ›´åŠ é‡è¦å¾—多。你也应当ä¸åŒçš„人散å‘出æ¥çš„硫磺味。你å¯èƒ½èƒ½å¤Ÿåœ¨é¢è¯•åŽé€šè¿‡æ¯”较笔记æ¥è¯†åˆ«è¿™ä¸€ç‚¹ï¼Œä½†åœ¨é¢è¯•的热烈环境中这很难分辨。人们交æµçš„能力以åŠä¸Žäººåˆä½œçš„能力比在最新的编程语言上领先更为é‡è¦ã€‚ +åšè¿™äº›äº‹æƒ…,你也应当评估他们的学习能力,这比他们所知é“çš„è¦æ›´åŠ é‡è¦å¾—多。你也应当留心那些难以相处的人所散å‘出的ç«è¯å‘³ã€‚ä½ å¯èƒ½èƒ½å¤Ÿåœ¨é¢è¯•åŽé€šè¿‡æ¯”较笔记æ¥è¯†åˆ«è¿™ä¸€ç‚¹ï¼Œä½†åœ¨é¢è¯•的热烈环境中这很难分辨。人们交æµçš„能力以åŠä¸Žäººåˆä½œçš„能力比在最新的编程语言上领先更为é‡è¦ã€‚ -ä¸€ä¸ªè¯»è€…æœ‰â€œåœ¨å®¶â€æµ‹éªŒé¢è¯•çš„ç»éªŒã€‚这有一个优点是æ­éœ²äº†ä¸€äº›é¢è¯•者能良好地自我表现但ä¸èƒ½å†™ä»£ç çš„缺点 - 这样的人是很多的。我个人没有å°è¯•è¿‡è¿™ç§æŠ€æœ¯ï¼Œä½†è¿™å¬èµ·æ¥æŒºåˆé€‚的。 +ä¸€ä¸ªè¯»è€…æœ‰â€œåœ¨å®¶â€æµ‹éªŒé¢è¯•çš„ç»éªŒã€‚这有一个优点是æ­éœ²äº†ä¸€äº›é¢è¯•者能良好地自我表现但ä¸èƒ½å†™ä»£ç  - 这样的人是很多的。我个人没有å°è¯•è¿‡è¿™ç§æŠ€æœ¯ï¼Œä½†è¿™å¬èµ·æ¥æŒºåˆé€‚的。 -最åŽï¼Œé¢è¯•ä¹Ÿæ˜¯ä¸€ä¸ªé”€å”®çš„è¿‡ç¨‹ã€‚ä½ åº”è¯¥æŠŠä½ çš„å…¬å¸æˆ–工程销售给候选人。然而,你是在与程åºå‘˜è°ˆè¯ï¼Œæ‰€ä»¥ä¸è¦å°è¯•改å˜äº‹å®žã€‚从没有å员工开始,到与好员工一起强大而结æŸã€‚ +最åŽï¼Œé¢è¯•ä¹Ÿæ˜¯ä¸€ä¸ªé”€å”®çš„è¿‡ç¨‹ã€‚ä½ åº”è¯¥æŠŠä½ çš„å…¬å¸æˆ–工程销售给候选人。然而,你是在与程åºå‘˜è°ˆè¯ï¼Œæ‰€ä»¥ä¸è¦å°è¯•改å˜äº‹å®žã€‚从å的事物开始讲起,最åŽä»¥å¥½çš„事物作为强有力的结æŸã€‚ Next [怎么决定什么时候使用奇妙的计算机科学](07-How to Know When to Apply Fancy Computer Science.md) diff --git a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index bbc1d45..bde10cc 100644 --- a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -1,6 +1,6 @@ # 如何决定什么时候使用奇妙的计算机科学 -有这样一些,算法,数æ®ç»“构,数学,还有其他æžå®¢èŒƒçš„大多数程åºå‘˜çŸ¥é“但很少了解的东西。实践中,这ç§å¥‡å¦™çš„ä¸œè¥¿å¤ªå¤æ‚了,通常是ä¸éœ€è¦çš„。例如,当你花费大多数时间在低效的数æ®åº“调用上时,æé«˜ç®—法是没有什么用的。ä¸å¹¸çš„大é‡ç¼–程由让系统相互交æµä»¥åŠä½¿ç”¨éžå¸¸ç®€å•的数æ®ç»“构去构建漂亮的用户界é¢ç»„æˆã€‚ +有这样一些,例如算法,数æ®ç»“构,数学,还有其他æžå®¢èŒƒçš„大多数程åºå‘˜çŸ¥é“但很少使用的东西。实践中,这ç§å¥‡å¦™çš„ä¸œè¥¿å¤ªå¤æ‚了,通常是ä¸éœ€è¦çš„。例如,当你花费大多数时间在低效的数æ®åº“调用上时,æé«˜ç®—法是没有什么用的。ä¸å¹¸çš„大é‡ç¼–程由让系统相互交æµä»¥åŠä½¿ç”¨éžå¸¸ç®€å•的数æ®ç»“构去构建漂亮的用户界é¢ç»„æˆã€‚ 高科技什么时候是åˆé€‚的科技?你什么时候应当打开一本书去找一些东西而éžä¸€ä¸ªæ¯«ç§’级算法?åšè¿™äº›æœ‰æ—¶å€™æ˜¯æœ‰ç”¨çš„,但这需è¦è¢«å°å¿ƒè¯„估。 @@ -10,6 +10,6 @@ - å¥½å¤„æ˜¯å¦æ˜¯ä»¤äººæƒŠå¥‡çš„(例如,æˆç†Ÿç³»ç»Ÿçš„䏤倿ˆ–新系统的åå€ï¼Ÿï¼‰ - 你能够高效测试和评估它å—? -如果一个充分独立算法使用了些许奇妙的å¯ä»¥å‡å°‘ç¡¬ä»¶æ¶ˆè€—æˆ–å¢žåŠ æ•´ä¸ªç³»ç»Ÿçš„ä¸¤å€æ€§èƒ½è¡¨çŽ°çš„ç®—æ³•ï¼Œä¸è€ƒè™‘它å¯èƒ½æ˜¯æœ‰ç½ªçš„ã€‚äº‰è®ºè¿™æ ·ä¸€ä¸ªæ–¹æ³•çš„ä¸€ä¸ªå…³é”®æ˜¯ï¼Œè¯æ˜Žé£Žé™©ç¡®å®žæ˜¯ç›¸å½“的低,因为目标技术å¯èƒ½è¢«å……分研究过了,唯一的è¯é¢˜æ˜¯é›†æˆçš„风险。在这里一个程åºå‘˜çš„ç»éªŒå’Œè¯„ä¼°å¯ä»¥çœŸçš„与奇妙的算法å作使得集æˆå˜å¾—容易。 +如果一个充分独立算法使用了些许奇妙的å¯ä»¥å‡å°‘ç¡¬ä»¶æ¶ˆè€—æˆ–å¢žåŠ æ•´ä¸ªç³»ç»Ÿçš„ä¸¤å€æ€§èƒ½è¡¨çŽ°çš„ç®—æ³•ï¼Œä¸è€ƒè™‘它å¯èƒ½æ˜¯æœ‰ç½ªçš„ã€‚äº‰è®ºè¿™æ ·ä¸€ä¸ªæ–¹æ³•çš„ä¸€ä¸ªå…³é”®æ˜¯ï¼Œè¯æ˜Žé£Žé™©ç¡®å®žæ˜¯ç›¸å½“的低,因为目标技术å¯èƒ½è¢«å……分研究过了,唯一的è¯é¢˜æ˜¯é›†æˆçš„风险。在这里一个程åºå‘˜çš„ç»éªŒå’Œè¯„估能够真的ååŒå¥‡å¦™çš„算法让集æˆå˜å¾—容易。 Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How to Talk to Non-Engineers.md) diff --git a/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index 0900299..a03dd26 100644 --- a/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -6,14 +6,14 @@ éžå·¥ç¨‹å¸ˆå¯èƒ½å¤ªæ¸´æœ›ä»¥è‡³äºŽä¸èƒ½è¢«å–悦和与你亲近,他们å¯èƒ½åœ¨ä¸æ˜¯çœŸçš„对你满æ„的时候å´å¯¹ä½ è¯´â€œæ˜¯â€ï¼Œæˆ–者是因为他们有点怕你,然åŽä¸ä¼šå¯¹ä½ è¯´å®žè¯ã€‚ -éžå·¥ç¨‹å¸ˆå¯ä»¥ç†è§£æŠ€æœ¯çš„东西,但他们ä¸ä¼šåšé‚£ä»¶ç”šè‡³å¯¹æˆ‘们æ¥è®²éƒ½å¾ˆå›°éš¾çš„事情 - 技术评审。他们确实ç†è§£æŠ€æœ¯æ˜¯å¦‚何工作的,但他们ä¸èƒ½ç†è§£ä¸ºä»€ä¹ˆä¸€ä¸ªç‰¹å®šçš„æ–¹æ³•需è¦èŠ±ä¸‰ä¸ªæœˆè€Œå¦ä¸€ç§æ–¹æ³•è¦èŠ±ä¸‰å¤©ã€‚ï¼ˆæ¯•ç«Ÿï¼Œç¨‹åºå‘˜å¯¹è¿™ç§ä¼°è®¡ä¹Ÿæ„Ÿåˆ°äº‹å¤šå¾—坿€•。)这代表了一个巨大的和他们å作的机会。 +éžå·¥ç¨‹å¸ˆå¯ä»¥ç†è§£æŠ€æœ¯çš„东西,但他们ä¸ä¼šåšé‚£ä»¶ç”šè‡³å¯¹æˆ‘们æ¥è®²éƒ½å¾ˆå›°éš¾çš„事情 - 技术评审。他们确实ç†è§£æŠ€æœ¯æ˜¯å¦‚何工作的,但他们ä¸èƒ½ç†è§£ä¸ºä»€ä¹ˆä¸€ä¸ªç‰¹å®šçš„æ–¹æ³•需è¦èŠ±ä¸‰ä¸ªæœˆè€Œå¦ä¸€ç§æ–¹æ³•è¦èŠ±ä¸‰å¤©ã€‚ï¼ˆæ¯•ç«Ÿï¼Œç¨‹åºå‘˜å¯¹è¿™ç§ä¼°è®¡ä¹Ÿæ„Ÿåˆ°äº‹å¤šå¾—坿€•。)这相当于一个巨大的和他们å作的机会。 -与你的团队交谈时,你会,ä¸å‡æ€ç´¢çš„ï¼Œä½¿ç”¨ä¸€ç§æ·å¾„的形å¼ï¼Œä¸€ç§ç®€å•的语言更有效率,因为你通常对技术或者特别是你的产å“会有许多的共享ç»éªŒã€‚ +与你的团队交谈时,你会ä¸å‡æ€ç´¢åœ°ä½¿ç”¨æŸç§ç¨‹åº¦ä¸Šçš„简略表达方å¼ï¼Œä¸€ç§ç®€å•的语言更有效率,因为你通常对技术或者特别是你的产å“会有许多的共享ç»éªŒã€‚对于那些没有这些共享ç»éªŒçš„人ä¸ä½¿ç”¨ç®€ç•¥è¡¨è¾¾æ–¹å¼æ˜¯éœ€è¦ä½œå‡ºä¸€äº›åŠªåŠ›çš„ï¼Œç‰¹åˆ«æ˜¯ä½ å›¢é˜Ÿå†…éƒ¨çš„äººå‘˜ä¹Ÿåœ¨åœºçš„æ—¶å€™ã€‚è¿™äº›ç®€ç•¥çš„è¯æ±‡ä¼šè®©ä½ ä¸Žé‚£äº›æ²¡æœ‰åˆ†äº«åˆ°ç›¸å…³ç»éªŒçš„人之间构建出一é“墙,甚至更糟的是,浪费ç€ä»–们的时间。 与你的团队一起,基本的å‡è®¾å’Œç›®æ ‡ä¸éœ€è¦ç»å¸¸é‡ç”³ï¼Œå¤§å¤šæ•°è°ˆè¯é›†ä¸­äºŽç»†èŠ‚ã€‚ä¸Žå¤–äººä¸€èµ·ï¼Œå°±æ˜¯å¦ä¸€å›žäº‹äº†ã€‚他们å¯èƒ½ä¸ç†è§£ä½ è®¤ä¸ºç†æ‰€å½“然的东西。由于你把这当åšç†æ‰€å½“然,并且没有é‡ç”³å®ƒä»¬ï¼Œä½¿å¾—你们的谈è¯é™·å…¥è¿™æ ·ä¸€ç§æƒ…况:你å¯èƒ½è®¤ä¸ºä½ ä»¬ç›¸äº’ç†è§£ï¼Œä½†äº‹å®žä¸Šæœ‰ä¸€ä¸ªå·¨å¤§çš„误解。你应当å‡è®¾ä½ ä¼šæœ‰é”™è¯¯çš„交æµï¼Œå¹¶ä¸”ä»”ç»†è§‚å¯ŸåŽ»æ‰¾å‡ºè¿™æ ·çš„è¯¯è§£ã€‚è¯•ç€æ€»ç»“或将你说的东西分点,æ¥ç¡®ä¿ä»–们能够ç†è§£ã€‚如果你有机会ç»å¸¸ä¸Žä»–们è§é¢ï¼ŒèŠ±ä¸€ç‚¹æ—¶é—´è¯¢é—®ä½ æ˜¯å¦åœ¨æœ‰æ•ˆåœ°äº¤æµï¼Œä»¥åŠä½ å¯ä»¥æ€Žæ ·æŠŠå®ƒåšå¾—æ›´å¥½ã€‚å¦‚æžœäº¤æµæœ‰é—®é¢˜ï¼Œåœ¨å¯¹ä»–们失望å‰ï¼Œå¯»æ‰¾æ–¹æ³•去æé«˜ä½ è‡ªå·±çš„实践。 -我喜欢与éžå·¥ç¨‹å¸ˆå·¥ä½œã€‚è¿™æä¾›äº†ç»å¤§çš„æœºä¼šæ¥å­¦ä¹ ä¸Žä¼ æŽˆã€‚ä½ å¯ä»¥ç»å¸¸ç”±å®žä¾‹å¾—到关于你的交æµçš„é˜è¿°çš„æŒ‡å¼•。工程师被训练于从混乱中梳ç†ç§©åºï¼Œä»Žå›°æƒ‘中得到解释,éžå·¥ç¨‹å¸ˆä¼šå› æ­¤å–œæ¬¢æˆ‘们。因为我们有技术评审,并且通常å¯ä»¥ç†è§£å•†ä¸šè¯é¢˜ï¼Œæˆ‘们ç»å¸¸å‘现一个简å•的方法æ¥è§£å†³é—®é¢˜ã€‚ +我喜欢与éžå·¥ç¨‹å¸ˆå·¥ä½œã€‚è¿™æä¾›äº†ç»å¤§çš„æœºä¼šæ¥å­¦ä¹ ä¸Žä¼ æŽˆã€‚ä½ å¯ä»¥ç»å¸¸ç”±å®žä¾‹å¾—到关于你的交æµçš„é˜è¿°çš„æŒ‡å¼•。工程师被训练于从混乱中梳ç†ç§©åºï¼Œä»Žå›°æƒ‘中得到解释,éžå·¥ç¨‹å¸ˆä¼šå› æ­¤å–œæ¬¢æˆ‘们。因为我们有技术评审,并且通常å¯ä»¥ç†è§£å•†ä¸šè¯é¢˜ï¼Œæˆ‘们ç»å¸¸å¯ä»¥å‘现一个简å•的方法æ¥è§£å†³é—®é¢˜ã€‚ -很多时候éžå·¥ç¨‹å¸ˆä¼šå‡ºäºŽå¥½æ„以åŠä¸€ç§æ­£ç¡®åšäº‹æƒ…的欲望去规划他们认为会让我们更容易的事情,事实上存在一个仅能通过借助你的技术评审å助外人的观点看到的好得多的方法。我个人喜欢æžé™ç¼–程因为它处ç†äº†è¿™ç§ä½Žæ•ˆï¼Œé€šè¿‡å°†ä¼°è®¡å¿«é€Ÿä¸Žä¸»æ„结åˆï¼Œä½¿å¾—å‘çŽ°æˆæœ¬ä¸Žå¥½å¤„最佳结åˆçš„æ–¹æ³•更加容易。 +很多时候éžå·¥ç¨‹å¸ˆä¼šå‡ºäºŽå¥½æ„以åŠä¸€ç§æ­£ç¡®åšäº‹æƒ…的欲望去规划他们认为会让我们更容易的事情,事实上存在一个仅能通过借助你的技术评审å助外人的观点看到的好得多的方法。我个人喜欢æžé™ç¼–程因为它处ç†äº†è¿™ç§ä½Žæ•ˆï¼Œé€šè¿‡ä¸Žå¿«é€Ÿè¯„估相结åˆï¼Œä½¿å¾—å‘çŽ°æˆæœ¬ä¸Žå¥½å¤„最佳结åˆçš„æ–¹æ³•更加容易。 Next [高级技能](../../3-Advanced) diff --git a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index c5b7e67..da07185 100644 --- a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -2,13 +2,13 @@ åˆ›å»ºç¾Žä¸½ï¼Œæœ‰ç”¨ï¼Œèªæ˜Žçš„东西的欲望能高度调动程åºå‘˜çš„ç§¯æžæ€§ã€‚è¿™æ˜¯å¥‡å¦™è€Œä»¤äººæƒŠå¥‡çš„ã€‚è¿™ç§æ¬²æœ›å¯¹ç¨‹åºå‘˜æ—¢ä¸ç‰¹æ®Šä¹Ÿä¸æ™®é,但在程åºå‘˜ä¸­ï¼Œå®ƒæ˜¯å¦‚此强烈而普é以至于它把程åºå‘˜ä¸Žå…¶ä»–角色的人们分割开æ¥ã€‚ -这有一个现实而é‡è¦çš„æŽ¨è®ºã€‚如果程åºå‘˜è¢«è¦æ±‚åšä¸€äº›ä¸ç¾Žä¸½/有用/漂亮的事情,他们会斗志低è½ã€‚åšä¸‘陋,愚蠢,无èŠçš„员工å¯èƒ½å¯ä»¥èµšå¾ˆå¤šé’±ï¼Œä½†æœ€åŽï¼Œä¹è¶£æ‰ä¼šä¸ºå…¬å¸èµšæœ€å¤šçš„钱。 +这有一个现实而é‡è¦çš„æŽ¨è®ºã€‚如果当程åºå‘˜è¢«è¦æ±‚åšä¸€äº›æ—¢ä¸ç¾Žä¸½ï¼Œä¹Ÿæ²¡æœ‰ç”¨ï¼Œä¹Ÿä¸æ¼‚亮的事情,他们会斗志低è½ã€‚虽然å¯ä»¥é€šè¿‡åšä¸‘陋的,愚蠢的,无èŠçš„东西赚很多的钱,但最åŽï¼Œä¹è¶£æ‰ä¼šä¸ºå…¬å¸èµšæœ€å¤šçš„钱。 很明显,有一些完全由动机技术组织起æ¥çš„工业适用这里的情况。这些我å¯ä»¥è¯†åˆ«çš„特定的编程中的事情有: - 为工作使用最好的语言 - 寻找机会去使用新技术,新语言,新科技 - å°è¯•在æ¯ä¸ªå·¥ç¨‹é‡Œå­¦ä¹ æˆ–教授一些东西,å³ä½¿å¾ˆå° -最åŽï¼Œå¯èƒ½çš„è¯ï¼Œä¼°é‡ä¸ªäººæ¿€åŠ±çš„ä¸œè¥¿å¯¹ä½ å·¥ä½œçš„å½±å“。例如,修å¤bugæ—¶ï¼Œæ•°ä¸€æ•°æˆ‘å®Œå…¨ä¸æ„Ÿå…´è¶£çš„bug的数目,因为这和ä»ç„¶å­˜åœ¨çš„bugæ•°ç›®æ˜¯ç‹¬ç«‹çš„ï¼Œå¹¶ä¸”ä¹Ÿå½±å“æˆ‘在最å°å¯èƒ½çš„æ–¹å¼ä¸Šå½±å“我对我公å¸çš„顾客的增值。把æ¯ä¸ªbug和一个高兴的顾客关è”èµ·æ¥ï¼Œ*是*对我个人的激励。 +最åŽï¼Œå¯èƒ½çš„è¯ï¼Œä¼°é‡ä¸ªäººæ¿€åŠ±çš„ä¸œè¥¿å¯¹ä½ å·¥ä½œçš„å½±å“ã€‚ä¾‹å¦‚ï¼Œä¿®å¤ bug æ—¶ï¼Œæ•°ä¸€æ•°æˆ‘å®Œå…¨ä¸æ„Ÿå…´è¶£çš„ bug 的数目,因为这和ä»ç„¶å­˜åœ¨çš„ bug æ•°ç›®æ˜¯ç‹¬ç«‹çš„ï¼Œå¹¶ä¸”è¿™ä¹Ÿæ˜¯å½±å“æˆ‘对公å¸çš„顾客的增值的最å°çš„å¯èƒ½æ–¹å¼ã€‚把æ¯ä¸ª bug 和一个高兴的顾客关è”èµ·æ¥ï¼Œ*是*对我个人的激励。 Next [如何被广泛信任](02-How to be Widely Trusted.md) diff --git a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index 719eeaf..c260737 100644 --- a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -1,6 +1,6 @@ # 如何被广泛信任 -值得信任,æ‰èƒ½è¢«ä¿¡ä»»ã€‚你也应该让别人了解你。如果没人了解你,没人会为你投票。跟与你亲近的人一起,比如队å‹ï¼Œè¿™ä¸èƒ½æˆä¸ºä¸€ä¸ªè¯é¢˜ã€‚对你部门或团队以外的人,你通过责任和åšçŸ¥å»ºç«‹ä¿¡ä»»ã€‚æœ‰æ—¶æœ‰äººä¼šæ»¥ç”¨ä¿¡ä»»ï¼Œå¹¶è¦æ±‚æ— ç†ç”±çš„喜爱。ä¸è¦å®³æ€•,解释这ç§å–œçˆ±ä¼šè®©ä½ å¿…须放弃什么。 +值得信任,æ‰èƒ½è¢«ä¿¡ä»»ã€‚你也应该让别人了解你。如果没人了解你,没人会为你投票。跟你亲近的人一起,比如队å‹ï¼Œè¿™åº”è¯¥ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚对你部门或团队以外的人,你通过责任和åšçŸ¥å»ºç«‹ä¿¡ä»»ã€‚æœ‰æ—¶æœ‰äººä¼šæ»¥ç”¨ä¿¡ä»»ï¼Œå¹¶è¦æ±‚æ— ç†ç”±çš„赞åŒã€‚ä¸è¦å®³æ€•,解释因这ç§èµžåŒä¼šè®©ä½ å¿…须放弃什么。 ä¸è¦ä¸æ‡‚装懂。与队å‹ä»¥å¤–的人一起时,你必须清除地区分“当下在我脑å­é‡Œä¸æ‡‚的东西â€ä»¥åŠâ€œæˆ‘æ›¾ç»æ²¡æœ‰è®¤è¯†åˆ°çš„东西â€ã€‚ diff --git a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index c0a7479..07dcde0 100644 --- a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -1,15 +1,15 @@ # 如何在时间与空间æƒè¡¡ -没有上过大学的è¯ï¼Œä½ ä¹Ÿå¯ä»¥æˆä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œä½†ä½ ä¸çŸ¥é“åŸºæœ¬çš„è®¡ç®—å¤æ‚度ç†è®ºçš„è¯ï¼Œä½ ä¸å¯èƒ½æˆä¸ºä¸€ä¸ªå¥½çš„进阶程åºå‘˜ã€‚ä½ ä¸éœ€è¦çŸ¥é“‘O’的定义,但我个人认为你应该ç†è§£â€˜å¸¸é‡æ—¶é—´â€™ï¼Œâ€˜nlogn’,'n²'的区别。你å¯èƒ½å¯ä»¥ä¸é è¿™æ–¹é¢çš„知识,凭直觉知é“如何在时间和空间之间æƒè¡¡ï¼Œä½†æ²¡æœ‰è¿™ç§çŸ¥è¯†ï¼Œä½ ä¸ä¼šæœ‰ä¸€ä¸ªç¨³å›ºçš„ç†è§£ä½ çš„åŒäº‹çš„基础。 +没有上过大学的è¯ï¼Œä½ ä¹Ÿå¯ä»¥æˆä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œä½†ä½ ä¸çŸ¥é“åŸºæœ¬çš„è®¡ç®—å¤æ‚度ç†è®ºçš„è¯ï¼Œä½ ä¸å¯èƒ½æˆä¸ºä¸€ä¸ªå¥½çš„进阶程åºå‘˜ã€‚ä½ ä¸éœ€è¦çŸ¥é“‘O’的定义,但我个人认为你应该ç†è§£â€˜å¸¸é‡æ—¶é—´â€™ï¼Œâ€˜nlogn’,'n²'的区别。你å¯èƒ½å¯ä»¥ä¸é è¿™æ–¹é¢çš„知识,凭直觉知é“如何在时间和空间之间æƒè¡¡ï¼Œä½†æ²¡æœ‰è¿™ç§çŸ¥è¯†ï¼Œä½ å°†ä¸ä¼šæœ‰ä¸€ä¸ªå’Œä½ åŒäº‹äº¤æµçš„稳固基础。 -在设计或ç†è§£ç®—法的过程中,算法花费的时间有时候是一个以输入é‡ä¸ºè‡ªå˜é‡çš„å‡½æ•°ã€‚å½“è¿™ç§æƒ…况å‘生时,如果è¿è¡Œæ—¶é—´ä¸Žè¾“å…¥é‡çš„对数的n倿ˆæ­£æ¯”,我们å¯ä»¥è¯´ä¸€ä¸ªç®—法的最å/期望/最好情况è¿è¡Œæ—¶é—´æ˜¯'nlogn',这个定义和é˜è¿°çš„æ–¹å¼ä¹Ÿå¯ä»¥è¢«åº”用在数æ®ç»“æž„å ç”¨çš„空间上。 +在设计或ç†è§£ç®—法的过程中,算法花费的时间有时候是一个以输入é‡ä¸ºè‡ªå˜é‡çš„å‡½æ•°ã€‚å½“è¿™ç§æƒ…况å‘生时,如果è¿è¡Œæ—¶é—´ä¸Žè¾“å…¥é‡çš„对数的 n 倿ˆæ­£æ¯”,我们å¯ä»¥è¯´ä¸€ä¸ªç®—法的最å/期望/最好情况è¿è¡Œæ—¶é—´æ˜¯'nlogn',这个定义和é˜è¿°çš„æ–¹å¼ä¹Ÿå¯ä»¥è¢«åº”用在数æ®ç»“æž„å ç”¨çš„空间上。 å¯¹æˆ‘æ¥æ—¶å€™ï¼Œè®¡ç®—夿‚度ç†è®ºæ˜¯ç¾Žå¦™çš„,并且与物ç†å­¦ä¸€æ ·æ„义深远,并且å¯èƒ½è¿˜æœ‰å¾ˆé•¿çš„è·¯è¦èµ°ï¼ -时间(处ç†å™¨å‘¨æœŸï¼‰å’Œç©ºé—´ï¼ˆå†…存)å¯ä»¥ç›¸äº’交易。工程是一ç§å¦¥å,这是一个好的例å­ã€‚å®ƒä¸æ€»æ˜¯ç³»ç»Ÿçš„,然而,编ç ä¸€äº›ä¸œè¥¿æ—¶æ›´åŠ ç´§å‡‘å¯ä»¥èŠ‚çœç©ºé—´ï¼Œä½†è¦ä»¥è§£ç æ—¶æ›´å¤šçš„å¤„ç†æ—¶é—´ä¸ºä»£ä»·ã€‚ä½ å¯ä»¥é€šè¿‡ç¼“å­˜èŠ‚çœæ—¶é—´ï¼Œä¹Ÿå°±æ˜¯ï¼ŒèŠ±è´¹ç©ºé—´åŽ»å­˜å‚¨æŸäº›ä¸œè¥¿çš„一个本地副本,但è¦ä»¥ç»´æŒç¼“存的一致性为代价。你å¶å°”å¯ä»¥é€šè¿‡æŠŠæ›´å¤šä¿¡æ¯æ”¾åœ¨ä¸€ä¸ªæ•°æ®ç»“构里æ¥èŠ‚çœæ—¶é—´ã€‚但这通常导致å°çš„空间å ç”¨ï¼ŒåŒæ—¶å¤æ‚化算法。 +时间(处ç†å™¨å‘¨æœŸï¼‰å’Œç©ºé—´ï¼ˆå†…存)å¯ä»¥ç›¸äº’交易。工程是关于妥å的,这就是一个好的例å­ã€‚å®ƒå¹¶ä¸æ€»æ˜¯æœ‰æ¡ç†çš„的,然而,编ç ä¸€äº›ä¸œè¥¿æ—¶æ›´åŠ ç´§å‡‘å¯ä»¥èŠ‚çœç©ºé—´ï¼Œä½†è¦ä»¥è§£ç æ—¶èŠ±è´¹æ›´å¤šçš„å¤„ç†æ—¶é—´ä¸ºä»£ä»·ã€‚ä½ å¯ä»¥é€šè¿‡ç¼“å­˜èŠ‚çœæ—¶é—´ï¼Œä¹Ÿå°±æ˜¯ï¼ŒèŠ±è´¹ç©ºé—´åŽ»å­˜å‚¨æŸäº›ä¸œè¥¿çš„一个本地副本,但è¦ä»¥ç»´æŒç¼“存的一致性为代价。你å¶å°”å¯ä»¥é€šè¿‡æŠŠæ›´å¤šä¿¡æ¯æ”¾åœ¨ä¸€ä¸ªæ•°æ®ç»“构里æ¥èŠ‚çœæ—¶é—´ã€‚这通常åªä¼šæœ‰è¾ƒå°çš„空间å ç”¨ï¼Œä½†å¯èƒ½ä¼šä½¿ç®—æ³•å¤æ‚化。 -æé«˜æ—¶é—´ç©ºé—´è½¬æ¢ç»å¸¸æŠŠå®ƒä»¬ä¸­çš„一个或å¦ä¸€ä¸ªæˆå‰§æ€§åœ°æ”¹å˜ã€‚然而,在你开始åšè¿™ä¸ªå·¥ä½œå‰ï¼Œä½ åº”该问你自己,你将è¦ä¼˜åŒ–çš„æ˜¯å¦æ˜¯æœ€éœ€è¦ä¼˜åŒ–的?研究算法是有趣的,但你ä¸èƒ½è®©è¿™é®è”½äº†ä½ çš„åŒçœ¼è®©ä½ çœ‹ä¸åˆ°è¿™æ ·ä¸€ä¸ªå†·é…·çš„äº‹å®žï¼šä¼˜åŒ–ä¸€äº›ä¸æ˜¯é—®é¢˜çš„问题ä¸ä¼šäº§ç”Ÿå¯è§çš„å½±å“å¹¶ä¸”ä¼šé€ æˆæµ‹è¯•负担。 +æé«˜æ—¶é—´ç©ºé—´è½¬æ¢ç»å¸¸æŠŠå®ƒä»¬ä¸­çš„一个或å¦ä¸€ä¸ªæˆå‰§æ€§åœ°æ”¹å˜ã€‚然而,在你开始åšè¿™ä¸ªå·¥ä½œå‰ï¼Œä½ åº”该问你自己,你将è¦ä¼˜åŒ–çš„æ˜¯å¦æ˜¯æœ€éœ€è¦ä¼˜åŒ–的?研究算法是有趣的,但你ä¸èƒ½è®©è¿™é®è”½äº†ä½ çš„åŒçœ¼è®©ä½ çœ‹ä¸åˆ°è¿™æ ·ä¸€ä¸ªå†·é…·çš„äº‹å®žï¼šä¼˜åŒ–ä¸€äº›ä¸æ˜¯é—®é¢˜çš„问题将ä¸ä¼šå¸¦æ¥ä»»ä½•明显的区别,但å´ä¼šé€ æˆæµ‹è¯•的负担。 -现代计算机内存越æ¥è¶Šä¾¿å®œï¼Œå› ä¸ºä¸åƒå¤„ç†å™¨æ—¶é—´ï¼Œä½ åœ¨è¾¾åˆ°è¾¹ç•Œå‰ä½ ä¸èƒ½çœ‹è§å®ƒï¼Œä½†è¿™ç§å¤±è´¥æ˜¯ç¾é𾿀§çš„。使用内存也有éšè—的代价,比如你影å“了其他需è¦è¢«ä¿ç•™çš„程åºï¼Œä»¥åŠä½ åˆ†é…和释放内存的时间。在你想è¦èŠ±æ›´å¤šç©ºé—´åŽ»æ¢å–速度之å‰ï¼Œä»”细考虑这一点。 +现代计算机内存越æ¥è¶Šä¾¿å®œï¼Œå› ä¸ºä¸åƒå¤„ç†å™¨æ—¶é—´ï¼Œä½ åœ¨è¾¾åˆ°è¾¹ç•Œå‰ä½ ä¸èƒ½çœ‹è§å®ƒï¼Œä½†è¿™ç§å¤±è´¥æ˜¯ç¾é𾿀§çš„。使用内存也有éšè—的代价,比如你影å“了其他需è¦è¢«ä¿ç•™çš„程åºï¼Œä»¥åŠä½ åˆ†é…和释放内存的时间。在你想è¦èŠ±æ›´å¤šç©ºé—´åŽ»æ¢å–速度之å‰ï¼Œè¯·ä»”细考虑这一点。 Next [如何进行压力测试](04-How to Stress Test.md) diff --git a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md index 67b12cd..fefbebb 100644 --- a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -1,14 +1,14 @@ # 如何进行压力测试 -压力测试很有趣,一开始好åƒåŽ‹æµ‹çš„ç›®çš„æ˜¯æ‰¾å‡ºç³»ç»Ÿåœ¨è´Ÿè½½ä¸‹èƒ½ä¸èƒ½å·¥ä½œã€‚现实中,系统在负载下确实能工作,但在负载足够é‡çš„æŸäº›æƒ…å†µä¸‹ä¸èƒ½å·¥ä½œã€‚我把这å«åš*碰å£*或*æ’žå“*[1]。å¯èƒ½ä¼šæœ‰ä¾‹å¤–,但大多数情况下会有这么一堵“墙â€ã€‚åŽ‹æµ‹çš„ç›®çš„æ˜¯ä¸ºäº†æŒ‡å‡ºå¢™åœ¨å“ªé‡Œï¼Œç„¶åŽæŒ‡å‡ºæ€Žä¹ˆæŠŠå¢™ç§»å¾—远些。 +压力测试很有趣,一开始好åƒåŽ‹æµ‹çš„ç›®çš„æ˜¯æ‰¾å‡ºç³»ç»Ÿåœ¨è´Ÿè½½ä¸‹èƒ½ä¸èƒ½å·¥ä½œã€‚现实中,系统在负载下确实能工作,但在负载足够é‡çš„æŸäº›æƒ…å†µä¸‹ä¸èƒ½å·¥ä½œã€‚我把这å«åš*碰å£*或*æ’žå“*[1]。å¯èƒ½ä¼šæœ‰ä¾‹å¤–,但大多数情况下会有这么一堵“墙â€ã€‚压测的目的是为了指出墙在哪里,然åŽå¼„清楚怎么把墙移得更远些。 -压测计划需è¦åœ¨å·¥ç¨‹çš„æ—©æœŸå°±è§„划好,因为它ç»å¸¸æœ‰åŠ©äºŽè§£é‡ŠçœŸå®žæœŸæœ›çš„ä¸œè¥¿å…·ä½“æ˜¯ä»€ä¹ˆã€‚ä¸¤ç§’çš„ç½‘é¡µè¯·æ±‚æ˜¯ä¸€ä¸ªæ‚²ä¼¤çš„å¤±è´¥è¿˜æ˜¯ä¸€ä¸ªäº†ä¸èµ·çš„æˆåŠŸï¼Ÿ500个并å‘用户是å¦è¶³å¤Ÿï¼Ÿè¿™ï¼Œå½“ç„¶ï¼Œè§†æƒ…å†µè€Œå®šï¼Œä½†ä¸€ä¸ªäººåœ¨è®¾è®¡ç³»ç»Ÿæ—¶å°±åº”è¯¥çŸ¥é“æ»¡è¶³éœ€æ±‚的答案。压测需è¦è¶³å¤Ÿå¥½åœ°ä¸ºçŽ°å®žå»ºæ¨¡ï¼Œä½¿ä¹‹è¶³å¤Ÿæœ‰ç”¨ã€‚éžå¸¸å®¹æ˜“地模拟500个ä¸ç¨³å®šå¹¶ä¸”ä¸å¯é¢„æµ‹çš„äººå¹¶è¡Œä½¿ç”¨ç³»ç»Ÿä¸æ˜¯çœŸçš„å¯èƒ½çš„,但我们å¯ä»¥è‡³å°‘创造500个模拟(用户),然åŽå°è¯•模拟他们å¯èƒ½åšçš„部分事情。 +压测计划需è¦åœ¨å·¥ç¨‹çš„æ—©æœŸå°±è§„划好,因为它ç»å¸¸æœ‰åŠ©äºŽå¼„æ¸…æ¥šåˆ°åº•ä»€ä¹ˆæ˜¯è¢«æœŸæœ›çš„ã€‚ä¸¤ç§’çš„ç½‘é¡µè¯·æ±‚æ˜¯ä¸€ä¸ªæ‚²ä¼¤çš„å¤±è´¥è¿˜æ˜¯ä¸€ä¸ªäº†ä¸èµ·çš„æˆåŠŸï¼Ÿ500个并å‘用户是å¦è¶³å¤Ÿï¼Ÿè¿™ï¼Œå½“ç„¶ï¼Œè§†æƒ…å†µè€Œå®šï¼Œä½†ä¸€ä¸ªäººåœ¨è®¾è®¡ç³»ç»Ÿæ—¶å°±åº”è¯¥çŸ¥é“æ»¡è¶³éœ€æ±‚的答案。压测需è¦è¶³å¤Ÿå¥½åœ°ä¸ºçŽ°å®žå»ºæ¨¡ï¼Œä½¿ä¹‹è¶³å¤Ÿæœ‰ç”¨ã€‚éžå¸¸å®¹æ˜“地模拟500个ä¸ç¨³å®šå¹¶ä¸”ä¸å¯é¢„æµ‹çš„äººå¹¶è¡Œä½¿ç”¨ç³»ç»Ÿä¸æ˜¯çœŸçš„å¯èƒ½çš„,但我们å¯ä»¥è‡³å°‘创造500个模拟(用户),然åŽå°è¯•模拟他们å¯èƒ½åšçš„部分事情。 -在压测中,从轻负载开始,然åŽä¸ºç³»ç»Ÿåœ¨ä¸€äº›ç»´åº¦ä¸Šå¢žåР夿‚ - 比如输入频率和输入规模 - 直到你抵达那堵墙。如果墙太近了以至于ä¸èƒ½æ»¡è¶³ä½ çš„需è¦ï¼ŒæŒ‡å‡ºå“ªä¸ªèµ„æºæ˜¯ç“¶é¢ˆï¼ˆè¿™é€šå¸¸æ˜¯é‚£ä¸ªä¸»è¦çš„资æºï¼‰ã€‚它是内存?处ç†å™¨ï¼ŸI/O?网络带宽?还是数æ®è¿žæŽ¥ï¼Ÿç„¶åŽæŒ‡å‡ºä½ å¯ä»¥æ€Žä¹ˆç§»åŠ¨é‚£å µå¢™ã€‚è®°å½•ä¸‹ç§»åŠ¨å¢™çš„é‚£ä¸ªè¦ç´ ï¼Œä¹Ÿå°±æ˜¯å¢žåŠ äº†ç³»ç»Ÿå¯ä»¥å¤„ç†çš„负载的那个è¦ç´ ï¼Œå®ƒå¯èƒ½ä¸èƒ½çœŸæ­£åœ¨ä½Žè´Ÿè½½ç³»ç»Ÿä¸‹äº§ç”Ÿå±å®³ã€‚但通常é‡è´Ÿè½½ä¸‹çš„表现比轻负载下更é‡è¦ã€‚ +在压测中,从轻负载开始,然åŽä¸ºç³»ç»Ÿåœ¨ä¸€äº›ç»´åº¦ä¸Šå¢žåР夿‚ - 比如输入频率和输入规模 - 直到你抵达那堵墙。如果墙太近了以至于ä¸èƒ½æ»¡è¶³ä½ çš„需è¦ï¼Œå¼„æ˜Žç™½å“ªä¸ªèµ„æºæ˜¯ç“¶é¢ˆï¼ˆè¿™é€šå¸¸æ˜¯é‚£ä¸ªä¸»è¦çš„资æºï¼‰ã€‚它是内存?处ç†å™¨ï¼ŸI/O?网络带宽?还是数æ®è¿žæŽ¥ï¼Ÿç„¶åŽå¼„明白你å¯ä»¥æ€Žä¹ˆç§»åŠ¨é‚£å µå¢™ã€‚è®°å½•ä¸‹ç§»åŠ¨å¢™çš„é‚£ä¸ªè¦ç´ ï¼Œä¹Ÿå°±æ˜¯å¢žåŠ äº†ç³»ç»Ÿå¯ä»¥å¤„ç†çš„负载的那个è¦ç´ ï¼Œå®ƒå¯èƒ½ä¸èƒ½çœŸæ­£åœ¨ä½Žè´Ÿè½½ç³»ç»Ÿä¸‹äº§ç”Ÿå±å®³ã€‚但通常é‡è´Ÿè½½ä¸‹çš„表现比轻负载下更é‡è¦ã€‚ 你必须能够观察几个ä¸åŒç»´åº¦ï¼Œä»¥æ­¤æ¥ä¸ºä¹‹æž„建一个æ€ç»´æ¨¡åž‹ï¼›å•一的技术是ä¸å¤Ÿçš„。例如,日志ç»å¸¸æ˜¯ç»™å‡ºç³»ç»Ÿä¸­ä¸¤ä¸ªäº‹ä»¶é—´çš„æŒ‚钟时间的好主æ„。但除éžä»”细构建,日志ä¸ä¼šç»™å‡ºå†…存使用的å¯è§æ€§ç”šè‡³æ˜¯æ•°æ®ç»“构的大å°ã€‚相似的,在现代系统里,大é‡ç”µè„‘和许多软件系统是åˆä½œçš„ã€‚ç‰¹åˆ«æ˜¯åœ¨ä½ ç¢°åˆ°é‚£å µå¢™æ—¶ï¼ˆä¹Ÿå°±æ˜¯ï¼Œè¡¨çŽ°ä¸Žè¾“å…¥ä¸æˆçº¿æ€§æ¯”例时),这些软件系统å¯èƒ½æˆä¸ºç“¶é¢ˆã€‚对这些系统的é€è§†åŠ›ï¼Œç”šè‡³ä»…ä»…å¯¹æ‰€æœ‰å‚与工作的机器的处ç†å™¨å𿵋é‡ï¼Œéƒ½å¯èƒ½æ˜¯éžå¸¸æœ‰å¸®åŠ©çš„ã€‚ -æ„识到墙的存在ä¸ä»…对移动墙是éžå¸¸å…³é”®çš„,而且对于æä¾›é¢„报能力也是如此。这样公å¸å¯ä»¥å¾—到更高效的管ç†ã€‚ +æ„识到墙在哪里的关键ä¸ä»…是移动这堵墙,而且也是æä¾›å¯¹å…¶çš„预测能力。这样公å¸å¯ä»¥å¾—到更高效的管ç†ã€‚ --- diff --git a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index f17312b..baeaa11 100644 --- a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,9 +1,9 @@ # 如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡ -æŠ½è±¡æ˜¯ç¼–ç¨‹çš„å…³é”®ã€‚ä½ åº”è¯¥ä»”ç»†é€‰æ‹©ä½ éœ€è¦æŠ½è±¡çš„ç¨‹åº¦ã€‚å……æ»¡æ´»åŠ›çš„åˆå­¦è€…ç»å¸¸åˆ›å»ºè®¸å¤šæ²¡æœ‰ä»€ä¹ˆç”¨çš„æŠ½è±¡ã€‚一个标识是,你是å¦åˆ›å»ºäº†è¿™æ ·ä¸€ä¸ªç±»,ä¸åŒ…å«ä»»ä½•代ç å¹¶ä¸”没有真的åšä»€ä¹ˆäº‹æƒ…,é™¤äº†æŠ½è±¡ä¸€äº›ä¸œè¥¿ã€‚è¿™ç§æŠ½è±¡æ˜¯å¯ä»¥ç†è§£çš„,但代ç çš„ç®€æ´æ€§çš„价值必须与代ç çš„æŠ½è±¡ä»·å€¼ç›¸æƒè¡¡ã€‚有时候,我们å¯ä»¥çœ‹åˆ°ä¸€ç§çƒ­æƒ…çš„ç†æƒ³ä¸»ä¹‰è€…çŠ¯çš„é”™è¯¯ï¼šåœ¨å·¥ç¨‹çš„ä¸€å¼€å§‹ï¼Œå®šä¹‰äº†ä¸€å¤§å †çš„çœ‹èµ·æ¥æŠ½è±¡å¾—å¾ˆç¾Žçš„ç±»ï¼Œç„¶åŽä»–会推测说它们å¯ä»¥å¤„ç†æ¯ä¸€ä¸ªå¯èƒ½å‡ºçŽ°çš„æƒ…å†µã€‚éšç€é¡¹ç›®æŽ¨è¿›åŠç事掺æ‚è¿›æ¥ï¼Œè¿™äº›ä»£ç æœ¬èº«å˜å¾—混乱了。函数体比他们本æ¥è¯¥æœ‰çš„æ ·å­è¿˜è¦é•¿ã€‚空的类是一ç§å†™æ–‡æ¡£çš„è´Ÿæ‹…ï¼Œåœ¨åŽ‹åŠ›ä¹‹ä¸‹ï¼Œå®ƒä»¬ä¼šè¢«å¿½ç•¥ã€‚å¦‚æžœèŠ±åœ¨æŠ½è±¡ä¸Šçš„ç²¾åŠ›èŠ±åœ¨äº†ä¿æŒäº‹æƒ…简短上,最åŽçš„结果应该会更好。这是一ç§*推测编程*的形å¼ã€‚我强烈推èPAUL gRAHAM[PGSite]的这篇文章['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html)。 +æŠ½è±¡æ˜¯ç¼–ç¨‹çš„å…³é”®ã€‚ä½ åº”è¯¥ä»”ç»†é€‰æ‹©ä½ éœ€è¦æŠ½è±¡çš„ç¨‹åº¦ã€‚å……æ»¡æ´»åŠ›çš„åˆå­¦è€…ç»å¸¸åˆ›å»ºè®¸å¤šæ²¡æœ‰ä»€ä¹ˆç”¨çš„æŠ½è±¡ã€‚一个标识是,你是å¦åˆ›å»ºäº†è¿™æ ·ä¸€ä¸ªç±»,ä¸åŒ…å«ä»»ä½•代ç å¹¶ä¸”没有真的åšä»€ä¹ˆäº‹æƒ…,é™¤äº†æŠ½è±¡ä¸€äº›ä¸œè¥¿ã€‚è¿™ç§æŠ½è±¡æ˜¯å¯ä»¥ç†è§£çš„,但代ç çš„ç®€æ´æ€§çš„价值必须与代ç çš„æŠ½è±¡ä»·å€¼ç›¸æƒè¡¡ã€‚有时候,我们å¯ä»¥çœ‹åˆ°ä¸€ç§çƒ­æƒ…çš„ç†æƒ³ä¸»ä¹‰è€…çŠ¯çš„é”™è¯¯ï¼šåœ¨å·¥ç¨‹çš„ä¸€å¼€å§‹ï¼Œå®šä¹‰äº†ä¸€å¤§å †çš„çœ‹èµ·æ¥æŠ½è±¡å¾—å¾ˆç¾Žçš„ç±»ï¼Œç„¶åŽä»–会推测说它们å¯ä»¥å¤„ç†æ¯ä¸€ä¸ªå¯èƒ½å‡ºçŽ°çš„æƒ…å†µã€‚éšç€é¡¹ç›®æŽ¨è¿›åŠç事掺æ‚è¿›æ¥ï¼Œè¿™äº›ä»£ç æœ¬èº«å˜å¾—混乱了。函数体比他们本æ¥è¯¥æœ‰çš„æ ·å­è¿˜è¦é•¿ã€‚空的类是一ç§å†™æ–‡æ¡£çš„è´Ÿæ‹…ï¼Œåœ¨åŽ‹åŠ›ä¹‹ä¸‹ï¼Œå®ƒä»¬ä¼šè¢«å¿½ç•¥ã€‚å¦‚æžœè®©èŠ±åœ¨æŠ½è±¡ä¸Šçš„ç²¾åŠ›åŽ»ä¿æŒå…¶ç®€çŸ­ï¼Œæœ€åŽçš„结果应该会更好。这是一ç§*推测编程*的形å¼ã€‚我强烈推è PAUL gRAHAM[PGSite] 的这篇文章 ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html)。 -有这样一ç§å…³äºŽ*ä¿¡æ¯å°è£…*å’Œ*é¢å‘对象编程*的有用技能,但有时候它们被带远了。这些技术让一个人抽象地编ç å¹¶é¢„è®¡å˜æ•°ã€‚然而,我个人认为,你ä¸åº”该写太多推测性的代ç ã€‚例如,在一个对象里用增é‡å™¨å’Œè®¿é—®å™¨éšè—一个整数å˜é‡æ˜¯ä¸€ç§å¯æŽ¥å—的风格,这样å˜é‡æœ¬èº«å°±æ²¡æœ‰æš´éœ²ï¼Œä»…仅暴露了很少的关于它的接å£ã€‚这确实å…许了å˜é‡çš„实现的改å˜ä¸å½±å“调用代ç ï¼Œå¹¶ä¸”å¯èƒ½å¯¹ä¸€ä¸ªå¿…é¡»æä¾›ä¸€ä¸ªç¨³å®šAPI的库编写者是åˆé€‚的。但我ä¸è®¤ä¸ºè¿™ç§å¥½å¤„会超过,当我的团队拥有调用代ç å¹¶å› æ­¤å¯ä»¥æŠŠè°ƒç”¨å™¨é‡æž„为比原æ¥çš„æ›´å®¹æ˜“时,冗长的代价。四到五行多余的代ç ä¼šæ˜¯è¿™ç§æŽ¨æµ‹æ€§å¥½å¤„的沉é‡ä»£ä»·ã€‚ +有这样一ç§å…³äºŽ*ä¿¡æ¯å°è£…*å’Œ*é¢å‘对象编程*的有用技能,但有时候它们被带远了。这些技术让一个人抽象地编ç å¹¶é¢„è®¡å˜æ•°ã€‚然而,我个人认为,你ä¸åº”该写太多推测性的代ç ã€‚例如,在一个对象里用增é‡å™¨å’Œè®¿é—®å™¨éšè—一个整数å˜é‡æ˜¯ä¸€ç§å¯æŽ¥å—的风格,这样å˜é‡æœ¬èº«å°±æ²¡æœ‰æš´éœ²ï¼Œä»…仅暴露了很少的关于它的接å£ã€‚这确实å…许了å˜é‡çš„实现的改å˜ä¸å½±å“调用代ç ï¼Œå¹¶ä¸”å¯èƒ½å¯¹ä¸€ä¸ªå¿…é¡»æä¾›ä¸€ä¸ªç¨³å®š API 的库编写者是åˆé€‚的。我ä¸è®¤ä¸ºè¿™ç§å¥½å¤„会超过其冗长的代价,特别是当我的团队拥有调用代ç å¹¶å› æ­¤å¯ä»¥æŠŠè°ƒç”¨å™¨é‡æž„为比原æ¥çš„æ›´å®¹æ˜“时。四到五行多余的代ç ä¼šæ˜¯è¿™ç§æŽ¨æµ‹æ€§å¥½å¤„的沉é‡ä»£ä»·ã€‚ -å¯ç§»æ¤æ€§ä¹Ÿæœ‰ç±»ä¼¼çš„é—®é¢˜ã€‚ä»£ç æ˜¯å¦åº”当å¯ç§»æ¤åˆ°ä¸åŒçš„电脑,编译器,软件系统或平å°ï¼Ÿè¿˜æ˜¯ç®€å•地传输?我认为,ä¸å¯ç§»æ¤ï¼ŒçŸ­è€Œç®€å•ä¼ è¾“çš„ä»£ç æ¯”长而å¯ç§»æ¤çš„代ç è¦å¥½ã€‚把ä¸å¯ç§»æ¤ä»£ç é™åˆ¶åœ¨ç‰¹å®šçš„领域是相当方便的,并且当然是一个好主æ„。比如一个使用了特定DBMS的数æ®åº“查询的类。 +å¯ç§»æ¤æ€§ä¹Ÿæœ‰ç±»ä¼¼çš„é—®é¢˜ã€‚ä»£ç æ˜¯å¦åº”当å¯ç§»æ¤åˆ°ä¸åŒçš„电脑,编译器,软件系统或平å°ï¼Ÿè¿˜æ˜¯ç®€å•地传输?我认为,ä¸å¯ç§»æ¤ï¼ŒçŸ­è€Œç®€å•ä¼ è¾“çš„ä»£ç æ¯”长而å¯ç§»æ¤çš„代ç è¦å¥½ã€‚把ä¸å¯ç§»æ¤ä»£ç é™åˆ¶åœ¨ç‰¹å®šçš„领域是一个想对轻æ¾è€Œä¸”无疑是好的主æ„。比如一个使用了特定 DBMS 的数æ®åº“查询的类。 Next [如何学习新技能](06-How to Learn New Skills.md) diff --git a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index 1bf2ee4..84bcd3f 100644 --- a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -1,13 +1,13 @@ # 如何学习新技能 -å­¦ä¹ æ–°æŠ€èƒ½ï¼Œå°¤å…¶æ˜¯éžæŠ€æœ¯ç±»ï¼Œæ˜¯æœ€å¤§çš„ä¸€ç§ä¹è¶£ã€‚大多数公å¸åœ¨ç†è§£äº†è¿™å¯¹ç¨‹åºå‘˜çš„æ¿€åŠ±ç¨‹åº¦æ—¶ï¼Œä¼šæ›´åŠ åœ°æœ‰æ–—å¿—ã€‚ +å­¦ä¹ æ–°æŠ€èƒ½ï¼Œå°¤å…¶æ˜¯éžæŠ€æœ¯ç±»ï¼Œæ˜¯æœ€å¤§çš„ä¸€ç§ä¹è¶£ã€‚大多数公å¸ä¼šæ›´åŠ æœ‰æ–—å¿—å¦‚æžœå®ƒä»¬æ˜Žç™½è¿™å¯¹ç¨‹åºå‘˜æ¥è¯´æ˜¯å¤šå¤§çš„æ¿€åŠ±ã€‚ 人类通过*åš*æ¥å­¦ã€‚读书和上课是有用的。但你对一个从ä¸å†™ç¨‹åºçš„程åºå‘˜ä¼šæœ‰ä»»ä½•敬æ„å—?学习任何技能,你应该把自己放在一个å¯ä»¥ç»ƒä¹ æŠ€èƒ½çš„宽容的ä½ç½®ã€‚学习一个新的编程语言时,在你必须åšä¸€ä¸ªå¤§å·¥ç¨‹å‰ï¼Œè¯•ç€ç”¨å®ƒåšä¸€ä¸ªå°çš„工程。学习管ç†è½¯ä»¶é¡¹ç›®æ—¶ï¼Œå…ˆè¯•ç€ç®¡ç†ä¸€ä¸ªå°çš„工程。 ä¸€ä¸ªå¥½çš„å¯¼å¸ˆä¸æ˜¯ä½ åšäº‹æƒ…的替代å“,而是比一本书更好的存在。你å¯ä»¥æä¾›ä»€ä¹ˆç»™ä¸€ä¸ªæ½œåœ¨çš„导师,作为他的知识的交æ¢ï¼Ÿè‡³å°‘,你应该努力学习这样他们的时间æ‰ä¸ä¼šè¢«æµªè´¹ã€‚ -试ç€è®©ä½ çš„boss给你正规的训练,但必须知é“,这通常并ä¸ä¼šæ¯”,把相åŒé‡çš„æ—¶é—´èŠ±åœ¨ï¼Œç®€å•地用你想学的技能玩è€ä¸Šï¼Œè¦å¥½å¤šå°‘ã€‚ç„¶è€Œï¼Œè¦æ±‚训练比在我们ä¸å®Œç¾Žä¸–ç•Œé‡Œçš„çŽ©è€æ—¶é—´è¦å®¹æ˜“å¾—å¤šï¼Œå°½ç®¡å¤§é‡æ­£è§„è®­ç»ƒåªæ˜¯åœ¨è¯¾ç¨‹ä¸Šç¡è§‰ï¼Œç­‰ç€æ™šé¤èšä¼šã€‚ +试ç€è®©ä½ çš„ boss 给你正规的训练,但必须知é“,这通常并ä¸ä¼šæ¯”把相åŒé‡çš„æ—¶é—´èŠ±åœ¨ç”¨ä½ æƒ³å­¦çš„æŠ€èƒ½æ¥ç®€å•玩è€è¦å¥½ä¸Šå¤šå°‘ã€‚ç„¶è€Œï¼Œè¦æ±‚训练比在我们ä¸å®Œç¾Žä¸–ç•Œé‡Œçš„çŽ©è€æ—¶é—´è¦å®¹æ˜“å¾—å¤šï¼Œå°½ç®¡å¤§é‡æ­£è§„è®­ç»ƒåªæ˜¯åœ¨è¯¾ç¨‹ä¸Šç¡è§‰ï¼Œç­‰ç€æ™šé¤èšä¼šã€‚ -如果你领导团队,需è¦çŸ¥é“他们是怎么学习的,并且通过给他们安排适é‡çš„å’Œå¯ä»¥é”»ç‚¼ä»–们感兴趣的技能的工程。ä¸è¦å¿˜è®°ç¨‹åºå‘˜æœ€é‡è¦çš„æŠ€èƒ½ä¸æ˜¯æŠ€æœ¯ã€‚让你的团队æˆå‘˜æœ‰ä¸€ä¸ªæœºä¼šåŽ»çŽ©ï¼Œé”»ç‚¼å‹‡æ°”ï¼Œè¯šå®žï¼Œä»¥åŠäº¤æµã€‚ +如果你领导团队,需è¦çŸ¥é“他们是怎么学习的,并且通过给他们安排适é‡çš„和他们感兴趣的技能的工程æ¥é”»ç‚¼ä»–们。ä¸è¦å¿˜è®°ç¨‹åºå‘˜æœ€é‡è¦çš„æŠ€èƒ½ä¸æ˜¯æŠ€æœ¯ã€‚让你的团队æˆå‘˜æœ‰ä¸€ä¸ªæœºä¼šåŽ»çŽ©ï¼Œé”»ç‚¼å‹‡æ°”ï¼Œè¯šå®žï¼Œä»¥åŠäº¤æµã€‚ -Next [学会分类](07-Learn to Type.md) +Next [学会打字](07-Learn to Type.md) diff --git a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md index f75f60c..d8bc141 100644 --- a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -1,5 +1,5 @@ # 学会打字 -å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„æ‰¿è¯ºçš„ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当Michael Tiemann在MCC的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³å¦‚此急促以至于是ä¸å¯åˆ†è¾¨çš„。 +å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„è´£ä»»æ„Ÿæ˜¯ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当 Michael Tiemann 在 MCC 的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³æ˜¯å¦‚此的急促以至于难以分辨。 Next [如何åšé›†æˆæµ‹è¯•](08-How to Do Integration Testing.md) diff --git a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index 06dd8ce..dce6393 100644 --- a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -2,6 +2,6 @@ é›†æˆæµ‹è¯•是对已ç»è¿›è¡Œå•元测试的å„ä¸ªéƒ¨åˆ†çš„ä¸€ç§æ•´åˆæµ‹è¯•ã€‚é›†æˆæ˜¯æ˜‚贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 -ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯é›†æˆå¿…须显å¼è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,仔细评估。 +ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯å¿…须通过显å¼é›†æˆæ¥è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,请仔细评估。 Next [交æµè¯­è¨€](09-Communication Languages.md) diff --git a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md index 30fe064..9ea93f1 100644 --- a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -1,11 +1,11 @@ # 交æµè¯­è¨€ -在语法系统里,有一些正å¼å®šä¹‰çš„,éžç¼–程语言但是*交æµè¯­è¨€*的语言,它们为促进交æµè€Œéžæ ‡å‡†è€Œç‰¹åˆ«è®¾è®¡ã€‚2003年,最é‡è¦çš„è¿™ç§è¯­è¨€æœ‰ï¼šUML,XML, SQL。你应该熟悉这些东西,这样你就å¯ä»¥å¾ˆå¥½åœ°äº¤æµå¹¶ä¸”决定什么时候去使用它们。 +在语法系统里,有一些正å¼å®šä¹‰çš„,éžç¼–程语言但是*交æµè¯­è¨€*的语言,它们为促进交æµè€Œéžæ ‡å‡†è€Œç‰¹åˆ«è®¾è®¡ã€‚2003年,最é‡è¦çš„è¿™ç§è¯­è¨€æœ‰ï¼š UML, XML, SQL。你应该熟悉这些东西,这样你就å¯ä»¥å¾ˆå¥½åœ°äº¤æµå¹¶ä¸”决定什么时候去使用它们。 -UML是一个丰富的用图表æè¿°è®¾è®¡çš„æ­£å¼ç³»ç»Ÿã€‚å®ƒçš„ç¾Žä¸½ä¹‹å¤„åœ¨äºŽå®ƒæ—¢è™šæ‹Ÿåˆæ­£å¼ï¼Œåœ¨ä½œè€…和观众都了解UMLçš„å‰æä¸‹ï¼Œå¯ä»¥å®¹çº³å¤§é‡çš„ä¿¡æ¯ã€‚你需è¦äº†è§£å®ƒï¼Œå› ä¸ºè®¾è®¡æœ‰æ—¶å€™å°±æ˜¯ç”¨è¿™ç§æ–¹å¼äº¤æµçš„。有一些éžå¸¸æœ‰ç”¨çš„工具å¯ä»¥è®©åˆ¶ä½œUML图看起æ¥éžå¸¸ä¸“业。在很多情况下,UML太正å¼äº†ï¼Œæˆ‘自己会使用更简å•çš„*ç®±å­ä¸Žç®­å¤´*的风格æ¥è®¾è®¡å›¾æ ‡ã€‚但我éžå¸¸ç¡®å®šUML对你æ¥è¯´è‡³å°‘跟学习拉ä¸è¯­ä¸€æ ·æœ‰ç”¨ï¼ˆè¯‘者注:国外拉ä¸è¯­ä½¿ç”¨å¾ˆå¹¿æ³›ï¼‰ã€‚ +UML 是一个丰富的用图表æè¿°è®¾è®¡çš„æ­£å¼ç³»ç»Ÿã€‚å®ƒçš„ç¾Žä¸½ä¹‹å¤„åœ¨äºŽå®ƒæ—¢è™šæ‹Ÿåˆæ­£å¼ï¼Œåœ¨ä½œè€…和观众都了解 UML çš„å‰æä¸‹ï¼Œå¯ä»¥å®¹çº³å¤§é‡çš„ä¿¡æ¯ã€‚你需è¦äº†è§£å®ƒï¼Œå› ä¸ºè®¾è®¡æœ‰æ—¶å€™å°±æ˜¯ç”¨è¿™ç§æ–¹å¼äº¤æµçš„。有一些éžå¸¸æœ‰ç”¨çš„工具å¯ä»¥è®©åˆ¶ä½œ UML 图看起æ¥éžå¸¸ä¸“业。在很多情况下,UML 太正å¼äº†ï¼Œæˆ‘自己会使用更简å•çš„*ç®±å­ä¸Žç®­å¤´*的风格æ¥è®¾è®¡å›¾æ ‡ã€‚但我éžå¸¸ç¡®å®š UML 对你æ¥è¯´è‡³å°‘跟学习拉ä¸è¯­ä¸€æ ·æœ‰ç”¨ï¼ˆè¯‘者注:国外拉ä¸è¯­ä½¿ç”¨å¾ˆå¹¿æ³›ï¼‰ã€‚ -XMLæ˜¯è®¾è®¡æ–°æ ‡å‡†çš„æ ‡å‡†ã€‚è¿™ä¸æ˜¯ä¸€ä¸ªæ•°æ®é—´äº¤æ¢çš„é—®é¢˜çš„è§£å†³æ–¹æ¡ˆï¼Œå°½ç®¡ä½ æœ‰æ—¶å€™ä¼šçœ‹åˆ°å®ƒåœ¨è¿™ç§æƒ…况下出现。更进一步,它是一ç§å—欢迎的对大部分数æ®äº¤æ¢çš„æ— èŠéƒ¨åˆ†çš„自动化,也就是,把表现结构化为线性åºåˆ—,还有将其转回一个结构。它æä¾›äº†ä¸€äº›æ¼‚亮的类型和正确性检查,尽管,åˆä¸€æ¬¡ï¼Œå®žè·µä¸­ä½ å¯èƒ½éœ€è¦çš„åªæ˜¯å…¶ä¸­çš„一部分。 +XML æ˜¯è®¾è®¡æ–°æ ‡å‡†çš„æ ‡å‡†ã€‚è¿™ä¸æ˜¯ä¸€ä¸ªæ•°æ®é—´äº¤æ¢çš„é—®é¢˜çš„è§£å†³æ–¹æ¡ˆï¼Œå°½ç®¡ä½ æœ‰æ—¶å€™ä¼šçœ‹åˆ°å®ƒåœ¨è¿™ç§æƒ…况下出现。更进一步,它是一ç§å—欢迎的对大部分数æ®äº¤æ¢çš„æ— èŠéƒ¨åˆ†çš„自动化,也就是,把表现结构化为线性åºåˆ—,还有将其转回一个结构。它æä¾›äº†ä¸€äº›æ¼‚亮的类型和正确性检查,尽管,åˆä¸€æ¬¡ï¼Œå®žè·µä¸­ä½ å¯èƒ½éœ€è¦çš„åªæ˜¯å…¶ä¸­çš„一部分。 -SQL是一ç§éžå¸¸æœ‰åŠ›è€Œä¸°å¯Œçš„æ•°æ®æŸ¥è¯¢å’Œæ“作语言,而éžä¸€ç§ç¼–程语言。它有许多ç§ç±»ï¼Œå…¸åž‹åœ°ä¾èµ–于产å“,但这没有标准核心那么é‡è¦ã€‚SQL是关系数æ®åº“çš„*巧舌弗兰å¡*。你å¯èƒ½å¯ä»¥ä¹Ÿå¯èƒ½ä¸å¯ä»¥åœ¨ä»»ä½•领域从对关系数æ®åº“çš„ç†è§£ä¸­å—益,但你必须对它们和SQL的语法和å«ä¹‰æœ‰åŸºæœ¬çš„ç†è§£ã€‚ +SQL 是一ç§éžå¸¸æœ‰åŠ›è€Œä¸°å¯Œçš„æ•°æ®æŸ¥è¯¢å’Œæ“作语言,而éžä¸€ç§ç¼–程语言。它有许多ç§ç±»ï¼Œå…¸åž‹åœ°ä¾èµ–于产å“,但这没有标准核心那么é‡è¦ã€‚SQL 是关系数æ®åº“çš„*巧舌弗兰å¡*。你å¯èƒ½å¯ä»¥ä¹Ÿå¯èƒ½ä¸å¯ä»¥åœ¨ä»»ä½•领域从对关系数æ®åº“çš„ç†è§£ä¸­å—益,但你必须对它们和 SQL 的语法和å«ä¹‰æœ‰åŸºæœ¬çš„ç†è§£ã€‚ Next [é‡åž‹å·¥å…·](10-Heavy Tools.md) diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md index 10860c9..3a52e81 100644 --- a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -2,13 +2,13 @@ éšç€æˆ‘们的科技文化的进步,软件技术从ä¸å¯æƒ³è±¡ï¼Œåˆ°ç ”究,到新的产å“,到标准化产å“,到广泛å¯ç”¨å’Œå»‰ä»·äº§å“。这些é‡åž‹å·¥å…·å¯ä»¥æ‹‰åŠ¨å¾ˆå¤§çš„è´Ÿè½½ï¼Œä½†å¯èƒ½æ˜¯è¿›é˜¶çš„,并且需è¦èŠ±å¤§é‡æŠ•èµ„åŽ»ç†è§£ã€‚进阶程åºå‘˜å¿…须知é“如何管ç†å®ƒä»¬ä»¥åŠå®ƒä»¬ä»€ä¹ˆæ—¶å€™åº”该被使用或考虑。 -现在在我看æ¥ï¼Œæœ€å¥½çš„é‡åž‹å·¥å…·æ˜¯ï¼š +现在在我看æ¥ï¼Œä¸€äº›æœ€å¥½çš„é‡åž‹å·¥å…·æ˜¯ï¼š - 关系数æ®åº“ï¼› - 全文æœç´¢å¼•擎; - 数学库; - OpenGL; -- XMLè§£æžå™¨ï¼› +- XML è§£æžå™¨ï¼› - 电å­è¡¨æ ¼ã€‚ Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How to analyze data.md) diff --git a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md index f653768..00a1832 100644 --- a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -4,14 +4,14 @@ 䏿˜¯è¿™æ ·çš„。 -ä¸ç®¡ä½ å¼€å§‹è§‚å¯Ÿå®ƒçš„æ˜¯å“ªä¸ªé˜¶æ®µï¼Œæ•°æ®æ˜¯è‰¯å¥½è®¾è®¡çš„应用程åºçš„主è¦è€ƒè™‘因素,如果你仔细观察一个数æ®åˆ†æžå¸ˆæ˜¯æ€Žä¹ˆä»Žå®¢æˆ·è¯·æ±‚中获å–需求的,你会æ„è¯†åˆ°ï¼Œæ•°æ®æ‰®æ¼”了一个基本的角色。分æžå¸ˆåˆ›å»ºäº†æ‰€è°“çš„æ•°æ®æµè¡¨ï¼Œæ‰€æœ‰çš„æ•°æ®æºè¢«æ ‡è®°å‡ºæ¥ï¼Œä¿¡æ¯çš„æµåŠ¨è¢«å¡‘é€ å‡ºæ¥ã€‚清晰定义了什么数æ®åº”该是系统的一部分,设计师将会用数æ®å…³ç³»ï¼Œæ•°æ®äº¤æ¢å议,文件格å¼çš„å½¢å¼å¡‘é€ æ•°æ®æºï¼Œè¿™æ ·ä»»åŠ¡å°±å‡†å¤‡å¥½ä¼ é€’ç»™ç¨‹åºå‘˜äº†ã€‚然而,这个过程还没结æŸï¼Œå› ä¸ºä½ ï¼ˆç¨‹åºå‘˜ï¼‰åœ¨è¿™ä¸ªå‘¨å¯†çš„æ•°æ®æå–过程åŽï¼Œéœ€è¦åˆ†æžæ•°æ®ä»¥ç”¨æœ€å¥½çš„å¯èƒ½æ–¹å¼è¡¨çŽ°ä»»åŠ¡ã€‚ä½ çš„ä»»åŠ¡çš„åº•çº¿æ˜¯Niklaus Wirth,多ç§è¯­è¨€ä¹‹çˆ¶ï¼Œçš„金å¥ï¼šâ€œç®—法+æ•°æ®ç»“æž„=程åºâ€ã€‚è¿™æ°¸è¿œä¸æ˜¯ä¸€ä¸ªç‹¬ç«‹çš„自嗨的算法。æ¯ä¸ªç®—法都至少被设计去åšä¸€äº›è‡³å°‘与一段数æ®ç›¸å…³çš„事情。 +ä¸ç®¡ä½ å¼€å§‹è§‚å¯Ÿå®ƒçš„æ˜¯å“ªä¸ªé˜¶æ®µï¼Œæ•°æ®æ˜¯ä¸€ä¸ªè‰¯å¥½è®¾è®¡çš„应用程åºä¸»è¦è€ƒè™‘的因素,如果你仔细观察一个数æ®åˆ†æžå¸ˆæ˜¯æ€Žä¹ˆä»Žå®¢æˆ·è¯·æ±‚中获å–需求的,你会æ„è¯†åˆ°ï¼Œæ•°æ®æ‰®æ¼”了一个基本的角色。分æžå¸ˆåˆ›å»ºäº†æ‰€è°“çš„æ•°æ®æµè¡¨ï¼Œæ‰€æœ‰çš„æ•°æ®æºè¢«æ ‡è®°å‡ºæ¥ï¼Œä¿¡æ¯çš„æµåŠ¨è¢«å¡‘é€ å‡ºæ¥ã€‚清晰定义了什么数æ®åº”该是系统的一部分,设计师将会用数æ®å…³ç³»ï¼Œæ•°æ®äº¤æ¢å议,文件格å¼çš„å½¢å¼å¡‘é€ æ•°æ®æºï¼Œè¿™æ ·ä»»åŠ¡å°±å‡†å¤‡å¥½ä¼ é€’ç»™ç¨‹åºå‘˜äº†ã€‚然而,这个过程还没结æŸï¼Œå› ä¸ºä½ ï¼ˆç¨‹åºå‘˜ï¼‰åœ¨è¿™ä¸ªå‘¨å¯†çš„æ•°æ®æå–过程åŽï¼Œéœ€è¦åˆ†æžæ•°æ®ä»¥ç”¨æœ€å¥½çš„å¯èƒ½æ–¹å¼è¡¨çŽ°ä»»åŠ¡ã€‚ä½ çš„ä»»åŠ¡çš„åº•çº¿æ˜¯ Niklaus Wirth,多ç§è¯­è¨€ä¹‹çˆ¶ï¼Œçš„金å¥ï¼šâ€œç®—法+æ•°æ®ç»“æž„=程åºâ€ã€‚è¿™æ°¸è¿œä¸æ˜¯ä¸€ä¸ªç‹¬ç«‹çš„自嗨的算法。æ¯ä¸ªç®—法都至少被设计去åšä¸€äº›è‡³å°‘与一段数æ®ç›¸å…³çš„事情。 因此,由于算法ä¸ä¼šåœ¨çœŸç©ºä¸­æ»šåŠ¨è½®å­ï¼Œä½ éœ€è¦åˆ†æžå…¶ä»–人已ç»ä¸ºä½ æ ‡è®°å¥½çš„æ•°æ®å’Œå¿…须写入代ç çš„å¿…è¦çš„æ•°æ®ã€‚ -一个å°ä¾‹å­ä¼šä½¿å¾—事情更清楚。实现一个图书馆的æœç´¢ç¨‹åºæ—¶ï¼Œé€šè¿‡ä½ çš„说明书,用户用类型/作者标题/出版社/出版年份/页数æ¥é€‰æ‹©ä¹¦æœ¬ã€‚你的程åºçš„中级目标是æä¾›ä¸€ä¸ªåˆæ³•çš„SQL语å¥åŽ»æœç´¢åŽç«¯æ•°æ®åº“。基于这些需è¦ï¼Œä½ æœ‰å‡ ä¸ªé€‰æ‹©ï¼šæŒ‰é¡ºåºæ£€æŸ¥æ¯ä¸ªæŽ§åˆ¶æ¡ä»¶ï¼Œä½¿ç”¨ä¸€ä¸ªswitch语å¥ï¼Œæˆ–者几个if语å¥ï¼›ç”¨ä¸€ä¸ªæ•°æ®æŽ§åˆ¶æ•°ç»„,把它们与一个事件驱动引擎相连。 +一个å°ä¾‹å­ä¼šä½¿å¾—事情更清楚。实现一个图书馆的æœç´¢ç¨‹åºæ—¶ï¼Œé€šè¿‡ä½ çš„说明书,用户用类型/作者标题/出版社/出版年份/页数æ¥é€‰æ‹©ä¹¦æœ¬ã€‚你的程åºçš„中级目标是æä¾›ä¸€ä¸ªåˆæ³•çš„ SQL 语å¥åŽ»æœç´¢åŽç«¯æ•°æ®åº“。基于这些需è¦ï¼Œä½ æœ‰å‡ ä¸ªé€‰æ‹©ï¼šæŒ‰é¡ºåºæ£€æŸ¥æ¯ä¸ªæŽ§åˆ¶æ¡ä»¶ï¼Œä½¿ç”¨ä¸€ä¸ª switch 语å¥ï¼Œæˆ–者几个 if 语å¥ï¼›ç”¨ä¸€ä¸ªæ•°æ®æŽ§åˆ¶æ•°ç»„,把它们与一个事件驱动引擎相连。 -如果你的需求也包括æé«˜æŸ¥è¯¢æ€§èƒ½ï¼Œé€šè¿‡ç¡®è®¤æ¯ä¸ªé¡¹åœ¨ä¸€ä¸ªç‰¹æ®Šé¡ºåºé‡Œï¼Œä½ å¯èƒ½è€ƒè™‘使用组件树去构建你的SQL语å¥ã€‚正如你å¯ä»¥çœ‹åˆ°çš„,算法的选择ä¾èµ–于你决定使用或将è¦åˆ›å»ºçš„æ•°æ®ã€‚这样的决定产生高效算法和糟糕算法间的区别。 +如果你的需求也包括æé«˜æŸ¥è¯¢æ€§èƒ½ï¼Œé€šè¿‡ç¡®è®¤æ¯ä¸ªé¡¹åœ¨ä¸€ä¸ªç‰¹æ®Šé¡ºåºé‡Œï¼Œä½ å¯èƒ½è€ƒè™‘使用组件树去构建你的 SQL 语å¥ã€‚正如你å¯ä»¥çœ‹åˆ°çš„,算法的选择ä¾èµ–于你决定使用或将è¦åˆ›å»ºçš„æ•°æ®ã€‚这样的决定产生高效算法和糟糕算法间的区别。 然而,æ•ˆçŽ‡ä¸æ˜¯å”¯ä¸€è¦è€ƒè™‘的因素。你å¯èƒ½åœ¨ä½ çš„代ç é‡Œä½¿ç”¨ä¸€æ‰“命åå˜é‡ï¼Œè®©å®ƒå˜å¾—å°½å¯èƒ½é«˜æ•ˆã€‚但这样一段代ç å¯èƒ½ä¸èƒ½å®¹æ˜“地维护。å¯èƒ½ä¸ºä½ çš„å˜é‡é€‰æ‹©ä¸€ç§åˆé€‚的容器å¯ä»¥ä¿æŒç›¸åŒçš„速度,此外,在的你åŒäº‹æ˜Žå¹´çœ‹ä»£ç çš„æ—¶å€™ï¼Œè®©ä»–们能够更好地ç†è§£ä»£ç ã€‚更多的,选择一个良好设计的数æ®ç»“æž„å¯èƒ½å…许他们在ä¸é‡å†™ä»£ç çš„å‰æä¸‹ï¼Œæ‹“å±•ä½ çš„ä»£ç çš„功能。长久看æ¥ï¼Œä½ å¯¹æ•°æ®çš„选择决定了你结æŸä»£ç çš„工作åŽï¼Œå®ƒèƒ½å·¥ä½œå¤šä¹…。 -让我给你看å¦ä¸€ä¸ªä¾‹å­ï¼Œåªæ˜¯ä¸€äº›æ€æƒ³ç²®é£Ÿï¼Œè®©æˆ‘们å‡è®¾ä½ çš„任务是找到字典里超过三ä½çš„åŒå­—异构è¯ï¼ˆä¸€ä¸ªå¼‚æž„è¯å¿…é¡»åœ¨åŒæ ·çš„字典里有å¦ä¸€ä¸ªè¯ï¼‰ã€‚如果你把这当åšä¸€ä¸ªè®¡ç®—任务,你将会结æŸäºŽæ— å°½çš„,å°è¯•找出æ¯ä¸ªå•è¯çš„æ‰€æœ‰ç»„åˆï¼Œç„¶åŽæ‹¿å®ƒè·Ÿåˆ—表里的所有其他å•è¯æ¯”较,这样一个无尽的努力中。然而,如果你分æžäº†æ‰‹å¤´çš„æ•°æ®ï¼Œä½ ä¼šæ„识到,æ¯ä¸ªå•è¯å¯èƒ½è¢«ä¸€ä¸ªåŒ…å«è¿™ä¸ªè¯æœ¬èº«ä»¥åŠç”¨å®ƒçš„å­—æ¯ä½œä¸ºIDçš„æŽ’åºæ•°ç»„的记录所代表,这个蛮力算法å¯èƒ½éœ€è¦è¿è¡Œå‡ å¤©ï¼Œè€Œå°çš„é‚£ä¸ªç®—æ³•åªæ˜¯ä¸€ä»¶å‡ ç§’的事。下次é¢å¯¹ä¸€ä¸ªæ£˜æ‰‹çš„问题时,记ä½è¿™ä¸ªä¾‹å­ã€‚ +让我给你看å¦ä¸€ä¸ªä¾‹å­ï¼Œåªæ˜¯ä¸€äº›æ€æƒ³ç²®é£Ÿï¼Œè®©æˆ‘们å‡è®¾ä½ çš„任务是找到字典里超过三ä½çš„åŒå­—异构è¯ï¼ˆä¸€ä¸ªå¼‚æž„è¯å¿…é¡»åœ¨åŒæ ·çš„字典里有å¦ä¸€ä¸ªè¯ï¼‰ã€‚如果你把这当åšä¸€ä¸ªè®¡ç®—任务,你将会结æŸäºŽæ— å°½çš„,å°è¯•找出æ¯ä¸ªå•è¯çš„æ‰€æœ‰ç»„åˆï¼Œç„¶åŽæ‹¿å®ƒè·Ÿåˆ—表里的所有其他å•è¯æ¯”较,这样一个无尽的努力中。然而,如果你分æžäº†æ‰‹å¤´çš„æ•°æ®ï¼Œä½ ä¼šæ„识到,æ¯ä¸ªå•è¯å¯èƒ½è¢«ä¸€ä¸ªåŒ…å«è¿™ä¸ªè¯æœ¬èº«ä»¥åŠç”¨å®ƒçš„å­—æ¯ä½œä¸º ID çš„æŽ’åºæ•°ç»„的记录所代表,这个蛮力算法å¯èƒ½éœ€è¦è¿è¡Œå‡ å¤©ï¼Œè€Œå°çš„é‚£ä¸ªç®—æ³•åªæ˜¯ä¸€ä»¶å‡ ç§’的事。下次é¢å¯¹ä¸€ä¸ªæ£˜æ‰‹çš„问题时,记ä½è¿™ä¸ªä¾‹å­ã€‚ Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How to Manage Development Time.md) diff --git a/zh/2-Intermediate/README.md b/zh/2-Intermediate/README.md index 61384be..a3b5378 100644 --- a/zh/2-Intermediate/README.md +++ b/zh/2-Intermediate/README.md @@ -24,6 +24,6 @@ - [如何判断一个软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How to Decide if Software is Too Immature.md) - [如何决定购买还是构建](Judgment/04-How to Make a Buy vs Build Decision.md) - [如何专业地æˆé•¿](Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•](Judgment/06-How to Evaluate Interviewees.md) + - [如何评估é¢è¯•者](Judgment/06-How to Evaluate Interviewees.md) - [如何知é“何时实施昂贵的计算机科学](Judgment/07-How to Know When to Apply Fancy Computer Science.md) - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How to Talk to Non-Engineers.md) diff --git a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index 3a4159f..c21cc05 100644 --- a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -2,10 +2,10 @@ 管ç†å¼€å‘时间,需è¦ç»´æŠ¤ä¸€ä¸ªç®€æ˜Žä¸”实时更新的计划。一个工程计划是一个估计,一个时间表,一系列å–得进步的里程碑,还有对你的团队或者你的时间在æ¯ä¸ªä»»åŠ¡çš„ä¼°è®¡å’Œå®‰æŽ’ã€‚è¿™ä¹Ÿåº”è¯¥åŒ…æ‹¬ä½ éœ€è¦è®°å¾—去åšçš„其他事,比如与质é‡ä¿éšœäººå‘˜è§é¢ï¼Œå‡†å¤‡æ–‡æ¡£ï¼Œæˆ–è€…è®¢è´­è®¾å¤‡ã€‚å¦‚æžœä½ åœ¨ä¸€ä¸ªå›¢é˜Ÿé‡Œï¼Œå·¥ç¨‹è®¡åˆ’ä¼šæ˜¯ä¸€ä¸ªå…±åŒæ‰¿è®¤çš„å议,ä¸è®ºæ˜¯åœ¨å¼€å§‹ï¼Œè¿˜æ˜¯è¿›è¡Œçš„过程中。 -功能工程计划存在的æ„义是帮助åšå‡ºå†³å®šï¼Œè€Œéžå±•ç¤ºä½ æ˜¯å¦‚ä½•ç»„ç»‡çš„ã€‚å¦‚æžœä¸€ä¸ªå·¥ç¨‹è®¡åˆ’å¤ªé•¿æˆ–è€…ä¸æ˜¯æœ€æ–°çš„,它对åšå‡ºå†³å®šå°†æ˜¯æ— ç”¨çš„。现实中,这些决定通常是关于独立的个人的。计划和你的判断让你决定你是å¦åº”当把任务从一个人身上移到å¦ä¸€ä¸ªäººèº«ä¸Šã€‚里程碑标识了你的进步。如果你有一个奇妙的工程规划工具,ä¸è¦è¢«ä¸ºå·¥ç¨‹åˆ›å»ºä¸€ä¸ªè¡¨é¢å·¨å¤§è®¾è®¡ï¼ˆBig Design Up Front)所迷惑,但å¯ä»¥ç”¨å®ƒä¿æŒæ¸…晰和实时性。 +工程计划存在的æ„义是帮助åšå‡ºå†³å®šï¼Œè€Œéžå±•ç¤ºä½ æ˜¯å¦‚ä½•ç»„ç»‡çš„ã€‚å¦‚æžœä¸€ä¸ªå·¥ç¨‹è®¡åˆ’å¤ªé•¿æˆ–è€…ä¸æ˜¯æœ€æ–°çš„,它对åšå‡ºå†³å®šå°†æ˜¯æ— ç”¨çš„。现实中,这些决定通常是关于独立的个人的。计划和你的判断让你决定你是å¦åº”当把任务从一个人身上移到å¦ä¸€ä¸ªäººèº«ä¸Šã€‚里程碑标识了你的进展。如果你有一个奇妙的工程规划工具,ä¸è¦è¢«ä¸ºå·¥ç¨‹åˆ›å»ºä¸€ä¸ªè¡¨é¢å·¨å¤§è®¾è®¡ï¼ˆBig Design Up Front)所迷惑,但å¯ä»¥ç”¨å®ƒä¿æŒæ¸…晰和实时性。 -如果你没有一个里程碑,你应该采å–峿—¶çš„行动,比如通知你的bosså·¥ç¨‹å·²ç»æ»‘过的部分中进度的完æˆã€‚è¿™ç§ä¼°è®¡å’Œæ—¶é—´è¡¨å¯èƒ½ä¸ä¼šåœ¨å¼€å§‹æ—¶å¾ˆå®Œç¾Žï¼Œè¿™ä¼šäº§ç”Ÿè¿™æ ·ä¸€ç§å¹»è§‰ï¼Œä½ èƒ½å¤Ÿå¡«è¡¥å·¥ç¨‹çš„上一个部分中错过的日志。你å¯ä»¥ã€‚但这很å¯èƒ½æ˜¯å› ä¸ºä½ ä½Žä¼°äº†é‚£ä¸ªéƒ¨åˆ†æˆ–者高估了一部分。所以工程进度的完æˆå·²ç»æ»‘过了,ä¸ç®¡ä½ æ˜¯å¦å–œæ¬¢ã€‚ +如果你没有一个里程碑,你应该采å–峿—¶çš„行动,比如通知你的 boss å·¥ç¨‹å·²ç»æ»‘过的部分中进度的完æˆã€‚è¿™ç§ä¼°è®¡å’Œæ—¶é—´è¡¨å¯èƒ½ä¸ä¼šåœ¨å¼€å§‹æ—¶å¾ˆå®Œç¾Žï¼Œè¿™ä¼šäº§ç”Ÿè¿™æ ·ä¸€ç§å¹»è§‰ï¼Œä½ èƒ½å¤Ÿå¡«è¡¥å·¥ç¨‹çš„上一个部分中错过的日志。你å¯ä»¥ã€‚但这很å¯èƒ½æ˜¯å› ä¸ºä½ ä½Žä¼°äº†é‚£ä¸ªéƒ¨åˆ†æˆ–者高估了一部分。所以工程进度的完æˆå·²ç»æ»‘过了,ä¸ç®¡ä½ æ˜¯å¦å–œæ¬¢ã€‚ -ç¡®ä¿ä½ çš„计划包括了:内部团队会议,写代ç ï¼Œæ–‡æ¡£ï¼Œè§„åˆ’å‘¨æœŸæ´»åŠ¨ï¼Œé›†æˆæµ‹è¯•,处ç†å¤–部关系,疾病,休å‡ï¼Œå·²æœ‰å·¥ç¨‹ç»´æŠ¤ï¼Œè¿˜æœ‰å¼€å‘环境维护。工程计划å¯ä»¥ä½œä¸ºä¸€ç§ä¸ºå±€å¤–人或你的boss准备的关于你或你的团队正在åšçš„äº‹æƒ…çš„è§†å›¾ã€‚å› ä¸ºå¦‚æ­¤ï¼Œæ‰€ä»¥å®ƒåº”è¯¥æ˜¯çŸ­ä¸”åŠæ—¶æ›´æ–°çš„。 +ç¡®ä¿ä½ çš„计划包括了:内部团队会议,写代ç ï¼Œæ–‡æ¡£ï¼Œè§„åˆ’å‘¨æœŸæ´»åŠ¨ï¼Œé›†æˆæµ‹è¯•,处ç†å¤–部关系,疾病,休å‡ï¼Œå·²æœ‰å·¥ç¨‹ç»´æŠ¤ï¼Œè¿˜æœ‰å¼€å‘环境维护。工程计划å¯ä»¥ä½œä¸ºä¸€ç§ä¸ºå±€å¤–人或你的 boss 准备的关于你或你的团队正在åšçš„äº‹æƒ…çš„è§†å›¾ã€‚å› ä¸ºå¦‚æ­¤ï¼Œæ‰€ä»¥å®ƒåº”è¯¥æ˜¯çŸ­ä¸”åŠæ—¶æ›´æ–°çš„。 Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How to Manage Third-Party Software Risks.md) diff --git a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index 5e09cff..16cb211 100644 --- a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -1,10 +1,10 @@ # 如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº -一个工程通常ä¾èµ–于它所ä¸èƒ½æŽ§åˆ¶çš„ç»„ç»‡ï¼Œç¬¬ä¸‰æ–¹è½¯ä»¶å±æœºæ˜¯æ¯ä¸ªç›¸å…³çš„人都必须æ„识到的。 +一个工程通常ä¾èµ–于其ä¸èƒ½æŽ§åˆ¶çš„ç»„ç»‡æ‰€ç”Ÿäº§çš„è½¯ä»¶ï¼Œç¬¬ä¸‰æ–¹è½¯ä»¶å±æœºæ˜¯æ¯ä¸ªç›¸å…³çš„人都必须æ„识到的。 永远也ä¸è¦æŠŠå¸Œæœ›æ”¾åœ¨*蒸汽*上é¢ã€‚蒸汽是任何所谓的尚未å¯ç”¨ç„¶è€Œå£°ç§°å¯ç”¨çš„软件。这是最确定的一ç§ç ´äº§çš„æ–¹å¼ã€‚仅仅怀疑一个软件公å¸åœ¨æŸä¸ªæ—¥æœŸå¯¹äºŽæŸä¸ªè½¯ä»¶äº§å“çš„æŸä¸ªç‰¹æ€§çš„æ‰¿è¯ºæ˜¯ä¸æ˜Žæ™ºçš„ã€‚æ›´æ˜Žæ™ºçš„åšæ³•是完全忽略它,并且忘记你曾å¬è¯´è¿‡è¿™ç§äº‹ã€‚ä¸è¦åœ¨ä½ çš„å…¬å¸ä½¿ç”¨çš„任何文档里写下这些东西。 -å¦‚æžœä¸€ä¸ªç¬¬ä¸‰æ–¹è½¯ä»¶ä¸æ˜¯è’¸æ±½ï¼Œå®ƒä»ç„¶æ˜¯æœ‰é£Žé™©çš„,但至少它是一个å¯ä»¥å¤„ç†çš„蒸汽。如果你正在考虑使用第三方软件, 你应该早点投入一点精力去评估它。人们å¯èƒ½æ²¡å¬è¯´è¿‡ï¼Œè¯„估三个产å“çš„é€‚åˆæ€§è¦èŠ±ä¸¤ä¸ªæ˜ŸæœŸè¿˜æ˜¯ä¸¤ä¸ªæœˆï¼Œä½†è¿™å¿…é¡»å°½å¯èƒ½åŠæ—©åšã€‚没有åˆé€‚的估计,集æˆçš„代价ä¸èƒ½è¢«å‡†ç¡®è®¡ç®—。 +å¦‚æžœä¸€ä¸ªç¬¬ä¸‰æ–¹è½¯ä»¶ä¸æ˜¯è’¸æ±½ï¼Œå®ƒä»ç„¶æ˜¯æœ‰é£Žé™©çš„,但至少它是一个å¯ä»¥å¤„ç†çš„蒸汽。如果你正在考虑使用第三方软件, 你应该早点投入一点精力去评估它。人们å¯èƒ½æ²¡å¬è¯´è¿‡ï¼Œè¯„估三个产å“çš„é€‚åˆæ€§è¦èŠ±ä¸¤ä¸ªæ˜ŸæœŸè¿˜æ˜¯ä¸¤ä¸ªæœˆï¼Œä½†è¿™å¿…é¡»å°½å¯èƒ½åŠæ—©åšã€‚如果没有åˆé€‚的评估,集æˆçš„代价就ä¸èƒ½è¢«å‡†ç¡®è®¡ç®—。 ç†è§£å·²æœ‰çš„为æŸä¸ªç‰¹æ®Šç›®çš„的第三方软件的适用性是éžå¸¸è§ä»è§æ™ºçš„东西。这是éžå¸¸å®¢è§‚的,并且通常ä½åœ¨ä¸“家心里。如果你å‘现了那些专家,你å¯ä»¥èŠ‚çœå¾ˆå¤šæ—¶é—´ã€‚很多时候,一个工程会如此完全地ä¾èµ–于第三方软件,以至于如果集æˆå¤±è´¥äº†ï¼Œå·¥ç¨‹å°±å¤±è´¥äº†ã€‚åƒæ—¶é—´è¡¨é‡Œå†™çš„é‚£æ ·æ¸…æ™°åœ°è¡¨è¾¾äº†å±æœºã€‚å¦‚æžœå±æœºä¸èƒ½è¢«å°½æ—©æ¶ˆé™¤ï¼Œè¯•ç€è®¢ä¸€ä¸ªä¸ºæ„外准备的计划,比如å¯ç”¨çš„第二方案,或者自己写下功能点的能力。永远ä¸è¦è®©æ—¶é—´è¡¨ä¾èµ–于蒸汽。 diff --git a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 08c3fca..01c2d69 100644 --- a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -4,6 +4,6 @@ 然而,他们通常ä¸èƒ½åƒæ­£å¸¸å‘˜å·¥é‚£æ ·ç”¨ç›¸åŒçš„æ„Ÿè§‰èžå…¥å›¢é˜Ÿï¼Œå¯èƒ½ä»…仅是因为你没有足够的时间去学习他们的优点和缺点。他们的工资更低。他们更容易离开。如果公å¸åšå¾—好,他们å¯èƒ½å¾—到的更少。有些å¯èƒ½æ˜¯å¥½çš„,有些å¯èƒ½ä¸Žå¹³å‡æ°´å¹³ä¸€è‡´ï¼Œæœ‰äº›å¯èƒ½æŒºç³Ÿç³•,但希望你对咨询师的选择ä¸ä¼šåƒä½ å¯¹é›‡å‘˜çš„选择那样仔细,这样你会获得更多ä¸å¥½çš„咨询师。 -如果咨询师è¦å†™ä»£ç ï¼Œä½ å¿…须在你使用它们å‰ä»”细review。有ç€å¤§æ®µå¸¦é£Žé™©çš„代ç ï¼Œä½ åˆ°ä¸äº†å·¥ç¨‹çš„终点。事实上这对所有的团队æˆå‘˜éƒ½æ˜¯æˆç«‹çš„,但你通常有更多与你接近的团队æˆå‘˜çš„知识。 +如果咨询师è¦å†™ä»£ç ï¼Œä½ å¿…须在你使用它们å‰ä»”细 review。有ç€å¤§æ®µå¸¦é£Žé™©è€Œæ²¡æœ‰è¢« review 的代ç ï¼Œä¼šè®©ä½ å®Œæˆä¸äº†å·¥ç¨‹ã€‚事实上这对所有的团队æˆå‘˜éƒ½æ˜¯æˆç«‹çš„,但你通常有更多与你接近的团队æˆå‘˜çš„知识。 Next [如何适é‡äº¤æµ](04-How to Communicate the Right Amount.md) diff --git a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index 7ad241c..217cfc8 100644 --- a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -4,4 +4,4 @@ éžæ­£å¼äº¤æµå€¼å¾—åšä»»ä½•事情去鼓励。更多有用的沟通工作在åŒäº‹é—´çš„åˆé¥­å¯ä»¥è¿›è¡Œï¼Œè€Œéžå…¶ä»–çš„æ—¶é—´ã€‚è®¸å¤šå…¬å¸æ²¡æœ‰æ„è¯†åˆ°æˆ–è€…ä¸æ”¯æŒè¿™ä¸€ç‚¹ï¼Œè¿™æ˜¯ä¸€ç§é—憾。 -Next [如何直言异议以åŠé¿å…](05-How to Disagree Honestly and Get Away with It.md) +Next [如何直言异议以åŠå¦‚何é¿å…](05-How to Disagree Honestly and Get Away with It.md) diff --git a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index 0cc1766..1cbcdee 100644 --- a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -4,7 +4,7 @@ 有时候一个你ä¸åŒæ„的决定,会在决策者没有充分å¬å–你的观点å‰åšå‡ºã€‚你应该在公å¸å’Œé›†ä½“的基础上评估是å¦åº”该æå‡ºè¿™ä¸ªè¯é¢˜ã€‚如果在你看æ¥è¿™åªæ˜¯ä¸€ä¸ªå°é”™è¯¯ï¼Œè¿™å¯èƒ½ä¸å€¼å¾—釿–°è€ƒè™‘。如果在你看æ¥è¿™æ˜¯ä¸€ä¸ªå¤§é”™ï¼Œä½ å½“ç„¶å¿…é¡»æå‡ºå¼‚议。 -é€šå¸¸ï¼Œè¿™ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚在一些充满压力的环境下,在一些个人因素下,这会导致事情个人化。例如,一些éžå¸¸ç‰›é€¼çš„程åºå‘˜åœ¨ä»–们有好的ç†ç”±è®¤ä¸ºä¸€ä»¶ä¸œè¥¿æ˜¯é”™çš„æ—¶å€™ï¼Œç¼ºä¹æŒ‘战决议的信心。在最糟的情况下,决策者是ä¸å®‰å…¨çš„ï¼Œå¹¶ä¼šæŠŠè¿™å˜æˆä¸€ä¸ªå¯¹æƒå¨çš„æŒ‘战。最好记ä½ï¼Œè¿™ç§æƒ…况下,人们会用他们大脑中爬虫动物的部分æ¥åšå‡ºå应。你应该ç§ä¸‹æå‡ºä½ çš„争议,然åŽå°è¯•展示新的知识是如何改å˜å†³è®®åšå‡ºçš„基础的。 +é€šå¸¸ï¼Œè¿™ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚在一些充满压力的环境下,在一些个人因素下,这会导致事情个人化。例如,一些éžå¸¸ç‰›é€¼çš„程åºå‘˜ç¼ºä¹åœ¨æœ‰å¥½çš„ç†ç”±è®¤ä¸ºä¸€ä»¶ä¸œè¥¿æ˜¯é”™çš„æƒ…况下去挑战决议的信心。在最糟的情况下,决策者是ä¸å¯é çš„ï¼Œå¹¶ä¼šæŠŠè¿™å˜æˆä¸€ä¸ªå¯¹æƒå¨çš„æŒ‘战。最好记ä½ï¼Œè¿™ç§æƒ…况下,人们会用他们大脑中爬虫动物的部分æ¥åšå‡ºå应。你应该ç§ä¸‹æå‡ºä½ çš„争议,然åŽå°è¯•展示新的知识是如何改å˜å†³è®®åšå‡ºçš„基础的。 ä¸ç®¡å†³è®®æ˜¯å¦è¢«æŽ¨ç¿»ï¼Œä½ å¿…须记ä½ä½ æ°¸è¿œä¸èƒ½è¯´å‡ºâ€œæˆ‘çš„è¯æ’‚这了,我早就这样告诉你了â€è¿™æ ·çš„è¯ï¼Œå› ä¸ºè¿™ä¸ªå†³å®šå·²ç»å¾—到了充分探讨。 diff --git a/zh/README.md b/zh/README.md index 366bb2d..a818b53 100644 --- a/zh/README.md +++ b/zh/README.md @@ -56,7 +56,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) 2. [进阶](2-Intermediate) - 个人技能 - - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) @@ -79,7 +79,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) 3. [高级](3-Advanced) From 5b911fb177c7bf867f088648a271ef5a8ae48fd4 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Tue, 5 Apr 2016 13:23:03 +0800 Subject: [PATCH 077/149] make the translation clearer --- .../01-How to Tradeoff Quality Against Development Time.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index a010444..b569ed7 100644 --- a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -2,7 +2,7 @@ è½¯ä»¶å¼€å‘æ€»æ˜¯åœ¨å·¥ç¨‹è¯¥åšä»€ä¹ˆä¸Žå®Œæˆå·¥ç¨‹é—´å¦¥å。但你å¯èƒ½è¢«è¦æ±‚以牺牲你的工程适用性或商业适用性的方å¼ï¼ŒåŽ»äº¤æ¢å·¥ç¨‹çš„å¼€å‘速度。例如,你å¯èƒ½è¢«è¦æ±‚åšä¸€äº›ç³Ÿç³•的软件工程实践,但这将会导致大é‡ç»´æŠ¤é—®é¢˜ã€‚ -如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„ boss çš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”è¯¥ä¼šå¾ˆæœ‰ç”¨ã€‚å¦‚æžœè´¨é‡æƒè¡¡å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„ boss 和质é‡ä¿è¯äººå‘˜)æŒ‡å‡ºè¿™ä¸ªé—®é¢˜ã€‚å¦‚æžœè´¨é‡æƒè¡¡ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„ bug,指出æ¥ã€‚ +如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„ boss çš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”è¯¥ä¼šå¾ˆæœ‰ç”¨ã€‚å¦‚æžœç”¨è´¨é‡æ¢æ—¶é—´å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„ boss 和质é‡ä¿è¯äººå‘˜)æŒ‡å‡ºè¿™ä¸ªé—®é¢˜ã€‚å¦‚æžœç”¨è´¨é‡æ¢æ—¶é—´ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„ bug,指出æ¥ã€‚ 如果她ä»ç„¶åšæŒï¼Œä½ åº”该把劣质部分隔离到特殊的你å¯ä»¥åœ¨ä¸‹ä¸€ä¸ªå¼€å‘周期计划é‡å†™æˆ–优化的组件中。å‘你的团队解释这个问题,这样他们å¯ä»¥ä¸ºæ­¤åšäº›è®¡åˆ’。 From c6e1369ff01ba82ab69b4e9d85c4d84f9c5563a7 Mon Sep 17 00:00:00 2001 From: Calvin Evans Date: Tue, 5 Apr 2016 10:09:13 +0100 Subject: [PATCH 078/149] Update physical book URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8667fd2..277d2cc 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens [Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) -[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6992138-how-to-be-a-programmer) - Edition 1, published 04/01/17 +[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6999069-how-to-be-a-programmer) - Edition 1, published 04/01/17 ## Introduction To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. From a3c11b11ca26b233719b73017d6f336545fbcdd8 Mon Sep 17 00:00:00 2001 From: Calvin Evans Date: Tue, 5 Apr 2016 12:48:43 +0100 Subject: [PATCH 079/149] Update physical book year published --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 277d2cc..f23f12f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens [Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) -[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6999069-how-to-be-a-programmer) - Edition 1, published 04/01/17 +[Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6999069-how-to-be-a-programmer) - Edition 1, published 04/01/16 ## Introduction To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. From e9bbcac54d1d82a11561216a79c64b3efeef1b32 Mon Sep 17 00:00:00 2001 From: Waldir Pimenta Date: Wed, 6 Apr 2016 14:59:31 +0100 Subject: [PATCH 080/149] "inured" is not very accessible; "used" is clearer especially for non-native speakers. I believe the meaning is preserved appropriately with this change. --- .../Team-Skills/11-How to Deal with Difficult People.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index 74296e7..28884fc 100644 --- a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -2,7 +2,7 @@ You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. -This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often inured to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. +This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often used to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen to and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. From 38baf12bc663ccc68665491114da3f52d4f55826 Mon Sep 17 00:00:00 2001 From: Waldir Pimenta Date: Wed, 6 Apr 2016 18:30:19 +0100 Subject: [PATCH 081/149] grammar: "outsiders view" --> "outsider's view" --- en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index 7a3d518..2696715 100644 --- a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -14,6 +14,6 @@ With your team, the basic assumptions and goals do not need to be restated often I love working with non-engineers. It provides great opportunities to learn and to teach. You can often lead by example, in terms of the clarity of your communication. Engineers are trained to bring order out of chaos, to bring clarity out of confusion, and non-engineers like this about us. Because we have technical judgement and can usually understand business issues, we can often find a simple solution to a problem. -Often non-engineers propose solutions that they think will make it easier on us out of kindness and a desire to do the right thing, when in fact a much better overall solution exists which can only be seen by synergizing the outsiders view with your technical judgement. I personally like Extreme Programming because it addresses this inefficiency; by marrying the estimation quickly to the idea, it makes it easier to find the idea that is the best combination of cost and benefit. +Often non-engineers propose solutions that they think will make it easier on us out of kindness and a desire to do the right thing, when in fact a much better overall solution exists which can only be seen by synergizing the outsider's view with your technical judgement. I personally like Extreme Programming because it addresses this inefficiency; by marrying the estimation quickly to the idea, it makes it easier to find the idea that is the best combination of cost and benefit. Next [Advanced skills](../../3-Advanced) From b0bdce5f3b27a8796ddcf4e10b07f40737fa5d0a Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Thu, 7 Apr 2016 23:06:45 +0100 Subject: [PATCH 082/149] Merging link addition to Paul Grahams succinctness in power --- .../05-How to Balance Brevity and Abstraction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index c590922..30256f2 100644 --- a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,9 +1,9 @@ # How to Balance Brevity and Abstraction -Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article 'Succinctness is Power' by Paul Graham [PGSite]. +Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). There is a certain dogma associated with useful techniques such as *information hiding* and *object oriented programming* that are sometimes taken too far. These techniques let one code abstractly and anticipate change. I personally think, however, that you should not produce much speculative code. For example, it is an accepted style to hide an integer variable on an object behind mutators and accessors, so that the variable itself is not exposed, only the little interface to it. This does allow the implementation of that variable to be changed without affecting the calling code, and is perhaps appropriate to a library writer who must publish a very stable API. But I don't think the benefit of this outweighs the cost of the wordiness of it when my team owns the calling code and hence can recode the caller as easily as the called. Four or five extra lines of code is a heavy price to pay for this speculative benefit. Portability poses a similar problem. Should code be portable to a different computer, compiler, software system or platform, or simply easily ported? I think a non-portable, short-and-easily-ported piece of code is better than a long portable one. It is relatively easy and certainly a good idea to confine non-portable code to designated areas, such as a class that makes database queries that are specific to a given DBMS. -Next [How to Learn New Skills](06-How to Learn New Skills.md) \ No newline at end of file +Next [How to Learn New Skills](06-How to Learn New Skills.md) From 6cb267fb15767c0f64c6b336ceb57f75a29fd84f Mon Sep 17 00:00:00 2001 From: aidewoode Date: Sat, 9 Apr 2016 22:56:03 +0800 Subject: [PATCH 083/149] improve readability in zh for chapter three and other documents --- .../03-How to Tradeoff Time vs Space.md | 2 +- .../01-How to Fight Schedule Pressure.md | 4 +- .../02-How to Understand the User.md | 6 +-- .../03-How to Get a Promotion.md | 4 +- zh/3-Advanced/README.md | 6 +-- .../01-How to Develop Talent.md | 12 +++--- .../02-How to Choose What to Work On.md | 2 +- ...How to Get the Most From Your Teammates.md | 6 +-- .../04-How to Divide Problems Up.md | 4 +- .../05-How to Handle Boring Tasks.md | 4 +- .../06-How to Gather Support for a Project.md | 2 +- .../07-How to Grow a System.md | 8 ++-- .../08-How to Communicate Well.md | 6 +-- ...l People Things They Don't Want to Hear.md | 4 +- .../10-How to Deal with Managerial Myths.md | 2 +- ...1-How to Deal with Organizational Chaos.md | 4 +- ...ow to Tell the Hard From the Impossible.md | 4 +- .../02-How to Utilize Embedded Languages.md | 2 +- .../03-Choosing Languages.md | 6 +-- zh/4-Glossary.md | 10 ++--- zh/6-History.md | 18 ++++----- zh/7-Contributions.md | 10 ++--- zh/README.md | 2 +- zh/SUMMARY.md | 39 +++++++++---------- 24 files changed, 83 insertions(+), 84 deletions(-) diff --git a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index 07dcde0..5d6383b 100644 --- a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -6,7 +6,7 @@ å¯¹æˆ‘æ¥æ—¶å€™ï¼Œè®¡ç®—夿‚度ç†è®ºæ˜¯ç¾Žå¦™çš„,并且与物ç†å­¦ä¸€æ ·æ„义深远,并且å¯èƒ½è¿˜æœ‰å¾ˆé•¿çš„è·¯è¦èµ°ï¼ -时间(处ç†å™¨å‘¨æœŸï¼‰å’Œç©ºé—´ï¼ˆå†…存)å¯ä»¥ç›¸äº’交易。工程是关于妥å的,这就是一个好的例å­ã€‚å®ƒå¹¶ä¸æ€»æ˜¯æœ‰æ¡ç†çš„的,然而,编ç ä¸€äº›ä¸œè¥¿æ—¶æ›´åŠ ç´§å‡‘å¯ä»¥èŠ‚çœç©ºé—´ï¼Œä½†è¦ä»¥è§£ç æ—¶èŠ±è´¹æ›´å¤šçš„å¤„ç†æ—¶é—´ä¸ºä»£ä»·ã€‚ä½ å¯ä»¥é€šè¿‡ç¼“å­˜èŠ‚çœæ—¶é—´ï¼Œä¹Ÿå°±æ˜¯ï¼ŒèŠ±è´¹ç©ºé—´åŽ»å­˜å‚¨æŸäº›ä¸œè¥¿çš„一个本地副本,但è¦ä»¥ç»´æŒç¼“存的一致性为代价。你å¶å°”å¯ä»¥é€šè¿‡æŠŠæ›´å¤šä¿¡æ¯æ”¾åœ¨ä¸€ä¸ªæ•°æ®ç»“构里æ¥èŠ‚çœæ—¶é—´ã€‚这通常åªä¼šæœ‰è¾ƒå°çš„空间å ç”¨ï¼Œä½†å¯èƒ½ä¼šä½¿ç®—æ³•å¤æ‚化。 +时间(处ç†å™¨å‘¨æœŸï¼‰å’Œç©ºé—´ï¼ˆå†…存)å¯ä»¥ç›¸äº’交易。工程是关于妥å的,这就是一个好的例å­ã€‚å®ƒå¹¶ä¸æ€»æ˜¯æœ‰æ¡ç†çš„,然而,编ç ä¸€äº›ä¸œè¥¿æ—¶æ›´åŠ ç´§å‡‘å¯ä»¥èŠ‚çœç©ºé—´ï¼Œä½†è¦ä»¥è§£ç æ—¶èŠ±è´¹æ›´å¤šçš„å¤„ç†æ—¶é—´ä¸ºä»£ä»·ã€‚ä½ å¯ä»¥é€šè¿‡ç¼“å­˜èŠ‚çœæ—¶é—´ï¼Œä¹Ÿå°±æ˜¯ï¼ŒèŠ±è´¹ç©ºé—´åŽ»å­˜å‚¨æŸäº›ä¸œè¥¿çš„一个本地副本,但è¦ä»¥ç»´æŒç¼“存的一致性为代价。你å¶å°”å¯ä»¥é€šè¿‡æŠŠæ›´å¤šä¿¡æ¯æ”¾åœ¨ä¸€ä¸ªæ•°æ®ç»“构里æ¥èŠ‚çœæ—¶é—´ã€‚这通常åªä¼šæœ‰è¾ƒå°çš„空间å ç”¨ï¼Œä½†å¯èƒ½ä¼šä½¿ç®—æ³•å¤æ‚化。 æé«˜æ—¶é—´ç©ºé—´è½¬æ¢ç»å¸¸æŠŠå®ƒä»¬ä¸­çš„一个或å¦ä¸€ä¸ªæˆå‰§æ€§åœ°æ”¹å˜ã€‚然而,在你开始åšè¿™ä¸ªå·¥ä½œå‰ï¼Œä½ åº”该问你自己,你将è¦ä¼˜åŒ–çš„æ˜¯å¦æ˜¯æœ€éœ€è¦ä¼˜åŒ–的?研究算法是有趣的,但你ä¸èƒ½è®©è¿™é®è”½äº†ä½ çš„åŒçœ¼è®©ä½ çœ‹ä¸åˆ°è¿™æ ·ä¸€ä¸ªå†·é…·çš„äº‹å®žï¼šä¼˜åŒ–ä¸€äº›ä¸æ˜¯é—®é¢˜çš„问题将ä¸ä¼šå¸¦æ¥ä»»ä½•明显的区别,但å´ä¼šé€ æˆæµ‹è¯•的负担。 diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index f146765..684108f 100644 --- a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -2,10 +2,10 @@ å‘布压力是快速推出好产å“çš„åŽ‹åŠ›ã€‚è¿™æ˜¯å¥½çš„ï¼Œå› ä¸ºå®ƒåæ˜ äº†å¸‚场事实,并且在æŸä¸ªæ„义上是å¥åº·çš„ã€‚æ—¶é—´åŽ‹åŠ›æ˜¯è¿«ä½¿ä¸€ä¸ªäº§å“æ›´å¿«åœ°æŽ¨å‡ºçš„压力,这是浪费的,ä¸å¥åº·çš„,并且太普é了。 -时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–们对我们所åšçš„äº‹æƒ…ï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。看ä¸åˆ°åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一的事情是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ +时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–ä»¬æŠŠè‡ªå·±çš„ä¹ æƒ¯æŠ•å°„åˆ°æˆ‘ä»¬èº«ä¸Šï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。他们看ä¸åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一事情就是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ 与时间压力斗争的方法是简å•地把它当åšå‘布压力,实现的方法是让å¯ç”¨åŠ³åŠ›ä¸Žäº§å“间的关系å˜å¾—逿˜Žã€‚æä¾›ä¸€ä¸ªè¯šå®žï¼Œç»†è‡´ï¼Œå¤§éƒ¨åˆ†å¯ç†è§£çš„å¯¹æ‰€æœ‰ç›¸å…³åŠ³åŠ›çš„ä¼°è®¡ï¼Œæ˜¯ä¸€ç§æœ€å¥½çš„实现方å¼ã€‚å…许åšå‡ºå¥½çš„管ç†å†³å®šä»¥æƒè¡¡å¯èƒ½çš„功能也是一个附加的好处。 -必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其他èŒä¸šä»»æ„所表现的。程åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构造了一个过程,我希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ +必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其专业行为的一ç§è¡¨çŽ°ã€‚ç¨‹åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构建了一套æµç¨‹ï¼Œæˆ‘希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ Next [如何ç†è§£ç”¨æˆ·](02-How to Understand the User.md) diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 4f73816..d90a58a 100644 --- a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,14 +1,14 @@ # 如何ç†è§£ç”¨æˆ· -ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„bossç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š +ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„ boss ç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š - 用户通常会åšå‡ºç®€çŸ­çš„判断 - 用户有他们自己的工作,他们主è¦ä¼šæ€è€ƒä½ çš„产å“中å°çš„æ”¹è¿›ï¼Œè€Œéžå¤§çš„æ”¹è¿› - 用户看ä¸åˆ°ä½ çš„产å“çš„æ•´ä¸ªç”¨æˆ·ç”»åƒ -你的责任是找出他们真实需è¦çš„东西,而éžä»–们说他们需è¦çš„东西,然而,更好的是,在你开始å‰ï¼Œå»ºè®®ä»–ä»¬ï¼Œè®©ä»–ä»¬åŒæ„你想åšçš„,就是他们真实想è¦çš„东西,但他们å¯èƒ½æ²¡æœ‰è¿™ç§æ„¿æ™¯ã€‚你对你自己的主æ„的信心是è¦çœ‹æƒ…å†µçš„ã€‚ä½ å¿…é¡»åŒæ—¶ä¸Žè‡ªå¤§å’Œé”™è¯¯çš„è°¦é€Šåšæ–—争去找出什么是人们真实想è¦çš„。这两ç§äººï¼Œæˆ–者åŒä¸€ä¸ªäººèº«ä¸Šä¸¤ç§æ€ç»´æ¨¡å¼ï¼Œä¸€åŒå’Œè°å·¥ä½œä¼šç»™å‡ºæœ€å¥½çš„æœºä¼šæ¥ç»™å‡ºæ­£ç¡®çš„æ„¿æ™¯ã€‚ +你的责任是找出他们真实需è¦çš„东西,而éžä»–们说他们需è¦çš„东西,然而,更好的是在你开始å‰ç»™ä»–们æå‡ºå»ºè®®ï¼Œå¹¶ä¸”让他们认åŒä½ çš„建议就是他们想è¦çš„,但他们也å¯èƒ½æ²¡æœ‰åšè¿™ç§äº‹çš„æ„¿æ™¯ã€‚你对你自己的主æ„的信心是è¦çœ‹æƒ…å†µçš„ã€‚ä½ å¿…é¡»åŒæ—¶ä¸Žè‡ªå¤§å’Œé”™è¯¯çš„è°¦é€Šåšæ–—争去找出什么是人们真实想è¦çš„。这两ç§äººï¼Œæˆ–者åŒä¸€ä¸ªäººèº«ä¸Šä¸¤ç§æ€ç»´æ¨¡å¼ï¼Œä¸€åŒå’Œè°å·¥ä½œä¼šç»™å‡ºæœ€å¥½çš„æœºä¼šæ¥ç»™å‡ºæ­£ç¡®çš„æ„¿æ™¯ã€‚ -你在用户身上花费的时间更多,你就能够更好地ç†è§£ä»€ä¹ˆèƒ½å¤ŸçœŸæ­£åœ°æˆåŠŸã€‚ä½ åº”å½“å°è¯•在你的用户上尽å¯èƒ½æµ‹è¯•你的想法,如果å¯èƒ½çš„è¯ï¼Œä½ ç”šè‡³åº”当和他们一起åƒé¥­ã€‚ +你在用户身上花费的时间越多,你就越能更好地ç†è§£ä»€ä¹ˆèƒ½å¤ŸçœŸæ­£åœ°æˆåŠŸã€‚ä½ åº”å½“å°è¯•在你的用户上尽å¯èƒ½æµ‹è¯•你的想法,如果å¯èƒ½çš„è¯ï¼Œä½ ç”šè‡³åº”当和他们一起åƒé¥­ã€‚ Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ã€‚ diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 36572cd..0fd228f 100644 --- a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -6,8 +6,8 @@ 想è¦å¾—到薪酬的æå‡ï¼Œå¸¦ç€ä¿¡æ¯åŽ»å商。 -如果你觉得你值得得到æå‡ï¼Œä¸Žä½ çš„bossèŠä¸€èŠã€‚清楚地问他们你需è¦åšä»€ä¹ˆæ‰èƒ½èŽ·å¾—æå‡ï¼Œç„¶åŽåŠªåŠ›åŽ»åšã€‚è¿™å¬èµ·æ¥å¾ˆè€å¥—,但大多数时候你对你需è¦åšçš„事情的追求与你boss的想法是ä¸åŒçš„。这å¯èƒ½ä¼šè®©ä½ çš„boss在æŸäº›ç¨‹åº¦ä¸Šæœ‰äº›å¤±è½ã€‚ +如果你觉得你值得得到æå‡ï¼Œä¸Žä½ çš„ boss èŠä¸€èŠã€‚清楚地问他们你需è¦åšä»€ä¹ˆæ‰èƒ½èŽ·å¾—æå‡ï¼Œç„¶åŽåŠªåŠ›åŽ»åšã€‚è¿™å¬èµ·æ¥å¾ˆè€å¥—,但大多数时候你对你需è¦åšçš„事情的追求与你 boss 的想法是ä¸åŒçš„。这å¯èƒ½ä¼šè®©ä½ çš„ boss 在æŸäº›ç¨‹åº¦ä¸Šæœ‰äº›å¤±è½ã€‚ -大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和boss地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 +大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和 boss 地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How to Develop Talent.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index 73d2295..f3d5964 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -10,12 +10,12 @@ - æœåŠ¡ä½ ä»¬çš„å›¢é˜Ÿ - [如何å‘展你们的æ‰èƒ½](Serving-Your-Team/01-How to Develop Talent.md) - [如何选择工作的内容](Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何从你的队å‹å­¦åˆ°æœ€å¤šä¸œè¥¿](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何让你队å‹çš„价值最大化](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - [如何划分问题](Serving-Your-Team/04-How to Divide Problems Up.md) - [å¦‚ä½•å¤„ç†æ— èŠçš„任务](Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [如何获得对工程的支æŒ](Serving-Your-Team/06-How to Gather Support for a Project.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How to Gather Support for a Project.md) - [如何å‘展一个系统](Serving-Your-Team/07-How to Grow a System.md) - - [如何有效地交æµ](Serving-Your-Team/08-How to Communicate Well.md) + - [如何有效地沟通](Serving-Your-Team/08-How to Communicate Well.md) - [如何告诉别人他们ä¸åƒçŸ¥é“的东西](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How to Deal with Managerial Myths.md) - [如何处ç†ç»„织混乱](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index c4ba737..35e88b0 100644 --- a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -1,23 +1,23 @@ # 如何å‘展æ‰èƒ½ -Nietschze夸大了他所说的: +Nietschze 夸大了他所说的: ->æ€ä¸æ­»æˆ‘们的,åªä¼šè®©æˆ‘们更强大。 +>é‚£äº›æ— æ³•æ‘§æ¯æˆ‘的,åªä¼šè®©æˆ‘更强大 你最大的责任是对你的团队负责。你应该éžå¸¸äº†è§£ä»–们中的æ¯ä¸ªäººã€‚你应该激励你的团队,但ä¸è¦è®©ä»–们过劳。你通常应该告诉他们他们被激励的方å¼ã€‚如果他们觉得划算,他们会被很好的激励。æ¯ä¸ªå·¥ç¨‹ä¸­ï¼Œæˆ–者在æ¯ä¸ªå…¶ä»–的工程里,试ç€åŒæ—¶ç”¨ä»–们建议的以åŠä½ è®¤ä¸ºå¯¹ä»–们好的方å¼åŽ»æ¿€åŠ±ä»–ä»¬ã€‚æ¿€åŠ±ä»–ä»¬çš„æ–¹æ³•ä¸æ˜¯ç»™ä»–们更多工作,而是给他们一个新的技能或在团队里扮演一个新的角色。 -你应该å…许人们(包括你自己)å¶å°”失败,并且应该为一些失败预留一些时间。如果从未有失败,冒险也就没有æ„义。如果没有å¶ç„¶çš„失败,说明其实你没有足够努力。当一个人失败了,你应该尽å¯èƒ½æ¸©æŸ”地对待他,ä¸è¯¥æŠŠä»–ä»¬å½“åšæˆåŠŸäº†é‚£æ ·å­ã€‚ +你应该å…许人们(包括你自己)å¶å°”失败,并且应该为一些失败预留一些时间。如果从未有失败,冒险也就没有æ„义。如果没有å¶ç„¶çš„失败,说明其实你没有足够努力。当一个人失败了,你应该尽å¯èƒ½æ¸©æŸ”地对待他,但ä¸è¯¥æŠŠä»–ä»¬åƒæˆåŠŸäº†é‚£æ ·å¯¹å¾…ã€‚ 为了让æ¯ä¸ªå›¢é˜Ÿæˆå‘˜è¢«å……分激励,问清楚他们中的æ¯ä¸ªäººï¼Œå¦‚果他们没有动力的è¯ï¼Œä»–们需è¦ä»€ä¹ˆæ‰èƒ½è¢«å……分激励。你å¯èƒ½éœ€è¦è®©ä»–ä»¬ä¿æŒä¸æ»¡æ„的状æ€ï¼Œä½†ä½ éœ€è¦çŸ¥é“æ¯ä¸ªäººéœ€è¦çš„æ˜¯ä»€ä¹ˆã€‚ -ä½ ä¸è¯¥å› ä¸ºè¿™æ ·çš„åŽŸå› æ”¾å¼ƒï¼Œæˆ–è€…è®©ä¸€äº›äººæ¾æ‡ˆï¼šä»–ä»¬å£«æ°”ä½Žè½æˆ–è€…ä¸æ»¡å› æ­¤æ•…æ„æ²¡æœ‰æ‰¿æ‹…分担到的责任。你必须试ç€è®©ä»–们充分被激励并且有效率。åªè¦ä½ æœ‰è€å¿ƒï¼ŒåšæŒè¿™æ ·åšã€‚当你的è€å¿ƒè€—尽时,就解雇他们å§ã€‚ä½ ä¸èƒ½å…许故æ„ä¸å¸å…¶èŒçš„员工留在团队里,因为这对团队ä¸å…¬å¹³ã€‚ +ä½ ä¸èƒ½æ”¾å¼ƒå› ä¸ºä½Žè½çš„æƒ…ç»ªæˆ–è€…ä¸æ»¡å°±æ•…æ„䏿‰¿æ‹…工作的那些人,然åŽå°±è®©ä»–们这样懒散下去。你必须试ç€è®©ä»–们充分被激励并且有效率。åªè¦ä½ æœ‰è€å¿ƒï¼ŒåšæŒè¿™æ ·åšã€‚当你的è€å¿ƒè€—尽时,就解雇他们å§ã€‚ä½ ä¸èƒ½å…许故æ„ä¸å¸å…¶èŒçš„员工留在团队里,因为这对团队ä¸å…¬å¹³ã€‚ 通过在公众场åˆè¿™æ ·è¯´ï¼Œè®©ä½ å›¢é˜Ÿä¸­çš„强大æˆå‘˜æ¸…楚地知é“他们是强大的。表扬应当公开,批评应当ç§å¯†ã€‚ -团队中的强大æˆå‘˜ä¼šè‡ªç„¶åœ°æ¯”弱的æˆå‘˜æœ‰æ›´å¤šå›°éš¾çš„任务。这是完美而自然的,没人为因此困扰,因为æ¯ä¸ªäººéƒ½åŠªåŠ›å·¥ä½œã€‚ +团队中的强大æˆå‘˜ä¼šè‡ªç„¶åœ°æ¯”弱的æˆå‘˜æœ‰æ›´å¤šå›°éš¾çš„任务。这是完美而自然的,没人会因此困扰,因为æ¯ä¸ªäººéƒ½åœ¨åŠªåŠ›å·¥ä½œã€‚ 一个在工资中没有å馈出æ¥çš„奇怪的事实是,好的程åºå‘˜æ¯”å个糟糕的程åºå‘˜è¦æœ‰æ•ˆçŽ‡å¾—å¤šã€‚è¿™å¯¼è‡´äº†ä¸€ç§å¥‡æ€ªçš„现象。通常,如果你们的弱程åºå‘˜ä¸æŒ¡é“çš„è¯ï¼Œä½ èƒ½è·‘的更快。如果你这样åšäº†ï¼Œäº‹å®žä¸Šä½ åœ¨çŸ­æœŸèƒ½å–得更多进度。然而, 你的交易会失去一些é‡è¦çš„好处,å«åšå¯¹å¼±å°æˆå‘˜çš„训练,对集体知识的传递,失去强大程åºå‘˜åŽçš„æ¢å¤èƒ½åŠ›ã€‚å¼ºå¤§çš„ç¨‹åºå‘˜å¯¹è¿™ç§çŽ°è±¡åº”è¯¥æ¸©å’Œäº›ï¼Œå¹¶ä¸”ä»Žå„ç§è§’度去考虑这个问题。 -ä½ ç»å¸¸èƒ½å¤Ÿç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 +ä½ å¯ä»¥ç»å¸¸ç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 Next [如何选择工作的内容](02-How to Choose What to Work On.md) diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index 11d7f14..1b53144 100644 --- a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -2,4 +2,4 @@ 你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 -Next [如何最大化利用你的队å‹](03-How to Get the Most From Your Teammates.md) +Next [如何让你队å‹çš„价值最大化](03-How to Get the Most From Your Teammates.md) diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index cb6d19b..a6d8821 100644 --- a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -1,14 +1,14 @@ -# 如何让你的队å‹çš„价值最大化 +# 如何让你队å‹çš„价值最大化 为了让你的队å‹çš„价值最大化,å‘展好的团队精神,试ç€ä¿æŒæ¯ä¸ªäººçš„个人挑战与渴望。 -为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œæ²¡æœ‰ä¼šæƒ³è¦è®©å…¶ä»–任何人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ +为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œå°±æ²¡æœ‰äººä¼šè®©å…¶ä»–人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ 团队领导力的一个关键是促进团结,这样æ¯ä¸ªäººéƒ½ä¼šå¬ä½ çš„。有时候这æ„味ç€å…许你的队å‹çŠ¯é”™ã€‚ä¹Ÿå°±æ˜¯ï¼ŒåŸºäºŽè¿™ç§å›¢ç»“,如果对项目没有太大的æŸå®³ï¼Œä½ å¿…é¡»å…许你团队的一部分æˆå‘˜ç”¨ä»–们自己的方å¼åšäº‹ï¼Œå³ä½¿ä½ æœ‰å¾ˆå¤§çš„ä¿¡å¿ƒè®¤ä¸ºè¿™æ˜¯ä¸€ä»¶é”™äº‹ã€‚å½“è¿™ç§æƒ…况确实å‘生时,ä¸è¦åŒæ„他们的观点,简å•公开地åå¯¹ä¹‹ï¼Œç„¶åŽæŽ¥å—è¿™ç§å›¢ç»“。ä¸è¦è®©äººè§‰å¾—ä½ å—伤了,或者认为你是被迫的,简å•地陈述你ä¸åŒæ„,但认为团队的团结是更加é‡è¦çš„。这ç»å¸¸ä¼šå¯¼è‡´ä»–们忂”ã€‚å¦‚æžœä»–ä»¬çœŸçš„åæ‚”了,ä¸è¦åšæŒä»–们一开始的计划。 如果在你们从所有åˆé€‚的角度讨论了这个è¯é¢˜åŽï¼Œæœ‰ä¸ªäººä¼šå对,简å•地告诉他们,你必须åšä¸€ä¸ªå†³å®šï¼Œå¹¶ä¸”è¿™å°±æ˜¯ä½ çš„å†³å®šã€‚å¦‚æžœæœ‰æ–¹æ³•åŽ»è¯„ä¼°ä½ çš„å†³å®šæ˜¯å¦æ˜¯é”™çš„,或者它ç¨åŽæ˜¯å¦æ˜¯é”™çš„,尽å¯èƒ½å¿«é€Ÿåˆ‡æ¢ï¼Œå¹¶æ„Ÿæ¿€é‚£ä¸ªå¯¹çš„人。 -询问你的团队,包括集体与个人,这样一个问题:他们认为什么能创造团队精神以åŠåˆ›é€ ä¸€ä¸ªé«˜æ•ˆçš„团队。 +询问你的团队,包括集体与个人这样一个问题:他们认为什么能创造团队精神以åŠåˆ›é€ ä¸€ä¸ªé«˜æ•ˆçš„团队。 ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index e6b7cc7..dec655a 100644 --- a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -2,8 +2,8 @@ 接手一个软件工程并把它分为å¯ä»¥ç”±ä¸ªäººå®žçŽ°çš„ä»»åŠ¡æ˜¯å¾ˆæœ‰è¶£çš„ã€‚è¿™äº‹åº”è¯¥åŠæ—©è¿›è¡Œã€‚有时候ç»ç†å¯èƒ½ä¼šè®¤ä¸ºä¸è€ƒè™‘个人的项目能够起作用。这是ä¸å¯èƒ½çš„,因为æ¯ä¸ªäººçš„生产力是如此广泛地ä¸åŒã€‚对æŸä¸ªç»„件有特殊知识的人也ç»å¸¸æ”¹å˜ï¼Œå¹¶ä¸”å¯ä»¥å¯¹å·¥ä½œæ•ˆæžœæœ‰ä¸€ä¸ªæ•°é‡çº§çš„å½±å“。 -正如一个作曲家认为ä¹å™¨çš„音色会其é‡è¦ä½œç”¨ï¼Œæˆ–者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 +正如一个作曲家对其演å¥ä¹å™¨çš„音色的考虑,或者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 -因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–ä»¬çš„ä¸æ“…é•¿çš„æ–¹å‘æˆ–者学习新的技能。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 +因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–们的弱项或者学习新技能的能力。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How to Handle Boring Tasks.md) diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index 4c94c4d..a4f2c9f 100644 --- a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -1,7 +1,7 @@ # å¦‚ä½•å¤„ç†æ— èŠçš„任务 -有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬Larry Wall的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 +有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬ Larry Wall 的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ -Next [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How to Gather Support for a Project.md) +Next [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How to Gather Support for a Project.md) diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 257563f..1b27ff1 100644 --- a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -1,5 +1,5 @@ # å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ -è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你的创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的智慧。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 +è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你所创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的观点所带æ¥çš„价值。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 Next [如何å‘展一个系统](07-How to Grow a System.md) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index 6021f7c..6ecaf37 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -6,18 +6,18 @@ 认识到软件的æˆé•¿æ˜¯æœ‰ç›Šçš„,因为这å…许我们在有一个完美的æ€ç»´å›¾æ™¯å‰å–得有用的进步。我们å¯ä»¥ä»Žç”¨æˆ·é‚£é‡ŒèŽ·å¾—åé¦ˆï¼Œå¹¶ç”¨ä¹‹çº æ­£è¿™ç§æˆé•¿ã€‚修剪掉疲软的四肢æ‰èƒ½å¥åº·ã€‚ -程åºå‘˜å¿…须设计一个完æˆçš„å¯åˆ†å‘å¯ä½¿ç”¨çš„系统。但高级程åºå‘˜éœ€è¦åšçš„æ›´å¤šã€‚你必须设计一个终于完结系统的æˆé•¿è·¯çº¿ã€‚你的工作是,得到一个想法的èŒèŠ½ï¼Œç„¶åŽæŠŠå®ƒå°½å¯èƒ½é¡ºåˆ©åœ°å˜æˆä¸€ä¸ªæœ‰ç”¨çš„人工制å“。 +程åºå‘˜å¿…须设计一个完æˆçš„å¯åˆ†å‘å¯ä½¿ç”¨çš„系统。但高级程åºå‘˜éœ€è¦åšçš„æ›´å¤šã€‚你必须设计一个终止于完结系统的æˆé•¿è·¯çº¿ã€‚你的工作是,得到一个想法的èŒèŠ½ï¼Œç„¶åŽæŠŠå®ƒå°½å¯èƒ½é¡ºåˆ©åœ°å˜æˆä¸€ä¸ªæœ‰ç”¨çš„人工制å“。 因此,你必须模拟最终的结果,用一ç§å·¥ç¨‹å›¢é˜Ÿå¯ä»¥ä¸ºä¹‹é›€è·ƒçš„æ–¹å¼åŽ»äº¤æµã€‚但你也必须和他们交æµä¸€æ¡éžè·³è·ƒå¼çš„è·¯å¾„ï¼Œä»Žä»–ä»¬æ‰€çŸ¥åˆ°ä»–ä»¬æƒ³è¦æˆä¸ºçš„地方去。在整个过程中,这棵树必须活ç€ï¼Œå®ƒä¸èƒ½åœ¨ä»€ä¹ˆæ—¶å€™æ­»åŽ»ï¼Œç„¶åŽåˆå¤æ´»è¿‡æ¥ã€‚ -è¿™æ¡è·¯å¾„会是螺旋å‘展的。里程碑之间永远ä¸ä¼šå¤ªè¿œï¼Œè¿™å¯¹äºŽåœ¨è·¯ä¸Šå–得进步是有用的。在æžç«¯çš„商业环境里,如果里程碑å¯ä»¥å®žçŽ°å¹¶å°½æ—©èµšé’±æ˜¯æœ€å¥½çš„ã€‚ï¼Œå³ä½¿ä»–们离良好设计的端点还有很远。程åºå‘˜çš„ä¸€ä¸ªå·¥ä½œå°±æ˜¯é€šè¿‡ç†æ™ºçš„选择用里程碑表示的æˆé•¿è·¯å¾„æ¥å¹³è¡¡å³æ—¶çš„æŠ¥é…¬ä¸Žå°†æ¥çš„æŠ¥é…¬ã€‚ +è¿™æ¡è·¯å¾„会是螺旋å‘展的。里程碑之间永远ä¸ä¼šå¤ªè¿œï¼Œè¿™å¯¹äºŽåœ¨è·¯ä¸Šå–得进步是有用的。在æžç«¯çš„商业环境里,如果里程碑å¯ä»¥å®žçŽ°å¹¶å°½æ—©èµšé’±æ˜¯æœ€å¥½çš„ã€‚å³ä½¿ä»–们离良好设计的端点还有很远。程åºå‘˜çš„ä¸€ä¸ªå·¥ä½œå°±æ˜¯é€šè¿‡ç†æ™ºçš„选择用里程碑表示的æˆé•¿è·¯å¾„æ¥å¹³è¡¡å³æ—¶çš„æŠ¥é…¬ä¸Žå°†æ¥çš„æŠ¥é…¬ã€‚ 高级程åºå‘˜å¯¹è½¯ä»¶ï¼Œå›¢é˜Ÿï¼Œä¸ªäººçš„æˆé•¿æœ‰é›†ä½“è´£ä»»ã€‚ 一个读者,Rob Hafernik,在这一节中写下了这样的评论: -> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚å½“ä½ å·¥ä½œåœ¨ä¸€ä¸ªå¤§çš„ç³»ç»Ÿä¸­ï¼Œå¿…é¡»æœ‰å³æ—¶ç›®æ ‡ç›¸å…³çš„坿µ‹é‡çš„进步时,这些也是*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 +> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚è¿™å°±æœ‰å¦‚å½“ä½ å·¥ä½œåœ¨ä¸€ä¸ªå¤§çš„ç³»ç»Ÿä¸­è¦æœ‰å¯¹å³æ—¶ç›®æ ‡çš„坿µ‹é‡è¿›æ­¥ä¸€æ ·*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ -Next [如何良好地交æµ](08-How to Communicate Well.md) +Next [如何有效地沟通](08-How to Communicate Well.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index 06c64ab..d637c10 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -2,10 +2,10 @@ ä¸ºäº†è‰¯å¥½åœ°æ²Ÿé€šï¼Œä½ å¿…é¡»è®¤è¯†åˆ°å®ƒçš„å›°éš¾ã€‚å®ƒæœ¬èº«å°±æ˜¯ä¸€ç§æŠ€èƒ½ã€‚ä¸Žä½ äº¤æµçš„人本身是有瑕疵的,这一事实使得沟通å˜å¾—更加困难。他们ä¸ä¼šåŠªåŠ›åŽ»ç†è§£ä½ ã€‚他们ä¸å–„言辞。他们ç»å¸¸è¿‡åº¦å·¥ä½œæˆ–者无èŠï¼Œè‡³å°‘,有时候åªå…³æ³¨ä»–们自己的工作而éžä½ è¦å‘表的长篇大论。上课,练习写作,公共演讲,è†å¬ï¼Œè¿™äº›ä¸œè¥¿çš„一个好处是,如果你擅长它们,你å¯ä»¥æ›´å®¹æ˜“看到问题所在以åŠè§£å†³æ–¹æ³•。 -程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„ç”Ÿå­˜ä¾èµ–于与团队的交æµã€‚高级程åºå‘˜æ˜¯ä¸€ç§ç¤¾ä¼šåŠ¨ç‰©ï¼Œä»–ä»¬çš„æ»¡æ„ä¾èµ–于与团队外的人的交æµã€‚ +程åºå‘˜æ˜¯ä¸€ç§ä¾èµ–于与团队交æµè€Œç”Ÿå­˜çš„社会动物。高级程åºå‘˜æ˜¯ä¸€ç§ä¾èµ–于与团队外的人交æµè€Œæ»¡æ„的社会动物。 -程åºå‘˜ä»Žæ··æ²Œä¸­å¸¦æ¥ç§©åºï¼Œä¸€ç§å®žçŽ°è¿™ä¸€ç›®æ ‡çš„æœ‰è¶£æ–¹æ³•æ˜¯ä»Žå¤–éƒ¨çš„ä¸€ä¸ªæè®®å¼€å§‹ã€‚这能用*稻è‰äºº*或*白纸*æ¨¡å¼æˆ–者å£å¤´çš„æ–¹å¼æ¥å®Œæˆã€‚è¿™ç§é¢†å¯¼å¯¹äºŽè®©å›¢é˜Ÿç½®èº«äºŽè¾©è®ºä¸­æœ‰æžå¤§çš„好处。这也把你暴露到批评,或者,拒ç»ä¸Žå¦å®šä¸­ã€‚高级程åºå‘˜å¿…须准备好接å—这些,因为他有特殊的能力,也因此有特殊的责任。éžç¨‹åºå‘˜å‡ºèº«çš„ä¼ä¸šå®¶éœ€è¦ç¨‹åºå‘˜åœ¨æŸäº›æ–¹é¢æä¾›é¢†å¯¼ã€‚程åºå‘˜æ˜¯æ€æƒ³ä¸ŽçŽ°å®žä¹‹é—´çš„ä¸€éƒ¨åˆ†æ¡¥æ¢ã€‚ +程åºå‘˜ä»Žæ··æ²Œä¸­å¸¦æ¥ç§©åºï¼Œä¸€ç§å®žçŽ°è¿™ä¸€ç›®æ ‡çš„æœ‰è¶£æ–¹æ³•æ˜¯ä»Žå¤–éƒ¨çš„ä¸€ä¸ªæè®®å¼€å§‹ã€‚这能用*稻è‰äºº*或*白纸*æ¨¡å¼æˆ–者å£å¤´çš„æ–¹å¼æ¥å®Œæˆã€‚è¿™ç§é¢†å¯¼å¯¹äºŽè®©å›¢é˜Ÿç½®èº«äºŽè¾©è®ºä¸­æœ‰æžå¤§çš„好处。这也把你暴露到批评,或者拒ç»ä¸Žå¦å®šä¸­ã€‚高级程åºå‘˜å¿…须准备好接å—这些,因为他有特殊的能力,也因此有特殊的责任。éžç¨‹åºå‘˜å‡ºèº«çš„ä¼ä¸šå®¶éœ€è¦ç¨‹åºå‘˜åœ¨æŸäº›æ–¹é¢æä¾›é¢†å¯¼ã€‚程åºå‘˜æ˜¯æ€æƒ³ä¸ŽçŽ°å®žä¹‹é—´çš„ä¸€éƒ¨åˆ†æ¡¥æ¢ã€‚ -æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了能é‡ï¼Œæ²¡æœ‰äººå› æ­¤ä¼šçœ‹ä½Žä½ ã€‚ +æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个 demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了精力,没有人会因此看低你。 Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How to Tell People Things They Don't Want to Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index f91d89e..be6e128 100644 --- a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -2,8 +2,8 @@ 你会ç»å¸¸éœ€è¦å‘Šè¯‰äººä»¬ä¸€äº›è®©ä»–们ä¸èˆ’æœçš„事情。记ä½ï¼Œä½ å¿…须为æŸç§åŽŸå› æ‰è¿™æ ·åšã€‚å³ä½¿æ²¡æœ‰ä»€ä¹ˆå¯ä»¥ç”¨æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ ä¹Ÿè¯¥å°½æ—©å‘Šè¯‰ä»–们,这样他们æ‰èƒ½å……分警觉。 -å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你å¯èƒ½ä¼šä¸è¢«ä¿¡ä»»ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ +å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你有ä¸è¢«ä¿¡ä»»çš„å±é™©ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ -一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯”deadline抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ +一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯” deadline 抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ Next [如何处ç†ç®¡ç†ç¥žè¯](10-How to Deal with Managerial Myths.md) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 74d2fc4..b0cb34f 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,6 +1,6 @@ # 如何处ç†ç®¡ç†ç¥žè¯ -*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›å®—教内容æ¥è§£é‡Šå®‡å®™å’Œäººç±»ä¸Žä¹‹çš„关系。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š +*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›è§£é‡Šå®‡å®™å’Œäººç±»ä¹‹é—´çš„关系的宗教故事。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š - æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ - 程åºå‘˜æ˜¯å¹³ç­‰çš„。(程åºå‘˜å¯ä»¥æŒ‰é‡è¦ç¨‹åº¦åˆ†ç±»ã€‚) diff --git a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md index f611e0c..6dc658f 100644 --- a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md +++ b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -1,8 +1,8 @@ # 如何处ç†ç»„织混乱 -ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ +ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ -> 工程师有能力创造与维æŒã€‚ +> 工程师有能力去创造与维æŒã€‚ éžå·¥ç¨‹å¸ˆå¯ä»¥å®‰æŽ’人们,但,在典型的软件公å¸ï¼Œå¦‚果没有程åºå‘˜çš„è¯ï¼Œä»–们ä¸èƒ½åˆ›é€ ä¸Žç»´æŒä»»ä½•东西,正如工程师通常ä¸èƒ½æœ‰æ•ˆåœ°é”€å”®äº§å“或者管ç†å•†ä¸šã€‚è¿™ç§åŠ›é‡å¯¹äºŽå¤§å¤šæ•°ä¸Žä¸´æ—¶ç»„ç»‡æ··ä¹±ç›¸å…³çš„é—®é¢˜æ˜¯ä¸€ç§æŠµæŠ—ã€‚å¦‚æžœä½ æœ‰è¿™ç§åŠ›é‡ï¼Œä½ åº”å½“å®Œå…¨å¿½è§†è¿™ç§æ··ä¹±å¹¶å½“åšä»€ä¹ˆéƒ½æ²¡å‘ç”Ÿé‚£æ ·åšæŒä¸‹åŽ»ã€‚ä½ å¯èƒ½ï¼Œå½“然,被解雇,但如果这å‘生了,你å¯èƒ½å› ä¸ºè¿™ç§åŠ›é‡å¾—到新的工作。更普é的,一些紧张的没有这ç§é­”力的人会进入你的空间并告诉你åšä¸€äº›è ¢äº‹ã€‚å¦‚æžœä½ çœŸçš„ç¡®ä¿¡è¿™æ˜¯ä¸€ä»¶è ¢äº‹ï¼Œæœ€å¥½çš„åšæ³•是微笑,点头,直到他们走开,然åŽç»§ç»­åšä½ è®¤ä¸ºå¯¹å…¬å¸æœ€å¥½çš„事情。 diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index a71d212..752ea89 100644 --- a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,9 +1,9 @@ # 如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分 -解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。大é‡çš„工作是困难的,但ä¸å¿…然是ä¸å¯èƒ½çš„。 +解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。大é‡çš„å·¥ä½œæ˜¯å›°éš¾çš„ï¼Œä½†ä¸æ˜¯å¿…ç„¶ä¸å¯èƒ½çš„。 è¿™ç§åŒºåˆ«æ˜¯æ»‘稽的,因为你å¯èƒ½ç»å¸¸è¢«è¦æ±‚åšä¸€äº›äº‹å®žä¸Šä¸å¯èƒ½çš„事情,ä¸è®ºæ˜¯ä»Žç§‘学观点还是从软件工程观点。然åŽä½ çš„å·¥ä½œå°±å˜æˆäº†å¸®åŠ©è€æ¿æ‰¾åˆ°ä¸€ä¸ªåˆç†çš„,仅仅是困难而éžä¸å¯èƒ½çš„解决方案,去满足他们大部分的需è¦ã€‚当一个解决方案å¯ä»¥è¢«è‡ªä¿¡åœ°è§„划且风险å¯ä»¥é¢„æ–™æ—¶ï¼Œå®ƒåªæ˜¯å›°éš¾è€Œå·²ã€‚ -ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有清晰的æˆåŠŸçš„å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ +ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有关于æˆåŠŸçš„æ¸…æ™°å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ Next [如何使用嵌入型语言](02-How to Utilize Embedded Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index 0ea3730..314e979 100644 --- a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -6,6 +6,6 @@ 我和许多其他的程åºå‘˜æ›¾å å…¥åˆ›é€ ç‰¹æ®Šç›®çš„的嵌入型语言的困境里。我曾ç»åŽ†è¿‡ä¸¤æ¬¡ã€‚å·²ç»å­˜åœ¨äº†è®¸å¤šä¸ºåµŒå…¥åž‹è¯­è¨€è®¾è®¡çš„语言,在创造一个新的语言å‰ï¼Œä½ åº”该三æ€ã€‚ -使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢APIå—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ä¸ªå·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ +使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢 API å—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ç§å·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ Next [选择语言](03-Choosing Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 2fe19d9..7e7d5c9 100644 --- a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,10 +1,10 @@ # 选择语言 -喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„boss说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜é©±åŠ¨ã€‚æ¯«æ— ç–‘é—®ä»–ä»¬æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ +喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„ boss 说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜çš„需求所驱动。毫无疑问他们æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ -但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣 +但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣。 -一门编程语言,如果学习它比学习自然语言还è¦éš¾ï¼Œé‚£å®ƒçœŸçš„应该被称为符å·ã€‚对åˆå­¦è€…和一些门外汉æ¥è¯´â€œå­¦ä¹ ä¸€é—¨æ–°è¯­è¨€â€åƒæ˜¯ä¸€ä¸ªä»¤äººç”Ÿç•的任务,但在你掌æ¡äº†ä¸‰ç§è¯­è¨€åŽï¼Œè¿™åªæ˜¯ä¸€ä¸ªç†Ÿæ‚‰å¯ç”¨çš„库的简å•问题。一个程åºå‘˜è¶‹å‘于æ€è€ƒä¸€ä¸ªç”±ä¸‰å››é—¨è¯­è¨€ç»„æˆçš„一个大æ‚çƒ©ç³»ç»Ÿï¼Œä½†æˆ‘è®¤ä¸ºè¿™æ ·ä¸€ä¸ªç³»ç»Ÿåœ¨å¾ˆå¤šæƒ…å†µä¸‹è¦æ¯”å•一语言系统è¦å¼ºå¤§ï¼Œç†ç”±æœ‰ä»¥ä¸‹å‡ ä¸ªæ–¹é¢ï¼š +一门编程语言,如果学习它比学习自然语言还è¦éš¾ï¼Œé‚£å®ƒçœŸçš„应该被称为符å·ã€‚对åˆå­¦è€…和一些门外汉æ¥è¯´â€œå­¦ä¹ ä¸€é—¨æ–°è¯­è¨€â€åƒæ˜¯ä¸€ä¸ªä»¤äººç”Ÿç•的任务,但在你掌æ¡äº†ä¸‰ç§è¯­è¨€åŽï¼Œè¿™åªæ˜¯ä¸€ä¸ªç†Ÿæ‚‰å¯ç”¨çš„库的简å•问题。一个程åºå‘˜è¶‹å‘于æ€è€ƒä¸€ä¸ªç”±ä¸‰å››é—¨è¯­è¨€ç»„æˆçš„一个大æ‚烩系统,但我认为这样一个系统在以下几方é¢è¦æ¯”å•一语言系统在很多情况下è¦å¼ºå¤§ï¼š - ä¸åŒç¬¦å·ç¼–写的部分间,必è¦çš„æ¾è€¦åˆå­˜åœ¨ï¼ˆè™½ç„¶å¯èƒ½æ²¡æœ‰å¹²å‡€çš„æŽ¥å£ï¼‰ - 通过独立é‡å†™æ¯ä¸ªç»„件,你å¯ä»¥è½»æ¾åœ°å†™å‡ºä¸€ä¸ªæ–°çš„è¯­è¨€å¹³å° diff --git a/zh/4-Glossary.md b/zh/4-Glossary.md index e939d6d..0cf2850 100644 --- a/zh/4-Glossary.md +++ b/zh/4-Glossary.md @@ -1,9 +1,9 @@ # è¯æ±‡è¡¨ -è¿™æ˜¯è¿™ç¯‡æ–‡ç« é‡Œç”¨åˆ°çš„ä¸€äº›çŸ­è¯­çš„è¯æ±‡è¡¨ã€‚它们ä¸ä¸€å®šæ˜¯äººä»¬ç†Ÿæ‚‰çš„æ ‡å‡†å«ä¹‰ï¼ŒEric S. Raymond曾ç»ç¼–译过一份信æ¯é‡å·¨å¤§çš„è¯æ±‡è¡¨[HackerDict],如果你能ç†è§£å…¶ä¸­çš„ä¸€äº›ç‰‡æ®µï¼Œé˜…è¯»è¿™ä¸ªè¯æ±‡è¡¨å°†æ˜¯æƒŠå–œè€Œæ„‰æ‚¦çš„。 +è¿™æ˜¯è¿™ç¯‡æ–‡ç« é‡Œç”¨åˆ°çš„ä¸€äº›çŸ­è¯­çš„è¯æ±‡è¡¨ã€‚它们ä¸ä¸€å®šæ˜¯äººä»¬ç†Ÿæ‚‰çš„æ ‡å‡†å«ä¹‰ï¼ŒEric S. Raymond 曾ç»ç¼–译过一份信æ¯é‡å·¨å¤§çš„è¯æ±‡è¡¨ [HackerDict],如果你能ç†è§£å…¶ä¸­çš„ä¸€äº›ç‰‡æ®µï¼Œé˜…è¯»è¿™ä¸ªè¯æ±‡è¡¨å°†æ˜¯æƒŠå–œè€Œæ„‰æ‚¦çš„。 **unk-unk** -: unknown-unknown的简写。指的是一些暂时ä¸èƒ½è¢«æ¦‚念化的问题,它们会å·èµ°é¡¹ç›®çš„æ—¶é—´å¹¶ä¸”阻塞时间表。 +: unknown-unknown 的简写。指的是一些暂时ä¸èƒ½è¢«æ¦‚念化的问题,它们会å·èµ°é¡¹ç›®çš„æ—¶é—´å¹¶ä¸”阻塞时间表。 **boss** : 给你任务的人或实体,有些地方å¯èƒ½æ³›æŒ‡å…¬ä¼—。 @@ -48,7 +48,7 @@ : 一ç§ç”±äºŽæœ‰æ•ˆä¿¡æ¯è¢«å¤ªå¤šæ— æ•ˆä¿¡æ¯æŽ©ç›–导致你ä¸èƒ½å‘现它的效应 **挂钟** -: 由挂钟测é‡çš„现实中真实的时间,与CPU时间相对。 +: 由挂钟测é‡çš„现实中真实的时间,与 CPU 时间相对。 **瓶颈** : 系统性能最é‡è¦çš„é™åˆ¶/一个å¯ä»¥é™åˆ¶æ€§èƒ½çš„界é™ã€‚ @@ -66,7 +66,7 @@ : 一个回收垃圾的系统。 **内存泄露** -: æ— æ„æŒæœ‰çš„一系列对象的引用,它们é¿å…了垃圾回收(或者垃圾回收器或内存管ç†ç³»ç»Ÿä¸­çš„bugï¼ï¼‰å¯¼è‡´ç¨‹åºé𿗶间逿¸å¢žåŠ äº†å®ƒçš„å†…å­˜å ç”¨ã€‚ +: æ— æ„æŒæœ‰çš„一系列对象的引用,它们é¿å…了垃圾回收(或者垃圾回收器或内存管ç†ç³»ç»Ÿä¸­çš„ bugï¼ï¼‰å¯¼è‡´ç¨‹åºé𿗶间逿¸å¢žåŠ äº†å®ƒçš„å†…å­˜å ç”¨ã€‚ **æžé™ç¼–程** : 一ç§å¼ºè°ƒä¸Žå®¢æˆ·äº¤æµä»¥åŠè‡ªåŠ¨åŒ–æµ‹è¯•çš„ç¼–ç¨‹é£Žæ ¼ã€‚ @@ -87,7 +87,7 @@ : 一ç§ä¼˜å…ˆä¸ºæ ‡å‡†åŒ–è€Œéžæ‰§è¡Œè®¾è®¡çš„语言。 **ç®±å­ä¸Žç®­å¤´** -: 一ç§å®½æ¾ï¼Œéžæ­£å¼çš„,由箱å­å’Œç®­å¤´ç»„åˆè€Œæˆè¡¨è¾¾å…³ç³»çš„图表制作风格,这与正å¼çš„图表方法论,比如UML,相对。 +: 一ç§å®½æ¾ï¼Œéžæ­£å¼çš„,由箱å­å’Œç®­å¤´ç»„åˆè€Œæˆè¡¨è¾¾å…³ç³»çš„图表制作风格,这与正å¼çš„图表方法论,比如 UML,相对。 **通用语** : 一ç§è¯­è¨€æ˜¯å¦‚æ­¤å—æ¬¢è¿Žä»¥è‡³äºŽå®ƒæˆäº†å®ƒçš„领域中实际上的标准,例如法语一度æˆä¸ºå›½é™…外交的手段。 diff --git a/zh/6-History.md b/zh/6-History.md index 2f3507e..4260628 100644 --- a/zh/6-History.md +++ b/zh/6-History.md @@ -1,14 +1,14 @@ # 附录 B - åŽ†å² -## è¿ç§»åˆ°Github +## è¿ç§»åˆ° Github -这篇文章已ç»åœ¨github上作为一个仓库创建了,这样它å¯ä»¥å¾ˆå®¹æ˜“åœ°è¢«åˆ†äº«ã€æ›´æ–°ã€æé«˜ã€‚它是从这里å¤åˆ¶è¿‡æ¥çš„。[http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie)。 2016å¹´1月è¿ç§»åˆ°github。 +这篇文章已ç»åœ¨ github 上作为一个仓库创建了,这样它å¯ä»¥å¾ˆå®¹æ˜“åœ°è¢«åˆ†äº«ã€æ›´æ–°ã€æé«˜ã€‚它是从这里å¤åˆ¶è¿‡æ¥çš„。[http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie)。 2016å¹´1月è¿ç§»åˆ° github。 ## 希望å馈或扩展。 请将你对这篇文章的任何评论å‘给我,我会考虑所有的建议,大部分都会对这篇文章有所帮助。 -这篇文章处于GNUå…费文档授æƒä¸‹ã€‚这个授æƒä¸æ˜¯ä¸“门为文章而设计的。文章通常有连贯的令人信æœçš„æœåŠ¡äºŽä¸€ä¸ªä¸­å¿ƒçš„è®ºæ®ã€‚我希望这篇文章尽é‡çŸ­è€Œæ˜“读。 +这篇文章处于 GNU å…费文档授æƒä¸‹ã€‚这个授æƒä¸æ˜¯ä¸“门为文章而设计的。文章通常有连贯的令人信æœçš„æœåŠ¡äºŽä¸€ä¸ªä¸­å¿ƒçš„è®ºæ®ã€‚我希望这篇文章尽é‡çŸ­è€Œæ˜“读。 æˆ‘å¸Œæœ›å®ƒæ˜¯è¯´æ˜Žæ€§çš„ï¼Œå°½ç®¡ä¸æ˜¯ä¸€æœ¬æ•™ç§‘书,它被划分æˆè®¸å¤šå°èŠ‚ï¼Œè¿™æ ·æ–°çš„ç« èŠ‚å¯ä»¥è¢«è‡ªç”±åœ°æ·»åŠ è¿›åŽ»ã€‚æœ‰äº†è¿™æ ·çš„å€¾å‘,你å¯ä»¥ç”¨ä½ è§‰å¾—åˆé€‚çš„æ–¹å¼æ¥æ‰©å±•这篇文章,且æœä»Žè¿™ä¸ªæŽˆæƒçš„规定。 @@ -22,7 +22,7 @@ 在文字间留下批评或评论, -用ä¸åŒå½¢å¼æž„建的能力:比如palmæ ¼å¼æˆ–更好的HTMLæ ¼å¼ã€‚ +用ä¸åŒå½¢å¼æž„建的能力:比如 palm æ ¼å¼æˆ–更好的 HTML æ ¼å¼ã€‚ å¦‚æžœä½ å‘æˆ‘传达了你的工作,我会考虑把它包括在我的å­ç‰ˆæœ¬é‡Œï¼Œéµå¾ªè¿™ä¸ªè®¸å¯è¯çš„规定。你也å¯ä»¥åœ¨æˆ‘的了解之外制作你自己的版本,正如这个å议所说的。 @@ -32,16 +32,16 @@ Robert L. Read ## 原始版本 -这个文档的原始版本由Robert L. Read 在2000年制作,并且以电å­å½¢å¼åœ¨2002年首å‘于Samizdat Press(http://Samizdat.mines.edu) 。被Hire.com的程åºå‘˜æ‰€ä½¿ç”¨ã€‚ +这个文档的原始版本由 Robert L. Read 在2000年制作,并且以电å­å½¢å¼åœ¨2002年首å‘于 Samizdat Press(http://Samizdat.mines.edu) 。被 Hire.com 的程åºå‘˜æ‰€ä½¿ç”¨ã€‚ -在这篇文章2003年被Slashdot刊载åŽï¼Œå¤§æ¦‚有75个人给我å‘过邮件æè¿‡å»ºè®®ä¸Žé”™è¯¯ä¿®æ”¹ã€‚我感激他们中的所有人。å¯èƒ½æœ‰å¾ˆå¤šé‡å¤ï¼Œä½†è¿™äº›äººä¸æ˜¯æå‡ºæ¥æœ€ä¸»è¦çš„建议就是第一个找到了我的bug:Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, 以åŠTom Corcoran。 +在这篇文章2003年被 Slashdot 刊载åŽï¼Œå¤§æ¦‚有75个人给我å‘过邮件æè¿‡å»ºè®®ä¸Žé”™è¯¯ä¿®æ”¹ã€‚我感激他们中的所有人。å¯èƒ½æœ‰å¾ˆå¤šé‡å¤ï¼Œä½†è¿™äº›äººä¸æ˜¯æå‡ºæ¥æœ€ä¸»è¦çš„建议就是第一个找到了我的 bug:Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, ä»¥åŠ Tom Corcoran。 -最åŽï¼Œæˆ‘想感谢Christina Vallery,他的编辑和校对巨大地æé«˜äº†ç¬¬äºŒä»½è‰ç¨¿ï¼Œè¿˜æœ‰Wayne Allen,他鼓励我开始了这件事情。 +最åŽï¼Œæˆ‘想感谢 Christina Vallery,他的编辑和校对巨大地æé«˜äº†ç¬¬äºŒä»½è‰ç¨¿ï¼Œè¿˜æœ‰ Wayne Allen,他鼓励我开始了这件事情。 ## 原始作者的简介 -Robert L. Read ç”Ÿæ´»åœ¨å¾·å…‹è¨æ–¯ï¼Œå¥¥æ–¯æ±€, 有一个妻å­å’Œä¸¤ä¸ªå­©å­ï¼Œä»–现在是Hire.com的首席工程师。他在那里工作了四年。在这之å‰ä»–建立了4R科技,为造纸工业生产基于扫æçš„图åƒåˆ†æžè´¨é‡æŽ§åˆ¶å·¥å…·ã€‚ +Robert L. Read ç”Ÿæ´»åœ¨å¾·å…‹è¨æ–¯ï¼Œå¥¥æ–¯æ±€, 有一个妻å­å’Œä¸¤ä¸ªå­©å­ï¼Œä»–现在是 Hire.com 的首席工程师。他在那里工作了四年。在这之å‰ä»–建立了 4R 科技,为造纸工业生产基于扫æçš„图åƒåˆ†æžè´¨é‡æŽ§åˆ¶å·¥å…·ã€‚ -Rob在1995年在德州大学获得数æ®åº“ç†è®ºæ–¹å‘的计算机åšå£«å­¦ä½ã€‚1987年他在Rice大学获得计算机科学学士学ä½ï¼Œåœ¨16岿—¶ï¼Œä»–就是一个带薪程åºå‘˜äº†ã€‚ +Rob 在1995年在德州大学获得数æ®åº“ç†è®ºæ–¹å‘的计算机åšå£«å­¦ä½ã€‚1987年他在 Rice 大学获得计算机科学学士学ä½ï¼Œåœ¨16岿—¶ï¼Œä»–就是一个带薪程åºå‘˜äº†ã€‚ Next [License](LICENSE.md) diff --git a/zh/7-Contributions.md b/zh/7-Contributions.md index 1f4403d..f9bb8c4 100644 --- a/zh/7-Contributions.md +++ b/zh/7-Contributions.md @@ -4,7 +4,7 @@ ## 我å¯ä»¥åšä»€ä¹ˆè´¡çŒ®ï¼Ÿ -有很多方å¼ä¸º"How to be a Programmer"åšè´¡çŒ® +有很多方å¼ä¸º "How to be a Programmer" åšè´¡çŒ® - æ–°ç« èŠ‚çš„æ€æƒ³ - æå‡å·²æœ‰çš„章节 @@ -19,15 +19,15 @@ - 中文 by [ahangchen](https://github.com/ahangchen) - **如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和review对翻译版本的修改。** + **如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和 review 对翻译版本的修改。** ## 贡献者 -Github在这里会维护一个所有贡献者的列表[contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) +Github 在这里会维护一个所有贡献者的列表 [contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) ## 校正与è¿ç§»åˆ°GitHub -[Braydie Grove](https://www.github.com/braydie)å·²ç»åŒæ„作为主编。 +[Braydie Grove](https://www.github.com/braydie) å·²ç»åŒæ„作为主编。 -Braydie把原始的文档转æˆäº†Markdown的形å¼å¹¶åˆ›å»ºäº†è¿™ä¸ªä»“库。 +Braydie 把原始的文档转æˆäº† Markdown 的形å¼å¹¶åˆ›å»ºäº†è¿™ä¸ªä»“库。 diff --git a/zh/README.md b/zh/README.md index a818b53..c1e62de 100644 --- a/zh/README.md +++ b/zh/README.md @@ -94,7 +94,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - æœåŠ¡ä½ çš„å›¢é˜Ÿ - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何让你的队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index a9bf747..ec11b0e 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -6,16 +6,16 @@ 1. [入门](1-Beginner/README.md) - 个人技能 - - [学会Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [如何分离问题debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [如何用Logæ¥Debug](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [如何用使用日志调试](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [如何处ç†I/O开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) - 团队技能 @@ -27,12 +27,12 @@ - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [没有æ€è·¯çš„æ—¶å€™ï¼Œä¼‘æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) 2. [进阶](2-Intermediate/README.md) - 个人技能 - - [å¦‚ä½•ä¿æŒå……满动力](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) @@ -41,26 +41,26 @@ - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [é‡è¦çš„工具](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) - 团队技能 - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [如何直言ä¸èµžåŒä»¥åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) - 评判 - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [如何知é“何时实施昂贵的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) 3. [高级](3-Advanced/README.md) - 技术评判 - - [如何从ä¸å¯èƒ½çš„事情中找到困难的地方](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) - 机智地妥å @@ -70,20 +70,19 @@ - æœåŠ¡ä½ çš„å›¢é˜Ÿ - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何从你的åŒä¼´èº«ä¸ŠèŽ·å¾—æœ€å¤§æ”¶ç›Š](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何分割问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [å¦‚ä½•ä¸ºä¸€ä¸ªå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [如何高效交æµ](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [å¦‚ä½•æŠŠåˆ«äººä¸æƒ³å¬çš„è¯è¯´ç»™ä»–们å¬](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) -6. [附录 C - 贡献 (至January 2016)](7-Contributions.md) +6. [附录 C - 贡献 (至2016å¹´1月)](7-Contributions.md) Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. - From 319f6ce39f0a086c12560de88c26317e4bbfda2e Mon Sep 17 00:00:00 2001 From: ahangchen Date: Sun, 10 Apr 2016 00:18:02 +0800 Subject: [PATCH 084/149] [patch]fix translation --- zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index 6ecaf37..da4b517 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -16,7 +16,7 @@ 一个读者,Rob Hafernik,在这一节中写下了这样的评论: -> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚è¿™å°±æœ‰å¦‚å½“ä½ å·¥ä½œåœ¨ä¸€ä¸ªå¤§çš„ç³»ç»Ÿä¸­è¦æœ‰å¯¹å³æ—¶ç›®æ ‡çš„坿µ‹é‡è¿›æ­¥ä¸€æ ·*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 +> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚å› ä¸ºä½ å·¥ä½œåœ¨ä¸€ä¸ªåºžå¤§çš„ç³»ç»Ÿä¸­ï¼Œå¿…é¡»æœ‰å³æ—¶ç›®æ ‡ç›¸å…³çš„坿µ‹é‡çš„进步,所以这些也是*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ From f375400d82671bf4544e33942889c27448a186e5 Mon Sep 17 00:00:00 2001 From: ahangchen Date: Sun, 10 Apr 2016 00:20:26 +0800 Subject: [PATCH 085/149] [patch]fix translation --- .../Serving-Your-Team/10-How to Deal with Managerial Myths.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index b0cb34f..6bc4f03 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,6 +1,6 @@ # 如何处ç†ç®¡ç†ç¥žè¯ -*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›è§£é‡Šå®‡å®™å’Œäººç±»ä¹‹é—´çš„关系的宗教故事。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š +*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›è§£é‡Šå®‡å®™ä»¥åŠå’Œäººç±»å’Œå®‡å®™ä¹‹é—´çš„关系的宗教故事。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š - æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ - 程åºå‘˜æ˜¯å¹³ç­‰çš„。(程åºå‘˜å¯ä»¥æŒ‰é‡è¦ç¨‹åº¦åˆ†ç±»ã€‚) From 61d965ba334804b5e354a92f04c02af40ed81838 Mon Sep 17 00:00:00 2001 From: Xdminsy Date: Sun, 17 Apr 2016 00:49:15 +0800 Subject: [PATCH 086/149] Update 09-How to Manage Memory.md In C++, memory that is dynamically allocated using the new operator need to be freed using the delete operator. --- zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md index a87e0ad..7fa81d5 100644 --- a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -10,6 +10,6 @@ 当你å¯ä»¥å®šä¹‰ä½ ä¸€æ¬¡éœ€è¦çš„æ•°é‡çš„上界的时候,一个é‡è¦çš„æƒ…况出现了:如果这些对象都å ç”¨ç›¸åŒå¤§å°çš„内存,你å¯ä»¥ä½¿ç”¨å•独的一å—å†…å­˜ï¼Œæˆ–ç¼“å­˜ï¼Œæ¥æŒæœ‰æ‰€æœ‰çš„这些对象。你需è¦çš„对象å¯ä»¥åœ¨è¿™ä¸ªç¼“存里以循环的方å¼åˆ†é…å’Œé‡Šæ”¾ï¼Œæ‰€ä»¥å®ƒæœ‰æ—¶å€™è¢«ç§°ä¸ºçŽ¯ç¼“å­˜ã€‚è¿™é€šå¸¸æ¯”å †å†…å­˜åˆ†é…æ›´å¿«ã€‚(译者注:这也被称为对象池。) -æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no free)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 +æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no delete)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 Next [如何处ç†å¶çŽ°çš„ Bug](10-How to Deal with Intermittent Bugs.md) From 6a8787680e13841110de40c9271168ed8961d9af Mon Sep 17 00:00:00 2001 From: ZacMarcus Date: Fri, 22 Apr 2016 23:51:30 +1000 Subject: [PATCH 087/149] Removed duplicate definitions in the glossary --- en/GLOSSARY.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/en/GLOSSARY.md b/en/GLOSSARY.md index c02bc64..794dfa6 100644 --- a/en/GLOSSARY.md +++ b/en/GLOSSARY.md @@ -6,10 +6,6 @@ This is a glossary of terms as used in this essay. These do not necessarily have Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule. -### boss - -The person or entity that gives you tasks. In some cases this may be the public at large. - ### printlining The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging. @@ -42,10 +38,6 @@ Big improvements that cost little. The initiator of projects. -### garbage - -Objects that are no longer needed that hold memory. - ### business A group of people organized for making money. @@ -80,7 +72,7 @@ Memory can be said to be heap allocated whenever the mechanism for freeing it is ### garbage -Allocated memory that no longer has any useful meaning. +Memory which is being taken up by objects your application no longer needs. ### garbage collector @@ -140,4 +132,4 @@ A document meant to be the starting point of a technical discussion. A strawman ### white-paper -An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. \ No newline at end of file +An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. From 1d15fcc555d6b1e650cbf8f007ce93b5d14f2a5c Mon Sep 17 00:00:00 2001 From: Fokion Zervoudakis Date: Sun, 24 Apr 2016 00:10:20 +0100 Subject: [PATCH 088/149] Update 01-Learn To Debug.md Delete redundant 'the'. --- en/1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md index 0e2e0bf..0f64b6d 100644 --- a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -14,7 +14,7 @@ The common ways of looking into the ‘innards’ of an executing program can be - Printlining - Making a temporary modification to the program, typically adding lines that print information out, and - Logging - Creating a permanent window into the programs execution in the form of a log. -Debugging tools are wonderful when they are stable and available, but the printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. +Debugging tools are wonderful when they are stable and available, but printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. From a1beb4934771f24b3d26fb1f9dfeb8fb1ff5b1ce Mon Sep 17 00:00:00 2001 From: Fokion Zervoudakis Date: Sun, 24 Apr 2016 00:11:36 +0100 Subject: [PATCH 089/149] Update 04-How to Debug Using a Log.md Delete redundant 'the'. --- en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index 320c45a..acaa3da 100644 --- a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,6 +1,6 @@ # How to Debug Using a Log -*Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of the programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: +*Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: - Logs can provide useful information about bugs that are hard to reproduce (such as those that occur in the production environment but that cannot be reproduced in the test environment). - Logs can provide statistics and data relevant to performance, such as the time passing between statements. @@ -10,4 +10,4 @@ The amount to output into the log is always a compromise between information and If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. -Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) \ No newline at end of file +Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) From 5c7f61ec8a40348539519469a4375c7321851f94 Mon Sep 17 00:00:00 2001 From: Fokion Zervoudakis Date: Sun, 24 Apr 2016 19:41:59 +0100 Subject: [PATCH 090/149] Update 04-How to Debug Using a Log.md Resolve grammatical error. --- en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index acaa3da..2a7d680 100644 --- a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -6,7 +6,7 @@ - Logs can provide statistics and data relevant to performance, such as the time passing between statements. - When configurable, logs allow general information to be captured in order to debug unanticipated specific problems without having to modify and/or redeploy the code just to deal with those specific problems. -The amount to output into the log is always a compromise between information and brevity. Too much information makes the log expensive and produces *scroll blindness*, making it hard to find the information you need. Too little information and it may not contain what you need. For this reason, making what is output configurable is very useful. Typically, each record in the log will identify its position in the source code, the thread that executed it if applicable, the precise time of execution, and, commonly, an additional useful piece of information, such as the value of some variable, the amount of free memory, the number of data objects, etc. These log statements are sprinkled throughout the source code but are particularly at major functionality points and around risky code. Each statement can be assigned a level and will only output a record if the system is currently configured to output that level. You should design the log statements to address problems that you anticipate. Anticipate the need to measure performance. +The amount to output into the log is always a compromise between information and brevity. Too much information makes the log expensive and produces *scroll blindness*, making it hard to find the information you need. Too little information and it may not contain what you need. For this reason, making what is output configurable is very useful. Typically, each record in the log will identify its position in the source code, the thread that executed it if applicable, the precise time of execution, and, commonly, an additional useful piece of information, such as the value of some variable, the amount of free memory, the number of data objects, etc. These log statements are sprinkled throughout the source code, particularly at major functionality points and around risky code. Each statement can be assigned a level and will only output a record if the system is currently configured to output that level. You should design the log statements to address problems that you anticipate. Anticipate the need to measure performance. If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. From a1612d74c25018387a0d502649673a45423fde7a Mon Sep 17 00:00:00 2001 From: Waldir Pimenta Date: Mon, 25 Apr 2016 01:16:18 +0100 Subject: [PATCH 091/149] "inured to" --> "accustomed to" per @Socialery's suggestion at #93 --- .../Team-Skills/11-How to Deal with Difficult People.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index 28884fc..c452534 100644 --- a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -2,7 +2,7 @@ You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. -This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often used to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. +This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often accustomed to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen to and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. From ab1edb38bfaf2185f6d67c312edeade54cd00278 Mon Sep 17 00:00:00 2001 From: Dinesh Saini Date: Mon, 25 Apr 2016 10:51:40 +0530 Subject: [PATCH 092/149] Update 03-Choosing Languages.md Grammar Corrected (Semi column is missing) --- en/3-Advanced/Technical-Judgment/03-Choosing Languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md index e759f73..50dee07 100644 --- a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -10,6 +10,6 @@ Programming languages should really be called notations in that learning one is - You can evolve to a new language/platform easily by rewriting each component individually, - One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. -Some of these effects may only be psychological; but psychology matters. In the end the costs of language tyranny outweigh any advantage that it provides. +Some of these effects may only be psychological; but psychology matters. In the end, the costs of language tyranny outweigh any advantage that it provides. Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) From eb76879189b1c922af210d573910a92f21c4d4d2 Mon Sep 17 00:00:00 2001 From: Luigi Martin Petrella Date: Tue, 26 Apr 2016 18:31:38 +0200 Subject: [PATCH 093/149] Update 03-How to Manage Consultants.md Hi, this is a proposal to improve this chapter. Please consider to ask someone for a grammar review since I'm not english mothertongue (I'm Italian actually). Let me know what do you think best regards Martin --- .../03-How to Manage Consultants.md | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 6844c3b..d7a326f 100644 --- a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -1,9 +1,25 @@ # How to Manage Consultants -Use consultants, but don't rely on them. They are wonderful people and deserve a great deal of respect. Since they get to see a lot of different projects, they often know more about specific technologies and even programming techniques than you will. The best way to use them is as educators in-house that can teach by example. +If you get appointed as technical leader of some project in a medium/big company, most likely you’ll have to deal with consultants. This is a really delicate matter, because your company is going to pay for those additional resources but the results will mostly depend on how you manage them. +“Your professional reputation depends on consultants’ performance more than consultants’ careers depend on your feedback†+Use consultants, but don't rely on them. They are wonderful people and deserve a great deal of respect. Since they get to see a lot of different projects, they often know more about specific technologies and even programming techniques than you will. The best way to use them is as educators in-house that can teach by example. After all, they are here to do something that regular employees cannot do, either because there is a big workload or because employees actually don't know how to do it. +However, they usually cannot become part of the team in the same sense that regular employees are, if only because you may not have enough time to learn their strengths and weaknesses. Their financial commitment is much lower. They can move more easily. They may have less to gain if the company does well. +Formally you are the “customerâ€, so you have the right to pretend what you payed for – results – but this cannot be achieved just by scheduling deadlines. To get the most from consultants, you’ll have to leverage on your social skills more than rely on project management or scrum tools: +- start building a seamless team; ask consultants to join for coffee break or lunch with you and the other regular employee team members. +- show consideration; start from remember consultants’ names correctly. It’s always unpleasant when someone doesn’t remember your name or spells it wrong, but if this is perceived not as simple mistake but driven by poor consideration by the customer personnel towards the consultant it becomes very annoying. +- create empathy; include consultants when you say "we" while talking about the project your team is working on, let them feel that they will be really part of the success you want to achieve. +Remember that an annoyed consultant will perform very poorly, resulting in an economic damage for your company and a misstep for you as a leader. +If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. +You should always take into account that writing readable and maintainable code is not the main priority of a consultant - its goal is to meet client expectation which are mostly expressed in terms of deadlines and functionalities that shall be implemented. +When deadlines are approaching, consultant are masters in rapidly patching software to make it work quickly – even if that means to embed into source code something like configuration parameters or fake data. Take a look at this example: -However, they usually cannot become part of the team in the same sense that regular employees are, if only because you may not have enough time to learn their strengths and weaknesses. Their financial commitment is much lower. They can move more easily. They may have less to gain if the company does well. Some will be good, some will be average, and some will be bad, but hopefully your selection of consultants will not be as careful as your selection of employees, so you will get more bad ones. +// FIXME +sendMail(request.getAccount().getAccountInternet().getUsr(), +"Please confirm registration by clicking on the following link:

Confirm"); -If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the a project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. +This is why you shall explicitly ask consultant to write good code, more than reviewing every single LOC – let pass the message that the extra effort spent for writing elegant and reusable code will be appreciated. +Another good practice is to make every team member accountable in the same way for the work they produce – e.g. make mandatory for everyone to provide header comment blocks into programming code or editor/reviewers tables into delivered documents so that any file can be attributed to its author. Given the current emphasis about online professional reputation and personal branding, accountability will be a lever for consultants to avoid delivering something that they wouldn’t be proud of, encouraged by the fact that they could be already gone somewhere else when poor quality of their job is revealed. -Next [How to Communicate the Right Amount](04-How to Communicate the Right Amount.md) \ No newline at end of file + +Next [How to Communicate the Right Amount](04-How to Communicate the Right Amount.md) From 4f09b95d28c57e16614ae0c4755fd9572f6cbbe5 Mon Sep 17 00:00:00 2001 From: Luigi Martin Petrella Date: Tue, 26 Apr 2016 18:33:49 +0200 Subject: [PATCH 094/149] Update 03-How to Manage Consultants.md --- .../Team-Skills/03-How to Manage Consultants.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index d7a326f..f16d632 100644 --- a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -11,12 +11,7 @@ Formally you are the “customerâ€, so you have the right to pretend what you p Remember that an annoyed consultant will perform very poorly, resulting in an economic damage for your company and a misstep for you as a leader. If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. You should always take into account that writing readable and maintainable code is not the main priority of a consultant - its goal is to meet client expectation which are mostly expressed in terms of deadlines and functionalities that shall be implemented. -When deadlines are approaching, consultant are masters in rapidly patching software to make it work quickly – even if that means to embed into source code something like configuration parameters or fake data. Take a look at this example: - -// FIXME -sendMail(request.getAccount().getAccountInternet().getUsr(), -"Please confirm registration by clicking on the following link:

Confirm"); +When deadlines are approaching, consultant are masters in rapidly patching software to make it work quickly – even if that means to embed into source code something like configuration parameters or fake data. This is why you shall explicitly ask consultant to write good code, more than reviewing every single LOC – let pass the message that the extra effort spent for writing elegant and reusable code will be appreciated. Another good practice is to make every team member accountable in the same way for the work they produce – e.g. make mandatory for everyone to provide header comment blocks into programming code or editor/reviewers tables into delivered documents so that any file can be attributed to its author. Given the current emphasis about online professional reputation and personal branding, accountability will be a lever for consultants to avoid delivering something that they wouldn’t be proud of, encouraged by the fact that they could be already gone somewhere else when poor quality of their job is revealed. From 206995e99d4b338751e96d28b51c81aa6cd2bc47 Mon Sep 17 00:00:00 2001 From: Luigi Martin Petrella Date: Tue, 26 Apr 2016 18:34:49 +0200 Subject: [PATCH 095/149] Update 03-How to Manage Consultants.md --- en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index f16d632..94f1835 100644 --- a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -8,12 +8,15 @@ Formally you are the “customerâ€, so you have the right to pretend what you p - start building a seamless team; ask consultants to join for coffee break or lunch with you and the other regular employee team members. - show consideration; start from remember consultants’ names correctly. It’s always unpleasant when someone doesn’t remember your name or spells it wrong, but if this is perceived not as simple mistake but driven by poor consideration by the customer personnel towards the consultant it becomes very annoying. - create empathy; include consultants when you say "we" while talking about the project your team is working on, let them feel that they will be really part of the success you want to achieve. + Remember that an annoyed consultant will perform very poorly, resulting in an economic damage for your company and a misstep for you as a leader. If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. + You should always take into account that writing readable and maintainable code is not the main priority of a consultant - its goal is to meet client expectation which are mostly expressed in terms of deadlines and functionalities that shall be implemented. When deadlines are approaching, consultant are masters in rapidly patching software to make it work quickly – even if that means to embed into source code something like configuration parameters or fake data. This is why you shall explicitly ask consultant to write good code, more than reviewing every single LOC – let pass the message that the extra effort spent for writing elegant and reusable code will be appreciated. + Another good practice is to make every team member accountable in the same way for the work they produce – e.g. make mandatory for everyone to provide header comment blocks into programming code or editor/reviewers tables into delivered documents so that any file can be attributed to its author. Given the current emphasis about online professional reputation and personal branding, accountability will be a lever for consultants to avoid delivering something that they wouldn’t be proud of, encouraged by the fact that they could be already gone somewhere else when poor quality of their job is revealed. From 0b7f5f3d104b3953ea03e282de09b9075db8839b Mon Sep 17 00:00:00 2001 From: ajsebastian Date: Tue, 26 Apr 2016 17:00:02 -0400 Subject: [PATCH 096/149] Update 01-Learn To Debug.md --- en/1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md index 0f64b6d..b073d2d 100644 --- a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,5 +1,5 @@ # Learn to Debug - +[//]: # (Version:1.0.0) Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. From 0e88bb86385e57ba8fac8da44bc738e104bcbe60 Mon Sep 17 00:00:00 2001 From: ajsebastian Date: Fri, 29 Apr 2016 12:52:55 -0400 Subject: [PATCH 097/149] Added files via upload Created a standard version comment at the top of every file, which reads [//]: # (Version:1.0.0) --- LANGS.md | 3 ++- README.md | 2 +- .../02-How to Debug by Splitting the Problem Space.md | 2 +- en/1-Beginner/Personal-Skills/03-How to Remove an Error.md | 2 +- en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md | 2 +- .../05-How to Understand Performance Problems.md | 2 +- .../Personal-Skills/06-How to Fix Performance Problems.md | 2 +- en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md | 2 +- .../Personal-Skills/08-How to Deal with IO Expense.md | 2 +- en/1-Beginner/Personal-Skills/09-How to Manage Memory.md | 2 +- .../Personal-Skills/10-How to Deal with Intermittent Bugs.md | 2 +- en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md | 2 +- en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md | 2 +- en/1-Beginner/README.md | 2 +- en/1-Beginner/Team-Skills/01-Why Estimation is Important.md | 2 +- .../Team-Skills/02-How to Estimate Programming Time.md | 2 +- en/1-Beginner/Team-Skills/03-How to Find Out Information.md | 2 +- .../04-How to Utilize People as Information Sources.md | 2 +- en/1-Beginner/Team-Skills/05-How to Document Wisely.md | 2 +- en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md | 2 +- en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md | 2 +- en/1-Beginner/Team-Skills/08-How to Unit Test.md | 2 +- en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md | 2 +- .../Team-Skills/10-How to Recognize When to Go Home.md | 2 +- .../Team-Skills/11-How to Deal with Difficult People.md | 2 +- .../01-How to Tradeoff Quality Against Development Time.md | 2 +- zh/1-Beginner/Personal-Skills/01-Learn To Debug.md | 2 +- .../02-How to Debug by Splitting the Problem Space.md | 2 +- zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md | 2 +- zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md | 2 +- .../05-How to Understand Performance Problems.md | 2 +- .../Personal-Skills/06-How to Fix Performance Problems.md | 2 +- zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md | 2 +- .../Personal-Skills/08-How to Deal with IO Expense.md | 2 +- zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md | 2 +- .../Personal-Skills/10-How to Deal with Intermittent Bugs.md | 2 +- zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md | 2 +- zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md | 2 +- zh/1-Beginner/README.md | 2 +- zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md | 2 +- .../Team-Skills/02-How to Estimate Programming Time.md | 2 +- zh/1-Beginner/Team-Skills/03-How to Find Out Information.md | 2 +- .../04-How to Utilize People as Information Sources.md | 2 +- zh/1-Beginner/Team-Skills/05-How to Document Wisely.md | 2 +- zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md | 2 +- zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md | 2 +- zh/1-Beginner/Team-Skills/08-How to Unit Test.md | 2 +- zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md | 2 +- .../Team-Skills/10-How to Recognize When to Go Home.md | 2 +- .../Team-Skills/11-How to Deal with Difficult People.md | 2 +- .../01-How to Tradeoff Quality Against Development Time.md | 2 +- .../Judgment/02-How to Manage Software System Dependence.md | 2 +- .../Judgment/03-How to Decide if Software is Too Immature.md | 2 +- .../Judgment/04-How to Make a Buy vs Build Decision.md | 2 +- zh/2-Intermediate/Judgment/05-How to Grow Professionally.md | 2 +- zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md | 2 +- .../07-How to Know When to Apply Fancy Computer Science.md | 2 +- zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md | 2 +- zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md | 2 +- .../Personal-Skills/02-How to be Widely Trusted.md | 2 +- .../Personal-Skills/03-How to Tradeoff Time vs Space.md | 2 +- zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md | 2 +- .../05-How to Balance Brevity and Abstraction.md | 2 +- .../Personal-Skills/06-How to Learn New Skills.md | 2 +- zh/2-Intermediate/Personal-Skills/07-Learn to Type.md | 2 +- .../Personal-Skills/08-How to Do Integration Testing.md | 2 +- .../Personal-Skills/09-Communication Languages.md | 2 +- zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md | 2 +- zh/2-Intermediate/Personal-Skills/11-How to analyze data.md | 2 +- zh/2-Intermediate/README.md | 2 +- .../Team-Skills/01-How to Manage Development Time.md | 2 +- .../Team-Skills/02-How to Manage Third-Party Software Risks.md | 2 +- zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md | 2 +- .../Team-Skills/04-How to Communicate the Right Amount.md | 2 +- .../05-How to Disagree Honestly and Get Away with It.md | 2 +- .../Compromising-Wisely/01-How to Fight Schedule Pressure.md | 2 +- .../Compromising-Wisely/02-How to Understand the User.md | 2 +- zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md | 2 +- zh/3-Advanced/README.md | 1 + zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md | 2 +- .../Serving-Your-Team/02-How to Choose What to Work On.md | 2 +- .../03-How to Get the Most From Your Teammates.md | 2 +- .../Serving-Your-Team/04-How to Divide Problems Up.md | 2 +- .../Serving-Your-Team/05-How to Handle Boring Tasks.md | 2 +- .../06-How to Gather Support for a Project.md | 2 +- zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md | 2 +- zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md | 2 +- .../09-How to Tell People Things They Don't Want to Hear.md | 2 +- .../Serving-Your-Team/10-How to Deal with Managerial Myths.md | 2 +- .../11-How to Deal with Organizational Chaos.md | 2 +- .../01-How to Tell the Hard From the Impossible.md | 2 +- .../Technical-Judgment/02-How to Utilize Embedded Languages.md | 2 +- zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md | 2 +- zh/4-Glossary.md | 2 +- zh/5-Bibliography.md | 2 +- zh/6-History.md | 2 +- zh/7-Contributions.md | 2 +- zh/LICENSE.md | 2 +- zh/README.md | 2 +- zh/SUMMARY.md | 1 + 100 files changed, 101 insertions(+), 98 deletions(-) diff --git a/LANGS.md b/LANGS.md index c4fcc4c..6335876 100644 --- a/LANGS.md +++ b/LANGS.md @@ -1,2 +1,3 @@ * [English](en/) -* [Chinese](zh/) \ No newline at end of file +* [Chinese](zh/) + [//]: # (Version:1.0.0) \ No newline at end of file diff --git a/README.md b/README.md index f23f12f..68eddba 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # How to be a Programmer: Community Version - +[//]: # (Version:1.0.0) Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read diff --git a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index 8301bde..f8fbe61 100644 --- a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -1,5 +1,5 @@ # How to Debug by Splitting the Problem Space - +[//]: # (Version:1.0.0) Debugging is fun, because it begins with a mystery. You think it should do something, but instead it does something else. It is not always quite so simple---any examples I can give will be contrived compared to what sometimes happens in practice. Debugging requires creativity and ingenuity. If there is a single key to debugging it is to use the divide and conquer technique on the mystery. Suppose, for example, you created a program that should do ten things in a sequence. When you run it, it crashes. Since you didn't program it to crash, you now have a mystery. When you look at the output, you see that the first seven things in the sequence were run successfully. The last three are not visible from the output, so now your mystery is smaller: ‘It crashed on thing #8, #9, or #10.’ diff --git a/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 8edb6b1..d88eb5d 100644 --- a/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,5 +1,5 @@ # How to Remove an Error - +[//]: # (Version:1.0.0) I've intentionally separated the act of examining a program's execution from the act of fixing an error. But of course, debugging does also mean removing the bug. Ideally you will have perfect understanding of the code and will reach an ‘A-Ha!’ moment where you perfectly see the error and how to fix it. But since your program will often use insufficiently documented systems into which you have no visibility, this is not always possible. In other cases the code is so complicated that your understanding cannot be perfect. In fixing a bug, you want to make the smallest change that fixes the bug. You may see other things that need improvement; but don't fix those at the same time. Attempt to employ the scientific method of changing one thing and only one thing at a time. The best process for this is to be able to easily reproduce the bug, then put your fix in place, and then rerun the program and observe that the bug no longer exists. Of course, sometimes more than one line must be changed, but you should still conceptually apply a single atomic change to fix the bug. diff --git a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index 2a7d680..1cc3ab9 100644 --- a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,5 +1,5 @@ # How to Debug Using a Log - +[//]: # (Version:1.0.0) *Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: - Logs can provide useful information about bugs that are hard to reproduce (such as those that occur in the production environment but that cannot be reproduced in the test environment). diff --git a/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index e08f054..72e26d6 100644 --- a/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,5 +1,5 @@ # How to Understand Performance Problems - +[//]: # (Version:1.0.0) Learning to understand the performance of a running system is unavoidable for the same reason that learning debugging is. Even if you understand perfectly precisely the cost of the code you write, your code will make calls into other software systems that you have little control over or visibility into. However, in practice performance problems are a little different and a little easier than debugging in general. Suppose that you or your customers consider a system or a subsystem to be too slow. Before you try to make it faster, you must build a mental model of why it is slow. To do this you can use a profiling tool or a good log to figure out where the time or other resources are really being spent. There is a famous dictum that 90% of the time will be spent in 10% of the code. I would add to that the importance of input/output expense (I/O) to performance issues. Often most of the time is spent in I/O in one way or another. Finding the expensive I/O and the expensive 10% of the code is a good first step to building your mental model. diff --git a/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index 8949e74..fbed002 100644 --- a/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,5 +1,5 @@ # How to Fix Performance Problems - +[//]: # (Version:1.0.0) Most software projects can be made with relatively little effort 10 to 100 times faster than they are at the time they are first released. Under time-to-market pressure, it is both wise and effective to choose a solution that gets the job done simply and quickly, but less efficiently than some other solution. However, performance is a part of usability, and often it must eventually be considered more carefully. The key to improving the performance of a very complicated system is to analyse it well enough to find the *bottlenecks*, or places where most of the resources are consumed. There is not much sense in optimizing a function that accounts for only 1% of the computation time. As a rule of thumb you should think carefully before doing anything unless you think it is going to make the system or a significant part of it at least twice as fast. There is usually a way to do this. Consider the test and quality assurance effort that your change will require. Each change brings a test burden with it, so it is much better to have a few big changes. diff --git a/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index 491a6b2..f73305d 100644 --- a/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,5 +1,5 @@ # How to Optimize Loops - +[//]: # (Version:1.0.0) Sometimes you'll encounter loops, or recursive functions, that take a long time to execute and are bottlenecks in your product. Before you try to make the loop a little faster, spend a few minutes considering if there is a way to remove it entirely. Would a different algorithm do? Could you compute that while computing something else? If you can't find a way around it, then you can optimize the loop. This is simple; move stuff out. In the end, this will require not only ingenuity but also an understanding of the expense of each kind of statement and expression. Here are some suggestions: - Remove floating point operations. diff --git a/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index f396d5b..81a3a15 100644 --- a/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,5 +1,5 @@ # How to Deal with I/O Expense - +[//]: # (Version:1.0.0) For a lot of problems, processors are fast compared to the cost of communicating with a hardware device. This cost is usually abbreviated I/O, and can include network cost, disk I/O, database queries, file I/O, and other use of some hardware not very close to the processor. Therefore building a fast system is often more a question of improving I/O than improving the code in some tight loop, or even improving an algorithm. There are two very fundamental techniques to improving I/O: caching and representation. Caching is avoiding I/O (generally avoiding the reading of some abstract value) by storing a copy of that value locally so no I/O is performed to get the value. The first key to caching is to make it crystal clear which data is the master and which are copies. There is only one master - period. Caching brings with it the danger that the copy sometimes can't reflect changes to the master instantaneously. diff --git a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md index 5f2de80..8c657c3 100644 --- a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -1,5 +1,5 @@ # How to Manage Memory - +[//]: # (Version:1.0.0) Memory is a precious resource that you can't afford to run out of. You can ignore it for a while but eventually you will have to decide how to manage memory. Space that needs to persist beyond the scope of a single subroutine is often called *heap allocated*. A chunk of memory is useless, hence *garbage*, when nothing refers to it. Depending on the system you use, you may have to explicitly deallocate memory yourself when it is about to become garbage. More often you may be able to use a system that provides a *garbage collector*. A garbage collector notices garbage and frees its space without any action required by the programmer. Garbage collection is wonderful: it lessens errors and increases code brevity and concision cheaply. Use it when you can. diff --git a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 15b4775..40238bd 100644 --- a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,5 +1,5 @@ # How to Deal with Intermittent Bugs - +[//]: # (Version:1.0.0) The intermittent bug is a cousin of the 50-foot-invisible-scorpion-from-outer-space kind of bug. This nightmare occurs so rarely that it is hard to observe, yet often enough that it can't be ignored. You can't debug because you can't find it. Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. diff --git a/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 30c495c..50a64f0 100644 --- a/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,5 +1,5 @@ # How to Learn Design Skills - +[//]: # (Version:1.0.0) To learn how to design software, study the action of a mentor by being physically present when they are designing. Then study well-written pieces of software. After that, you can read some books on the latest design techniques. Then you must do it yourself. Start with a small project. When you are finally done, consider how the design failed or succeeded and how you diverged from your original conception. Then move on to larger projects, hopefully in conjunction with other people. Design is a matter of judgement that takes years to acquire. A smart programmer can learn the basics adequately in two months and can improve from there. diff --git a/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index 916a540..f857f86 100644 --- a/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,5 +1,5 @@ # How to Conduct Experiments - +[//]: # (Version:1.0.0) The late, great Edsger Dijkstra has eloquently explained that Computer Science is not an experimental science[ExpCS] and doesn't depend on electronic computers. As he puts it referring to the 1960s [Knife], > ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. diff --git a/en/1-Beginner/README.md b/en/1-Beginner/README.md index fb30975..9baadf0 100644 --- a/en/1-Beginner/README.md +++ b/en/1-Beginner/README.md @@ -1,5 +1,5 @@ # 1. Beginner - +[//]: # (Version:1.0.0) - Personal Skills - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) diff --git a/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 39ffba8..3cb806e 100644 --- a/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -1,5 +1,5 @@ # Why Estimation is Important - +[//]: # (Version:1.0.0) To get a working software system in active use as quickly as possible requires not only planning the development, but also planning the documentation, deployment, and marketing. In a commercial project it also requires sales and finance. Without predictability of the development time, it is impossible to plan these effectively. Good estimation provides predictability. Managers love it, as well they should. The fact that it is impossible, both theoretically and practically, to predict accurately how long it will take to develop software is often lost on managers. We are asked to do this impossible thing all the time, and we must face up to it honestly. However, it would be dishonest not to admit the impossibility of this task, and when necessary, explain it. There is a lot of room for miscommunication about estimates, as people have a startling tendency to think wishfully that the sentence: diff --git a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 866ca48..88b96d6 100644 --- a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -1,5 +1,5 @@ # How to Estimate Programming Time - +[//]: # (Version:1.0.0) Estimation takes practice. It also takes labour. It takes so much labour it may be a good idea to estimate the time it will take to make the estimate, especially if you are asked to estimate something big. When asked to provide an estimate of something big, the most honest thing to do is to stall. Most engineers are enthusiastic and eager to please, and stalling certainly will displease the stalled. But an on-the-spot estimate probably won't be accurate and honest. diff --git a/en/1-Beginner/Team-Skills/03-How to Find Out Information.md b/en/1-Beginner/Team-Skills/03-How to Find Out Information.md index b1f0e45..aecc0ef 100644 --- a/en/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/en/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -1,5 +1,5 @@ # How to Find Out Information - +[//]: # (Version:1.0.0) The nature of what you need to know determines how you should find it. If you need information *about concrete things* that are objective and easy to verify, for example the latest patch level of a software product, ask a large number of people politely by searching the internet for it or by posting on a discussion group. Don't search on the internet for anything that smacks of either opinion or subjective interpretation: the ratio of drivel to truth is too high. diff --git a/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index f62a077..69be910 100644 --- a/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -1,5 +1,5 @@ # How to Utilize People as Information Sources - +[//]: # (Version:1.0.0) Respect every person's time and balance it against your own. Asking someone a question accomplishes far more than just receiving the answer. The person learns about you, both by enjoying your presence and hearing the particular question. You learn about the person in the same way, and you may learn the answer you seek. This is usually far more important than your question. However, the value of this diminishes the more you do it. You are, after all, using the most precious commodity a person has: their time. The benefits of communication must be weighed against the costs. Furthermore, the particular costs and benefits derived differ from person to person. I strongly believe that an executive of 100 people should spend five minutes a month talking to each person in her organization, which would be about 5% of their time. But ten minutes might be too much, and five minutes is too much if they have one thousand employees. The amount of time you spend talking to each person in your organization depends on their role (more than their position). You should talk to your boss more than your boss's boss, but you should talk to your boss's boss a little. It may be uncomfortable, but I believe you have a duty to talk a little bit to all your superiors, each month, no matter what. diff --git a/en/1-Beginner/Team-Skills/05-How to Document Wisely.md b/en/1-Beginner/Team-Skills/05-How to Document Wisely.md index 895062f..abded59 100644 --- a/en/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/en/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,5 +1,5 @@ # How to Document Wisely - +[//]: # (Version:1.0.0) Life is too short to write crap nobody will read; if you write crap, nobody will read it. Therefore a little good documentation is best. Managers often don't understand this, because even bad documentation gives them a false sense of security that they are not dependent on their programmers. If someone absolutely insists that you write truly useless documentation, say 'yes' and quietly begin looking for a better job. There's nothing quite as effective as putting an accurate estimate of the amount of time it will take to produce good documentation into an estimate to slacken the demand for documentation. The truth is cold and hard: documentation, like testing, can take many times longer than developing code. diff --git a/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index 431ce28..e5b2aa3 100644 --- a/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -1,5 +1,5 @@ # How to Work with Poor Code - +[//]: # (Version:1.0.0) It is very common to have to work with poor quality code that someone else has written. Don't think too poorly of them, however, until you have walked in their shoes. They may have been asked very consciously to get something done quickly to meet schedule pressure. Regardless, in order to work with unclear code you must understand it. To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it. To understand it, you will have to read the source code. You will probably have to experiment with it. This is a good time to document, even if it is only for yourself, because the act of trying to document the code will force you to consider angles you might not have considered, and the resulting document may be useful. While you're doing this, consider what it would take to rewrite some or all of the code. Would it actually save time to rewrite some of it? Could you trust it better if you rewrote it? Be careful of arrogance here. If you rewrite it, it will be easier for you to deal with, but will it really be easier for the next person who has to read it? If you rewrite it, what will the test burden be? Will the need to re-test it outweigh any benefits that might be gained? diff --git a/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 91dbf5c..3285753 100644 --- a/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,5 +1,5 @@ # How to Use Source Code Control - +[//]: # (Version:1.0.0) Source code control systems (also known as Version Control Systems) let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. I was late to appreciate the benefits of source code control systems but now I wouldn't live without one even on a one-person project. Generally they are necessary when you have team working on the same code base. However, they have another great advantage: they encourage thinking about the code as a growing, organic system. Since each change is marked as a new revision with a new name or number, one begins to think of the software as a visibly progressive series of improvements. I think this is especially useful for beginners. diff --git a/en/1-Beginner/Team-Skills/08-How to Unit Test.md b/en/1-Beginner/Team-Skills/08-How to Unit Test.md index c1dc402..2e9a344 100644 --- a/en/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/en/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,5 +1,5 @@ # How to Unit Test - +[//]: # (Version:1.0.0) Unit testing, the testing of an individual piece of coded functionality by the team that wrote it, is a part of coding, not something different from it. Part of designing the code is designing how it will be tested. You should write down a test plan, even if it is only one sentence. Sometimes the test will be simple: 'Does the button look good?' Sometimes it will be complex: 'Did this matching algorithm return precisely the correct matches?' Use assertion checking and test drivers whenever possible. This not only catches bugs early, but is very useful later on and lets you eliminate mysteries that you would otherwise have to worry about. diff --git a/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index c578991..24f1405 100644 --- a/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ # Take Breaks when Stumped - +[//]: # (Version:1.0.0) When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index 1a9bae9..7f33239 100644 --- a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,5 +1,5 @@ # How to Recognize When to Go Home - +[//]: # (Version:1.0.0) Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is a serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. Beyond 60 hours a week is an extraordinary effort for me, which I can apply for short periods of time (about one week), and that is sometimes expected of me. I don't know if it is fair to expect 60 hours of work from a person; I don't even know if 40 is fair. I am sure, however, that it is stupid to work so much that you are getting little out of that extra hour you work. For me personally, that's any more than 60 hours a week. I personally think a programmer should exercise noblesse oblige and shoulder a heavy burden. However, it is not a programmer's duty to be a patsy. The sad fact is programmers *are* often asked to be patsies in order to put on a show for somebody, for example a manager trying to impress an executive. Programmers often succumb to this because they are eager to please and not very good at saying no. There are four defences against this: diff --git a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index c452534..8b98887 100644 --- a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -1,5 +1,5 @@ # How to Deal with Difficult People - +[//]: # (Version:1.0.0) You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often accustomed to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. diff --git a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index b1fa293..0f1bb61 100644 --- a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -1,5 +1,5 @@ # How to Tradeoff Quality Against Development Time - +[//]: # (Version:1.0.0) Software development is always a compromise between what the project does and getting the project done. But you may be asked to tradeoff quality to speed the deployment of a project in a way that offends your engineering or business sensibilities. For example, you may be asked to do something that is a poor software engineering practice and that will lead to a lot of maintenance problems. If this happens your first responsibility is to inform your team and to clearly explain the cost of the decrease in quality. After all, your understanding of it should be much better than your boss's understanding. Make it clear what is being lost and what is being gained, and at what cost the lost ground will be regained in the next cycle. In this, the visibility provided by a good project plan should be helpful. If the quality tradeoff affects the quality assurance effort, point that out (both to your boss and quality assurance people). If the quality tradeoff will lead to more bugs being reported after the quality assurance period, point that out. diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md index 6d5a06f..26756e0 100644 --- a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,5 +1,5 @@ # 学会 Debug - +[//]: # (Version:1.0.0) 调试(Debug)是æˆä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸ä¼šè°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ ç†æƒ³ä¸»ä¹‰è€…认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿ï¼Œæ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿ï¼Œä»–ä»¬ä¸æ˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如 GNU ) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果ä¸èƒ½çœ‹é€ä»£ç çš„具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index 9d04270..6688a9e 100644 --- a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -1,5 +1,5 @@ # 如何通过分割问题 Debug - +[//]: # (Version:1.0.0) 调试是有趣的,因为它一开始是个迷。你认为它应该这样åšï¼Œä½†å®žé™…上它å´é‚£æ ·åšã€‚很多时候并ä¸ä»…是这么简å•---我给出的任何例å­éƒ½ä¼šè¢«è®¾è®¡æ¥ä¸Žä¸€äº›å¶å°”在现实中会å‘生的情况相比较。调试需è¦åˆ›é€ åŠ›ä¸Žæ™ºè°‹ã€‚å¦‚æžœè¯´è°ƒè¯•æœ‰ç®€å•之é“,那就是在这个谜题上使用分治法。 å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šä¾æ¬¡æ‰§è¡Œå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´å´©æºƒäº†ã€‚但你本æ¥çš„ç›®çš„å¹¶ä¸æ˜¯æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä¸€ä¸ªè°œé¢˜æ‰”ç»™ä½ äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 1a24042..01692d9 100644 --- a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,5 +1,5 @@ # 如何移除一个错误 - +[//]: # (Version:1.0.0) æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤ bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨å…¶ä»–ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统(比如第三方库),所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ åœ¨ä¿®å¤ bug 时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯·ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤ bug æœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çް bugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察,直到 bug ä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ª bug。 diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index c53c1bc..b10baaf 100644 --- a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,5 +1,5 @@ # 如何使用日志调试 - +[//]: # (Version:1.0.0) *Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为 log。*Printlining* åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚åœ¨ç†æƒ³çš„状æ€ä¸‹ï¼Œç¨‹åºè¿è¡Œæ—¶äº§ç”Ÿçš„æ—¥å¿—ä¿¡æ¯æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: - 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„ bug 的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„ bug。 diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index 46b50b0..a89ca97 100644 --- a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,5 +1,5 @@ # 如何ç†è§£æ€§èƒ½é—®é¢˜ - +[//]: # (Version:1.0.0) 学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹  debug 是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žã€ç²¾ç¡®åœ°ç†è§£äº†ä½ çš„代ç è¿è¡Œæ—¶æ‰€äº§ç”Ÿçš„开销,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨ I/O 上。å‘现昂贵的 I/O 和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index c2778f8..a9ef90c 100644 --- a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,5 +1,5 @@ # å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜ - +[//]: # (Version:1.0.0) 大部分软件都å¯ä»¥é€šè¿‡ä»˜å‡ºç›¸å¯¹è¾ƒå°çš„努力,让他们比刚å‘布时快上10到100å€ã€‚在市场的压力下,选择一个简å•而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œæ¥å‘现其“瓶颈â€ï¼Œæˆ–者其资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index 8d5f4ec..2cf3825 100644 --- a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,5 +1,5 @@ # 如何优化循环 - +[//]: # (Version:1.0.0) 有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…éœ€è¦æ™ºæ…§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: - 删除浮点è¿ç®—æ“作。 diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index 81f2971..7d60d95 100644 --- a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,5 +1,5 @@ # 如何处ç†I/O代价 - +[//]: # (Version:1.0.0) 在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„ I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜ I/O,数æ®åº“查询,文件 I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜ I/O,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法的问题。 有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ– I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦å†æ‰§è¡Œ I/O,以此æ¥é¿å… I/O(通常é¿å…读å–一些抽象的值)。缓存的关键在于è¦è®©å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬å˜å¾—显而易è§ã€‚主干的数æ®åªæœ‰ä¸€ä»½ï¼ˆåœ¨ä¸€ä¸ªæ›´æ–°å‘¨æœŸé‡Œï¼‰ã€‚缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md index 7fa81d5..fe5e320 100644 --- a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -1,5 +1,5 @@ # 如何管ç†å†…å­˜ - +[//]: # (Version:1.0.0) 内存是一ç§ä½ ä¸å¯ä»¥è€—尽的ç贵资æºã€‚在一段时期里,你å¯ä»¥æ— è§†å®ƒï¼Œä½†æœ€ç»ˆä½ å¿…须决定如何管ç†å†…存。 堆内存是在å•一å­ç¨‹åºèŒƒå›´å¤–ï¼Œéœ€è¦æŒç»­ï¼ˆä¿ç•™ï¼‰çš„空间。一大å—内存,在没有东西指å‘它的时候,是无用的,因此被称为*垃圾*。根æ®ä½ æ‰€ä½¿ç”¨çš„系统的ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦è‡ªå·±æ˜¾å¼é‡Šæ”¾å°†è¦å˜æˆåžƒåœ¾çš„内存。更多时候你å¯èƒ½ä½¿ç”¨ä¸€ä¸ªæœ‰*垃圾回收器*的系统。一个垃圾回收器会自己注æ„到垃圾的存在并且在ä¸éœ€è¦ç¨‹åºå‘˜åšä»»ä½•事情的情况下释放它的内存空间。垃圾回收器是奇妙的:它å‡å°äº†é”™è¯¯ï¼Œç„¶åŽå¢žåŠ äº†ä»£ç çš„ç®€æ´æ€§ã€‚如果å¯ä»¥çš„è¯ï¼Œä½¿ç”¨åžƒåœ¾å›žæ”¶å™¨ã€‚ diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 0cf8680..192cc89 100644 --- a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,5 +1,5 @@ # 如何处ç†å¶çŽ°çš„ Bugs - +[//]: # (Version:1.0.0) å¶çް bug 是一ç§ç±»ä¼¼äºŽå¤–太空50è¶³éšèº«èŽå­çš„东西。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ 尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„ bug å¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•ç€åŽ»è®°å½•è¿™ä¸ª bug 出现时的情景,这样你å¯ä»¥åŽ»æŽ¨æµ‹åˆ°åº•æ˜¯ä»€ä¹ˆæ ·çš„å¯å˜æ€§ã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å¯å˜æ€§çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 916c1be..4544985 100644 --- a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,5 +1,5 @@ # 如何学习设计技能 - +[//]: # (Version:1.0.0) 为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œåœ¨ä»–身边学习他的行为。然åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如 android 系统中的谷歌官方应用æºç ï¼‰ã€‚在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 ç„¶åŽä½ å¿…须自己动手了。从一个å°çš„工程开始,当你最åŽå®Œæˆæ—¶ï¼Œè€ƒè™‘为什么这个设计失败了或æˆåŠŸäº†ï¼Œä½ æ˜¯æ€Žæ ·å离你最åˆçš„设想的。然åŽç»§ç»­åŽ»ç€æ‰‹å¤§ä¸€ç‚¹çš„工程,在与其他人åˆä½œæ—¶ä¼šæ›´æœ‰å¸Œæœ›ã€‚设计是一ç§éœ€è¦èŠ±å¾ˆå¤šå¹´åŽ»å­¦ä¹ çš„å…³äºŽè¯„åˆ¤çš„äº‹æƒ…ã€‚ä¸€ä¸ªèªæ˜Žçš„程åºå‘˜å¯ä»¥åœ¨ä¸¤ä¸ªæœˆå†…充分打好这ç§åŸºç¡€ï¼Œç„¶åŽä»Žè¿™é‡Œå¼€å§‹è¿›æ­¥ã€‚ diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index dce60d6..0bfe1d5 100644 --- a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,5 +1,5 @@ # 如何进行实验 - +[//]: # (Version:1.0.0) 已故的伟大的 Edsger Dijkstra 曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] > ...å±å®³å·²ç»å‡ºçŽ°ï¼šä¸»é¢˜çŽ°åœ¨å·²ç»å˜æˆäº†â€œè®¡ç®—机科学†- è¿™å®žé™…ä¸Šï¼Œåƒæ˜¯æŠŠå¤–科手术引用为“手术刀科学†- 这在人们心中深深æ¤å…¥äº†è¿™æ ·ä¸€ä¸ªæ¦‚念:计算机科学是关于机器和它们的外围设备的。 diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md index 14e1080..cb320d8 100644 --- a/zh/1-Beginner/README.md +++ b/zh/1-Beginner/README.md @@ -1,5 +1,5 @@ # 1. 入门 - +[//]: # (Version:1.0.0) - 个人技能 - [学会 Debug](Personal-Skills/01-Learn To Debug.md) - [如何通过分割问题 Debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 29c211e..b48912b 100644 --- a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -1,5 +1,5 @@ # 为什么评估很é‡è¦ - +[//]: # (Version:1.0.0) 为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…的情况,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地认为: diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 7949f59..bb45aa2 100644 --- a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -1,5 +1,5 @@ # 如何评估编程时间 - +[//]: # (Version:1.0.0) 评估需è¦å®žè·µï¼Œä¹Ÿéœ€è¦åŠ³åŠ¨ã€‚å› ä¸ºå®ƒéœ€è¦èŠ±å¦‚æ­¤é•¿çš„æ—¶é—´ï¼Œä»¥è‡³äºŽè¯„ä¼°è¯„ä¼°æœ¬èº«çš„æ—¶é—´å¯èƒ½æ˜¯ä¸€ä¸ªå¥½ä¸»æ„ï¼Œå°¤å…¶æ˜¯ä½ è¢«è¦æ±‚去评估一些巨大的事情。 å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且是渴望愉悦的,而åœä¸‹æ¥å½“然会让他们ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md index 72928aa..ff79f8a 100644 --- a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -1,5 +1,5 @@ # 如何å‘çŽ°ä¿¡æ¯ - +[//]: # (Version:1.0.0) 你所æœå¯»çš„事情的本质决定了你应该如何去寻找它。 如果你需è¦å®¢è§‚的而且容易辨认的*关于具体事物*的信æ¯ï¼Œä¾‹å¦‚一个软件的最新补ä¸ç‰ˆæœ¬ï¼Œå¯ä»¥åœ¨Internetæœç´¢ï¼Œç¤¼è²Œçš„询问很多的人,或者å‘起一个讨论组。ä¸è¦åœ¨ç½‘上æœç´¢ä»»ä½•带有观点或主观解释的东西:能够抵达真相的概率太低了。 diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index 51ef771..90589e5 100644 --- a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -1,5 +1,5 @@ # å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº - +[//]: # (Version:1.0.0) å°Šé‡å…¶ä»–æ¯ä¸ªäººçš„æ—¶é—´ï¼Œä¸Žä½ çš„æ—¶é—´ç›¸å¹³è¡¡ã€‚问别人问题比得到答案能获得更多。人们会从你的存在和倾å¬ç‰¹å®šçš„问题从你身上学到东西。你也å¯ä»¥ç”¨åŒæ ·çš„æ–¹å¼ä»Žåˆ«äººèº«ä¸Šå­¦ä¹ åˆ°ä¸œè¥¿ï¼Œä½ å¯èƒ½å­¦åˆ°ä½ æ­£åœ¨æœå¯»çš„东西的答案。这通常比你的问题更加é‡è¦å¾—多。 然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的 boss 交谈而éžå’Œä½  boss çš„ boss 交谈,但你å¶å°”也å¯ä»¥å’Œä½  boss çš„ boss 交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md index b17d1d6..012e11a 100644 --- a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,5 +1,5 @@ # å¦‚ä½•ç¿æ™ºåœ°å†™æ–‡æ¡£ - +[//]: # (Version:1.0.0) 人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥å¥½ä¸€ç‚¹çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 没有其他事情比精确估计 æŠŠå¥½çš„æ–‡æ¡£è½¬ä¸ºæ”¾æ¾æ–‡æ¡£è¦æ±‚的估计 æ›´ä¸ºæœ‰æ•ˆçŽ‡ã€‚çœŸç›¸æ˜¯å†·é…·è€Œè‰°éš¾çš„ï¼šæ–‡æ¡£ï¼Œå°±åƒæµ‹è¯•,会花比开å‘代ç å¤šå‡ å€çš„æ—¶é—´ã€‚ diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index a1d1f62..c4376f5 100644 --- a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -1,5 +1,5 @@ # 如何在糟糕的代ç ä¸Šå·¥ä½œ - +[//]: # (Version:1.0.0) 工作在别人写的糟糕的代ç ä¸Šæ˜¯å¸¸æœ‰çš„事。ä¸è¦æŠŠä»–们想得太糟,直到你用他们的鞋å­èµ°è·¯æ—¶ã€‚他们å¯èƒ½è¢«è¦æ±‚éžå¸¸è‡ªè§‰åœ°å¿«é€Ÿå®Œæˆä¸€äº›ä¸œè¥¿æ¥æ»¡è¶³æ—¶é—´è¡¨çš„压力。ä¸ç®¡ä¹‹å‰å‘ç”Ÿäº†ä»€ä¹ˆï¼Œä¸ºäº†åœ¨ä¸æ¸…晰的代ç ä¸Šå·¥ä½œï¼Œä½ å¿…é¡»ç†è§£å®ƒã€‚ç†è§£å®ƒéœ€è¦èŠ±è´¹ä¸€äº›å­¦ä¹ æ—¶é—´ï¼Œä½ å¿…é¡»åšæŒä»Žæ—¶é—´è¡¨ä¸­æŸäº›éƒ¨åˆ†åˆ’出一部分时间æ¥åšè¿™ä»¶äº‹ã€‚为了ç†è§£å®ƒä»¬ï¼Œä½ å¿…须读æºä»£ç ï¼Œä½ å¯èƒ½éœ€è¦åœ¨ä¸Šé¢åšä¸€äº›å®žéªŒã€‚ å³ä½¿æ˜¯ä¸ºä½ è‡ªå·±ï¼Œç¼–写文档也是一个好的时机,因为å°è¯•为你的代ç ç¼–写文档会强迫你从你å¯èƒ½æ²¡æœ‰è€ƒè™‘过的角度æ€è€ƒï¼Œå¹¶ä¸”完æˆçš„æ–‡æ¡£å¯èƒ½ä¼šæœ‰ç”¨ã€‚当你在åšè¿™ä¸ªæ—¶ï¼Œè€ƒè™‘é‡å†™éƒ¨åˆ†æˆ–所有代ç ä¼šæ¶ˆè€—你什么东西。是å¦é‡å†™ä¸€éƒ¨åˆ†ä»£ç äº‹å®žä¸ŠçœŸçš„ä¼šèŠ‚çœæ—¶é—´ï¼Ÿä½ é‡å†™ä»£ç åŽä½ ä¼šæ›´ä¿¡ä»»å®ƒå—?在这里å°å¿ƒä½ çš„傲慢。如果你é‡å†™å®ƒï¼Œä½ å¤„ç†å®ƒä¼šæ›´å®¹æ˜“,但下一个必须阅读它的人是å¦çœŸçš„æ›´åŠ å®¹æ˜“ï¼Ÿå¦‚æžœä½ é‡å†™äº†ï¼Œæµ‹è¯•çš„è´Ÿæ‹…åœ¨å“ªé‡Œï¼Ÿé‡æ–°æµ‹è¯•çš„éœ€è¦æ˜¯å¦å¤§äºŽå¯èƒ½èŽ·å¾—çš„å¥½å¤„ï¼Ÿ diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 2cbbf50..22bcf3b 100644 --- a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,5 +1,5 @@ # 如何使用æºä»£ç æŽ§åˆ¶ - +[//]: # (Version:1.0.0) æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼ˆåˆç§°ç‰ˆæœ¬æŽ§åˆ¶ç³»ç»Ÿï¼‰è®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ 我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md index 11aa2b7..0cbf76f 100644 --- a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,5 +1,5 @@ # 如何进行å•元测试 - +[//]: # (Version:1.0.0) å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该如何被测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ 无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现 bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index 1f69cf5..f28ddb8 100644 --- a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ # 毫无头绪?,休æ¯ä¸€ä¸‹ - +[//]: # (Version:1.0.0) 没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How to Recognize When to Go Home.md) diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index ce3b4e5..17b60b6 100644 --- a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,5 +1,5 @@ # å¦‚ä½•è¯†åˆ«ä¸‹ç­æ—¶é—´ - +[//]: # (Version:1.0.0) è®¡ç®—æœºç¼–ç¨‹æ˜¯ä¸€ç§æ´»åŠ¨ä¹Ÿæ˜¯ä¸€ç§æ–‡åŒ–。ä¸å¹¸çš„äº‹å®žæ˜¯å®ƒä¸æ˜¯ä¸€ç§çœ‹é‡èº«å¿ƒå¥åº·çš„æ–‡åŒ–。从文化/历å²ç¼˜ç”±çœ‹ï¼ˆä¾‹å¦‚,在机器空载的晚上工作的需è¦ï¼‰ï¼Œè¿˜æœ‰å› ä¸ºè¶…过市场时间的压力和程åºå‘˜çš„缺ä¹ï¼Œè®¡ç®—机程åºå‘˜ä¼ ç»Ÿä¸Šæ€»æ˜¯è¿‡åº¦å·¥ä½œã€‚我ä¸è®¤ä¸ºä½ å¯ä»¥ç›¸ä¿¡ä½ å¬åˆ°çš„æ‰€æœ‰æ•…事,但我认为一周工作60å°æ—¶æ˜¯å¸¸è§çš„,50å°æ—¶æ›´å¤šçš„åƒä¸€ä¸ªæœ€å°å€¼ã€‚è¿™æ„味ç€å®žé™…总是比需è¦çš„æ—¶é—´èŠ±è´¹å¾—æ›´å¤šã€‚è¿™å¯¹ä¸€ä¸ªå¥½çš„ï¼Œä¸ä»…为他们自己负责而且为他们的åŒäº‹è´Ÿè´£çš„程åºå‘˜æ¥è¯´æ˜¯ä¸€ä¸ªä¸¥é‡çš„问题。你需è¦è¯†åˆ«ä»€ä¹ˆæ—¶å€™ä¸‹ç­ï¼Œæœ‰æ—¶å€™è¿˜è¦å»ºè®®å…¶ä»–人回家的时间。解决这个问题的固定规则ä¸å­˜åœ¨ï¼ŒæŠšå…»ä¸€ä¸ªå­©å­çš„å›ºå®šè§„åˆ™ä¹Ÿæ˜¯ï¼Œå‡ºäºŽåŒæ ·çš„原因---æ¯ä¸ªäººéƒ½æ˜¯ä¸åŒçš„。 一周超过60ä¸ªå°æ—¶å·¥ä½œå¯¹æˆ‘æ¥è¯´æ˜¯éžå¸¸è¾›è‹¦çš„,我å¯ä»¥ç”³è¯·æŒºçŸ­çš„一段时间(大概是一周),有时候在我的预料中。我ä¸çŸ¥é“对一个人æ¥è¯´ä¸€å‘¨å·¥ä½œè¶…过60å°æ—¶æ˜¯å¦å…¬å¹³ï¼Œæˆ‘甚至ä¸çŸ¥é“40å°æ—¶æ˜¯å¦æ˜¯å…¬å¹³çš„。然而,我确定,如果你努力工作,å´åœ¨ä½ é¢å¤–工作的时间里获得了很少东西,这是很愚蠢的。对我个人æ¥è¯´ï¼Œæˆ‘认为åšä¸€ä¸ªæ‡¦å¤«ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜è¯¥åšçš„äº‹ã€‚é—æ†¾çš„æ˜¯ï¼Œäº‹å®žä¸Šï¼Œç¨‹åºå‘˜ç»å¸¸*被*è¦æ±‚åšä¸€ä¸ªæ‡¦å¤«æ¥ä¸ºä¸€äº›äººè¡¨æ¼”,例如一个ç»ç†æƒ³è¦ç»™æ€»ç»ç†ç•™ä¸‹æ·±åˆ»å°è±¡ã€‚程åºå‘˜ç»å¸¸å¯¹æ­¤å±ˆæœï¼Œå› ä¸ºä»–们希望开心,并且ä¸å–„æ‹’ç»ï¼Œä¸Žæ­¤ç›¸å的有四é“防护墙: diff --git a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index e15794b..6d20e15 100644 --- a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -1,5 +1,5 @@ # 如何与ä¸å¥½ç›¸å¤„的人相处 - +[//]: # (Version:1.0.0) ä½ å¯èƒ½å¿…须和ä¸å¥½ç›¸å¤„的人相处。甚至å¯èƒ½ä½ æœ¬èº«å°±æ˜¯ä¸€ä¸ªä¸å¥½ç›¸å¤„的人。如果你是那ç§ä¸ŽåŒäº‹å’Œæƒå¨äººç‰©æœ‰è®¸å¤šçŸ›ç›¾çš„äººï¼Œä½ åº”è¯¥çæƒœè¿™ç§ç‹¬ç«‹æ‰€æš—示的东西,但需è¦åœ¨ä¸ç‰ºç‰²ä½ çš„æ™ºåŠ›æˆ–åŽŸåˆ™çš„å‰æä¸‹æé«˜ä½ çš„人际交往能力。 åœ¨è¿™æ–¹é¢æ²¡æœ‰ä»€ä¹ˆç»éªŒ,或者先å‰ç”Ÿæ´»çš„行为模å¼åœ¨å·¥ä½œåœºåˆçš„ç»éªŒä¸èƒ½é€‚用的一些程åºå‘˜,对这ç§äº‹æƒ…会éžå¸¸å›°æ‰°ã€‚ä¸å¥½ç›¸å¤„的人ç»å¸¸ä¹ æƒ¯äºŽæ‹’ç»ï¼Œå¹¶ä¸”与他人相比,他们更ä¸å®¹æ˜“å—社交压力所影å“。关键是åˆé€‚地尊é‡ä»–们,而éžä½ å¯èƒ½æƒ³åšçš„事,但ä¸è¦å……分地满足他们想è¦çš„(译者注:他们想è¦çš„往往是过分的)。 diff --git a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index b569ed7..ce15d98 100644 --- a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -1,5 +1,5 @@ # 如何在开å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´æƒè¡¡ - +[//]: # (Version:1.0.0) è½¯ä»¶å¼€å‘æ€»æ˜¯åœ¨å·¥ç¨‹è¯¥åšä»€ä¹ˆä¸Žå®Œæˆå·¥ç¨‹é—´å¦¥å。但你å¯èƒ½è¢«è¦æ±‚以牺牲你的工程适用性或商业适用性的方å¼ï¼ŒåŽ»äº¤æ¢å·¥ç¨‹çš„å¼€å‘速度。例如,你å¯èƒ½è¢«è¦æ±‚åšä¸€äº›ç³Ÿç³•的软件工程实践,但这将会导致大é‡ç»´æŠ¤é—®é¢˜ã€‚ 如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„ boss çš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”è¯¥ä¼šå¾ˆæœ‰ç”¨ã€‚å¦‚æžœç”¨è´¨é‡æ¢æ—¶é—´å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„ boss 和质é‡ä¿è¯äººå‘˜)æŒ‡å‡ºè¿™ä¸ªé—®é¢˜ã€‚å¦‚æžœç”¨è´¨é‡æ¢æ—¶é—´ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„ bug,指出æ¥ã€‚ diff --git a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index 68833aa..9a4fc7e 100644 --- a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -1,5 +1,5 @@ # 如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ– - +[//]: # (Version:1.0.0) 现代软件系统趋å‘于ä¾èµ–大é‡çš„éžç›´æŽ¥å¯æŽ§çš„组件。通过ååŒä¸Žé‡ç”¨ï¼Œè¿™å¢žåŠ äº†ç”Ÿäº§æ•ˆçŽ‡ã€‚ç„¶è€Œï¼Œæ¯ä¸ªç»„件会带æ¥ä¸€äº›é—®é¢˜ï¼š - 你该如何修å¤ç»„件中的 bug? diff --git a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index 94b72a1..fb54694 100644 --- a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -1,5 +1,5 @@ # 如何判断软件是å¦å¤ªä¸æˆç†Ÿäº† - +[//]: # (Version:1.0.0) ä½¿ç”¨å…¶ä»–äººå†™çš„è½¯ä»¶æ˜¯ä¸€ç§æœ€æœ‰æ•ˆçŽ‡çš„æž„å»ºä¸€ä¸ªåšå®žçš„系统的方法之一。这本ä¸è¯¥è¢«æŽ’斥,但与此相关的风险必须被检验。最大的一ç§é£Žé™©åœ¨äºŽï¼Œå®ƒé€šè¿‡ä½¿ç”¨å˜æˆä¸€ä¸ªå¯ç”¨äº§å“æˆç†Ÿå‰çš„ bug 周期和与软件相关的故障时期。在你考虑将软件系统集æˆå‰ï¼Œä¸è®ºæ˜¯ä½ è‡ªå·±å†™çš„还是第三方的,考虑它是å¦è¶³å¤Ÿæˆç†Ÿä»¥ä½¿ç”¨æ˜¯éžå¸¸é‡è¦çš„。这里有å个你应该自问的相关问题: 1. 它是蒸汽å—ï¼Ÿï¼ˆé‚£è‚¯å®šæ˜¯ä¸æˆç†Ÿçš„) diff --git a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index eee0245..f23b4b0 100644 --- a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -1,5 +1,5 @@ # 如何åšè´­ä¹°è¿˜æ˜¯æž„建的决定 - +[//]: # (Version:1.0.0) 一个å°è¯•用软件完æˆä¸€äº›ä»»åŠ¡çš„ä¼ä¸šçº§å…¬å¸æˆ–å·¥ç¨‹å¿…é¡»ä¸æ–­åšæ‰€è°“çš„ *buy vs. build* 的决定。这个问题的ä¸å¹¸åœ¨ä¸¤ä¸ªæ–¹é¢ï¼šä¼¼ä¹Žå¿½è§†äº†ä¸å¿…*被购买*的开æºè½¯ä»¶å’Œè‡ªç”±è½¯ä»¶ã€‚æ›´é‡è¦çš„æ˜¯ï¼Œè¿™å¯èƒ½åº”该被称作*获å–ä¸Žé›†æˆ vs. 购买与集æˆ*决定,因为集æˆçš„代价需è¦è¢«è€ƒè™‘。这需è¦å•†ä¸šä¸Šï¼Œç®¡ç†ä¸Šï¼Œå·¥ç¨‹ç†è§£ä¸Šçš„大é‡ç»“åˆã€‚ - 你的需è¦ä¸Žå®ƒçš„设计æ„图有多接近? diff --git a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md index 955f8cb..d55dd17 100644 --- a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -1,5 +1,5 @@ # 如何专业地æˆé•¿ - +[//]: # (Version:1.0.0) 承担超过你的æƒåŠ›çš„è´£ä»»ã€‚æ‰®æ¼”ä½ æƒ³è¦æ‰®æ¼”的角色。对那些对更大组织的æˆåŠŸåšå‡ºè¿‡è´¡çŒ®ä»¥åŠå¯¹ä½ ä¸ªäººæä¾›è¿‡å¸®åŠ©çš„äººè¡¨ç¤ºæ„Ÿè°¢ä¸Žæ¬£èµã€‚ 如果你想æˆä¸ºå›¢é˜Ÿçš„领导,去激励与团结。如果你想æˆä¸ºä¸€ä¸ªç»ç†ï¼Œæ‹…起规划的责任。你通常å¯ä»¥åœ¨å’Œé¢†å¯¼æˆ–ç»ç†åœ¨ä¸€èµ·æ—¶ï¼Œèˆ’æœåœ°å®Œæˆè¿™äº›äº‹æƒ…,因为这使得他们å¯ä»¥æŠ½ç©ºåŽ»æ‰¿æ‹…æ›´å¤§çš„è´£ä»»ã€‚å¦‚æžœè¿™å¤ªå¤šäº†ä»¥è‡³äºŽä½ ä¸èƒ½å°è¯•,一次åªåšä¸€ç‚¹ç‚¹ã€‚ diff --git a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index 2d2c065..e3ed0b0 100644 --- a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -1,5 +1,5 @@ # 如何评估é¢è¯•者 - +[//]: # (Version:1.0.0) 评估å¯èƒ½çš„å‘˜å·¥ï¼Œå´æ²¡æœ‰å¾—到它应得的能é‡ã€‚一个糟糕的雇佣,就åƒç³Ÿç³•的婚姻,是éžå¸¸ç³Ÿç³•的。æ¯ä¸ªäººé¦–è¦çš„一部分精力应该投入到招è˜ä¸Šï¼Œå°½ç®¡è¿™å¾ˆå°‘å‘生。 有ä¸åŒçš„é¢è¯•é£Žæ ¼ã€‚æœ‰çš„æ˜¯æŠ˜ç£¨äººçš„ï¼Œè®¾è®¡ç”¨æ¥æŠŠå€™é€‰äººæ”¾åœ¨å·¨å¤§åŽ‹åŠ›ä¸‹ã€‚è¿™æ˜¯ä¸ºäº†è¿™æ ·ä¸€ä¸ªæœ‰ç”¨çš„ç›®çš„ï¼šåœ¨åŽ‹åŠ›ä¸‹æŠ˜å°„å‡ºæ€§æ ¼ç¼ºé™·å’Œå¼±ç‚¹ã€‚å€™é€‰äººå¯¹å¾…é¢è¯•官ä¸ä¼šæ¯”对待他们自己更诚实,而且,人的自欺能力是令人惊奇的。 diff --git a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index bde10cc..a52a043 100644 --- a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -1,5 +1,5 @@ # 如何决定什么时候使用奇妙的计算机科学 - +[//]: # (Version:1.0.0) 有这样一些,例如算法,数æ®ç»“构,数学,还有其他æžå®¢èŒƒçš„大多数程åºå‘˜çŸ¥é“但很少使用的东西。实践中,这ç§å¥‡å¦™çš„ä¸œè¥¿å¤ªå¤æ‚了,通常是ä¸éœ€è¦çš„。例如,当你花费大多数时间在低效的数æ®åº“调用上时,æé«˜ç®—法是没有什么用的。ä¸å¹¸çš„大é‡ç¼–程由让系统相互交æµä»¥åŠä½¿ç”¨éžå¸¸ç®€å•的数æ®ç»“构去构建漂亮的用户界é¢ç»„æˆã€‚ 高科技什么时候是åˆé€‚的科技?你什么时候应当打开一本书去找一些东西而éžä¸€ä¸ªæ¯«ç§’级算法?åšè¿™äº›æœ‰æ—¶å€™æ˜¯æœ‰ç”¨çš„,但这需è¦è¢«å°å¿ƒè¯„估。 diff --git a/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index a03dd26..d336760 100644 --- a/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -1,5 +1,5 @@ # 如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ - +[//]: # (Version:1.0.0) 工程师和程åºå‘˜ï¼ˆå°¤å…¶æ˜¯ï¼‰é€šå¸¸è¢«ä¸»æµæ–‡åŒ–认为与他人ä¸åŒã€‚è¿™æ„味ç€å…¶ä»–人与我们ä¸åŒã€‚与éžå·¥ç¨‹å¸ˆäº¤æµæ—¶ï¼Œè¿™æ˜¯å€¼å¾—记在心里的,你应该时刻去ç†è§£è§‚众。 éžå·¥ç¨‹å¸ˆèªæ˜Žï¼Œä½†åœ¨åˆ›é€ æŠ€æœ¯ç±»çš„东西ä¸åƒæˆ‘们那样è¸å®žã€‚我们制造东西。他们销售,处ç†ï¼Œç»Ÿè®¡ï¼Œç®¡ç†ï¼Œä½†ä»–ä»¬åœ¨åˆ¶é€ ä¸Šä¸æ˜¯ä¸“家。他们ä¸åƒå·¥ç¨‹å¸ˆé‚£æ ·æ“…长团队åˆä½œï¼ˆæ¯«æ— ç–‘问会有例外。)他们的社交技能在éžå›¢é˜ŸçŽ¯å¢ƒé‡Œé€šå¸¸åƒå·¥ç¨‹å¸ˆé‚£æ ·ï¼Œç”šè‡³æ¯”工程师è¦å¥½ï¼Œä½†ä»–ä»¬çš„å·¥ä½œä¸æ€»è¦æ±‚ä»–ä»¬åƒæˆ‘们那样进行亲密,ç贵的交æµï¼Œä»¥åŠç»†è‡´çš„任务划分。 diff --git a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index da07185..55dae5b 100644 --- a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -1,5 +1,5 @@ # å¦‚ä½•ä¿æŒæ´»åŠ› - +[//]: # (Version:1.0.0) åˆ›å»ºç¾Žä¸½ï¼Œæœ‰ç”¨ï¼Œèªæ˜Žçš„东西的欲望能高度调动程åºå‘˜çš„ç§¯æžæ€§ã€‚è¿™æ˜¯å¥‡å¦™è€Œä»¤äººæƒŠå¥‡çš„ã€‚è¿™ç§æ¬²æœ›å¯¹ç¨‹åºå‘˜æ—¢ä¸ç‰¹æ®Šä¹Ÿä¸æ™®é,但在程åºå‘˜ä¸­ï¼Œå®ƒæ˜¯å¦‚此强烈而普é以至于它把程åºå‘˜ä¸Žå…¶ä»–角色的人们分割开æ¥ã€‚ 这有一个现实而é‡è¦çš„æŽ¨è®ºã€‚如果当程åºå‘˜è¢«è¦æ±‚åšä¸€äº›æ—¢ä¸ç¾Žä¸½ï¼Œä¹Ÿæ²¡æœ‰ç”¨ï¼Œä¹Ÿä¸æ¼‚亮的事情,他们会斗志低è½ã€‚虽然å¯ä»¥é€šè¿‡åšä¸‘陋的,愚蠢的,无èŠçš„东西赚很多的钱,但最åŽï¼Œä¹è¶£æ‰ä¼šä¸ºå…¬å¸èµšæœ€å¤šçš„钱。 diff --git a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index c260737..5af3121 100644 --- a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -1,5 +1,5 @@ # 如何被广泛信任 - +[//]: # (Version:1.0.0) 值得信任,æ‰èƒ½è¢«ä¿¡ä»»ã€‚你也应该让别人了解你。如果没人了解你,没人会为你投票。跟你亲近的人一起,比如队å‹ï¼Œè¿™åº”è¯¥ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚对你部门或团队以外的人,你通过责任和åšçŸ¥å»ºç«‹ä¿¡ä»»ã€‚æœ‰æ—¶æœ‰äººä¼šæ»¥ç”¨ä¿¡ä»»ï¼Œå¹¶è¦æ±‚æ— ç†ç”±çš„赞åŒã€‚ä¸è¦å®³æ€•,解释因这ç§èµžåŒä¼šè®©ä½ å¿…须放弃什么。 ä¸è¦ä¸æ‡‚装懂。与队å‹ä»¥å¤–的人一起时,你必须清除地区分“当下在我脑å­é‡Œä¸æ‡‚的东西â€ä»¥åŠâ€œæˆ‘æ›¾ç»æ²¡æœ‰è®¤è¯†åˆ°çš„东西â€ã€‚ diff --git a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index 5d6383b..329d863 100644 --- a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -1,5 +1,5 @@ # 如何在时间与空间æƒè¡¡ - +[//]: # (Version:1.0.0) 没有上过大学的è¯ï¼Œä½ ä¹Ÿå¯ä»¥æˆä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œä½†ä½ ä¸çŸ¥é“åŸºæœ¬çš„è®¡ç®—å¤æ‚度ç†è®ºçš„è¯ï¼Œä½ ä¸å¯èƒ½æˆä¸ºä¸€ä¸ªå¥½çš„进阶程åºå‘˜ã€‚ä½ ä¸éœ€è¦çŸ¥é“‘O’的定义,但我个人认为你应该ç†è§£â€˜å¸¸é‡æ—¶é—´â€™ï¼Œâ€˜nlogn’,'n²'的区别。你å¯èƒ½å¯ä»¥ä¸é è¿™æ–¹é¢çš„知识,凭直觉知é“如何在时间和空间之间æƒè¡¡ï¼Œä½†æ²¡æœ‰è¿™ç§çŸ¥è¯†ï¼Œä½ å°†ä¸ä¼šæœ‰ä¸€ä¸ªå’Œä½ åŒäº‹äº¤æµçš„稳固基础。 在设计或ç†è§£ç®—法的过程中,算法花费的时间有时候是一个以输入é‡ä¸ºè‡ªå˜é‡çš„å‡½æ•°ã€‚å½“è¿™ç§æƒ…况å‘生时,如果è¿è¡Œæ—¶é—´ä¸Žè¾“å…¥é‡çš„对数的 n 倿ˆæ­£æ¯”,我们å¯ä»¥è¯´ä¸€ä¸ªç®—法的最å/期望/最好情况è¿è¡Œæ—¶é—´æ˜¯'nlogn',这个定义和é˜è¿°çš„æ–¹å¼ä¹Ÿå¯ä»¥è¢«åº”用在数æ®ç»“æž„å ç”¨çš„空间上。 diff --git a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md index fefbebb..f15462c 100644 --- a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -1,5 +1,5 @@ # 如何进行压力测试 - +[//]: # (Version:1.0.0) 压力测试很有趣,一开始好åƒåŽ‹æµ‹çš„ç›®çš„æ˜¯æ‰¾å‡ºç³»ç»Ÿåœ¨è´Ÿè½½ä¸‹èƒ½ä¸èƒ½å·¥ä½œã€‚现实中,系统在负载下确实能工作,但在负载足够é‡çš„æŸäº›æƒ…å†µä¸‹ä¸èƒ½å·¥ä½œã€‚我把这å«åš*碰å£*或*æ’žå“*[1]。å¯èƒ½ä¼šæœ‰ä¾‹å¤–,但大多数情况下会有这么一堵“墙â€ã€‚压测的目的是为了指出墙在哪里,然åŽå¼„清楚怎么把墙移得更远些。 压测计划需è¦åœ¨å·¥ç¨‹çš„æ—©æœŸå°±è§„划好,因为它ç»å¸¸æœ‰åŠ©äºŽå¼„æ¸…æ¥šåˆ°åº•ä»€ä¹ˆæ˜¯è¢«æœŸæœ›çš„ã€‚ä¸¤ç§’çš„ç½‘é¡µè¯·æ±‚æ˜¯ä¸€ä¸ªæ‚²ä¼¤çš„å¤±è´¥è¿˜æ˜¯ä¸€ä¸ªäº†ä¸èµ·çš„æˆåŠŸï¼Ÿ500个并å‘用户是å¦è¶³å¤Ÿï¼Ÿè¿™ï¼Œå½“ç„¶ï¼Œè§†æƒ…å†µè€Œå®šï¼Œä½†ä¸€ä¸ªäººåœ¨è®¾è®¡ç³»ç»Ÿæ—¶å°±åº”è¯¥çŸ¥é“æ»¡è¶³éœ€æ±‚的答案。压测需è¦è¶³å¤Ÿå¥½åœ°ä¸ºçŽ°å®žå»ºæ¨¡ï¼Œä½¿ä¹‹è¶³å¤Ÿæœ‰ç”¨ã€‚éžå¸¸å®¹æ˜“地模拟500个ä¸ç¨³å®šå¹¶ä¸”ä¸å¯é¢„æµ‹çš„äººå¹¶è¡Œä½¿ç”¨ç³»ç»Ÿä¸æ˜¯çœŸçš„å¯èƒ½çš„,但我们å¯ä»¥è‡³å°‘创造500个模拟(用户),然åŽå°è¯•模拟他们å¯èƒ½åšçš„部分事情。 diff --git a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index baeaa11..6f14a01 100644 --- a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,5 +1,5 @@ # 如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡ - +[//]: # (Version:1.0.0) æŠ½è±¡æ˜¯ç¼–ç¨‹çš„å…³é”®ã€‚ä½ åº”è¯¥ä»”ç»†é€‰æ‹©ä½ éœ€è¦æŠ½è±¡çš„ç¨‹åº¦ã€‚å……æ»¡æ´»åŠ›çš„åˆå­¦è€…ç»å¸¸åˆ›å»ºè®¸å¤šæ²¡æœ‰ä»€ä¹ˆç”¨çš„æŠ½è±¡ã€‚一个标识是,你是å¦åˆ›å»ºäº†è¿™æ ·ä¸€ä¸ªç±»,ä¸åŒ…å«ä»»ä½•代ç å¹¶ä¸”没有真的åšä»€ä¹ˆäº‹æƒ…,é™¤äº†æŠ½è±¡ä¸€äº›ä¸œè¥¿ã€‚è¿™ç§æŠ½è±¡æ˜¯å¯ä»¥ç†è§£çš„,但代ç çš„ç®€æ´æ€§çš„价值必须与代ç çš„æŠ½è±¡ä»·å€¼ç›¸æƒè¡¡ã€‚有时候,我们å¯ä»¥çœ‹åˆ°ä¸€ç§çƒ­æƒ…çš„ç†æƒ³ä¸»ä¹‰è€…çŠ¯çš„é”™è¯¯ï¼šåœ¨å·¥ç¨‹çš„ä¸€å¼€å§‹ï¼Œå®šä¹‰äº†ä¸€å¤§å †çš„çœ‹èµ·æ¥æŠ½è±¡å¾—å¾ˆç¾Žçš„ç±»ï¼Œç„¶åŽä»–会推测说它们å¯ä»¥å¤„ç†æ¯ä¸€ä¸ªå¯èƒ½å‡ºçŽ°çš„æƒ…å†µã€‚éšç€é¡¹ç›®æŽ¨è¿›åŠç事掺æ‚è¿›æ¥ï¼Œè¿™äº›ä»£ç æœ¬èº«å˜å¾—混乱了。函数体比他们本æ¥è¯¥æœ‰çš„æ ·å­è¿˜è¦é•¿ã€‚空的类是一ç§å†™æ–‡æ¡£çš„è´Ÿæ‹…ï¼Œåœ¨åŽ‹åŠ›ä¹‹ä¸‹ï¼Œå®ƒä»¬ä¼šè¢«å¿½ç•¥ã€‚å¦‚æžœè®©èŠ±åœ¨æŠ½è±¡ä¸Šçš„ç²¾åŠ›åŽ»ä¿æŒå…¶ç®€çŸ­ï¼Œæœ€åŽçš„结果应该会更好。这是一ç§*推测编程*的形å¼ã€‚我强烈推è PAUL gRAHAM[PGSite] 的这篇文章 ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html)。 有这样一ç§å…³äºŽ*ä¿¡æ¯å°è£…*å’Œ*é¢å‘对象编程*的有用技能,但有时候它们被带远了。这些技术让一个人抽象地编ç å¹¶é¢„è®¡å˜æ•°ã€‚然而,我个人认为,你ä¸åº”该写太多推测性的代ç ã€‚例如,在一个对象里用增é‡å™¨å’Œè®¿é—®å™¨éšè—一个整数å˜é‡æ˜¯ä¸€ç§å¯æŽ¥å—的风格,这样å˜é‡æœ¬èº«å°±æ²¡æœ‰æš´éœ²ï¼Œä»…仅暴露了很少的关于它的接å£ã€‚这确实å…许了å˜é‡çš„实现的改å˜ä¸å½±å“调用代ç ï¼Œå¹¶ä¸”å¯èƒ½å¯¹ä¸€ä¸ªå¿…é¡»æä¾›ä¸€ä¸ªç¨³å®š API 的库编写者是åˆé€‚的。我ä¸è®¤ä¸ºè¿™ç§å¥½å¤„会超过其冗长的代价,特别是当我的团队拥有调用代ç å¹¶å› æ­¤å¯ä»¥æŠŠè°ƒç”¨å™¨é‡æž„为比原æ¥çš„æ›´å®¹æ˜“时。四到五行多余的代ç ä¼šæ˜¯è¿™ç§æŽ¨æµ‹æ€§å¥½å¤„的沉é‡ä»£ä»·ã€‚ diff --git a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index 84bcd3f..e8e58e5 100644 --- a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -1,5 +1,5 @@ # 如何学习新技能 - +[//]: # (Version:1.0.0) å­¦ä¹ æ–°æŠ€èƒ½ï¼Œå°¤å…¶æ˜¯éžæŠ€æœ¯ç±»ï¼Œæ˜¯æœ€å¤§çš„ä¸€ç§ä¹è¶£ã€‚大多数公å¸ä¼šæ›´åŠ æœ‰æ–—å¿—å¦‚æžœå®ƒä»¬æ˜Žç™½è¿™å¯¹ç¨‹åºå‘˜æ¥è¯´æ˜¯å¤šå¤§çš„æ¿€åŠ±ã€‚ 人类通过*åš*æ¥å­¦ã€‚读书和上课是有用的。但你对一个从ä¸å†™ç¨‹åºçš„程åºå‘˜ä¼šæœ‰ä»»ä½•敬æ„å—?学习任何技能,你应该把自己放在一个å¯ä»¥ç»ƒä¹ æŠ€èƒ½çš„宽容的ä½ç½®ã€‚学习一个新的编程语言时,在你必须åšä¸€ä¸ªå¤§å·¥ç¨‹å‰ï¼Œè¯•ç€ç”¨å®ƒåšä¸€ä¸ªå°çš„工程。学习管ç†è½¯ä»¶é¡¹ç›®æ—¶ï¼Œå…ˆè¯•ç€ç®¡ç†ä¸€ä¸ªå°çš„工程。 diff --git a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md index d8bc141..4432db0 100644 --- a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -1,5 +1,5 @@ # 学会打字 - +[//]: # (Version:1.0.0) å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„è´£ä»»æ„Ÿæ˜¯ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当 Michael Tiemann 在 MCC 的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³æ˜¯å¦‚此的急促以至于难以分辨。 Next [如何åšé›†æˆæµ‹è¯•](08-How to Do Integration Testing.md) diff --git a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index dce6393..e384fea 100644 --- a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -1,5 +1,5 @@ # 如何åšé›†æˆæµ‹è¯• - +[//]: # (Version:1.0.0) é›†æˆæµ‹è¯•是对已ç»è¿›è¡Œå•元测试的å„ä¸ªéƒ¨åˆ†çš„ä¸€ç§æ•´åˆæµ‹è¯•ã€‚é›†æˆæ˜¯æ˜‚贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯å¿…须通过显å¼é›†æˆæ¥è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,请仔细评估。 diff --git a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md index 9ea93f1..01d290e 100644 --- a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -1,5 +1,5 @@ # 交æµè¯­è¨€ - +[//]: # (Version:1.0.0) 在语法系统里,有一些正å¼å®šä¹‰çš„,éžç¼–程语言但是*交æµè¯­è¨€*的语言,它们为促进交æµè€Œéžæ ‡å‡†è€Œç‰¹åˆ«è®¾è®¡ã€‚2003年,最é‡è¦çš„è¿™ç§è¯­è¨€æœ‰ï¼š UML, XML, SQL。你应该熟悉这些东西,这样你就å¯ä»¥å¾ˆå¥½åœ°äº¤æµå¹¶ä¸”决定什么时候去使用它们。 UML 是一个丰富的用图表æè¿°è®¾è®¡çš„æ­£å¼ç³»ç»Ÿã€‚å®ƒçš„ç¾Žä¸½ä¹‹å¤„åœ¨äºŽå®ƒæ—¢è™šæ‹Ÿåˆæ­£å¼ï¼Œåœ¨ä½œè€…和观众都了解 UML çš„å‰æä¸‹ï¼Œå¯ä»¥å®¹çº³å¤§é‡çš„ä¿¡æ¯ã€‚你需è¦äº†è§£å®ƒï¼Œå› ä¸ºè®¾è®¡æœ‰æ—¶å€™å°±æ˜¯ç”¨è¿™ç§æ–¹å¼äº¤æµçš„。有一些éžå¸¸æœ‰ç”¨çš„工具å¯ä»¥è®©åˆ¶ä½œ UML 图看起æ¥éžå¸¸ä¸“业。在很多情况下,UML 太正å¼äº†ï¼Œæˆ‘自己会使用更简å•çš„*ç®±å­ä¸Žç®­å¤´*的风格æ¥è®¾è®¡å›¾æ ‡ã€‚但我éžå¸¸ç¡®å®š UML 对你æ¥è¯´è‡³å°‘跟学习拉ä¸è¯­ä¸€æ ·æœ‰ç”¨ï¼ˆè¯‘者注:国外拉ä¸è¯­ä½¿ç”¨å¾ˆå¹¿æ³›ï¼‰ã€‚ diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md index 3a52e81..b93c9ce 100644 --- a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -1,5 +1,5 @@ # é‡åž‹å·¥å…· - +[//]: # (Version:1.0.0) éšç€æˆ‘们的科技文化的进步,软件技术从ä¸å¯æƒ³è±¡ï¼Œåˆ°ç ”究,到新的产å“,到标准化产å“,到广泛å¯ç”¨å’Œå»‰ä»·äº§å“。这些é‡åž‹å·¥å…·å¯ä»¥æ‹‰åŠ¨å¾ˆå¤§çš„è´Ÿè½½ï¼Œä½†å¯èƒ½æ˜¯è¿›é˜¶çš„,并且需è¦èŠ±å¤§é‡æŠ•èµ„åŽ»ç†è§£ã€‚进阶程åºå‘˜å¿…须知é“如何管ç†å®ƒä»¬ä»¥åŠå®ƒä»¬ä»€ä¹ˆæ—¶å€™åº”该被使用或考虑。 现在在我看æ¥ï¼Œä¸€äº›æœ€å¥½çš„é‡åž‹å·¥å…·æ˜¯ï¼š diff --git a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md index 00a1832..89944b1 100644 --- a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -1,5 +1,5 @@ # å¦‚ä½•åˆ†æžæ•°æ® - +[//]: # (Version:1.0.0) 当你检查一个商业活动并且å‘现了把它转æ¢ä¸ºè½¯ä»¶åº”用程åºçš„需求时,数æ®åˆ†æžæ˜¯è½¯ä»¶å¼€å‘早期的一个过程。这是一个官方的定义,当你,一个程åºå‘˜ï¼Œåº”该集中注æ„åŠ›åœ¨å†™åˆ«äººè®¾è®¡çš„ä¸œè¥¿çš„ä»£ç æ—¶ï¼Œè¿™å¯èƒ½ä¼šè®©ä½ ç›¸ä¿¡æ•°æ®åˆ†æžæ˜¯ä¸€ç§æ›´åº”该归入系统分æžçš„行为。如果我们严格éµå¾ªè½¯ä»¶å·¥ç¨‹èŒƒå¼ï¼Œè¿™å¯èƒ½æ˜¯æ­£ç¡®çš„。有ç»éªŒçš„程åºå‘˜ä¼šæˆä¸ºè®¾è®¡è€…,最尖é”çš„è®¾è®¡è€…å˜æˆå•†ä¸šåˆ†æžå¸ˆï¼Œå› æ­¤è¢«å† å去æ€è€ƒæ‰€æœ‰æ•°æ®éœ€è¦ï¼Œå¹¶ä¸”给你充分定义的任务去执行。这ä¸å®Œå…¨æ˜¯å¯¹çš„ï¼Œå› ä¸ºæ•°æ®æ˜¯æ¯ç§ç¼–程活动的核心。ä¸ç®¡ä½ åœ¨ä½ çš„程åºé‡Œåšä»€ä¹ˆï¼Œä½ ä¸æ˜¯åœ¨ç§»åŠ¨æ•°æ®å°±æ˜¯åœ¨ä¿®æ”¹æ•°æ®ã€‚商业分æžå¸ˆåˆ†æžçš„æ˜¯æ›´å¤§å°ºåº¦ä¸Šçš„需è¦ï¼Œè½¯ä»¶è®¾è®¡è€…更加压榨这个比例以至于,当问题在你的桌上è½åœ°æ—¶ï¼Œå¥½åƒä½ éœ€è¦åšçš„æ‰€æœ‰äº‹æƒ…æ˜¯åº”ç”¨èªæ˜Žçš„算法,开始移动已ç»å­˜åœ¨çš„æ•°æ®ã€‚ 䏿˜¯è¿™æ ·çš„。 diff --git a/zh/2-Intermediate/README.md b/zh/2-Intermediate/README.md index a3b5378..68194cc 100644 --- a/zh/2-Intermediate/README.md +++ b/zh/2-Intermediate/README.md @@ -1,5 +1,5 @@ # 2. 进阶 - +[//]: # (Version:1.0.0) - 个人技能 - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How to Stay Motivated.md) - [如何被广泛信任](Personal-Skills/02-How to be Widely Trusted.md) diff --git a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index c21cc05..807b4f0 100644 --- a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -1,5 +1,5 @@ # 如何管ç†å¼€å‘æ—¶é—´ - +[//]: # (Version:1.0.0) 管ç†å¼€å‘时间,需è¦ç»´æŠ¤ä¸€ä¸ªç®€æ˜Žä¸”实时更新的计划。一个工程计划是一个估计,一个时间表,一系列å–得进步的里程碑,还有对你的团队或者你的时间在æ¯ä¸ªä»»åŠ¡çš„ä¼°è®¡å’Œå®‰æŽ’ã€‚è¿™ä¹Ÿåº”è¯¥åŒ…æ‹¬ä½ éœ€è¦è®°å¾—去åšçš„其他事,比如与质é‡ä¿éšœäººå‘˜è§é¢ï¼Œå‡†å¤‡æ–‡æ¡£ï¼Œæˆ–è€…è®¢è´­è®¾å¤‡ã€‚å¦‚æžœä½ åœ¨ä¸€ä¸ªå›¢é˜Ÿé‡Œï¼Œå·¥ç¨‹è®¡åˆ’ä¼šæ˜¯ä¸€ä¸ªå…±åŒæ‰¿è®¤çš„å议,ä¸è®ºæ˜¯åœ¨å¼€å§‹ï¼Œè¿˜æ˜¯è¿›è¡Œçš„过程中。 工程计划存在的æ„义是帮助åšå‡ºå†³å®šï¼Œè€Œéžå±•ç¤ºä½ æ˜¯å¦‚ä½•ç»„ç»‡çš„ã€‚å¦‚æžœä¸€ä¸ªå·¥ç¨‹è®¡åˆ’å¤ªé•¿æˆ–è€…ä¸æ˜¯æœ€æ–°çš„,它对åšå‡ºå†³å®šå°†æ˜¯æ— ç”¨çš„。现实中,这些决定通常是关于独立的个人的。计划和你的判断让你决定你是å¦åº”当把任务从一个人身上移到å¦ä¸€ä¸ªäººèº«ä¸Šã€‚里程碑标识了你的进展。如果你有一个奇妙的工程规划工具,ä¸è¦è¢«ä¸ºå·¥ç¨‹åˆ›å»ºä¸€ä¸ªè¡¨é¢å·¨å¤§è®¾è®¡ï¼ˆBig Design Up Front)所迷惑,但å¯ä»¥ç”¨å®ƒä¿æŒæ¸…晰和实时性。 diff --git a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index 16cb211..01af7ea 100644 --- a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -1,5 +1,5 @@ # 如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº - +[//]: # (Version:1.0.0) 一个工程通常ä¾èµ–于其ä¸èƒ½æŽ§åˆ¶çš„ç»„ç»‡æ‰€ç”Ÿäº§çš„è½¯ä»¶ï¼Œç¬¬ä¸‰æ–¹è½¯ä»¶å±æœºæ˜¯æ¯ä¸ªç›¸å…³çš„人都必须æ„识到的。 永远也ä¸è¦æŠŠå¸Œæœ›æ”¾åœ¨*蒸汽*上é¢ã€‚蒸汽是任何所谓的尚未å¯ç”¨ç„¶è€Œå£°ç§°å¯ç”¨çš„软件。这是最确定的一ç§ç ´äº§çš„æ–¹å¼ã€‚仅仅怀疑一个软件公å¸åœ¨æŸä¸ªæ—¥æœŸå¯¹äºŽæŸä¸ªè½¯ä»¶äº§å“çš„æŸä¸ªç‰¹æ€§çš„æ‰¿è¯ºæ˜¯ä¸æ˜Žæ™ºçš„ã€‚æ›´æ˜Žæ™ºçš„åšæ³•是完全忽略它,并且忘记你曾å¬è¯´è¿‡è¿™ç§äº‹ã€‚ä¸è¦åœ¨ä½ çš„å…¬å¸ä½¿ç”¨çš„任何文档里写下这些东西。 diff --git a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 01c2d69..b69af54 100644 --- a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -1,5 +1,5 @@ # 如何管ç†å’¨è¯¢å¸ˆ - +[//]: # (Version:1.0.0) 使用咨询师,但ä¸è¦ä¾èµ–他们。他们是神奇的人,éžå¸¸å€¼å¾—尊敬。因为他们看过许多ä¸åŒçš„å·¥ç¨‹ï¼Œä»–ä»¬é€šå¸¸æ¯”ä½ çŸ¥é“æ›´å¤šå…·ä½“æŠ€æœ¯ï¼Œç”šè‡³æ˜¯ç¼–ç¨‹æŠ€æœ¯ã€‚æœ€å¥½çš„ä½¿ç”¨ä»–ä»¬çš„æ–¹å¼æ˜¯åƒå®¶æ•™é‚£æ ·ç”¨ä¾‹å­æ•™å­¦ã€‚ 然而,他们通常ä¸èƒ½åƒæ­£å¸¸å‘˜å·¥é‚£æ ·ç”¨ç›¸åŒçš„æ„Ÿè§‰èžå…¥å›¢é˜Ÿï¼Œå¯èƒ½ä»…仅是因为你没有足够的时间去学习他们的优点和缺点。他们的工资更低。他们更容易离开。如果公å¸åšå¾—好,他们å¯èƒ½å¾—到的更少。有些å¯èƒ½æ˜¯å¥½çš„,有些å¯èƒ½ä¸Žå¹³å‡æ°´å¹³ä¸€è‡´ï¼Œæœ‰äº›å¯èƒ½æŒºç³Ÿç³•,但希望你对咨询师的选择ä¸ä¼šåƒä½ å¯¹é›‡å‘˜çš„选择那样仔细,这样你会获得更多ä¸å¥½çš„咨询师。 diff --git a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index 217cfc8..2ca42d1 100644 --- a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -1,5 +1,5 @@ # 如何适é‡äº¤æµ - +[//]: # (Version:1.0.0) 仔细考虑会议的代价:这花费了*éšå‚与者数é‡å€å¢žçš„æ—¶é—´*。会议有时候是必è¦çš„,但越å°è¶Šå¥½ã€‚å°ä¼šè®®çš„交æµè´¨é‡æ›´å¥½ï¼Œè¿‡åº¦æµªè´¹çš„æ—¶é—´æ›´å°‘。如果一个人在会议感到厌烦,把这当åšä¼šè®®åº”该更å°çš„æ ‡è¯†ã€‚ éžæ­£å¼äº¤æµå€¼å¾—åšä»»ä½•事情去鼓励。更多有用的沟通工作在åŒäº‹é—´çš„åˆé¥­å¯ä»¥è¿›è¡Œï¼Œè€Œéžå…¶ä»–çš„æ—¶é—´ã€‚è®¸å¤šå…¬å¸æ²¡æœ‰æ„è¯†åˆ°æˆ–è€…ä¸æ”¯æŒè¿™ä¸€ç‚¹ï¼Œè¿™æ˜¯ä¸€ç§é—憾。 diff --git a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index 1cbcdee..1d1c7e3 100644 --- a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -1,5 +1,5 @@ # 如何直言异议以åŠå¦‚何é¿å… - +[//]: # (Version:1.0.0) 异议是一个åšå‡ºå¥½å†³å®šçš„ç»ä½³æœºä¼šï¼Œä½†è¿™éœ€è¦è¢«è°¨æ…Žå¤„ç†ã€‚ä½ å¯èƒ½ä¼šè§‰å¾—你充分的表达了你的想法,并且在决定åšå‡ºå‰ï¼Œä½ çš„æ„è§å·²ç»è¢«å¬å–ã€‚è¿™ç§æƒ…况下,没有什么å¯ä»¥å†è¯´çš„,你应该决定你是å¦è¦æ”¯æŒè¿™ä¸ªå†³å®šï¼Œå³ä½¿ä½ ä¸åŒæ„它。如果你å¯ä»¥åœ¨è‡ªå·±ä¸åŒæ„的情况下,支æŒè¿™ä¸ªå†³å®šï¼Œå°±è¿™æ ·è¯´å®žè¯ã€‚è¿™å±•ç¤ºäº†ä½ æ˜¯å¤šä¹ˆæœ‰ä»·å€¼ï¼Œå› ä¸ºä½ æ˜¯ç‹¬ç«‹çš„ï¼Œä¸æ˜¯ä¸€ä¸ªå”¯å”¯è¯ºè¯ºä¹‹äººï¼ŒåŒæ—¶æ˜¯ä¸€ä¸ªå°Šé‡å†³å®šçš„团队æˆå‘˜ã€‚ 有时候一个你ä¸åŒæ„的决定,会在决策者没有充分å¬å–你的观点å‰åšå‡ºã€‚你应该在公å¸å’Œé›†ä½“的基础上评估是å¦åº”该æå‡ºè¿™ä¸ªè¯é¢˜ã€‚如果在你看æ¥è¿™åªæ˜¯ä¸€ä¸ªå°é”™è¯¯ï¼Œè¿™å¯èƒ½ä¸å€¼å¾—釿–°è€ƒè™‘。如果在你看æ¥è¿™æ˜¯ä¸€ä¸ªå¤§é”™ï¼Œä½ å½“ç„¶å¿…é¡»æå‡ºå¼‚议。 diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index 684108f..d8cc903 100644 --- a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -1,5 +1,5 @@ # å¦‚ä½•ä¸Žæ—¶é—´åŽ‹åŠ›åšæ–—争 - +[//]: # (Version:1.0.0) å‘布压力是快速推出好产å“çš„åŽ‹åŠ›ã€‚è¿™æ˜¯å¥½çš„ï¼Œå› ä¸ºå®ƒåæ˜ äº†å¸‚场事实,并且在æŸä¸ªæ„义上是å¥åº·çš„ã€‚æ—¶é—´åŽ‹åŠ›æ˜¯è¿«ä½¿ä¸€ä¸ªäº§å“æ›´å¿«åœ°æŽ¨å‡ºçš„压力,这是浪费的,ä¸å¥åº·çš„,并且太普é了。 时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–ä»¬æŠŠè‡ªå·±çš„ä¹ æƒ¯æŠ•å°„åˆ°æˆ‘ä»¬èº«ä¸Šï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。他们看ä¸åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一事情就是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index d90a58a..b6199b5 100644 --- a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,5 +1,5 @@ # 如何ç†è§£ç”¨æˆ· - +[//]: # (Version:1.0.0) ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„ boss ç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š - 用户通常会åšå‡ºç®€çŸ­çš„判断 diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 0fd228f..9c5692f 100644 --- a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -1,5 +1,5 @@ # å¦‚ä½•èŽ·å¾—æ™‹å‡ - +[//]: # (Version:1.0.0) 想è¦è¢«æå‡ä¸ºæŸç§è§’色,先åšé‚£ä¸ªè§’色该åšçš„事情。 为了æå‡åˆ°æŸä¸ªä½ç½®ï¼Œæ‰¾åˆ°é‚£ä¸ªä½ç½®æœŸæœ›åšçš„事情,然åŽåŽ»åšã€‚ diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index f3d5964..015ea4e 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -1,4 +1,5 @@ # 3. 高级 +[//]: # (Version:1.0.0) - 技术评审 - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„地方](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - [如何使用嵌入å¼è¯­è¨€](Technical-Judgment/02-How to Utilize Embedded Languages.md) diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index 35e88b0..6a18689 100644 --- a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -1,5 +1,5 @@ # 如何å‘展æ‰èƒ½ - +[//]: # (Version:1.0.0) Nietschze 夸大了他所说的: >é‚£äº›æ— æ³•æ‘§æ¯æˆ‘的,åªä¼šè®©æˆ‘更强大 diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index 1b53144..c0d2e45 100644 --- a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -1,5 +1,5 @@ # 如何选择工作的内容 - +[//]: # (Version:1.0.0) 你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 Next [如何让你队å‹çš„价值最大化](03-How to Get the Most From Your Teammates.md) diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index a6d8821..2820e22 100644 --- a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -1,5 +1,5 @@ # 如何让你队å‹çš„价值最大化 - +[//]: # (Version:1.0.0) 为了让你的队å‹çš„价值最大化,å‘展好的团队精神,试ç€ä¿æŒæ¯ä¸ªäººçš„个人挑战与渴望。 为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œå°±æ²¡æœ‰äººä¼šè®©å…¶ä»–人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index dec655a..f935ebb 100644 --- a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -1,5 +1,5 @@ # 如何划分问题 - +[//]: # (Version:1.0.0) 接手一个软件工程并把它分为å¯ä»¥ç”±ä¸ªäººå®žçŽ°çš„ä»»åŠ¡æ˜¯å¾ˆæœ‰è¶£çš„ã€‚è¿™äº‹åº”è¯¥åŠæ—©è¿›è¡Œã€‚有时候ç»ç†å¯èƒ½ä¼šè®¤ä¸ºä¸è€ƒè™‘个人的项目能够起作用。这是ä¸å¯èƒ½çš„,因为æ¯ä¸ªäººçš„生产力是如此广泛地ä¸åŒã€‚对æŸä¸ªç»„件有特殊知识的人也ç»å¸¸æ”¹å˜ï¼Œå¹¶ä¸”å¯ä»¥å¯¹å·¥ä½œæ•ˆæžœæœ‰ä¸€ä¸ªæ•°é‡çº§çš„å½±å“。 正如一个作曲家对其演å¥ä¹å™¨çš„音色的考虑,或者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index a4f2c9f..1137ec6 100644 --- a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -1,5 +1,5 @@ # å¦‚ä½•å¤„ç†æ— èŠçš„任务 - +[//]: # (Version:1.0.0) 有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬ Larry Wall 的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 1b27ff1..1d3d544 100644 --- a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -1,5 +1,5 @@ # å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ - +[//]: # (Version:1.0.0) è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你所创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的观点所带æ¥çš„价值。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 Next [如何å‘展一个系统](07-How to Grow a System.md) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index da4b517..d8c2521 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -1,5 +1,5 @@ # 如何å‘展一个系统 - +[//]: # (Version:1.0.0) æ ‘çš„ç§å­åŒ…å«äº†æˆé•¿çš„æ€æƒ³ï¼Œä½†ä¸å®Œå…¨å®žçްæˆé•¿ä½“的形å¼ä¸ŽåŠ›é‡ã€‚胚胎会æˆé•¿ã€‚它会å˜å¤§ã€‚å®ƒçœ‹èµ·æ¥æ›´åƒæˆé•¿ä½“,并越æ¥è¶Šæœ‰ç”¨ã€‚最终它孕育果实。最åŽï¼Œå®ƒæ­»äº¡å¹¶ä¸”它的躯体喂养了其他的有机体。 对待软件我们也应当有这样的è£è€€ã€‚ä¸€æž¶æ¡¥ä¸æ˜¯è¿™æ ·çš„,永远ä¸ä¼šæœ‰ä¸€æž¶å©´å„¿æ¡¥ï¼Œä½†åªæ˜¯æœ‰ä¸€åº§æœªå®Œæˆçš„æ¡¥ã€‚桥比软件è¦ç®€å•得多。 diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index d637c10..4d24c6a 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -1,5 +1,5 @@ # 如何有效地沟通 - +[//]: # (Version:1.0.0) ä¸ºäº†è‰¯å¥½åœ°æ²Ÿé€šï¼Œä½ å¿…é¡»è®¤è¯†åˆ°å®ƒçš„å›°éš¾ã€‚å®ƒæœ¬èº«å°±æ˜¯ä¸€ç§æŠ€èƒ½ã€‚ä¸Žä½ äº¤æµçš„人本身是有瑕疵的,这一事实使得沟通å˜å¾—更加困难。他们ä¸ä¼šåŠªåŠ›åŽ»ç†è§£ä½ ã€‚他们ä¸å–„言辞。他们ç»å¸¸è¿‡åº¦å·¥ä½œæˆ–者无èŠï¼Œè‡³å°‘,有时候åªå…³æ³¨ä»–们自己的工作而éžä½ è¦å‘表的长篇大论。上课,练习写作,公共演讲,è†å¬ï¼Œè¿™äº›ä¸œè¥¿çš„一个好处是,如果你擅长它们,你å¯ä»¥æ›´å®¹æ˜“看到问题所在以åŠè§£å†³æ–¹æ³•。 程åºå‘˜æ˜¯ä¸€ç§ä¾èµ–于与团队交æµè€Œç”Ÿå­˜çš„社会动物。高级程åºå‘˜æ˜¯ä¸€ç§ä¾èµ–于与团队外的人交æµè€Œæ»¡æ„的社会动物。 diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index be6e128..381064f 100644 --- a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -1,5 +1,5 @@ # å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西 - +[//]: # (Version:1.0.0) 你会ç»å¸¸éœ€è¦å‘Šè¯‰äººä»¬ä¸€äº›è®©ä»–们ä¸èˆ’æœçš„事情。记ä½ï¼Œä½ å¿…须为æŸç§åŽŸå› æ‰è¿™æ ·åšã€‚å³ä½¿æ²¡æœ‰ä»€ä¹ˆå¯ä»¥ç”¨æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ ä¹Ÿè¯¥å°½æ—©å‘Šè¯‰ä»–们,这样他们æ‰èƒ½å……分警觉。 å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你有ä¸è¢«ä¿¡ä»»çš„å±é™©ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 6bc4f03..4bed408 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,5 +1,5 @@ # 如何处ç†ç®¡ç†ç¥žè¯ - +[//]: # (Version:1.0.0) *神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›è§£é‡Šå®‡å®™ä»¥åŠå’Œäººç±»å’Œå®‡å®™ä¹‹é—´çš„关系的宗教故事。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š - æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ diff --git a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md index 6dc658f..b7236df 100644 --- a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md +++ b/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -1,5 +1,5 @@ # 如何处ç†ç»„织混乱 - +[//]: # (Version:1.0.0) ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ > 工程师有能力去创造与维æŒã€‚ diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index 752ea89..67e56f1 100644 --- a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,5 +1,5 @@ # 如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分 - +[//]: # (Version:1.0.0) 解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。大é‡çš„å·¥ä½œæ˜¯å›°éš¾çš„ï¼Œä½†ä¸æ˜¯å¿…ç„¶ä¸å¯èƒ½çš„。 è¿™ç§åŒºåˆ«æ˜¯æ»‘稽的,因为你å¯èƒ½ç»å¸¸è¢«è¦æ±‚åšä¸€äº›äº‹å®žä¸Šä¸å¯èƒ½çš„事情,ä¸è®ºæ˜¯ä»Žç§‘学观点还是从软件工程观点。然åŽä½ çš„å·¥ä½œå°±å˜æˆäº†å¸®åŠ©è€æ¿æ‰¾åˆ°ä¸€ä¸ªåˆç†çš„,仅仅是困难而éžä¸å¯èƒ½çš„解决方案,去满足他们大部分的需è¦ã€‚当一个解决方案å¯ä»¥è¢«è‡ªä¿¡åœ°è§„划且风险å¯ä»¥é¢„æ–™æ—¶ï¼Œå®ƒåªæ˜¯å›°éš¾è€Œå·²ã€‚ diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index 314e979..4a04aa8 100644 --- a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -1,5 +1,5 @@ # 如何使用嵌入型语言 - +[//]: # (Version:1.0.0) 把一ç§ç¼–程语言嵌入到一个系统对程åºå‘˜æ¥è®²æœ‰ç€å‡ ä¹Žä¸Žæ€§ä¸€æ ·çš„é­”åŠ›ã€‚è¿™æ˜¯ä¸€ç§æœ€å…·æœ‰åˆ›é€ åŠ›çš„å¯ä»¥è¡¨çŽ°çš„è¡Œä¸ºã€‚è¿™ä½¿å¾—ç³»ç»ŸæƒŠäººåœ°å¼ºå¤§ã€‚è¿™ä¹Ÿå…è®¸ä½ é”»ç‚¼å¤§å¤šæ•°åˆ›é€ æ€§å’Œæœ‰ç”Ÿå‘½åŠ›çš„èƒ½åŠ›ï¼ŒæŠŠç³»ç»Ÿå˜æˆä½ çš„æœ‹å‹ã€‚ 世界上最好的文本编辑器都有嵌入性语言。这å¯ä»¥è¢«ç”¨äºŽé¢„计的观众å¯ä»¥æŽŒæ¡çš„语言的范围,语言的使用å¯ä»¥å˜ä¸ºå¯é€‰çš„,正如文本编辑器里那样,这样在一开始å¯ä»¥ä½¿ç”¨å®ƒï¼Œè€Œæ²¡æœ‰å…¶ä»–人必须使用它。 diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 7e7d5c9..39347a9 100644 --- a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,5 +1,5 @@ # 选择语言 - +[//]: # (Version:1.0.0) 喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„ boss 说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜çš„需求所驱动。毫无疑问他们æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ 但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣。 diff --git a/zh/4-Glossary.md b/zh/4-Glossary.md index 0cf2850..de32ba9 100644 --- a/zh/4-Glossary.md +++ b/zh/4-Glossary.md @@ -1,5 +1,5 @@ # è¯æ±‡è¡¨ - +[//]: # (Version:1.0.0) è¿™æ˜¯è¿™ç¯‡æ–‡ç« é‡Œç”¨åˆ°çš„ä¸€äº›çŸ­è¯­çš„è¯æ±‡è¡¨ã€‚它们ä¸ä¸€å®šæ˜¯äººä»¬ç†Ÿæ‚‰çš„æ ‡å‡†å«ä¹‰ï¼ŒEric S. Raymond 曾ç»ç¼–译过一份信æ¯é‡å·¨å¤§çš„è¯æ±‡è¡¨ [HackerDict],如果你能ç†è§£å…¶ä¸­çš„ä¸€äº›ç‰‡æ®µï¼Œé˜…è¯»è¿™ä¸ªè¯æ±‡è¡¨å°†æ˜¯æƒŠå–œè€Œæ„‰æ‚¦çš„。 **unk-unk** diff --git a/zh/5-Bibliography.md b/zh/5-Bibliography.md index 8a9ff70..a3e97a6 100644 --- a/zh/5-Bibliography.md +++ b/zh/5-Bibliography.md @@ -1,5 +1,5 @@ # 附录 A - 书目/网站目录 - +[//]: # (Version:1.0.0) ## 书目 [Rules00] Guy Kawasaki, Michelle Moreno, and Gary Kawasaki. 2000. HarperBusiness. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services. diff --git a/zh/6-History.md b/zh/6-History.md index 4260628..e6edd54 100644 --- a/zh/6-History.md +++ b/zh/6-History.md @@ -1,5 +1,5 @@ # 附录 B - åŽ†å² - +[//]: # (Version:1.0.0) ## è¿ç§»åˆ° Github 这篇文章已ç»åœ¨ github 上作为一个仓库创建了,这样它å¯ä»¥å¾ˆå®¹æ˜“åœ°è¢«åˆ†äº«ã€æ›´æ–°ã€æé«˜ã€‚它是从这里å¤åˆ¶è¿‡æ¥çš„。[http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie)。 2016å¹´1月è¿ç§»åˆ° github。 diff --git a/zh/7-Contributions.md b/zh/7-Contributions.md index f9bb8c4..3ea8b14 100644 --- a/zh/7-Contributions.md +++ b/zh/7-Contributions.md @@ -1,5 +1,5 @@ # Contributions - +[//]: # (Version:1.0.0) 这个仓库目标是æˆä¸ºä¸€ä¸ªç¤¾åŒºé©±åŠ¨çš„å·¥ç¨‹ï¼Œä½ çš„åŠ å…¥ä¼šæžå¤§åœ°ä¿ƒè¿›è¿™ä¸ªå‘导的质é‡ã€‚ ## 我å¯ä»¥åšä»€ä¹ˆè´¡çŒ®ï¼Ÿ diff --git a/zh/LICENSE.md b/zh/LICENSE.md index 15ca9b3..e579b65 100644 --- a/zh/LICENSE.md +++ b/zh/LICENSE.md @@ -1,6 +1,6 @@ ## Creative Commons Attribution Share-Alike - +[//]: # (Version:1.0.0) "How To Be A Programmer: Community Version" by Robert L. Read with Community is licensed under Creative Commons Attribution Share-Alike Internal v 4.0. At present this work will be edited by Braydie Grove and Robert L. Read. diff --git a/zh/README.md b/zh/README.md index c1e62de..f11f8cc 100644 --- a/zh/README.md +++ b/zh/README.md @@ -1,6 +1,6 @@ # How to be a Programmer 中文版 Robert L. Read with Community - +[//]: # (Version:1.0.0) Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index ec11b0e..0a98fb0 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -1,4 +1,5 @@ # How to be a Programmer 中文版 +[//]: # (Version:1.0.0) 原文出自 https://github.com/braydie/HowToBeAProgrammer Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. From 98cef4bd716a3912f9963af5c288a4175b1dec2d Mon Sep 17 00:00:00 2001 From: ajsebastian Date: Fri, 29 Apr 2016 12:53:57 -0400 Subject: [PATCH 098/149] Added files via upload Continued upload of updated files with [//]: # (Version:1.0.0) comments --- .../Judgment/02-How to Manage Software System Dependence.md | 2 +- .../Judgment/03-How to Decide if Software is Too Immature.md | 2 +- .../Judgment/04-How to Make a Buy vs Build Decision.md | 2 +- en/2-Intermediate/Judgment/05-How to Grow Professionally.md | 2 +- en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md | 2 +- .../07-How to Know When to Apply Fancy Computer Science.md | 2 +- en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md | 2 +- en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md | 2 +- .../Personal-Skills/02-How to be Widely Trusted.md | 2 +- .../Personal-Skills/03-How to Tradeoff Time vs Space.md | 2 +- en/2-Intermediate/Personal-Skills/04-How to Stress Test.md | 2 +- .../05-How to Balance Brevity and Abstraction.md | 2 +- en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md | 2 +- en/2-Intermediate/Personal-Skills/07-Learn to Type.md | 2 +- .../Personal-Skills/08-How to Do Integration Testing.md | 2 +- en/2-Intermediate/Personal-Skills/09-Communication Languages.md | 2 +- en/2-Intermediate/Personal-Skills/10-Heavy Tools.md | 2 +- en/2-Intermediate/Personal-Skills/11-How to analyze data.md | 2 +- en/2-Intermediate/README.md | 2 +- .../Team-Skills/01-How to Manage Development Time.md | 2 +- .../Team-Skills/02-How to Manage Third-Party Software Risks.md | 2 +- en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md | 2 +- .../Team-Skills/04-How to Communicate the Right Amount.md | 2 +- .../05-How to Disagree Honestly and Get Away with It.md | 2 +- .../Compromising-Wisely/01-How to Fight Schedule Pressure.md | 2 +- .../Compromising-Wisely/02-How to Understand the User.md | 2 +- en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md | 2 +- en/3-Advanced/README.md | 2 +- en/5-Bibliography.md | 2 +- en/6-History.md | 2 +- en/7-Contributions.md | 2 +- en/GLOSSARY.md | 2 +- en/README.md | 2 +- en/SUMMARY.md | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index 0f4c9ba..86900ca 100644 --- a/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -1,5 +1,5 @@ # How to Manage Software System Dependence - +[//]: # (Version:1.0.0) Modern software systems tend to depend on a large number of components that may not be directly under your control. This increases productivity through synergy and reuse. However, each component brings with it some problems: - How will you fix bugs in the component? diff --git a/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index 3f70316..93f03ff 100644 --- a/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -1,5 +1,5 @@ # How to Decide if Software is Too Immature - +[//]: # (Version:1.0.0) Using software other people wrote is one of the most effective ways to quickly build a solid system. It should not be discouraged, but the risks associated with it must be examined. One of the biggest risks is the period of bugginess and near inoperability that is often associated with software before it matures, through usage, into a usable product. Before you consider integrating with a software system, whether created in house or by a third party, it is very important to consider if it is really mature enough to be used. Here are ten questions you should ask yourself about it: 1. Is it vapour? (Promises are very immature). diff --git a/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index 587c532..64d69e7 100644 --- a/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -1,5 +1,5 @@ # How to Make a Buy vs. Build Decision - +[//]: # (Version:1.0.0) An entrepreneurial company or project that is trying to accomplish something with software has to constantly make so-called *buy vs. build* decisions. This turn of phrase is unfortunate in two ways: it seems to ignore open-source and free software which is not necessarily *bought*. Even more importantly, it should perhaps be called an *obtain and integrate vs. build here and integrate* decision because the cost of integration must be considered. This requires a great combination of business, management, and engineering savvy. - How well do your needs match those for which it was designed? diff --git a/en/2-Intermediate/Judgment/05-How to Grow Professionally.md b/en/2-Intermediate/Judgment/05-How to Grow Professionally.md index 25ce941..5ad8576 100644 --- a/en/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/en/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -1,5 +1,5 @@ # How to Grow Professionally - +[//]: # (Version:1.0.0) Assume responsibility in excess of your authority. Play the role that you desire. Express appreciation for people's contribution to the success of the larger organization, as well as things as that help you personally. If you want to become a team leader, instigate the formation of consensus. If you want to become a manager, take responsibility for the schedule. You can usually do this comfortably while working with a leader or a manager, since this frees them up to take greater responsibility. If that is too much to try, do it a little at a time. diff --git a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index 4836c07..cf24614 100644 --- a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -1,5 +1,5 @@ # How to Evaluate Interviewees - +[//]: # (Version:1.0.0) Evaluating potential employees is not given the energy it deserves. A bad hire, like a bad marriage, is terrible. A significant portion of everyone's energy should be devoted to recruitment, though this is rarely done. There are different interviewing styles. Some are torturous, designed to put the candidate under a great deal of stress. This serves a very valuable purpose of possibly revealing character flaws and weaknesses under stress. Candidates are no more honest with interviewers than they are with themselves, and the human capacity for self-deception is astonishing. diff --git a/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index 0201009..8575639 100644 --- a/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -1,5 +1,5 @@ # How to Know When to Apply Fancy Computer Science - +[//]: # (Version:1.0.0) There is a body of knowledge about algorithms, data structures, mathematics, and other gee-whiz stuff that most programmers know about but rarely use. In practice, this wonderful stuff is too complicated and generally unnecessary. There is no point in improving an algorithm when most of your time is spent making inefficient database calls, for instance. An unfortunate amount of programming consists of getting systems to talk to each other and using very simple data structures to build a nice user interface. When is high technology the appropriate technology? When should you crack a book to get something other than a run-of-the-mill algorithm? It is sometimes useful to do this but it should be evaluated carefully. diff --git a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index 2696715..a2b6211 100644 --- a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -1,5 +1,5 @@ # How to Talk to Non-Engineers - +[//]: # (Version:1.0.0) Engineers and programmers in particular are generally recognized by popular culture as being different from other people. This implies that other people are different from us. This is worth bearing in mind when communicating with non-engineers; you should always understand the audience. Non-engineers are smart, but not as grounded in creating technical things as we are. We make things. They sell things and handle things and count things and manage things, but they are not experts on making things. They are not as good at working together on teams as engineers are (there are no doubt exceptions.) Their social skills are generally as good as or better than engineers in non-team environments, but their work does not always demand that they practice the kind of intimate, precise communication and careful subdivisions of tasks that we do. diff --git a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index 37570bf..aa7a9b3 100644 --- a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -1,5 +1,5 @@ # How to Stay Motivated - +[//]: # (Version:1.0.0) It is a wonderful and surprising fact that programmers are highly motivated by the desire to create artifacts that are beautiful, useful, or nifty. This desire is not unique to programmers nor universal but it is so strong and common among programmers that it separates them from others in other roles. This has practical and important consequences. If programmers are asked to do something that is not beautiful, useful, or nifty, they will have low morale. There's a lot of money to be made doing ugly, stupid, and boring stuff; but in the end, fun will make the most money for the company. diff --git a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index d99124d..c115d4e 100644 --- a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -1,5 +1,5 @@ # How to be Widely Trusted - +[//]: # (Version:1.0.0) To be trusted you must be trustworthy. You must also be visible. If no one knows about you, no trust will be invested in you. With those close to you, such as your teammates, this should not be an issue. You establish trust by being responsive and informative to those outside your department or team. Occasionally someone will abuse this trust, and ask for unreasonable favours. Don't be afraid of this, just explain what you would have to give up doing to perform the favour. Don't pretend to know something that you don't. With people that are not teammates, you may have to make a clear distinction between 'not knowing right off the top of my head' and 'not being able to figure it out, ever.' diff --git a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index 33ed2a4..e58a029 100644 --- a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -1,5 +1,5 @@ # How to Tradeoff Time vs. Space - +[//]: # (Version:1.0.0) You can be a good programmer without going to college, but you can't be a good intermediate programmer without knowing basic computational complexity theory. You don't need to know 'big O' notation, but I personally think you should be able to understand the difference between 'constant-time','n log n' and 'n squared'. You might be able to intuit how to trade-off time against space without this knowledge, but in its absence you will not have a firm basis for communicating with your colleagues. In designing or understanding an algorithm, the amount of time it takes to run is sometimes a function of the size of the input. When that is true, we can say an algorithm's worst/expected/best-case running time is 'n log n' if it is proportional to the size ($n$) times the logarithm of the size. The notation and way of speaking can be also be applied to the space taken up by a data structure. diff --git a/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md index 901ec92..30c4418 100644 --- a/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -1,5 +1,5 @@ # How to Stress Test - +[//]: # (Version:1.0.0) Stress testing is fun. At first it appears that the purpose of stress testing is to find out if the system works under a load. In reality, it is common that the system does work under a load but fails to work in some way when the load is heavy enough. I call this *hitting the wall* or *bonking*[1]. There may be some exceptions, but there is almost always a ‘wall’. The purpose of stress testing is to figure out where the wall is, and then figure out how to move the wall further out. A plan for stress testing should be developed early in the project, because it often helps to clarify exactly what is expected. Is two seconds for a web page request a miserable failure or a smashing success? Is 500 concurrent users enough? That, of course, depends, but one must know the answer when designing the system that answers the request. The stress test needs to model reality well enough to be useful. It isn't really possible to simulate 500 erratic and unpredictable humans using a system concurrently very easily, but one can at least create 500 simulations and try to model some part of what they might do. diff --git a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index 30256f2..e7112b0 100644 --- a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,5 +1,5 @@ # How to Balance Brevity and Abstraction - +[//]: # (Version:1.0.0) Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). There is a certain dogma associated with useful techniques such as *information hiding* and *object oriented programming* that are sometimes taken too far. These techniques let one code abstractly and anticipate change. I personally think, however, that you should not produce much speculative code. For example, it is an accepted style to hide an integer variable on an object behind mutators and accessors, so that the variable itself is not exposed, only the little interface to it. This does allow the implementation of that variable to be changed without affecting the calling code, and is perhaps appropriate to a library writer who must publish a very stable API. But I don't think the benefit of this outweighs the cost of the wordiness of it when my team owns the calling code and hence can recode the caller as easily as the called. Four or five extra lines of code is a heavy price to pay for this speculative benefit. diff --git a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index dbd0b75..d025b46 100644 --- a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -1,5 +1,5 @@ # How to Learn New Skills - +[//]: # (Version:1.0.0) Learning new skills, especially non-technical ones, is the greatest fun of all. Most companies would have better morale if they understood how much this motivates programmers. Humans learn by doing. Book-reading and class-taking are useful. But could you have any respect for a programmer who had never written a program? To learn any skill, you have to put yourself in a forgiving position where you can exercise that skill. When learning a new programming language, try to do a small project in it before you have to do a large project. When learning to manage a software project, try to manage a small one first. diff --git a/en/2-Intermediate/Personal-Skills/07-Learn to Type.md b/en/2-Intermediate/Personal-Skills/07-Learn to Type.md index 0561fa1..c678ddd 100644 --- a/en/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/en/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -1,5 +1,5 @@ # Learn to Type - +[//]: # (Version:1.0.0) Learn to touch-type. This is an intermediate skill because writing code is so hard that the speed at which you can type is irrelevant and can't put much of a dent in the time it takes to write code, no matter how good you are. However, by the time you are an intermediate programmer you will probably spend a lot of time writing natural language to your colleagues and others. This is a fun test of your commitment; it takes dedicated time that is not much fun to learn something like that. Legend has it that when Michael Tiemann was at MCC people would stand outside his door to listen to the hum generated by his keystrokes which were so rapid as to be indistinguishable. Next [How to Do Integration Testing](08-How to Do Integration Testing.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index 8b1aefe..2e111a0 100644 --- a/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -1,5 +1,5 @@ # How to Do Integration Testing - +[//]: # (Version:1.0.0) Integration testing is the testing of the integration of various components that have been unit tested. Integration is expensive and it comes out in the testing. You must include time for this in your estimates and your schedule. Ideally you should organize a project so that there is not a phase at the end where integration must explicitly take place. It is far better to gradually integrate things as they are completed over the course of the project. If it is unavoidable estimate it carefully. diff --git a/en/2-Intermediate/Personal-Skills/09-Communication Languages.md b/en/2-Intermediate/Personal-Skills/09-Communication Languages.md index e006c4f..8d39438 100644 --- a/en/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/en/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -1,5 +1,5 @@ # Communication Languages - +[//]: # (Version:1.0.0) There are some languages, that is, formally defined syntactic systems, that are not programming languages but *communication languages* - they are designed specifically to facilitate communication through standardization. In 2003 the most important of these are UML, XML, and SQL. You should have some familiarity with all of these so that you can communicate well and decide when to use them. UML is a rich formal system for making drawings that describe designs. Its beauty lies in that it is both visual and formal, capable of conveying a great deal of information if both the author and the audience know UML. You need to know about it because designs are sometimes communicated in it. There are very helpful tools for making UML drawings that look very professional. In a lot of cases UML is too formal, and I find myself using a simpler *boxes and arrows* style for design drawings. But I'm fairly sure UML is at least as good for you as studying Latin. diff --git a/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md index 1192c6e..d5fcb55 100644 --- a/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -1,5 +1,5 @@ # Heavy Tools - + [//]: # (Version:1.0.0) As our technological culture progresses, software technology moves from inconceivable, to research, to new products, to standardized products, to widely available and inexpensive products. These heavy tools can pull great loads, but can be intimidating and require a large investment in understanding. The intermediate programmer has to know how to manage them and when they should be used or considered. To my mind right now some of the best heavy tools are: diff --git a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md index 005db91..dccc36a 100644 --- a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -1,5 +1,5 @@ # How to analyze data - +[//]: # (Version:1.0.0) Data analysis is a process in the early stages of software development, when you examine a business activity and find the requirements to convert it into a software application. This is a formal definition, which may lead you to believe that data analysis is an action that you should better leave to the systems analysts, while you, the programmer, should focus on coding what somebody else has designed. If we follow strictly the software engineering paradigm, it may be correct. Experienced programmers become designers and the sharpest designers become business analysts, thus being entitled to think about all the data requirements and give you a well defined task to carry out. This is not entirely accurate, because data is the core value of every programming activity. Whatever you do in your programs, you are either moving around or modifying data. The business analyst is analysing the needs in a larger scale, and the software designer is further squeezing such scale so that, when the problem lands on your desk, it seems that all you need to do is to apply clever algorithms and start moving existing data. Not so. diff --git a/en/2-Intermediate/README.md b/en/2-Intermediate/README.md index 5271d19..d33316e 100644 --- a/en/2-Intermediate/README.md +++ b/en/2-Intermediate/README.md @@ -1,5 +1,5 @@ # 2. Intermediate - +[//]: # (Version:1.0.0) - Personal Skills - [How to Stay Motivated](Personal-Skills/01-How to Stay Motivated.md) - [How to be Widely Trusted](Personal-Skills/02-How to be Widely Trusted.md) diff --git a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index eca71f0..94d473e 100644 --- a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -1,5 +1,5 @@ # How to Manage Development Time - +[//]: # (Version:1.0.0) To manage development time, maintain a concise and up-to-date project plan. A project plan is an estimate, a schedule, a set of milestones for marking progress, and an assignment of your team or your own time to each task on the estimate. It should also include other things you have to remember to do, such as meeting with the quality assurance people, preparing documentation, or ordering equipment. If you are on a team, the project plan should be a consensual agreement, both at the start and as you go. The project plan exists to help make decisions, not to show how organized you are. If the project plan is either too long or not up-to-date, it will be useless for making decisions. In reality, these decisions are about individual persons. The plan and your judgement let you decide if you should shift tasks from one person to another. The milestones mark your progress. If you use a fancy project planning tool, do not be seduced into creating a Big Design Up Front (BDUF) for the project, but use it to maintain concision and up-to-dateness. diff --git a/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index eb3f44d..336f3e8 100644 --- a/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -1,5 +1,5 @@ # How to Manage Third-Party Software Risks - +[//]: # (Version:1.0.0) A project often depends on software produced by organizations that it does not control. There are great risks associated with third party software that must be recognized by everyone involved. Never, ever, rest any hopes on *vapour*. Vapour is any alleged software that has been promised but is not yet available. This is the surest way to go out of business. It is unwise to be merely sceptical of a software company's promise to release a certain product with a certain feature at a certain date; it is far wiser to ignore it completely and forget you ever heard it. Never let it be written down in any documents used by your company. diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 6844c3b..6b632b9 100644 --- a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -1,5 +1,5 @@ # How to Manage Consultants - +[//]: # (Version:1.0.0) Use consultants, but don't rely on them. They are wonderful people and deserve a great deal of respect. Since they get to see a lot of different projects, they often know more about specific technologies and even programming techniques than you will. The best way to use them is as educators in-house that can teach by example. However, they usually cannot become part of the team in the same sense that regular employees are, if only because you may not have enough time to learn their strengths and weaknesses. Their financial commitment is much lower. They can move more easily. They may have less to gain if the company does well. Some will be good, some will be average, and some will be bad, but hopefully your selection of consultants will not be as careful as your selection of employees, so you will get more bad ones. diff --git a/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index 55bd84e..2e16157 100644 --- a/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -1,5 +1,5 @@ # How to Communicate the Right Amount - +[//]: # (Version:1.0.0) Carefully consider the cost of a meeting; it costs *its duration multiplied by the number of participants*. Meetings are sometimes necessary, but smaller is usually better. The quality of communication in small meetings is better, and less time overall is wasted. If any one person is bored at a meeting take this as a sign that the meeting should be smaller. Everything possible should be done to encourage informal communication. More useful work is done during lunches with colleagues than during any other time. It is a shame that more companies do not recognize nor support this fact. diff --git a/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index 022ab50..7ced830 100644 --- a/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -1,5 +1,5 @@ # How to Disagree Honestly and Get Away with It - +[//]: # (Version:1.0.0) Disagreement is a great opportunity to make a good decision, but it should be handled delicately. Hopefully you feel that you have expressed your thoughts adequately and been heard before the decision is made. In that case there is nothing more to say, and you should decide whether you will stand behind the decision even though you disagree with it. If you can support this decision even though you disagree, say so. This shows how valuable you are because you are independent and are not a yes-man, but respectful of the decision and a team player. Sometimes a decision that you disagree with will be made when the decision makers did not have the full benefit of your opinion. You should then evaluate whether to raise the issue on the basis of the benefit to the company or tribe. If it is a small mistake in your opinion, it may not be worth reconsidering. If it is a large mistake in your opinion, then of course you must present an argument. diff --git a/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index 4cbbf85..f54a5f0 100644 --- a/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -1,5 +1,5 @@ # How to Fight Schedule Pressure - +[//]: # (Version:1.0.0) Time-to-market pressure is the pressure to deliver a good product quickly. It is good because it reflects a financial reality, and is healthy up to a point. Schedule pressure is the pressure to deliver something faster than it can be delivered and it is wasteful, unhealthy, and all too common. Schedule pressure exists for several reasons. The people who task programmers do not fully appreciate what a strong work ethic we have and how much fun it is to be a programmer. Perhaps because they project their own behaviour onto us, they believe that asking for it sooner will make us work harder to get it there sooner. This is probably actually true, but the effect is very small, and the damage is very great. Additionally, they have no visibility into what it really takes to produce software. Not being able to see it, and not be able to create it themselves, the only thing they can do is see time-to-market pressure and fuss at programmers about it. diff --git a/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 1e3d1c0..2d637ee 100644 --- a/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,5 +1,5 @@ # How to Understand the User - +[//]: # (Version:1.0.0) It is your duty to understand the user, and to help your boss understand the user. Because the user is not as intimately involved in the creation of your product as you are, they behave a little differently: - The user generally makes short pronouncements. diff --git a/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 1ea1510..72fa4eb 100644 --- a/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -1,5 +1,5 @@ # How to Get a Promotion - +[//]: # (Version:1.0.0) To be promoted to a role, act out that role first. To get promoted to a title, find out what is expected of that title and do that. diff --git a/en/3-Advanced/README.md b/en/3-Advanced/README.md index 7f66191..fb65816 100644 --- a/en/3-Advanced/README.md +++ b/en/3-Advanced/README.md @@ -1,5 +1,5 @@ # 3. Advanced - +[//]: # (Version:1.0.0) - Technological Judgment - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - [How to Utilize Embedded Languages](Technical-Judgment/02-How to Utilize Embedded Languages.md) diff --git a/en/5-Bibliography.md b/en/5-Bibliography.md index aa741ea..e96590e 100644 --- a/en/5-Bibliography.md +++ b/en/5-Bibliography.md @@ -1,5 +1,5 @@ # Appendix A - Bibliography/Websiteography - +[//]: # (Version:1.0.0) ## Books [Rules00] Guy Kawasaki, Michelle Moreno, and Gary Kawasaki. 2000. HarperBusiness. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services. diff --git a/en/6-History.md b/en/6-History.md index 0e09a87..4a46e40 100644 --- a/en/6-History.md +++ b/en/6-History.md @@ -1,5 +1,5 @@ # Appendix B - History - +[//]: # (Version:1.0.0) ## Move to Github This essay has been created as a repository on Github so that it can be easily shared, updated and improved. It was copied from [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie). It was moved to Github in January 2016. diff --git a/en/7-Contributions.md b/en/7-Contributions.md index 1918099..30dc8af 100644 --- a/en/7-Contributions.md +++ b/en/7-Contributions.md @@ -1,5 +1,5 @@ # Contributions - +[//]: # (Version:1.0.0) This repository aims to be a community driven project, and your involvement will ultimately help improve the quality of this guide. ## What can I do to contribute? diff --git a/en/GLOSSARY.md b/en/GLOSSARY.md index 794dfa6..283b316 100644 --- a/en/GLOSSARY.md +++ b/en/GLOSSARY.md @@ -1,5 +1,5 @@ # Glossary - +[//]: # (Version:1.0.0) This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it. ### unk-unk diff --git a/en/README.md b/en/README.md index 903288f..81c3ac2 100644 --- a/en/README.md +++ b/en/README.md @@ -1,5 +1,5 @@ # How to be a Programmer: Community Version - +[//]: # (Version:1.0.0) Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read diff --git a/en/SUMMARY.md b/en/SUMMARY.md index 3a73b06..552702e 100644 --- a/en/SUMMARY.md +++ b/en/SUMMARY.md @@ -1,5 +1,5 @@ # Summary - +[//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) * Personal Skills * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) From 043fe928870c6315fbba49489871090dc2cce5d4 Mon Sep 17 00:00:00 2001 From: zornlemma Date: Sat, 28 May 2016 13:40:24 +0800 Subject: [PATCH 099/149] Update 01-Why Estimation is Important.md --- zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md index b48912b..3ff334e 100644 --- a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -2,13 +2,13 @@ [//]: # (Version:1.0.0) 为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 -好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…的情况,因为人们有一ç§ä»¤äººåƒæƒŠçš„趋势会这样希望满满地认为: +好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…çš„æƒ…å†µï¼Œå› ä¸ºäººä»¬ä»¤äººåƒæƒŠåœ°å€¾å‘于一厢情愿地认为下é¢è¿™å¥è¯ï¼š > 我估计,如果我确实ç†è§£äº†è¿™ä¸ªé—®é¢˜ï¼Œæˆ‘们在5周内有50%çš„å¯èƒ½å®Œæˆä»»åŠ¡ï¼ˆå¦‚æžœåœ¨æ­¤æœŸé—´æ²¡æœ‰äººå¹²æ‰°æˆ‘ä»¬çš„è¯ï¼‰ã€‚ 的真实的å«ä¹‰æ˜¯ï¼š > 我ä¿è¯ä»ŽçŽ°åœ¨å¼€å§‹äº”ä¸ªæ˜ŸæœŸå†…å®Œæˆä»»åŠ¡ã€‚ -这个常è§çš„解释问题需è¦ä½ ä¸“门与你的 boss å’Œå®¢æˆ·è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡å¯¹ä½ æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ +这个常è§çš„解读问题需è¦ä½ ä¸Žä½ çš„ boss å’Œå®¢æˆ·æ˜Žç¡®åœ°è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡å¯¹ä½ æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ Next [如何估计编程时间](02-How to Estimate Programming Time.md) From cd020ec7d3cf58eb40c8d1b46bd0d4e635404e59 Mon Sep 17 00:00:00 2001 From: Mark Maglana Date: Tue, 31 May 2016 09:59:34 -0700 Subject: [PATCH 100/149] Update 01-How to Tell the Hard From the Impossible.md Minor correction: Change 'not' to 'no' --- .../01-How to Tell the Hard From the Impossible.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index a1146c0..153bdcd 100644 --- a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -4,6 +4,6 @@ It is our job to do the hard and discern the impossible. From the point of view The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. -It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is not crisp definition of success, you will not succeed. +It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is no crisp definition of success, you will not succeed. -Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) \ No newline at end of file +Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) From 80a4445e124ee45b574efb6cfd2aeb81a052ee7f Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Sun, 5 Jun 2016 19:13:55 +0100 Subject: [PATCH 101/149] Added missing version number --- .../01-How to Tell the Hard From the Impossible.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index 153bdcd..0c8ec8e 100644 --- a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,5 +1,5 @@ # How to Tell the Hard From the Impossible - +[//]: # (Version:1.0.1) It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. From f5716bfcdd88940c598e153e941c7e4a900febc8 Mon Sep 17 00:00:00 2001 From: nikjohn Date: Thu, 14 Jul 2016 13:55:39 +0530 Subject: [PATCH 102/149] Change `she` to `he or she` IMHO it makes sense to have the subject as gender agnostic --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68eddba..71222ee 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens [Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6999069-how-to-be-a-programmer) - Edition 1, published 04/01/16 ## Introduction -To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. +To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom he or she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. This is very subjective and, therefore, this essay is doomed to be personal and somewhat opinionated. I confine myself to problems that a programmer is very likely to have to face in her work. Many of these problems and their solutions are so general to the human condition that I will probably seem preachy. I hope in spite of this that this essay will be useful. From 326fb3bff9224fe75eed4949608ce0b444ff38e7 Mon Sep 17 00:00:00 2001 From: borerere Date: Thu, 17 Nov 2016 15:07:32 +0900 Subject: [PATCH 103/149] firstcommit --- .../Personal-Skills/01-Learn To Debug.md | 21 +++ ...to Debug by Splitting the Problem Space.md | 15 ++ .../03-How to Remove an Error.md | 9 ++ .../04-How to Debug Using a Log.md | 13 ++ ...-How to Understand Performance Problems.md | 11 ++ .../06-How to Fix Performance Problems.md | 13 ++ .../07-How to Optimize Loops.md | 15 ++ .../08-How to Deal with IO Expense.md | 13 ++ .../09-How to Manage Memory.md | 15 ++ .../10-How to Deal with Intermittent Bugs.md | 17 +++ .../11-How to Learn Design Skills.md | 9 ++ .../12-How to Conduct Experiments.md | 23 +++ jp/1-Beginner/README.md | 27 ++++ .../01-Why Estimation is Important.md | 15 ++ .../02-How to Estimate Programming Time.md | 21 +++ .../03-How to Find Out Information.md | 19 +++ ...o Utilize People as Information Sources.md | 15 ++ .../Team-Skills/05-How to Document Wisely.md | 20 +++ .../06-How to Work with Poor Code.md | 11 ++ .../07-How to Use Source Code Control.md | 9 ++ .../Team-Skills/08-How to Unit Test.md | 9 ++ .../09-Take Breaks when Stumped.md | 5 + .../10-How to Recognize When to Go Home.md | 16 +++ .../11-How to Deal with Difficult People.md | 15 ++ ...adeoff Quality Against Development Time.md | 13 ++ ...ow to Manage Software System Dependence.md | 13 ++ ...w to Decide if Software is Too Immature.md | 18 +++ .../04-How to Make a Buy vs Build Decision.md | 16 +++ .../Judgment/05-How to Grow Professionally.md | 11 ++ .../06-How to Evaluate Interviewees.md | 15 ++ ...ow When to Apply Fancy Computer Science.md | 15 ++ .../08-How to Talk to Non-Engineers.md | 19 +++ .../01-How to Stay Motivated.md | 15 ++ .../02-How to be Widely Trusted.md | 7 + .../03-How to Tradeoff Time vs Space.md | 15 ++ .../Personal-Skills/04-How to Stress Test.md | 17 +++ ...-How to Balance Brevity and Abstraction.md | 9 ++ .../06-How to Learn New Skills.md | 13 ++ .../Personal-Skills/07-Learn to Type.md | 5 + .../08-How to Do Integration Testing.md | 7 + .../09-Communication Languages.md | 11 ++ .../Personal-Skills/10-Heavy Tools.md | 14 ++ .../Personal-Skills/11-How to analyze data.md | 11 ++ jp/2-Intermediate/README.md | 29 ++++ .../01-How to Manage Development Time.md | 11 ++ ...ow to Manage Third-Party Software Risks.md | 11 ++ .../03-How to Manage Consultants.md | 9 ++ .../04-How to Communicate the Right Amount.md | 7 + ... Disagree Honestly and Get Away with It.md | 11 ++ .../01-How to Fight Schedule Pressure.md | 11 ++ .../02-How to Understand the User.md | 17 +++ .../03-How to Get a Promotion.md | 13 ++ jp/3-Advanced/README.md | 22 +++ .../01-How to Develop Talent.md | 23 +++ .../02-How to Choose What to Work On.md | 5 + ...How to Get the Most From Your Teammates.md | 15 ++ .../04-How to Divide Problems Up.md | 9 ++ .../05-How to Handle Boring Tasks.md | 7 + .../06-How to Gather Support for a Project.md | 5 + .../07-How to Grow a System.md | 23 +++ .../08-How to Communicate Well.md | 11 ++ ...l People Things They Don't Want to Hear.md | 9 ++ .../10-How to Deal with Managerial Myths.md | 13 ++ ...1-How to Deal with Organizational Chaos.md | 11 ++ ...ow to Tell the Hard From the Impossible.md | 9 ++ .../02-How to Utilize Embedded Languages.md | 11 ++ .../03-Choosing Languages.md | 15 ++ jp/5-Bibliography.md | 31 ++++ jp/6-History.md | 47 ++++++ jp/7-Contributions.md | 31 ++++ jp/GLOSSARY.md | 135 ++++++++++++++++++ jp/LICENSE.md | 12 ++ jp/README.md | 103 +++++++++++++ jp/SUMMARY.md | 80 +++++++++++ 74 files changed, 1346 insertions(+) create mode 100644 jp/1-Beginner/Personal-Skills/01-Learn To Debug.md create mode 100644 jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md create mode 100644 jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md create mode 100644 jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md create mode 100644 jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md create mode 100644 jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md create mode 100644 jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md create mode 100644 jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md create mode 100644 jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md create mode 100644 jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md create mode 100644 jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md create mode 100644 jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md create mode 100644 jp/1-Beginner/README.md create mode 100644 jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md create mode 100644 jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md create mode 100644 jp/1-Beginner/Team-Skills/03-How to Find Out Information.md create mode 100644 jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md create mode 100644 jp/1-Beginner/Team-Skills/05-How to Document Wisely.md create mode 100644 jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md create mode 100644 jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md create mode 100644 jp/1-Beginner/Team-Skills/08-How to Unit Test.md create mode 100644 jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md create mode 100644 jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md create mode 100644 jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md create mode 100644 jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md create mode 100644 jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md create mode 100644 jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md create mode 100644 jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md create mode 100644 jp/2-Intermediate/Judgment/05-How to Grow Professionally.md create mode 100644 jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md create mode 100644 jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md create mode 100644 jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md create mode 100644 jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md create mode 100644 jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md create mode 100644 jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md create mode 100644 jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md create mode 100644 jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md create mode 100644 jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md create mode 100644 jp/2-Intermediate/Personal-Skills/07-Learn to Type.md create mode 100644 jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md create mode 100644 jp/2-Intermediate/Personal-Skills/09-Communication Languages.md create mode 100644 jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md create mode 100644 jp/2-Intermediate/Personal-Skills/11-How to analyze data.md create mode 100644 jp/2-Intermediate/README.md create mode 100644 jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md create mode 100644 jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md create mode 100644 jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md create mode 100644 jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md create mode 100644 jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md create mode 100644 jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md create mode 100644 jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md create mode 100644 jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md create mode 100644 jp/3-Advanced/README.md create mode 100644 jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md create mode 100644 jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md create mode 100644 jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md create mode 100644 jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md create mode 100644 jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md create mode 100644 jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md create mode 100644 jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md create mode 100644 jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md create mode 100644 jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md create mode 100644 jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md create mode 100644 jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md create mode 100644 jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md create mode 100644 jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md create mode 100644 jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md create mode 100644 jp/5-Bibliography.md create mode 100644 jp/6-History.md create mode 100644 jp/7-Contributions.md create mode 100644 jp/GLOSSARY.md create mode 100644 jp/LICENSE.md create mode 100644 jp/README.md create mode 100644 jp/SUMMARY.md diff --git a/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md b/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md new file mode 100644 index 0000000..b073d2d --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -0,0 +1,21 @@ +# Learn to Debug +[//]: # (Version:1.0.0) +Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. + +Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. + +Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. + +To get visibility into the execution of a program you must be able to execute the code and observe something about it. Sometimes this is visible, like what is being displayed on a screen, or the delay between two events. In many other cases, it involves things that are not meant to be visible, like the state of some variables inside the code, which lines of code are actually being executed, or whether certain assertions hold across a complicated data structure. These hidden things must be revealed. + +The common ways of looking into the ‘innards’ of an executing program can be categorized as: + +- Using a debugging tool, +- Printlining - Making a temporary modification to the program, typically adding lines that print information out, and +- Logging - Creating a permanent window into the programs execution in the form of a log. + +Debugging tools are wonderful when they are stable and available, but printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. + +Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. + +Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) diff --git a/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md new file mode 100644 index 0000000..f8fbe61 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -0,0 +1,15 @@ +# How to Debug by Splitting the Problem Space +[//]: # (Version:1.0.0) +Debugging is fun, because it begins with a mystery. You think it should do something, but instead it does something else. It is not always quite so simple---any examples I can give will be contrived compared to what sometimes happens in practice. Debugging requires creativity and ingenuity. If there is a single key to debugging it is to use the divide and conquer technique on the mystery. + +Suppose, for example, you created a program that should do ten things in a sequence. When you run it, it crashes. Since you didn't program it to crash, you now have a mystery. When you look at the output, you see that the first seven things in the sequence were run successfully. The last three are not visible from the output, so now your mystery is smaller: ‘It crashed on thing #8, #9, or #10.’ + +Can you design an experiment to see which thing it crashed on? Sure. You can use a debugger or we can add printline statements (or the equivalent in whatever language you are working in) after #8 and #9. When we run it again, our mystery will be smaller, such as ‘It crashed on thing #9.’ I find that bearing in mind exactly what the mystery is at any point in time helps keep one focused. When several people are working together under pressure on a problem it is easy to forget what the most important mystery is. + +The key to divide and conquer as a debugging technique is the same as it is for algorithm design: as long as you do a good job splitting the mystery in the middle, you won't have to split it too many times, and you will be debugging quickly. But what is the middle of a mystery? This is where true creativity and experience comes in. + +To a true beginner, the space of all possible errors looks like every line in the source code. You don't have the vision you will later develop to see the other dimensions of the program, such as the space of executed lines, the data structure, the memory management, the interaction with foreign code, the code that is risky, and the code that is simple. For the experienced programmer, these other dimensions form an imperfect but very useful mental model of all the things that can go wrong. Having that mental model is what helps one find the middle of the mystery effectively. + +Once you have evenly subdivided the space of all that can go wrong, you must try to decide in which space the error lies. In the simple case where the mystery is: ‘Which single unknown line makes my program crash?’, you can ask yourself: ‘Is the unknown line executed before or after this line that I judge to be executed in the middle of the running program?’ Usually you will not be so lucky as to know that the error exists in a single line, or even a single block. Often the mystery will be more like: ‘Either there is a pointer in that graph that points to the wrong node, or my algorithm that adds up the variables in that graph doesn't work.’ In that case you may have to write a small program to check that the pointers in the graph are all correct in order to decide which part of the subdivided mystery can be eliminated. + +Next [How to Remove an Error](03-How to Remove an Error.md) diff --git a/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md new file mode 100644 index 0000000..d88eb5d --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -0,0 +1,9 @@ +# How to Remove an Error +[//]: # (Version:1.0.0) +I've intentionally separated the act of examining a program's execution from the act of fixing an error. But of course, debugging does also mean removing the bug. Ideally you will have perfect understanding of the code and will reach an ‘A-Ha!’ moment where you perfectly see the error and how to fix it. But since your program will often use insufficiently documented systems into which you have no visibility, this is not always possible. In other cases the code is so complicated that your understanding cannot be perfect. + +In fixing a bug, you want to make the smallest change that fixes the bug. You may see other things that need improvement; but don't fix those at the same time. Attempt to employ the scientific method of changing one thing and only one thing at a time. The best process for this is to be able to easily reproduce the bug, then put your fix in place, and then rerun the program and observe that the bug no longer exists. Of course, sometimes more than one line must be changed, but you should still conceptually apply a single atomic change to fix the bug. + +Sometimes, there are really several bugs that look like one. It is up to you to define the bugs and fix them one at a time. Sometimes it is unclear what the program should do or what the original author intended. In this case, you must exercise your experience and judgment and assign your own meaning to the code. Decide what it should do, and comment it or clarify it in some way and then make the code conform to your meaning. This is an intermediate or advanced skill that is sometimes harder than writing the original function in the first place, but the real world is often messy. You may have to fix a system you cannot rewrite. + +Next [How to Debug Using a Log](04-How to Debug Using a Log.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md new file mode 100644 index 0000000..1cc3ab9 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -0,0 +1,13 @@ +# How to Debug Using a Log +[//]: # (Version:1.0.0) +*Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: + +- Logs can provide useful information about bugs that are hard to reproduce (such as those that occur in the production environment but that cannot be reproduced in the test environment). +- Logs can provide statistics and data relevant to performance, such as the time passing between statements. +- When configurable, logs allow general information to be captured in order to debug unanticipated specific problems without having to modify and/or redeploy the code just to deal with those specific problems. + +The amount to output into the log is always a compromise between information and brevity. Too much information makes the log expensive and produces *scroll blindness*, making it hard to find the information you need. Too little information and it may not contain what you need. For this reason, making what is output configurable is very useful. Typically, each record in the log will identify its position in the source code, the thread that executed it if applicable, the precise time of execution, and, commonly, an additional useful piece of information, such as the value of some variable, the amount of free memory, the number of data objects, etc. These log statements are sprinkled throughout the source code, particularly at major functionality points and around risky code. Each statement can be assigned a level and will only output a record if the system is currently configured to output that level. You should design the log statements to address problems that you anticipate. Anticipate the need to measure performance. + +If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. + +Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md new file mode 100644 index 0000000..72e26d6 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -0,0 +1,11 @@ +# How to Understand Performance Problems +[//]: # (Version:1.0.0) +Learning to understand the performance of a running system is unavoidable for the same reason that learning debugging is. Even if you understand perfectly precisely the cost of the code you write, your code will make calls into other software systems that you have little control over or visibility into. However, in practice performance problems are a little different and a little easier than debugging in general. + +Suppose that you or your customers consider a system or a subsystem to be too slow. Before you try to make it faster, you must build a mental model of why it is slow. To do this you can use a profiling tool or a good log to figure out where the time or other resources are really being spent. There is a famous dictum that 90% of the time will be spent in 10% of the code. I would add to that the importance of input/output expense (I/O) to performance issues. Often most of the time is spent in I/O in one way or another. Finding the expensive I/O and the expensive 10% of the code is a good first step to building your mental model. + +There are many dimensions to the performance of a computer system, and many resources consumed. The first resource to measure is *wall-clock time*, the total time that passes for the computation. Logging *wall-clock time* is particularly valuable because it can inform about unpredictable circumstances that arise in situations where other profiling is impractical. However, this may not always represent the whole picture. Sometimes something that takes a little longer but doesn't burn up so many processor seconds will be much better in the computing environment you actually have to deal with. Similarly, memory, network bandwidth, database or other server accesses may, in the end, be far more expensive than processor seconds. + +Contention for shared resources that are synchronized can cause deadlock and starvation. Deadlock is the inability to proceed because of improper synchronization or resource demands. Starvation is the failure to schedule a component properly. If it can be at all anticipated, it is best to have a way of measuring this contention from the start of your project. Even if this contention does not occur, it is very helpful to be able to assert that with confidence. + +Next [How to Fix Performance Problems](06-How to Fix Performance Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md new file mode 100644 index 0000000..fbed002 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -0,0 +1,13 @@ +# How to Fix Performance Problems +[//]: # (Version:1.0.0) +Most software projects can be made with relatively little effort 10 to 100 times faster than they are at the time they are first released. Under time-to-market pressure, it is both wise and effective to choose a solution that gets the job done simply and quickly, but less efficiently than some other solution. However, performance is a part of usability, and often it must eventually be considered more carefully. + +The key to improving the performance of a very complicated system is to analyse it well enough to find the *bottlenecks*, or places where most of the resources are consumed. There is not much sense in optimizing a function that accounts for only 1% of the computation time. As a rule of thumb you should think carefully before doing anything unless you think it is going to make the system or a significant part of it at least twice as fast. There is usually a way to do this. Consider the test and quality assurance effort that your change will require. Each change brings a test burden with it, so it is much better to have a few big changes. + +After you've made a two-fold improvement in something, you need to at least rethink and perhaps reanalyze to discover the next-most-expensive bottleneck in the system, and attack that to get another two-fold improvement. + +Often, the bottlenecks in performance will be an example of counting cows by counting legs and dividing by four, instead of counting heads. For example, I've made errors such as failing to provide a relational database system with a proper index on a column I look up a lot, which probably made it at least 20 times slower. Other examples include doing unnecessary I/O in inner loops, leaving in debugging statements that are no longer needed, unnecessary memory allocation, and, in particular, inexpert use of libraries and other subsystems that are often poorly documented with respect to performance. This kind of improvement is sometimes called *low-hanging fruit*, meaning that it can be easily picked to provide some benefit. + +What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down. You can continue making small improvements or you can seriously redesign a system or a subsystem. (This is a great opportunity to use your skills as a good programmer, not only in the new design but also in convincing your boss that this is a good idea.) However, before you argue for the redesign of a subsystem, you should ask yourself whether or not your proposal will make it five to ten time better. + +Next [How to Optimize Loops](07-How to Optimize Loops.md) diff --git a/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md new file mode 100644 index 0000000..f73305d --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -0,0 +1,15 @@ +# How to Optimize Loops +[//]: # (Version:1.0.0) +Sometimes you'll encounter loops, or recursive functions, that take a long time to execute and are bottlenecks in your product. Before you try to make the loop a little faster, spend a few minutes considering if there is a way to remove it entirely. Would a different algorithm do? Could you compute that while computing something else? If you can't find a way around it, then you can optimize the loop. This is simple; move stuff out. In the end, this will require not only ingenuity but also an understanding of the expense of each kind of statement and expression. Here are some suggestions: + +- Remove floating point operations. +- Don't allocate new memory blocks unnecessarily. +- Fold constants together. +- Move I/O into a buffer. +- Try not to divide. +- Try not to do expensive typecasts. +- Move a pointer rather than recomputing indices. + +The cost of each of these operations depends on your specific system. On some systems compilers and hardware do these things for you. Clear, efficient code is better than code that requires an understanding of a particular platform. + +Next [How to Deal with I/O Expense](08-How to Deal with IO Expense.md) diff --git a/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md new file mode 100644 index 0000000..81a3a15 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -0,0 +1,13 @@ +# How to Deal with I/O Expense +[//]: # (Version:1.0.0) +For a lot of problems, processors are fast compared to the cost of communicating with a hardware device. This cost is usually abbreviated I/O, and can include network cost, disk I/O, database queries, file I/O, and other use of some hardware not very close to the processor. Therefore building a fast system is often more a question of improving I/O than improving the code in some tight loop, or even improving an algorithm. + +There are two very fundamental techniques to improving I/O: caching and representation. Caching is avoiding I/O (generally avoiding the reading of some abstract value) by storing a copy of that value locally so no I/O is performed to get the value. The first key to caching is to make it crystal clear which data is the master and which are copies. There is only one master - period. Caching brings with it the danger that the copy sometimes can't reflect changes to the master instantaneously. + +Representation is the approach of making I/O cheaper by representing data more efficiently. This is often in tension with other demands, like human readability and portability. + +Representations can often be improved by a factor of two or three from their first implementation. Techniques for doing this include using a binary representation instead of one that is human readable, transmitting a dictionary of symbols along with the data so that long symbols don't have to be encoded, and, at the extreme, things like Huffman encoding. + +A third technique that is sometimes possible is to improve the locality of reference by pushing the computation closer to the data. For instance, if you are reading some data from a database and computing something simple from it, such as a summation, try to get the database server to do it for you. This is highly dependent on the kind of system you're working with, but you should explore it. + +Next [How to Manage Memory](09-How to Manage Memory.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md new file mode 100644 index 0000000..8c657c3 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -0,0 +1,15 @@ +# How to Manage Memory +[//]: # (Version:1.0.0) +Memory is a precious resource that you can't afford to run out of. You can ignore it for a while but eventually you will have to decide how to manage memory. + +Space that needs to persist beyond the scope of a single subroutine is often called *heap allocated*. A chunk of memory is useless, hence *garbage*, when nothing refers to it. Depending on the system you use, you may have to explicitly deallocate memory yourself when it is about to become garbage. More often you may be able to use a system that provides a *garbage collector*. A garbage collector notices garbage and frees its space without any action required by the programmer. Garbage collection is wonderful: it lessens errors and increases code brevity and concision cheaply. Use it when you can. + +But even with garbage collection, you can fill up all memory with garbage. A classic mistake is to use a hash table as a cache and forget to remove the references in the hash table. Since the reference remains, the referent is non-collectable but useless. This is called a *memory leak*. You should look for and fix memory leaks early. If you have long running systems memory may never be exhausted in testing but will be exhausted by the user. + +The creation of new objects is moderately expensive on any system. Memory allocated directly in the local variables of a subroutine, however, is usually cheap because the policy for freeing it can be very simple. You should avoid unnecessary object creation. + +An important case occurs when you can define an upper bound on the number of objects you will need at one time. If these objects all take up the same amount of memory, you may be able to allocate a single block of memory, or a buffer, to hold them all. The objects you need can be allocated and released inside this buffer in a set rotation pattern, so it is sometimes called a ring buffer. This is usually faster than heap allocation. + +Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form of garbage collection, such as reference counting, to do this for them. + +Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) diff --git a/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md new file mode 100644 index 0000000..40238bd --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -0,0 +1,17 @@ +# How to Deal with Intermittent Bugs +[//]: # (Version:1.0.0) +The intermittent bug is a cousin of the 50-foot-invisible-scorpion-from-outer-space kind of bug. This nightmare occurs so rarely that it is hard to observe, yet often enough that it can't be ignored. You can't debug because you can't find it. + +Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. + +Try, try, try to reproduce the bug in a controlled way. If you can't reproduce it, set a trap for it by building a logging system, a special one if you have to, that can log what you guess you need when it really does occur. Resign yourself to that if the bug only occurs in production and not at your whim, this may be a long process. The hints that you get from the log may not provide the solution but may give you enough information to improve the logging. The improved logging system may take a long time to be put into production. Then, you have to wait for the bug to reoccur to get more information. This cycle can go on for some time. + +The stupidest intermittent bug I ever created was in a multi-threaded implementation of a functional programming language for a class project. I had very carefully ensured correct concurrent evaluation of the functional program, good utilization of all the CPUs available (eight, in this case). I simply forgot to synchronize the garbage collector. The system could run a long time, often finishing whatever task I began, before anything noticeable went wrong. I'm ashamed to admit I had begun to question the hardware before my mistake dawned on me. + +At work we recently had an intermittent bug that took us several weeks to find. We have multi-threaded application servers in Javaâ„¢ behind Apacheâ„¢ web servers. To maintain fast page turns, we do all I/O in small set of four separate threads that are different than the page-turning threads. Every once in a while these would apparently get ‘stuck’ and cease doing anything useful, so far as our logging allowed us to tell, for hours. Since we had four threads, this was not in itself a giant problem - unless all four got stuck. Then the queues emptied by these threads would quickly fill up all available memory and crash our server. It took us about a week to figure this much out, and we still didn't know what caused it, when it would happen, or even what the threads where doing when they got ‘stuck’. + +This illustrates some risk associated with third-party software. We were using a licensed piece of code that removed HTML tags from text. Although we had the source code (thank goodness!) we had not studied it carefully until by turning up the logging on our servers we finally realized that the email threads were getting stuck in this problematic licensed code. + +The program performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. + +Next [How to Learn Design Skills](11-How to Learn Design Skills.md) diff --git a/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md new file mode 100644 index 0000000..50a64f0 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -0,0 +1,9 @@ +# How to Learn Design Skills +[//]: # (Version:1.0.0) +To learn how to design software, study the action of a mentor by being physically present when they are designing. Then study well-written pieces of software. After that, you can read some books on the latest design techniques. + +Then you must do it yourself. Start with a small project. When you are finally done, consider how the design failed or succeeded and how you diverged from your original conception. Then move on to larger projects, hopefully in conjunction with other people. Design is a matter of judgement that takes years to acquire. A smart programmer can learn the basics adequately in two months and can improve from there. + +It is natural and helpful to develop your own style, but remember that design is an art, not a science. People who write books on the subject have a vested interest in making it seem scientific. Don't become dogmatic about particular design styles. + +Next [How to Conduct Experiments](12-How to Conduct Experiments.md) diff --git a/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md new file mode 100644 index 0000000..f857f86 --- /dev/null +++ b/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -0,0 +1,23 @@ +# How to Conduct Experiments +[//]: # (Version:1.0.0) +The late, great Edsger Dijkstra has eloquently explained that Computer Science is not an experimental science[ExpCS] and doesn't depend on electronic computers. As he puts it referring to the 1960s [Knife], + +> ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. + +Programming ought not to be an experimental science, but most working programmers do not have the luxury of engaging in what Dijkstra means by computing science. We must work in the realm of experimentation, just as some, but not all, physicists do. If thirty years from now programming can be performed without experimentation, it will be a great accomplishment of Computer Science. + +The kinds of experiments you will have to perform include: + +- Testing systems with small examples to verify that they conform to the documentation or to understand their response when there is no documentation, +- Testing small code changes to see if they actually fix a bug, +- Measuring the performance of a system under two different conditions due to imperfect knowledge of their performance characteristics, +- Checking the integrity of data, and +- Collecting statistics that may hint at the solution to difficult or hard-to-repeat bugs. + +I don't think in this essay I can explain the design of experiments; you will have to study and practice. However, I can offer two bits of advice. + +First, try to be very clear about your hypothesis, or the assertion that you are trying to test. It also helps to write the hypothesis down, especially if you find yourself confused or are working with others. + +You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. + +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) diff --git a/jp/1-Beginner/README.md b/jp/1-Beginner/README.md new file mode 100644 index 0000000..9baadf0 --- /dev/null +++ b/jp/1-Beginner/README.md @@ -0,0 +1,27 @@ +# 1. Beginner +[//]: # (Version:1.0.0) +- Personal Skills + - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) +- Team Skills + - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) + - [How to Deal with Difficult People](Team-Skills/11-How to Deal with Difficult People.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md new file mode 100644 index 0000000..3cb806e --- /dev/null +++ b/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -0,0 +1,15 @@ +# Why Estimation is Important +[//]: # (Version:1.0.0) +To get a working software system in active use as quickly as possible requires not only planning the development, but also planning the documentation, deployment, and marketing. In a commercial project it also requires sales and finance. Without predictability of the development time, it is impossible to plan these effectively. + +Good estimation provides predictability. Managers love it, as well they should. The fact that it is impossible, both theoretically and practically, to predict accurately how long it will take to develop software is often lost on managers. We are asked to do this impossible thing all the time, and we must face up to it honestly. However, it would be dishonest not to admit the impossibility of this task, and when necessary, explain it. There is a lot of room for miscommunication about estimates, as people have a startling tendency to think wishfully that the sentence: + +> I estimate that, if I really understand the problem, it is about 50% likely that we will be done in five weeks (if no one bothers us during that time). + +really means: + +> I promise to have it all done five weeks from now. + +This common interpretation problem requires that you explicitly discuss what the estimate means with your boss or customer as if they were a simpleton. Restate your assumptions, no matter how obvious they seem to you. + +Next [How to Estimate Programming Time](02-How to Estimate Programming Time.md) diff --git a/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md new file mode 100644 index 0000000..88b96d6 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -0,0 +1,21 @@ +# How to Estimate Programming Time +[//]: # (Version:1.0.0) +Estimation takes practice. It also takes labour. It takes so much labour it may be a good idea to estimate the time it will take to make the estimate, especially if you are asked to estimate something big. + +When asked to provide an estimate of something big, the most honest thing to do is to stall. Most engineers are enthusiastic and eager to please, and stalling certainly will displease the stalled. But an on-the-spot estimate probably won't be accurate and honest. + +While stalling, it may be possible to consider doing or prototyping the task. If political pressure permits, this is the most accurate way of producing the estimate, and it makes real progress. + +When not possible to take the time for some investigation, you should first establish the meaning of the estimate very clearly. Restate that meaning as the first and last part of your written estimate. Prepare a written estimate by de-constructing the task into progressively smaller subtasks until each small task is no more than a day; ideally at most in length. The most important thing is not to leave anything out. For instance, documentation, testing, time for planning, time for communicating with other groups, and vacation time are all very important. If you spend part of each day dealing with knuckleheads, put a line item for that in the estimate. This gives your boss visibility into what is using up your time at a minimum, and might get you more time. + +I know good engineers who pad estimates implicitly, but I recommend that you do not. One of the results of padding is trust in you may be depleted. For instance, an engineer might estimate three days for a task that she truly thinks will take one day. The engineer may plan to spend two days documenting it, or two days working on some other useful project. But it will be detectable that the task was done in only one day (if it turns out that way), and the appearance of slacking or overestimating is born. It's far better to give proper visibility into what you are actually doing. If documentation takes twice as long as coding and the estimate says so, tremendous advantage is gained by making this visible to the manager. + +Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate to, should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. + +In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate. The act of having the whole team agree on a line-by-line basis to the estimate clarifies the team understanding, as well as allowing the opportunity for tactical reassignment of resources (for instance, shifting burden away from weaker team members to stronger). + +If there are big risks that cannot be evaluated, it is your duty to state so forcefully enough that your manager does not commit to them and then become embarrassed when the risk occurs. Hopefully in such a case whatever is needed will be done to decrease the risk. + +If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. + +Next [How to Find Out Information](03-How to Find Out Information.md) diff --git a/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md b/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md new file mode 100644 index 0000000..aecc0ef --- /dev/null +++ b/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -0,0 +1,19 @@ +# How to Find Out Information +[//]: # (Version:1.0.0) +The nature of what you need to know determines how you should find it. + +If you need information *about concrete things* that are objective and easy to verify, for example the latest patch level of a software product, ask a large number of people politely by searching the internet for it or by posting on a discussion group. Don't search on the internet for anything that smacks of either opinion or subjective interpretation: the ratio of drivel to truth is too high. + +If you need *general knowledge about something subjective* the history of what people have thought about it, go to the library (the physical building in which books are stored). For example, to learn about math or mushrooms or mysticism, go to the library. + +If you need to know *how to do something that is not trivial* get two or three books on the subject and read them. You might learn how to do something trivial, like install a software package, from the Internet. You can even learn important things, like good programming technique, but you can easily spend more time searching and sorting the results and attempting to divine the authority of the results than it would take to read the pertinent part of a solid book. + +If you need *information that no one else could be expected to know* for example, ‘does this software that is brand new work on gigantic data sets?’, you must still search the internet and the library. After those options are completely exhausted, you may design an experiment to ascertain it. + +If you want an opinion or a value judgement that takes into account some unique circumstance, talk to an expert. For instance, if you want to know whether or not it is a good idea to build a modern database management system in LISP, you should talk to a LISP expert and a database expert. + +If you want to know *how likely it is* that a faster algorithm for a particular application exists that has not yet been published, talk to someone working in that field. + +If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. + +Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) diff --git a/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md new file mode 100644 index 0000000..69be910 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -0,0 +1,15 @@ +# How to Utilize People as Information Sources +[//]: # (Version:1.0.0) +Respect every person's time and balance it against your own. Asking someone a question accomplishes far more than just receiving the answer. The person learns about you, both by enjoying your presence and hearing the particular question. You learn about the person in the same way, and you may learn the answer you seek. This is usually far more important than your question. + +However, the value of this diminishes the more you do it. You are, after all, using the most precious commodity a person has: their time. The benefits of communication must be weighed against the costs. Furthermore, the particular costs and benefits derived differ from person to person. I strongly believe that an executive of 100 people should spend five minutes a month talking to each person in her organization, which would be about 5% of their time. But ten minutes might be too much, and five minutes is too much if they have one thousand employees. The amount of time you spend talking to each person in your organization depends on their role (more than their position). You should talk to your boss more than your boss's boss, but you should talk to your boss's boss a little. It may be uncomfortable, but I believe you have a duty to talk a little bit to all your superiors, each month, no matter what. + +The basic rule is that everyone benefits from talking to you a little bit, and the more they talk to you, the less benefit they derive. It is your job to provide them this benefit, and to get the benefit of communicating with them, keeping the benefit in balance with the time spent. + +It is important to respect your own time. If talking to someone, even if it will cost them time, will save you a great deal of time, then you should do it unless you think their time is more valuable than yours, to the tribe, by that factor. + +A strange example of this is the summer intern. A summer intern in a highly technical position can't be expected to accomplish too much; they can be expected to pester the hell out of everybody there. So why is this tolerated? Because the pestered are receiving something important from the intern. They get a chance to show-off a little. They get a chance to hear some new ideas, maybe; they get a chance to see things from a different perspective. They may also be trying to recruit the intern, but even if this is not the case there is much to gain. + +You should ask people for a little bit of their wisdom and judgement whenever you honestly believe they have something to say. This flatters them and you will learn something and teach them something. A good programmer does not often need the advice of a Vice President of Sales, but if you ever do, you be sure to ask for it. I once asked to listen in on a few sales calls to better understand the job of our sales staff. This took no more than 30 minutes but I think that small effort made an impression on the sales force. + +Next [How to Document Wisely](05-How to Document Wisely.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md b/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md new file mode 100644 index 0000000..abded59 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -0,0 +1,20 @@ +# How to Document Wisely +[//]: # (Version:1.0.0) +Life is too short to write crap nobody will read; if you write crap, nobody will read it. Therefore a little good documentation is best. Managers often don't understand this, because even bad documentation gives them a false sense of security that they are not dependent on their programmers. If someone absolutely insists that you write truly useless documentation, say 'yes' and quietly begin looking for a better job. + +There's nothing quite as effective as putting an accurate estimate of the amount of time it will take to produce good documentation into an estimate to slacken the demand for documentation. The truth is cold and hard: documentation, like testing, can take many times longer than developing code. + +Writing good documentation is, first of all, good writing. I suggest you find books on writing, study them, and practice. But even if you are a lousy writer or have poor command of the language in which you must document, the Golden Rule is all you really need: 'Do unto others as you would have them do unto you.' Take time to really think about who will be reading your documentation, what they need to get out of it, and how you can teach that to them. If you do that, you will be an above average documentation writer, and a good programmer. + +When it comes to actually documenting code itself, as opposed to producing documents that can actually be read by non-programmers, the best programmers I've ever known hold a universal sentiment: write self-explanatory code and only document code in the places that you cannot make it clear by writing the code itself. There are two good reasons for this. First, anyone who needs to see code-level documentation will in most cases be able to and prefer to read the code anyway. Admittedly, this seems easier to the experienced programmer than to the beginner. More importantly however, is that the code and the documentation cannot be inconsistent if there is no documentation. The source code can at worst be wrong and confusing. The documentation, if not written perfectly, can lie, and that is a thousand times worse. + +This does not make it easier on the responsible programmer. How does one write self-explanatory code? What does that even mean? It means: + +- Writing code knowing that someone will have to read it; +- Applying the golden rule; +- Choosing a solution that is straightforward, even if you could get by with another solution faster; +- Sacrificing small optimizations that obfuscate the code; +- Thinking about the reader and spending some of your precious time to make it easier on her; and +- Not ever using a function name like `foo`,`bar`, or `doIt`! + +Next [How to Work with Poor Code](06-How to Work with Poor Code.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md new file mode 100644 index 0000000..e5b2aa3 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -0,0 +1,11 @@ +# How to Work with Poor Code +[//]: # (Version:1.0.0) +It is very common to have to work with poor quality code that someone else has written. Don't think too poorly of them, however, until you have walked in their shoes. They may have been asked very consciously to get something done quickly to meet schedule pressure. Regardless, in order to work with unclear code you must understand it. To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it. To understand it, you will have to read the source code. You will probably have to experiment with it. + +This is a good time to document, even if it is only for yourself, because the act of trying to document the code will force you to consider angles you might not have considered, and the resulting document may be useful. While you're doing this, consider what it would take to rewrite some or all of the code. Would it actually save time to rewrite some of it? Could you trust it better if you rewrote it? Be careful of arrogance here. If you rewrite it, it will be easier for you to deal with, but will it really be easier for the next person who has to read it? If you rewrite it, what will the test burden be? Will the need to re-test it outweigh any benefits that might be gained? + +In any estimate that you make for work against code you didn't write, the quality of that code should affect your perception of the risk of problems and unk-unks. + +It is important to remember that abstraction and encapsulation, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. + +Next [How to Use Source Code Control](07-How to Use Source Code Control.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md new file mode 100644 index 0000000..3285753 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -0,0 +1,9 @@ +# How to Use Source Code Control +[//]: # (Version:1.0.0) +Source code control systems (also known as Version Control Systems) let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. + +I was late to appreciate the benefits of source code control systems but now I wouldn't live without one even on a one-person project. Generally they are necessary when you have team working on the same code base. However, they have another great advantage: they encourage thinking about the code as a growing, organic system. Since each change is marked as a new revision with a new name or number, one begins to think of the software as a visibly progressive series of improvements. I think this is especially useful for beginners. + +A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. + +Next [How to Unit Test](08-How to Unit Test.md) diff --git a/jp/1-Beginner/Team-Skills/08-How to Unit Test.md b/jp/1-Beginner/Team-Skills/08-How to Unit Test.md new file mode 100644 index 0000000..2e9a344 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -0,0 +1,9 @@ +# How to Unit Test +[//]: # (Version:1.0.0) +Unit testing, the testing of an individual piece of coded functionality by the team that wrote it, is a part of coding, not something different from it. Part of designing the code is designing how it will be tested. You should write down a test plan, even if it is only one sentence. Sometimes the test will be simple: 'Does the button look good?' Sometimes it will be complex: 'Did this matching algorithm return precisely the correct matches?' + +Use assertion checking and test drivers whenever possible. This not only catches bugs early, but is very useful later on and lets you eliminate mysteries that you would otherwise have to worry about. + +The Extreme Programming developers are writing extensively on unit testing effectively; I can do no better than to recommend their writings. + +Next [Take Breaks when Stumped](09-Take Breaks when Stumped.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md new file mode 100644 index 0000000..24f1405 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -0,0 +1,5 @@ +# Take Breaks when Stumped +[//]: # (Version:1.0.0) +When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. + +Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md new file mode 100644 index 0000000..7f33239 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -0,0 +1,16 @@ +# How to Recognize When to Go Home +[//]: # (Version:1.0.0) +Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is a serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. + +Beyond 60 hours a week is an extraordinary effort for me, which I can apply for short periods of time (about one week), and that is sometimes expected of me. I don't know if it is fair to expect 60 hours of work from a person; I don't even know if 40 is fair. I am sure, however, that it is stupid to work so much that you are getting little out of that extra hour you work. For me personally, that's any more than 60 hours a week. I personally think a programmer should exercise noblesse oblige and shoulder a heavy burden. However, it is not a programmer's duty to be a patsy. The sad fact is programmers *are* often asked to be patsies in order to put on a show for somebody, for example a manager trying to impress an executive. Programmers often succumb to this because they are eager to please and not very good at saying no. There are four defences against this: + +- Communicate as much as possible with everyone in the company so that no one can mislead the executives about what is going on, +- Learn to estimate and schedule defensively and explicitly and give everyone visibility into what the schedule is and where it stands, +- Learn to say no, and say no as a team when necessary, and +- Quit if you have to. + +Most programmers are good programmers, and good programmers want to get a lot done. To do that, they have to manage their time effectively. There is a certain amount of mental inertia associated with getting warmed-up to a problem and deeply involved in it. Many programmers find they work best when they have long, uninterrupted blocks of time in which to get warmed-up and concentrate. However, people must sleep and perform other duties. Each person needs to find a way to satisfy both their human rhythm and their work rhythm. Each programmer needs to do whatever it takes to procure efficient work periods, such as reserving certain days in which you will attend only the most critical meetings. + +Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. + +Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) diff --git a/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md new file mode 100644 index 0000000..8b98887 --- /dev/null +++ b/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -0,0 +1,15 @@ +# How to Deal with Difficult People +[//]: # (Version:1.0.0) +You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. + +This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often accustomed to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. + +Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen to and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. + +Don't let a bully force you to do something you don't agree with. If you are the leader, do what you think is best. Don't make a decision for any personal reasons, and be prepared to explain the reasons for your decision. If you are a team-mate with a difficult person, don't let the leader's decision have any personal impact. If it doesn't go your way, do it the other way whole-heartedly. + +Difficult people do change and improve. I've seen it with my own eyes, but it is very rare. However, everyone has transitory ups and downs. + +One of the challenges that every programmer but especially leaders face is keeping the difficult person fully engaged. They are more prone to duck work and resist passively than others. + +Next [Intermediate skills](../../2-Intermediate) diff --git a/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md new file mode 100644 index 0000000..0f1bb61 --- /dev/null +++ b/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -0,0 +1,13 @@ +# How to Tradeoff Quality Against Development Time +[//]: # (Version:1.0.0) +Software development is always a compromise between what the project does and getting the project done. But you may be asked to tradeoff quality to speed the deployment of a project in a way that offends your engineering or business sensibilities. For example, you may be asked to do something that is a poor software engineering practice and that will lead to a lot of maintenance problems. + +If this happens your first responsibility is to inform your team and to clearly explain the cost of the decrease in quality. After all, your understanding of it should be much better than your boss's understanding. Make it clear what is being lost and what is being gained, and at what cost the lost ground will be regained in the next cycle. In this, the visibility provided by a good project plan should be helpful. If the quality tradeoff affects the quality assurance effort, point that out (both to your boss and quality assurance people). If the quality tradeoff will lead to more bugs being reported after the quality assurance period, point that out. + +If she still insists, you should try to isolate the shoddiness into particular components that you can plan to rewrite or improve in the next cycle. Explain this to your team so that they can plan for it. + +NinjaProgrammer at Slashdot sent in this gem: + +> Remember that a good design will be resilient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this. + +Next [How to Manage Software Dependence](02-How to Manage Software System Dependence.md) diff --git a/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md new file mode 100644 index 0000000..86900ca --- /dev/null +++ b/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -0,0 +1,13 @@ +# How to Manage Software System Dependence +[//]: # (Version:1.0.0) +Modern software systems tend to depend on a large number of components that may not be directly under your control. This increases productivity through synergy and reuse. However, each component brings with it some problems: + +- How will you fix bugs in the component? +- Does the component restrict you to particular hardware or software systems? +- What will you do if the component fails completely? + +It is always best to encapsulate the component in some way so that it is isolated and so that it can be swapped out. If the component proves to be completely unworkable, you may be able to get a different one, but you may have to write your own. Encapsulation is not portability, but it makes porting easier, which is almost as good. + +Having the source code for a component decreases the risk by a factor of four. With source code, you can evaluate it easier, debug it easier, find workarounds easier, and make fixes easier. If you make fixes, you should give them to the owner of the component and get the fixes incorporated into an official release; otherwise you will uncomfortably have to maintain an unofficial version. + +Next [How to Decide if Software is Too Immature](03-How to Decide if Software is Too Immature.md) diff --git a/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md new file mode 100644 index 0000000..93f03ff --- /dev/null +++ b/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -0,0 +1,18 @@ +# How to Decide if Software is Too Immature +[//]: # (Version:1.0.0) +Using software other people wrote is one of the most effective ways to quickly build a solid system. It should not be discouraged, but the risks associated with it must be examined. One of the biggest risks is the period of bugginess and near inoperability that is often associated with software before it matures, through usage, into a usable product. Before you consider integrating with a software system, whether created in house or by a third party, it is very important to consider if it is really mature enough to be used. Here are ten questions you should ask yourself about it: + +1. Is it vapour? (Promises are very immature). +2. Is there an accessible body of lore about the software? +3. Are you the first user? +4. Is there a strong incentive for continuation? +5. Has it had a maintenance effort? +6. Will it survive defection of the current maintainers? +7. Is there a seasoned alternative at least half as good? +8. Is it known to your tribe or company? +9. Is it desirable to your tribe or company? +10. Can you hire people to work on it even if it is bad? + +A little consideration of these criteria demonstrates the great value of well-established free software and open-source software in reducing risk to the entrepreneur. + +Next [How to Make a Buy vs. Build Decision](04-How to Make a Buy vs Build Decision.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md new file mode 100644 index 0000000..64d69e7 --- /dev/null +++ b/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -0,0 +1,16 @@ +# How to Make a Buy vs. Build Decision +[//]: # (Version:1.0.0) +An entrepreneurial company or project that is trying to accomplish something with software has to constantly make so-called *buy vs. build* decisions. This turn of phrase is unfortunate in two ways: it seems to ignore open-source and free software which is not necessarily *bought*. Even more importantly, it should perhaps be called an *obtain and integrate vs. build here and integrate* decision because the cost of integration must be considered. This requires a great combination of business, management, and engineering savvy. + +- How well do your needs match those for which it was designed? +- What portion of what you buy will you need? +- What is the cost of evaluating the integration? +- What is the cost of integration? +- Will buying increase or decrease long term maintenance costs? +- Will building it put you in a business position you don't want to be in? + +You should think twice before building something that is big enough to serve as the basis for an entire other business. Such ideas are often proposed by bright and optimistic people that will have a lot to contribute to your team. If their idea is compelling, you may wish to change your business plan; but do not invest in a solution bigger than your own business without conscious thought. + +After considering these questions, you should perhaps prepare two draft project plans, one for building and one for buying. This will force you to consider the integration costs. You should also consider the long term maintenance costs of both solutions. To estimate the integration costs, you will have to do a thorough evaluation of the software before you buy it. If you can't evaluate it, you will assume an unreasonable risk in buying it and you should decide against buying that particular product. If there are several buy decisions under consideration, some energy will have to be spent evaluating each. + +Next [How to Grow Professionally](05-How to Grow Professionally.md) diff --git a/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md b/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md new file mode 100644 index 0000000..5ad8576 --- /dev/null +++ b/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -0,0 +1,11 @@ +# How to Grow Professionally +[//]: # (Version:1.0.0) +Assume responsibility in excess of your authority. Play the role that you desire. Express appreciation for people's contribution to the success of the larger organization, as well as things as that help you personally. + +If you want to become a team leader, instigate the formation of consensus. If you want to become a manager, take responsibility for the schedule. You can usually do this comfortably while working with a leader or a manager, since this frees them up to take greater responsibility. If that is too much to try, do it a little at a time. + +Evaluate yourself. If you want to become a better programmer, ask someone you admire how you can become like them. You can also ask your boss, who will know less but have a greater impact on your career. + +Plan ways to learn new skills, both the trivial technical kind, like learning a new software system, and the hard social kind, like writing well, by integrating them into your work. + +Next [How to Evaluate Interviewees](06-How to Evaluate Interviewees.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md new file mode 100644 index 0000000..cf24614 --- /dev/null +++ b/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -0,0 +1,15 @@ +# How to Evaluate Interviewees +[//]: # (Version:1.0.0) +Evaluating potential employees is not given the energy it deserves. A bad hire, like a bad marriage, is terrible. A significant portion of everyone's energy should be devoted to recruitment, though this is rarely done. + +There are different interviewing styles. Some are torturous, designed to put the candidate under a great deal of stress. This serves a very valuable purpose of possibly revealing character flaws and weaknesses under stress. Candidates are no more honest with interviewers than they are with themselves, and the human capacity for self-deception is astonishing. + +You should, at a minimum, give the candidate the equivalent of an oral examination on the technical skills for two hours. With practice, you will be able to quickly cover what they know and quickly retract from what they don't know to mark out the boundary. Interviewees will respect this. I have several times heard interviewees say that the quality of the examination was one of their motivations for choosing a company. Good people want to be hired for their skills, not where they worked last or what school they went to or some other inessential characteristic. + +In doing this, you should also evaluate their ability to learn, which is far more important than what they know. You should also watch for the whiff of brimstone that is given off by difficult people. You may be able to recognize it by comparing notes after the interview, but in the heat of the interview it is hard to recognize. How well people communicate and work with people is more important than being up on the latest programming language. + +A reader has had good luck using a ‘take-home’ test for interviewees. This has the advantage that it can uncover the interviewee that can present themselves well but can't really code - and there are many such people. I personally have not tried this technique, but it sounds sensible. + +Finally, interviewing is also a process of selling. You should be selling your company or project to the candidate. However, you are talking to a programmer, so don't try to colour the truth. Start off with the bad stuff, then finish strong with the good stuff. + +Next [How to Know When to Apply Fancy Computer Science](07-How to Know When to Apply Fancy Computer Science.md) diff --git a/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md new file mode 100644 index 0000000..8575639 --- /dev/null +++ b/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -0,0 +1,15 @@ +# How to Know When to Apply Fancy Computer Science +[//]: # (Version:1.0.0) +There is a body of knowledge about algorithms, data structures, mathematics, and other gee-whiz stuff that most programmers know about but rarely use. In practice, this wonderful stuff is too complicated and generally unnecessary. There is no point in improving an algorithm when most of your time is spent making inefficient database calls, for instance. An unfortunate amount of programming consists of getting systems to talk to each other and using very simple data structures to build a nice user interface. + +When is high technology the appropriate technology? When should you crack a book to get something other than a run-of-the-mill algorithm? It is sometimes useful to do this but it should be evaluated carefully. + +The three most important considerations for the potential computer science technique are: + +- Is it well encapsulated so that the risk to other systems is low and the overall increase in complexity and maintenance cost is low? +- Is the benefit startling (for example, a factor of two in a mature system or a factor of ten in a new system)? +- Will you be able to test and evaluate it effectively? + +If a well-isolated algorithm that uses a slightly fancy algorithm can decrease hardware cost or increase performance by a factor of two across an entire system, then it would be criminal not to consider it. One of the keys to arguing for such an approach is to show that the risk is really quite low, since the proposed technology has probably been well studied, the only issue is the risk of integration. Here a programmer's experience and judgement can truly synergize with the fancy technology to make integration easy. + +Next [How to Talk to Non-Engineers](08-How to Talk to Non-Engineers.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md new file mode 100644 index 0000000..a2b6211 --- /dev/null +++ b/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -0,0 +1,19 @@ +# How to Talk to Non-Engineers +[//]: # (Version:1.0.0) +Engineers and programmers in particular are generally recognized by popular culture as being different from other people. This implies that other people are different from us. This is worth bearing in mind when communicating with non-engineers; you should always understand the audience. + +Non-engineers are smart, but not as grounded in creating technical things as we are. We make things. They sell things and handle things and count things and manage things, but they are not experts on making things. They are not as good at working together on teams as engineers are (there are no doubt exceptions.) Their social skills are generally as good as or better than engineers in non-team environments, but their work does not always demand that they practice the kind of intimate, precise communication and careful subdivisions of tasks that we do. + +Non-engineers may be too eager to please and they may be intimidated by you. Just like us, they may say ‘yes’ without really meaning it to please you or because they are a little scared of you, and then not stand behind their words. + +Non-programmers can understand technical things but they do not have the thing that is so hard even for us - technical judgement. They do understand how technology works, but they cannot understand why a certain approach would take three months and another one three days. (After all, programmers are anecdotally horrible at this kind of estimation as well.) This represents a great opportunity to synergize with them. + +When talking to your team you will, without thinking, use a sort of shorthand, an abbreviated language that is effective because you will have much shared experience about technology in general and your product in particular. It takes some effort not to use this shorthand with those that don't have that shared experience, especially when members of your own team are present. This vocabulary creates a wall between you and those that do not share it, and, even worse, wastes their time. + +With your team, the basic assumptions and goals do not need to be restated often, and most conversation focuses on the details. With outsiders, it must be the other way around. They may not understand things you take for granted. Since you take them for granted and don't repeat them, you can leave a conversation with an outsider thinking that you understand each other when really there is a large misunderstanding. You should assume that you will miscommunicate and watch carefully to find this miscommunication. Try to get them to summarize or paraphrase what you are saying to make sure they understand. If you have the opportunity to meet with them often, spend a little bit of time asking if you are communicating effectively, and how you can do it better. If there is a problem in communication, seek to alter your own practices before becoming frustrated with theirs. + +I love working with non-engineers. It provides great opportunities to learn and to teach. You can often lead by example, in terms of the clarity of your communication. Engineers are trained to bring order out of chaos, to bring clarity out of confusion, and non-engineers like this about us. Because we have technical judgement and can usually understand business issues, we can often find a simple solution to a problem. + +Often non-engineers propose solutions that they think will make it easier on us out of kindness and a desire to do the right thing, when in fact a much better overall solution exists which can only be seen by synergizing the outsider's view with your technical judgement. I personally like Extreme Programming because it addresses this inefficiency; by marrying the estimation quickly to the idea, it makes it easier to find the idea that is the best combination of cost and benefit. + +Next [Advanced skills](../../3-Advanced) diff --git a/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md new file mode 100644 index 0000000..aa7a9b3 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -0,0 +1,15 @@ +# How to Stay Motivated +[//]: # (Version:1.0.0) +It is a wonderful and surprising fact that programmers are highly motivated by the desire to create artifacts that are beautiful, useful, or nifty. This desire is not unique to programmers nor universal but it is so strong and common among programmers that it separates them from others in other roles. + +This has practical and important consequences. If programmers are asked to do something that is not beautiful, useful, or nifty, they will have low morale. There's a lot of money to be made doing ugly, stupid, and boring stuff; but in the end, fun will make the most money for the company. + +Obviously, there are entire industries organized around motivational techniques some of which apply here. The things that are specific to programming that I can identify are: + +- Use the best language for the job. +- Look for opportunities to apply new techniques, languages, and technologies. +- Try to either learn or teach something, however small, in each project. + +Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and it also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. + +Next [How to be Widely Trusted](02-How to be Widely Trusted.md) diff --git a/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md new file mode 100644 index 0000000..c115d4e --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -0,0 +1,7 @@ +# How to be Widely Trusted +[//]: # (Version:1.0.0) +To be trusted you must be trustworthy. You must also be visible. If no one knows about you, no trust will be invested in you. With those close to you, such as your teammates, this should not be an issue. You establish trust by being responsive and informative to those outside your department or team. Occasionally someone will abuse this trust, and ask for unreasonable favours. Don't be afraid of this, just explain what you would have to give up doing to perform the favour. + +Don't pretend to know something that you don't. With people that are not teammates, you may have to make a clear distinction between 'not knowing right off the top of my head' and 'not being able to figure it out, ever.' + +Next [How to Tradeoff Time vs. Space](03-How to Tradeoff Time vs Space.md) diff --git a/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md new file mode 100644 index 0000000..e58a029 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -0,0 +1,15 @@ +# How to Tradeoff Time vs. Space +[//]: # (Version:1.0.0) +You can be a good programmer without going to college, but you can't be a good intermediate programmer without knowing basic computational complexity theory. You don't need to know 'big O' notation, but I personally think you should be able to understand the difference between 'constant-time','n log n' and 'n squared'. You might be able to intuit how to trade-off time against space without this knowledge, but in its absence you will not have a firm basis for communicating with your colleagues. + +In designing or understanding an algorithm, the amount of time it takes to run is sometimes a function of the size of the input. When that is true, we can say an algorithm's worst/expected/best-case running time is 'n log n' if it is proportional to the size ($n$) times the logarithm of the size. The notation and way of speaking can be also be applied to the space taken up by a data structure. + +To me, computational complexity theory is beautiful and as profound as physics - and a little bit goes a long way! + +Time (processor cycles) and space (memory) can be traded off against each other. Engineering is about compromise, and this is a fine example. It is not always systematic. In general, however, one can save space by encoding things more tightly, at the expense of more computation time when you have to decode them. You can save time by caching, that is, spending space to store a local copy of something, at the expense of having to maintain the consistency of the cache. You can sometimes save time by maintaining more information in a data structure. This usually costs a small amount of space, but may complicate the algorithm. + +Improving the space/time trade-off can often change one or the other dramatically. However, before you work on this you should ask yourself if what you are improving is really the thing that needs the most improvement. It's fun to work on an algorithm, but you can't let that blind you to the cold hard fact that improving something that is not a problem will not make any noticeable difference and will create a test burden. + +Memory on modern computers appears cheap, because unlike processor time, you can't see it being used until you hit the wall; but then failure is catastrophic. There are also other hidden costs to using memory, such as your effect on other programs that must be resident, and the time to allocate and deallocate it. Consider this carefully before you trade away space to gain speed. + +Next [How to Stress Test](04-How to Stress Test.md) diff --git a/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md new file mode 100644 index 0000000..30c4418 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -0,0 +1,17 @@ +# How to Stress Test +[//]: # (Version:1.0.0) +Stress testing is fun. At first it appears that the purpose of stress testing is to find out if the system works under a load. In reality, it is common that the system does work under a load but fails to work in some way when the load is heavy enough. I call this *hitting the wall* or *bonking*[1]. There may be some exceptions, but there is almost always a ‘wall’. The purpose of stress testing is to figure out where the wall is, and then figure out how to move the wall further out. + +A plan for stress testing should be developed early in the project, because it often helps to clarify exactly what is expected. Is two seconds for a web page request a miserable failure or a smashing success? Is 500 concurrent users enough? That, of course, depends, but one must know the answer when designing the system that answers the request. The stress test needs to model reality well enough to be useful. It isn't really possible to simulate 500 erratic and unpredictable humans using a system concurrently very easily, but one can at least create 500 simulations and try to model some part of what they might do. + +In stress testing, start out with a light load and load the system along some dimension - such as input rate or input size - until you hit the wall. If the wall is too close to satisfy your needs, figure out which resource is the bottleneck (there is usually a dominant one.) Is it memory, processor, I/O, network bandwidth, or data contention? Then figure out how you can move the wall. Note that moving the wall, that is, increasing the maximum load the system can handle, might not help or might actually hurt the performance of a lightly loaded system. Usually performance under heavy load is more important than performance under a light load. + +You may have to get visibility into several different dimensions to build up a mental model of it; no single technique is sufficient. For instance, logging often gives a good idea of the wall-clock time between two events in the system, but unless carefully constructed, doesn't give visibility into memory utilization or even data structure size. Similarly, in a modern system, a number of computers and many software systems may be cooperating. Particularly when you are hitting the wall (that is, the performance is non-linear in the size of the input) these other software systems may be a bottleneck. Visibility into these systems, even if only measuring the processor load on all participating machines, can be very helpful. + +Knowing where the wall is is essential not only to moving the wall, but also to providing predictability so that the business can be managed effectively. + +--- + +[1] "to hit" + +Next [How to Balance Brevity and Abstraction](05-How to Balance Brevity and Abstraction.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md new file mode 100644 index 0000000..e7112b0 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -0,0 +1,9 @@ +# How to Balance Brevity and Abstraction +[//]: # (Version:1.0.0) +Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). + +There is a certain dogma associated with useful techniques such as *information hiding* and *object oriented programming* that are sometimes taken too far. These techniques let one code abstractly and anticipate change. I personally think, however, that you should not produce much speculative code. For example, it is an accepted style to hide an integer variable on an object behind mutators and accessors, so that the variable itself is not exposed, only the little interface to it. This does allow the implementation of that variable to be changed without affecting the calling code, and is perhaps appropriate to a library writer who must publish a very stable API. But I don't think the benefit of this outweighs the cost of the wordiness of it when my team owns the calling code and hence can recode the caller as easily as the called. Four or five extra lines of code is a heavy price to pay for this speculative benefit. + +Portability poses a similar problem. Should code be portable to a different computer, compiler, software system or platform, or simply easily ported? I think a non-portable, short-and-easily-ported piece of code is better than a long portable one. It is relatively easy and certainly a good idea to confine non-portable code to designated areas, such as a class that makes database queries that are specific to a given DBMS. + +Next [How to Learn New Skills](06-How to Learn New Skills.md) diff --git a/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md new file mode 100644 index 0000000..d025b46 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -0,0 +1,13 @@ +# How to Learn New Skills +[//]: # (Version:1.0.0) +Learning new skills, especially non-technical ones, is the greatest fun of all. Most companies would have better morale if they understood how much this motivates programmers. + +Humans learn by doing. Book-reading and class-taking are useful. But could you have any respect for a programmer who had never written a program? To learn any skill, you have to put yourself in a forgiving position where you can exercise that skill. When learning a new programming language, try to do a small project in it before you have to do a large project. When learning to manage a software project, try to manage a small one first. + +A good mentor is no replacement for doing things yourself, but is a lot better than a book. What can you offer a potential mentor in exchange for their knowledge? At a minimum, you should offer to study hard so their time won't be wasted. + +Try to get your boss to let you have formal training, but understand that it is often not much better than the same amount of time spent simply playing with the new skill you want to learn. It is, however, easier to ask for training than playtime in our imperfect world, even though a lot of formal training is just sleeping through lectures waiting for the dinner party. + +If you lead people, understand how they learn and assist them by assigning them projects that are the right size and that exercise skills they are interested in. Don't forget that the most important skills for a programmer are not the technical ones. Give your people a chance to play and practice courage, honesty, and communication. + +Next [Learn to Type](07-Learn to Type.md) diff --git a/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md b/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md new file mode 100644 index 0000000..c678ddd --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -0,0 +1,5 @@ +# Learn to Type +[//]: # (Version:1.0.0) +Learn to touch-type. This is an intermediate skill because writing code is so hard that the speed at which you can type is irrelevant and can't put much of a dent in the time it takes to write code, no matter how good you are. However, by the time you are an intermediate programmer you will probably spend a lot of time writing natural language to your colleagues and others. This is a fun test of your commitment; it takes dedicated time that is not much fun to learn something like that. Legend has it that when Michael Tiemann was at MCC people would stand outside his door to listen to the hum generated by his keystrokes which were so rapid as to be indistinguishable. + +Next [How to Do Integration Testing](08-How to Do Integration Testing.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md new file mode 100644 index 0000000..2e111a0 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -0,0 +1,7 @@ +# How to Do Integration Testing +[//]: # (Version:1.0.0) +Integration testing is the testing of the integration of various components that have been unit tested. Integration is expensive and it comes out in the testing. You must include time for this in your estimates and your schedule. + +Ideally you should organize a project so that there is not a phase at the end where integration must explicitly take place. It is far better to gradually integrate things as they are completed over the course of the project. If it is unavoidable estimate it carefully. + +Next [Communication Languages](09-Communication Languages.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md b/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md new file mode 100644 index 0000000..8d39438 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -0,0 +1,11 @@ +# Communication Languages +[//]: # (Version:1.0.0) +There are some languages, that is, formally defined syntactic systems, that are not programming languages but *communication languages* - they are designed specifically to facilitate communication through standardization. In 2003 the most important of these are UML, XML, and SQL. You should have some familiarity with all of these so that you can communicate well and decide when to use them. + +UML is a rich formal system for making drawings that describe designs. Its beauty lies in that it is both visual and formal, capable of conveying a great deal of information if both the author and the audience know UML. You need to know about it because designs are sometimes communicated in it. There are very helpful tools for making UML drawings that look very professional. In a lot of cases UML is too formal, and I find myself using a simpler *boxes and arrows* style for design drawings. But I'm fairly sure UML is at least as good for you as studying Latin. + +XML is a standard for defining new standards. It is not a solution to data interchange problems, though you sometimes see it presented as if it was. Rather, it is a welcome automation of the most boring part of data interchange, namely, structuring the representation into a linear sequence and parsing back into a structure. It provides some nice type- and correctness-checking, though again only a fraction of what you are likely to need in practice. + +SQL is a very powerful and rich data query and manipulation language that is not quite a programming language. It has many variations, typically quite product-dependent, which are less important than the standardized core. SQL is the *lingua franca* of relational databases. You may or may not work in any field that can benefit from an understanding of relational databases, but you should have a basic understanding of them and the syntax and meaning of SQL. + +Next [Heavy Tools](10-Heavy Tools.md) diff --git a/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md new file mode 100644 index 0000000..d5fcb55 --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -0,0 +1,14 @@ +# Heavy Tools + [//]: # (Version:1.0.0) +As our technological culture progresses, software technology moves from inconceivable, to research, to new products, to standardized products, to widely available and inexpensive products. These heavy tools can pull great loads, but can be intimidating and require a large investment in understanding. The intermediate programmer has to know how to manage them and when they should be used or considered. + +To my mind right now some of the best heavy tools are: + +- Relational Databases, +- Full-text Search Engines, +- Math libraries, +- OpenGL, +- XML parsers, and +- Spreadsheets. + +Next [How to analyze data](11-How to analyze data.md) diff --git a/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md b/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md new file mode 100644 index 0000000..dccc36a --- /dev/null +++ b/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -0,0 +1,11 @@ +# How to analyze data +[//]: # (Version:1.0.0) +Data analysis is a process in the early stages of software development, when you examine a business activity and find the requirements to convert it into a software application. This is a formal definition, which may lead you to believe that data analysis is an action that you should better leave to the systems analysts, while you, the programmer, should focus on coding what somebody else has designed. If we follow strictly the software engineering paradigm, it may be correct. Experienced programmers become designers and the sharpest designers become business analysts, thus being entitled to think about all the data requirements and give you a well defined task to carry out. This is not entirely accurate, because data is the core value of every programming activity. Whatever you do in your programs, you are either moving around or modifying data. The business analyst is analysing the needs in a larger scale, and the software designer is further squeezing such scale so that, when the problem lands on your desk, it seems that all you need to do is to apply clever algorithms and start moving existing data. + +Not so. + +No matter at which stage you start looking at it, data is the main concern of a well designed application. If you look closely at how a business analyst gets the requirements out of the customer's requests, you'll realize that data plays a fundamental role. The analyst creates so called Data Flow Diagrams, where all data sources are identified and the flow of information is shaped. Having clearly defined which data should be part of the system, the designer will shape up the data sources, in terms of database relations, data exchange protocols, and file formats, so that the task is ready to be passed down to the programmer. However, the process is not over yet, because you (the programmer) even after this thorough process of data refinement, are required to analyze data to perform the task in the best possible way. The bottom line of your task is the core message of Niklaus Wirth, the father of several languages. "Algorithms + Data Structures = Programs." There is never an algorithm standing alone, doing something to itself. Every algorithm is supposed to do something to at least one piece of data. + +Therefore, since algorithms don't spin their wheels in a vacuum, you need to analyze both the data that somebody else has identified for you and the data that is necessary to write down your code. A trivial example will make the matter clearer. You are implementing a search routine for a library. According to your specifications, the user can select books by a combination of genre, author, title, publisher, printing year, and number of pages. The ultimate goal of your routine is to produce a legal SQL statement to search the back-end database. Based on these requirements, you have several choices: check each control in turn, using a "switch" statement, or several "if" ones; make an array of data controls, checking each element to see if it is set; create (or use) an abstract control object from which to inherit all your specific controls, and connect them to an event-driven engine. If your requirements include also tuning up the query performance, by making sure that the items are checked in a specific order, you may consider using a tree of components to build your SQL statement. As you can see, the choice of the algorithm depends on the data you decide to use, or to create. Such decisions can make all the difference between an efficient algorithm and a disastrous one. However, efficiency is not the only concern. You may use a dozen named variables in your code and make it as efficient as it can ever be. But such a piece of code might not be easily maintainable. Perhaps choosing an appropriate container for your variables could keep the same speed and in addition allow your colleagues to understand the code better when they look at it next year. Furthermore, choosing a well defined data structure may allow them to extend the functionality of your code without rewriting it. In the long run, your choices of data determines how long your code will survive after you are finished with it. Let me give you another example, just some more food for thought. Let's suppose that your task is to find all the words in a dictionary with more than three anagrams, where an anagram must be another word in the same dictionary. If you think of it as a computational task, you will end up with an endless effort, trying to work out all the combinations of each word and then comparing it to the other words in the list. However, if you analyze the data at hand, you'll realize that each word may be represented by a record containing the word itself and a sorted array of its letters as ID. Armed with such knowledge, finding anagrams means just sorting the list on the additional field and picking up the ones that share the same ID. The brute force algorithm may take several days to run, while the smart one is just a matter of a few seconds. Remember this example the next time you are facing an intractable problem. + +Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How to Manage Development Time.md) diff --git a/jp/2-Intermediate/README.md b/jp/2-Intermediate/README.md new file mode 100644 index 0000000..d33316e --- /dev/null +++ b/jp/2-Intermediate/README.md @@ -0,0 +1,29 @@ +# 2. Intermediate +[//]: # (Version:1.0.0) +- Personal Skills + - [How to Stay Motivated](Personal-Skills/01-How to Stay Motivated.md) + - [How to be Widely Trusted](Personal-Skills/02-How to be Widely Trusted.md) + - [How to Tradeoff Time vs. Space](Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [How to Stress Test](Personal-Skills/04-How to Stress Test.md) + - [How to Balance Brevity and Abstraction](Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [How to Learn New Skills](Personal-Skills/06-How to Learn New Skills.md) + - [Learn to Type](Personal-Skills/07-Learn to Type.md) + - [How to Do Integration Testing](Personal-Skills/08-How to Do Integration Testing.md) + - [Communication Languages](Personal-Skills/09-Communication Languages.md) + - [Heavy Tools](Personal-Skills/10-Heavy Tools.md) + - [How to analyze data](Personal-Skills/11-How to analyze data.md) +- Team Skills + - [How to Manage Development Time](Team-Skills/01-How to Manage Development Time.md) + - [How to Manage Third-Party Software Risks](Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [How to Manage Consultants](Team-Skills/03-How to Manage Consultants.md) + - [How to Communicate the Right Amount](Team-Skills/04-How to Communicate the Right Amount.md) + - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How to Disagree Honestly and Get Away with It.md) +- Judgment + - [How to Tradeoff Quality Against Development Time](Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [How to Manage Software System Dependence](Judgment/02-How to Manage Software System Dependence.md) + - [How to Decide if Software is Too Immature](Judgment/03-How to Decide if Software is Too Immature.md) + - [How to Make a Buy vs. Build Decision](Judgment/04-How to Make a Buy vs Build Decision.md) + - [How to Grow Professionally](Judgment/05-How to Grow Professionally.md) + - [How to Evaluate Interviewees](Judgment/06-How to Evaluate Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [How to Talk to Non-Engineers](Judgment/08-How to Talk to Non-Engineers.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md new file mode 100644 index 0000000..94d473e --- /dev/null +++ b/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -0,0 +1,11 @@ +# How to Manage Development Time +[//]: # (Version:1.0.0) +To manage development time, maintain a concise and up-to-date project plan. A project plan is an estimate, a schedule, a set of milestones for marking progress, and an assignment of your team or your own time to each task on the estimate. It should also include other things you have to remember to do, such as meeting with the quality assurance people, preparing documentation, or ordering equipment. If you are on a team, the project plan should be a consensual agreement, both at the start and as you go. + +The project plan exists to help make decisions, not to show how organized you are. If the project plan is either too long or not up-to-date, it will be useless for making decisions. In reality, these decisions are about individual persons. The plan and your judgement let you decide if you should shift tasks from one person to another. The milestones mark your progress. If you use a fancy project planning tool, do not be seduced into creating a Big Design Up Front (BDUF) for the project, but use it to maintain concision and up-to-dateness. + +If you miss a milestone, you should take immediate action such as informing your boss that the scheduled completion of that project has slipped by that amount. The estimate and schedule could never have been perfect to begin with; this creates the illusion that you might be able to make up the days you missed in the latter part of the project. You might. But it is just as likely that you have underestimated that part as that you have overestimated it. Therefore the scheduled completion of the project has already slipped, whether you like it or not. + +Make sure your plan includes time for: internal team meetings, demos, documentation, scheduled periodic activities, integration testing, dealing with outsiders, sickness, vacations, maintenance of existing products, and maintenance of the development environment. The project plan can serve as a way to give outsiders or your boss a view into what you or your team is doing. For this reason it should be short and up-to-date. + +Next [How to Manage Third-Party Software Risks](02-How to Manage Third-Party Software Risks.md) diff --git a/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md new file mode 100644 index 0000000..336f3e8 --- /dev/null +++ b/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -0,0 +1,11 @@ +# How to Manage Third-Party Software Risks +[//]: # (Version:1.0.0) +A project often depends on software produced by organizations that it does not control. There are great risks associated with third party software that must be recognized by everyone involved. + +Never, ever, rest any hopes on *vapour*. Vapour is any alleged software that has been promised but is not yet available. This is the surest way to go out of business. It is unwise to be merely sceptical of a software company's promise to release a certain product with a certain feature at a certain date; it is far wiser to ignore it completely and forget you ever heard it. Never let it be written down in any documents used by your company. + +If third-party software is not vapour, it is still risky, but at least it is a risk that can be tackled. If you are considering using third-party software, you should devote energy early on to evaluating it. People might not like to hear that it will take two weeks or two months to evaluate each of three products for suitability, but it has to be done as early as possible. The cost of integrating cannot be accurately estimated without a proper evaluation. + +Understanding the suitability of existing third party software for a particular purpose is very tribal knowledge. It is very subjective and generally resides in experts. You can save a lot of time if you can find those experts. Often times a project will depend on a third-party software system so completely that if the integration fails the project will fail. Express risks like that clearly in writing in the schedule. Try to have a contingency plan, such as another system that can be used or the ability to write the functionality yourself if the risk can't be removed early. Never let a schedule depend on vapour. + +Next [How to Manage Consultants](03-How to Manage Consultants.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md new file mode 100644 index 0000000..6b632b9 --- /dev/null +++ b/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -0,0 +1,9 @@ +# How to Manage Consultants +[//]: # (Version:1.0.0) +Use consultants, but don't rely on them. They are wonderful people and deserve a great deal of respect. Since they get to see a lot of different projects, they often know more about specific technologies and even programming techniques than you will. The best way to use them is as educators in-house that can teach by example. + +However, they usually cannot become part of the team in the same sense that regular employees are, if only because you may not have enough time to learn their strengths and weaknesses. Their financial commitment is much lower. They can move more easily. They may have less to gain if the company does well. Some will be good, some will be average, and some will be bad, but hopefully your selection of consultants will not be as careful as your selection of employees, so you will get more bad ones. + +If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the a project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. + +Next [How to Communicate the Right Amount](04-How to Communicate the Right Amount.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md new file mode 100644 index 0000000..2e16157 --- /dev/null +++ b/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -0,0 +1,7 @@ +# How to Communicate the Right Amount +[//]: # (Version:1.0.0) +Carefully consider the cost of a meeting; it costs *its duration multiplied by the number of participants*. Meetings are sometimes necessary, but smaller is usually better. The quality of communication in small meetings is better, and less time overall is wasted. If any one person is bored at a meeting take this as a sign that the meeting should be smaller. + +Everything possible should be done to encourage informal communication. More useful work is done during lunches with colleagues than during any other time. It is a shame that more companies do not recognize nor support this fact. + +Next [How to Disagree Honestly and Get Away with It](05-How to Disagree Honestly and Get Away with It.md) diff --git a/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md new file mode 100644 index 0000000..7ced830 --- /dev/null +++ b/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -0,0 +1,11 @@ +# How to Disagree Honestly and Get Away with It +[//]: # (Version:1.0.0) +Disagreement is a great opportunity to make a good decision, but it should be handled delicately. Hopefully you feel that you have expressed your thoughts adequately and been heard before the decision is made. In that case there is nothing more to say, and you should decide whether you will stand behind the decision even though you disagree with it. If you can support this decision even though you disagree, say so. This shows how valuable you are because you are independent and are not a yes-man, but respectful of the decision and a team player. + +Sometimes a decision that you disagree with will be made when the decision makers did not have the full benefit of your opinion. You should then evaluate whether to raise the issue on the basis of the benefit to the company or tribe. If it is a small mistake in your opinion, it may not be worth reconsidering. If it is a large mistake in your opinion, then of course you must present an argument. + +Usually, this is not a problem. In some stressful circumstances and with some personality types this can lead to things being taken personally. For instance, some very good programmers lack the confidence needed to challenge a decision even when they have good reason to believe it is wrong. In the worst of circumstances the decision maker is insecure and takes it as a personal challenge to their authority. It is best to remember that in such circumstances people react with the reptilian part of their brains. You should present your argument in private, and try to show how new knowledge changes the basis on which the decision was made. + +Whether the decision is reversed or not, you must remember that you will never be able to say ‘I told you so!’ since the alternate decision was fully explored. + +Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How to Tradeoff Quality Against Development Time.md) diff --git a/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md new file mode 100644 index 0000000..f54a5f0 --- /dev/null +++ b/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -0,0 +1,11 @@ +# How to Fight Schedule Pressure +[//]: # (Version:1.0.0) +Time-to-market pressure is the pressure to deliver a good product quickly. It is good because it reflects a financial reality, and is healthy up to a point. Schedule pressure is the pressure to deliver something faster than it can be delivered and it is wasteful, unhealthy, and all too common. + +Schedule pressure exists for several reasons. The people who task programmers do not fully appreciate what a strong work ethic we have and how much fun it is to be a programmer. Perhaps because they project their own behaviour onto us, they believe that asking for it sooner will make us work harder to get it there sooner. This is probably actually true, but the effect is very small, and the damage is very great. Additionally, they have no visibility into what it really takes to produce software. Not being able to see it, and not be able to create it themselves, the only thing they can do is see time-to-market pressure and fuss at programmers about it. + +The key to fighting schedule pressure is simply to turn it into time-to-market pressure. The way to do this to give visibility into the relationship between the available labour and the product. Producing an honest, detailed, and most of all, understandable estimate of all the labour involved is the best way to do this. It has the added advantage of allowing good management decisions to be made about possible functionality trade-offs. + +The key insight that the estimate must make plain is that labour is an almost incompressible fluid. You can't pack more into a span of time anymore than you can pack more water into a container over and above that container's volume. In a sense, a programmer should never say ‘no’, but rather to say ‘What will you give up to get that thing you want?’ The effect of producing clear estimates will be to increase the respect for programmers. This is how other professionals behave. Programmers' hard work will be visible. Setting an unrealistic schedule will also be painfully obvious to everyone. Programmers cannot be hoodwinked. It is disrespectful and demoralizing to ask them to do something unrealistic. Extreme Programming amplifies this and builds a process around it; I hope that every reader will be lucky enough to use it. + +Next [How to Understand the User](02-How to Understand the User.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md new file mode 100644 index 0000000..2d637ee --- /dev/null +++ b/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -0,0 +1,17 @@ +# How to Understand the User +[//]: # (Version:1.0.0) +It is your duty to understand the user, and to help your boss understand the user. Because the user is not as intimately involved in the creation of your product as you are, they behave a little differently: + +- The user generally makes short pronouncements. +- The user has their own job; they will mainly think of small improvements in your product, not big improvements. +- The user can't have a vision that represents the complete body of your product users. + +It is your duty to give them what they really want, not what they say they want. It is however, better to propose it to them and get them to agree that your proposal is what they really want before you begin, but they may not have the vision to do this. Your confidence in your own ideas about this should vary. You must guard against both arrogance and false modesty in terms of knowing what the customer really wants. Programmers are trained to design and create. Market researchers are trained to figure out what people want. These two kinds of people, or two modes of thought in the same person, working harmoniously together give the best chance of formulating the correct vision. + +The more time you spend with users the better you will be able to understand what will really be successful. You should try to test your ideas against them as much as you can. You should eat and drink with them if you can. + +Guy Kawasaki [Rules] has emphasized the importance of *watching* what your users do in addition to listening to them. + +I believe contractors and consultants often have tremendous problems getting their clients to clarify in their own minds what they really want. If you intend to be a consultant, I suggest you choose your clients based on their clear-headedness as well as their pocketbooks. + +Next [How to Get a Promotion](03-How to Get a Promotion.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md new file mode 100644 index 0000000..72fa4eb --- /dev/null +++ b/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -0,0 +1,13 @@ +# How to Get a Promotion +[//]: # (Version:1.0.0) +To be promoted to a role, act out that role first. + +To get promoted to a title, find out what is expected of that title and do that. + +To get a pay raise, negotiate armed with information. + +If you feel like you are past due for a promotion, talk to your boss about it. Ask them explicitly what you need to do to get promoted, and try to do it. This sounds trite, but often times your perception of what you need to do will differ considerably from your boss's. Also this will pin your boss down in some ways. + +Most programmers probably have an exaggerated sense of their relative abilities in some ways---after all, we can't all be in the top 10%! However, I have seen some people who were seriously unappreciated. One cannot expect everyone's evaluation to perfectly match reality at all times, but I think people are generally moderately fair, with one caveat: you cannot be appreciated without visibility into your work. Sometimes, due to happenstance or personal habits, someone will not be noticed much. Working from home a lot or being geographically separated from your team and boss makes this especially difficult. + +Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How to Develop Talent.md) diff --git a/jp/3-Advanced/README.md b/jp/3-Advanced/README.md new file mode 100644 index 0000000..fb65816 --- /dev/null +++ b/jp/3-Advanced/README.md @@ -0,0 +1,22 @@ +# 3. Advanced +[//]: # (Version:1.0.0) +- Technological Judgment + - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [How to Utilize Embedded Languages](Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [Choosing Languages](Technical-Judgment/03-Choosing Languages.md) +- Compromising Wisely + - [How to Fight Schedule Pressure](Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [How to Understand the User](Compromising-Wisely/02-How to Understand the User.md) + - [How to Get a Promotion](Compromising-Wisely/03-How to Get a Promotion.md) +- Serving Your Team + - [How to Develop Talent](Serving-Your-Team/01-How to Develop Talent.md) + - [How to Choose What to Work On](Serving-Your-Team/02-How to Choose What to Work On.md) + - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [How to Divide Problems Up](Serving-Your-Team/04-How to Divide Problems Up.md) + - [How to Handle Boring Tasks](Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [How to Gather Support for a Project](Serving-Your-Team/06-How to Gather Support for a Project.md) + - [How to Grow a System](Serving-Your-Team/07-How to Grow a System.md) + - [How to Communicate Well](Serving-Your-Team/08-How to Communicate Well.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [How to Deal with Managerial Myths](Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md new file mode 100644 index 0000000..e853798 --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -0,0 +1,23 @@ +# How to Develop Talent + +Nietschze exaggerated when he said [Stronger]: + +> What does not destroy me, makes me stronger. + +Your greatest responsibility is to your team. You should know each of them well. You should stretch your team, but not overburden them. You should usually talk to them about the way they are being stretched. If they buy in to it, they will be well motivated. On each project, or every other project, try to stretch them in both a way that they suggest and a way that you think will be good for them. Stretch them not by giving them more work, but by giving them a new skill or better yet a new role to play on the team. + +You should allow people (including yourself) to fail occasionally and should plan for some failure in your schedule. If there is never any failure, there can be no sense of adventure. If there are not occasional failures, you are not trying hard enough. When someone fails, you should be as gentle as you can with them while not treating them as though they had succeeded. + +Try to get each team member to buy in and be well motivated. Ask each of them explicitly what they need to be well-motivated if they are not. You may have to leave them dissatisfied, but you should know what everybody desires. + +You can't give up on someone who is intentionally not carrying their share of the load because of low morale or dissatisfaction and just let them be slack. You must try to get them well-motivated and productive. As long as you have the patience, keep this up. When your patience is exhausted, fire them. You cannot allow someone who is intentionally working below their level to remain on the team, since it is not fair to the team. + +Make it clear to the strong members of your team that you think they are strong by saying so in public. Praise should be public and criticism private. + +The strong members of the team will naturally have more difficult tasks than the weak members of the team. This is perfectly natural and nobody will be bothered by it as long as everyone works hard. + +It is an odd fact that is not reflected in salaries that a good programmer is more productive than 10 bad programmers. This creates a strange situation. It will often be true that you could move faster if your weak programmers would just get out of the way. If you did this you would in fact make more progress in the short term. However, your tribe would lose some important benefits, namely the training of the weaker members, the spreading of tribal knowledge, and the ability to recover from the loss of the strong members. The strong must be gentle in this regard and consider the issue from all angles. + +You can often give the stronger team members challenging, but carefully delineated, tasks. + +Next [How to Choose What to Work On](02-How to Choose What to Work On.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md new file mode 100644 index 0000000..c13705c --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -0,0 +1,5 @@ +# How to Choose What to Work On + +You balance your personal needs against the needs of the team in choosing what aspect of a project to work on. You should do what you are best at, but try to find a way to stretch yourself not by taking on more work but by exercising a new skill. Leadership and communication skills are more important than technical skills. If you are very strong, take on the hardest or riskiest task, and do it as early as possible in the project to decrease risk. + +Next [How to Get the Most From Your Team-mates](03-How to Get the Most From Your Teammates.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md new file mode 100644 index 0000000..1b046db --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -0,0 +1,15 @@ +# How to Get the Most From Your Team-mates + +To get the most from your team-mates, develop a good team spirit and try to keep every individual both personally challenged and personally engaged. + +To develop team spirit, corny stuff like logoized clothing and parties are good, but not as good as personal respect. If everyone respects everyone else, nobody will want to let anybody down. Team spirit is created when people make sacrifices for the team and think in terms of the good of the team before their own personal good. As a leader, you can't ask for more than you give yourself in this respect. + +One of the keys to team leadership is to facilitate consensus so that everyone has buy in. This occasionally means allowing your team-mates to be wrong. That is, if it does not harm the project too much, you must let some of your team do things their own way, based on consensus, even if you believe with great confidence it is the wrong thing to do. When this happens, don't agree, simply disagree openly and accept the consensus. Don't sound hurt, or like you're being forced into it, simply state that you disagree but think the consensus of the team is more important. This will often cause them to backtrack. Don't insist that they go through with their initial plan if they do backtrack. + +If there is an individual who will not consent after you have discussed the issues from all appropriate sides, simply assert that you have to make a decision and that is what your decision is. If there is a way to judge if your decision will be wrong or if it is later shown to be wrong, switch as quickly as you can and recognize the persons who were right. + +Ask your team, both as a group and individually, what they think would create team spirit and make for an effective team. + +Praise frequently rather than lavishly. Especially praise those who disagree with you when they are praiseworthy. Praise in public and criticize in private; with one exception: sometimes growth or the correction of a fault can't be praised without drawing embarrassing attention to the original fault, so that growth should be praised in private. + +Next [How to Divide Problems Up](04-How to Divide Problems Up.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md new file mode 100644 index 0000000..4ee4d14 --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -0,0 +1,9 @@ +# How to Divide Problems Up + +It's fun to take a software project and divide it up into tasks that will be performed by individuals. This should be done early. Sometimes managers like to think that an estimate can be made without consideration of the individuals that will perform the work. This is impossible since the productivity of individuals varies so widely. Who has particular knowledge about a component also constantly changes and can have an order of magnitude effect on performance. + +Just as a composer considers the timbre of the instrument that will play a part or the coach of an athletic team considers the strengths of each player, the experienced team leader will not usually be able to separate the division of the project into tasks from the team members to which they will be assigned. This is part of the reason that a high-performing team should not be broken up. + +There is a certain danger in this given that people will become bored as they build upon their strengths and never improve their weaknesses or learn new skills. However, specialization is a very useful productivity tool when not overused. + +Next [How to Handle Boring Tasks](05-How to Handle Boring Tasks.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md new file mode 100644 index 0000000..dfdb8b9 --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -0,0 +1,7 @@ +# How to Handle Boring Tasks + +Sometimes it is not possible to avoid boring tasks that are critical to the success of the company or the project. These tasks can really hurt the morale of those that have to do them. The best technique for dealing with this is to invoke or promote Larry Wall's programmer's virtue of Laziness. Try to find some way to get the computer to do the task for you or to help your team-mates do this. Working for a week on a program to do a task that will take a week to do by hand has the great advantage of being more educational and sometimes more repeatable. + +If all else fails, apologize to those who have to do the boring task, but under no circumstances allow them to do it alone. At a minimum assign a team of two to do the work and promote healthy teamwork to get the task done. + +Next [How to Gather Support for a Project](06-How to Gather Support for a Project.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md new file mode 100644 index 0000000..3ba9eaf --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -0,0 +1,5 @@ +# How to Gather Support for a Project + +To gather support for a project, create and communicate a vision that demonstrates real value to the organization as a whole. Attempt to let others share in your vision creation. This gives them a reason to support you and gives you the benefit of their ideas. Individually recruit key supporters for your project. Wherever possible, show, don't tell. If possible, construct a prototype or a mock-up to demonstrate your ideas. A prototype is always powerful but in software it is far superior to any written description. + +Next [How to Grow a System](07-How to Grow a System.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md new file mode 100644 index 0000000..f41cd4b --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -0,0 +1,23 @@ +# How to Grow a System + +The seed of a tree contains the idea of the adult but does not fully realize the form and potency of the adult. The embryo grows. It becomes larger. It looks more like the adult and has more of the uses. Eventually it bears fruit. Later, it dies and its body feeds other organisms. + +We have the luxury of treating software like that. A bridge is not like that; there is never a baby bridge, but merely an unfinished bridge. Bridges are a lot simpler than software. + +It is good to think of software as growing, because it allows us to make useful progress before we have a perfect mental image. We can get feedback from users and use that to correct the growth. Pruning off weak limbs is healthful. + +The programmer must design a finished system that can be delivered and used. But the advanced programmer must do more. You must design a growth path that ends in the finished system. It is your job to take a germ of an idea and build a path that takes it as smoothly as possible into a useful artefact. + +To do this, you must visualize the end result and communicate it in a way that the engineering team can get excited about. But you must also communicate to them a path that goes from wherever they are now to where they want to be with no large leaps. The tree must stay alive the whole time; it cannot be dead at one point and resurrected later. + +This approach is captured in spiral development. Milestones that are never too far apart are used to mark progress along the path. In the ultra-competitive environment of business, it is best if the milestones can be released and make money as early as possible, even if they are far away from a well-designed endpoint. One of the programmer's jobs is to balance the immediate pay-off against future pay-off by wisely choosing a growth path expressed in milestones. + +The advanced programmer has the triple responsibility of growing software, teams, and persons. + +A reader, Rob Hafernik, sent in this comment on this section that I can do no better than to quote in full: + +> I think you under-emphasize the importance here. It's not just systems, but algorithms, user interfaces, data models, and so on. It's absolutely *vital* as you work on a large system to have measurable progress toward intermediate goals. Nothing is as bad as the special horror of getting down to the end and discovering that the whole thing just isn't going to work (look at the recent debacle of the Voter News System). I would even go further and state it as a law of nature: no large, complex system can be implemented from scratch, it can only be evolved from a simple system to a complex system in a series of intentional steps. + +To which one can only reply *Fiat lux*! + +Next [How to Communicate Well](08-How to Communicate Well.md) diff --git a/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md new file mode 100644 index 0000000..d189a0d --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -0,0 +1,11 @@ +# How to Communicate Well + +To communicate well, you have to recognize how hard it is. It is a skill unto itself. It is made harder by the fact that the persons with whom you have to communicate are flawed. They do not work hard at understanding you. They speak poorly and write poorly. They are often overworked or bored, and, at a minimum, somewhat focused on their own work rather than the larger issues you may be addressing. One of the advantages of taking classes and practising writing, public speaking, and listening is that if you become good at it you can more readily see where problems lie and how to correct them. + +The programmer is a social animal whose survival depends on communication with her team. The advanced programmer is a social animal whose satisfaction depends on communication with people outside her team. + +The programmer brings order out of chaos. One interesting way to do this is to initiate a proposal of some kind outside the team. This can be done in a *strawman* or *white-paper* format or just verbally. This leadership has the tremendous advantage of setting the terms of the debate. It also exposes you to criticism, and worse, rejection and neglect. The advanced programmer must be prepared to accept this, because she has a unique power and therefore a unique responsibility. Entrepreneurs who are not programmers need programmers to provide leadership in some ways. Programmers are the part of the bridge between ideas and reality that rests on reality. + +I haven't mastered communicating well, but what I'm currently trying is what I think of as a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. + +Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) diff --git a/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md new file mode 100644 index 0000000..dc6c539 --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -0,0 +1,9 @@ +# How to Tell People Things They Don't Want to Hear + +You will often have to tell people things that will make them uncomfortable. Remember that you are doing this for a reason. Even if nothing can be done about the problem, you are telling them as early as possible so they will be well-informed. + +The best way to tell someone about a problem is to offer a solution at the same time. The second best way is to appeal to them for help with the problem. If there is a danger that you won't be believed, you should gather some support for your assertion. + +One of the most unpleasant and common things you will have to say is, ‘The schedule will have to slip.’ The conscientious programmer hates to say this, but must say it as early as possible. There is nothing worse than postponing action when a milestone slips, even if the only action is to inform everyone. In doing this, it is better to do it as a team, at least in spirit, if not physically. You will want your team's input on both where you stand and what can be done about it, and the team will have to face the consequences with you. + +Next [How to Deal with Managerial Myths](10-How to Deal with Managerial Myths.md) diff --git a/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md new file mode 100644 index 0000000..6acb49d --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -0,0 +1,13 @@ +# How to Deal with Managerial Myths + +The word *myth* sometimes means fiction. But it has a deeper connotation. It also means a story of religious significance that explains the universe and mankind's relationship to it. Managers tend to forget what they learned as programmers and believe in certain myths. It would be as rude and unsuccessful to try to convince them these myths are false as to try to disillusion a devoutly religious person of their beliefs. For that reason, you should recognize these beliefs as myths: + +- More documentation is always better. (They want it, but they don't want you to spend any time on it.) +- Programmers can be equated. (Programmers vary by an order of magnitude.) +- Resources can be added to a late project to speed it. (The cost of communication with the new persons is almost always more taxing than helpful.) +- It is possible to estimate software development reliably. (It is not even theoretically possible.) +- Programmers' productivity can be measured in terms of some simple metric, like lines of code. (If succinctness is power, lines of code are bad, not good.) + +If you have an opportunity, you can try to explain these things, but don't feel bad if you have no success and don't damage your reputation by confronting these myths belligerently. Each of these myths reinforces the manager's idea that they have some actual control over what is going on. The truth is that managers facilitate if they are good, and impede if they are bad. + +Next [How to Deal with Organizational Chaos](11-How to Deal with Organizational Chaos.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md new file mode 100644 index 0000000..247a626 --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -0,0 +1,11 @@ +# How to Deal with Organizational Chaos + +There are often brief periods of great organizational chaos, such as lay-offs, buyouts, ipos, firings, new hirings, and so on. These are unsettling to everyone, but perhaps a little less unsettling to the programmer whose personal self-esteem is founded in capacity rather than in position. Organizational chaos is a great opportunity for programmers to exercise their magic power. I've saved this for last because it is a deep tribal secret. If you are not a programmer, please stop reading now. + +> Engineers have the power to create and sustain. + +Non-engineers can order people around but, in a typical software company, can create and sustain nothing without engineers, just as engineers typically cannot sell a product or manage a business effectively. This power is proof against almost all of the problems associated with temporary organizational mayhem. When you have it you should ignore the chaos completely and carry on as if nothing is happening. You may, of course, get fired, but if that happens you can probably get a new job because of the magic power. More commonly, some stressed-out person who does not have the magic power will come into your cube and tell you to do something stupid. If you are really sure that it is stupid, it is best to smile and nod until they go away and then carry on doing what you know is best for the company. + +If you are a leader, tell your people to do the same thing and tell them to ignore what anybody else tells them. This course of action is the best for you personally, and is the best for your company or project. + +Next [Glossary](../../GLOSSARY.md) diff --git a/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md new file mode 100644 index 0000000..0c8ec8e --- /dev/null +++ b/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -0,0 +1,9 @@ +# How to Tell the Hard From the Impossible +[//]: # (Version:1.0.1) +It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. + +The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. + +It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is no crisp definition of success, you will not succeed. + +Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) diff --git a/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md new file mode 100644 index 0000000..dc1d8ac --- /dev/null +++ b/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -0,0 +1,11 @@ +# How to Utilize Embedded Languages + +Embedding a programming language into a system has an almost erotic fascination to a programmer. It is one of the most creative acts that can be performed. It makes the system tremendously powerful. It allows you to exercise her most creative and Promethean skills. It makes the system into your friend. + +The best text editors in the world all have embedded languages. This can be used to the extent that the intended audience can master the language. Of course, use of the language can be made optional, as it is in text editors, so that initiates can use it and no one else has to. + +I and many other programmers have fallen into the trap of creating special purpose embedded languages. I fell into it twice. There already exist many languages designed specifically to be embedded languages. You should think twice before creating a new one. + +The real question to ask oneself before embedding a language is: Does this work with or against the culture of my audience? If you intended audience is exclusively non-programmers, how will it help? If your intended audience is exclusively programmers, would they prefer an applications programmers interface (API)? And what language will it be? Programmers don't want to learn a new language that is narrowly used; but if it meshes with their culture they will not have to spend much time learning it. It is a joy to create a new language. But we should not let that blind us to the needs of the user. Unless you have some truly original needs and ideas, why not use an existing language so that you can leverage the familiarity users already have with it? + +Next [Choosing Languages](03-Choosing Languages.md) \ No newline at end of file diff --git a/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md new file mode 100644 index 0000000..50dee07 --- /dev/null +++ b/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -0,0 +1,15 @@ +# Choosing Languages + +The solitary programmer that loves his work (a hacker) can choose the best language for the task. Most working programmers have very little control of the language they will use. Generally, this issue is dictated by pointy-haired bosses who are making a political decision, rather than a technological decision, and lack the courage to promote an unconventional tool even when they know, often with first-hand knowledge, that the less accepted tool is best. In other cases the very real benefit of unity among the team, and to some extent with a larger community, precludes choice on the part of the individual. Often managers are driven by the need to be able to hire programmers with experience in a given language. No doubt they are serving what they perceive to be the best interests of the project or company, and must be respected for that. However, I personally believe this is the most wasteful and erroneous common practice you are likely to encounter. + +But of course, things are never one-dimensional. Even if a core language is mandated and beyond your control, it is often the case that tools and other programs can and should be written in a different language. If a language is to be embedded (and you should always consider it!) the choice of language will depend a lot on the culture of the users. One should take advantage of this to serve your company or project by using the best language for the job, and in so doing make work more interesting. + +Programming languages should really be called notations in that learning one is not at all as difficult as learning a natural language. To beginners and to some outsiders 'learning a new language' seems a daunting task; but after you have three under your belt it's really just a question of becoming familiar with the available libraries. One tends to think of a large system that has components in three or four languages as a messy hodgepodge; but I argue that such a system is in many cases stronger than a one-language system in several ways: + +- There is necessarily loose coupling between the components that are written in different notations (though maybe not clean interfaces), +- You can evolve to a new language/platform easily by rewriting each component individually, +- One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. + +Some of these effects may only be psychological; but psychology matters. In the end, the costs of language tyranny outweigh any advantage that it provides. + +Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) diff --git a/jp/5-Bibliography.md b/jp/5-Bibliography.md new file mode 100644 index 0000000..e96590e --- /dev/null +++ b/jp/5-Bibliography.md @@ -0,0 +1,31 @@ +# Appendix A - Bibliography/Websiteography +[//]: # (Version:1.0.0) +## Books + +[Rules00] Guy Kawasaki, Michelle Moreno, and Gary Kawasaki. 2000. HarperBusiness. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services. + +[RDev96] Steve McConnell. 1996. Microsoft Press. Redmond, Wash. Rapid Development: Taming Wild Software Schedules. + +[CodeC93] Steve McConnell. 1993. Microsoft Press. Redmond, Wash. Code Complete. + +[XP99] Kent Beck. 1999. 0201616416. Addison-Wesley. Extreme Programming Explained: Embrace Change. + +[PlanXP00] Kent Beck and Martin Fowler. 2000. 0201710919. Addison-Wesley. Planning Extreme Programming. + +[Prag99] Andrew Hunt, David Thomas, and Ward Cunningham. 1999. 020161622X. Addison-Wesley. The Pragmatic Programmer: From Journeyman to Master. + +[Stronger] Friedrich Nietzsche. 1889. Twilight of the Idols, "Maxims and Arrows", section 8.. + +## Web Sites + +[PGSite] Paul Graham. 2002. Articles on his website: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). All of them, but especially "Beating the Averages". + +[Hacker] Eric S. Raymond. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). + +[HackDict] Eric S. Raymond. 2003. The New Hacker Dictionary. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). + +[ExpCS] Edsger W. Dijkstra. 1986. How Experimental is Computing Science?. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). + +[Knife] Edsger W. Dijkstra. 1984. On a Cultural Gap. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). + +Next [History](6-History.md) \ No newline at end of file diff --git a/jp/6-History.md b/jp/6-History.md new file mode 100644 index 0000000..4a46e40 --- /dev/null +++ b/jp/6-History.md @@ -0,0 +1,47 @@ +# Appendix B - History +[//]: # (Version:1.0.0) +## Move to Github + +This essay has been created as a repository on Github so that it can be easily shared, updated and improved. It was copied from [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie). It was moved to Github in January 2016. + +## Request for Feedback or Extension + +Please send me any comments you may have on this essay. I consider all suggestions, many of which have already improved this essay. + +I have placed this essay under the GNU Free Documentation License. This license is not specifically designed for essays. Essays are usually intended to be coherent and convincing arguments that are written from a single point of view in a single voice. I hope this essay is a short and pleasant read. + +I also hope that it is instructive. Although not a textbook, it is broken into many small sections to which new sections can be freely added. If so inclined, you are encouraged to expand upon this essay as you see fit, subject to the provisions of the License. + +It may be arrogance to imagine that this document is worthy of extension; but hope springs eternal. I would be joyous if it were extended in the following ways: + +The addition of a comprehensive reading list to each section, + +The addition of more and better sections, + +Translation into other languages, even if only on a subsection-by-subsection basis, and/or + +Criticism or commentary in-lined into the text. + +The ability to build into different formats, such as palm formats and better HTML. + +If you inform me of your work, I will consider it and may include it in subsequent versions that I produce, subject to the provisions of the License. You may of course produce your own versions of this document without my knowledge, as explained in the License. + +Thank you. + +Robert L. Read + +## Original Version + +The original version of this document was begun by Robert L. Read in the year 2000 and first published electronically at Samizdat Press(http://Samizdat.mines.edu) in 2002. It is dedicated to the programmers of Hire.com. + +After this article was mentioned on Slashdot in 2003, about 75 people sent me email with suggestions and errata. I appreciate them all. There was a lot of duplication, but the following people either made major suggestions or were the first to find a bug that I fixed: Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, and Tom Corcoran. + +Finally I would like to thank Christina Vallery, whose editing and proofreading greatly improved the second draft, and Wayne Allen, who encouraged me to initiate this. + +## Original Author's Bio + +Robert L. Read lives in Austin, Texas, with his wife and two children. He is currently a Principal Engineer at Hire.com, where he has worked for four years. Prior to that he founded 4R Technology, which made a scanner-based image analysis quality control tool for the paper industry. + +Rob received a PhD from the University of Texas at Austin in 1995 in Computer Science related to database theory. In 1987 he received a BA in Computer Science from Rice University. He has been a paid programmer since the age of 16. + +Next [License](LICENSE.md) diff --git a/jp/7-Contributions.md b/jp/7-Contributions.md new file mode 100644 index 0000000..30dc8af --- /dev/null +++ b/jp/7-Contributions.md @@ -0,0 +1,31 @@ +# Contributions +[//]: # (Version:1.0.0) +This repository aims to be a community driven project, and your involvement will ultimately help improve the quality of this guide. + +## What can I do to contribute? +There are a number of ways to contribute to "How to be a Programmer". + +- Ideas for new sections +- Improvements to existing sections +- Identifying typos or other issues in sections +- Contributing additional links to resources for sections +- General suggestions for improving the project +- Provide translations of the guide + +## Translations + +Currently this guide has been translated from English into the following languages: + +- Chinese by [ahangchen](https://github.com/ahangchen) + +**If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** + +## Contributors + +Github holds a list of all [contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) to this project. + +## Editorship and Move to GitHub + +[Braydie Grove](https://www.github.com/braydie) has agreed to serve as editor-in-chief. + +Braydie transposed the original essay into MarkDown and created the repository. diff --git a/jp/GLOSSARY.md b/jp/GLOSSARY.md new file mode 100644 index 0000000..283b316 --- /dev/null +++ b/jp/GLOSSARY.md @@ -0,0 +1,135 @@ +# Glossary +[//]: # (Version:1.0.0) +This is a glossary of terms as used in this essay. These do not necessarily have a standardized meaning to other people. Eric S. Raymond has compiled a massive and informative glossary[HackerDict] that rather surprisingly can pleasurably be read cover-to-cover once you can appreciate a fraction of it. + +### unk-unk + +Slang for unknown-unknown. Problems that cannot presently even be conceptualized that will steal time away from the project and wreck the schedule. + +### printlining + +The insertion of statements into a program on a strictly temporary basis that output information about the execution of the program for the purpose of debugging. + +### logging + +The practice of writing a program so that it can produce a configurable output log describing its execution. + +### divide and conquer + +A technique of top-down design and, importantly, of debugging that is the subdivision of a problem or a mystery into progressively smaller problems or mysteries. + +### vapour + +Illusionary and often deceptive promises of software that is not yet for sale and, as often as not, will never materialize into anything solid. + +### boss + +The person who sets your tasks. In some cases, the user is the boss. + +### tribe + +The people with whom you share loyalty to a common goal. + +### low-hanging fruit + +Big improvements that cost little. + +### Entrepreneur + +The initiator of projects. + +### business + +A group of people organized for making money. + +### company + +A group of people organized for making money. + +### tribe + +A group of people you share cultural affinity and loyalty with. + +### scroll blindness + +The effect of being unable to find information you need because it is buried in too much other, less interesting information. + +### wall-clock + +Actually time as measured by a clock on a wall, as opposed to CPU time. + +### bottleneck + +The most important limitation in the performance of a system. A constriction that limits performance. + +### master + +A unique piece of information from which all cached copies are derived that serves as the official definition of that data. + +### heap allocated + +Memory can be said to be heap allocated whenever the mechanism for freeing it is complicated. + +### garbage + +Memory which is being taken up by objects your application no longer needs. + +### garbage collector + +A system for recycling garbage. + +### memory leak + +The unwanted collection of references to objects that prevents garbage collection (or a bug in the garbage collector or memory management system!) that causes the program to gradually increase its memory demands over time. + +### Extreme Programming + +A style of programming emphasizing communication with the customer and automated testing. + +### hitting the wall + +To run out of a specific resource causing performance to degrade sharply rather than gradually. + +### speculative programming + +Producing a feature before it is really known if that feature will be useful. + +### information hiding + +A design principle that seeks to keep things independent and decoupled by using interfaces that expose as little information as possible. + +### object-oriented programming + +An programming style emphasizing the the management of state inside objects. + +### communication languages + +A language designed primarily for standardization rather than execution. + +### boxes and arrows + +A loose, informal style of making diagrams consisting of boxes and arrows drawn between those boxes to show the relationships. This contrast with formal diagram methodologies, such as UML. + +### lingua franca + +A language so popular as to be a de facto standard for its field, as French was for international diplomacy at one time. + +### buy vs. build + +An adjective describing a choice between spending money for software or writing it your self. + +### mere work + +Work that requires little creativity and entails little risk. Mere work can be estimated easily. + +### programming notation + +A synonym for programming language that emphasizes the mathematical nature of programming language and their relative simplicity compared to natural languages. + +### strawman + +A document meant to be the starting point of a technical discussion. A strawman may lead to a stickman, tinman, woodman, ironman, etc. + +### white-paper + +An informative document that is often meant to explain or sell a product or idea to an audience different than the programmers of that product or idea. diff --git a/jp/LICENSE.md b/jp/LICENSE.md new file mode 100644 index 0000000..3e18a1a --- /dev/null +++ b/jp/LICENSE.md @@ -0,0 +1,12 @@ + +## Creative Commons Attribution Share-Alike + +"How To Be A Programmer: Community Version" by Robert L. Read with Community is licensed under Creative Commons Attribution Share-Alike Internal v 4.0. + +At present this work will be edited by Braydie Grove and Robert L. Read. + +We will make reasonable attempts to maintain proper attributions of contributions in the section entittle "Contributions". If you make a pull-request with a significant contribution, please add a very brief description of your contribution to that section. + + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/jp/README.md b/jp/README.md new file mode 100644 index 0000000..81c3ac2 --- /dev/null +++ b/jp/README.md @@ -0,0 +1,103 @@ +# How to be a Programmer: Community Version +[//]: # (Version:1.0.0) +Robert L. Read with Community + +Copyright 2002, 2003, 2016 Robert L. Read + +Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +## Introduction +To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. + +This is very subjective and, therefore, this essay is doomed to be personal and somewhat opinionated. I confine myself to problems that a programmer is very likely to have to face in her work. Many of these problems and their solutions are so general to the human condition that I will probably seem preachy. I hope in spite of this that this essay will be useful. + +Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. + +In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. + +Welcome to the tribe. + +## Contents + +1. [Beginner](1-Beginner) + - Personal Skills + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - Team Skills + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +2. [Intermediate](2-Intermediate) + - Personal Skills + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - Team Skills + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - Judgment + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +3. [Advanced](3-Advanced) + - Technological Judgment + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - Compromising Wisely + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - Serving Your Team + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +4. [Glossary](GLOSSARY.md) +5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) +6. [Appendix B - History (As of January 2016)](6-History.md) +6. [Appendix C - Contributions (As of January 2016)](7-Contributions.md) + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/jp/SUMMARY.md b/jp/SUMMARY.md new file mode 100644 index 0000000..552702e --- /dev/null +++ b/jp/SUMMARY.md @@ -0,0 +1,80 @@ +# Summary +[//]: # (Version:1.0.0) +* [Beginner](1-Beginner/README.md) + * Personal Skills + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + * Team Skills + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) +* [Intermediate](2-Intermediate/README.md) + * Personal Skills + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + * Team Skills + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + * Judgment + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) +* [Advanced](3-Advanced/README.md) + * Technological Judgment + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + * Compromising Wisely + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + * Serving Your Team + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +* [Appendix A * Bibliography/Websiteography](5-Bibliography.md) +* [Appendix B * History (As of January 2016)](6-History.md) +* [Appendix C * Contributions (As of January 2016)](7-Contributions.md) From 7929d552bf4700ebcf0f4c2e300778214849bf7a Mon Sep 17 00:00:00 2001 From: borerere Date: Thu, 17 Nov 2016 15:17:26 +0900 Subject: [PATCH 104/149] =?UTF-8?q?transrate=E3=80=8C1-Beginner=E3=80=8Dto?= =?UTF-8?q?=20Japanease?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Personal-Skills/01-Learn To Debug.md | 20 ++++++++-------- ...to Debug by Splitting the Problem Space.md | 13 +++++----- .../03-How to Remove an Error.md | 6 ++--- .../04-How to Debug Using a Log.md | 13 +++++----- ...-How to Understand Performance Problems.md | 8 +++---- .../06-How to Fix Performance Problems.md | 11 ++++----- .../07-How to Optimize Loops.md | 19 +++++++-------- .../08-How to Deal with IO Expense.md | 10 ++++---- .../09-How to Manage Memory.md | 12 +++++----- .../10-How to Deal with Intermittent Bugs.md | 14 +++++------ .../11-How to Learn Design Skills.md | 6 ++--- .../12-How to Conduct Experiments.md | 24 +++++++++---------- .../01-Why Estimation is Important.md | 12 +++++----- .../02-How to Estimate Programming Time.md | 18 +++++++------- .../03-How to Find Out Information.md | 16 ++++++------- ...o Utilize People as Information Sources.md | 12 +++++----- .../Team-Skills/05-How to Document Wisely.md | 22 ++++++++--------- .../06-How to Work with Poor Code.md | 9 ++++--- .../07-How to Use Source Code Control.md | 6 ++--- .../Team-Skills/08-How to Unit Test.md | 6 ++--- .../09-Take Breaks when Stumped.md | 2 +- .../10-How to Recognize When to Go Home.md | 16 ++++++------- .../11-How to Deal with Difficult People.md | 12 +++++----- 23 files changed, 141 insertions(+), 146 deletions(-) diff --git a/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md b/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md index b073d2d..7ebb5c1 100644 --- a/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,21 +1,21 @@ # Learn to Debug [//]: # (Version:1.0.0) -Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind. +ƒfƒoƒbƒO‚̓vƒƒOƒ‰ƒ}‚ɂȂ邽‚߂̊î‘b‚Å‚·B“®ŽŒ "debug"‚Ìʼn‚̈Ӗ¡‚̓Gƒ‰[‚ðŽæ‚èœ‚­‚±‚Ƃł·‚ªAŽÀÛ‚Éd—v‚ȈӖ¡‚ÍAƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚𒲂ׂDz‚ׂ邱‚Ƃł·BŒø‰Ê“I‚ɃfƒoƒbƒO‚Å‚«‚È‚¢ƒvƒƒOƒ‰ƒ}[‚Í–Ú‚ªŒ©‚¦‚Ü‚¹‚ñB -Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging. +—‘zŽå‹`ŽÒAÝŒvA•ªÍA•¡ŽG‚³‚Ì—˜_‚ȂǂªƒfƒoƒbƒO‚æ‚è‚àŠî–{“I‚¾‚Æl‚¦‚él‚ÍAƒvƒƒOƒ‰ƒ}[‚ð“­‚©‚¹‚Ä‚¢‚Ü‚¹‚ñB“­‚­ƒvƒƒOƒ‰ƒ}[‚Í—‘z“I‚È¢ŠE‚ÉZ‚ñ‚Å‚¢‚Ü‚¹‚ñB‚ ‚È‚½‚ªŠ®àø‚Å‚ ‚Á‚Ä‚àA‘åŽèƒ\ƒtƒgƒEƒFƒA‰ïŽÐAGNU‚̂悤‚È‘gDA‚¨‚æ‚Ñ‚ ‚È‚½‚Ì“¯—»‚É‚æ‚Á‚Ä‘‚©‚ꂽƒR[ƒh‚Ɉ͂܂ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃R[ƒh‚̂قƂñ‚ǂ͕sŠ®‘S‚Å‚ ‚èA•sŠ®‘S‚É•¶‘‰»‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚̃R[ƒh‚ÌŽÀs‚ð‰ÂŽ‹‰»‚·‚é‹@”\‚ª‚È‚¯‚ê‚ÎA‚킸‚©‚ȃoƒ“ƒv‚Í‚ ‚È‚½‚ð‰i‰“‚ɓЂ°ŽÌ‚Ă܂·B‘½‚­‚Ìê‡A‚±‚̉Ž‹«‚ÍŽÀŒ±iƒfƒoƒbƒOj‚É‚æ‚Á‚Ă̂ݓ¾‚ç‚ê‚Ü‚·B -Debugging is about the running of programs, not programs themselves. If you buy something from a major software company, you usually don't get to see the program. But there will still arise places where the code does not conform to the documentation (crashing your entire machine is a common and spectacular example), or where the documentation is mute. More commonly, you create an error, examine the code you wrote, and have no clue how the error can be occurring. Inevitably, this means some assumption you are making is not quite correct or some condition arises that you did not anticipate. Sometimes, the magic trick of staring into the source code works. When it doesn't, you must debug. +ƒfƒoƒbƒO‚ÍAƒvƒƒOƒ‰ƒ€‚»‚Ì‚à‚̂ł͂Ȃ­AƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ÉŠÖ‚·‚é‚à‚̂ł·B‚ ‚È‚½‚ª‘åŽèƒ\ƒtƒgƒEƒFƒA‰ïŽÐ‚©‚牽‚©‚ðw“ü‚µ‚½ê‡A’Êí‚Í‚»‚̃vƒƒOƒ‰ƒ€‚ðŒ©‚é‚±‚Ƃ͂ł«‚Ü‚¹‚ñB‚µ‚©‚µAƒR[ƒh‚ªƒhƒLƒ…ƒƒ“ƒg‚É€‹’‚µ‚Ä‚¢‚È‚¢êŠiƒ}ƒVƒ“‘S‘Ì‚ðƒNƒ‰ƒbƒVƒ…‚³‚¹‚邱‚Ƃ͈ê”Ê“I‚Å‘s‘å‚È—á‚Å‚·j‚âƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ªƒ~ƒ…[ƒg‚³‚ê‚Ä‚¢‚éꊂª”­¶‚µ‚Ü‚·B‚æ‚èˆê”Ê“I‚É‚ÍAƒGƒ‰[‚ð쬂µA‘‚«ž‚ñ‚¾ƒR[ƒh‚𒲂×AƒGƒ‰[‚ª‚ǂ̂悤‚É”­¶‚·‚é‰Â”\«‚ª‚ ‚é‚Ì‚©??‚í‚©‚è‚Ü‚¹‚ñB•K‘R“I‚ÉA‚±‚ê‚Í‚ ‚È‚½‚ªì‚Á‚Ä‚¢‚邯‚¢‚¤‘O’ñ‚ª‚©‚Ȃ賂µ‚­‚È‚¢‚±‚ÆA‚ ‚é‚¢‚Í‚ ‚È‚½‚ª—\Šú‚µ‚Ä‚¢‚È‚¢ó‘Ô‚ª”­¶‚µ‚½‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·BŽž‚É‚ÍAƒ\[ƒXƒR[ƒh‚𒭂߂Ă¢‚é–‚–@‚ª‚¤‚Ü‚­“®ì‚·‚邱‚Æ‚à‚ ‚è‚Ü‚·B‚»‚¤‚łȂ¢ê‡‚ÍAƒfƒoƒbƒO‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -To get visibility into the execution of a program you must be able to execute the code and observe something about it. Sometimes this is visible, like what is being displayed on a screen, or the delay between two events. In many other cases, it involves things that are not meant to be visible, like the state of some variables inside the code, which lines of code are actually being executed, or whether certain assertions hold across a complicated data structure. These hidden things must be revealed. +ƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ð‰ÂŽ‹‰»‚·‚é‚É‚ÍAƒR[ƒh‚ðŽÀs‚µ‚Ä‚»‚̃R[ƒh‚ðŠÏŽ@‚Å‚«‚é•K—v‚ª‚ ‚è‚Ü‚·B‰æ–ʂɕ\ަ‚³‚ê‚Ä‚¢‚é‚à‚ÌA‚Ü‚½‚Í2‚‚̃Cƒxƒ“ƒgŠÔ‚Ì’x‰„‚̂悤‚ÉA‚±‚ꂪ–Ú‚ÉŒ©‚¦‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‘½‚­‚Ìê‡AƒR[ƒh“à‚Ì‚¢‚­‚‚©‚̕ϔ‚Ìó‘ÔAŽÀÛ‚ÉŽÀs‚³‚ê‚Ä‚¢‚éƒR[ƒh‚ÌsA‚Ü‚½‚Í•¡ŽG‚ȃf[ƒ^\‘¢‚ɂ킽‚Á‚Ä“Á’è‚̃AƒT[ƒVƒ‡ƒ“‚ª•ÛŽ‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚È‚ÇA–Ú‚ÉŒ©‚¦‚È‚¢‚à‚Ì‚ªŠÜ‚Ü‚ê‚Ü‚·B‚±‚ê‚ç‚̉B‚³‚ꂽ‚à‚͖̂¾‚ç‚©‚É‚³‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -The common ways of looking into the ‘innards’ of an executing program can be categorized as: +ŽÀsƒvƒƒOƒ‰ƒ€‚Ì "nnards"‚𒲂ׂéˆê”Ê“I‚È•û–@‚ÍAŽŸ‚̂悤‚É•ª—Þ‚Å‚«‚Ü‚·B -- Using a debugging tool, -- Printlining - Making a temporary modification to the program, typically adding lines that print information out, and -- Logging - Creating a permanent window into the programs execution in the form of a log. +- ƒfƒoƒbƒOƒc[ƒ‹‚ðŽg—p‚µ‚ÄA +- Printlining - ƒvƒƒOƒ‰ƒ€‚ðˆêŽž“I‚É•ÏX‚µ‚Ü‚·B’ÊíAî•ñ‚ðo—Í‚·‚és‚ð’ljÁ‚µ‚Ü‚·B +- ƒƒMƒ“ƒO - ƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ɉi‘±“I‚ȃEƒBƒ“ƒhƒE‚ðƒƒO‚ÌŒ`‚Å쬂µ‚Ü‚·B -Debugging tools are wonderful when they are stable and available, but printlining and logging are even more important. Debugging tools often lag behind language development, so at any point in time they may not be available. In addition, because the debugging tool may subtly change the way the program executes it may not always be practical. Finally, there are some kinds of debugging, such as checking an assertion against a large data structure, that require writing code and changing the execution of the program. It is good to know how to use debugging tools when they are stable, but it is critical to be able to employ the other two methods. +ƒfƒoƒbƒMƒ“ƒOƒc[ƒ‹‚ÍAˆÀ’肵‚Ä—˜—p‰Â”\‚Èꇂ͑f°‚炵‚¢‚Å‚·‚ªAˆóüƒ‰ƒCƒeƒBƒ“ƒO‚ƃƒMƒ“ƒO‚Í‚³‚ç‚Éd—v‚Å‚·BƒfƒoƒbƒOƒc[ƒ‹‚ÍŒ¾ŒêŠJ”­‚É’x‚ê‚ð‚Æ‚é‚±‚Æ‚ª‘½‚¢‚½‚ßA‚¢‚Â‚Å‚à—˜—p‚Å‚«‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B‚³‚ç‚ÉAƒfƒoƒbƒOƒc[ƒ‹‚ª”÷–­‚ɃvƒƒOƒ‰ƒ€‚ÌŽÀs•û–@‚ð•ÏX‚·‚é‰Â”\«‚ª‚ ‚邽‚ßA•K‚¸‚µ‚àŽÀÛ“I‚ł͂Ȃ¢ê‡‚ª‚ ‚è‚Ü‚·BÅŒã‚ÉA‘å‚«‚ȃf[ƒ^\‘¢‚ɑ΂·‚éƒAƒT[ƒVƒ‡ƒ“‚̃`ƒFƒbƒNAƒR[ƒh‚Ì‹LqAƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚Ì•ÏX‚È‚ÇA‚¢‚­‚‚©‚ÌŽí—ނ̃fƒoƒbƒO‚ª‚ ‚è‚Ü‚·BƒfƒoƒbƒOƒc[ƒ‹‚ªˆÀ’肵‚Ä‚¢‚邯‚«‚ɃfƒoƒbƒOƒc[ƒ‹‚ðŽg—p‚·‚é•û–@‚ð’m‚Á‚Ä‚¨‚­‚±‚Ƃ͗ǂ¢‚±‚Ƃł·‚ªA‘¼‚Ì2‚‚̕û–@‚ðŽg—p‚Å‚«‚邱‚Æ‚ªd—v‚Å‚·B -Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. +‚¢‚­‚‚©‚̉SŽÒ‚ÍAƒR[ƒh‚ð•ÏX‚·‚é•K—v‚ª‚ ‚邯‚«‚ɃfƒoƒbƒO‚ð‹°‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚Í—‰ð‚Å‚«‚é - ‚»‚ê‚Í’Tõ“IŽèp‚̂悤‚È‚à‚̂ł·B‚µ‚©‚µA‚ ‚È‚½‚̓R[ƒh‚ð“Ë‚«Žh‚µ‚ăWƒƒƒ“ƒv‚³‚¹‚邱‚Æ‚ðŠw‚΂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ðŽŽ‚µ‚ÄA‚ ‚È‚½‚ªˆêŽž“I‚És‚¤‚±‚Ƃ͂»‚ê‚ðˆ«‰»‚³‚¹‚é‚à‚͉̂½‚à‚È‚¢‚±‚Æ‚ð—‰ð‚·‚邱‚Æ‚ðŠw‚΂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚Ì‹°•|‚ðŠ´‚¶‚éꇂÍAƒƒ“ƒ^[‚ð’T‚µ‚Ä‚­‚¾‚³‚¢B‚±‚Ì‹°•|‚Ö‚Ì•qŠ´‚ÈŽn‚Ü‚è‚ÅA‘½‚­‚Ì—D‚ꂽƒvƒƒOƒ‰ƒ}[‚ðŽ¸‚¢‚Ü‚·B Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) diff --git a/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index f8fbe61..a2d1c27 100644 --- a/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -1,15 +1,14 @@ # How to Debug by Splitting the Problem Space [//]: # (Version:1.0.0) -Debugging is fun, because it begins with a mystery. You think it should do something, but instead it does something else. It is not always quite so simple---any examples I can give will be contrived compared to what sometimes happens in practice. Debugging requires creativity and ingenuity. If there is a single key to debugging it is to use the divide and conquer technique on the mystery. +デãƒãƒƒã‚°ã¯æ¥½ã—ã„ã§ã™ã€‚ãªãœãªã‚‰ã€ãれã¯è¬Žã§å§‹ã¾ã‚‹ã‹ã‚‰ã§ã™ã€‚ã‚ãªãŸã¯ä½•ã‹ã‚’ã™ã¹ãã ã¨æ€ã†ãŒã€ä»£ã‚りã«ä½•ã‹ã‚’ã™ã‚‹ã€‚ãれã¯ã„ã¤ã‚‚éžå¸¸ã«ç°¡å˜ãªã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“---ç§ãŒä¸Žãˆã‚‹ã“ã¨ãŒã§ãる例ã¯ã€å®Ÿéš›ã«æ™‚々起ã“ã‚‹ã‚‚ã®ã¨æ¯”較ã—ã¦è€ƒæ¡ˆã•れã¾ã™ã€‚デãƒãƒƒã‚°ã«ã¯å‰µé€ æ€§ã¨å‰µæ„工夫ãŒå¿…è¦ã§ã™ã€‚デãƒãƒƒã‚°ã™ã‚‹å˜ä¸€ã®ã‚­ãƒ¼ãŒã‚ã‚‹å ´åˆã¯ã€ãƒŸã‚¹ãƒ†ãƒªãƒ¼ã§åˆ†å‰²ã¨å¾æœã®ãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚’使用ã™ã‚‹ã“ã¨ã§ã™ã€‚ -Suppose, for example, you created a program that should do ten things in a sequence. When you run it, it crashes. Since you didn't program it to crash, you now have a mystery. When you look at the output, you see that the first seven things in the sequence were run successfully. The last three are not visible from the output, so now your mystery is smaller: ‘It crashed on thing #8, #9, or #10.’ +ãŸã¨ãˆã°ã€ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã§10個を実行ã™ã‚‹ãƒ—ログラムを作æˆã—ãŸã¨ã—ã¾ã™ã€‚ã‚ãªãŸãŒãれを実行ã™ã‚‹ã¨ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã™ã€‚ã‚ãªãŸãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹ã‚ˆã†ã«ãƒ—ログラムã—ã¦ã„ãªã„ã®ã§ã€ä»Šã‚ãªãŸã¯è¬Žã‚’æŒã£ã¦ã„ã¾ã™ã€‚出力を見るã¨ã€ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®æœ€åˆã®7ã¤ãŒæ­£å¸¸ã«å®Ÿè¡Œã•れãŸã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚最後ã®3ã¤ã¯å‡ºåŠ›ã‹ã‚‰è¦‹ãˆãªã„ã®ã§ã€ä»Šã¯ã‚ãªãŸã®è¬Žã¯å°ã•ããªã‚Šã¾ã™ï¼š 'ãれã¯ï¼ƒ8ã€ï¼ƒ9ã€ã¾ãŸã¯ï¼ƒ10ã®ç‰©ã«å¢œè½ã—ã¾ã—ãŸã€‚ -Can you design an experiment to see which thing it crashed on? Sure. You can use a debugger or we can add printline statements (or the equivalent in whatever language you are working in) after #8 and #9. When we run it again, our mystery will be smaller, such as ‘It crashed on thing #9.’ I find that bearing in mind exactly what the mystery is at any point in time helps keep one focused. When several people are working together under pressure on a problem it is easy to forget what the most important mystery is. +ã©ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ãŸã‹ã‚’確èªã™ã‚‹ãŸã‚ã«å®Ÿé¨“を設計ã§ãã¾ã™ã‹ï¼Ÿç¢ºã‹ã«ã€‚ #8ã¨ï¼ƒ9ã®å¾Œã«ã€ãƒ‡ãƒãƒƒã‚¬ã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€printline文(ã¾ãŸã¯ã‚ãªãŸãŒä½œæ¥­ã—ã¦ã„る言語ã«ç›¸å½“ã™ã‚‹ã‚‚ã®ï¼‰ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ç§ãŸã¡ãŒã‚‚ã†ä¸€åº¦ãれを実行ã™ã‚‹ã¨ã€ã€Œãれã¯äº‹9番ã«å¢œè½ã—ã¾ã—ãŸã€ã¨ã„ã†ã‚ˆã†ãªç§ã®è¬Žã¯å°ã•ããªã‚‹ã§ã—ょã†ã€‚ã„ãã¤ã‹ã®äººã€…ãŒå•題ã«åœ§åŠ›ã‚’ã‹ã‘ã¦ä¸€ç·’ã«åƒã„ã¦ã„ã‚‹ã¨ãã€æœ€ã‚‚é‡è¦ãªè¬ŽãŒä½•ã§ã‚ã‚‹ã‹ã‚’忘れるã®ã¯ç°¡å˜ã§ã™ã€‚ -The key to divide and conquer as a debugging technique is the same as it is for algorithm design: as long as you do a good job splitting the mystery in the middle, you won't have to split it too many times, and you will be debugging quickly. But what is the middle of a mystery? This is where true creativity and experience comes in. +デãƒãƒƒã‚°æŠ€è¡“ã¨ã—ã¦åˆ†å‰²ã—ã¦å…‹æœã™ã‚‹éµã¯ã€ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ è¨­è¨ˆã¨åŒã˜ã§ã™ã€‚ミステリーを途中ã§åˆ†å‰²ã™ã‚‹ã¨ã€ä½•度も分割ã™ã‚‹å¿…è¦ã¯ãªããªã‚Šã¾ã™ã€‚迅速ã«ãƒ‡ãƒãƒƒã‚°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€è¬Žã®çœŸã‚“中ã¯ä½•ã§ã™ã‹ï¼Ÿã“れã¯ã€çœŸã®å‰µé€ æ€§ã¨çµŒé¨“ãŒç”Ÿã¾ã‚Œã‚‹å ´æ‰€ã§ã™ã€‚ -To a true beginner, the space of all possible errors looks like every line in the source code. You don't have the vision you will later develop to see the other dimensions of the program, such as the space of executed lines, the data structure, the memory management, the interaction with foreign code, the code that is risky, and the code that is simple. For the experienced programmer, these other dimensions form an imperfect but very useful mental model of all the things that can go wrong. Having that mental model is what helps one find the middle of the mystery effectively. - -Once you have evenly subdivided the space of all that can go wrong, you must try to decide in which space the error lies. In the simple case where the mystery is: ‘Which single unknown line makes my program crash?’, you can ask yourself: ‘Is the unknown line executed before or after this line that I judge to be executed in the middle of the running program?’ Usually you will not be so lucky as to know that the error exists in a single line, or even a single block. Often the mystery will be more like: ‘Either there is a pointer in that graph that points to the wrong node, or my algorithm that adds up the variables in that graph doesn't work.’ In that case you may have to write a small program to check that the pointers in the graph are all correct in order to decide which part of the subdivided mystery can be eliminated. +真ã®åˆå¿ƒè€…ã«ã¨ã£ã¦ã€è€ƒãˆã‚‰ã‚Œã‚‹ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ã®é ˜åŸŸã¯ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰å†…ã®ã™ã¹ã¦ã®è¡Œã®ã‚ˆã†ã«è¦‹ãˆã¾ã™ã€‚実行ã•れãŸè¡Œã®ã‚¹ãƒšãƒ¼ã‚¹ã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã€ãƒ¡ãƒ¢ãƒªç®¡ç†ã€å¤–部コードã¨ã®ã‚„りã¨ã‚Šã€å±é™ºãªã‚³ãƒ¼ãƒ‰ãªã©ã€ãƒ—ログラムã®ä»–ã®æ¬¡å…ƒã‚’見るãŸã‚ã«å¾Œã§é–‹ç™ºã™ã‚‹ãƒ“ジョンã¯ã‚りã¾ã›ã‚“。å˜ç´”ãªã‚³ãƒ¼ãƒ‰ã§ã™ã€‚経験豊富ãªãƒ—ログラマーã«ã¨ã£ã¦ã€ã“れらã®ä»–ã®æ¬¡å…ƒã¯ã€é–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã™ã¹ã¦ã®äº‹æŸ„ã®ä¸å®Œå…¨ã ãŒéžå¸¸ã«æœ‰ç”¨ãªç²¾ç¥žãƒ¢ãƒ‡ãƒ«ã‚’å½¢æˆã™ã‚‹ã€‚ãã®ç²¾ç¥žãƒ¢ãƒ‡ãƒ«ã‚’æŒã¤ã“ã¨ã¯ã€è¬Žã®çœŸã‚“中を効果的ã«è¦‹ã¤ã‘ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ +é–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ã®ã‚る領域をå‡ç­‰ã«ç´°åˆ†ã—ãŸã‚‰ã€ã‚¨ãƒ©ãƒ¼ãŒã©ã®é ˜åŸŸã«ã‚ã‚‹ã‹ã‚’判断ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ç§ã®ãƒ—ログラムãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å˜ä¸€ã®ä¸æ˜Žãªè¡Œã¯ã©ã‚Œã§ã™ã‹ï¼Ÿå˜ç´”ãªã‚±ãƒ¼ã‚¹ã§ã¯ã€è‡ªåˆ†ãŒå®Ÿè¡Œã—ã¦ã„るプログラムã®é€”中ã§å®Ÿè¡Œã•れるã¨åˆ¤æ–­ã—ãŸè¡Œã®å‰ã¾ãŸã¯å¾Œã«æœªçŸ¥ã®è¡ŒãŒå®Ÿè¡Œã•れã¦ã„ã¾ã™ã‹ï¼Ÿ '通常ã€ã‚¨ãƒ©ãƒ¼ãŒå˜ä¸€ã®è¡Œã«å­˜åœ¨ã™ã‚‹ã‹ã€å˜ä¸€ã®ãƒ–ロックã§ã‚ã‚‹ã‹ã‚’知るã“ã¨ã¯å¤§å¤‰å¹¸é‹ãªã“ã¨ã§ã¯ã‚りã¾ã›ã‚“。ã—ã°ã—ã°ã€ãƒŸã‚¹ãƒ†ãƒªãƒ¼ã¯ã€ã€Œé–“é•ã£ãŸãƒŽãƒ¼ãƒ‰ã‚’指ã—示ã™ãƒã‚¤ãƒ³ã‚¿ãŒãã®ã‚°ãƒ©ãƒ•ã«ã‚ã‚‹ã‹ã€ã¾ãŸã¯ãã®ã‚°ãƒ©ãƒ•内ã®å¤‰æ•°ã‚’加算ã™ã‚‹ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒæ©Ÿèƒ½ã—ã¾ã›ã‚“ã€ã¨ã„ã†å ´åˆãŒã‚りã¾ã™ã€‚ãã®å ´åˆã¯ã€åˆ†å‰²ã•れãŸè¬Žã®ã©ã®éƒ¨åˆ†ã‚’除去ã§ãã‚‹ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€ã‚°ãƒ©ãƒ•内ã®ãƒã‚¤ãƒ³ã‚¿ãŒã™ã¹ã¦æ­£ã—ã„ã“ã¨ã‚’確èªã™ã‚‹å°ã•ãªãƒ—ログラム。 Next [How to Remove an Error](03-How to Remove an Error.md) diff --git a/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md index d88eb5d..ee9cd1c 100644 --- a/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,9 +1,9 @@ # How to Remove an Error [//]: # (Version:1.0.0) -I've intentionally separated the act of examining a program's execution from the act of fixing an error. But of course, debugging does also mean removing the bug. Ideally you will have perfect understanding of the code and will reach an ‘A-Ha!’ moment where you perfectly see the error and how to fix it. But since your program will often use insufficiently documented systems into which you have no visibility, this is not always possible. In other cases the code is so complicated that your understanding cannot be perfect. +Ž„‚͈Ó}“I‚ɃvƒƒOƒ‰ƒ€‚ÌŽÀs‚ðƒGƒ‰[‚ðC³‚·‚ésˆ×‚©‚ç’²‚ׂ邯‚¢‚¤sˆ×‚𕪂¯‚½B‚à‚¿‚ë‚ñAƒfƒoƒbƒO‚̓oƒO‚ðŽæ‚èœ‚­‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B—‘z“I‚É‚ÍAƒR[ƒh‚ðŠ®‘S‚É—‰ð‚µAƒGƒ‰[‚ªŠ®‘S‚É•\ަ‚³‚êAC³‚·‚é•û–@‚ðŽ¦‚·uƒnƒnIv‚ÌuŠÔ‚É“ž’B‚µ‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚Å‚ÍA‰ÂŽ‹«‚̂Ȃ¢•¶‘‰»‚³‚ꂽƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‘½‚¢‚½‚ßA•K‚¸‚µ‚à‚»‚¤‚Å‚ ‚邯‚ÍŒÀ‚è‚Ü‚¹‚ñB‘¼‚̃P[ƒX‚Å‚ÍAƒR[ƒh‚ª•¡ŽG‚Å‚ ‚邽‚ßA—‰ð‚ªŠ®‘S‚ł͂ ‚è‚Ü‚¹‚ñB -In fixing a bug, you want to make the smallest change that fixes the bug. You may see other things that need improvement; but don't fix those at the same time. Attempt to employ the scientific method of changing one thing and only one thing at a time. The best process for this is to be able to easily reproduce the bug, then put your fix in place, and then rerun the program and observe that the bug no longer exists. Of course, sometimes more than one line must be changed, but you should still conceptually apply a single atomic change to fix the bug. +ƒoƒO‚ðC³‚·‚é‚É‚ÍAƒoƒO‚ðC³‚·‚éŬŒÀ‚Ì•ÏX‚ð‰Á‚¦‚½‚¢‚Æl‚¦‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚͉ü‘P‚ª•K—v‚È‘¼‚Ì‚à‚Ì‚ðŒ©‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB“¯Žž‚É‚»‚ê‚ç‚ðC³‚µ‚È‚¢‚Å‚­‚¾‚³‚¢Bˆê“x‚Ɉê‚‚̂±‚ÆA‚½‚¾ˆê‚‚̎–‚ð•Ï‚¦‚é‰ÈŠw“I•û–@‚ðÌ—p‚µ‚悤‚Æ‚·‚éB‚±‚Ì‚½‚ß‚Ìŗǂ̃vƒƒZƒX‚ÍAƒoƒO‚ðŠÈ’P‚ÉÄŒ»‚µAC³ƒvƒƒOƒ‰ƒ€‚ð“K—p‚µ‚Ä‚©‚çƒvƒƒOƒ‰ƒ€‚ðÄŽÀs‚µAƒoƒO‚ª‘¶Ý‚µ‚È‚­‚È‚Á‚½‚±‚Æ‚ðŠm”F‚·‚邱‚Ƃł·B‚à‚¿‚ë‚ñAŽž‚ɂ͕¡”‚Ìs‚ð•ÏX‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒoƒO‚ðC³‚·‚邽‚߂ɊT”O“I‚É1‚‚̃Aƒgƒ~ƒbƒN‚È•ÏX‚ð“K—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -Sometimes, there are really several bugs that look like one. It is up to you to define the bugs and fix them one at a time. Sometimes it is unclear what the program should do or what the original author intended. In this case, you must exercise your experience and judgment and assign your own meaning to the code. Decide what it should do, and comment it or clarify it in some way and then make the code conform to your meaning. This is an intermediate or advanced skill that is sometimes harder than writing the original function in the first place, but the real world is often messy. You may have to fix a system you cannot rewrite. +Žž‚É‚ÍAŽÀÛ‚É‚Í1‚‚̂悤‚ÉŒ©‚¦‚é‚¢‚­‚‚©‚̃oƒO‚ª‚ ‚è‚Ü‚·BƒoƒO‚ð’è‹`‚µ‚Ĉê“x‚ÉC³‚·‚é‚̂͂ ‚È‚½ŽŸ‘æ‚Å‚·BŽžXAƒvƒƒOƒ‰ƒ€‚ª‰½‚ð‚·‚×‚«‚©A‚Ü‚½‚ÍŒ³‚Ì’˜ŽÒ‚ªˆÓ}‚µ‚½‚à‚Ì‚ª•s–¾‚Å‚ ‚éB‚±‚Ìê‡A‚ ‚È‚½‚ÍŽ©•ª‚ÌŒoŒ±‚Æ”»’f‚ðs‚¢AƒR[ƒh‚ÉŽ©•ª‚̈Ӗ¡‚ðŠ„‚è“–‚Ä‚é•K—v‚ª‚ ‚è‚Ü‚·B‰½‚ð‚·‚×‚«‚©‚ðŒˆ’è‚µAƒRƒƒ“ƒg‚µ‚½‚èA‰½‚ç‚©‚Ì•û–@‚Å‚»‚ê‚𖾊m‚É‚µ‚½‚肵‚ÄAƒR[ƒh‚ð‚ ‚È‚½‚̈Ӗ¡‚É“K‡‚³‚¹‚Ü‚·B‚±‚ê‚ÍAʼn‚ÌꊂɌ³‚ÌŠÖ”‚ð‘‚­‚æ‚è‚àŽž‚ɂ͓‚¢’†‹‰‚Ü‚½‚Í㋉‚̃XƒLƒ‹‚Å‚·‚ªAŽÀÛ‚Ì¢ŠE‚Í‚µ‚΂µ‚Ζʓ|‚Å‚·B‘‚«Š·‚¦‚ª‚Å‚«‚È‚¢ƒVƒXƒeƒ€‚ðC³‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB Next [How to Debug Using a Log](04-How to Debug Using a Log.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index 1cc3ab9..cf152a2 100644 --- a/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,13 +1,12 @@ # How to Debug Using a Log [//]: # (Version:1.0.0) -*Logging* is the practice of writing a system so that it produces a sequence of informative records, called a log. *Printlining* is just producing a simple, usually temporary, log. Absolute beginners must understand and use logs because their knowledge of programming is limited; system architects must understand and use logs because of the complexity of the system. The amount of information that is provided by the log should be configurable, ideally while the program is running. In general, logs offer three basic advantages: +*ƒƒMƒ“ƒO*‚ÍAƒƒO‚ƌĂ΂ê‚éˆê˜A‚Ì—L‰v‚ȃŒƒR[ƒh‚𶬂·‚邿‚¤‚ɃVƒXƒeƒ€‚ð쬂·‚é•û–@‚Å‚·B * Printlining *‚Í’Pƒ‚ÈA’Êí‚͈ꎞ“I‚ȃƒO‚𶬂µ‚Ä‚¢‚Ü‚·BƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì’mޝ‚ªŒÀ‚ç‚ê‚Ä‚¢‚邽‚ßAâ‘ΉSŽÒ‚̓ƒO‚ð—‰ð‚µ‚ÄŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒVƒXƒeƒ€ÝŒvŽÒ‚ÍAƒVƒXƒeƒ€‚Ì•¡ŽG‚³‚Ì‚½‚߃ƒO‚ð—‰ð‚µ‚ÄŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒƒO‚É‚æ‚Á‚Ä’ñ‹Ÿ‚³‚ê‚éî•ñ‚Ì—Ê‚ÍAƒvƒƒOƒ‰ƒ€‚ªŽÀs‚³‚ê‚Ä‚¢‚éŠÔ‚Í—‘z“I‚É\¬‰Â”\‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñBˆê”Ê‚ÉAƒƒO‚É‚Í3‚‚̊î–{“I‚È—˜“_‚ª‚ ‚è‚Ü‚·B -- Logs can provide useful information about bugs that are hard to reproduce (such as those that occur in the production environment but that cannot be reproduced in the test environment). -- Logs can provide statistics and data relevant to performance, such as the time passing between statements. -- When configurable, logs allow general information to be captured in order to debug unanticipated specific problems without having to modify and/or redeploy the code just to deal with those specific problems. +- ƒƒO‚ÍAÄŒ»‚·‚é‚Ì‚ª“‚¢ƒoƒOiƒvƒƒ_ƒNƒVƒ‡ƒ“ŠÂ‹«‚Å”­¶‚·‚é‚à‚Ì‚ÌAƒeƒXƒgŠÂ‹«‚Å‚ÍÄŒ»‚Å‚«‚È‚¢ƒoƒO‚È‚Çj‚ÉŠÖ‚·‚é—L—p‚Èî•ñ‚ð’ñ‹Ÿ‚µ‚Ü‚·B +- ƒƒO‚ÍAƒXƒe[ƒgƒƒ“ƒgŠÔ‚ÌŽžŠÔ‚ÌŒo‰ß‚È‚ÇAƒpƒtƒH[ƒ}ƒ“ƒX‚ÉŠÖ˜A‚·‚铌v‚¨‚æ‚уf[ƒ^‚ð’ñ‹Ÿ‚Å‚«‚Ü‚·B +- \¬‰Â”\‚Èê‡AƒƒO‚͈ê”Ê“I‚Èî•ñ‚ðƒLƒƒƒvƒ`ƒƒ‚µ‚ÄA“Á’è‚Ì–â‘è‚ðˆ—‚·‚邽‚ß‚¾‚¯‚ɃR[ƒh‚ðC³‚¨‚æ‚Ñ/‚Ü‚½‚ÍăfƒvƒƒC‚·‚邱‚ƂȂ­A—\Šú‚µ‚È‚¢“Á’è‚Ì–â‘è‚ðƒfƒoƒbƒO‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -The amount to output into the log is always a compromise between information and brevity. Too much information makes the log expensive and produces *scroll blindness*, making it hard to find the information you need. Too little information and it may not contain what you need. For this reason, making what is output configurable is very useful. Typically, each record in the log will identify its position in the source code, the thread that executed it if applicable, the precise time of execution, and, commonly, an additional useful piece of information, such as the value of some variable, the amount of free memory, the number of data objects, etc. These log statements are sprinkled throughout the source code, particularly at major functionality points and around risky code. Each statement can be assigned a level and will only output a record if the system is currently configured to output that level. You should design the log statements to address problems that you anticipate. Anticipate the need to measure performance. - -If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. +ƒƒO‚Éo—Í‚·‚é—Ê‚ÍAî•ñ‚ÆŠÈŒ‰‚³‚̊Ԃ̑˦“_‚Å‚·Bî•ñ‚ª‘½‚·‚¬‚邯ƒƒO‚ª‚‰¿‚ɂȂèA*ƒXƒNƒ[ƒ‹ƒuƒ‰ƒCƒ“ƒh*‚ª”­¶‚µA•K—v‚Èî•ñ‚ðŒ©‚Â‚¯‚邱‚Æ‚ª“‚­‚È‚è‚Ü‚·Bî•ñ‚ª­‚È‚·‚¬A•K—v‚Èî•ñ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B‚±‚Ì‚½‚ßAo—Í‚ð\¬‰Â”\‚É‚·‚邱‚Ƃ͔ñí‚ɕ֗˜‚Å‚·B’ÊíAƒƒO“à‚ÌŠeƒŒƒR[ƒh‚ÍAƒ\[ƒXƒR[ƒh“à‚̈ʒuAŽÀs‰Â”\‚Èꇂ͂»‚ê‚ðŽÀs‚µ‚½ƒXƒŒƒbƒhAŽÀs‚̳Šm‚ÈŽžA‚¨‚æ‚шê”Ê“I‚ÉA•Ï”‚Ì’lAƒf[ƒ^ƒIƒuƒWƒFƒNƒg‚Ì”‚ȂǂªŠÜ‚Ü‚ê‚Ü‚·B‚±‚ê‚ç‚̃ƒOƒXƒe[ƒgƒƒ“ƒg‚ÍAƒ\[ƒXƒR[ƒh‘S‘̂ɂ킽‚Á‚ÄA“Á‚ÉŽå—v‹@”\“_‚âŠëŒ¯‚ȃR[ƒh‚ÌŽü‚è‚ÉŽUÝ‚µ‚Ä‚¢‚Ü‚·BŠeƒXƒe[ƒgƒƒ“ƒg‚ɃŒƒxƒ‹‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«AƒVƒXƒeƒ€‚ªŒ»Ý‚»‚̃Œƒxƒ‹‚ðo—Í‚·‚邿‚¤‚Éݒ肳‚ê‚Ä‚¢‚éꇂɂ̂݃ŒƒR[ƒh‚ðo—Í‚µ‚Ü‚·B—\‘z‚³‚ê‚é–â‘è‚ɑΈ‚·‚邽‚ß‚ÉAƒƒOƒXƒe[ƒgƒƒ“ƒg‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒpƒtƒH[ƒ}ƒ“ƒX‚𑪒肷‚é•K—v«‚ð—\Šú‚µ‚Ü‚·B +‰i‘±“I‚ȃƒO‚ª‚ ‚éꇂÍAƒƒOƒŒƒR[ƒh‚ÉŠÖ‚µ‚Ĉóüƒ‰ƒCƒ“‚ðŽÀs‚Å‚«‚邿‚¤‚ɂȂèAˆê•”‚̃fƒoƒbƒO•¶‚ªƒƒMƒ“ƒOƒVƒXƒeƒ€‚ɉi‹v‚ɒljÁ‚³‚ê‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index 72e26d6..2a9b09f 100644 --- a/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,11 +1,11 @@ # How to Understand Performance Problems [//]: # (Version:1.0.0) -Learning to understand the performance of a running system is unavoidable for the same reason that learning debugging is. Even if you understand perfectly precisely the cost of the code you write, your code will make calls into other software systems that you have little control over or visibility into. However, in practice performance problems are a little different and a little easier than debugging in general. +ŽÀs’†‚̃VƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ð—‰ð‚·‚邱‚Æ‚ÍAƒfƒoƒbƒO‚ðŠwK‚·‚é‚̂Ɠ¯‚¶——R‚©‚ç”ð‚¯‚ç‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚ª‘‚¢‚½ƒR[ƒh‚̃RƒXƒg‚ðŠ®‘S‚ɳŠm‚É—‰ð‚µ‚Ä‚¢‚Ä‚àA‚ ‚È‚½‚̃R[ƒh‚ÍA‚ ‚È‚½‚ª‚Ù‚Æ‚ñ‚ǧŒä‚Å‚«‚È‚¢‚©‰ÂŽ‹‚Å‚ ‚鑼‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðŒÄ‚Ño‚·‚Å‚µ‚傤B‚µ‚©‚µAŽÀÛ‚É‚ÍAƒpƒtƒH[ƒ}ƒ“ƒX‚Ì–â‘è‚͈ê”Ê“I‚ɃfƒoƒbƒO‚æ‚è‚à­‚µˆÙ‚È‚èA­‚µŠÈ’P‚Å‚·B -Suppose that you or your customers consider a system or a subsystem to be too slow. Before you try to make it faster, you must build a mental model of why it is slow. To do this you can use a profiling tool or a good log to figure out where the time or other resources are really being spent. There is a famous dictum that 90% of the time will be spent in 10% of the code. I would add to that the importance of input/output expense (I/O) to performance issues. Often most of the time is spent in I/O in one way or another. Finding the expensive I/O and the expensive 10% of the code is a good first step to building your mental model. +‚ ‚È‚½‚â‚ ‚È‚½‚̌ڋq‚ªAƒVƒXƒeƒ€‚âƒTƒuƒVƒXƒeƒ€‚Ì‘¬“x‚ª’x‚·‚¬‚邯l‚¦‚Ä‚¢‚邯‚µ‚Ü‚·B‘¬‚­‚µ‚悤‚Æ‚·‚é‘O‚ÉA‚È‚º‚»‚ꂪ’x‚¢‚Ì‚©‚̸_ƒ‚ƒfƒ‹‚ð\’z‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ðs‚¤‚É‚ÍAƒvƒƒtƒ@ƒCƒŠƒ“ƒOƒc[ƒ‹‚Ü‚½‚Í“K؂ȃƒO‚ðŽg—p‚µ‚ÄAŽžŠÔ‚â‚»‚Ì‘¼‚ÌƒŠƒ\[ƒX‚ªŽÀÛ‚É”ï‚₳‚ê‚Ä‚¢‚éꊂð“Á’肵‚Ü‚·B‚»‚ÌŽžŠÔ‚Ì90“‚ªƒR[ƒh‚Ì10“‚É”ï‚₳‚ê‚邯‚¢‚¤—L–¼‚ÈŒ¾—t‚ª‚ ‚è‚Ü‚·BŽ„‚Í‚»‚ê‚ɃpƒtƒH[ƒ}ƒ“ƒX‚Ì–â‘è‚ɑ΂·‚é“üo—Í”ï—piI / Oj‚Ìd—v«‚ð’ljÁ‚µ‚Ü‚·B‘½‚­‚Ìê‡A‚Ù‚Æ‚ñ‚Ç‚Ìê‡AI / O‚Í‚ ‚éˆÓ–¡‚Å”ï‚₳‚ê‚Ü‚·B‚‰¿‚ÈI / O‚ƃR[ƒh‚Ì‚‰¿‚È10“‚ðŒ©‚Â‚¯‚邱‚Æ‚ÍA‚ ‚È‚½‚̃ƒ“ƒ^ƒ‹ƒ‚ƒfƒ‹‚ð\’z‚·‚邽‚߂̑æˆê•à‚Å‚·B -There are many dimensions to the performance of a computer system, and many resources consumed. The first resource to measure is *wall-clock time*, the total time that passes for the computation. Logging *wall-clock time* is particularly valuable because it can inform about unpredictable circumstances that arise in situations where other profiling is impractical. However, this may not always represent the whole picture. Sometimes something that takes a little longer but doesn't burn up so many processor seconds will be much better in the computing environment you actually have to deal with. Similarly, memory, network bandwidth, database or other server accesses may, in the end, be far more expensive than processor seconds. +ƒRƒ“ƒsƒ…[ƒ^ƒVƒXƒeƒ€‚Ì«”\‚ɂ͑½‚­‚ÌŽŸŒ³‚ª‚ ‚èA‘½‚­‚ÌƒŠƒ\[ƒX‚ªÁ”‚ê‚Ü‚·B‘ª’è‚·‚éʼn‚ÌƒŠƒ\[ƒX‚ÍA* wall-clock time *‚Å‚·B‚±‚ê‚ÍAŒvŽZ‚É•K—v‚ȇŒvŽžŠÔ‚Å‚·BƒƒMƒ“ƒO*ƒEƒH[ƒ‹ƒNƒƒbƒNŽžŠÔ*‚ÍA‘¼‚̃vƒƒtƒ@ƒCƒŠƒ“ƒO‚ªŽÀ—p“I‚łȂ¢ó‹µ‚Å‹N‚±‚é—\‘ª•s‰Â”\‚È󋵂ɂ‚¢‚Ä’Ê’m‚Å‚«‚邽‚ßA“Á‚Éd—v‚Å‚·B‚µ‚©‚µA‚±‚ê‚Í•K‚¸‚µ‚à‰æ‘œ‘S‘Ì‚ð•\‚·‚Ƃ͌À‚ç‚È‚¢Bꇂɂæ‚Á‚Ăͭ‚µŽžŠÔ‚ª‚©‚©‚è‚Ü‚·‚ªAŽÀۂɈ—‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ƒRƒ“ƒsƒ…[ƒeƒBƒ“ƒOŠÂ‹«‚Å‚ÍA”ñí‚É‘½‚­‚̃vƒƒZƒbƒT•b‚ðÁ”ï‚·‚é‚à‚̂͂¸‚Á‚Æ—Ç‚¢‚Å‚µ‚傤B“¯—l‚ÉAƒƒ‚ƒŠ[Aƒlƒbƒgƒ[ƒN‘шæ•Aƒf[ƒ^ƒx[ƒX‚Ü‚½‚Í‘¼‚̃T[ƒo[‚ւ̃AƒNƒZƒX‚ÍAÅI“I‚ɃvƒƒZƒbƒT•b‚æ‚è‚à‚͂邩‚É‚‰¿‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·B -Contention for shared resources that are synchronized can cause deadlock and starvation. Deadlock is the inability to proceed because of improper synchronization or resource demands. Starvation is the failure to schedule a component properly. If it can be at all anticipated, it is best to have a way of measuring this contention from the start of your project. Even if this contention does not occur, it is very helpful to be able to assert that with confidence. +“¯Šú‰»‚³‚ꂽ‹¤—LƒŠƒ\[ƒX‚Ì‹£‡‚ÍAƒfƒbƒhƒƒbƒN‚Æ‹Q‰ì‚ðˆø‚«‹N‚±‚·‰Â”\«‚ª‚ ‚è‚Ü‚·BƒfƒbƒhƒƒbƒN‚ÍA•s“K؂ȓ¯Šú‚⃊ƒ\[ƒX—v‹‚Ì‚½‚߂Ɉ—‚Å‚«‚È‚¢‚±‚Ƃł·B‹Q‰ì‚Æ‚ÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚ð“K؂ɃXƒPƒWƒ…[ƒ‹‚·‚邱‚Ƃł͂ ‚è‚Ü‚¹‚ñB‚»‚ꂪ‚·‚ׂĊú‘Ò‚Å‚«‚éꇂÍAƒvƒƒWƒFƒNƒg‚ÌŠJŽnŽž‚©‚炱‚Ì‹£‡‚𑪒肷‚é•û–@‚ª‚ ‚邱‚Æ‚ªÅ‘P‚Å‚·B‚±‚Ì‹£‡‚ª‹N‚±‚ç‚È‚­‚Ä‚àA‚»‚ê‚ðŽ©M‚ð‚à‚Á‚Ä•\–¾‚Å‚«‚邱‚Ƃ͔ñí‚É—L—p‚Å‚·B Next [How to Fix Performance Problems](06-How to Fix Performance Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index fbed002..426edcb 100644 --- a/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,13 +1,12 @@ # How to Fix Performance Problems [//]: # (Version:1.0.0) -Most software projects can be made with relatively little effort 10 to 100 times faster than they are at the time they are first released. Under time-to-market pressure, it is both wise and effective to choose a solution that gets the job done simply and quickly, but less efficiently than some other solution. However, performance is a part of usability, and often it must eventually be considered more carefully. +‚Ù‚Æ‚ñ‚ǂ̃\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ÍAʼn‚ÉƒŠƒŠ[ƒX‚³‚ꂽ‚Æ‚«‚æ‚è‚à10?100”{‚Ì‘¬“x‚Å”äŠr“IŠÈ’P‚É쬂ł«‚Ü‚·BŽs꓊“ü‚܂ł̎žŠÔ‚ð”—‚ç‚ê‚é’†‚ÅA’Pƒ‚©‚Âv‘¬‚Éì‹Æ‚ðs‚¤ƒ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð‘I‘ð‚·‚é‚±‚Æ‚ÍAŒ«–¾‚ÅŒø‰Ê“I‚Å‚·‚ªA‘¼‚̃\ƒŠƒ…[ƒVƒ‡ƒ“‚æ‚èŒø—¦“I‚ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAƒpƒtƒH[ƒ}ƒ“ƒX‚̓†[ƒUƒrƒŠƒeƒB‚̈ꕔ‚Å‚ ‚èA‚µ‚΂µ‚ÎÅI“I‚ɂ͂æ‚èTd‚ÉŒŸ“¢‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -The key to improving the performance of a very complicated system is to analyse it well enough to find the *bottlenecks*, or places where most of the resources are consumed. There is not much sense in optimizing a function that accounts for only 1% of the computation time. As a rule of thumb you should think carefully before doing anything unless you think it is going to make the system or a significant part of it at least twice as fast. There is usually a way to do this. Consider the test and quality assurance effort that your change will require. Each change brings a test burden with it, so it is much better to have a few big changes. +”ñí‚É•¡ŽG‚ȃVƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ðŒüコ‚¹‚邽‚߂̌®‚ÍAƒ{ƒgƒ‹ƒlƒbƒN*‚⃊ƒ\[ƒX‚̑啔•ª‚ªÁ”‚ê‚éêŠ‚ðŒ©‚Â‚¯‚é‚Ì‚É\•ª‚É•ªÍ‚·‚邱‚Ƃł·BŒvŽZŽžŠÔ‚̂킸‚©1“‚ðè‚ß‚éŠÖ”‚ÌÅ“K‰»‚ɂ͂ ‚Ü‚èˆÓ–¡‚ª‚ ‚è‚Ü‚¹‚ñBŒoŒ±‘¥‚Æ‚µ‚ÄAƒVƒXƒeƒ€‚âƒVƒXƒeƒ€‚Ìd—v‚È•”•ª‚ð­‚È‚­‚Æ‚à2”{‘¬‚­‚·‚邯Žv‚í‚È‚¢ŒÀ‚èA‰½‚©‚ð‚·‚é‘O‚ÉTd‚Él‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B’Ê킱‚ê‚ðs‚¤•û–@‚ª‚ ‚è‚Ü‚·B•ÏX‚É•K—v‚ȃeƒXƒg‚Æ•iŽ¿•ÛØ‚Ì“w—Í‚ðŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B‚»‚ꂼ‚ê‚Ì•ÏX‚É‚æ‚Á‚ăeƒXƒg‚Ì•‰’S‚ª‚©‚©‚è‚Ü‚·‚Ì‚ÅA‚¢‚­‚‚©‚̑傫‚È•ÏX‚ð‰Á‚¦‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B -After you've made a two-fold improvement in something, you need to at least rethink and perhaps reanalyze to discover the next-most-expensive bottleneck in the system, and attack that to get another two-fold improvement. +‰½‚©‚ð2”{‚ɉü‘P‚µ‚½Œã‚ÍAƒVƒXƒeƒ€‚Ì’†‚ÅŽŸ‚É‚‰¿‚ȃ{ƒgƒ‹ƒlƒbƒN‚ð”­Œ©‚·‚邽‚߂ɭ‚È‚­‚Æ‚àÄl‚µAÄ•ªÍ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -Often, the bottlenecks in performance will be an example of counting cows by counting legs and dividing by four, instead of counting heads. For example, I've made errors such as failing to provide a relational database system with a proper index on a column I look up a lot, which probably made it at least 20 times slower. Other examples include doing unnecessary I/O in inner loops, leaving in debugging statements that are no longer needed, unnecessary memory allocation, and, in particular, inexpert use of libraries and other subsystems that are often poorly documented with respect to performance. This kind of improvement is sometimes called *low-hanging fruit*, meaning that it can be easily picked to provide some benefit. - -What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down. You can continue making small improvements or you can seriously redesign a system or a subsystem. (This is a great opportunity to use your skills as a good programmer, not only in the new design but also in convincing your boss that this is a good idea.) However, before you argue for the redesign of a subsystem, you should ask yourself whether or not your proposal will make it five to ten time better. +‘½‚­‚Ìê‡AƒpƒtƒH[ƒ}ƒ“ƒX‚̃{ƒgƒ‹ƒlƒbƒN‚ÍA“ª‚𔂦‚é‘ã‚í‚è‚ÉA‘«‚𔂦A4‚ÅŠ„‚邱‚Ƃɂæ‚Á‚Ä‹‚𔂦‚é—á‚ɂȂè‚Ü‚·B‚½‚Æ‚¦‚ÎAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒXƒVƒXƒeƒ€‚É“K؂ȃCƒ“ƒfƒbƒNƒX‚ð•t‚¯‚邱‚Æ‚ª‚Å‚«‚¸A‘½‚­‚ÌŒŸõ‚ðs‚¤‚ÆA­‚È‚­‚Æ‚à20”{’x‚­‚È‚é‚Ȃǂ̃Gƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B‘¼‚Ì—á‚Æ‚µ‚Ä‚ÍA“à•”ƒ‹[ƒv‚Å•s•K—v‚ÈI / O‚ðŽÀs‚µA•s—v‚ȃfƒoƒbƒO•¶‚ðŽc‚µ‚½‚èA•s•K—v‚ȃƒ‚ƒŠŠ„‚è“–‚ÄA“Á‚ɃpƒtƒH[ƒ}ƒ“ƒX‚ÉŠÖ‚µ‚Ä•¶‘‰»‚³‚ê‚Ä‚¢‚È‚¢ƒ‰ƒCƒuƒ‰ƒŠ‚â‚»‚Ì‘¼‚̃TƒuƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‹“‚°‚ç‚ê‚Ü‚·B‚±‚ÌŽí‚̉ü‘P‚ÍŽžXu’áŠ|‚¯‚̉ʎÀv‚ƌĂ΂êA‚¢‚­‚‚©‚Ì—˜“_‚ð’ñ‹Ÿ‚·‚邽‚߂ɊȒP‚É‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B +‚Ԃ牺‚ª‚Á‚Ä‚¢‚é‰Ê•¨‚ª‘«‚è‚È‚­‚È‚Á‚Ä‚©‚çA‚ ‚È‚½‚͉½‚ð‚µ‚Ü‚·‚©H‚³‚ÄA‚ ‚È‚½‚Í‚à‚Á‚Æã‚És‚­‚±‚Æ‚ª‚Å‚«‚éA‚Ü‚½‚Í–Ø‚ðƒ`ƒ‡ƒbƒv‚·‚éB¬‚³‚ȉü‘P‚𑱂¯‚邱‚Æ‚àAƒVƒXƒeƒ€‚âƒTƒuƒVƒXƒeƒ€‚ð^Œ•‚ÉÄÝŒv‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B i‚±‚ê‚ÍAV‚µ‚¢ÝŒv‚¾‚¯‚łȂ­AãŽi‚É‚±‚ꂪ—Ç‚¢l‚¦‚Å‚ ‚邱‚Æ‚ð”[“¾‚³‚¹‚é—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Æ‚µ‚Ă̂ ‚È‚½‚̃XƒLƒ‹‚ðŽg—p‚·‚éâD‚Ì‹@‰ï‚Å‚·Bj‚µ‚©‚µAƒTƒuƒVƒXƒeƒ€‚ÌÄÝŒv‚ɂ‚¢‚Ę_‚¶‚é‘O‚ÉA‚ ‚È‚½‚Ì’ñˆÄ‚ª‚»‚ê‚ð5?10”{—Ç‚­‚·‚é‚©‚Ç‚¤‚©‚É‚©‚©‚í‚炸A Next [How to Optimize Loops](07-How to Optimize Loops.md) diff --git a/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index f73305d..0b0ca4e 100644 --- a/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,15 +1,14 @@ # How to Optimize Loops [//]: # (Version:1.0.0) -Sometimes you'll encounter loops, or recursive functions, that take a long time to execute and are bottlenecks in your product. Before you try to make the loop a little faster, spend a few minutes considering if there is a way to remove it entirely. Would a different algorithm do? Could you compute that while computing something else? If you can't find a way around it, then you can optimize the loop. This is simple; move stuff out. In the end, this will require not only ingenuity but also an understanding of the expense of each kind of statement and expression. Here are some suggestions: +Žž‚É‚ÍAŽÀs‚ÉŽžŠÔ‚ª‚©‚©‚èA»•i‚̃{ƒgƒ‹ƒlƒbƒN‚ƂȂ郋[ƒv‚âÄ‹AŠÖ”‚ª”­¶‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·Bƒ‹[ƒv‚ð­‚µ‘‚­‚·‚é‘O‚ÉAŠ®‘S‚É휂·‚é•û–@‚ª‚ ‚é‚©‚Ç‚¤‚©‚ðŒŸ“¢‚µ‚ÄA”•ª‚ð”ï‚₵‚Ä‚­‚¾‚³‚¢B•ʂ̃Aƒ‹ƒSƒŠƒYƒ€‚ª‚â‚è‚Ü‚·‚©H‘¼‚ɉ½‚©‚ðŒvŽZ‚µ‚È‚ª‚ç‚»‚ê‚ðŒvŽZ‚Å‚«‚Ü‚·‚©H‰ñ”ðô‚ªŒ©‚‚©‚ç‚È‚¢ê‡‚ÍAƒ‹[ƒv‚ðÅ“K‰»‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍŠÈ’P‚Å‚·B•¨‚ð“®‚©‚·BŒ‹‹Ç‚̂Ƃ±‚ëA‚±‚ê‚ɂ͓Ƒn«‚¾‚¯‚łȂ­AŠeŽí—Þ‚Ì’Âq‚Æ•\Œ»‚Ì”ï—p‚Ì—‰ð‚à•K—v‚ƂȂè‚Ü‚·B‚±‚±‚É‚¢‚­‚‚©‚Ì’ñˆÄ‚ª‚ ‚è‚Ü‚·F -- Remove floating point operations. -- Don't allocate new memory blocks unnecessarily. -- Fold constants together. -- Move I/O into a buffer. -- Try not to divide. -- Try not to do expensive typecasts. -- Move a pointer rather than recomputing indices. - -The cost of each of these operations depends on your specific system. On some systems compilers and hardware do these things for you. Clear, efficient code is better than code that requires an understanding of a particular platform. +- •‚“®¬”“_‰‰ŽZ‚ð휂µ‚Ü‚·B +- V‚µ‚¢ƒƒ‚ƒŠƒuƒƒbƒN‚ð•s•K—v‚ÉŠ„‚è“–‚ĂȂ¢‚Å‚­‚¾‚³‚¢B +- ’蔂ðˆê‚É܂肽‚½‚݂܂·B +- I / O‚ðƒoƒbƒtƒ@‚Ɉړ®‚·‚éB +- •ª—ô‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +- ‚‰¿‚ÈŒ^ƒLƒƒƒXƒg‚ð‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +- ƒCƒ“ƒfƒbƒNƒX‚ðÄŒvŽZ‚·‚é‚̂ł͂Ȃ­Aƒ|ƒCƒ“ƒ^‚ðˆÚ“®‚·‚éB +‚±‚ê‚ç‚ÌŠe‘€ì‚̃RƒXƒg‚ÍA“Á’è‚̃VƒXƒeƒ€‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚¢‚­‚‚©‚̃VƒXƒeƒ€‚Å‚ÍAƒRƒ“ƒpƒCƒ‰‚ƃn[ƒhƒEƒFƒA‚ª‚±‚ê‚ç‚Ì‚±‚Æ‚ðs‚¢‚Ü‚·B–¾Šm‚ÅŒø—¦“I‚ȃR[ƒh‚ÍA“Á’è‚̃vƒ‰ƒbƒgƒtƒH[ƒ€‚Ì—‰ð‚ð•K—v‚Æ‚·‚éƒR[ƒh‚æ‚è‚à—D‚ê‚Ä‚¢‚Ü‚·B Next [How to Deal with I/O Expense](08-How to Deal with IO Expense.md) diff --git a/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index 81a3a15..0aa2165 100644 --- a/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,13 +1,13 @@ # How to Deal with I/O Expense [//]: # (Version:1.0.0) -For a lot of problems, processors are fast compared to the cost of communicating with a hardware device. This cost is usually abbreviated I/O, and can include network cost, disk I/O, database queries, file I/O, and other use of some hardware not very close to the processor. Therefore building a fast system is often more a question of improving I/O than improving the code in some tight loop, or even improving an algorithm. +‘½‚­‚Ì–â‘è‚ɑ΂µ‚ÄAƒvƒƒZƒbƒT‚̓n[ƒhƒEƒFƒAƒfƒoƒCƒX‚Ƃ̒ÊMƒRƒXƒg‚É”ä‚ׂĂ‘¬‚Å‚·B‚±‚̃RƒXƒg‚ÍA’Êí‚ÍI / O‚ÆÈ—ª‚³‚êAƒlƒbƒgƒ[ƒNƒRƒXƒgAƒfƒBƒXƒNI / OAƒf[ƒ^ƒx[ƒXƒNƒGƒŠAƒtƒ@ƒCƒ‹I / OA‚¨‚æ‚уvƒƒZƒbƒT‚É‚ ‚Ü‚è‹ßÚ‚µ‚È‚¢ƒn[ƒhƒEƒFƒA‚ÌŽg—p‚ȂǂªŠÜ‚Ü‚ê‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‚‘¬‚ȃVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ÍA‚µ‚΂µ‚΂¢‚­‚‚©‚Ì‚«‚‚¢ƒ‹[ƒv‚ŃR[ƒh‚ð‰ü‘P‚·‚邱‚ÆA‚Ü‚½‚̓Aƒ‹ƒSƒŠƒYƒ€‚ð‰ü‘P‚·‚邱‚Æ‚æ‚è‚àI / O‚ð‰ü‘P‚·‚邱‚Ƃ̖â‘è‚Å‚·B -There are two very fundamental techniques to improving I/O: caching and representation. Caching is avoiding I/O (generally avoiding the reading of some abstract value) by storing a copy of that value locally so no I/O is performed to get the value. The first key to caching is to make it crystal clear which data is the master and which are copies. There is only one master - period. Caching brings with it the danger that the copy sometimes can't reflect changes to the master instantaneously. +I / O‚ð‰ü‘P‚·‚é‚É‚ÍAƒLƒƒƒbƒVƒ“ƒO‚Æ•\Œ»‚Ì2‚‚̔ñí‚ÉŠî–{“I‚ȃeƒNƒjƒbƒN‚ª‚ ‚è‚Ü‚·BƒLƒƒƒbƒVƒ“ƒO‚ÍA‚»‚Ì’l‚̃Rƒs[‚ðƒ[ƒJƒ‹‚ÉŠi”[‚·‚邱‚Æ‚ÅI / O‚ð‰ñ”ð‚µ‚Äiˆê”Ê“I‚ɂ͉½‚ç‚©‚Ì’ŠÛ“I‚È’l‚̓ǂݎæ‚è‚ð”ð‚¯‚éjA’l‚ðŽæ“¾‚·‚邽‚ß‚ÉI / O‚ÍŽÀs‚³‚ê‚Ü‚¹‚ñBƒLƒƒƒbƒVƒ“ƒO‚Ì‘æˆê‚ÌŒ®‚ÍA‚ǂ̃f[ƒ^‚ªƒ}ƒXƒ^[‚Å‚ ‚èA‚ǂ̃f[ƒ^‚ªƒRƒs[‚Å‚ ‚é‚©‚𖾊m‚É‚·‚邱‚Ƃł·Bƒ}ƒXƒ^[ŠúŠÔ‚Í1‚‚¾‚¯‚Å‚·BƒLƒƒƒbƒVƒ“ƒO‚ÍAƒRƒs[‚ªuŽž‚Ƀ}ƒXƒ^[‚Ö‚Ì•ÏX‚𔽉f‚Å‚«‚È‚¢‚±‚Æ‚ª‚ ‚邯‚¢‚¤ŠëŒ¯«‚ð‚à‚½‚炵‚Ü‚·B -Representation is the approach of making I/O cheaper by representing data more efficiently. This is often in tension with other demands, like human readability and portability. +•\Œ»‚ÍAƒf[ƒ^‚ð‚æ‚èŒø—¦“I‚É•\Œ»‚·‚邱‚Ƃɂæ‚Á‚ÄI / O‚ðˆÀ‚­‚·‚éƒAƒvƒ[ƒ`‚Å‚·B‚±‚ê‚ÍAlŠÔ‚̉“ǫ‚â‰Â”À«‚È‚ÇA‘¼‚Ì—v‹‚Ƌْ£‚µ‚Ä‚¢‚邱‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B -Representations can often be improved by a factor of two or three from their first implementation. Techniques for doing this include using a binary representation instead of one that is human readable, transmitting a dictionary of symbols along with the data so that long symbols don't have to be encoded, and, at the extreme, things like Huffman encoding. +•\Œ»‚ÍAʼn‚ÌŽÀ‘•‚©‚ç2?3”{‚ɉü‘P‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ðs‚¤‚½‚߂̋Zp‚É‚ÍAlŠÔ‚ª“ǂ߂é‚à‚̂̑ã‚í‚è‚ɃoƒCƒiƒŠ•\Œ»‚ðŽg—p‚·‚邱‚ÆA’·‚¢ƒVƒ“ƒ{ƒ‹‚ðƒGƒ“ƒR[ƒh‚·‚é•K—v‚ª‚È‚¢‚悤‚ɃVƒ“ƒ{ƒ‹‚ÌŽ«‘‚ð‘—M‚·‚邱‚ÆA‚»‚µ‚ċɒ[‚Ƀnƒtƒ}ƒ“•„†‰»‚̂悤‚È‚±‚Æ‚ªŠÜ‚Ü‚ê‚Ü‚·B -A third technique that is sometimes possible is to improve the locality of reference by pushing the computation closer to the data. For instance, if you are reading some data from a database and computing something simple from it, such as a summation, try to get the database server to do it for you. This is highly dependent on the kind of system you're working with, but you should explore it. +Žž‚ɂ͉”\‚È‘æ3‚Ì‹Z–@‚ÍAŒvŽZ‚ðƒf[ƒ^‚ɋ߂¯‚邱‚Ƃɂæ‚Á‚ÄŽQƂ̋NJ«‚ð‰ü‘P‚·‚邱‚Ƃł ‚éB‚½‚Æ‚¦‚ÎAƒf[ƒ^ƒx[ƒX‚©‚ç‚¢‚­‚‚©‚̃f[ƒ^‚ð“ǂݞ‚ÝAWŒv‚Ȃǂ̒Pƒ‚È‚à‚Ì‚ðŒvŽZ‚·‚éꇂÍAƒf[ƒ^ƒx[ƒXƒT[ƒo[‚Ŏ擾‚µ‚Ä‚­‚¾‚³‚¢B‚±‚ê‚Í‚ ‚È‚½‚ªì‹Æ‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚ÌŽí—ނɑ傫‚­ˆË‘¶‚µ‚Ü‚·‚ªA‚»‚ê‚𒲂ׂé•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Manage Memory](09-How to Manage Memory.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md index 8c657c3..58f9ea6 100644 --- a/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -1,15 +1,15 @@ # How to Manage Memory [//]: # (Version:1.0.0) -Memory is a precious resource that you can't afford to run out of. You can ignore it for a while but eventually you will have to decide how to manage memory. +ƒƒ‚ƒŠ‚ÍA‚ ‚È‚½‚ªŽg‚¢‰Ê‚½‚µ‚Ă͂Ȃç‚È‚¢‹Md‚ÈƒŠƒ\[ƒX‚Å‚·B‚µ‚΂炭‚»‚ê‚𖳎‹‚·‚邱‚Ƃ͂ł«‚Ü‚·‚ªAÅI“I‚ɂ̓ƒ‚ƒŠ‚ÌŠÇ—•û–@‚ðŒˆ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -Space that needs to persist beyond the scope of a single subroutine is often called *heap allocated*. A chunk of memory is useless, hence *garbage*, when nothing refers to it. Depending on the system you use, you may have to explicitly deallocate memory yourself when it is about to become garbage. More often you may be able to use a system that provides a *garbage collector*. A garbage collector notices garbage and frees its space without any action required by the programmer. Garbage collection is wonderful: it lessens errors and increases code brevity and concision cheaply. Use it when you can. +’Pˆê‚̃Tƒuƒ‹[ƒ`ƒ“‚͈̔͂𒴂¦‚ÄŽ‘±‚·‚é•K—v‚ª‚ ‚é—̈æ‚ÍA‚µ‚΂µ‚Î* heap allocated *‚ƌĂ΂ê‚Ü‚·Bƒƒ‚ƒŠ‚̃`ƒƒƒ“ƒN‚Í–ð‚É—§‚½‚È‚¢‚Ì‚ÅA‰½‚àŒ¾‹y‚µ‚Ä‚¢‚È‚¢‚Æ‚«‚Í*ƒSƒ~*‚Å‚·B‚ ‚È‚½‚ªŽg—p‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚É‚æ‚Á‚Ä‚ÍAƒƒ‚ƒŠ‚ª‚²‚݂ɂȂÁ‚Ä‚µ‚Ü‚¤‚Æ‚«‚ÉAŽ©•ª‚Å–¾Ž¦“I‚Ƀƒ‚ƒŠ‚ÌŠ„‚è“–‚Ä‚ð‰ðœ‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚æ‚è•p”É‚É*ƒKƒx[ƒWƒRƒŒƒNƒ^*‚ð’ñ‹Ÿ‚·‚éƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BƒKƒx[ƒWƒRƒŒƒNƒ^‚̓Sƒ~‚É‹C‚¢‚ÄAƒvƒƒOƒ‰ƒ}‚ª—v‹‚·‚éƒAƒNƒVƒ‡ƒ“‚È‚µ‚ɃXƒy[ƒX‚ð‰ð•ú‚µ‚Ü‚·BƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚Í‘f°‚炵‚¢‚Å‚·FƒGƒ‰[‚ðŒ¸‚ç‚µAƒR[ƒh‚ÌŠÈŒ‰‚³‚ÆŠÈŒ‰‚³‚ðˆÀ‚­‚µ‚Ü‚·B‰Â”\‚Å‚ ‚ê‚ÎŽg—p‚µ‚Ä‚­‚¾‚³‚¢B -But even with garbage collection, you can fill up all memory with garbage. A classic mistake is to use a hash table as a cache and forget to remove the references in the hash table. Since the reference remains, the referent is non-collectable but useless. This is called a *memory leak*. You should look for and fix memory leaks early. If you have long running systems memory may never be exhausted in testing but will be exhausted by the user. +‚µ‚©‚µAƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚Å‚ ‚Á‚Ä‚àA‚·‚ׂẴƒ‚ƒŠ‚ðƒSƒ~‚Å‚¢‚Á‚Ï‚¢‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŒÃ“T“I‚ȊԈႢ‚ÍAƒnƒbƒVƒ…ƒe[ƒuƒ‹‚ðƒLƒƒƒbƒVƒ…‚Æ‚µ‚ÄŽg—p‚µAƒnƒbƒVƒ…ƒe[ƒuƒ‹“à‚ÌŽQÆ‚ð휂·‚邱‚Æ‚ð–Y‚ê‚Ä‚µ‚Ü‚¢‚Ü‚·BŽQÆ‚ªŽc‚Á‚Ä‚¢‚é‚Ì‚ÅAŽwަ‘ÎÛ‚ÍŽûW‚Å‚«‚È‚¢‚à‚Ì‚ÌA–ð‚É—§‚½‚È‚¢B‚±‚ê‚Í*ƒƒ‚ƒŠƒŠ[ƒN*‚ƌĂ΂ê‚Ü‚·Bƒƒ‚ƒŠƒŠ[ƒN‚ð‘Šú‚ÉŒ©‚‚¯‚ÄC³‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B’·ŽžŠÔ‰Ò“®‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚Å‚ÍAƒeƒXƒg‚Ńƒ‚ƒŠ[‚ªŽg‚¢‰Ê‚½‚³‚ê‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñ‚ªAƒ†[ƒU[‚ÍŽg‚¢‰Ê‚½‚³‚ê‚Ü‚·B -The creation of new objects is moderately expensive on any system. Memory allocated directly in the local variables of a subroutine, however, is usually cheap because the policy for freeing it can be very simple. You should avoid unnecessary object creation. +V‚µ‚¢ƒIƒuƒWƒFƒNƒg‚Ì쬂ÍA‚ǂ̃VƒXƒeƒ€‚Å‚à“K“x‚É‚‰¿‚Å‚·B‚µ‚©‚µAƒTƒuƒ‹[ƒ`ƒ“‚̃[ƒJƒ‹•Ï”‚É’¼ÚŠ„‚è“–‚Ä‚ç‚ꂽƒƒ‚ƒŠ‚ÍA’ÊíA‚»‚ê‚ð‰ð•ú‚·‚é•ûj‚ª”ñí‚ÉŠÈ’P‚Ȃ̂ÅAˆÀ‰¿‚Å‚·B•s—v‚ȃIƒuƒWƒFƒNƒg‚Ì쬂ð”ð‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·B -An important case occurs when you can define an upper bound on the number of objects you will need at one time. If these objects all take up the same amount of memory, you may be able to allocate a single block of memory, or a buffer, to hold them all. The objects you need can be allocated and released inside this buffer in a set rotation pattern, so it is sometimes called a ring buffer. This is usually faster than heap allocation. +d—v‚ȃP[ƒX‚ÍAˆê“x‚É•K—v‚ȃIƒuƒWƒFƒNƒg”‚ÌãŒÀ‚ð’è‹`‚Å‚«‚邯‚«‚Å‚·B‚±‚ê‚ç‚̃IƒuƒWƒFƒNƒg‚ª‚·‚ׂ睂¶—ʂ̃ƒ‚ƒŠ‚ðè‚ß‚éꇂÍA‚»‚ê‚ç‚ð‚·‚×‚Ä•ÛŽ‚·‚邽‚ß‚ÉA’Pˆê‚̃ƒ‚ƒŠƒuƒƒbƒN‚Ü‚½‚̓oƒbƒtƒ@‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚Ü‚·B•K—v‚ȃIƒuƒWƒFƒNƒg‚ÍA‚±‚̃oƒbƒtƒ@“à‚Åݒ肳‚ꂽ‰ñ“]ƒpƒ^[ƒ“‚ÅŠ„‚è“–‚Ä‚ç‚ê‰ð•ú‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚µ‚½‚ª‚Á‚ÄAƒŠƒ“ƒOƒoƒbƒtƒ@‚ƌĂ΂ê‚邱‚Æ‚à‚ ‚è‚Ü‚·B‚±‚ê‚Í’ÊíAƒq[ƒvŠ„‚è“–‚Ä‚æ‚è‚à‚‘¬‚Å‚·B -Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form of garbage collection, such as reference counting, to do this for them. +ƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚É—Š‚é‚̂ł͂Ȃ­AŠ„‚è“–‚Ä‚ç‚ꂽƒXƒy[ƒX‚𖾎¦“I‚ɉð•ú‚·‚é•K—v‚ª‚ ‚éꇂª‚ ‚è‚Ü‚·BŽŸ‚ÉAŠ„‚è“–‚Ä‚ç‚ꂽƒƒ‚ƒŠ‚ÌŠeƒ`ƒƒƒ“ƒN‚ÉTd‚ȃCƒ“ƒeƒŠƒWƒFƒ“ƒX‚ð“K—p‚µA“K؂ȃ^ƒCƒ~ƒ“ƒO‚ÅŠ„‚è“–‚Ä‚ð‰ðœ‚·‚é•û–@‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·Bƒƒ\ƒbƒh‚ÍA쬂·‚éƒIƒuƒWƒFƒNƒg‚ÌŽí—Þ‚²‚ƂɈقȂéꇂª‚ ‚è‚Ü‚·Bƒƒ‚ƒŠŠ„‚è“–‚Ä‘€ì‚Ì‚·‚ׂĂ̎Às‚ªAƒƒ‚ƒŠŠ„‚è“–‚ĉ𜑀ì‚É‚æ‚Á‚ÄÅI“I‚Ɉê’v‚·‚邱‚Æ‚ðŠm”F‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚Í”ñí‚ɓ‚¢‚Ì‚ÅAƒvƒƒOƒ‰ƒ}‚ÍŽQƃJƒEƒ“ƒg‚Ȃǂ̊î–{“I‚ÈŒ`Ž®‚̃K[ƒxƒWƒRƒŒƒNƒVƒ‡ƒ“‚ðŽÀ‘•‚·‚邾‚¯‚Åς݂܂·B Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) diff --git a/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 40238bd..e288d99 100644 --- a/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,17 +1,17 @@ # How to Deal with Intermittent Bugs [//]: # (Version:1.0.0) -The intermittent bug is a cousin of the 50-foot-invisible-scorpion-from-outer-space kind of bug. This nightmare occurs so rarely that it is hard to observe, yet often enough that it can't be ignored. You can't debug because you can't find it. +’f‘±“I‚ȃoƒO‚ÍA50ƒtƒB[ƒg‚Ì•s‰ÂŽ‹‚Ì“dŽÔ‚©‚çŠO‰F’ˆ‚ÌŽí—ނ̃oƒO‚Ì‚¢‚Æ‚±‚Å‚·B‚±‚̈«–²‚Í”ñí‚ɂ܂ê‚Å‚ ‚èAŠÏŽ@‚·‚é‚͓̂‚¢‚Å‚·‚ªA‚µ‚΂µ‚΂»‚ê‚𖳎‹‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚ª‚»‚ê‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Ì‚ÅAƒfƒoƒbƒO‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -Although after 8 hours you will start to doubt it, the intermittent bug has to obey the same laws of logic everything else does. What makes it hard is that it occurs only under unknown conditions. Try to record the circumstances under which the bug does occur, so that you can guess what the variability really is. The condition may be related to data values, such as ‘This only happens when we enter *Wyoming* as a value.’ If that is not the source of variability, the next suspect should be improperly synchronized concurrency. +’f‘±“I‚ȃoƒO‚ÍA8ŽžŠÔŒã‚ɂ͋^–â‚ðŽ‚¿Žn‚߂܂·‚ªA‘¼‚Ì‚·‚ׂẴƒWƒbƒN‚Æ“¯‚¶–@‘¥‚É]‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ꂪ“‚¢‚Ì‚ÍA‚»‚ꂪ–¢’m‚ÌðŒ‰º‚ł̂݋N‚±‚邯‚¢‚¤‚±‚Ƃł·BƒoƒO‚ª”­¶‚·‚é󋵂ð‹L˜^‚µ‚ÄAƒoƒ‰ƒcƒL‚ª–{“–‚ɉ½‚Å‚ ‚é‚©‚ð„‘ª‚Å‚«‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢BðŒ‚̓f[ƒ^’l‚ÉŠÖ˜A‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B—Ⴆ‚ÎAƒƒCƒIƒ~ƒ“ƒO*‚ð’l‚Æ‚µ‚Ä“ü—Í‚·‚éꇂɂ̂ݔ­¶‚µ‚Ü‚·B‚»‚ꂪ•Ï“®«‚ÌŒ´ˆö‚łȂ¢ê‡AŽŸ‚Ì‹^˜f‚Í•Às«‚ª•s“K؂ɓ¯Šú‚³‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·B -Try, try, try to reproduce the bug in a controlled way. If you can't reproduce it, set a trap for it by building a logging system, a special one if you have to, that can log what you guess you need when it really does occur. Resign yourself to that if the bug only occurs in production and not at your whim, this may be a long process. The hints that you get from the log may not provide the solution but may give you enough information to improve the logging. The improved logging system may take a long time to be put into production. Then, you have to wait for the bug to reoccur to get more information. This cycle can go on for some time. +ƒoƒO‚ð§Œä‚³‚ꂽ•û–@‚ÅÄŒ»‚µ‚悤‚Æ‚µ‚Ă݂Ă­‚¾‚³‚¢B‚»‚ê‚ðÄŒ»‚Å‚«‚È‚¢ê‡‚ÍAƒƒMƒ“ƒOƒVƒXƒeƒ€‚ð\’z‚·‚邱‚ƂŃgƒ‰ƒbƒv‚ðݒ肵‚Ü‚·B•K—v‚Èꇂ͓Á•ʂȃƒOƒVƒXƒeƒ€‚ð쬂µAŽÀÛ‚É”­¶‚µ‚½‚Æ‚«‚É•K—v‚ÆŽv‚í‚ê‚é‚à‚Ì‚ðƒƒO‚É‹L˜^‚Å‚«‚Ü‚·BƒoƒO‚ª‚ ‚È‚½‚Ì‹C‚Ü‚®‚ê‚ł͂Ȃ­Aƒvƒƒ_ƒNƒVƒ‡ƒ“‚ł̂݋N‚±‚é‚È‚ç‚ÎA‚±‚ê‚Í’·‚¢ƒvƒƒZƒX‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒƒO‚©‚瓾‚ç‚ê‚éƒqƒ“ƒg‚͉ðŒˆô‚ð’ñ‹Ÿ‚µ‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒƒO‚ð‰ü‘P‚·‚é‚Ì‚É\•ª‚Èî•ñ‚ð’ñ‹Ÿ‚·‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‰ü—Ç‚³‚ꂽƒƒMƒ“ƒOƒVƒXƒeƒ€‚ÍA¶ŽY‚ɓГü‚·‚é‚܂łɒ·‚¢ŽžŠÔ‚ª‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ÌŒãAƒoƒO‚ªÄ”­‚µ‚Ä‚æ‚葽‚­‚Ìî•ñ‚𓾂é‚Ì‚ð‘Ò‚½‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃TƒCƒNƒ‹‚Í‚µ‚΂炭‚ÌŠÔ‘±‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B -The stupidest intermittent bug I ever created was in a multi-threaded implementation of a functional programming language for a class project. I had very carefully ensured correct concurrent evaluation of the functional program, good utilization of all the CPUs available (eight, in this case). I simply forgot to synchronize the garbage collector. The system could run a long time, often finishing whatever task I began, before anything noticeable went wrong. I'm ashamed to admit I had begun to question the hardware before my mistake dawned on me. +Ž„‚ª¡‚܂łÉ쬂µ‚½‚΂©‚°‚½’f‘±“I‚ȃoƒO‚ÍAƒNƒ‰ƒXƒvƒƒWƒFƒNƒg‚Ì‚½‚߂̊֔Œ^ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚̃}ƒ‹ƒ`ƒXƒŒƒbƒhŽÀ‘•‚Å‚·BŽ„‚Í‹@”\ƒvƒƒOƒ‰ƒ€‚̳Šm‚È•Às•]‰¿‚ð”ñí‚ÉTd‚ÉŠm•Û‚µAŽg—p‰Â”\‚È‚·‚ׂĂÌCPUi‚±‚ÌꇂÍ8ŒÂj‚ð—LŒø‚ÉŠˆ—p‚µ‚Ü‚µ‚½BƒKƒx[ƒWƒRƒŒƒNƒ^‚Ì“¯Šú‚ð–Y‚ê‚Ä‚µ‚Ü‚Á‚½BƒVƒXƒeƒ€‚ÍA‰½‚©–Ú—§‚‚±‚Æ‚ªŠÔˆá‚Á‚Ä‚µ‚Ü‚¤‘O‚ÉA‚µ‚΂µ‚ÎŽ„‚ªŽn‚ß‚½ŽdŽ–‚ðI‚í‚点‚éA’·‚¢ŽžŠÔ‚ðŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŽ„‚̊ԈႢ‚ªŽ„‚É‹N‚±‚é‘O‚ÉAŽ„‚ªƒn[ƒhƒEƒFƒA‚É‹^–â‚ðŽ‚¿Žn‚ß‚½‚±‚Æ‚ð”F‚߂Ēp‚¸‚©‚µ‚¢B -At work we recently had an intermittent bug that took us several weeks to find. We have multi-threaded application servers in Javaâ„¢ behind Apacheâ„¢ web servers. To maintain fast page turns, we do all I/O in small set of four separate threads that are different than the page-turning threads. Every once in a while these would apparently get ‘stuck’ and cease doing anything useful, so far as our logging allowed us to tell, for hours. Since we had four threads, this was not in itself a giant problem - unless all four got stuck. Then the queues emptied by these threads would quickly fill up all available memory and crash our server. It took us about a week to figure this much out, and we still didn't know what caused it, when it would happen, or even what the threads where doing when they got ‘stuck’. +Eê‚Å‚ÍÅ‹ßAŠÔŒ‡“I‚ȃoƒO‚ª‚ ‚èA”TŠÔ‚ÅŒ©‚‚¯‚Ü‚µ‚½BŽ„‚½‚¿‚ÍAApacheâ„uWebƒT[ƒo[‚Ì”wŒã‚É‚ ‚éJavaâ„uƒ}ƒ‹ƒ`ƒXƒŒƒbƒhƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒT[ƒo[‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚‘¬‚ȃy[ƒWƒ^[ƒ“‚ðˆÛŽ‚·‚邽‚ß‚ÉAŽ„‚½‚¿‚̓y[ƒW‚ß‚­‚èƒXƒŒƒbƒh‚Ƃ͈قȂé4‚‚̕ÊX‚̃XƒŒƒbƒh‚̬‚³‚ȃZƒbƒg‚Å‚·‚ׂĂÌI / O‚ðŽÀs‚µ‚Ü‚·BŽžXA‚±‚ê‚ç‚ÍA–¾‚ç‚©‚ÉAŽ„‚½‚¿‚Ì‹L˜^‚ªŽ„‚½‚¿‚ɉ½ŽžŠÔ‚à“`‚¦‚邱‚Æ‚ª‚Å‚«‚½ŒÀ‚èA‰½‚©—L—p‚È‚±‚Æ‚ð‚â‚ß‚³‚¹‚邱‚ƂɂȂè‚Ü‚·BŽ„‚½‚¿‚Í4‚‚̃XƒŒƒbƒh‚ðŽ‚Á‚Ä‚¢‚½‚Ì‚ÅA4‚‚·‚ׂĂªƒXƒ^ƒbƒN‚µ‚Ä‚¢‚È‚¢ŒÀ‚èA‚±‚ê‚Í‚»‚ꎩ‘Ì‹‘å‚È–â‘è‚ł͂ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½B‚±‚ê‚ç‚̃XƒŒƒbƒh‚É‚æ‚Á‚Ä‹ó‚É‚³‚ꂽƒLƒ…[‚ÍA‚·‚ׂĂ̎g—p‰Â”\‚ȃƒ‚ƒŠ‚ð‚·‚Î‚â‚­–„‚ß‚ÄAƒT[ƒo[‚ðƒNƒ‰ƒbƒVƒ…‚³‚¹‚Ü‚·B‚±‚Ì‚±‚Æ‚ð—‰ð‚·‚é‚Ì‚É1TŠÔ‚Ù‚Ç‚©‚©‚è‚Ü‚µ‚½‚ªA‰½‚ªŒ´ˆö‚©A”­¶‚·‚é‚©AƒXƒŒƒbƒh‚ª‰½‚ð‚µ‚Ä‚¢‚é‚Ì‚©‚͂܂¾•ª‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B -This illustrates some risk associated with third-party software. We were using a licensed piece of code that removed HTML tags from text. Although we had the source code (thank goodness!) we had not studied it carefully until by turning up the logging on our servers we finally realized that the email threads were getting stuck in this problematic licensed code. +‚±‚ê‚ÍAƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ÉŠÖ˜A‚·‚郊ƒXƒN‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·BƒeƒLƒXƒg‚©‚çHTMLƒ^ƒO‚ð휂µ‚½ƒ‰ƒCƒZƒ“ƒXƒR[ƒh‚ðŽg—p‚µ‚Ä‚¢‚Ü‚µ‚½BŽ„‚½‚¿‚̓\[ƒXƒR[ƒh‚ðŽ‚Á‚Ä‚¢‚Ü‚µ‚½‚ªAŽ„‚½‚¿‚̓T[ƒo[‚̃ƒO‚ð—§‚Ä‚é‚Ü‚ÅATd‚ÉŒ¤‹†‚µ‚Ä‚¢‚Ü‚¹‚ñ‚Å‚µ‚½BŽ„‚½‚¿‚ÍÅI“I‚ÉA–â‘è‚Ì‚ ‚郉ƒCƒZƒ“ƒXƒR[ƒh‚É“dŽqƒ[ƒ‹ƒXƒŒƒbƒh‚ª‹l‚Ü‚Á‚Ä‚¢‚邱‚ƂɋC•t‚«‚Ü‚µ‚½B -The program performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. +‚±‚̃vƒƒOƒ‰ƒ€‚ÍA’·‚­‚Ä’¿‚µ‚¢Ží—ނ̃eƒLƒXƒg‚𜂢‚ÄA‚¤‚Ü‚­‚¢‚Á‚½B‚±‚ê‚ç‚Ì•¶Í‚Å‚ÍAƒR[ƒh‚Í“ñŽŸ“I‚Å‚ ‚Á‚½‚èAˆ«‚©‚Á‚½‚肵‚Ü‚·B‚±‚ê‚ÍAˆ—ŽžŠÔ‚ªƒeƒLƒXƒg‚Ì’·‚³‚Ì2æ‚É”ä—á‚·‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚ç‚̃eƒLƒXƒg‚ªˆê”Ê“I‚É”­¶‚µ‚Ä‚¢‚½ê‡‚ÍA‚·‚®‚ɃoƒO‚ð”­Œ©‚µ‚½‚Í‚¸‚Å‚·B”ނ炪‚Ü‚Á‚½‚­‹N‚±‚Á‚½‚±‚Æ‚ª‚È‚¯‚ê‚ÎAŽ„‚½‚¿‚ÍŒˆ‚µ‚Ä–â‘è‚ð•ø‚¦‚Ü‚¹‚ñ‚Å‚µ‚½B‚»‚ꂪ‹N‚±‚邯AÅI“I‚É–â‘è‚ð—‰ð‚µ‰ðŒˆ‚·‚é‚܂łɔTŠÔ‚©‚©‚è‚Ü‚µ‚½B Next [How to Learn Design Skills](11-How to Learn Design Skills.md) diff --git a/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 50a64f0..600af9b 100644 --- a/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,9 +1,9 @@ # How to Learn Design Skills [//]: # (Version:1.0.0) -To learn how to design software, study the action of a mentor by being physically present when they are designing. Then study well-written pieces of software. After that, you can read some books on the latest design techniques. +ƒ\ƒtƒgƒEƒFƒA‚ðÝŒv‚·‚é•û–@‚ðŠw‚Ô‚É‚ÍAÝŒvŽž‚É•¨—“I‚É‘¶Ý‚·‚邱‚Ƃɂæ‚Á‚ăƒ“ƒ^[‚Ìs“®‚ðŒ¤‹†‚µ‚Ü‚·B ŽŸ‚ÉA‚æ‚­‘‚©‚ꂽƒ\ƒtƒgƒEƒFƒA‚𒲂ׂ܂·B ‚»‚ÌŒãAÅV‚ÌÝŒv‹Zp‚ÉŠÖ‚·‚é‘Ђð“ǂނ±‚Æ‚ª‚Å‚«‚Ü‚·B -Then you must do it yourself. Start with a small project. When you are finally done, consider how the design failed or succeeded and how you diverged from your original conception. Then move on to larger projects, hopefully in conjunction with other people. Design is a matter of judgement that takes years to acquire. A smart programmer can learn the basics adequately in two months and can improve from there. +‚»‚ê‚©‚çA‚ ‚È‚½‚Í‚»‚ê‚ðŽ©•ª‚Å‚â‚é•K—v‚ª‚ ‚è‚Ü‚·B ¬‚³‚ȃvƒƒWƒFƒNƒg‚©‚çŽn‚߂܂µ‚傤B ÅI“I‚ÉŠ®—¹‚µ‚½‚çAƒfƒUƒCƒ“‚ªŽ¸”s‚µ‚½‚©A¬Œ÷‚µ‚½‚©AŒ³‚Ì”­‘z‚©‚ç‚ǂ̂悤‚É•ªŠò‚µ‚½‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B ‚»‚ÌŒãA‘¼‚Ìl‚Æ‹¦—Í‚µ‚ÄA‚æ‚è‘å‚«‚ȃvƒƒWƒFƒNƒg‚Éi‚ñ‚Å‚­‚¾‚³‚¢B ƒfƒUƒCƒ“‚ÍAŠl“¾‚·‚é‚܂łɉ½”N‚à‚©‚©‚é”»’f‚Ì–â‘è‚Å‚·B ƒXƒ}[ƒg‚ȃvƒƒOƒ‰ƒ}[‚ÍA2ƒ–ŒŽ‚Å\•ª‚ÉŠî‘b‚ðŠw‚ÑA‚»‚±‚©‚ç‰ü‘P‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -It is natural and helpful to develop your own style, but remember that design is an art, not a science. People who write books on the subject have a vested interest in making it seem scientific. Don't become dogmatic about particular design styles. +Ž©•ª‚̃Xƒ^ƒCƒ‹‚ðŠJ”­‚·‚é‚͎̂©‘R‚Å–ð—§‚¿‚Ü‚·‚ªAƒfƒUƒCƒ“‚͉Ȋw‚ł͂Ȃ­Œ|p‚Å‚ ‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B ”팱ŽÒ‚É–{‚ð‘‚­l‚ÍA‚»‚ê‚ð‰ÈŠw“I‚ÉŒ©‚¹‚邱‚ƂɊÖS‚ª‚ ‚è‚Ü‚·B “Á’è‚̃fƒUƒCƒ“ƒXƒ^ƒCƒ‹‚ɂ‚¢‚ēƒf‚ɂ͂Ȃç‚È‚¢‚Å‚­‚¾‚³‚¢B Next [How to Conduct Experiments](12-How to Conduct Experiments.md) diff --git a/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index f857f86..b468e1d 100644 --- a/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,23 +1,23 @@ # How to Conduct Experiments [//]: # (Version:1.0.0) -The late, great Edsger Dijkstra has eloquently explained that Computer Science is not an experimental science[ExpCS] and doesn't depend on electronic computers. As he puts it referring to the 1960s [Knife], +’x‚­‚Ĉ̑å‚ÈEdsger Dijkstra‚ÍAƒRƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‚ÍŽÀŒ±“I‚ȉȊw‚ł͂Ȃ­[ExpCS]‚Å‚ ‚èA“dŽqŒvŽZ‹@‚Ɉˑ¶‚µ‚È‚¢‚±‚Æ‚ð—Y•Ù‚Éà–¾‚µ‚Ü‚µ‚½B”Þ‚Í‚»‚ê‚ð1960”N‘ã[ƒiƒCƒt]‚ƌĂñ‚Å‚¢‚Ü‚·B -> ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. +> ...Šë‹@‚ª‹N‚±‚Á‚½F‚»‚̃gƒsƒbƒN‚ÍAŽÀۂɂ͎èp‚Æ‚µ‚ÄŽèp‰ÈŠw‚ðŠw‚Ԃ悤‚È‚à‚̂ł ‚èAƒRƒ“ƒsƒ…[ƒeƒBƒ“ƒOƒTƒCƒGƒ“ƒX‚ÍlŠÔ‚ÌS‚É‚µ‚Á‚©‚è‚Æ–„‚ßž‚Ü‚ê‚Ä‚¢‚½Aƒ}ƒVƒ“‚Æ‚»‚ÌŽü•Ó‹@Ší‚ɂ‚¢‚ÄB -Programming ought not to be an experimental science, but most working programmers do not have the luxury of engaging in what Dijkstra means by computing science. We must work in the realm of experimentation, just as some, but not all, physicists do. If thirty years from now programming can be performed without experimentation, it will be a great accomplishment of Computer Science. +ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÍŽÀŒ±“I‚ȉȊw‚Å‚ ‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÍAƒ_ƒCƒNƒXƒgƒ‰‚ªŒvŽZ‰ÈŠw‚É‚æ‚Á‚ĈӖ¡‚·‚é‚à‚̂Ɋ֗^‚·‚éæÒ‘ò‚ðŽ‚Á‚Ä‚¢‚Ü‚¹‚ñBŽ„‚½‚¿‚ÍŽÀŒ±‚Ì•ª–ì‚Å“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB•¨—ŠwŽÒ‚Ì‚·‚ׂĂª‚»‚¤‚ł͂Ȃ¢‚悤‚ÉAŽ„‚½‚¿‚ÍŽÀŒ±‚Ì•ª–ì‚Å“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB¡‚©‚ç30”N‚ðŽÀŒ±‚È‚µ‚És‚¤‚±‚Æ‚ª‚Å‚«‚ê‚ÎA‚»‚ê‚̓Rƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‚̈̑å‚Ȭ‰Ê‚ƂȂé‚Å‚µ‚傤B -The kinds of experiments you will have to perform include: +ŽÀs‚·‚é•K—v‚Ì‚ ‚éŽÀŒ±‚ÌŽí—Þ‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·B -- Testing systems with small examples to verify that they conform to the documentation or to understand their response when there is no documentation, -- Testing small code changes to see if they actually fix a bug, -- Measuring the performance of a system under two different conditions due to imperfect knowledge of their performance characteristics, -- Checking the integrity of data, and -- Collecting statistics that may hint at the solution to difficult or hard-to-repeat bugs. +- ­”‚̗Ⴊ‚ ‚éƒVƒXƒeƒ€‚ðƒeƒXƒg‚µ‚ÄA‚»‚ê‚炪ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚É€‹’‚µ‚Ä‚¢‚邱‚Æ‚ðŒŸØ‚µ‚½‚èAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ª‚È‚¢ê‡‚̉ž“š‚ð—‰ð‚µ‚½‚èA +- ¬‚³‚ȃR[ƒh‚Ì•ÏX‚ðƒeƒXƒg‚µ‚ÄAŽÀۂɃoƒO‚ðC³‚µ‚½‚©‚Ç‚¤‚©‚ðŠm”F‚µA +- «”\“Á«‚Ì•sŠ®‘S‚È’mޝ‚Ì‚½‚ß‚É2‚‚̈قȂéðŒ‰º‚ŃVƒXƒeƒ€‚Ì«”\‚𑪒肷‚éB +- ƒf[ƒ^‚Ì®‡«‚ðƒ`ƒFƒbƒN‚·‚éB +- ¢“ï‚ÈA‚Ü‚½‚͓‚¢ƒoƒO‚̉ðŒˆô‚ðŽ¦´‚·‚铌v‚ðŽûW‚·‚éB -I don't think in this essay I can explain the design of experiments; you will have to study and practice. However, I can offer two bits of advice. +Ž„‚Í‚±‚̃GƒbƒZƒC‚ł͎ÀŒ±‚̃fƒUƒCƒ“‚ðà–¾‚Å‚«‚邯‚ÍŽv‚í‚È‚¢B‚ ‚È‚½‚͕׋­‚µA—ûK‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µAŽ„‚Í2ƒrƒbƒg‚̃AƒhƒoƒCƒX‚ð’ñ‹Ÿ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -First, try to be very clear about your hypothesis, or the assertion that you are trying to test. It also helps to write the hypothesis down, especially if you find yourself confused or are working with others. +‚Ü‚¸A‚ ‚È‚½‚̉¼àA‚Ü‚½‚Í‚ ‚È‚½‚ªƒeƒXƒg‚µ‚悤‚Æ‚µ‚Ä‚¢‚éŽå’£‚ɂ‚¢‚ÄA”ñí‚É–¾Šm‚É‚·‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½A“Á‚ÉŽ©•ª‚ª¬—‚µ‚Ä‚¢‚éA‚Ü‚½‚Í‘¼‚Ìl‚Æ“­‚¢‚Ä‚¢‚邯Žv‚í‚ê‚éꇂÍA‰¼à‚ð‘‚«—¯‚ß‚é‚̂ɖ𗧂¿‚Ü‚·B -You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. +ˆê˜A‚ÌŽÀŒ±‚ðÝŒv‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B‚»‚ꂼ‚ê‚ÌŽÀŒ±‚ÍÅŒã‚ÌŽÀŒ±‚Å“¾‚ç‚ꂽ’mޝ‚ÉŠî‚¢‚Ä‚¢‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‰Â”\‚ÈŒÀ‚葽‚­‚Ìî•ñ‚ð’ñ‹Ÿ‚·‚邿‚¤‚ÉŽÀŒ±‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŽc”O‚È‚ª‚çA‚±‚ê‚ÍŠeŽÀŒ±‚ðŠÈ’P‚É‚·‚邱‚Ƃɋْ£‚µ‚Ä‚¢‚Ü‚·BŒoŒ±‚ð’Ê‚µ‚Ä‚±‚Ì”»’f‚ð”­“W‚³‚¹‚é•K—v‚ª‚ ‚è‚Ü‚·B Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) diff --git a/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 3cb806e..f641843 100644 --- a/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -1,15 +1,15 @@ # Why Estimation is Important [//]: # (Version:1.0.0) -To get a working software system in active use as quickly as possible requires not only planning the development, but also planning the documentation, deployment, and marketing. In a commercial project it also requires sales and finance. Without predictability of the development time, it is impossible to plan these effectively. +‚Å‚«‚邾‚¯‘‚­Œ»—p‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ð‰Ò“­‚³‚¹‚é‚É‚ÍAŠJ”­‚ÌŒv‰æ‚¾‚¯‚łȂ­AƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“A“±“üAƒ}[ƒPƒeƒBƒ“ƒO‚àŒv‰æ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¤‹ÆƒvƒƒWƒFƒNƒg‚Å‚ÍA”Ì”„‚Æà–±‚à•K—v‚Å‚·BŠJ”­ŽžŠÔ‚ð—\‘ª‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ê‡A‚±‚ê‚ç‚ðŒø‰Ê“I‚ÉŒv‰æ‚·‚邱‚Ƃ͕s‰Â”\‚Å‚·B -Good estimation provides predictability. Managers love it, as well they should. The fact that it is impossible, both theoretically and practically, to predict accurately how long it will take to develop software is often lost on managers. We are asked to do this impossible thing all the time, and we must face up to it honestly. However, it would be dishonest not to admit the impossibility of this task, and when necessary, explain it. There is a lot of room for miscommunication about estimates, as people have a startling tendency to think wishfully that the sentence: +—ÇD‚È„’è‚Í—\‘ª‰Â”\«‚ð’ñ‹Ÿ‚·‚éBƒ}ƒl[ƒWƒƒ[‚à‚»‚ê‚ðˆ¤‚µ‚Ä‚¢‚Ü‚·B—˜_“I‚É‚àŽÀÛ“I‚É‚àAƒ\ƒtƒgƒEƒFƒA‚ÌŠJ”­‚ɂǂꂭ‚ç‚¢‚ÌŽžŠÔ‚ª‚©‚©‚é‚©‚ð³Šm‚É—\‘ª‚·‚邱‚Ƃ͕s‰Â”\‚Å‚ ‚邯‚¢‚¤Ž–ŽÀ‚ÍA‚µ‚΂µ‚ÎŒo‰cŽÒ‚ɂƂÁ‚ÄŽ¸‚í‚ê‚Ü‚·BŽ„‚½‚¿‚Í‚±‚Ì•s‰Â”\‚È‚±‚Æ‚ð‚¢‚Â‚à‚·‚邿‚¤‚É‹‚ß‚ç‚ê‚Ä‚¨‚èA³’¼‚É‚»‚ê‚É’¼–Ê‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µA‚±‚Ìì‹Æ‚Ì•s‰Â”\«‚ð”F‚߂Ȃ¢‚±‚Ƃͳ’¼‚Å‚ ‚èA•K—v‚ɉž‚¶‚Äà–¾‚µ‚Ä‚­‚¾‚³‚¢B„’è’l‚ɂ‚¢‚ÄŒë‚Á‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—]’n‚ª‚½‚­‚³‚ñ‚ ‚è‚Ü‚·BlX‚ÍŠè‚í‚­‚Í•¶Í‚ª‹Á‚­‚悤‚ÉŽv‚¦‚éŒXŒü‚ª‚ ‚è‚Ü‚·B -> I estimate that, if I really understand the problem, it is about 50% likely that we will be done in five weeks (if no one bothers us during that time). +>Ž„‚ÍA‚à‚µŽ„‚ª–{“–‚É–â‘è‚ð—‰ð‚·‚ê‚ÎA5TŠÔ‚Å–ñ50“‚ÌŠm—¦‚Å’B¬‚·‚邱‚Æ‚ª‚Å‚«‚邯„‘ª‚µ‚Ü‚·i‚»‚ÌŠÔ‚É’N‚àŽ„‚½‚¿‚ð”Y‚Ü‚³‚È‚¯‚ê‚ÎjB -really means: +–{“–‚ɈӖ¡‚·‚éF -> I promise to have it all done five weeks from now. +>Ž„‚Í¡‚©‚ç5TŠÔŒã‚É‚·‚ׂĂ̂±‚Æ‚ð‚â‚邱‚Æ‚ð–ñ‘©‚µ‚Ü‚·B -This common interpretation problem requires that you explicitly discuss what the estimate means with your boss or customer as if they were a simpleton. Restate your assumptions, no matter how obvious they seem to you. +‚±‚̈ê”Ê“I‚ȉðŽß‚Ì–â‘è‚Å‚ÍAãŽi‚âŒÚ‹q‚ÆŒ©Ï‚à‚肪‰½‚ðˆÓ–¡‚·‚é‚Ì‚©‚ðAƒVƒ“ƒvƒgƒ“‚̂悤‚É–¾Ž¦“I‚É‹c˜_‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B”ނ炪‚ ‚È‚½‚ɂǂ̂悤‚ÉŒ©‚¦‚é‚©‚É‚©‚©‚í‚炸A‚ ‚È‚½‚Ì‘O’ñ‚ðÄl‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Estimate Programming Time](02-How to Estimate Programming Time.md) diff --git a/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 88b96d6..8a4c3bb 100644 --- a/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -1,21 +1,21 @@ # How to Estimate Programming Time [//]: # (Version:1.0.0) -Estimation takes practice. It also takes labour. It takes so much labour it may be a good idea to estimate the time it will take to make the estimate, especially if you are asked to estimate something big. +Œ©Ï‚à‚è‚ɂ͗ûK‚ª•K—v‚Å‚·B‚»‚ê‚͂܂½˜J“­‚ð•K—v‚Æ‚·‚éB‚»‚ê‚Í”ñí‚É‘½‚­‚̘J—Í‚ª‚©‚©‚é‚Ì‚ÅA“Á‚ɑ傫‚È‚à‚Ì‚ðŒ©Ï‚à‚邿‚¤‚É‹‚ß‚ç‚ꂽꇂɂÍAŒ©Ï‚à‚è‚É‚©‚©‚鎞ŠÔ‚ðŒ©Ï‚à‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B -When asked to provide an estimate of something big, the most honest thing to do is to stall. Most engineers are enthusiastic and eager to please, and stalling certainly will displease the stalled. But an on-the-spot estimate probably won't be accurate and honest. +‰½‚©‘å‚«‚¢‚à‚̂̌©Ï‚à‚è‚ð’ñ‹Ÿ‚·‚邿‚¤‚É—Š‚Ü‚ê‚½‚Æ‚«Ał೒¼‚È‚±‚Ƃ̓Xƒg[ƒ‹‚·‚邱‚Ƃł·B‚Ù‚Æ‚ñ‚ǂ̃Gƒ“ƒWƒjƒA‚Í”M‹¶“I‚Å‚ ‚èA”M–]‚µ‚Ä‚¢‚Ü‚·BƒXƒg[ƒ‹‚·‚邯AƒXƒg[ƒ‹‚µ‚Ä‚à•s‰õŠ´‚ðŠ´‚¶‚Ü‚·B‚µ‚©‚µAŒ»ê‚ł̌©Ï‚à‚è‚ÍA‚¨‚»‚ç‚­³Šm‚ų’¼‚ł͂ ‚è‚Ü‚¹‚ñB -While stalling, it may be possible to consider doing or prototyping the task. If political pressure permits, this is the most accurate way of producing the estimate, and it makes real progress. +’âŽ~’†‚ÍAƒ^ƒXƒN‚ÌŽÀs‚⎎ì‚ðŒŸ“¢‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B­Ž¡“Iˆ³—Í‚ª‹–‚¹‚ÎA‚±‚ê‚Í„’è’l‚𶬂·‚éłೊm‚È•û–@‚Å‚ ‚èAŽÀÛ‚Ìi•à‚ð‚à‚½‚ç‚·B -When not possible to take the time for some investigation, you should first establish the meaning of the estimate very clearly. Restate that meaning as the first and last part of your written estimate. Prepare a written estimate by de-constructing the task into progressively smaller subtasks until each small task is no more than a day; ideally at most in length. The most important thing is not to leave anything out. For instance, documentation, testing, time for planning, time for communicating with other groups, and vacation time are all very important. If you spend part of each day dealing with knuckleheads, put a line item for that in the estimate. This gives your boss visibility into what is using up your time at a minimum, and might get you more time. +‰½‚ç‚©‚Ì’²¸‚Ì‚½‚߂ɎžŠÔ‚ð‚Æ‚é‚±‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚«‚ÍAʼn‚ÉŒ©Ï‚à‚è‚Ì??ˆÓ–¡‚ð”ñí‚É–¾Šm‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚̈Ӗ¡‚ð‘–ʂł̌©Ï‚à‚è‚Ì??ʼn‚ÆÅŒã‚Ì•”•ª‚É–ß‚µ‚Ä‚­‚¾‚³‚¢BŠeƒ^ƒXƒN‚ª1“úˆÈ‰º‚ɂȂé‚Ü‚ÅAƒ^ƒXƒN‚ð™X‚ɬ‚³‚ȃTƒuƒ^ƒXƒN‚É\¬‰ðœ‚·‚邱‚Ƃɂæ‚Á‚ÄA‘–ʂɂæ‚錩ςà‚è‚ð€”õ‚µ‚Ü‚·B—‘z“I‚ɂ͒·‚³‚ªÅ‘å‚Å‚ ‚éBÅ‚àd—v‚È‚±‚Ƃ͉½‚àŽc‚³‚È‚¢‚±‚Ƃł·B—Ⴆ‚ÎAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“AƒeƒXƒgAŒv‰æ‚ÌŽžŠÔA‘¼‚̃Oƒ‹[ƒv‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽžŠÔA‚¨‚æ‚Ñ‹x‰ÉŽžŠÔ‚Í‚·‚ׂĔñí‚Éd—v‚Å‚·B‚ ‚È‚½‚ªƒiƒbƒNƒ‹ƒwƒbƒh‚ðˆµ‚¤–ˆ“ú‚̈ꕔ‚ð”ï‚₵‚Ä‚¢‚éꇂÍA‚»‚ê‚Ì‚½‚ß‚ÌL\žî•ñ‚ðŒ©Ï‚à‚è‚É“ü‚ê‚Ü‚·B‚±‚ê‚É‚æ‚èA‚ ‚È‚½‚ÌãŽi‚Í‚ ‚È‚½‚ÌŽžŠÔ‚ðŬŒÀ‚É—}‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚ɂȂèA‚³‚ç‚ÉŽžŠÔ‚ª‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B -I know good engineers who pad estimates implicitly, but I recommend that you do not. One of the results of padding is trust in you may be depleted. For instance, an engineer might estimate three days for a task that she truly thinks will take one day. The engineer may plan to spend two days documenting it, or two days working on some other useful project. But it will be detectable that the task was done in only one day (if it turns out that way), and the appearance of slacking or overestimating is born. It's far better to give proper visibility into what you are actually doing. If documentation takes twice as long as coding and the estimate says so, tremendous advantage is gained by making this visible to the manager. +Ž„‚͈Öق̂¤‚¿‚É„’è’l‚ð–„‚ßž‚Þ—D‚ꂽƒGƒ“ƒWƒjƒA‚ð’m‚Á‚Ä‚¢‚Ü‚·‚ªA‚»‚¤‚µ‚È‚¢‚Æ‚¨Š©‚ß‚µ‚Ü‚·BƒpƒbƒfƒBƒ“ƒO‚ÌŒ‹‰Ê‚Ì1‚‚ÍA‚ ‚È‚½‚ÌM—Š‚ªŒÍЉ‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚邱‚Ƃł·B—Ⴆ‚ÎAƒGƒ“ƒWƒjƒA‚ÍA–{“–‚É1“ú‚©‚©‚邯Žv‚¤ŽdŽ–‚Ì‚½‚ß‚É3“úŠÔ‚ðŒ©Ï‚à‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒGƒ“ƒWƒjƒA‚ÍA2“úŠÔ‚»‚ê‚ð•¶‘‰»‚µ‚½‚èA2“úŠÔ‘¼‚Ì—L—p‚ȃvƒƒWƒFƒNƒg‚ÉŽæ‚èŠ|‚©‚낤‚ÆŒv‰æ‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚µ‚©‚µA‚»‚Ìì‹Æ‚ª1“ú‚ÅŠ®—¹‚µ‚½‚±‚Æ‚ªŒŸo‚³‚êi‚»‚̂悤‚É”»–¾‚µ‚½ê‡jA‚½‚é‚݂܂½‚͉ߑå•]‰¿‚ÌŠOŠÏ‚ª¶‚Ü‚ê‚éB‚ ‚È‚½‚ªŽÀÛ‚É‚â‚Á‚Ä‚¢‚邱‚Æ‚ð“K؂ɉŽ‹‰»‚·‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·BƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ªƒR[ƒfƒBƒ“ƒO‚Ì2”{‚ÌŽžŠÔ‚ð—v‚µAŒ©Ï‚à‚肪‚»‚¤‚Å‚ ‚邯‚·‚ê‚ÎA‚±‚ê‚ðƒ}ƒl[ƒWƒƒ[‚ÉŒ©‚¦‚邿‚¤‚É‚·‚邱‚Ƃő傫‚È—˜“_‚ª“¾‚ç‚ê‚Ü‚·B -Pad explicitly instead. If a task will probably take one day - but might take ten days if your approach doesn't work - note this somehow in the estimate if you can; if not, at least do an average weighted by your estimates of the probabilities. Any risk factor that you can identify and assign an estimate to, should go into the schedule. One person is unlikely to be sick in any given week. But a large project with many engineers will have some sick time; likewise vacation time. And what is the probability of a mandatory company-wide training seminar? If it can be estimated, stick it in. There are of course, unknown unknowns, or *unk-unks*. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered. +‘ã‚í‚è‚É–¾Ž¦“I‚ɃpƒbƒhB‚ ‚È‚½‚̃Aƒvƒ[ƒ`‚ª‚¤‚Ü‚­‚¢‚©‚È‚¢ê‡Aƒ^ƒXƒN‚ɂ͂¨‚»‚ç‚­1“ú‚©‚©‚è‚Ü‚·‚ªA10“ú‚©‚©‚Á‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB‚»‚¤‚łȂ¢ê‡‚ÍA­‚È‚­‚Æ‚àAŠm—¦‚ÌŒ©Ï‚à‚è‚É‚æ‚Á‚Ä•½‹Ï“I‚Éd‚Ý•t‚¯‚³‚ê‚Ü‚·Bޝ•Ê‚µ‚ÄŒ©Ï‚à‚è‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚郊ƒXƒN—vˆö‚ÍAƒXƒPƒWƒ…[ƒ‹‚É“ü‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚é1TŠÔ‚É1l‚ª•a‹C‚ɂȂ邱‚Ƃ͂܂¸‚ ‚è‚Ü‚¹‚ñB‚µ‚©‚µA‘½‚­‚̃Gƒ“ƒWƒjƒA‚ð•ø‚¦‚é‘å‹K–͂ȃvƒƒWƒFƒNƒg‚ɂ͕a‹C‚ª‚ ‚è‚Ü‚·B“¯—l‚É‹x‰É‚ÌŽžŠÔB‚»‚µ‚ÄA‘SŽÐ“I‚ÈŒP—ûƒZƒ~ƒi[‚ª‹`–±‰»‚³‚ê‚éŠm—¦‚ÍH‚»‚ꂪ„‘ª‚Å‚«‚éꇂÍA‚»‚ê‚ð“\‚è‚Ü‚·B‚à‚¿‚ë‚ñA–¢’m‚Ì–¢’m”A‚Ü‚½‚Í* unk-unks *‚ª‚ ‚è‚Ü‚·B’è‹`‚É‚æ‚éUnk-unks‚͌•ʂɌ©Ï‚à‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚·‚ׂĂÌunk-unks‚̃Oƒ[ƒoƒ‹‚ÈL\žî•ñ‚ð쬂µ‚½‚èAãŽi‚ɘA—‚·‚鑼‚Ì•û–@‚Å‚»‚ê‚ç‚ðˆ—‚µ‚½‚è‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚ÌãŽi‚ɔނ炪‘¶Ý‚µ‚Ä‚¢‚邱‚Æ‚ð–Y‚ê‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚»‚µ‚ÄAunk-unks‚ªl—¶‚³‚ê‚Ä‚¢‚È‚¢‚ÆŒ©Ï‚à‚肪—\’è‚ɂȂé‚Ì‚ÍA‘å•ÏŠÈ’P‚Å‚·B -In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate. The act of having the whole team agree on a line-by-line basis to the estimate clarifies the team understanding, as well as allowing the opportunity for tactical reassignment of resources (for instance, shifting burden away from weaker team members to stronger). +ƒ`[ƒ€ŠÂ‹«‚Å‚ÍAì‹Æ‚ðs‚¤l‚ÉŒ©Ï‚à‚è‚ð‚³‚¹‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½Aƒ`[ƒ€‘S‘̂Ō©Ï‚à‚è‚Ì??ƒRƒ“ƒZƒ“ƒTƒX‚𓾂悤‚Æ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BlX‚Í‹ZpAŒoŒ±A€”õA‚»‚µ‚ÄŽ©M‚Ì“x‡‚¢‚ª‘å‚«‚­ˆÙ‚È‚è‚Ü‚·B‹­—͂ȃvƒƒOƒ‰ƒ}[‚ªŽ©•ªŽ©g‚ð„’肵AŽã‚¢ƒvƒƒOƒ‰ƒ}[‚ª‚±‚Ì„’è’l‚ð•ÛŽ‚µ‚Ä‚¢‚邯‚«‚É‚ÍAƒJƒ‰ƒ~ƒeƒB‚ª”­¶‚µ‚Ü‚·B‘S‘̂̃`[ƒ€‚ªŒ©Ï‚à‚è‚Ƀ‰ƒCƒ“‚²‚ƂɇˆÓ‚·‚邯‚¢‚¤sˆ×‚ÍAƒ`[ƒ€‚Ì—‰ð‚𖾊m‚É‚µAƒŠƒ\[ƒX‚Ìíp“I‚ÈÄŠ„‚è“–‚Ă̋@‰ï‚ð‰Â”\‚É‚·‚éi—Ⴆ‚ÎA‚æ‚èŽã‚¢ƒ`[ƒ€ƒƒ“ƒo[‚©‚ç‚æ‚è‹­‚¢ƒ`[ƒ€‚É•‰’S‚ðˆÚ‚·‚È‚ÇjB -If there are big risks that cannot be evaluated, it is your duty to state so forcefully enough that your manager does not commit to them and then become embarrassed when the risk occurs. Hopefully in such a case whatever is needed will be done to decrease the risk. +•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‘å‚«‚ÈƒŠƒXƒN‚ª‚ ‚éꇂÍA‚ ‚È‚½‚̃}ƒl[ƒWƒƒ[‚ªƒRƒ~ƒbƒg‚µ‚Ä‚¢‚È‚¢‚Ù‚Ç‹­—Í‚Éq‚×AƒŠƒXƒN‚ª”­¶‚·‚邯’p‚¸‚©‚µ‚¢‚à‚̂ɂȂ邱‚Ƃ͂ ‚È‚½‚Ì‹`–±‚Å‚·B‚»‚̂悤‚ÈꇂɂÍA•K—v‚È‚±‚Æ‚ª‚ ‚ê‚ÎAƒŠƒXƒN‚ðŒ¸‚ç‚·‚½‚ß‚És‚í‚ê‚邱‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B -If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. +* Extreme Programming *‚ðŽg—p‚·‚邿‚¤‚ɉïŽÐ‚É”[“¾‚³‚¹‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA”äŠr“I¬‚³‚È‚à‚Ì‚ðŒ©Ï‚à‚邾‚¯‚ł悭A‚±‚ê‚Í‚à‚Á‚ÆŠy‚µ‚­¶ŽY“I‚Å‚·B Next [How to Find Out Information](03-How to Find Out Information.md) diff --git a/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md b/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md index aecc0ef..acdd272 100644 --- a/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -1,19 +1,19 @@ # How to Find Out Information [//]: # (Version:1.0.0) -The nature of what you need to know determines how you should find it. +‚ ‚È‚½‚ª’m‚é•K—v‚Ì‚ ‚髎¿‚ÍA‚ ‚È‚½‚ª‚»‚ê‚ðŒ©‚Â‚¯‚é•û–@‚ðŒˆ’è‚µ‚Ü‚·B -If you need information *about concrete things* that are objective and easy to verify, for example the latest patch level of a software product, ask a large number of people politely by searching the internet for it or by posting on a discussion group. Don't search on the internet for anything that smacks of either opinion or subjective interpretation: the ratio of drivel to truth is too high. +ƒ\ƒtƒgƒEƒFƒA»•i‚ÌÅV‚̃pƒbƒ`ƒŒƒxƒ‹‚È‚ÇA‹qŠÏ“I‚ÅŠÈ’P‚È‹ï‘Ì“I‚È‚à‚̂Ɋւ·‚éî•ñ*‚ª•K—v‚ÈꇂÍAƒCƒ“ƒ^[ƒlƒbƒg‚ðŒŸõ‚µ‚½‚èAƒfƒBƒXƒJƒbƒVƒ‡ƒ“ƒOƒ‹[ƒv‚É“Še‚µ‚½‚肵‚ÄA‘½‚­‚Ìl‚É’š”J‚ÉŽ¿–₵‚Ä‚­‚¾‚³‚¢BƒCƒ“ƒ^[ƒlƒbƒgã‚ňӌ©‚âŽåŠÏ“I‚ȉðŽß‚Ì‚¢‚¸‚ê‚©‚ð’@‚¢‚Ä‚¢‚é‚à‚̂͌Ÿõ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢BƒhƒŠƒuƒ“‚Æ^ŽÀ‚̔䗦‚ª‚‚·‚¬‚Ü‚·B -If you need *general knowledge about something subjective* the history of what people have thought about it, go to the library (the physical building in which books are stored). For example, to learn about math or mushrooms or mysticism, go to the library. +‚ ‚È‚½‚ª‰½‚©ŽåŠÏ“I‚È‚à‚̂Ɋւ·‚éˆê”Ê“I‚È’mޝ*lX‚ª‚»‚ê‚ɂ‚¢‚Äl‚¦‚Ä‚«‚½—ðŽj‚ð’m‚肽‚¢‚È‚çA}‘ŠÙi–{‚ª•ÛŠÇ‚³‚ê‚Ä‚¢‚镨—“IŒš•¨j‚És‚«‚Ü‚·B‚½‚Æ‚¦‚ÎA”Šw‚â‚«‚Ì‚±‚â_”é‚ɂ‚¢‚ÄŠw‚Ô‚É‚ÍA}‘ŠÙ‚És‚«‚Ü‚·B -If you need to know *how to do something that is not trivial* get two or three books on the subject and read them. You might learn how to do something trivial, like install a software package, from the Internet. You can even learn important things, like good programming technique, but you can easily spend more time searching and sorting the results and attempting to divine the authority of the results than it would take to read the pertinent part of a solid book. +‚ ‚È‚½‚ª’m‚Á‚Ä‚¢‚é•K—v‚ª‚ ‚é*ŠÈ’P‚È‚±‚Ƃł͂Ȃ¢‰½‚©‚ð‚·‚é•û–@* 2‚‚܂½‚Í3‚Â‚Ì‘Ð‚ðŽæ“¾‚µA‚»‚ê‚ç‚ð“Ç‚ñ‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ÍAƒCƒ“ƒ^[ƒlƒbƒg‚©‚çƒ\ƒtƒgƒEƒFƒAƒpƒbƒP[ƒW‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚È‚ÇAŠÈ’P‚È‚±‚Æ‚ð‚·‚é•û–@‚ðŠw‚Ô‚©‚à‚µ‚ê‚Ü‚¹‚ñB—Ç‚¢ƒvƒƒOƒ‰ƒ~ƒ“ƒOƒeƒNƒjƒbƒN‚̂悤‚Èd—v‚È‚±‚Æ‚ðŠw‚Ô‚±‚Æ‚³‚¦‚Å‚«‚Ü‚·‚ªAƒ\ƒŠƒbƒhƒuƒbƒN‚Ì“K؂ȕ”•ª‚ð“ǂނ̂ɗv‚·‚邿‚è‚àŒ‹‰Ê‚ÌŒŸõ‚Æ•À‚בւ¦AŒ‹‰Ê‚ÌŒ ŒÀ‚ÌŒ@‚èo‚µ‚É‚à‚Á‚Æ‘½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B -If you need *information that no one else could be expected to know* for example, ‘does this software that is brand new work on gigantic data sets?’, you must still search the internet and the library. After those options are completely exhausted, you may design an experiment to ascertain it. +*‘¼‚É’N‚à’m‚肽‚­‚È‚¢î•ñ‚ª•K—v‚Èê‡*‚½‚Æ‚¦‚ÎA‚±‚̃\ƒtƒgƒEƒFƒA‚ª‹‘å‚ȃf[ƒ^ƒZƒbƒg‚ÌV‚µ‚¢ì•i‚Å‚ ‚邱‚Æ‚ð’m‚Á‚Ä‚¢‚éê‡AƒCƒ“ƒ^[ƒlƒbƒg‚ƃ‰ƒCƒuƒ‰ƒŠ‚ðŒŸõ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚̃IƒvƒVƒ‡ƒ“‚ªŠ®‘S‚ÉŽg‚¢s‚­‚³‚ꂽŒãA‚»‚ê‚ðŠm”F‚·‚邽‚߂ɎÀŒ±‚ðÝŒv‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -If you want an opinion or a value judgement that takes into account some unique circumstance, talk to an expert. For instance, if you want to know whether or not it is a good idea to build a modern database management system in LISP, you should talk to a LISP expert and a database expert. +“Æ“Á‚È󋵂ðl—¶‚µ‚½ˆÓŒ©‚≿’l”»’f‚ª•K—v‚ÈꇂÍAê–副‚ɑВk‚µ‚Ä‚­‚¾‚³‚¢B‚½‚Æ‚¦‚ÎALISP‚ÉÅV‚̃f[ƒ^ƒx[ƒXŠÇ—ƒVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ª—Ç‚¢‚©‚Ç‚¤‚©‚ð’m‚肽‚¢ê‡‚ÍALISP‚Ìê–副‚ƃf[ƒ^ƒx[ƒX‚Ìê–副‚ɑВk‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -If you want to know *how likely it is* that a faster algorithm for a particular application exists that has not yet been published, talk to someone working in that field. +*‚Ü‚¾ŒöŠJ‚³‚ê‚Ä‚¢‚È‚¢“Á’è‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“—p‚Ì‚æ‚è‚‘¬‚ȃAƒ‹ƒSƒŠƒYƒ€‚ª‘¶Ý‚·‚é‰Â”\«‚ª‚ ‚邱‚Æ‚ð’m‚肽‚¢ê‡‚ÍA‚»‚̃tƒB[ƒ‹ƒh‚Å“­‚¢‚Ä‚¢‚él‚Ƙb‚µ‚Ü‚µ‚傤B -If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. +‚ ‚È‚½‚ªƒrƒWƒlƒX‚ðŽn‚߂Ȃ¯‚ê‚΂Ȃç‚È‚¢‚©‚Ç‚¤‚©‚ð‚ ‚È‚½‚¾‚¯‚ªl‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚É*ŒÂl“I‚ÈŒˆ’è‚ð‚µ‚½‚¢‚̂ł ‚ê‚ÎA‚»‚̃AƒCƒfƒBƒA‚ɑ΂·‚é‹c˜_‚ÌƒŠƒXƒg‚ð‘‚¢‚Ă݂Ă­‚¾‚³‚¢B‚»‚ê‚ªŽ¸”s‚·‚ê‚ÎAè‚¢‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚·‚ׂĂ̊p“x‚©‚çƒAƒCƒfƒA‚ðŠw‚ÑA‚ ‚È‚½‚Ìh‘è‚ð‚·‚×‚ÄI‚¦‚ÄA‚ ‚È‚½‚ÌS‚Ì’†‚Å‚·‚ׂĂ̌‹‰Ê‚Æ’·Š‚Æ’ZŠ‚ðŽæ‚èœ‚¢‚½‚ªAˆË‘R‚Æ‚µ‚ÄžB–†‚Ȃ܂܂ł¢‚邯‚µ‚Ü‚·B‚ ‚È‚½‚Í¡‚ ‚È‚½‚ÌS‚É]‚Á‚ÄA‚ ‚È‚½‚Ì”]‚É–Ù‚é‚æ‚¤‚ÉŒ¾‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB—˜—p‰Â”\‚Èè‚¢‚Ì‹Z–@‚Ì‘½‚­‚ÍA‚ ‚È‚½‚Ìö݈ӎ¯‚ªˆÓ–¡‚ðŠ„‚è“–‚Ă銮‘S‚È‚ ‚¢‚Ü‚¢‚щƒ“ƒ_ƒ€‚ȃpƒ^[ƒ“‚ð’ñަ‚·‚é‚Ì‚ÅAŽ©•ª‚Ì”¼ˆÓޝ“I‚È—~–]‚ð”»’f‚·‚é‚̂ɔñí‚É–ð—§‚¿‚Ü‚·B Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) diff --git a/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index 69be910..d8e4667 100644 --- a/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -1,15 +1,15 @@ # How to Utilize People as Information Sources [//]: # (Version:1.0.0) -Respect every person's time and balance it against your own. Asking someone a question accomplishes far more than just receiving the answer. The person learns about you, both by enjoying your presence and hearing the particular question. You learn about the person in the same way, and you may learn the answer you seek. This is usually far more important than your question. +‚·‚ׂĂÌl‚ÌŽžŠÔ‚ð‘¸d‚µAŽ©•ª‚ÌŽžŠÔ‚ƃoƒ‰ƒ“ƒX‚ðŽæ‚Á‚Ä‚­‚¾‚³‚¢B’N‚©‚ÉŽ¿–â‚·‚邱‚Æ‚ÍA“š‚¦‚ðŽó‚¯Žæ‚邾‚¯‚ł͂ ‚è‚Ü‚¹‚ñB‚»‚Ìl‚Í‚ ‚È‚½‚Ì‘¶Ý‚ðŠy‚µ‚ñ‚ÅA“Á’è‚ÌŽ¿–â‚ð•·‚­‚±‚Ƃɂæ‚Á‚ÄA‚ ‚È‚½‚ɂ‚¢‚ÄŠw‚т܂·B‚»‚Ìl‚ɂ‚¢‚Ä“¯‚¶‚悤‚ÉŠw‚ÑA‚ ‚È‚½‚ª‹‚߂铚‚¦‚ð’m‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍA‚ ‚È‚½‚ÌŽ¿–â‚æ‚è‚à‚͂邩‚Éd—v‚Å‚·B -However, the value of this diminishes the more you do it. You are, after all, using the most precious commodity a person has: their time. The benefits of communication must be weighed against the costs. Furthermore, the particular costs and benefits derived differ from person to person. I strongly believe that an executive of 100 people should spend five minutes a month talking to each person in her organization, which would be about 5% of their time. But ten minutes might be too much, and five minutes is too much if they have one thousand employees. The amount of time you spend talking to each person in your organization depends on their role (more than their position). You should talk to your boss more than your boss's boss, but you should talk to your boss's boss a little. It may be uncomfortable, but I believe you have a duty to talk a little bit to all your superiors, each month, no matter what. +‚µ‚©‚µA‚±‚ê‚̉¿’l‚Í‚ ‚È‚½‚ª‚»‚ê‚ðs‚¤‚Ù‚ÇŒ¸­‚µ‚Ü‚·B‚ ‚È‚½‚ÍAŒ‹‹Ç‚̂Ƃ±‚ëAl‚ªŽ‚Á‚Ä‚¢‚éÅ‚à‹Md‚Ȥ•iA‚·‚Ȃ킿‚»‚ÌŽžŠÔ‚ðŽg‚Á‚Ä‚¢‚Ü‚·BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—˜“_‚ÍAƒRƒXƒg‚Æ”äŠr‚µ‚ÄdŽ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚³‚ç‚ÉA“¾‚ç‚ê‚é“Á’è‚̃RƒXƒg‚Æ—˜“_‚ÍAl‚É‚æ‚Á‚ĈقȂè‚Ü‚·BŽ„‚ÍA100l‚ÌŠ²•”‚ª–ˆŒŽ5•ª‚ðŽ©•ª‚Ì‘gD‚ÌŠel‚Ƙb‚·•K—v‚ª‚ ‚邯‹­‚­M‚¶‚Ä‚¨‚èA‚»‚ÌŽžŠÔ‚Ì–ñ5“‚ɂȂè‚Ü‚·B‚µ‚©‚µA1000l‚Ì]‹Æˆõ‚ª‚¢‚éê‡A10•ª‚ª‘½‚·‚¬‚é‰Â”\«‚ª‚ ‚èA5•ª‚ª‘½‚·‚¬‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‘gD“à‚ÌŠel‚Ƙb‚·ŽžŠÔ‚ÍA‚»‚Ì–ðŠ„iEˆÊˆÈãj‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚ ‚È‚½‚ÌãŽi‚ÉãŽi‚Ƙb‚µ‡‚¤‚ׂ«‚Å‚·‚ªAãŽi‚ÌãŽi‚É­‚µ˜b‚µ‚Ä‚­‚¾‚³‚¢B‚»‚ê‚Í•s‰õ‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAŽ„‚Í‚ ‚È‚½‚ªãŽi‚É­‚µ‚¸‚ÂA–ˆŒŽA‰½‚ð˜b‚µ‚Ä‚à‹`–±‚ª‚ ‚邯M‚¶‚Ä‚¢‚Ü‚·B -The basic rule is that everyone benefits from talking to you a little bit, and the more they talk to you, the less benefit they derive. It is your job to provide them this benefit, and to get the benefit of communicating with them, keeping the benefit in balance with the time spent. +Šî–{“I‚ȃ‹[ƒ‹‚ÍA’N‚à‚ª‚ ‚È‚½‚Ƙb‚·‚±‚Æ‚©‚ç—˜‰v‚𓾂邱‚Ƃł ‚èA”ނ炪‚ ‚È‚½‚ɘb‚·‚±‚Æ‚ª‘½‚¢‚Ù‚ÇA”ނ炪”h¶‚·‚é—˜‰v‚Í­‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·B”Þ‚ç‚É‚±‚̉¶Œb‚ð’ñ‹Ÿ‚µA”Þ‚ç‚Æ‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—˜‰v‚𓾂邽‚ß‚ÉA‚ ‚È‚½‚ÌŽdŽ–‚ÍA”ï‚₳‚ê‚½ŽžŠÔ‚Ƃ̃oƒ‰ƒ“ƒX‚Å—˜‰v‚ð•ۂ‚±‚Ƃł·B -It is important to respect your own time. If talking to someone, even if it will cost them time, will save you a great deal of time, then you should do it unless you think their time is more valuable than yours, to the tribe, by that factor. +Ž©•ª‚ÌŽžŠÔ‚ð‘¸d‚·‚邱‚Æ‚ªd—v‚Å‚·B’N‚©‚Ƙb‚·‚È‚çA‚½‚Æ‚¦‚»‚ê‚ÉŽžŠÔ‚ª‚©‚©‚邯‚µ‚Ä‚àAŽžŠÔ‚ð‘å•‚Éß–ñ‚·‚é‚Å‚µ‚傤B‚ ‚È‚½‚ÌŽžŠÔ‚ª‚ ‚È‚½‚Ì‚à‚Ì‚æ‚è‚à‹Md‚È‚à‚Ì‚¾‚ÆŽv‚í‚È‚¢ŒÀ‚èA‚»‚ê‚ðs‚¤‚ׂ«‚Å‚·B -A strange example of this is the summer intern. A summer intern in a highly technical position can't be expected to accomplish too much; they can be expected to pester the hell out of everybody there. So why is this tolerated? Because the pestered are receiving something important from the intern. They get a chance to show-off a little. They get a chance to hear some new ideas, maybe; they get a chance to see things from a different perspective. They may also be trying to recruit the intern, but even if this is not the case there is much to gain. +‚±‚ê‚ÌŠï–­‚È—á‚͉ẴCƒ“ƒ^[ƒ“‚Å‚·B‚“x‚É‹Zp“I‚È—§ê‚̉ĊúƒCƒ“ƒ^[ƒ“‚ÍA‚ ‚܂謉ʂðã‚°‚邱‚Ƃ͊ú‘Ò‚Å‚«‚Ü‚¹‚ñB”Þ‚ç‚Í‚»‚±‚É‚¢‚é’N‚à‚ª’n–‚ÉP‚í‚ê‚邱‚Æ‚ª—\‘z‚³‚ê‚Ü‚·B‚»‚ê‚łȂº‚±‚ê‚Í—e”F‚³‚ê‚Ü‚·‚©H‹ê‚µ‚ñ‚¾l‚ÍAƒCƒ“ƒ^[ƒ“‚©‚çd—v‚ȉ½‚©‚ðŽó‚¯‚Ä‚¢‚é‚Ì‚ÅB”Þ‚ç‚Í­‚µŒÖަ‚·‚é‹@‰ï‚𓾂éB‚¨‚»‚ç‚­AV‚µ‚¢ƒAƒCƒfƒA‚ð•·‚­ƒ`ƒƒƒ“ƒX‚ª‚ ‚è‚Ü‚·B”Þ‚ç‚͈قȂ鎋“_‚©‚ç•¨Ž–‚ðŒ©‚é‹@‰ï‚𓾂éB”Þ‚ç‚͂܂½AƒCƒ“ƒ^[ƒ“‚ð•åW‚µ‚悤‚Æ‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚»‚¤‚łȂ¢ê‡‚Å‚àA“¾‚é‚ׂ«‚±‚Æ‚ª‚½‚­‚³‚ñ‚ ‚è‚Ü‚·B -You should ask people for a little bit of their wisdom and judgement whenever you honestly believe they have something to say. This flatters them and you will learn something and teach them something. A good programmer does not often need the advice of a Vice President of Sales, but if you ever do, you be sure to ask for it. I once asked to listen in on a few sales calls to better understand the job of our sales staff. This took no more than 30 minutes but I think that small effort made an impression on the sales force. +‚ ‚È‚½‚ÍA³’¼‚ÉŒ¾‚¢‚½‚¢‚±‚Æ‚ª‚ ‚邯M‚¶‚邯‚«‚Í‚¢‚‚łàAlX‚ɔނç‚Ì’mŒb‚Æ”»’f—͂̂قñ‚Ì­‚µ‚ðq‚Ë‚é‚ׂ«‚Å‚·B‚±‚ê‚͔ނç‚𕽂炰A‚ ‚È‚½‚͉½‚©‚ðŠw‚ÑA‰½‚©‚ð‹³‚¦‚é‚Å‚µ‚傤B—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ÍAƒZ[ƒ‹ƒX’S“–ƒoƒCƒXƒvƒŒƒWƒfƒ“ƒg‚Ì•Œ¾‚ð•K—v‚Æ‚µ‚È‚¢‚±‚Ƃ͂悭‚ ‚è‚Ü‚·‚ªA‚±‚ê‚܂łÉs‚Á‚½‚±‚Æ‚ª‚ ‚ê‚ÎA‚»‚ê‚ð‹‚߂Ă­‚¾‚³‚¢BŽ„‚͉c‹Æ’S“–ŽÒ‚ÌŽdŽ–‚ð‚æ‚è‚æ‚­—‰ð‚·‚邽‚ß‚ÉA‚¢‚­‚‚©‚̃Z[ƒ‹ƒXƒR[ƒ‹‚ð•·‚¢‚Ă݂邱‚Æ‚ðˆê“x‹‚߂܂µ‚½B‚±‚ê‚Í30•ª‚ð—v‚µ‚Ü‚¹‚ñ‚Å‚µ‚½‚ªAŽ„‚ͬ‹K–͂ȓw—Í‚ª”Ì”„ˆõ‚ɈóÛ‚ð—^‚¦‚½‚ÆŽv‚¢‚Ü‚·B Next [How to Document Wisely](05-How to Document Wisely.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md b/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md index abded59..270f16e 100644 --- a/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,20 +1,20 @@ # How to Document Wisely [//]: # (Version:1.0.0) -Life is too short to write crap nobody will read; if you write crap, nobody will read it. Therefore a little good documentation is best. Managers often don't understand this, because even bad documentation gives them a false sense of security that they are not dependent on their programmers. If someone absolutely insists that you write truly useless documentation, say 'yes' and quietly begin looking for a better job. +l¶‚Í’Z‚­‚Ä’N‚à“ǂ܂Ȃ¢‚­‚ç‚¢‚Ì‚±‚Ƃ𑂢‚Ä‚¢‚éB‚ ‚È‚½‚ª‚½‚킲‚Ƃ𑂭‚È‚çA’N‚à‚»‚ê‚ð“ǂ܂Ȃ¢‚Å‚µ‚傤B‚µ‚½‚ª‚Á‚ÄA­‚µ—Ç‚¢ƒhƒLƒ…ƒƒ“ƒg‚ªÅ“K‚Å‚·Bƒ}ƒl[ƒWƒƒ[‚Í‚±‚ê‚ð—‰ð‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B‚È‚º‚È‚çAŒë‚Á‚½ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚Å‚ ‚Á‚Ä‚àA”ނ炪ƒvƒƒOƒ‰ƒ}[‚Ɉˑ¶‚µ‚Ä‚¢‚È‚¢‚Æ‚¢‚¤Œë‚Á‚½ƒZƒLƒ…ƒŠƒeƒBŠ´Šo‚ð—^‚¦‚é‚©‚ç‚Å‚·B’N‚©‚ª–{“–‚É–ð‚É—§‚½‚È‚¢•¶‘‚ð‘‚¢‚Ä‚¢‚邯’fŒ¾‚µ‚Ä‚¢‚éꇂÍAu‚Í‚¢v‚ÆŒ¾‚Á‚Ä©‚ÉŽdŽ–‚ð’T‚µŽn‚ß‚éB -There's nothing quite as effective as putting an accurate estimate of the amount of time it will take to produce good documentation into an estimate to slacken the demand for documentation. The truth is cold and hard: documentation, like testing, can take many times longer than developing code. +ƒhƒLƒ…ƒƒ“ƒg‚ÌŽù—v‚ðŠÉ˜a‚·‚邽‚ß‚ÉA“K؂ȃhƒLƒ…ƒƒ“ƒg‚ðŒ©Ï‚à‚è‚É‘g‚Ýž‚ނ̂ɂ©‚©‚鎞ŠÔ‚ð³Šm‚ÉŒ©Ï‚à‚邱‚Æ‚ÍA‚»‚ê‚Ù‚ÇŒø‰Ê“I‚ł͂ ‚è‚Ü‚¹‚ñB^ŽÀ‚ÍŠ¦‚­‚ē‚¢FƒeƒXƒg‚̂悤‚ȃhƒLƒ…ƒƒ“ƒg‚ÍAƒR[ƒh‚ðŠJ”­‚·‚邿‚è‚à‰½”{‚à’·‚­‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B -Writing good documentation is, first of all, good writing. I suggest you find books on writing, study them, and practice. But even if you are a lousy writer or have poor command of the language in which you must document, the Golden Rule is all you really need: 'Do unto others as you would have them do unto you.' Take time to really think about who will be reading your documentation, what they need to get out of it, and how you can teach that to them. If you do that, you will be an above average documentation writer, and a good programmer. +—Ç‚¢•¶‘‚ð‘‚­‚±‚Æ‚ÍA‚Ü‚¸‘æˆê‚ÉA—Ç‚¢‘‚«•û‚Å‚·BŽ„‚Í‚ ‚È‚½‚ªŽ·•MA•׋­A—ûK‚ÉŠÖ‚·‚é–{‚ðŒ©‚Â‚¯‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B‚µ‚©‚µA‚½‚Æ‚¦‚ ‚È‚½‚ª”Ú—ò‚Èì‰Æ‚Å‚ ‚Á‚Ä‚àA‚ ‚È‚½‚ª•¶‘‰»‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢Œ¾—t‚Ì•nŽã‚È–½—ß‚ðŽ‚Á‚Ä‚¢‚Ä‚àA‰©‹à‚̃‹[ƒ‹‚Í–{“–‚É•K—v‚È‚à‚̂ł·Fu‚ ‚È‚½‚ª”Þ‚ç‚É‚ ‚È‚½‚Ì‚±‚Æ‚ð‚³‚¹‚邿‚¤‚ÉA‘¼l‚És‚¢‚Ü‚·B’N‚ª‚ ‚È‚½‚Ì‘—Þ‚ð“Ç‚ñ‚Å‚¢‚é‚Ì‚©A‚»‚±‚©‚甲‚¯o‚·•K—v‚ª‚ ‚é‚Ì‚©??A‚ǂ̂悤‚É‚»‚ê‚ç‚ð‹³‚¦‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚»‚¤‚·‚é‚È‚çA‚ ‚È‚½‚Í•½‹Ï“I‚ȃhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“ƒ‰ƒCƒ^[‚Å‚ ‚èA—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ɂȂé‚Å‚µ‚傤B -When it comes to actually documenting code itself, as opposed to producing documents that can actually be read by non-programmers, the best programmers I've ever known hold a universal sentiment: write self-explanatory code and only document code in the places that you cannot make it clear by writing the code itself. There are two good reasons for this. First, anyone who needs to see code-level documentation will in most cases be able to and prefer to read the code anyway. Admittedly, this seems easier to the experienced programmer than to the beginner. More importantly however, is that the code and the documentation cannot be inconsistent if there is no documentation. The source code can at worst be wrong and confusing. The documentation, if not written perfectly, can lie, and that is a thousand times worse. +ƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚ªŽÀۂɓǂނ±‚Æ‚ª‚Å‚«‚é•¶‘‚ð쬂·‚é‚̂ł͂Ȃ­AŽÀۂɃR[ƒhŽ©‘̂𕶑‰»‚·‚邱‚ƂɊւµ‚Ä‚ÍAŽ„‚ª¡‚܂łɒm‚Á‚Ä‚¢‚éÅ‚‚̃vƒƒOƒ‰ƒ}[‚Í••Õ“I‚ÈŠ´î‚ðŽ‚Á‚Ä‚¢‚Ü‚·FŽ©–¾‚̃R[ƒh‚ð‘‚¢‚ÄAƒR[ƒhŽ©‘̂𑂭‚±‚Ƃł͂Á‚«‚肳‚¹‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚±‚ê‚É‚ÍA2‚‚̗—R‚ª‚ ‚è‚Ü‚·B‚Ü‚¸AƒR[ƒhƒŒƒxƒ‹‚̃hƒLƒ…ƒƒ“ƒg‚ðŽQÆ‚·‚é•K—v‚ª‚ ‚él‚ÍA‚Ù‚Æ‚ñ‚Ç‚Ìê‡AƒR[ƒh‚ð“Ç‚ß‚é‚æ‚¤‚ɂȂè‚Ü‚·BŠm‚©‚ÉA‚±‚ê‚͉SŽÒ‚æ‚è‚àŒoŒ±–L•x‚ȃvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͊ȒP‚Å‚·B‚µ‚©‚µA‚³‚ç‚Éd—v‚Ȃ̂ÍA•¶‘‚ª‚È‚¯‚ê‚ÎAƒR[ƒh‚Æ•¶‘‚Í–µ‚‚µ‚Ä‚¢‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·Bň«‚Ìê‡Aƒ\[ƒXƒR[ƒh‚ÍŠÔˆá‚Á‚Ĭ—‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·BŠ®‘S‚É‘‚©‚ê‚Ä‚¢‚È‚¯‚ê‚ÎA‚»‚Ì•¶‘‚Í‚¤‚»‚ð‚‚­‚±‚Æ‚ª‚Å‚«A‚»‚ê‚͉½ç”{‚àˆ«‰»‚µ‚Ü‚·B -This does not make it easier on the responsible programmer. How does one write self-explanatory code? What does that even mean? It means: +‚±‚ê‚ÍÓ”C‚ ‚éƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚æ‚èŠÈ’P‚ɂ͂Ȃè‚Ü‚¹‚ñBŽ©–¾‚̃R[ƒh‚ð‚ǂ̂悤‚É‘‚­‚̂ł·‚©H‚»‚ê‚͂ǂ¤‚¢‚¤ˆÓ–¡‚Å‚·‚©H‚»‚̈Ӗ¡‚ÍF -- Writing code knowing that someone will have to read it; -- Applying the golden rule; -- Choosing a solution that is straightforward, even if you could get by with another solution faster; -- Sacrificing small optimizations that obfuscate the code; -- Thinking about the reader and spending some of your precious time to make it easier on her; and -- Not ever using a function name like `foo`,`bar`, or `doIt`! +’N‚©‚ª‚»‚ê‚ð“ǂޕK—v‚ª‚ ‚邱‚Æ‚ð’m‚Á‚Ä‚¢‚éƒR[ƒh‚ð‘‚­B +- ƒS[ƒ‹ƒfƒ“ƒ‹[ƒ‹‚ð“K—p‚·‚éB +- •ʂ̃\ƒŠƒ…[ƒVƒ‡ƒ“‚ðv‘¬‚É—˜—p‚Å‚«‚éꇂłàAŠÈ’P‚ȃ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð‘I‘ð‚·‚éB +- ƒR[ƒh‚ð“ï“lj»‚·‚鬂³‚ÈÅ“K‰»‚ð‹]µ‚É‚·‚éB +- “ÇŽÒ‚Ì‚±‚Æ‚ðl‚¦‚ÄA”Þ—‚ð‚à‚Á‚ÆŠy‚É‚·‚é‹Md‚ÈŽžŠÔ‚ð”ï‚₵‚Ä‚­‚¾‚³‚¢B‚»‚µ‚Ä +- `foo`A` bar`A `doIt`‚̂悤‚ÈŠÖ”–¼‚ðŽg—p‚·‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñI Next [How to Work with Poor Code](06-How to Work with Poor Code.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index e5b2aa3..de9d2d7 100644 --- a/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -1,11 +1,10 @@ # How to Work with Poor Code [//]: # (Version:1.0.0) -It is very common to have to work with poor quality code that someone else has written. Don't think too poorly of them, however, until you have walked in their shoes. They may have been asked very consciously to get something done quickly to meet schedule pressure. Regardless, in order to work with unclear code you must understand it. To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it. To understand it, you will have to read the source code. You will probably have to experiment with it. +’N‚©‚ª‘‚¢‚½—òˆ«‚ȃR[ƒh‚Åì‹Æ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Ƃ͔ñí‚Ɉê”Ê“I‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚ªŒC‚ð—š‚­‚܂łÍA‚ ‚Ü‚è‚É‚à•nŽã‚ł͂Ȃ¢‚ÆŽv‚Á‚Ä‚­‚¾‚³‚¢B”Þ‚ç‚ÍAƒXƒPƒWƒ…[ƒ‹ˆ³—͂𖞂½‚·‚½‚߂ɉ½‚©‚ð‚·‚Î‚â‚­s‚¤‚½‚ß‚ÉAˆÓޝ“I‚ɗЂ܂ê‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚»‚ê‚É‚©‚©‚í‚炸A•s–¾—ĂȃR[ƒh‚Åì‹Æ‚·‚é‚É‚ÍA‚»‚ê‚ð—‰ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ð—‰ð‚·‚é‚ɂ͊wKŽžŠÔ‚ª•K—v‚ÅA‚»‚ÌŽžŠÔ‚͂ǂ±‚©‚̃XƒPƒWƒ…[ƒ‹‚©‚ço‚È‚¯‚ê‚΂Ȃ炸A‚ ‚È‚½‚Í‚»‚ê‚ðŽå’£‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ð—‰ð‚·‚é‚É‚ÍAƒ\[ƒXƒR[ƒh‚ð“ǂ܂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚¨‚»‚ç‚­‚»‚ê‚ðŽŽ‚·•K—v‚ª‚ ‚è‚Ü‚·B -This is a good time to document, even if it is only for yourself, because the act of trying to document the code will force you to consider angles you might not have considered, and the resulting document may be useful. While you're doing this, consider what it would take to rewrite some or all of the code. Would it actually save time to rewrite some of it? Could you trust it better if you rewrote it? Be careful of arrogance here. If you rewrite it, it will be easier for you to deal with, but will it really be easier for the next person who has to read it? If you rewrite it, what will the test burden be? Will the need to re-test it outweigh any benefits that might be gained? +ƒR[ƒh‚ð•¶‘‰»‚µ‚悤‚Æ‚·‚邯A‚ ‚È‚½‚ªl—¶‚µ‚È‚©‚Á‚½‚©‚à‚µ‚ê‚È‚¢Šp“x‚ðl—¶‚µ‚È‚¯‚ê‚΂Ȃç‚È‚­‚È‚èAŒ‹‰Ê‚Æ‚µ‚Ä“¾‚ç‚ê‚é•¶‘‚ª–𗧂‚©‚à‚µ‚ê‚È‚¢‚Ì‚ÅAŽ©•ªŽ©g‚¾‚¯‚Å‚ ‚Á‚Ä‚àA‚±‚ê‚ð•¶‘‰»‚·‚é‚̂͂¢‚¢ŽžŠÔ‚Å‚·B‚±‚ê‚ð‚â‚Á‚Ä‚¢‚éŠÔAƒR[ƒh‚̈ꕔ‚Ü‚½‚Í‘S•”‚ð‘‚«’¼‚·‚ɂ͉½‚ª•K—v‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚»‚ê‚ÍŽÀÛ‚É‚»‚ê‚ð‘‚«Š·‚¦‚鎞ŠÔ‚ðß–ñ‚·‚é‚Å‚µ‚傤‚©H‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚ÆA‚ ‚È‚½‚Í‚»‚ê‚ð‚æ‚èM—Ђł«‚é‚Å‚µ‚傤‚©H‚±‚±‚Řü–‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚ÆA‚ ‚È‚½‚͑Έ‚µ‚â‚·‚­‚È‚è‚Ü‚·‚ªA‚»‚ê‚ð“ǂ܂Ȃ¯‚ê‚΂Ȃç‚È‚¢ŽŸ‚Ìl‚ɂƂÁ‚Ă͖{“–‚ÉŠÈ’P‚Å‚µ‚傤‚©H‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚È‚çAƒeƒXƒg‚Ì•‰’S‚Í‚¢‚­‚ç‚Å‚·‚©H‚»‚ê‚ðăeƒXƒg‚·‚é•K—v«‚ÍA“¾‚ç‚ê‚é‰Â”\«‚Ì‚ ‚é—˜‰v‚æ‚è‚àd—v‚¾‚낤‚©H -In any estimate that you make for work against code you didn't write, the quality of that code should affect your perception of the risk of problems and unk-unks. - -It is important to remember that abstraction and encapsulation, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. +‚ ‚È‚½‚ª‘‚¢‚Ä‚¢‚È‚¢ƒR[ƒh‚ɑ΂·‚éì‹Æ‚Ì‚½‚߂̂ ‚È‚½‚Ì„’è‚Å‚ÍA‚»‚̃R[ƒh‚Ì•iŽ¿‚ÍA–â‘è‚âunk-unks‚ÌƒŠƒXƒN‚ɑ΂·‚é‚ ‚È‚½‚Ì”Fޝ‚ɉe‹¿‚ð—^‚¦‚é‚Í‚¸‚Å‚·B +ƒvƒƒOƒ‰ƒ}‚ÌÅ‚à—D‚ꂽƒc[ƒ‹‚Ì‚¤‚¿‚Ì2‚‚ł ‚é’ŠÛ‰»‚ƃJƒvƒZƒ‹‰»‚ÍA“Á‚É–ï‰î‚ȃR[ƒh‚É“K—p‰Â”\‚Å‚ ‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚­‚±‚Æ‚ªd—v‚Å‚·B‘å‚«‚ȃR[ƒhƒuƒƒbƒN‚ðÄÝŒv‚·‚邱‚Ƃ͂ł«‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚ ‚é’ŠÛ‰»—Ê‚ð’ljÁ‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA—Ç‚¢ƒfƒUƒCƒ“‚̃ƒŠƒbƒg‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B“Á‚ÉAŒÂ•Ê‚ÉÄÝŒv‚·‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚ÉA“Á‚Ɉ«‚¢•”•i‚ðŽæ‚èœ‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B Next [How to Use Source Code Control](07-How to Use Source Code Control.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 3285753..4ab57b1 100644 --- a/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,9 +1,9 @@ # How to Use Source Code Control [//]: # (Version:1.0.0) -Source code control systems (also known as Version Control Systems) let you manage projects effectively. They're very useful for one person and essential for a group. They track all changes in different versions so that no code is ever lost and meaning can be assigned to changes. One can create throw-away and debugging code with confidence with a source code control system, since the code you modify is kept carefully separate from committed, official code that will be shared with the team or released. +ƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€iƒo[ƒWƒ‡ƒ“ŠÇ—ƒVƒXƒeƒ€‚Æ‚àŒÄ‚΂ê‚Ü‚·j‚Å‚ÍAƒvƒƒWƒFƒNƒg‚ðŒø‰Ê“I‚ÉŠÇ—‚Å‚«‚Ü‚·B”Þ‚ç‚͈êl‚ɂƂÁ‚ĂƂĂà—L—p‚ÅAƒOƒ‹[ƒv‚ɂ͕K—v•s‰ÂŒ‡‚Å‚·BƒR[ƒh‚ªŽ¸‚í‚ꂸA•ÏX‚ɈӖ¡‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚邿‚¤‚ÉAˆÙ‚È‚éƒo[ƒWƒ‡ƒ“‚Ì‚·‚ׂĂ̕ÏX‚ð’ÇÕ‚µ‚Ü‚·B‚ ‚È‚½‚ª•ÏX‚·‚éƒR[ƒh‚ÍAƒ`[ƒ€‚Æ‹¤—L‚³‚ê‚éA‚Ü‚½‚ÍƒŠƒŠ[ƒX‚³‚ê‚éƒRƒ~ƒbƒg‚³‚ꂽŒöŽ®‚̃R[ƒh‚©‚çTd‚ɕۂ½‚ê‚é‚Ì‚ÅAƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚ÉŽ©M‚ðŽ‚Á‚ăXƒ[ƒAƒEƒFƒC‚ƃfƒoƒbƒOƒR[ƒh‚ð쬂·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -I was late to appreciate the benefits of source code control systems but now I wouldn't live without one even on a one-person project. Generally they are necessary when you have team working on the same code base. However, they have another great advantage: they encourage thinking about the code as a growing, organic system. Since each change is marked as a new revision with a new name or number, one begins to think of the software as a visibly progressive series of improvements. I think this is especially useful for beginners. +Ž„‚̓\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚Ì—˜“_‚ð—‰ð‚·‚é‚̂ɒx‚ê‚Ü‚µ‚½‚ªA¡‚Í1l‚̃vƒƒWƒFƒNƒg‚Å‚à‚È‚­‚Ăං«‚Ä‚¢‚Ü‚¹‚ñBˆê”Ê“I‚É‚ÍA“¯‚¶ƒR[ƒhƒx[ƒX‚Åì‹Æ‚·‚éƒ`[ƒ€‚ª•K—v‚ÈꇂɕK—v‚Å‚·B‚µ‚©‚µA”Þ‚ç‚ɂ͕ʂ̑傫‚È—˜“_‚ª‚ ‚è‚Ü‚·BƒR[ƒh‚𬒷‚µ‚Ä‚¢‚éƒI[ƒKƒjƒbƒNƒVƒXƒeƒ€‚Æl‚¦‚邱‚Æ‚ð§—サ‚Ü‚·BŠe•ÏX‚ÍV‚µ‚¢–¼‘O‚Ü‚½‚͔Ԇ‚ÌV‚µ‚¢ƒŠƒrƒWƒ‡ƒ“‚Æ‚µ‚ă}[ƒN‚³‚ê‚邽‚ßAƒ\ƒtƒgƒEƒFƒA‚Í–Ú‚ÉŒ©‚¦‚éi•à“I‚Ȉê˜A‚̉ü‘P‚Æl‚¦‚邿‚¤‚ɂȂè‚Ü‚·BŽ„‚Í‚±‚ꂪ‰SŽÒ‚ɂƂÁ‚Ä“Á‚ɕ֗˜‚¾‚ÆŽv‚¢‚Ü‚·B -A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. +ƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚ðŽg—p‚·‚邽‚߂̗ǂ¢ƒeƒNƒjƒbƒN‚ÍAí‚ÉÅV‚Ìó‘ԂɂȂÁ‚Ä‚©‚甓úˆÈ“à‚É‘ØÝ‚·‚邱‚Ƃł·B”“ú‚ÅI—¹‚Å‚«‚È‚¢ƒR[ƒh‚̓`ƒFƒbƒNƒCƒ“‚³‚ê‚Ä‚¢‚Ü‚·‚ªA”ñƒAƒNƒeƒBƒu‚ŌĂÑo‚³‚ê‚邱‚Ƃ͂Ȃ¢‚½‚ßA‘¼‚Ìl‚ɂ͖â‘è‚Ͷ‚¶‚Ü‚¹‚ñB‚ ‚È‚½‚̃`[ƒ€ƒƒCƒg‚ðŒ¸‘¬‚³‚¹‚éŠÔˆá‚¢‚ð”Æ‚·‚±‚Æ‚Íd‘å‚ȃGƒ‰[‚Å‚·B‚»‚ê‚Í‚µ‚΂µ‚΃^ƒu[‚Å‚·B Next [How to Unit Test](08-How to Unit Test.md) diff --git a/jp/1-Beginner/Team-Skills/08-How to Unit Test.md b/jp/1-Beginner/Team-Skills/08-How to Unit Test.md index 2e9a344..8786974 100644 --- a/jp/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/jp/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,9 +1,9 @@ # How to Unit Test [//]: # (Version:1.0.0) -Unit testing, the testing of an individual piece of coded functionality by the team that wrote it, is a part of coding, not something different from it. Part of designing the code is designing how it will be tested. You should write down a test plan, even if it is only one sentence. Sometimes the test will be simple: 'Does the button look good?' Sometimes it will be complex: 'Did this matching algorithm return precisely the correct matches?' +’P‘̃eƒXƒg‚ÍA‚»‚ê‚ð‘‚¢‚½ƒ`[ƒ€‚É‚æ‚Á‚ăR[ƒh‰»‚³‚ꂽ‹@”\‚ÌŒÂX‚Ì•”•ª‚ðƒeƒXƒg‚·‚邱‚Æ‚ÍA‚»‚ê‚Æ‚͈قȂé‚à‚̂ł͂Ȃ­AƒR[ƒfƒBƒ“ƒO‚̈ꕔ‚Å‚·B ƒR[ƒh‚ÌÝŒv‚̈ꕔ‚ÍAƒeƒXƒg‚·‚é•û–@‚ðÝŒv‚·‚邱‚Ƃł·B 1‚‚̕¶‚¾‚¯‚Å‚ ‚Á‚Ä‚àAƒeƒXƒgŒv‰æ‚ð‘‚«—¯‚ß‚é‚ׂ«‚Å‚·B Žž‚ɂ̓eƒXƒg‚ªŠÈ’P‚ɂȂéFuƒ{ƒ^ƒ“‚ÍŒ©‰h‚¦‚ª—Ç‚¢‚ÌHv Žž‚ɂ͕¡ŽG‚ɂȂè‚Ü‚·F '‚±‚̃}ƒbƒ`ƒ“ƒOƒAƒ‹ƒSƒŠƒYƒ€‚ͳŠm‚ɳ‚µ‚¢ƒ}ƒbƒ`‚ð•Ô‚µ‚Ü‚µ‚½‚©H' -Use assertion checking and test drivers whenever possible. This not only catches bugs early, but is very useful later on and lets you eliminate mysteries that you would otherwise have to worry about. +‰Â”\‚Å‚ ‚ê‚ÎAƒAƒT[ƒVƒ‡ƒ“ƒ`ƒFƒbƒN‚ƃeƒXƒgƒhƒ‰ƒCƒo‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B ‚±‚ê‚Í‘Šú‚ɃoƒO‚ðƒLƒƒƒbƒ`‚·‚邾‚¯‚łȂ­AŒã‚Å”ñí‚ɕ֗˜‚ÅA‚ ‚È‚½‚ªS”z‚·‚é•K—v‚̂Ȃ¢ƒ~ƒXƒeƒŠ[‚ð”rœ‚µ‚Ü‚·B -The Extreme Programming developers are writing extensively on unit testing effectively; I can do no better than to recommend their writings. +ƒGƒNƒXƒgƒŠ[ƒ€EƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÌŠJ”­ŽÒ‚ÍAƒ†ƒjƒbƒgEƒeƒXƒg‚ðŒø‰Ê“I‚ÉŽÀs‚µ‚Ä‚¢‚Ü‚·B Ž„‚͔ނç‚Ì•¶Í‚ð„‘E‚·‚邿‚è‚à‚¤‚Ü‚­‚¢‚­‚±‚Ƃ͂ł«‚Ü‚¹‚ñB Next [Take Breaks when Stumped](09-Take Breaks when Stumped.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index 24f1405..ef3001f 100644 --- a/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ # Take Breaks when Stumped [//]: # (Version:1.0.0) -When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. +¢‚Á‚½‚Æ‚«‚ÍA‹xŒe‚µ‚Ä‚­‚¾‚³‚¢B ¢‚Á‚½‚Æ‚«‚ÉŽ„‚ÍŽž‚É‚Í15•ªŠÔáÒ‘z‚µAŽ„‚ª‚»‚ê‚É–ß‚Á‚½‚Æ‚«‚É–â‘è‚Í–‚–@‚̂悤‚ɉð‚­B –é‚̇–°‚ÍŽž‚ɂ͓¯‚¶‚悤‚ɑ傫‚­‚È‚éB ˆêŽž“I‚É‘¼‚̃AƒNƒeƒBƒrƒeƒB‚ÉØ‚è‘Ö‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index 7f33239..534e0b5 100644 --- a/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,16 +1,16 @@ # How to Recognize When to Go Home [//]: # (Version:1.0.0) -Computer programming is an activity that is also a culture. The unfortunate fact is that it is not a culture that values mental or physical health very much. For both cultural/historical reasons (the need to work at night on unloaded computers, for example) and because of overwhelming time-to-market pressure and the scarcity of programmers, computer programmers are traditionally overworked. I don't think you can trust all the stories you hear, but I think 60 hours a week is common, and 50 is pretty much a minimum. This means that often much more than that is required. This is a serious problem for a good programmer, who is responsible not only for themselves but their team-mates as well. You have to recognize when to go home, and sometimes when to suggest that other people go home. There can't be any fixed rules for solving this problem, anymore than there can be fixed rules for raising a child, for the same reason---every human being is different. +ƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÍA•¶‰»‚Å‚à‚ ‚銈“®‚Å‚·BŽc”O‚È‚±‚Æ‚ÉASg‚ÌŒ’N‚ð‘娂ɂ·‚é•¶‰»‚ł͂ ‚è‚Ü‚¹‚ñB•¶‰»“I/—ðŽj“I‚È——Ri—Ⴆ‚ÎA–éŠÔ‚ɃRƒ“ƒsƒ…[ƒ^‚ðƒAƒ“ƒ[ƒh‚·‚é•K—v«j‚âAŽs꓊“ü‚܂ł̎žŠÔ‚̈³”—‚ƃvƒƒOƒ‰ƒ}‚Ì•s‘«‚Ì‚½‚ß‚ÉAƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ}‚Í“`““I‚ɉߘJ‚Å‚·BŽ„‚Í‚ ‚È‚½‚ª•·‚¢‚Ä‚¢‚é‚·‚ׂĂ̕¨Œê‚ðM‚¶‚邱‚Ƃ͂ł«‚È‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·‚ªAT‚É60ŽžŠÔ‚ªˆê”Ê“I‚ÅA50‚Í‚©‚Ȃ譂Ȃ¢‚ÆŽv‚¢‚Ü‚·B‚±‚ê‚ÍA‚»‚ê‚æ‚è‚à‚͂邩‚É‘½‚­‚Ì‚±‚Æ‚ª•K—v‚Å‚ ‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚Í—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂƂÁ‚Äd‘å‚È–â‘è‚Å‚ ‚èAƒvƒƒOƒ‰ƒ}‚ÍŽ©•ªŽ©g‚ł͂Ȃ­ƒ`[ƒ€ƒƒCƒg‚Å‚à‚ ‚è‚Ü‚·B‚¢‚‰ƂɋA‚é‚ׂ«‚©AŽž‚ɂ͑¼‚Ìl‚ª‰Æ‚É‹A‚邱‚Æ‚ðŽ¦´‚·‚邯‚«‚ð”Fޝ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚Ì–â‘è‚ð‰ðŒˆ‚·‚邽‚߂̌Œ肳‚ꂽƒ‹[ƒ‹‚Í‚ ‚è‚Ü‚¹‚ñB‚È‚º‚Ȃ瓯‚¶——R‚ÅA‚·‚ׂĂÌlŠÔ‚ªˆÙ‚È‚Á‚Ä‚¢‚é‚©‚ç‚Å‚·B -Beyond 60 hours a week is an extraordinary effort for me, which I can apply for short periods of time (about one week), and that is sometimes expected of me. I don't know if it is fair to expect 60 hours of work from a person; I don't even know if 40 is fair. I am sure, however, that it is stupid to work so much that you are getting little out of that extra hour you work. For me personally, that's any more than 60 hours a week. I personally think a programmer should exercise noblesse oblige and shoulder a heavy burden. However, it is not a programmer's duty to be a patsy. The sad fact is programmers *are* often asked to be patsies in order to put on a show for somebody, for example a manager trying to impress an executive. Programmers often succumb to this because they are eager to please and not very good at saying no. There are four defences against this: +1TŠÔ‚É60ŽžŠÔ‚ð’´‚¦‚邯AŽ„‚Í’ZŠúŠÔi–ñ1TŠÔj\‚µž‚Þ‚±‚Æ‚ª‚Å‚«AŽž‚ɂ͎„‚ÉŠú‘Ò‚³‚ê‚éAŽ„‚ɂƂÁ‚Ä“Á•ʂȓw—͂ł·BŽ„‚Íl‚©‚ç60ŽžŠÔ‚ÌŽdŽ–‚ðŠú‘Ò‚·‚é‚Ì‚ªŒö³‚Å‚ ‚é‚©‚Ç‚¤‚©‚Í•ª‚©‚è‚Ü‚¹‚ñBŽ„‚Í40‚ªŒö³‚Å‚ ‚é‚©‚Ç‚¤‚©‚í‚©‚ç‚È‚¢B‚µ‚©‚µAŽ„‚Í‚ ‚È‚½‚ª“­‚¢‚Ä‚¢‚é—]•ª‚ÈŽžŠÔ‚ð­‚µ‚Å‚àŽg‚¢‰Ê‚½‚µ‚Ä‚¢‚é‚Ù‚ÇAŽdŽ–‚ª‹ð‚©‚Å‚ ‚邯ŠmM‚µ‚Ä‚¢‚Ü‚·BŒÂl“I‚É‚ÍA‚»‚ê‚ÍT‚É60ŽžŠÔˆÈã‚Å‚·BŽ„‚ÍŒÂl“I‚É‚ÍAƒvƒƒOƒ‰ƒ}[‚ªƒm[ƒuƒ‹ƒŒƒX‚ðŽÀs‚µ‚Äd‚¢•‰’S‚𕉂í‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æl‚¦‚Ä‚¢‚Ü‚·B‚µ‚©‚µA‚»‚ê‚̓vƒƒOƒ‰ƒ}‚Ì‹`–±‚ł͂ ‚è‚Ü‚¹‚ñB”ß‚µ‚¢Ž–ŽÀ‚ÍAƒvƒƒOƒ‰ƒ}[‚ÍA’N‚©‚Ì‚½‚߂ɃVƒ‡[‚ð‚·‚é‚½‚ß‚ÉA—Ⴆ‚ÎŒo‰cŽÒ‚Ɉóۂ¯‚éƒ}ƒl[ƒWƒƒ[‚È‚ÇAƒpƒgƒŒƒC‚ɂȂ邱‚Æ‚ð‚æ‚­—v‹‚³‚ê‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚Í‚µ‚΂µ‚΂±‚ê‚ɋꂵ‚ñ‚Å‚¢‚Ü‚·B‚È‚º‚È‚çA”Þ‚ç‚ÍŠì‚ñ‚Å—~‚µ‚¢‚Æ”M–]‚µ‚Ä‚¢‚ÄA‚¢‚¢‚¦‚ł͂Ȃ¢‚ÆŒ¾‚Á‚Ä‚¢‚È‚¢‚©‚ç‚Å‚·B‚±‚ê‚ɑ΂µ‚Ä4‚‚̖hŒä‚ª‚ ‚è‚Ü‚·F -- Communicate as much as possible with everyone in the company so that no one can mislead the executives about what is going on, -- Learn to estimate and schedule defensively and explicitly and give everyone visibility into what the schedule is and where it stands, -- Learn to say no, and say no as a team when necessary, and -- Quit if you have to. +- ŽÐ“à‚Ì‘Sˆõ‚ƂȂé‚ׂ­‘½‚­‚Ìl‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚Æ‚Á‚ÄA‰½‚ª‹N‚±‚Á‚Ä‚¢‚é‚Ì‚©‚ɂ‚¢‚ÄŒo‰cŽÒ‚ÉŒë‰ð‚ð—^‚¦‚邱‚Æ‚ª‚È‚¢‚悤‚É‚µ‚Ü‚·B +- –h‰q“I‚©‚–¾Ž¦“I‚ÉŒ©Ï‚à‚èAƒXƒPƒWƒ…[ƒ‹‚𗧂Ă邱‚Æ‚ðŠw‚ÑA’N‚ªƒXƒPƒWƒ…[ƒ‹‚ª‰½‚Å‚ ‚é‚©A‚Ç‚±‚É—§‚Á‚Ä‚¢‚é‚Ì‚©‚ðŒ©‚¦‚邿‚¤‚É‚·‚éB +- •K—v‚Å‚ ‚ê‚΂¢‚¢‚¦A‚¢‚¢‚¦ƒ`[ƒ€‚ÆŒ¾‚¤‚±‚Æ‚ðŠw‚Ô +‚ ‚È‚½‚ª‚·‚é•K—v‚ª‚ ‚ê‚ÎI—¹‚µ‚Ü‚·B -Most programmers are good programmers, and good programmers want to get a lot done. To do that, they have to manage their time effectively. There is a certain amount of mental inertia associated with getting warmed-up to a problem and deeply involved in it. Many programmers find they work best when they have long, uninterrupted blocks of time in which to get warmed-up and concentrate. However, people must sleep and perform other duties. Each person needs to find a way to satisfy both their human rhythm and their work rhythm. Each programmer needs to do whatever it takes to procure efficient work periods, such as reserving certain days in which you will attend only the most critical meetings. +‚Ù‚Æ‚ñ‚ǂ̃vƒƒOƒ‰ƒ}[‚Í—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Å‚ ‚èA—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Í‘½‚­‚Ì‚±‚Æ‚ð‚µ‚½‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·B‚»‚Ì‚½‚߂ɂÍAŽžŠÔ‚ðŒø‰Ê“I‚ÉŠÇ—‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B–â‘è‚É’g‚©‚­‚È‚èA‚»‚ê‚É[‚­ŠÖ‚í‚邱‚ƂɊ֘A‚µ‚ÄA‚ ‚é’ö“x‚̸_“Iе«‚ª‚ ‚è‚Ü‚·B‘½‚­‚̃vƒƒOƒ‰ƒ}[‚ÍAƒEƒH[ƒ~ƒ“ƒOƒAƒbƒv‚µ‚ÄW’†‚·‚鎞ŠÔ‚ª’·‚­‚Ä“rØ‚ê‚邱‚Ƃ̂Ȃ¢ŽžŠÔ‚ª‚ ‚ê‚ÎA”Þ‚ç‚ªÅ‚àŒø‰Ê“I‚Å‚ ‚邯д‚¶‚Ä‚¢‚Ü‚·B‚µ‚©‚µAlX‚Í–°‚ç‚È‚¯‚ê‚΂Ȃ炸A‘¼‚Ì”C–±‚ð‹s‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢B‚»‚ꂼ‚ê‚Ìl‚ÍAlŠÔ‚ÌƒŠƒYƒ€‚ÆŽdŽ–‚ÌƒŠƒYƒ€‚Ì—¼•û‚ð–ž‘«‚³‚¹‚é•û–@‚ðŒ©‚Â‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·BŠeƒvƒƒOƒ‰ƒ}[‚ÍAÅ‚àd—v‚ȉï‹c‚ɂ̂ݎQ‰Á‚·‚é“Á’è‚Ì“ú‚ð—\–ñ‚·‚é‚È‚ÇAŒø—¦“I‚Èì‹ÆŠúŠÔ‚ðŠm•Û‚·‚邽‚߂ɕK—v‚Èì‹Æ‚ð‚·‚×‚Äs‚¤•K—v‚ª‚ ‚è‚Ü‚·B -Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. +Ž„‚ÍŽq‹Ÿ‚ª‚¢‚é‚Ì‚ÅAŽžX”Þ‚ç‚Æˆê‚É–é‚ð‰ß‚²‚µ‚Ä‚¢‚Ü‚·BŽ„‚ɂƂÁ‚ÄÅ‚àŒø‰Ê“I‚ÈƒŠƒYƒ€‚ÍA”ñí‚É’·‚¢ˆê“ú‚ð‰ß‚²‚·‚±‚Ƃł·BƒIƒtƒBƒX‚âƒIƒtƒBƒX‹ß‚­‚ÅQ‚邱‚Æ‚ª‚Å‚«‚Ü‚·iŽ„‚͒ʋ΂©‚ç’ʋ΂܂Œʋ΂µ‚Ä‚¢‚Ü‚·jBQ‚éBŽ„‚Í‚±‚ê‚ÉŠµ‚ê‚Ä‚¢‚Ü‚¹‚ñ‚ªA‚»‚ê‚ÍŽ„‚ª‰ðŒˆ‚Å‚«‚éÅ‘P‚̑˦ˆÄ‚Å‚·B“`õ•a‚Ìꇂ͉ƂɋA‚éB‚ ‚È‚½‚ªŽ©ŽEŽvl‚ðl‚¦‚Ä‚¢‚é‚È‚çA‚ ‚È‚½‚͉ƂɋA‚é‚ׂ«‚Å‚·BŽEl‚ÌŽvl‚ð”•bˆÈãl‚¦‚邯A‹xŒe‚â‰Æ‚É‹A‚é‚ׂ«‚Å‚·Bd“x‚̸_ˆÙíAŒy“x‚Ì‚¤‚•aˆÈŠO‚̸_޾г‚Ì’›Œó‚ðŽ¦‚·ê‡‚ÍA’N‚©‚ð‰Æ‚É”hŒ­‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª’Êí‚Í”æ‚ê‚ÌŒ´ˆö‚ł͂Ȃ¢•û–@‚Å•s³’¼‚Ü‚½‚Í‹\áÔ‚É—U˜f‚³‚ꂽꇂÍA‹xŒe‚ðŽæ‚é•K—v‚ª‚ ‚è‚Ü‚·B”æ˜J‚É‘ÎR‚·‚邽‚߂ɃRƒJƒCƒ“‚Ü‚½‚̓Aƒ“ƒtƒFƒ^ƒ~ƒ“‚ðŽg—p‚µ‚È‚¢‚Å‚­‚¾‚³‚¢BƒJƒtƒFƒCƒ“‚ð——p‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) diff --git a/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md index 8b98887..4bf81ab 100644 --- a/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md +++ b/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md @@ -1,15 +1,15 @@ # How to Deal with Difficult People [//]: # (Version:1.0.0) -You will probably have to deal with difficult people. You may even be a difficult person yourself. If you are the kind of person who has a lot of conflicts with co-workers and authority figures, you should cherish the independence this implies, but work on your interpersonal skills without sacrificing your intelligence or principles. +‚¨‚»‚ç‚­A“‚¢l‚½‚¿‚ɑΈ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Å‚µ‚傤B‚ ‚È‚½Ž©g‚à“‚¢l‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚ª“¯—»‚⌠ˆÐŽÒ‚Æ‘½‚­‚ÌŠ‹“¡‚ð‚µ‚Ä‚¢‚邿‚¤‚Èl‚ÌꇂÍA‚±‚ꂪˆÓ–¡‚·‚铯—§«‚ð‘娂ɂµ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ‚ªA‚ ‚È‚½‚Ì’m«‚⌴‘¥‚ð‹]µ‚É‚·‚邱‚ƂȂ­A -This can be very disturbing to some programmers who have no experience in this sort of thing and whose previous life experience has taught them patterns of behaviour that are not useful in the workplace. Difficult people are often accustomed to disagreement and they are less affected by social pressure to compromise than others. The key is to respect them appropriately, which is more than you will want to but not as much as they might want. +‚±‚ê‚ÍA‚±‚̂悤‚È‚±‚Æ‚ðŒoŒ±‚µ‚Ä‚¨‚炸AˆÈ‘O‚Ìl¶ŒoŒ±‚ªEê‚Å–ð‚É—§‚½‚È‚¢s“®ƒpƒ^[ƒ“‚ð‹³‚¦‚Ä‚­‚ꂽƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚ÍA”ñí‚Ɏז‚‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B“‚¢l‚Í‚µ‚΂µ‚Έӌ©‚Ì•sˆê’v‚ÉŠµ‚ê‚Ä‚¨‚èA‘¼ŽÒ‚æ‚è‚à‘˦‚·‚éŽÐ‰ï“Iˆ³—͂̉e‹¿‚ðŽó‚¯‚É‚­‚¢BŒ®‚Í“K؂ɑ¸d‚·‚邱‚Ƃł·B‚±‚ê‚ÍA‚ ‚È‚½‚ª–]‚Þ‚æ‚è‚͂邩‚É‘½‚­A‚µ‚©‚µ”ނ炪–]‚Þ‚Ù‚Ç‘½‚­‚Í‚ ‚è‚Ü‚¹‚ñB -Programmers have to work together as a team. When disagreement arises, it must be resolved somehow, it cannot be ducked for long. Difficult people are often extremely intelligent and have something very useful to say. It is critical that you listen to and understand the difficult person without prejudice caused by the person. A failure to communicate is often the basis of disagreement but it can sometimes be removed with great patience. Try to keep this communication cool and cordial, and don't accept any baits for greater conflict that may be offered. After a reasonable period of trying to understand, make a decision. +ƒvƒƒOƒ‰ƒ}[‚̓`[ƒ€‚Æ‚µ‚Ĉê‚É“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB•sˆê’v‚ª¶‚¶‚½‚Æ‚«A‚»‚ê‚͉½‚Æ‚©‰ðŒˆ‚³‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢A‚»‚ê‚Í’·‚¢ŠÔ‹–°‚è‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢B“‚¢l‚Í‚µ‚΂µ‚Δñí‚ÉŒ«–¾‚ÅA‰½‚©”ñí‚É—L—p‚È‚±‚Æ‚ª‚ ‚è‚Ü‚·B“‚¢l‚ª‚»‚Ìl‚É‚æ‚Á‚Ĉø‚«‹N‚±‚³‚ê‚é•ÎŒ©‚È‚­’®‚¢‚Ä—‰ð‚·‚邱‚Æ‚ªd—v‚Å‚·BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽ¸”s‚ÍA‚µ‚΂µ‚Εsˆê’v‚̪‹’‚Å‚·‚ªAŽž‚ɂ͑傫‚È”E‘ςŎæ‚蜂­‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð—Á‚µ‚­S‚Ì‚±‚à‚Á‚½‚à‚̂ɕۂ¿A‚æ‚è‘å‚«‚È‘ˆ‚¢‚ª‹N‚±‚é‰Â”\«‚Ì‚ ‚é‰a‚ðŽó‚¯“ü‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B—‰ð‚µ‚悤‚Æ‚·‚釗“I‚ÈŠúŠÔ‚ÌŒãAŒˆ’è‚ð‰º‚·B -Don't let a bully force you to do something you don't agree with. If you are the leader, do what you think is best. Don't make a decision for any personal reasons, and be prepared to explain the reasons for your decision. If you are a team-mate with a difficult person, don't let the leader's decision have any personal impact. If it doesn't go your way, do it the other way whole-heartedly. +‚¢‚¶‚ß‚ÁŽq‚ª‚ ‚È‚½‚É“¯ˆÓ‚µ‚È‚¢‰½‚©‚ð‚·‚é‚æ‚¤‚É‹­§‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ªƒŠ[ƒ_[‚Å‚ ‚ê‚ÎA‚ ‚È‚½‚ªˆê”Ô—Ç‚¢‚ÆŽv‚¤‚±‚Æ‚ð‚µ‚Ä‚­‚¾‚³‚¢BŒÂl“I‚È——R‚ÅŒˆ’f‚ð‰º‚³‚È‚¢‚ÅAŒˆ’è——R‚ðà–¾‚·‚途õ‚ð‚µ‚Ä‚­‚¾‚³‚¢B“‚¢l‚ƃ`[ƒ€ƒƒCƒg‚ð‚µ‚Ä‚¢‚éꇂÍAƒŠ[ƒ_[‚ÌŒˆ’è‚ÉŒÂl“I‚ȉe‹¿‚ð—^‚¦‚È‚¢‚Å‚­‚¾‚³‚¢B‚»‚ꂪ‚ ‚È‚½‚Ì“¹‚ðs‚­‚±‚Æ‚ª‚È‚¢‚È‚ç‚ÎA‚»‚ê‚͂܂Á‚½‚­S‚ð‚±‚ß‚Ä‘¼‚Ì‚â‚è•û‚Å‚·B -Difficult people do change and improve. I've seen it with my own eyes, but it is very rare. However, everyone has transitory ups and downs. +“‚¢l‚͕ω»‚µA‰ü‘P‚·‚éBŽ„‚ÍŽ©•ª‚Ì–Ú‚Å‚»‚ê‚ðŒ©‚Ü‚µ‚½‚ªA‚»‚ê‚Í”ñí‚ɂ܂ê‚Å‚·B‚µ‚©‚µA’N‚àˆêŽž“I‚È•‚‚«’¾‚Ý‚ª‚ ‚è‚Ü‚·B -One of the challenges that every programmer but especially leaders face is keeping the difficult person fully engaged. They are more prone to duck work and resist passively than others. +‚·‚ׂẴvƒƒOƒ‰ƒ}[A“Á‚ÉŽw“±ŽÒ‚ª’¼–Ê‚µ‚Ä‚¢‚é‰Û‘è‚Ì1‚‚ÍA¢“ï‚Èl•¨‚ðŠ®‘S‚É]Ž–‚³‚¹‚邱‚Ƃł·B”Þ‚ç‚ÍŽdŽ–‚ðƒAƒqƒ‹‚É‚·‚éŒXŒü‚ª‚ ‚èA‘¼‚Ì‚à‚Ì‚æ‚è‚àŽó“®“I‚É’ïR‚·‚éŒXŒü‚ª‚ ‚è‚Ü‚·B. Next [Intermediate skills](../../2-Intermediate) From 909def59252a339a3503ebf2143921193f967b5c Mon Sep 17 00:00:00 2001 From: borerere Date: Thu, 17 Nov 2016 15:26:11 +0900 Subject: [PATCH 105/149] =?UTF-8?q?translate=20=E3=80=8C2-Intermediate?= =?UTF-8?q?=E3=80=8D=20to=20Japanease?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...adeoff Quality Against Development Time.md | 10 ++++---- ...ow to Manage Software System Dependence.md | 12 +++++----- ...w to Decide if Software is Too Immature.md | 24 +++++++++---------- .../04-How to Make a Buy vs Build Decision.md | 18 +++++++------- .../Judgment/05-How to Grow Professionally.md | 8 +++---- .../06-How to Evaluate Interviewees.md | 12 +++++----- ...ow When to Apply Fancy Computer Science.md | 14 +++++------ .../08-How to Talk to Non-Engineers.md | 16 ++++++------- .../01-How to Stay Motivated.md | 14 +++++------ .../02-How to be Widely Trusted.md | 4 ++-- .../03-How to Tradeoff Time vs Space.md | 12 +++++----- .../Personal-Skills/04-How to Stress Test.md | 10 ++++---- ...-How to Balance Brevity and Abstraction.md | 6 ++--- .../06-How to Learn New Skills.md | 10 ++++---- .../Personal-Skills/07-Learn to Type.md | 2 +- .../08-How to Do Integration Testing.md | 4 ++-- .../09-Communication Languages.md | 8 +++---- .../Personal-Skills/10-Heavy Tools.md | 16 ++++++------- .../Personal-Skills/11-How to analyze data.md | 8 +++---- .../01-How to Manage Development Time.md | 8 +++---- ...ow to Manage Third-Party Software Risks.md | 8 +++---- .../03-How to Manage Consultants.md | 6 ++--- .../04-How to Communicate the Right Amount.md | 4 ++-- ... Disagree Honestly and Get Away with It.md | 8 +++---- 24 files changed, 121 insertions(+), 121 deletions(-) diff --git a/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index 0f1bb61..a33dd4d 100644 --- a/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -1,13 +1,13 @@ # How to Tradeoff Quality Against Development Time [//]: # (Version:1.0.0) -Software development is always a compromise between what the project does and getting the project done. But you may be asked to tradeoff quality to speed the deployment of a project in a way that offends your engineering or business sensibilities. For example, you may be asked to do something that is a poor software engineering practice and that will lead to a lot of maintenance problems. +ƒ\ƒtƒgƒEƒFƒAŠJ”­‚ÍAƒvƒƒWƒFƒNƒg‚ªs‚¤‚±‚ƂƃvƒƒWƒFƒNƒg‚ðŠ®—¹‚³‚¹‚邱‚Ƃ̊ԂÅí‚ɑ˦‚Å‚·B‚µ‚©‚µAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚âƒrƒWƒlƒX‚ÌŠ´«‚ð‚‚¯‚邿‚¤‚È•û–@‚ŃvƒƒWƒFƒNƒg‚Ì“WŠJ‚ðƒXƒs[ƒhƒAƒbƒv‚·‚邽‚ß‚ÉA•iŽ¿‚ðƒgƒŒ[ƒhƒIƒt‚·‚邿‚¤‚É‹‚ß‚ç‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎAƒ\ƒtƒgƒEƒFƒAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚ÌŠµs‚ª•nŽã‚ÅAƒƒ“ƒeƒiƒ“ƒX‚Ì–â‘肪‘½‚­”­¶‚·‚邿‚¤‚Èì‹Æ‚ð‚·‚é‚æ‚¤‚É‹‚ß‚ç‚ê‚éꇂª‚ ‚è‚Ü‚·B -If this happens your first responsibility is to inform your team and to clearly explain the cost of the decrease in quality. After all, your understanding of it should be much better than your boss's understanding. Make it clear what is being lost and what is being gained, and at what cost the lost ground will be regained in the next cycle. In this, the visibility provided by a good project plan should be helpful. If the quality tradeoff affects the quality assurance effort, point that out (both to your boss and quality assurance people). If the quality tradeoff will lead to more bugs being reported after the quality assurance period, point that out. +‚±‚ꂪ‹N‚«‚½ê‡‚ÍA‚Ü‚¸ƒ`[ƒ€‚É’m‚点A•iŽ¿’ቺ‚̃RƒXƒg‚𖾊m‚Éà–¾‚·‚邱‚Ƃł·BŒ‹‹Ç‚̂Ƃ±‚ëA‚ ‚È‚½‚Ì—‰ð‚Í‚ ‚È‚½‚ÌãŽi‚Ì—‰ð‚æ‚è‚͂邩‚É—Ç‚¢‚Í‚¸‚Å‚·B‰½‚ªŽ¸‚í‚ê‚Ä‚¢‚é‚Ì‚©A‰½‚ª“¾‚ç‚ê‚Ä‚¢‚é‚Ì‚©‚𖾊m‚É‚µAŽŸ‚̃TƒCƒNƒ‹‚ÅŽ¸‚í‚ꂽ’n–Ê‚ð‚ǂ̂悤‚ȃRƒXƒg‚ÅŽæ‚è–ß‚·‚̂łµ‚傤‚©B‚±‚Ì’†‚ÅA—Ç‚¢ƒvƒƒWƒFƒNƒgŒv‰æ‚ª’ñ‹Ÿ‚·‚é‰ÂŽ‹«‚ª–𗧂‚͂¸‚Å‚·B•iŽ¿‚̃gƒŒ[ƒhƒIƒt‚ª•iŽ¿•ÛØ‚Ì“w—͂ɉe‹¿‚ð‹y‚Ú‚·ê‡‚ÍA‚»‚ê‚ðŽw“E‚µ‚Ä‚­‚¾‚³‚¢iãŽi‚Æ•iŽ¿•ÛØ’S“–ŽÒ‚Ì—¼•û‚ÉjB•iŽ¿‚̃gƒŒ[ƒhƒIƒt‚ª•iŽ¿•ÛØŠúŠÔŒã‚É•ñ‚³‚ê‚éƒoƒO‚ð‘‚₷ꇂÍA‚»‚ê‚ðŽw“E‚µ‚Ä‚­‚¾‚³‚¢B -If she still insists, you should try to isolate the shoddiness into particular components that you can plan to rewrite or improve in the next cycle. Explain this to your team so that they can plan for it. +”Þ—‚ª‚Ü‚¾Žå’£‚µ‚Ä‚¢‚é‚È‚çAŽŸ‚̃TƒCƒNƒ‹‚Å‘‚«’¼‚µ‚â‰ü‘P‚ðŒv‰æ‚·‚邱‚Æ‚ª‚Å‚«‚é“Á’è‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚É•sŽ©—R‚³‚𕪗£‚µ‚悤‚Æ‚·‚é‚ׂ«‚Å‚·B‚±‚ê‚ð‚ ‚È‚½‚̃`[ƒ€‚Éà–¾‚µAŒv‰æ‚𗧂Ă邱‚Æ‚ª‚Å‚«‚Ü‚·B -NinjaProgrammer at Slashdot sent in this gem: +Slashdot‚ÌNinjaProgrammer‚ª‚±‚Ì•ó΂𑗂Á‚½F -> Remember that a good design will be resilient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this. +>—D‚ꂽ݌v‚ÍA•nŽã‚ȃR[ƒhŽÀ‘•‚ɑ΂µ‚ĉñ•œ‚·‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢BƒR[ƒh‘S‘̂ŗÇD‚ȃCƒ“ƒ^ƒtƒF[ƒX‚Æ’ŠÛŠT”O‚ª‘¶Ý‚·‚éê‡AÅI“I‚È‘‚«Š·‚¦‚͂͂邩‚É–³’ɂɂȂè‚Ü‚·BC³‚ª“‚¢–¾Šm‚ȃR[ƒh‚ð‘‚­‚Ì‚ª“‚¢ê‡‚ÍA‚±‚ê‚ðˆø‚«‹N‚±‚µ‚Ä‚¢‚éƒRƒAƒfƒUƒCƒ“‚ɉ½‚ª–â‘è‚Ȃ̂©‚ðŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Manage Software Dependence](02-How to Manage Software System Dependence.md) diff --git a/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index 86900ca..e46fc50 100644 --- a/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -1,13 +1,13 @@ # How to Manage Software System Dependence [//]: # (Version:1.0.0) -Modern software systems tend to depend on a large number of components that may not be directly under your control. This increases productivity through synergy and reuse. However, each component brings with it some problems: +Œ»‘ã‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ÍA‚ ‚È‚½‚̃Rƒ“ƒgƒ[ƒ‹‰º‚É’¼Ú‘¶Ý‚µ‚È‚¢‚©‚à‚µ‚ê‚È‚¢‘½‚­‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚Ɉˑ¶‚·‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É‚æ‚èAƒVƒiƒW[‚ÆÄ—˜—p‚É‚æ‚è¶ŽY«‚ªŒüサ‚Ü‚·B‚µ‚©‚µAŠeƒRƒ“ƒ|[ƒlƒ“ƒg‚ɂ͂¢‚­‚‚©‚Ì–â‘肪‚ ‚è‚Ü‚·B -- How will you fix bugs in the component? -- Does the component restrict you to particular hardware or software systems? -- What will you do if the component fails completely? +- ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃oƒO‚ð‚ǂ̂悤‚ÉC³‚µ‚Ü‚·‚©H +- ƒRƒ“ƒ|[ƒlƒ“ƒg‚ª“Á’è‚̃n[ƒhƒEƒFƒA‚Ü‚½‚̓\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ɧŒÀ‚µ‚Ä‚¢‚Ü‚·‚©H +- ƒRƒ“ƒ|[ƒlƒ“ƒg‚ªŠ®‘S‚ÉŽ¸”s‚µ‚½‚ç‚Ç‚¤‚µ‚Ü‚·‚©H -It is always best to encapsulate the component in some way so that it is isolated and so that it can be swapped out. If the component proves to be completely unworkable, you may be able to get a different one, but you may have to write your own. Encapsulation is not portability, but it makes porting easier, which is almost as good. +ƒRƒ“ƒ|[ƒlƒ“ƒg‚ª‰½‚ç‚©‚Ì•û–@‚ŃJƒvƒZƒ‹‰»‚³‚êAƒRƒ“ƒ|[ƒlƒ“ƒg‚ª•ª—£‚³‚êAƒXƒƒbƒvƒAƒEƒg‚Å‚«‚邿‚¤‚É‚·‚邱‚Æ‚ªí‚ɃxƒXƒg‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg‚ªŠ®‘S‚É‹@”\‚µ‚È‚¢‚Æ”»–¾‚µ‚½ê‡‚ÍA•ʂ̃Rƒ“ƒ|[ƒlƒ“ƒg‚ðŽè‚É“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA“ÆŽ©‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚ð쬂·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒJƒvƒZƒ‹‰»‚͈ÚA«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªAˆÚA‚ª—eˆÕ‚ɂȂè‚Ü‚·‚ªA‚±‚ê‚͂قړ¯‚¶‚Å‚·B -Having the source code for a component decreases the risk by a factor of four. With source code, you can evaluate it easier, debug it easier, find workarounds easier, and make fixes easier. If you make fixes, you should give them to the owner of the component and get the fixes incorporated into an official release; otherwise you will uncomfortably have to maintain an unofficial version. +ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃\[ƒXƒR[ƒh‚ðŽ‚Â‚±‚Æ‚ÍAƒŠƒXƒN‚ð4”{‚ÉŒ¸­‚³‚¹‚Ü‚·Bƒ\[ƒXƒR[ƒh‚ðŽg—p‚·‚邯A‚æ‚èŠÈ’P‚É•]‰¿‚µAŠÈ’P‚ɃfƒoƒbƒO‚µA‰ñ”ðô‚ðŒ©‚Â‚¯‚â‚·‚­‚È‚èAC³‚ðŠÈ’P‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·BC³ƒvƒƒOƒ‰ƒ€‚ð쬂·‚éꇂÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚ÌŠ—LŽÒ‚ÉC³ƒvƒƒOƒ‰ƒ€‚ð“n‚µAC³ƒvƒƒOƒ‰ƒ€‚ðŒöŽ®ƒŠƒŠ[ƒX‚É‘g‚Ýž‚Þ•K—v‚ª‚ ‚è‚Ü‚·B‚»‚êˆÈŠO‚ÌꇂÍA”ñŒöŽ®‚̃o[ƒWƒ‡ƒ“‚ðˆÛŽ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Decide if Software is Too Immature](03-How to Decide if Software is Too Immature.md) diff --git a/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index 93f03ff..18512b4 100644 --- a/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -1,18 +1,18 @@ # How to Decide if Software is Too Immature [//]: # (Version:1.0.0) -Using software other people wrote is one of the most effective ways to quickly build a solid system. It should not be discouraged, but the risks associated with it must be examined. One of the biggest risks is the period of bugginess and near inoperability that is often associated with software before it matures, through usage, into a usable product. Before you consider integrating with a software system, whether created in house or by a third party, it is very important to consider if it is really mature enough to be used. Here are ten questions you should ask yourself about it: +‘¼‚Ìl‚ª‘‚¢‚½ƒ\ƒtƒgƒEƒFƒA‚ðŽg—p‚·‚邱‚Æ‚ÍAŒ˜˜S‚ȃVƒXƒeƒ€‚ðv‘¬‚É\’z‚·‚éÅ‚àŒø‰Ê“I‚È•û–@‚Ì1‚‚ł·B‚»‚ê‚Í—Ž’_‚·‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚»‚ê‚É”º‚¤ƒŠƒXƒN‚ðŒŸ“¢‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBÅ‚à‘å‚«‚ÈƒŠƒXƒN‚Ì1‚‚ÍAƒ\ƒtƒgƒEƒFƒA‚ªŽg—p‰Â”\‚È»•i‚ɬn‚·‚é‘O‚ÉA‚µ‚΂µ‚΃\ƒtƒgƒEƒFƒA‚ÉŠÖ˜A‚µ‚Ä‚¢‚éAƒoƒO‚Æ•sŠ®‘S‚È“®ì‚ÌŠúŠÔ‚Å‚·Bƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚Ƃ̓‡‚ðŒŸ“¢‚·‚é‘O‚ÉAŽÐ“à‚Å쬂³‚ꂽ‚à‚̂ł ‚낤‚Æ‘æŽOŽÒ‚É‚æ‚Á‚Ä쬂³‚ꂽ‚à‚̂ł ‚낤‚ÆAŽÀÛ‚ÉŽg—p‚·‚é‚É‚Í\•ª‚ɬn‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŒŸ“¢‚·‚邱‚Æ‚ª”ñí‚Éd—v‚Å‚·B‚±‚±‚Å‚ ‚È‚½Ž©g‚Éq‚Ë‚é‚ׂ«10‚ÌŽ¿–₪‚ ‚è‚Ü‚·F -1. Is it vapour? (Promises are very immature). -2. Is there an accessible body of lore about the software? -3. Are you the first user? -4. Is there a strong incentive for continuation? -5. Has it had a maintenance effort? -6. Will it survive defection of the current maintainers? -7. Is there a seasoned alternative at least half as good? -8. Is it known to your tribe or company? -9. Is it desirable to your tribe or company? -10. Can you hire people to work on it even if it is bad? +1.ö‹C‚Å‚·‚©H i–ñ‘©‚Í”ñí‚É–¢¬n‚Å‚·jB +2.ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚·‚é’mޝ‚Ì‚ ‚éƒAƒNƒZƒX‰Â”\‚È–{‘Ì‚ª‚ ‚è‚Ü‚·‚©H +3.‚ ‚È‚½‚Íʼn‚̃†[ƒU[‚Å‚·‚©H +4.Œp‘±‚É‹­‚¢ƒCƒ“ƒZƒ“ƒeƒBƒu‚Í‚ ‚è‚Ü‚·‚©H +5.ƒƒ“ƒeƒiƒ“ƒX‚É“w—Í‚µ‚Ä‚¢‚Ü‚µ‚½‚©H +6.‚»‚ê‚ÍŒ»Ý‚̃ƒ“ƒeƒi‚Ì•ö‰ó‚©‚ç¶‚«Žc‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H +7.­‚È‚­‚Æ‚à”¼•ª‚Ì–¡•t‚¯‚Ì‘ã‘Ö•i‚ª‚ ‚è‚Ü‚·‚©H +‚ ‚È‚½‚Ì•”‘°‚â‰ïŽÐ‚É‚»‚ê‚Í’m‚ç‚ê‚Ä‚¢‚Ü‚·‚©H +‚ ‚È‚½‚Ì•”‘°‚â‰ïŽÐ‚ɂ͖]‚Ü‚µ‚¢‚̂ł·‚©H +10.‚ ‚È‚½‚ªˆ«‚¢ê‡‚Å‚à‚»‚ê‚ÉŽæ‚è‘g‚ÞlX‚ðŒÙ‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·‚©H -A little consideration of these criteria demonstrates the great value of well-established free software and open-source software in reducing risk to the entrepreneur. +‚±‚ê‚ç‚̊𭂵l—¶‚·‚ê‚ÎA‹N‹Æ‰Æ‚ÌƒŠƒXƒN‚ð팸‚·‚邽‚ß‚Ì\•ª‚ÉŠm—§‚³‚ꂽƒtƒŠ[ƒ\ƒtƒgƒEƒFƒA‚ƃI[ƒvƒ“ƒ\[ƒXƒ\ƒtƒgƒEƒFƒA‚̑傫‚ȉ¿’l‚ªØ–¾‚³‚ê‚Ü‚·B Next [How to Make a Buy vs. Build Decision](04-How to Make a Buy vs Build Decision.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index 64d69e7..7bfd78f 100644 --- a/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -1,16 +1,16 @@ # How to Make a Buy vs. Build Decision [//]: # (Version:1.0.0) -An entrepreneurial company or project that is trying to accomplish something with software has to constantly make so-called *buy vs. build* decisions. This turn of phrase is unfortunate in two ways: it seems to ignore open-source and free software which is not necessarily *bought*. Even more importantly, it should perhaps be called an *obtain and integrate vs. build here and integrate* decision because the cost of integration must be considered. This requires a great combination of business, management, and engineering savvy. +ƒ\ƒtƒgƒEƒFƒA‚ðŽg‚Á‚ĉ½‚©‚ð’B¬‚µ‚悤‚Æ‚µ‚Ä‚¢‚é‹N‹Æ‰Æ‚ÌŠé‹Æ‚âƒvƒƒWƒFƒNƒg‚ÍAí‚Éuw“üv‘ÎuŒˆ’èv‚ÌŒˆ’è‚ð‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃tƒŒ[ƒY‚̃^[ƒ“‚ÍA2‚‚̓_‚Å•sK‚Å‚ ‚éBƒI[ƒvƒ“ƒ\[ƒX‚ÆA•K‚¸‚µ‚à*”ƒ‚Á‚Ä‚¢‚È‚¢ƒtƒŠ[ƒ\ƒtƒgƒEƒFƒA‚𖳎‹‚µ‚Ä‚¢‚邿‚¤‚¾B‚³‚ç‚Éd—v‚Ȃ̂ÍA“‡ƒRƒXƒg‚ðl—¶‚·‚é•K—v‚ª‚ ‚邽‚ßA‚±‚±‚Ŏ擾‚µ‚Ä“‡‚·‚é‚©A‚±‚±‚Å\’z‚µ‚ÄŒˆ’è‚·‚é‚©‚𓇂·‚邱‚Ƃł·B‚±‚ê‚É‚ÍAƒrƒWƒlƒXAŠÇ—AƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚ɸ’Ê‚µ‚½lÞ‚ª•K—v‚Å‚·B -- How well do your needs match those for which it was designed? -- What portion of what you buy will you need? -- What is the cost of evaluating the integration? -- What is the cost of integration? -- Will buying increase or decrease long term maintenance costs? -- Will building it put you in a business position you don't want to be in? +- ‚ ‚È‚½‚̃j[ƒY‚ÍA‚»‚ꂪ݌v‚³‚ꂽ‚à‚̂Ƃǂꂭ‚ç‚¢‚æ‚­‡‚Á‚Ä‚¢‚Ü‚·‚©H +- ‚ ‚È‚½‚ªw“ü‚·‚é‚à‚̂̂¤‚¿A‚ǂ̕”•ª‚ª•K—v‚Å‚·‚©H +- “‡‚ð•]‰¿‚·‚éƒRƒXƒg‚Í‚¢‚­‚ç‚Å‚·‚©H +- “‡‚̃RƒXƒg‚Í‚¢‚­‚ç‚Å‚·‚©H +- w“ü‚Í’·Šú“I‚Ȉێ”ï‚𑌸‚³‚¹‚邾‚낤‚©H +- ‚»‚ê‚ð\’z‚·‚邱‚Æ‚ÅA‚ ‚È‚½‚ª–]‚ñ‚Å‚¢‚È‚¢ƒrƒWƒlƒXƒ|ƒWƒVƒ‡ƒ“‚É‚ ‚È‚½‚ð’u‚­‚±‚Ƃ͂ł«‚Ü‚·‚©H -You should think twice before building something that is big enough to serve as the basis for an entire other business. Such ideas are often proposed by bright and optimistic people that will have a lot to contribute to your team. If their idea is compelling, you may wish to change your business plan; but do not invest in a solution bigger than your own business without conscious thought. +‚ ‚È‚½‚ÍA‘¼‚̃rƒWƒlƒX‘S‘̂̊î‘b‚ƂȂé‚قǑ傫‚È‚à‚Ì‚ð\’z‚·‚é‘O‚ÉA“ñ“xl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚̂悤‚ȃAƒCƒfƒA‚ÍA‚ ‚È‚½‚̃`[ƒ€‚ÉvŒ£‚·‚邱‚Æ‚ª‚½‚­‚³‚ñ‚ ‚é–¾‚é‚­ŠyŠÏ“I‚ÈlX‚É‚æ‚Á‚Ä’ñˆÄ‚³‚ê‚邱‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B”Þ‚ç‚̃AƒCƒfƒA‚ª–£—Í“I‚Å‚ ‚ê‚ÎAƒrƒWƒlƒXƒvƒ‰ƒ“‚ð•ÏX‚µ‚½‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBˆÓޝ‚ª‚È‚­‚Ä‚àŽ©•ª‚̃rƒWƒlƒX‚æ‚è‚à‘å‚«‚ȃ\ƒŠƒ…[ƒVƒ‡ƒ“‚É“ŠŽ‘‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B -After considering these questions, you should perhaps prepare two draft project plans, one for building and one for buying. This will force you to consider the integration costs. You should also consider the long term maintenance costs of both solutions. To estimate the integration costs, you will have to do a thorough evaluation of the software before you buy it. If you can't evaluate it, you will assume an unreasonable risk in buying it and you should decide against buying that particular product. If there are several buy decisions under consideration, some energy will have to be spent evaluating each. +‚±‚ê‚ç‚ÌŽ¿–â‚ðŒŸ“¢‚µ‚½ŒãA‚¨‚»‚ç‚­Œš’z—p‚Æw“ü—p‚Ì2‚‚̃vƒƒWƒFƒNƒgŒv‰æˆÄ‚ð€”õ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É‚æ‚èA“‡ƒRƒXƒg‚ðl—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½A—¼•û‚̃\ƒŠƒ…[ƒVƒ‡ƒ“‚Ì’·Šú“I‚ȃƒ“ƒeƒiƒ“ƒXƒRƒXƒg‚àl—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B“‡ƒRƒXƒg‚ðŒ©Ï‚à‚é‚É‚ÍAƒ\ƒtƒgƒEƒFƒA‚ðw“ü‚·‚é‘O‚ÉŠ®‘S‚È•]‰¿‚ðs‚¤•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ª‚»‚ê‚ð•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ê‡A‚ ‚È‚½‚Í‚»‚ê‚ðw“ü‚·‚éÛ‚É•s‡—‚ÈƒŠƒXƒN‚ð‘z’肵A‚»‚Ì“Á’è‚Ì»•i‚ðw“ü‚·‚邱‚Æ‚ðŒˆ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·Bl—¶’†‚Ìw“üŒˆ’肪‚¢‚­‚‚©‚ ‚éê‡A‚»‚ꂼ‚ê‚ð•]‰¿‚·‚邽‚߂ɂ¢‚­‚‚©‚̃Gƒlƒ‹ƒM[‚ð”ï‚â‚·•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Grow Professionally](05-How to Grow Professionally.md) diff --git a/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md b/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md index 5ad8576..f3ab647 100644 --- a/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -1,11 +1,11 @@ # How to Grow Professionally [//]: # (Version:1.0.0) -Assume responsibility in excess of your authority. Play the role that you desire. Express appreciation for people's contribution to the success of the larger organization, as well as things as that help you personally. +‚ ‚È‚½‚ÌŒ ŒÀ‚ð’´‚¦‚½Ó”C‚𕉂¢‚Ü‚·B ‚ ‚È‚½‚ª–]‚Þ–ðŠ„‚ð‰Ê‚½‚µ‚Ä‚­‚¾‚³‚¢B ‘å‹K–͂ȑgD‚̬Œ÷‚Ö‚ÌlX‚ÌvŒ£A‚»‚µ‚Ä‚ ‚È‚½‚ªŒÂl“I‚ɖ𗧂‚à‚̂ւ̊´ŽÓ‚ð•\–¾‚µ‚Ä‚­‚¾‚³‚¢B -If you want to become a team leader, instigate the formation of consensus. If you want to become a manager, take responsibility for the schedule. You can usually do this comfortably while working with a leader or a manager, since this frees them up to take greater responsibility. If that is too much to try, do it a little at a time. +‚ ‚È‚½‚ªƒ`[ƒ€ƒŠ[ƒ_[‚ɂȂ肽‚¢‚È‚çAƒRƒ“ƒZƒ“ƒTƒX‚ÌŒ`¬‚𑣂·B ƒ}ƒl[ƒWƒƒ[‚ɂȂ肽‚¢ê‡‚ÍAƒXƒPƒWƒ…[ƒ‹‚ð’S“–‚µ‚Ä‚­‚¾‚³‚¢B ƒŠ[ƒ_[‚âƒ}ƒl[ƒWƒƒ[‚ƈê‚ÉŽdŽ–‚ð‚µ‚Ä‚¢‚éŠÔ‚ÍA’Ê킱‚ê‚ð‰õ“K‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚É‚æ‚èAƒŠ[ƒ_[‚âƒ}ƒl[ƒWƒƒ[‚ª‚æ‚è‘å‚«‚ÈÓ”C‚𕉂¤‚±‚ƂɂȂè‚Ü‚·B ‚»‚ê‚ªŽŽ‚µ‚·‚¬‚é‚È‚çAˆê“x‚É­‚µ‚µ‚Ä‚­‚¾‚³‚¢B -Evaluate yourself. If you want to become a better programmer, ask someone you admire how you can become like them. You can also ask your boss, who will know less but have a greater impact on your career. +‚ ‚È‚½Ž©g‚ð•]‰¿‚µ‚Ä‚­‚¾‚³‚¢B ‚ ‚È‚½‚ª‚æ‚è—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂȂ肽‚¢‚È‚çA‚ ‚È‚½‚ª‚ǂ̂悤‚É‚»‚ê‚ç‚̂悤‚ɂȂ邱‚Æ‚ª‚Å‚«‚é‚©ÜŽ^‚·‚él‚Éq‚˂Ȃ³‚¢B ãŽi‚É•·‚­‚±‚Æ‚à‚Å‚«‚Ü‚·BãŽi‚ɂ͒m‚Á‚Ä‚¢‚Ü‚·‚ªA‚ ‚È‚½‚̃LƒƒƒŠƒA‚ɑ傫‚ȉe‹¿‚ð—^‚¦‚Ü‚·B -Plan ways to learn new skills, both the trivial technical kind, like learning a new software system, and the hard social kind, like writing well, by integrating them into your work. +V‚µ‚¢ƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðŠw‚Ô‚±‚Ƃ̂悤‚ÈA±×‚È‹Zp“I‚È‚à‚̂łàA‚ ‚È‚½‚ÌŽdŽ–‚É‚»‚ê‚ç‚𓇂·‚邱‚Ƃɂæ‚Á‚ÄA‚¤‚Ü‚­‘‚­‚悤‚ȃn[ƒh‚ȎЉï“I‚È‚à‚̂łàAV‚µ‚¢ƒXƒLƒ‹‚ðŠw‚Ô•û–@‚ðŒv‰æ‚·‚éB Next [How to Evaluate Interviewees](06-How to Evaluate Interviewees.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index cf24614..766438e 100644 --- a/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -1,15 +1,15 @@ # How to Evaluate Interviewees [//]: # (Version:1.0.0) -Evaluating potential employees is not given the energy it deserves. A bad hire, like a bad marriage, is terrible. A significant portion of everyone's energy should be devoted to recruitment, though this is rarely done. +öÝ“I‚È]‹Æˆõ‚ð•]‰¿‚·‚邱‚Æ‚ÍA‚»‚ê‚ɂӂ³‚킵‚¢ƒGƒlƒ‹ƒM[‚ª—^‚¦‚ç‚ê‚Ä‚¢‚È‚¢Bˆ«‚¢Œ‹¥‚̂悤‚Ȉ«‚¢ŒÙ—p‚͂Ђǂ¢‚Å‚·B‚Ý‚ñ‚Ȃ̃Gƒlƒ‹ƒM[‚Ì‚©‚È‚è‚Ì•”•ª‚Í•åW‚É”ï‚₳‚ê‚é‚ׂ«‚Å‚·‚ªA‚±‚ê‚͂߂Á‚½‚És‚í‚ê‚Ü‚¹‚ñB -There are different interviewing styles. Some are torturous, designed to put the candidate under a great deal of stress. This serves a very valuable purpose of possibly revealing character flaws and weaknesses under stress. Candidates are no more honest with interviewers than they are with themselves, and the human capacity for self-deception is astonishing. +ƒCƒ“ƒ^ƒrƒ…[ƒXƒ^ƒCƒ‹‚Í‚³‚Ü‚´‚܂ł·BŒó•âŽÒ‚Ì’†‚ɂ͔ñí‚ɃXƒgƒŒƒX‚ðŠ´‚¶‚邿‚¤‚ÉÝŒv‚³‚ꂽ‰–â‰Æ‚à‚¢‚Ü‚·B‚±‚ê‚̓XƒgƒŒƒX‰º‚ł̃Lƒƒƒ‰ƒNƒ^[‚ÌŒ‡Š×‚âŽã“_‚𖾂炩‚É‚·‚é”ñí‚É‹Md‚È–Ú“I‚ð‰Ê‚½‚µ‚Ü‚·BŒó•âŽÒ‚ÍŽ©•ªŽ©g‚Æ”ä‚ׂăCƒ“ƒ^ƒrƒ…ƒA[‚ɂͳ’¼‚ł͂Ȃ­AŽ©ŒÈ‹\áԂɑ΂·‚élŠÔ‚Ì”\—͂͋Á‚­‚ׂ«‚à‚̂ł·B -You should, at a minimum, give the candidate the equivalent of an oral examination on the technical skills for two hours. With practice, you will be able to quickly cover what they know and quickly retract from what they don't know to mark out the boundary. Interviewees will respect this. I have several times heard interviewees say that the quality of the examination was one of their motivations for choosing a company. Good people want to be hired for their skills, not where they worked last or what school they went to or some other inessential characteristic. +‚ ‚È‚½‚Í­‚È‚­‚Æ‚àA2ŽžŠÔ‚Ì‹ZpƒXƒLƒ‹‚ÌŒû“ªŽŽŒ±‚ɑГ–‚·‚é‚à‚Ì‚ðŒó•âŽÒ‚É—^‚¦‚é‚ׂ«‚Å‚·B—ûK‚Å‚ÍAŽ©•ª‚ª’m‚Á‚Ä‚¢‚邱‚Æ‚ð‚·‚Î‚â‚­ƒJƒo[‚µA‹«ŠEü‚ðƒ}[ƒN‚·‚邽‚߂ɒm‚ç‚È‚¢‚à‚Ì‚©‚ç‚·‚Î‚â‚­Žæ‚è–ß‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B–ÊÚŽÒ‚Í‚±‚ê‚ð‘¸d‚·‚é‚Å‚µ‚傤BŽ„‚ÍAƒCƒ“ƒ^ƒrƒ…[‚ÅAŽŽŒ±‚ÌŽ¿‚ÍŠé‹Æ‚ð‘I‚Ô“®‹@‚Ì1‚‚ł ‚邯”‰ñ•·‚¢‚½‚±‚Æ‚ª‚ ‚è‚Ü‚·B‘P—Ç‚Èl‚½‚¿‚ÍA”ނ炪Ōã‚É“­‚¢‚½êŠ‚â”ނ炪s‚Á‚½ŠwZA‚Ü‚½‚Í‘¼‚Ì•s‰ÂŒ‡‚È“Á’¥‚ł͂Ȃ­A”Þ‚ç‚̃XƒLƒ‹‚Ì‚½‚߂Ɍقí‚ꂽ‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·B -In doing this, you should also evaluate their ability to learn, which is far more important than what they know. You should also watch for the whiff of brimstone that is given off by difficult people. You may be able to recognize it by comparing notes after the interview, but in the heat of the interview it is hard to recognize. How well people communicate and work with people is more important than being up on the latest programming language. +‚±‚ê‚ðs‚¤‚É‚ ‚½‚Á‚Ä‚ÍAŽ©•ª‚ª’m‚Á‚Ä‚¢‚邿‚è‚à‚͂邩‚Éd—v‚ÈAŠwK‚·‚é”\—Í‚à•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½A¢“ï‚Èl‚½‚¿‚É‚æ‚Á‚Ä•¥‚í‚ꂽ—LŠQ•¨Ž¿‚Ì—~‹‚ðŠÄŽ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚̓Cƒ“ƒ^ƒrƒ…[‚ÌŒã‚Ńm[ƒg‚ð”äŠr‚·‚邱‚Ƃɂæ‚Á‚Ä‚»‚ê‚ð”Fޝ‚·‚邱‚Æ‚ª‚Å‚«‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒCƒ“ƒ^ƒrƒ…[‚Ì”M‚Å‚»‚ê‚ð”Fޝ‚·‚邱‚Ƃ͢“ï‚Å‚·BÅV‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðã‰ñ‚邿‚è‚àAlX‚ªƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚µ‚ÄlX‚Ƃǂ̂­‚ç‚¢‚¤‚Ü‚­‚â‚Á‚Ä‚¢‚­‚©‚ªd—v‚Å‚·B -A reader has had good luck using a ‘take-home’ test for interviewees. This has the advantage that it can uncover the interviewee that can present themselves well but can't really code - and there are many such people. I personally have not tried this technique, but it sounds sensible. +“ǎ҂̓Cƒ“ƒ^ƒrƒ…[‘ÎÛŽÒ‚Ì‚½‚߂ɃeƒCƒNEƒz[ƒ€EƒeƒXƒg‚ðŽg‚Á‚ÄK‰^‚ð‹F‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍAŽ©•ªŽ©g‚ð‚¤‚Ü‚­’ñަ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAŽÀۂɂ̓R[ƒh‰»‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ƒCƒ“ƒ^ƒrƒ…ƒC[‚𖾂炩‚É‚·‚邱‚Æ‚ª‚Å‚«‚邯‚¢‚¤—˜“_‚ª‚ ‚è‚Ü‚·BŽ„‚ÍŒÂl“I‚ɂ͂±‚̃eƒNƒjƒbƒN‚ðŽŽ‚µ‚Ä‚¢‚Ü‚¹‚ñ‚ªA‚»‚ê‚ÍŒ«–¾‚Ȃ悤‚Å‚·B -Finally, interviewing is also a process of selling. You should be selling your company or project to the candidate. However, you are talking to a programmer, so don't try to colour the truth. Start off with the bad stuff, then finish strong with the good stuff. +ÅŒã‚ÉAƒCƒ“ƒ^ƒrƒ…[‚͔̔„‚̃vƒƒZƒX‚Å‚à‚ ‚è‚Ü‚·BŒó•âŽÒ‚É‚ ‚È‚½‚̉ïŽÐ‚âƒvƒƒWƒFƒNƒg‚𔄂Á‚Ä‚¢‚é‚Í‚¸‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚̓vƒƒOƒ‰ƒ}‚Ƙb‚µ‚Ä‚¢‚é‚Ì‚ÅA^ŽÀ‚ðF‚¯‚µ‚悤‚Æ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢Bˆ«‚¢‚à‚Ì‚©‚çŽn‚ß‚ÄAŽŸ‚É—Ç‚¢‚à‚̂ŋ­‚­Ždã‚°‚Ä‚­‚¾‚³‚¢B Next [How to Know When to Apply Fancy Computer Science](07-How to Know When to Apply Fancy Computer Science.md) diff --git a/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index 8575639..761a94f 100644 --- a/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -1,15 +1,15 @@ # How to Know When to Apply Fancy Computer Science [//]: # (Version:1.0.0) -There is a body of knowledge about algorithms, data structures, mathematics, and other gee-whiz stuff that most programmers know about but rarely use. In practice, this wonderful stuff is too complicated and generally unnecessary. There is no point in improving an algorithm when most of your time is spent making inefficient database calls, for instance. An unfortunate amount of programming consists of getting systems to talk to each other and using very simple data structures to build a nice user interface. +ƒAƒ‹ƒSƒŠƒYƒ€Aƒf[ƒ^\‘¢A”ŠwA‚»‚Ì‘¼‚̂قƂñ‚ǂ̃vƒƒOƒ‰ƒ}‚ª’m‚Á‚Ä‚¢‚邱‚Ƃ͂قƂñ‚Ç‚ ‚è‚Ü‚¹‚ñ‚ªA‚ ‚Ü‚èŽg‚í‚ê‚Ä‚¢‚È‚¢‚±‚Ƃɂ‚¢‚Ă̒mޝ‚ª‚ ‚è‚Ü‚·BŽÀÛ‚É‚ÍA‚±‚Ì‘f°‚炵‚¢‚à‚̂͂ ‚Ü‚è‚É‚à•¡ŽG‚ňê”Ê“I‚ɂ͕s—v‚Å‚·B‚Ù‚Æ‚ñ‚ǂ̎žŠÔ‚ª”ñŒø—¦“I‚ȃf[ƒ^ƒx[ƒXŒÄ‚Ño‚µ‚ðs‚¤‚̂ɔï‚₳‚ꂽ‚Æ‚«‚É‚ÍAƒAƒ‹ƒSƒŠƒYƒ€‚̉ü‘P‚ɂ͉½‚̈Ӗ¡‚à‚ ‚è‚Ü‚¹‚ñBƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì•sK‚È—Ê‚ÍAƒVƒXƒeƒ€‚ª‚¨ŒÝ‚¢‚ɘb‚ð‚µ‚½‚èA”ñí‚É’Pƒ‚ȃf[ƒ^\‘¢‚ðŽg‚Á‚Ä‚·‚΂炵‚¢ƒ†[ƒU[ƒCƒ“ƒ^[ƒtƒFƒCƒX‚ð\’z‚·‚邱‚Æ‚©‚笂è‚Ü‚·B -When is high technology the appropriate technology? When should you crack a book to get something other than a run-of-the-mill algorithm? It is sometimes useful to do this but it should be evaluated carefully. +‚“x‚È‹Zp‚Í‚¢‚“K؂ȋZp‚Å‚·‚©H‚ ‚È‚½‚ÍA–{•¨‚̃Aƒ‹ƒSƒŠƒYƒ€ˆÈŠO‚̉½‚©‚𓾂邽‚߂ɂ¢‚–{‚ð‰ð“Ç‚·‚ׂ«‚Å‚·‚©H‚±‚ê‚ðs‚¤‚Ì‚ª•Ö—˜‚È‚±‚Æ‚à‚ ‚è‚Ü‚·‚ªATd‚É•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -The three most important considerations for the potential computer science technique are: +öÝ“I‚ȃRƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‹Zp‚Ì3‚‚ÌÅ‚àd—v‚Èl—¶Ž–€‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·B -- Is it well encapsulated so that the risk to other systems is low and the overall increase in complexity and maintenance cost is low? -- Is the benefit startling (for example, a factor of two in a mature system or a factor of ten in a new system)? -- Will you be able to test and evaluate it effectively? +- ‘¼‚̃VƒXƒeƒ€‚ɑ΂·‚郊ƒXƒN‚ª’á‚­A•¡ŽG‚³‚ƕێçƒRƒXƒg‚Ì‘S‘Ì“I‚È‘‰Á‚ª­‚È‚¢‚悤‚ÉA\•ª‚ɃJƒvƒZƒ‹‰»‚³‚ê‚Ä‚¢‚Ü‚·‚©H +- —˜‰v‚Í‹ÁˆÙ“I‚Å‚·i—Ⴆ‚ÎA¬n‚µ‚½ƒVƒXƒeƒ€‚Å‚Í2”{AV‚µ‚¢ƒVƒXƒeƒ€‚Å‚Í10”{jB +- ‚»‚ê‚ðŒø‰Ê“I‚ɃeƒXƒg‚µ•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H -If a well-isolated algorithm that uses a slightly fancy algorithm can decrease hardware cost or increase performance by a factor of two across an entire system, then it would be criminal not to consider it. One of the keys to arguing for such an approach is to show that the risk is really quite low, since the proposed technology has probably been well studied, the only issue is the risk of integration. Here a programmer's experience and judgement can truly synergize with the fancy technology to make integration easy. +‚킸‚©‚É•¡ŽG‚ȃAƒ‹ƒSƒŠƒYƒ€‚ðŽg—p‚·‚éŒÇ—§‚µ‚½ƒAƒ‹ƒSƒŠƒYƒ€‚Å‚ÍAƒVƒXƒeƒ€‘S‘̂Ńn[ƒhƒEƒFƒA‚̃RƒXƒg‚ð팸‚µ‚½‚èAƒpƒtƒH[ƒ}ƒ“ƒX‚ð2”{‚É‚‚߂邱‚Æ‚ª‚Å‚«‚ê‚ÎA”ÆßŽÒ‚Í‚»‚ê‚ðl—¶‚µ‚È‚¢‚±‚ƂɂȂè‚Ü‚·B‚»‚̂悤‚ȃAƒvƒ[ƒ`‚ðŽå’£‚·‚錮‚Ì1‚‚ÍA’ñˆÄ‚³‚ꂽ‹Zp‚ª‚¨‚»‚ç‚­\•ª‚ÉŒ¤‹†‚³‚ê‚Ä‚¢‚é‚Ì‚ÅAƒŠƒXƒN‚ªŽÀۂɂ͂©‚È‚è’á‚¢‚±‚Æ‚ðŽ¦‚·‚±‚Ƃł·B—Bˆê‚Ì–â‘è‚Í“‡‚ÌƒŠƒXƒN‚Å‚·B‚±‚±‚ŃvƒƒOƒ‰ƒ}‚ÌŒoŒ±‚Æ”»’f‚ÍA“‡‚ð—eˆÕ‚É‚·‚邽‚߂̔hŽè‚È‹Zp‚Æ‘ŠæŒø‰Ê‚ª‚ ‚è‚Ü‚·B Next [How to Talk to Non-Engineers](08-How to Talk to Non-Engineers.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md index a2b6211..54921d7 100644 --- a/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md +++ b/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md @@ -1,19 +1,19 @@ # How to Talk to Non-Engineers [//]: # (Version:1.0.0) -Engineers and programmers in particular are generally recognized by popular culture as being different from other people. This implies that other people are different from us. This is worth bearing in mind when communicating with non-engineers; you should always understand the audience. +“Á‚ɃGƒ“ƒWƒjƒA‚âƒvƒƒOƒ‰ƒ}[‚ÍAˆê”Ê“I‚È•¶‰»‚É‚æ‚Á‚ÄA‘¼‚ÌlX‚Æ‚ÍˆÙ‚È‚é‚Æˆê”ʂɔF‚ß‚ç‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍA‘¼‚ÌlX‚ªŽ„‚½‚¿‚ƈقȂ邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚ÍAƒGƒ“ƒWƒjƒAˆÈŠO‚Ìl‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚Æ‚é‚Æ‚«‚ɂ͗¯ˆÓ‚·‚鉿’l‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚Íí‚ÉŠÏ‹q‚ð—‰ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -Non-engineers are smart, but not as grounded in creating technical things as we are. We make things. They sell things and handle things and count things and manage things, but they are not experts on making things. They are not as good at working together on teams as engineers are (there are no doubt exceptions.) Their social skills are generally as good as or better than engineers in non-team environments, but their work does not always demand that they practice the kind of intimate, precise communication and careful subdivisions of tasks that we do. +ƒmƒ“ƒGƒ“ƒWƒjƒA‚̓Xƒ}[ƒg‚Å‚·‚ªAŽ„‚½‚¿‚̂悤‚É‹Zp“I‚È‚±‚Æ‚ð쬂·‚邱‚Ƃɪ‚´‚µ‚½‚à‚̂ł͂ ‚è‚Ü‚¹‚ñBŽ„‚½‚¿‚Í•¨Ž–‚ðì‚éB”Þ‚ç‚Í•¨Ž–‚𔄂èA•¨Ž–‚ðˆµ‚¢A•¨Ž–‚𔂦‚½‚èŠÇ—‚µ‚½‚肵‚Ü‚·‚ªA•¨Ž–‚ðì‚éê–副‚ł͂ ‚è‚Ü‚¹‚ñBƒGƒ“ƒWƒjƒA‚̂悤‚Ƀ`[ƒ€‚ňê‚ÉŽdŽ–‚ð‚·‚é‚̂͂ ‚Ü‚è—Ç‚­‚ ‚è‚Ü‚¹‚ñi—áŠO‚Í‚ ‚è‚Ü‚¹‚ñjB”Þ‚ç‚̃\[ƒVƒƒƒ‹ƒXƒLƒ‹‚͈ê”Ê‚ÉAƒ`[ƒ€ˆÈŠO‚̊‹«‚̃Gƒ“ƒWƒjƒA‚Æ“¯‚¶‚©‚»‚êˆÈã‚Å‚·‚ªAe–§‚ÈA³Šm‚ȃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽí—Þ‚ÆŽ„‚½‚¿‚ªs‚¤ŽdŽ–‚ÌTd‚Èוª‰»B -Non-engineers may be too eager to please and they may be intimidated by you. Just like us, they may say ‘yes’ without really meaning it to please you or because they are a little scared of you, and then not stand behind their words. +ƒGƒ“ƒWƒjƒAˆÈŠO‚Ìl‚Í‚ ‚Ü‚è‚É‚àŠì‚ñ‚Å‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚µA‚ ‚È‚½‚É‹º‚©‚³‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBŽ„‚½‚¿‚Æ“¯‚¶‚悤‚ÉA”Þ‚ç‚Í–{“–‚É‚ ‚È‚½‚ðŠì‚΂¹‚邱‚Æ‚ðˆÓ–¡‚·‚é‚à‚̂łàA‚ ‚È‚½‚Ì‚±‚Ƃ𭂵•|‚ª‚Á‚Ä‚¢‚é‚̂ł͂Ȃ­AŒ¾—t‚Ì”wŒã‚É—§‚‚±‚Æ‚à‚ ‚è‚Ü‚¹‚ñB -Non-programmers can understand technical things but they do not have the thing that is so hard even for us - technical judgement. They do understand how technology works, but they cannot understand why a certain approach would take three months and another one three days. (After all, programmers are anecdotally horrible at this kind of estimation as well.) This represents a great opportunity to synergize with them. +ƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚Í‹Zp“I‚È‚±‚Æ‚ð—‰ð‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA‹Zp“I‚È”»’f‚Å‚³‚¦Ž„‚½‚¿‚ɂƂÁ‚Ä‚³‚¦“‚¢‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB”Þ‚ç‚̓eƒNƒmƒƒW[‚ÌŽd‘g‚Ý‚ð—‰ð‚µ‚Ä‚¢‚Ü‚·‚ªA‚È‚º“Á’è‚̃Aƒvƒ[ƒ`‚ª3ƒ–ŒŽ‚©‚©‚é‚Ì‚©A‚»‚µ‚Ä‚à‚¤1‚‚Í3“ú‚©‚©‚é‚Ì‚©—‰ð‚Å‚«‚Ü‚¹‚ñB iŒ‹‹Ç‚̂Ƃ±‚ëAƒvƒƒOƒ‰ƒ}[‚Í‚±‚ÌŽí‚ÌŒ©Ï‚à‚è‚É‚à‹ÁˆÙ“I‚È‚±‚Æ‚ª‚ ‚è‚Ü‚·Bj‚±‚ê‚ÍA‚»‚ê‚ç‚Æ‘ŠæŒø‰Ê‚ð”­Šö‚·‚éâD‚Ì‹@‰ï‚Å‚·B -When talking to your team you will, without thinking, use a sort of shorthand, an abbreviated language that is effective because you will have much shared experience about technology in general and your product in particular. It takes some effort not to use this shorthand with those that don't have that shared experience, especially when members of your own team are present. This vocabulary creates a wall between you and those that do not share it, and, even worse, wastes their time. +‚ ‚È‚½‚̃`[ƒ€‚Ƙb‚ð‚·‚é‚Æ‚«‚É‚ÍAŽvl‚¹‚¸‚ÉAˆê”Ê“I‚È‹Zp‚â“Á‚É‚ ‚È‚½‚Ì»•i‚ÉŠÖ‚·‚鑽‚­‚ÌŒoŒ±‚ð‹¤—L‚·‚邽‚ßA’Zk‚³‚ꂽŒ¾—t‚ðŽg—p‚µ‚ÄŒø‰Ê“I‚Å‚·B‚±‚Ì‘¬‹L‚ðA“Á‚É‚ ‚È‚½Ž©g‚̃`[ƒ€‚̃ƒ“ƒo[‚ª‚¢‚邯‚«‚ÉA‚»‚ÌŒoŒ±‚ð‹¤—L‚µ‚Ä‚¢‚È‚¢l‚ɂ͎g—p‚µ‚È‚¢‚悤‚É‚·‚é‚É‚ÍA‘½­‚Ì“w—Í‚ª•K—v‚Å‚·B‚±‚̃{ƒLƒƒƒuƒ‰ƒŠ[‚ÍA‚ ‚È‚½‚Æ‚»‚ê‚ð‹¤—L‚µ‚È‚¢l‚Ƃ̊Ԃɕǂðì‚èA‚³‚ç‚Ɉ«‚¢‚±‚Æ‚ÉAŽ©•ª‚ÌŽžŠÔ‚𖳑ʂɂµ‚Ü‚·B -With your team, the basic assumptions and goals do not need to be restated often, and most conversation focuses on the details. With outsiders, it must be the other way around. They may not understand things you take for granted. Since you take them for granted and don't repeat them, you can leave a conversation with an outsider thinking that you understand each other when really there is a large misunderstanding. You should assume that you will miscommunicate and watch carefully to find this miscommunication. Try to get them to summarize or paraphrase what you are saying to make sure they understand. If you have the opportunity to meet with them often, spend a little bit of time asking if you are communicating effectively, and how you can do it better. If there is a problem in communication, seek to alter your own practices before becoming frustrated with theirs. +ƒ`[ƒ€‚Å‚ÍAŠî–{“I‚È‘O’ñ‚Æ–Ú•W‚ð•p”É‚ÉÄ‹Lq‚·‚é•K—v‚͂Ȃ­A‚Ù‚Æ‚ñ‚ǂ̉ï˜b‚ÍÚׂÉÅ“_‚𓖂ĂĂ¢‚Ü‚·B•”ŠOŽÒ‚Ìê‡A‚»‚ê‚Í‹t‚ɂȂè‚Ü‚·B”Þ‚ç‚Í‚ ‚È‚½‚ª“–‘R‚Ì‚±‚Æ‚ð—‰ð‚µ‚Ä‚¢‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ç‚ð“–‘RŽó‚¯Žæ‚èA‚»‚ê‚ç‚ðŒJ‚è•Ô‚³‚È‚¢‚Ì‚ÅA–{“–‚ɑ傫‚ÈŒë‰ð‚ª‚ ‚邯‚«‚É‚¨ŒÝ‚¢‚ð—‰ð‚·‚邯‚¢‚¤ŠO•”ŽÒ‚Ìl‚¦‚ðŽ‚Á‚ÄA‰ï˜b‚ðŽc‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚È‚½‚ÍA‚±‚ÌŒë‚Á‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŒ©‚Â‚¯‚邽‚ß‚ÉAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŒë‚Á‚ÄTd‚ÉŒ©‚Ä‚¢‚邯‘z’肵‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª—‰ð‚µ‚Ä‚¢‚邱‚Æ‚ðŠm”F‚·‚邽‚߂ɂ ‚È‚½‚ªŒ¾‚Á‚Ä‚¢‚邱‚Æ‚ð—v–ñ‚µ‚½‚茾‚¢Š·‚¦‚½‚è‚·‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B•p”ɂɉ‹@‰ï‚ª‚ ‚éꇂÍAŒø‰Ê“I‚ɃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŽæ‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðq‚˂鎞ŠÔ‚ð­‚µ”ï‚₵‚Ä‚­‚¾‚³‚¢BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚É–â‘肪‚ ‚éꇂÍAŽ©•ª‚ÌŠµs‚ð•Ï‚¦‚Ä‚©‚çAŽ©•ª‚É•s–ž‚ð•å‚点‚Ä‚­‚¾‚³‚¢B -I love working with non-engineers. It provides great opportunities to learn and to teach. You can often lead by example, in terms of the clarity of your communication. Engineers are trained to bring order out of chaos, to bring clarity out of confusion, and non-engineers like this about us. Because we have technical judgement and can usually understand business issues, we can often find a simple solution to a problem. +Ž„‚Í”ñƒGƒ“ƒWƒjƒA‚Ƃ̎dŽ–‚ª‘åD‚«‚Å‚·B‚»‚ê‚ÍŠw‚ÑA‹³‚¦‚é‘å‚«‚È‹@‰ï‚ð’ñ‹Ÿ‚µ‚Ü‚·B‚ ‚È‚½‚ÍAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì–¾Šm‚³‚ÌŠÏ“_‚©‚çA‚µ‚΂µ‚Ηá‚ð‹“‚°‚邱‚Æ‚ª‚Å‚«‚Ü‚·BƒGƒ“ƒWƒjƒA‚ÍA¬—‚©‚ç’˜‚ðˆø‚«o‚·‚±‚ÆA¬—‚©‚ç‚Í‚Á‚«‚肳‚¹‚邱‚ÆA‚»‚µ‚Ä‚±‚̂悤‚È”ñ‹ZpŽÒ‚ÍŽ„‚½‚¿‚ɂ‚¢‚ÄŒP—û‚ðŽó‚¯‚Ä‚¢‚Ü‚·BŽ„‚½‚¿‚Í‹Zp“I‚È”»’f‚ð‰º‚µA’Êí‚̓rƒWƒlƒXã‚Ì–â‘è‚ð—‰ð‚·‚邱‚Æ‚ª‚Å‚«‚邽‚ßA–â‘è‚ðŠÈ’P‚É‰ðŒˆ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -Often non-engineers propose solutions that they think will make it easier on us out of kindness and a desire to do the right thing, when in fact a much better overall solution exists which can only be seen by synergizing the outsider's view with your technical judgement. I personally like Extreme Programming because it addresses this inefficiency; by marrying the estimation quickly to the idea, it makes it easier to find the idea that is the best combination of cost and benefit. +‚µ‚΂µ‚΋ZpŽÒˆÈŠO‚Ìl‚½‚¿‚ÍA‚ ‚È‚½‚Ì‹Zp“I”»’f‚ÆŠO•”ŽÒ‚ÌŒ©‰ð‚ð‘Šæ‚³‚¹‚邱‚Ƃɂæ‚Á‚Ä‚µ‚©Œ©‚¦‚È‚¢A‚æ‚è—Ç‚¢‘S‘Ì“I‚ȉðŒˆô‚ª‘¶Ý‚·‚邯‚«‚ÉA—D‚µ‚³‚©‚瓦‚ê‚â‚·‚­‚µ‚ij‚µ‚¢‚±‚Æ‚ð‚µ‚½‚¢‚Æ‚¢‚¤Šó–]‚ðŠÈ’P‚É‚·‚éƒ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð’ñˆÄ‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·BŽ„‚ÍŒÂl“I‚ɂ͋ɒ[‚ȃvƒƒOƒ‰ƒ~ƒ“ƒO‚ªD‚«‚Å‚·B‚È‚º‚È‚çA‚±‚Ì”ñŒø—¦«‚ɑΈ‚·‚é‚©‚ç‚Å‚·BŒ©Ï‚à‚è‚ð‘f‘‚­ƒAƒCƒfƒA‚ÉŒ‹‚Ñ•t‚¯‚邱‚Æ‚ÅAƒRƒXƒg‚Æ—˜‰v‚Ìŗǂ̑g‚݇‚킹‚Å‚ ‚éƒAƒCƒfƒA‚ðŠÈ’P‚ÉŒ©‚‚¯‚邱‚Æ‚ª‚Å‚«‚Ü‚·B Next [Advanced skills](../../3-Advanced) diff --git a/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index aa7a9b3..a210a4a 100644 --- a/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -1,15 +1,15 @@ # How to Stay Motivated [//]: # (Version:1.0.0) -It is a wonderful and surprising fact that programmers are highly motivated by the desire to create artifacts that are beautiful, useful, or nifty. This desire is not unique to programmers nor universal but it is so strong and common among programmers that it separates them from others in other roles. +ƒvƒƒOƒ‰ƒ}[‚ªA”ü‚µ‚­A—L‰v‚ÈA‚Ü‚½‚Í‹C‚Ì—˜‚¢‚½lH•¨‚ð쬂µ‚½‚¢‚Æ‚¢‚¤—~‹‚É‚æ‚Á‚Ä‚‚¢ˆÓ—~‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ÍA‘f°‚炵‚¢A‹Á‚­‚ׂ«Ž–ŽÀ‚Å‚·B‚±‚Ì—v–]‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚àƒ†ƒjƒo[ƒTƒ‹‚Å‚à‚È‚­AƒvƒƒOƒ‰ƒ}[ŠÔ‚Å”ñí‚É‹­‚­‹¤’Ê‚µ‚Ä‚¢‚邽‚ßA‘¼‚Ì–ðŠ„‚Ìƒƒ“ƒo[‚Ƃ͕ª‚©‚ê‚Ä‚¢‚Ü‚·B -This has practical and important consequences. If programmers are asked to do something that is not beautiful, useful, or nifty, they will have low morale. There's a lot of money to be made doing ugly, stupid, and boring stuff; but in the end, fun will make the most money for the company. +‚±‚ê‚ɂ͎À—p“I‚©‚Âd—v‚ÈŒ‹‰Ê‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ªA”ü‚µ‚­‚È‚¢A—L‰v‚ÈA‚Ü‚½‚Í‹C‚Ì—˜‚¢‚½‚à‚̂łȂ¢‚±‚Æ‚ð‚·‚é‚æ‚¤‹‚ß‚ç‚ꂽê‡A”Þ‚ç‚Í’á‚¢Žm‹C‚ðŽ‚Â‚Å‚µ‚傤BX‚¢A‹ð‚©‚ÈA‘Þ‹ü‚È‚à‚Ì‚ð‚â‚Á‚Äì‚邽‚߂ɂ½‚­‚³‚ñ‚Ì‚¨‹à‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µAŒ‹‹Ç‚̂Ƃ±‚ëAŠy‚µ‚݂͉ïŽÐ‚Ì‚½‚ß‚ÉÅ‚à‚¨‹à‚ð‰Ò‚®‚Å‚µ‚傤B -Obviously, there are entire industries organized around motivational techniques some of which apply here. The things that are specific to programming that I can identify are: +–¾‚ç‚©‚ÉA‚±‚±‚ɂ͂¢‚­‚‚©‚Ì“®‹@‚¯‹Zp‚ª‘g‚Ýž‚܂ꂽ‹ÆŠE‘S‘Ì‚ª‚ ‚è‚Ü‚·BŽ„‚ª“Á’è‚Å‚«‚éƒvƒƒOƒ‰ƒ~ƒ“ƒO“Á—L‚ÌŽ–•¿‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·F -- Use the best language for the job. -- Look for opportunities to apply new techniques, languages, and technologies. -- Try to either learn or teach something, however small, in each project. +- ŽdŽ–‚ÉÅ“K‚ÈŒ¾Œê‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +- V‚µ‚¢‹ZpAŒ¾ŒêA‹Zp‚ð“K—p‚·‚é‹@‰ï‚ð’T‚µ‚Ü‚·B +- ‚»‚ꂼ‚ê‚̃vƒƒWƒFƒNƒg‚ÅA¬‚³‚¢‚à‚Ì‚ÌA‰½‚©‚ðŠw‚ÑA‹³‚¦‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B -Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and it also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. +ÅŒã‚ÉA‰Â”\‚Å‚ ‚ê‚ÎAŽ©•ª‚ÌŽdŽ–‚̉e‹¿‚ðAŒÂl“I‚É“®‹@•t‚¯‚ç‚ê‚é‚à‚̂Ƃµ‚Ä‘ª’肵‚Ü‚·B‚½‚Æ‚¦‚ÎAƒoƒO‚ðC³‚·‚邯‚«AŽ„‚ªC³‚µ‚½ƒoƒO‚Ì”‚ðƒJƒEƒ“ƒg‚·‚邱‚Æ‚ÍA‚»‚ꂪ‚Ü‚¾‘¶Ý‚·‚é‚©‚à‚µ‚ê‚È‚¢”‚Ƃ͖³ŠÖŒW‚Å‚ ‚èAŽ„‚̉ïŽÐ‰Â”\‚ÈŒÀ‚謂³‚È•û–@‚Å‚¨‹q—l‚É’ñ‹Ÿ‚µ‚Ü‚·B‚µ‚©‚µA‚»‚ꂼ‚ê‚̃oƒO‚ðK‚¹‚Ȍڋq‚ÉŒ‹‚Ñ•t‚¯‚邱‚Æ‚ÍAŽ„‚ÌŒÂl“I‚È“®‹@‚Å‚·B Next [How to be Widely Trusted](02-How to be Widely Trusted.md) diff --git a/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index c115d4e..4bbcf5e 100644 --- a/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -1,7 +1,7 @@ # How to be Widely Trusted [//]: # (Version:1.0.0) -To be trusted you must be trustworthy. You must also be visible. If no one knows about you, no trust will be invested in you. With those close to you, such as your teammates, this should not be an issue. You establish trust by being responsive and informative to those outside your department or team. Occasionally someone will abuse this trust, and ask for unreasonable favours. Don't be afraid of this, just explain what you would have to give up doing to perform the favour. +‚ ‚È‚½‚ªM—Š‚³‚ê‚邽‚߂ɂÍAM—Ђł«‚é‚à‚̂łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB ‚ ‚È‚½‚àŒ©‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B ’N‚à‚ ‚È‚½‚ɂ‚¢‚Ä’m‚Á‚Ä‚¢‚È‚¯‚ê‚ÎA‚ ‚È‚½‚É‚ÍM—Š‚Í“ŠŽ‘‚³‚ê‚Ü‚¹‚ñB ‚ ‚È‚½‚̃`[ƒ€ƒƒCƒg‚̂悤‚ÈA‚ ‚È‚½‚ɋ߂¢l‚½‚¿‚ÆA‚±‚ê‚Í–â‘è‚ł͂ ‚è‚Ü‚¹‚ñB ‚ ‚È‚½‚ÍA‚ ‚È‚½‚Ì•”‚âƒ`[ƒ€ŠO‚Ìl‚É•qŠ´‚Å—L‰v‚Å‚ ‚邱‚Ƃɂæ‚Á‚ÄM—Š‚ðŠm—§‚µ‚Ü‚·B ŽžXA’N‚©‚ª‚±‚ÌM—p‚ð——p‚µA•s“–‚ȉ¶Œb‚ð‹‚߂邱‚Æ‚ª‚ ‚è‚Ü‚·B ‚±‚ê‚ð‹°‚ê‚Ă͂¢‚¯‚Ü‚¹‚ñBDˆÓ‚ð‹s‚·‚邽‚߂ɂ ‚È‚½‚ª‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Æ‚ðà–¾‚µ‚Ä‚­‚¾‚³‚¢B -Don't pretend to know something that you don't. With people that are not teammates, you may have to make a clear distinction between 'not knowing right off the top of my head' and 'not being able to figure it out, ever.' +‚ ‚È‚½‚ª‚µ‚È‚¢‚±‚Æ‚ð’m‚Á‚Ä‚¢‚é‚Ó‚è‚ð‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B ƒ`[ƒ€ƒ[ƒg‚ł͂Ȃ¢l‚½‚¿‚É‚ÍAuŽ„‚Ì“ª‚Ìã‚©‚ç‰E‚É•ª‚©‚ç‚È‚¢v‚Æu‚»‚ê‚ðŒˆ‚ß‚é‚±‚Æ‚ª‚Å‚«‚È‚¢v‚Ƃ̖¾Šm‚È‹æ•Ê‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB Next [How to Tradeoff Time vs. Space](03-How to Tradeoff Time vs Space.md) diff --git a/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index e58a029..08e64fb 100644 --- a/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -1,15 +1,15 @@ # How to Tradeoff Time vs. Space [//]: # (Version:1.0.0) -You can be a good programmer without going to college, but you can't be a good intermediate programmer without knowing basic computational complexity theory. You don't need to know 'big O' notation, but I personally think you should be able to understand the difference between 'constant-time','n log n' and 'n squared'. You might be able to intuit how to trade-off time against space without this knowledge, but in its absence you will not have a firm basis for communicating with your colleagues. +‚ ‚È‚½‚Í‘åŠw‚És‚©‚È‚­‚Ä‚à—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAŠî–{“I‚ÈŒvŽZ•¡ŽG«—˜_‚ð’m‚ç‚È‚­‚Ä‚àA—D‚ꂽ’†ŠÔƒvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚Í 'big O'•\‹L–@‚ð’m‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñ‚ªAŽ„‚ÍŒÂl“I‚É‚ÍA 'ˆê’莞ŠÔ'A 'n log n'‚Æ 'n squared'‚̈Ⴂ‚ð—‰ð‚Å‚«‚È‚¯‚ê‚΂Ȃç‚È‚¢‚ÆŽv‚¢‚Ü‚·B‚±‚Ì’mޝ‚ª‚È‚­‚Ä‚àAŽžŠÔ‚Æ‹óŠÔ‚Ƃ̃gƒŒ[ƒhƒIƒt‚ÌŽd•û‚ð’m‚邱‚Æ‚ª‚Å‚«‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA•sÝ‚Ìê‡A“¯—»‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì‚½‚߂̊mŒÅ‚½‚éŠî”Õ‚Í‚ ‚è‚Ü‚¹‚ñB -In designing or understanding an algorithm, the amount of time it takes to run is sometimes a function of the size of the input. When that is true, we can say an algorithm's worst/expected/best-case running time is 'n log n' if it is proportional to the size ($n$) times the logarithm of the size. The notation and way of speaking can be also be applied to the space taken up by a data structure. +ƒAƒ‹ƒSƒŠƒYƒ€‚ÌÝŒv‚Ü‚½‚Í—‰ð‚É‚ ‚½‚Á‚Ä‚ÍAŽÀs‚É—v‚·‚鎞ŠÔ‚Í“ü—͂̃TƒCƒY‚ÌŠÖ”‚Å‚ ‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ꂪ^‚Å‚ ‚邯‚«AƒAƒ‹ƒSƒŠƒYƒ€‚Ìň«/—\‘z/ŗǃP[ƒX‚ÌŽÀsŽžŠÔ‚ÍAƒTƒCƒY‚̑Δi$ n $j‚É”ä—á‚·‚邯 'n log n'‚ÆŒ¾‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B•\‹L–@‚¨‚æ‚Ñ”­º–@‚ÍAƒf[ƒ^\‘¢‚É‚æ‚Á‚Äè‚ß‚ç‚ê‚é‹óŠÔ‚É‚à“K—p‚·‚邱‚Æ‚ª‚Å‚«‚éB -To me, computational complexity theory is beautiful and as profound as physics - and a little bit goes a long way! +Ž„‚ɂƂÁ‚ÄAŒvŽZ‚Ì•¡ŽG‚³‚Ì—˜_‚Í”ü‚µ‚­A•¨—Šw‚Ù‚Ç[‚­A‚»‚µ‚Ä­‚µ‚͉“‚­‚És‚­‚̂ł·I -Time (processor cycles) and space (memory) can be traded off against each other. Engineering is about compromise, and this is a fine example. It is not always systematic. In general, however, one can save space by encoding things more tightly, at the expense of more computation time when you have to decode them. You can save time by caching, that is, spending space to store a local copy of something, at the expense of having to maintain the consistency of the cache. You can sometimes save time by maintaining more information in a data structure. This usually costs a small amount of space, but may complicate the algorithm. +ŽžŠÔiƒvƒƒZƒbƒT[EƒTƒCƒNƒ‹j‚ƃXƒy[ƒXiƒƒ‚ƒŠ[j‚Í‚¨ŒÝ‚¢‚ɃgƒŒ[ƒhƒIƒt‚Å‚«‚Ü‚·BƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚͑˦‚Å‚ ‚èA‚±‚ê‚Í—Ç‚¢—á‚Å‚·B•K‚¸‚µ‚à‘ÌŒn“I‚ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAˆê”Ê“I‚É‚ÍAƒfƒR[ƒh‚·‚é•K—v‚ª‚ ‚邯‚«‚ÉŒvŽZŽžŠÔ‚ð‹]µ‚É‚µ‚ÄA‚æ‚茵–§‚ɃGƒ“ƒR[ƒh‚·‚邱‚ƂŃXƒy[ƒX‚ðß–ñ‚Å‚«‚Ü‚·BƒLƒƒƒbƒVƒ…‚̈êŠÑ«‚ðˆÛŽ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚½‚ßAƒLƒƒƒbƒVƒ…‚·‚邱‚ƂŎžŠÔ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚‚܂èA‰½‚©‚̃[ƒJƒ‹ƒRƒs[‚ðŠi”[‚·‚邽‚߂̃Xƒy[ƒX‚ð”ï‚â‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·Bƒf[ƒ^\‘¢“à‚Å‚æ‚葽‚­‚Ìî•ñ‚ð•ÛŽ‚·‚邱‚Ƃɂæ‚Á‚ÄAŽžŠÔ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚Í’ÊíA‚킸‚©‚ȃXƒy[ƒX‚µ‚©•K—v‚Æ‚µ‚Ü‚¹‚ñ‚ªAƒAƒ‹ƒSƒŠƒYƒ€‚ª•¡ŽG‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·B -Improving the space/time trade-off can often change one or the other dramatically. However, before you work on this you should ask yourself if what you are improving is really the thing that needs the most improvement. It's fun to work on an algorithm, but you can't let that blind you to the cold hard fact that improving something that is not a problem will not make any noticeable difference and will create a test burden. +‹óŠÔ/ŽžŠÔ‚̃gƒŒ[ƒhƒIƒt‚ð‰ü‘P‚·‚邱‚Æ‚ÍA‚µ‚΂µ‚Έê•û‚Ü‚½‚Í‘¼•û‚ðŒ€“I‚ɕς¦‚邱‚Æ‚ª‚Å‚«‚éB‚µ‚©‚µA‚±‚ê‚ÉŽæ‚è‘g‚Þ‘O‚ÉA‚ ‚È‚½‚ª‰ü‘P‚µ‚Ä‚¢‚é‚à‚Ì‚ªA–{“–‚ÉÅ‚à‰ü‘P‚ª•K—v‚È‚à‚̂Ȃ̂©AŽ©•ªŽ©g‚Éq‚˂Ă­‚¾‚³‚¢BƒAƒ‹ƒSƒŠƒYƒ€‚Åì‹Æ‚·‚é‚̂͊y‚µ‚¢‚Å‚·‚ªA–â‘è‚ł͂Ȃ¢‚à‚Ì‚ð‰ü‘P‚·‚邱‚ƂŖڗ§‚Á‚½ˆá‚¢‚͂Ȃ­AƒeƒXƒg‚Ì•‰’S‚ð‚©‚¯‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñB -Memory on modern computers appears cheap, because unlike processor time, you can't see it being used until you hit the wall; but then failure is catastrophic. There are also other hidden costs to using memory, such as your effect on other programs that must be resident, and the time to allocate and deallocate it. Consider this carefully before you trade away space to gain speed. +Œ»‘ã‚̃Rƒ“ƒsƒ…[ƒ^‚̃ƒ‚ƒŠ‚ÍAƒvƒƒZƒbƒTŽžŠÔ‚Ƃ͈قȂèA•Ç‚ÉÕ“Ë‚·‚é‚܂Ŏg—p‚³‚ê‚Ä‚¢‚È‚¢‚½‚ßAˆÀ‰¿‚ÉŒ©‚¦‚Ü‚·Bޏ”s‚͉ó–Å“I‚Å‚·Bí’“‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‘¼‚̃vƒƒOƒ‰ƒ€‚ւ̉e‹¿‚âAŠ„‚è“–‚Ă⊄‚è“–‚Ä‚ð‰ðœ‚·‚鎞ŠÔ‚È‚ÇAƒƒ‚ƒŠ‚ðŽg—p‚·‚邽‚߂̉B‚³‚ꂽƒRƒXƒg‚à‚ ‚è‚Ü‚·BƒXƒs[ƒh‚ðã‚°‚邽‚߂ɃXƒy[ƒX‚ðŽæ‚èœ‚­‘O‚ÉA‚±‚ê‚ðTd‚ÉŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Stress Test](04-How to Stress Test.md) diff --git a/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md index 30c4418..5af320a 100644 --- a/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -1,14 +1,14 @@ # How to Stress Test [//]: # (Version:1.0.0) -Stress testing is fun. At first it appears that the purpose of stress testing is to find out if the system works under a load. In reality, it is common that the system does work under a load but fails to work in some way when the load is heavy enough. I call this *hitting the wall* or *bonking*[1]. There may be some exceptions, but there is almost always a ‘wall’. The purpose of stress testing is to figure out where the wall is, and then figure out how to move the wall further out. +ƒXƒgƒŒƒXƒeƒXƒg‚ÍŠy‚µ‚¢‚Å‚·Bʼn‚ÍAƒXƒgƒŒƒXƒeƒXƒg‚Ì–Ú“I‚ÍAƒVƒXƒeƒ€‚ª•‰‰×‚̉º‚Å“®ì‚·‚é‚©‚Ç‚¤‚©‚𒲂ׂ邱‚Ƃł·BŽÀÛ‚É‚ÍAƒVƒXƒeƒ€‚ª•‰‰×‚̉º‚Å“®ì‚·‚é‚͈̂ê”Ê“I‚Å‚·‚ªA•‰‰×‚ª\•ª‚Éd‚¢ê‡‚͉½‚ç‚©‚Ì•û–@‚Å“®ì‚µ‚Ü‚¹‚ñBŽ„‚Í‚±‚ê‚ð•Ç*‚Ü‚½‚Í*ƒ{ƒ“ƒLƒ“ƒO* [1] ‚É“–‚ĂĂ¢‚Ü‚·B‚¢‚­‚‚©‚Ì—áŠO‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚Ù‚Æ‚ñ‚Çí‚Éu•Çv‚ª‚ ‚è‚Ü‚·BƒXƒgƒŒƒXƒeƒXƒg‚Ì–Ú“I‚ÍA•Ç‚ª‚Ç‚±‚É‚ ‚é‚©‚ð”cˆ¬‚µA•Ç‚ð‚³‚ç‚ɉ“‚´‚¯‚é•û–@‚ð—‰ð‚·‚邱‚Ƃł·B -A plan for stress testing should be developed early in the project, because it often helps to clarify exactly what is expected. Is two seconds for a web page request a miserable failure or a smashing success? Is 500 concurrent users enough? That, of course, depends, but one must know the answer when designing the system that answers the request. The stress test needs to model reality well enough to be useful. It isn't really possible to simulate 500 erratic and unpredictable humans using a system concurrently very easily, but one can at least create 500 simulations and try to model some part of what they might do. +ƒXƒgƒŒƒXƒeƒXƒg‚ÌŒv‰æ‚ÍAŠú‘Ò‚³‚ê‚邱‚Æ‚ð³Šm‚É–¾Šm‚É‚·‚é‚̂ɖ𗧂‚±‚Æ‚ª‘½‚¢‚Ì‚ÅAƒvƒƒWƒFƒNƒg‚Ì‘‚¢ŽžŠú‚ÉŠJ”­‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B Webƒy[ƒW—v‹‚ª”ߎS‚ÈŽ¸”s‚©¬Œ÷‚µ‚½‚Ì‚Í2•b‚Å‚·‚©H 500l‚Ì“¯Žžƒ†[ƒU[‚ª\•ª‚Å‚·‚©H‚»‚ê‚Í‚à‚¿‚ë‚ñAˆË‘¶‚µ‚Ä‚¢‚Ü‚·‚ªA—v‹‚É“š‚¦‚éƒVƒXƒeƒ€‚ðÝŒv‚·‚邯‚«‚Í“š‚¦‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·BƒXƒgƒŒƒXƒeƒXƒg‚ÍAŽÀ—p«‚ð\•ª‚É”­Šö‚Å‚«‚邿‚¤‚Ƀ‚ƒfƒ‹‰»‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B 500l‚Ì•sˆÀ’è‚Å—\‘ª•s”\‚ÈlŠÔ‚ðƒVƒXƒeƒ€‚ðŽg‚Á‚Ä“¯Žž‚ÉŠÈ’P‚ɃVƒ~ƒ…ƒŒ[ƒg‚·‚邱‚Ƃ͎Àۂɂ͉”\‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA­‚È‚­‚Æ‚à500‚̃Vƒ~ƒ…ƒŒ[ƒVƒ‡ƒ“‚ð쬂µA‚»‚ê‚炪s‚¤‰Â”\«‚Ì‚ ‚é•”•ª‚ðƒ‚ƒfƒŠƒ“ƒO‚µ‚悤‚Æ‚µ‚Ü‚·B -In stress testing, start out with a light load and load the system along some dimension - such as input rate or input size - until you hit the wall. If the wall is too close to satisfy your needs, figure out which resource is the bottleneck (there is usually a dominant one.) Is it memory, processor, I/O, network bandwidth, or data contention? Then figure out how you can move the wall. Note that moving the wall, that is, increasing the maximum load the system can handle, might not help or might actually hurt the performance of a lightly loaded system. Usually performance under heavy load is more important than performance under a light load. +ƒXƒgƒŒƒXƒeƒXƒg‚Å‚ÍAŒy•‰‰×‚ÅŽn“®‚µA•ǂɓ–‚½‚é‚Ü‚ÅA“ü—Í‘¬“x‚â“ü—̓TƒCƒY‚Ȃǂ̡–@‚ɉˆ‚Á‚ăVƒXƒeƒ€‚ðƒ[ƒh‚µ‚Ü‚·Bƒƒ‚ƒŠAƒvƒƒZƒbƒTAI / OAƒlƒbƒgƒ[ƒN‘шæ•A‚Ü‚½‚̓f[ƒ^‚Ì‹£‡‚ÍA•Ç‚ª‚ ‚È‚½‚̃j[ƒY‚ð–ž‚½‚·‚ɂ͋߂·‚¬‚éꇂÍAƒ{ƒgƒ‹ƒlƒbƒN‚ƂȂ郊ƒ\[ƒXi’Êí‚ÍŽx”z“I‚È‚à‚Ìj‚ð”cˆ¬‚µ‚Ä‚­‚¾‚³‚¢BŽŸ‚ÉA•ǂ𓮂©‚·•û–@‚ðŒ©‚Â‚¯‚Ü‚·BƒEƒH[ƒ‹‚ð“®‚©‚·A‚‚܂èƒVƒXƒeƒ€‚ªˆ—‚Å‚«‚éő啉‰×‚ð‘‚â‚·‚±‚Æ‚ÍA•‰‰×‚ÌŒy‚¢ƒVƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ð’ቺ‚³‚¹‚½‚èAŽÀÛ‚ÉŠQ‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B’ÊíA•‰‰×‚ªŒy‚¢ê‡‚̃pƒtƒH[ƒ}ƒ“ƒX‚ÍA•‰‰×‚ªd‚¢ê‡‚̃pƒtƒH[ƒ}ƒ“ƒX‚æ‚è‚àd—v‚Å‚·B -You may have to get visibility into several different dimensions to build up a mental model of it; no single technique is sufficient. For instance, logging often gives a good idea of the wall-clock time between two events in the system, but unless carefully constructed, doesn't give visibility into memory utilization or even data structure size. Similarly, in a modern system, a number of computers and many software systems may be cooperating. Particularly when you are hitting the wall (that is, the performance is non-linear in the size of the input) these other software systems may be a bottleneck. Visibility into these systems, even if only measuring the processor load on all participating machines, can be very helpful. +‚ ‚È‚½‚Í‚»‚ê‚̸_“Iƒ‚ƒfƒ‹‚ð\’z‚·‚邽‚ß‚ÉA‚¢‚­‚‚©‚̈قȂ鎟Œ³‚ð‰ÂŽ‹‰»‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB’Pˆê‚Ì‹Zp‚Å\•ª‚ł͂Ȃ¢B‚½‚Æ‚¦‚ÎAƒƒMƒ“ƒO‚Å‚ÍAƒVƒXƒeƒ€“à‚Ì2‚‚̃Cƒxƒ“ƒgŠÔ‚̃EƒH[ƒ‹ƒNƒƒbƒNŽžŠÔ‚ð‚æ‚­’m‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªATd‚É\’z‚µ‚È‚¢ŒÀ‚èAƒƒ‚ƒŠŽg—p—¦‚âƒf[ƒ^\‘¢ƒTƒCƒY‚̉Ž‹«‚Í‚ ‚è‚Ü‚¹‚ñB“¯—l‚ÉAÅV‚̃VƒXƒeƒ€‚Å‚ÍA‘½‚­‚̃Rƒ“ƒsƒ…[ƒ^‚Æ‘½‚­‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ª‹¦—Í‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B“Á‚ÉA•ǂɓ–‚½‚Á‚½‚Æ‚«i‚‚܂èA“ü—͂̑傫‚³‚ɉž‚¶‚ăpƒtƒH[ƒ}ƒ“ƒX‚ª”ñ’¼ü“I‚Å‚ ‚éjA‚±‚ê‚ç‚Ì‘¼‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚̓{ƒgƒ‹ƒlƒbƒN‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·BŽQ‰Á‚µ‚Ä‚¢‚é‚·‚ׂẴ}ƒVƒ“‚̃vƒƒZƒbƒT•‰‰×‚𑪒肷‚邾‚¯‚Å‚ ‚Á‚Ä‚àA‚±‚ê‚ç‚̃VƒXƒeƒ€‚̉Ž‹«‚Í”ñí‚É–ð—§‚¿‚Ü‚·B -Knowing where the wall is is essential not only to moving the wall, but also to providing predictability so that the business can be managed effectively. +•Ç‚ª‚Ç‚±‚É‚ ‚é‚©‚ð’m‚邱‚Æ‚ÍA•ǂ𓮂©‚·‚¾‚¯‚łȂ­A—\‘ª‰Â”\«‚ð’ñ‹Ÿ‚µ‚ărƒWƒlƒX‚ðŒø—¦“I‚ÉŠÇ—‚Å‚«‚邿‚¤‚É‚·‚邽‚߂ɂà•s‰ÂŒ‡‚Å‚·B --- diff --git a/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index e7112b0..e99a0ad 100644 --- a/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,9 +1,9 @@ # How to Balance Brevity and Abstraction [//]: # (Version:1.0.0) -Abstraction is key to programming. You should carefully choose how abstract you need to be. Beginning programmers in their enthusiasm often create more abstraction than is really useful. One sign of this is if you create classes that don't really contain any code and don't really do anything except serve to abstract something. The attraction of this is understandable but the value of code brevity must be measured against the value of abstraction. Occasionally, one sees a mistake made by enthusiastic idealists: at the start of the project a lot of classes are defined that seem wonderfully abstract and one may speculate that they will handle every eventuality that may arise. As the project progresses and fatigue sets in, the code itself becomes messy. Function bodies become longer than they should be. The empty classes are a burden to document that is ignored when under pressure. The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple. This is a form of *speculative programming*. I strongly recommend the article ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). +’ŠÛ‰»‚̓vƒƒOƒ‰ƒ~ƒ“ƒO‚ɂƂÁ‚Äd—v‚Å‚·B‚ ‚È‚½‚͂ǂ̂悤‚É’ŠÛ“I‚Å‚ ‚é•K—v‚ª‚ ‚é‚©‚ðTd‚É‘I‘ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚Ì”MˆÓ‚ÍA‚µ‚΂µ‚Ζ{“–‚É—L—p‚È‚à‚Ì‚æ‚è‚à’ŠÛ“x‚ð‚‚߂܂·B‚±‚ê‚ðŽ¦‚·ˆê‚‚̒›Œó‚ÍAŽÀۂɃR[ƒh‚ðŠÜ‚܂Ȃ¢ƒNƒ‰ƒX‚ð쬂µA’ŠÛ“I‚È‚à‚Ì‚ð’ñ‹Ÿ‚·‚éˆÈŠO‚͉½‚à‚µ‚È‚¢ƒNƒ‰ƒX‚ð쬂·‚éꇂł·B‚±‚ê‚Ì–£—͂͗‰ð‚Å‚«‚Ü‚·‚ªAƒR[ƒh‚ÌŠÈŒ‰‚³‚̉¿’l‚Í’ŠÛ‰»‚̉¿’l‚ɑ΂µ‚Ä‘ª’肳‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBŽžÜA”M‹¶“I‚È—‘zŽå‹`ŽÒ‚ªŠÔˆá‚¢‚ð”Æ‚µ‚½‚±‚Æ‚ª‚ ‚è‚Ü‚·BƒvƒƒWƒFƒNƒg‚ÌŠJŽnŽž‚É‚ÍA’ŠÛ“I‚ÉŽv‚¦‚鑽‚­‚̃Nƒ‰ƒX‚ª’è‹`‚³‚êA”­¶‚·‚é‰Â”\«‚Ì‚ ‚é‚·‚ׂĂ̎–‘Ô‚ðˆ—‚·‚邯„‘ª‚µ‚Ü‚·BƒvƒƒWƒFƒNƒg‚ªis‚µA”æ˜J‚ª“ü‚螂ނɂ‚ê‚ÄAƒR[ƒhŽ©‘Ì‚ª—ŽG‚ɂȂè‚Ü‚·BŠÖ”–{‘Ì‚ÍA•K—vˆÈã‚É’·‚­‚È‚è‚Ü‚·B‹ó‚̃Nƒ‰ƒX‚ÍA•¶‘‰»‚Ì•‰’S‚Å‚ ‚èAƒvƒŒƒbƒVƒƒ[‰º‚ł͖³Ž‹‚³‚ê‚Ü‚·B’ŠÛ‰»‚É”ï‚₳‚ꂽƒGƒlƒ‹ƒM[‚ªA•¨Ž–‚ð’Z‚­ŠÈ’P‚ɕۂ‚½‚߂ɔï‚₳‚ꂽ‚È‚çAÅI“I‚ÈŒ‹‰Ê‚Í‚æ‚è—Ç‚¢‚à‚̂ɂȂè‚Ü‚µ‚½B‚±‚ê‚Í“Š‹@“IƒvƒƒOƒ‰ƒ~ƒ“ƒO*‚̈êŒ`‘Ô‚Å‚·BŽ„‚ÍA[Paul Graham‚É‚æ‚é[ 'Succinctness is Power'ihttp://www.paulgraham.com/power.htmlj‚Ì‹LŽ–‚ð‹­‚­‚¨Š©‚ß‚µ‚Ü‚·B -There is a certain dogma associated with useful techniques such as *information hiding* and *object oriented programming* that are sometimes taken too far. These techniques let one code abstractly and anticipate change. I personally think, however, that you should not produce much speculative code. For example, it is an accepted style to hide an integer variable on an object behind mutators and accessors, so that the variable itself is not exposed, only the little interface to it. This does allow the implementation of that variable to be changed without affecting the calling code, and is perhaps appropriate to a library writer who must publish a very stable API. But I don't think the benefit of this outweighs the cost of the wordiness of it when my team owns the calling code and hence can recode the caller as easily as the called. Four or five extra lines of code is a heavy price to pay for this speculative benefit. +*î•ñ‰B•Á*‚âƒIƒuƒWƒFƒNƒgŽwŒüƒvƒƒOƒ‰ƒ~ƒ“ƒO*‚Ȃǂ֗̕˜‚ȃeƒNƒjƒbƒN‚ÉŠÖ˜A‚µ‚½ƒhƒOƒ}‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚Ì‹Zp‚ÍA1‚‚̃R[ƒh‚ð’ŠÛ“I‚È‚à‚̂ɂµA•ω»‚ð—\Šú‚·‚éBŽ„‚ÍŒÂl“I‚É‚ÍA‘½‚­‚Ì“Š‹@“I‚ȃR[ƒh‚𶬂·‚ׂ«‚ł͂Ȃ¢‚ÆŽv‚¢‚Ü‚·B‚½‚Æ‚¦‚ÎA•Ï”Ž©‘Ì‚ªƒGƒNƒXƒ|[ƒY‚³‚ê‚È‚¢‚悤‚ÉAƒ~ƒ…[ƒ^ƒ‰‚ƃAƒNƒZƒT‚Ì”wŒã‚É‚ ‚éƒIƒuƒWƒFƒNƒg‚Ì®”•Ï”‚ð”ñ•\ަ‚É‚µ‚ÄA‚»‚ê‚ɑ΂·‚鬂³‚ȃCƒ“ƒ^[ƒtƒF[ƒX‚¾‚¯‚ðŽó‚¯“ü‚ê‚éƒXƒ^ƒCƒ‹‚Í—e”F‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚É‚æ‚èAŒÄ‚Ño‚µƒR[ƒh‚ɉe‹¿‚ð—^‚¦‚¸‚É‚»‚̕ϔ‚ÌŽÀ‘•‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«A”ñí‚ɈÀ’肵‚½API‚ðŒöŠJ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ƒ‰ƒCƒuƒ‰ƒŠƒ‰ƒCƒ^[‚ɂƂÁ‚Ă͂¨‚»‚ç‚­“K؂ł·B‚µ‚©‚µŽ„‚ÍAŽ„‚̃`[ƒ€‚ªƒR[ƒŠƒ“ƒOƒR[ƒh‚ðŠ—L‚µ‚Ä‚¢‚é‚Ì‚ÅAŒÄ‚Ño‚µŒ³‚ðŠÈ’P‚ɃR[ƒ‰[‚Æ“¯‚¶‚悤‚ÉăR[ƒfƒBƒ“ƒO‚·‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅA‚±‚ê‚Ì—˜“_‚ª‚»‚ÌŒ¾Œê‚̃RƒXƒg‚ðã‰ñ‚邯‚ÍŽv‚í‚È‚¢B 4‚‚܂½‚Í5‚‚̗]•ª‚ȃR[ƒhs‚ÍA‚±‚Ì“Š‹@“I‚È—˜‰v‚Ì‚½‚߂Ɏx•¥‚¤‚½‚ß‚Ìd‚¢‘㞂ł·B -Portability poses a similar problem. Should code be portable to a different computer, compiler, software system or platform, or simply easily ported? I think a non-portable, short-and-easily-ported piece of code is better than a long portable one. It is relatively easy and certainly a good idea to confine non-portable code to designated areas, such as a class that makes database queries that are specific to a given DBMS. +ˆÚA«‚É‚à“¯—l‚Ì–â‘肪‚ ‚è‚Ü‚·BƒR[ƒh‚ð•ʂ̃Rƒ“ƒsƒ…[ƒ^AƒRƒ“ƒpƒCƒ‰Aƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€A‚Ü‚½‚̓vƒ‰ƒbƒgƒtƒH[ƒ€‚ɈÚA‚·‚é‚©AŠÈ’P‚ɈÚA‚·‚é•K—v‚ª‚ ‚è‚Ü‚·‚©Hƒ|[ƒ^ƒuƒ‹‚ł͂Ȃ¢A’Z‚­‚ÄŠÈ’P‚ɈÚA‚Å‚«‚éƒR[ƒh‚ÍA’·‚¢ˆÚA‰Â”\‚ȃR[ƒh‚æ‚è‚à—D‚ê‚Ä‚¢‚邯Žv‚¢‚Ü‚·B“Á’è‚ÌDBMS‚ɌŗL‚̃f[ƒ^ƒx[ƒXƒNƒGƒŠ‚ð쬂·‚éƒNƒ‰ƒX‚È‚ÇAƒ|[ƒ^ƒuƒ‹‚łȂ¢ƒR[ƒh‚ðŽw’肳‚ꂽ—̈æ‚ÉŒÀ’è‚·‚邱‚Ƃ͔äŠr“IŠÈ’P‚Å‚ ‚èAŠm‚©‚É—Ç‚¢l‚¦‚Å‚·B Next [How to Learn New Skills](06-How to Learn New Skills.md) diff --git a/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index d025b46..04d828d 100644 --- a/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -1,13 +1,13 @@ # How to Learn New Skills [//]: # (Version:1.0.0) -Learning new skills, especially non-technical ones, is the greatest fun of all. Most companies would have better morale if they understood how much this motivates programmers. +V‚µ‚¢ƒXƒLƒ‹A“Á‚É”ñ‹ZpƒXƒLƒ‹‚ðŠw‚Ô‚±‚Æ‚ÍA‚·‚ׂĂÌl‚ÌÅ‘å‚ÌŠy‚µ‚݂ł·B‚Ù‚Æ‚ñ‚Ç‚ÌŠé‹Æ‚ÍA‚±‚ꂪƒvƒƒOƒ‰ƒ}[‚̃‚ƒ`ƒx[ƒVƒ‡ƒ“‚ð‚ǂ̂­‚ç‚¢—‰ð‚·‚é‚©‚É‚æ‚Á‚ÄA‚æ‚è—Ç‚¢Žm‹C‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B -Humans learn by doing. Book-reading and class-taking are useful. But could you have any respect for a programmer who had never written a program? To learn any skill, you have to put yourself in a forgiving position where you can exercise that skill. When learning a new programming language, try to do a small project in it before you have to do a large project. When learning to manage a software project, try to manage a small one first. +lŠÔ‚Í‚â‚Á‚ÄŠw‚ÔBƒuƒbƒNƒŠ[ƒfƒBƒ“ƒO‚ƃNƒ‰ƒXŽö‹Æ‚͕֗˜‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚̓vƒƒOƒ‰ƒ€‚ð‘‚¢‚½‚±‚Ƃ̂Ȃ¢ƒvƒƒOƒ‰ƒ}[‚𑸌h‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©HƒXƒLƒ‹‚ðŠw‚Ô‚½‚߂ɂÍA‚»‚̃XƒLƒ‹‚ð”­Šö‚Å‚«‚銰—e‚Ȉʒu‚ÉŽ©•ªŽ©g‚ð’u‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBV‚µ‚¢ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðŠw‚Ô‚Æ‚«‚ÍA‘å‚«‚ȃvƒƒWƒFƒNƒg‚ðs‚¤‘O‚ɬ‚³‚ȃvƒƒWƒFƒNƒg‚ðŽÀs‚µ‚Ă݂Ă­‚¾‚³‚¢Bƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ðŠÇ—‚·‚é•û–@‚ðŠw‚Ô‚Æ‚«‚ÍA‚Ü‚¸¬‚³‚È‚à‚Ì‚ðŠÇ—‚µ‚Ä‚­‚¾‚³‚¢B -A good mentor is no replacement for doing things yourself, but is a lot better than a book. What can you offer a potential mentor in exchange for their knowledge? At a minimum, you should offer to study hard so their time won't be wasted. +—Ç‚¢Žw“±ŽÒ‚ÍAŽ©•ª‚Å‚â‚邱‚Ƃɑã‚í‚é‚à‚̂ł͂ ‚è‚Ü‚¹‚ñ‚ªA–{‚æ‚è‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B”Þ‚ç‚Ì’mޝ‚ƈø‚«Š·‚¦‚ÉAöÝ“I‚ȃƒ“ƒ^[‚ð‚ ‚È‚½‚É’ñ‹Ÿ‚·‚邱‚Ƃ͂ł«‚Ü‚·‚©HÅ’á‚Å‚àA•׋­‚µ‚ÄŽžŠÔ‚𖳑ʂɂµ‚È‚¢‚悤‚ɧ—ã‚·‚é‚ׂ«‚Å‚·B -Try to get your boss to let you have formal training, but understand that it is often not much better than the same amount of time spent simply playing with the new skill you want to learn. It is, however, easier to ask for training than playtime in our imperfect world, even though a lot of formal training is just sleeping through lectures waiting for the dinner party. +‚ ‚È‚½‚ÌãŽi‚ɳޮ‚ÈŒP—û‚ð‚³‚¹‚Ä‚à‚炤‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚µ‚©‚µA‚ ‚È‚½‚ªŠw‚Ñ‚½‚¢V‚µ‚¢ƒXƒLƒ‹‚Å—V‚ñ‚Å‚¢‚é‚̂Ɠ¯‚¶‚­‚ç‚¢‘½‚­‚ÌŽžŠÔ‚Í‚»‚ê‚Ù‚Ç—Ç‚­‚È‚¢‚Æ—‰ð‚µ‚Ä‚¢‚Ü‚·B‚µ‚©‚µA•sŠ®‘S‚È¢ŠE‚Å‚ÍA‰‰Œ€‚æ‚è‚àƒgƒŒ[ƒjƒ“ƒO‚ð‹‚ß‚é‚Ì‚ªŠÈ’P‚Å‚·B³Ž®‚ȃgƒŒ[ƒjƒ“ƒO‚Ì‘½‚­‚ÍA—[H‰ï‚ð‘Ò‚Á‚Ä‚¢‚éu‹`‚ð’Ê‚µ‚ÄQ‚Ä‚¢‚邾‚¯‚Å‚·B -If you lead people, understand how they learn and assist them by assigning them projects that are the right size and that exercise skills they are interested in. Don't forget that the most important skills for a programmer are not the technical ones. Give your people a chance to play and practice courage, honesty, and communication. +‚ ‚È‚½‚ªl‚𓱂­ê‡A”ނ炪‹»–¡‚ðŽ‚Á‚Ä‚¢‚é“K؂ȋK–͂̃vƒƒWƒFƒNƒg‚ðŠ„‚è“–‚Ă邱‚Ƃɂæ‚Á‚ÄA”ނ炪‚ǂ̂悤‚ÉŠw‚ÑA‰‡•‚·‚é‚©‚ð—‰ð‚·‚éBƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚ÄÅ‚àd—v‚ȃXƒLƒ‹‚Í‹Zp“I‚È‚à‚̂ł͂Ȃ¢‚±‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ÌlX‚ÉA—E‹CA³’¼‚³AƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚µ‚Ä—ûK‚·‚é‹@‰ï‚ð—^‚¦‚Ü‚µ‚傤B Next [Learn to Type](07-Learn to Type.md) diff --git a/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md b/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md index c678ddd..de0269e 100644 --- a/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -1,5 +1,5 @@ # Learn to Type [//]: # (Version:1.0.0) -Learn to touch-type. This is an intermediate skill because writing code is so hard that the speed at which you can type is irrelevant and can't put much of a dent in the time it takes to write code, no matter how good you are. However, by the time you are an intermediate programmer you will probably spend a lot of time writing natural language to your colleagues and others. This is a fun test of your commitment; it takes dedicated time that is not much fun to learn something like that. Legend has it that when Michael Tiemann was at MCC people would stand outside his door to listen to the hum generated by his keystrokes which were so rapid as to be indistinguishable. +ƒ^ƒbƒ`ƒ^ƒCƒv‚ðŠw‚ÔB ‚±‚ê‚Í’†‹‰‚̃XƒLƒ‹‚Å‚·BƒR[ƒh‚ð‘‚­‚±‚Ƃ͔ñí‚ɓ‚­A“ü—Í‚·‚鑬“x‚ª–³ŠÖŒW‚ÅAƒR[ƒh‚Ì‘‚«•û‚ÉŽžŠÔ‚ª‚©‚©‚ç‚È‚¢‚悤‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B ‚µ‚©‚µA’†ŠÔƒvƒƒOƒ‰ƒ}[‚Å‚ ‚ê‚ÎA‚¨‚»‚ç‚­‚ ‚È‚½‚Ì“¯—»‚⑼l‚ÉŽ©‘RŒ¾Œê‚ð‘‚­‚̂ɑ½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·‚Å‚µ‚傤B ‚±‚ê‚Í‚ ‚È‚½‚̃Rƒ~ƒbƒgƒƒ“ƒg‚ÌŠy‚µ‚¢ƒeƒXƒg‚Å‚·B ‚»‚̂悤‚È‚±‚Æ‚ðŠw‚Ԃ̂͂ ‚Ü‚è–Ê”’‚­‚È‚¢ê—p‚ÌŽžŠÔ‚ª‚©‚©‚è‚Ü‚·B “`à‚É‚æ‚ê‚ÎAMichael Tiemann‚ªMCC‚É‚¢‚½‚Æ‚«Al‚ÍA”ނ̃L[ƒXƒgƒ[ƒN‚É‚æ‚Á‚ͬ‚³‚ꂽƒnƒ€‰¹‚ð•·‚­‚½‚߂ɃhƒA‚ÌŠO‚É—§‚‚±‚ƂɂȂè‚Ü‚µ‚½B Next [How to Do Integration Testing](08-How to Do Integration Testing.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index 2e111a0..aaaa6e1 100644 --- a/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -1,7 +1,7 @@ # How to Do Integration Testing [//]: # (Version:1.0.0) -Integration testing is the testing of the integration of various components that have been unit tested. Integration is expensive and it comes out in the testing. You must include time for this in your estimates and your schedule. +“‡ƒeƒXƒg‚ÍA’P‘̃eƒXƒg‚³‚ꂽ‚³‚Ü‚´‚܂ȃRƒ“ƒ|[ƒlƒ“ƒg‚Ì“‡ƒeƒXƒg‚Å‚·B “‡‚Í‚‰¿‚Å‚ ‚èAƒeƒXƒg‚Åo‚Ä‚­‚éB ‚ ‚È‚½‚ÌŒ©Ï‚à‚è‚Æ‚ ‚È‚½‚̃XƒPƒWƒ…[ƒ‹‚É‚±‚ê‚ÌŽžŠÔ‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚è‚Ü‚·B -Ideally you should organize a project so that there is not a phase at the end where integration must explicitly take place. It is far better to gradually integrate things as they are completed over the course of the project. If it is unavoidable estimate it carefully. +—‘z“I‚É‚ÍA“‡‚𖾎¦“I‚És‚¤•K—v‚ª‚ ‚éƒtƒF[ƒY‚ªÅI’iŠK‚ɂȂ¢‚悤‚ɃvƒƒWƒFƒNƒg‚ð•Ò¬‚·‚é‚Ì‚ª—‘z“I‚Å‚·B ƒvƒƒWƒFƒNƒg‚̉ߒö‚ÅŠ®¬‚µ‚½‚à‚Ì‚ð’iŠK“I‚É“‡‚·‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B ‚â‚ނ𓾂Ȃ¢ê‡‚Í’ˆÓ[‚­Œ©Ï‚à‚Á‚Ä‚­‚¾‚³‚¢B Next [Communication Languages](09-Communication Languages.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md b/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md index 8d39438..0ea3a3b 100644 --- a/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -1,11 +1,11 @@ # Communication Languages [//]: # (Version:1.0.0) -There are some languages, that is, formally defined syntactic systems, that are not programming languages but *communication languages* - they are designed specifically to facilitate communication through standardization. In 2003 the most important of these are UML, XML, and SQL. You should have some familiarity with all of these so that you can communicate well and decide when to use them. +ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ł͂Ȃ­A’ÊMŒ¾Œê*‚Å‚ ‚éŒ`Ž®“I‚É’è‹`‚³‚ꂽ\•¶ƒVƒXƒeƒ€‚Ì‚¢‚­‚‚©‚ÌŒ¾Œê‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚ÍA•W€‰»‚ð’Ê‚¶‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð—eˆÕ‚É‚·‚邿‚¤‚É“Á•Ê‚ÉÝŒv‚³‚ê‚Ä‚¢‚Ü‚·B 2003”N‚É‚ÍA‚±‚ê‚ç‚Ì’†‚ÅÅ‚àd—v‚Ȃ̂ªUMLAXMLASQL‚Å‚·B‚ ‚È‚½‚͂悭ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚µA‚¢‚ÂŽg‚¤‚ׂ«‚©‚ðŒˆ‚ß‚é‚½‚ß‚ÉA‚±‚ê‚ç‚·‚ׂĂɸ’Ê‚µ‚Ä‚¢‚é•K—v‚ª‚ ‚è‚Ü‚·B -UML is a rich formal system for making drawings that describe designs. Its beauty lies in that it is both visual and formal, capable of conveying a great deal of information if both the author and the audience know UML. You need to know about it because designs are sometimes communicated in it. There are very helpful tools for making UML drawings that look very professional. In a lot of cases UML is too formal, and I find myself using a simpler *boxes and arrows* style for design drawings. But I'm fairly sure UML is at least as good for you as studying Latin. +UML‚ÍAÝŒv‚ð‹Lq‚·‚é}–Ê‚ð쬂·‚邽‚߂̖L‚©‚È³Ž®‚ȃVƒXƒeƒ€‚Å‚·B‚»‚Ì”ü‚µ‚³‚ÍA‚»‚ꂪƒrƒWƒ…ƒAƒ‹‚Å‚àƒtƒH[ƒ}ƒ‹‚Å‚à‚ ‚èAìŽÒ‚Ɠǎ҂̗¼•û‚ªUML‚ð’m‚Á‚Ä‚¢‚ê‚ÎA‘å—Ê‚Ìî•ñ‚ð“`‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚È‚½‚Í‚»‚ê‚ɂ‚¢‚Ä’m‚é•K—v‚ª‚ ‚è‚Ü‚·B‚È‚º‚È‚çA‚»‚Ì’†‚ŃfƒUƒCƒ“‚ª“`‚¦‚ç‚ê‚邱‚Æ‚ª‚ ‚é‚©‚ç‚Å‚·B”ñí‚Éê–å“I‚ÉŒ©‚¦‚éUML}–Ê‚ð쬂·‚邽‚߂̔ñí‚É—L—p‚ȃc[ƒ‹‚ª‚ ‚è‚Ü‚·B‘½‚­‚Ìê‡AUML‚Í³Ž®‚È‚à‚̂ł ‚èAÝŒv}–ʂɂ͂æ‚è’Pƒ‚È*ƒ{ƒbƒNƒX‚Æ–îˆó*ƒXƒ^ƒCƒ‹‚ðŽg—p‚µ‚Ä‚¢‚Ü‚·B‚µ‚©‚µAŽ„‚ÍAUML‚ª­‚È‚­‚Æ‚àƒ‰ƒeƒ“Œê‚ð•׋­‚·‚é‚̂ɂ҂Á‚½‚è‚Å‚ ‚邯ŠmM‚µ‚Ä‚¢‚Ü‚·B -XML is a standard for defining new standards. It is not a solution to data interchange problems, though you sometimes see it presented as if it was. Rather, it is a welcome automation of the most boring part of data interchange, namely, structuring the representation into a linear sequence and parsing back into a structure. It provides some nice type- and correctness-checking, though again only a fraction of what you are likely to need in practice. +XML‚ÍV‚µ‚¢•W€‚ð’è‹`‚·‚邽‚߂̕W€‚Å‚·Bƒf[ƒ^ŒðŠ·‚Ì–â‘è‚̉ðŒˆô‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚Ü‚é‚Å‚»‚ꂪ‘¶Ý‚·‚é‚©‚̂悤‚É•\ަ‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚Þ‚µ‚ëAƒf[ƒ^ŒðŠ·‚ÌÅ‚à‘Þ‹ü‚È•”•ª‚ÌŽ©“®‰»A‚·‚Ȃ킿•\Œ»‚ðüŒ`ƒV[ƒPƒ“ƒX‚É\‘¢‰»‚µA\‘¢‚É\•¶‰ðÍ‚·‚邱‚Æ‚ðŠ½Œ}‚·‚鎩“®‰»‚Å‚·BŽÀÛ‚É•K—v‚ÆŽv‚í‚ê‚é‚à‚̂̂قñ‚̈ꕔ‚Å‚ ‚é‚É‚à‚©‚©‚í‚炸A‚¢‚­‚‚©‚̃^ƒCƒvƒ`ƒFƒbƒN‚Ƴ‚µ‚³ƒ`ƒFƒbƒN‚ª‚ ‚è‚Ü‚·B -SQL is a very powerful and rich data query and manipulation language that is not quite a programming language. It has many variations, typically quite product-dependent, which are less important than the standardized core. SQL is the *lingua franca* of relational databases. You may or may not work in any field that can benefit from an understanding of relational databases, but you should have a basic understanding of them and the syntax and meaning of SQL. +SQL‚ÍAƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ł͂Ȃ¢”ñí‚É‹­—͂ŖL•x‚ȃf[ƒ^ƒNƒGƒŠ‚¨‚æ‚Ñ‘€ìŒ¾Œê‚Å‚·B•W€‰»‚³‚ꂽƒRƒA‚æ‚è‚àd—v‚ł͂Ȃ¢A‘½‚­‚̃oƒŠƒG[ƒVƒ‡ƒ“i’Êí‚Í»•iˆË‘¶j‚ª‚ ‚è‚Ü‚·B SQL‚ÍAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒX‚Ì* lingua franca *‚Å‚·BƒŠƒŒ[ƒVƒ‡ƒiƒ‹Eƒf[ƒ^ƒx[ƒX‚Ì—‰ð‚̉¶Œb‚ðŽó‚¯‚é‰Â”\«‚Ì‚ ‚镪–ì‚Åì‹Æ‚·‚éê‡‚à‚ ‚ê‚ÎAì‹Æ‚µ‚È‚¢ê‡‚à‚ ‚è‚Ü‚·‚ªASQL‚Ì\•¶‚ƈӖ¡‚ɂ‚¢‚Ă͊î–{“I‚É—‰ð‚µ‚Ä‚¨‚­•K—v‚ª‚ ‚è‚Ü‚·B Next [Heavy Tools](10-Heavy Tools.md) diff --git a/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md index d5fcb55..59ed429 100644 --- a/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -1,14 +1,14 @@ # Heavy Tools [//]: # (Version:1.0.0) -As our technological culture progresses, software technology moves from inconceivable, to research, to new products, to standardized products, to widely available and inexpensive products. These heavy tools can pull great loads, but can be intimidating and require a large investment in understanding. The intermediate programmer has to know how to manage them and when they should be used or considered. +Ž„‚½‚¿‚Ì‹Zp•¶‰»‚ªi‚ނɂ‚ê‚ÄAƒ\ƒtƒgƒEƒFƒA‹Zp‚ÍA‘z‘œ‚à‚Å‚«‚È‚¢‚à‚Ì‚©‚çAŒ¤‹†AV»•iA•W€‰»‚³‚ꂽ»•iAL‚­•‹y‚µ‚½ˆÀ‰¿‚È»•i‚ɈÚs‚µ‚Ä‚¢‚Ü‚·B ‚±‚ê‚ç‚Ìd‚¢H‹ï‚͑傫‚È•‰‰×‚ð‚©‚¯‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªAˆÐˆ³‚·‚邱‚Æ‚ª‚ ‚èA—‰ð‚ɑ傫‚È“ŠŽ‘‚ð•K—v‚Æ‚µ‚Ü‚·B ’†ŠÔƒvƒƒOƒ‰ƒ}[‚ÍA‚»‚ê‚ç‚ðŠÇ—‚·‚é•û–@‚ÆA‚»‚ê‚ç‚ð‚¢‚ÂŽg—p‚·‚ׂ«‚©A‚Ü‚½‚Íl—¶‚·‚ׂ«‚©‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·B -To my mind right now some of the best heavy tools are: +¡Ž„‚ÌS‚É‚ÍAÅ‚àd‚¢ƒc[ƒ‹‚Ì‚¢‚­‚‚©‚ª‚ ‚è‚Ü‚·F -- Relational Databases, -- Full-text Search Engines, -- Math libraries, -- OpenGL, -- XML parsers, and -- Spreadsheets. +- ƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒXA +- ‘S•¶ŒŸõƒGƒ“ƒWƒ“A +- ”Šwƒ‰ƒCƒuƒ‰ƒŠ[A +- OpenGLA +- XMLƒp[ƒT[A +- ƒXƒvƒŒƒbƒhƒV[ƒgB Next [How to analyze data](11-How to analyze data.md) diff --git a/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md b/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md index dccc36a..c53bed6 100644 --- a/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -1,11 +1,11 @@ # How to analyze data [//]: # (Version:1.0.0) -Data analysis is a process in the early stages of software development, when you examine a business activity and find the requirements to convert it into a software application. This is a formal definition, which may lead you to believe that data analysis is an action that you should better leave to the systems analysts, while you, the programmer, should focus on coding what somebody else has designed. If we follow strictly the software engineering paradigm, it may be correct. Experienced programmers become designers and the sharpest designers become business analysts, thus being entitled to think about all the data requirements and give you a well defined task to carry out. This is not entirely accurate, because data is the core value of every programming activity. Whatever you do in your programs, you are either moving around or modifying data. The business analyst is analysing the needs in a larger scale, and the software designer is further squeezing such scale so that, when the problem lands on your desk, it seems that all you need to do is to apply clever algorithms and start moving existing data. +ƒf[ƒ^•ªÍ‚ÍAƒ\ƒtƒgƒEƒFƒAŠJ”­‚̉Šú’iŠK‚̃vƒƒZƒX‚ÅAƒrƒWƒlƒXƒAƒNƒeƒBƒrƒeƒB‚𒲂×A‚»‚ê‚ðƒ\ƒtƒgƒEƒFƒAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ɕϊ·‚·‚邽‚߂̗vŒ‚ðŒ©‚Â‚¯o‚·ƒvƒƒZƒX‚Å‚·B‚±‚ê‚Í³Ž®‚È’è‹`‚Å‚ ‚èAƒf[ƒ^•ªÍ‚̓VƒXƒeƒ€ƒAƒiƒŠƒXƒg‚É”C‚¹‚Ä‚¨‚­‚ׂ«s“®‚Å‚ ‚邯M‚¶‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒvƒƒOƒ‰ƒ}[‚Í’N‚©‚ªÝŒv‚µ‚½‚à‚Ì‚ðƒR[ƒfƒBƒ“ƒO‚·‚邱‚Æ‚ÉÅ“_‚ð“–‚Ä‚é‚ׂ«‚Å‚·BŒµ–§‚Ƀ\ƒtƒgƒEƒFƒAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚̃pƒ‰ƒ_ƒCƒ€‚É]‚¦‚ÎA³‚µ‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBŒoŒ±–L•x‚ȃvƒƒOƒ‰ƒ}[‚ªƒfƒUƒCƒi[‚ɂȂèA‰s‚¢ƒfƒUƒCƒi[‚ªƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚ɂȂèA‚·‚ׂẴf[ƒ^—vŒ‚ɂ‚¢‚Äl‚¦‚邱‚Æ‚ª‚Å‚«A–¾Šm‚ȃ^ƒXƒN‚ðŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍAƒf[ƒ^‚ª‚·‚ׂẴvƒƒOƒ‰ƒ~ƒ“ƒOŠˆ“®‚Ì’†Šj‚ƂȂ邽‚ßAŠ®‘S‚ɂͳŠm‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚ʼn½‚ð‚µ‚Ä‚àA‚ ‚È‚½‚͈ړ®‚µ‚Ä‚¢‚é‚©Aƒf[ƒ^‚ð•ÏX‚µ‚Ä‚¢‚Ü‚·BƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚̓j[ƒY‚ð‚æ‚è‘å‹K–͂ɕªÍ‚µ‚Ä‚¢‚Ü‚·Bƒ\ƒtƒgƒEƒFƒAƒfƒUƒCƒi[‚ÍA‚±‚̂悤‚È‹K–Í‚ð‚³‚ç‚Éi‚èž‚ñ‚ÅA–â‘肪‚ ‚È‚½‚ÌŠ÷‚Ìã‚É’…‚­‚ÆAI–­‚ȃAƒ‹ƒSƒŠƒYƒ€‚ð“K—p‚µ‚ÄŠù‘¶‚̃f[ƒ^‚ðˆÚ“®‚·‚邾‚¯‚Å‚·B -Not so. +‚»‚¤‚ł͂ ‚è‚Ü‚¹‚ñB -No matter at which stage you start looking at it, data is the main concern of a well designed application. If you look closely at how a business analyst gets the requirements out of the customer's requests, you'll realize that data plays a fundamental role. The analyst creates so called Data Flow Diagrams, where all data sources are identified and the flow of information is shaped. Having clearly defined which data should be part of the system, the designer will shape up the data sources, in terms of database relations, data exchange protocols, and file formats, so that the task is ready to be passed down to the programmer. However, the process is not over yet, because you (the programmer) even after this thorough process of data refinement, are required to analyze data to perform the task in the best possible way. The bottom line of your task is the core message of Niklaus Wirth, the father of several languages. "Algorithms + Data Structures = Programs." There is never an algorithm standing alone, doing something to itself. Every algorithm is supposed to do something to at least one piece of data. +‚ǂ̒iŠK‚ÅŒ©‚Ä‚àAƒf[ƒ^‚Í‚¤‚Ü‚­ÝŒv‚³‚ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŽå‚ÈŠÖSŽ–‚Å‚·BƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚ªŒÚ‹q‚Ì—v‹‚©‚ç‚ǂ̂悤‚É—vŒ‚ðŽæ“¾‚µ‚Ä‚¢‚é‚©‚ðÚ‚µ‚­Œ©‚ê‚ÎAƒf[ƒ^‚ªŠî–{“I‚È–ðŠ„‚ð‰Ê‚½‚·‚±‚Æ‚ª‚í‚©‚è‚Ü‚·BƒAƒiƒŠƒXƒg‚Í‚¢‚í‚ä‚éƒf[ƒ^ƒtƒ[ƒ_ƒCƒAƒOƒ‰ƒ€‚ð쬂µA‚·‚ׂẴf[ƒ^ƒ\[ƒX‚ªŽ¯•Ê‚³‚êAî•ñƒtƒ[‚ªŒ`¬‚³‚ê‚Ü‚·B‚ǂ̃f[ƒ^‚ðƒVƒXƒeƒ€‚̈ꕔ‚É‚·‚é‚©‚𖾊m‚É‚µ‚½ã‚ÅAƒf[ƒ^ƒx[ƒXŠÖŒWAƒf[ƒ^ŒðŠ·ƒvƒƒgƒRƒ‹A‚¨‚æ‚уtƒ@ƒCƒ‹Œ`Ž®‚ÌŠÏ“_‚©‚çAÝŒvŽÒ‚̓f[ƒ^ƒ\[ƒX‚ð®Œ`‚µ‚ăvƒƒOƒ‰ƒ}‚É“n‚·€”õ‚ª®‚¢‚Ü‚·B‚µ‚©‚µAƒvƒƒZƒX‚͂܂¾I‚í‚Á‚Ä‚¢‚Ü‚¹‚ñB‚±‚Ì“O’ꂵ‚½ƒf[ƒ^ô—ûƒvƒƒZƒX‚ÌŒã‚Å‚ ‚Á‚Ä‚àiƒvƒƒOƒ‰ƒ}jA‰Â”\‚ÈŒÀ‚èŗǂ̕û–@‚Ńf[ƒ^‚ð•ªÍ‚·‚é•K—v‚ª‚ ‚é‚©‚ç‚Å‚·B‚ ‚È‚½‚ÌŽdŽ–‚ÌÅIs‚ÍA‚¢‚­‚‚©‚ÌŒ¾Œê‚Ì•ƒ‚Å‚ ‚éNiklaus Wirth‚Ì’†ŠjƒƒbƒZ[ƒW‚Å‚·B "ƒAƒ‹ƒSƒŠƒYƒ€+ƒf[ƒ^\‘¢=ƒvƒƒOƒ‰ƒ€"’P“ƂŃAƒ‹ƒSƒŠƒYƒ€‚𗧂Ă邱‚Ƃ͌ˆ‚µ‚Ä‚ ‚è‚Ü‚¹‚ñB‚·‚ׂẴAƒ‹ƒSƒŠƒYƒ€‚ÍA­‚È‚­‚Æ‚à1‚‚̃f[ƒ^‚ɑ΂µ‚ĉ½‚©‚ðs‚¤‚±‚ƂɂȂÁ‚Ä‚¢‚Ü‚·B -Therefore, since algorithms don't spin their wheels in a vacuum, you need to analyze both the data that somebody else has identified for you and the data that is necessary to write down your code. A trivial example will make the matter clearer. You are implementing a search routine for a library. According to your specifications, the user can select books by a combination of genre, author, title, publisher, printing year, and number of pages. The ultimate goal of your routine is to produce a legal SQL statement to search the back-end database. Based on these requirements, you have several choices: check each control in turn, using a "switch" statement, or several "if" ones; make an array of data controls, checking each element to see if it is set; create (or use) an abstract control object from which to inherit all your specific controls, and connect them to an event-driven engine. If your requirements include also tuning up the query performance, by making sure that the items are checked in a specific order, you may consider using a tree of components to build your SQL statement. As you can see, the choice of the algorithm depends on the data you decide to use, or to create. Such decisions can make all the difference between an efficient algorithm and a disastrous one. However, efficiency is not the only concern. You may use a dozen named variables in your code and make it as efficient as it can ever be. But such a piece of code might not be easily maintainable. Perhaps choosing an appropriate container for your variables could keep the same speed and in addition allow your colleagues to understand the code better when they look at it next year. Furthermore, choosing a well defined data structure may allow them to extend the functionality of your code without rewriting it. In the long run, your choices of data determines how long your code will survive after you are finished with it. Let me give you another example, just some more food for thought. Let's suppose that your task is to find all the words in a dictionary with more than three anagrams, where an anagram must be another word in the same dictionary. If you think of it as a computational task, you will end up with an endless effort, trying to work out all the combinations of each word and then comparing it to the other words in the list. However, if you analyze the data at hand, you'll realize that each word may be represented by a record containing the word itself and a sorted array of its letters as ID. Armed with such knowledge, finding anagrams means just sorting the list on the additional field and picking up the ones that share the same ID. The brute force algorithm may take several days to run, while the smart one is just a matter of a few seconds. Remember this example the next time you are facing an intractable problem. +‚µ‚½‚ª‚Á‚ÄAƒAƒ‹ƒSƒŠƒYƒ€‚Í^‹ó‚ÅŽÔ—Ö‚ð‰ñ“]‚³‚¹‚È‚¢‚Ì‚ÅA‘¼l‚ª‚ ‚È‚½‚Ì‚½‚߂ɓÁ’肵‚½ƒf[ƒ^‚ƃR[ƒh‚ð‘‚«—¯‚ß‚é‚̂ɕK—v‚ȃf[ƒ^‚Ì—¼•û‚ð•ªÍ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŠÈ’P‚È—á‚Å‚ÍA–â‘肪‚æ‚è–¾Šm‚ɂȂè‚Ü‚·Bƒ‰ƒCƒuƒ‰ƒŠ‚ÌŒŸõƒ‹[ƒ`ƒ“‚ðŽÀ‘•‚µ‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ÌŽd—l‚É‚æ‚邯Aƒ†[ƒU[‚̓Wƒƒƒ“ƒ‹A’˜ŽÒAƒ^ƒCƒgƒ‹Ao”ÅŽÐAˆóü”NAƒy[ƒW”‚Ì‘g‚݇‚킹‚őЂð‘I‘ð‚Å‚«‚Ü‚·Bƒ‹[ƒ`ƒ“‚ÌÅI“I‚È–Ú•W‚ÍAƒoƒbƒNƒGƒ“ƒhEƒf[ƒ^ƒx[ƒX‚ðŒŸõ‚·‚邽‚߂̳“–‚ÈSQL•¶‚𶬂·‚邱‚Ƃł·B‚±‚ê‚ç‚Ì—vŒ‚ÉŠî‚¢‚ÄA‚¢‚­‚‚©‚Ì‘I‘ðŽˆ‚ª‚ ‚è‚Ü‚·BuswitchvƒXƒe[ƒgƒƒ“ƒgA‚Ü‚½‚Í•¡”‚ÌuifvƒXƒe[ƒgƒƒ“ƒg‚ðŽg—p‚µ‚ÄAŠeƒRƒ“ƒgƒ[ƒ‹‚ð‡”ԂɃ`ƒFƒbƒN‚µ‚Ü‚·Bƒf[ƒ^ƒRƒ“ƒgƒ[ƒ‹‚Ì”z—ñ‚ð쬂µAŠe—v‘f‚ªÝ’肳‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN‚µ‚Ü‚·B‚·‚ׂĂ̓Á’è‚̃Rƒ“ƒgƒ[ƒ‹‚ðŒp³‚·‚é’ŠÛƒRƒ“ƒgƒ[ƒ‹ƒIƒuƒWƒFƒNƒg‚ðì¬i‚Ü‚½‚ÍŽg—pj‚µA‚»‚ê‚ç‚ðƒCƒxƒ“ƒgƒhƒŠƒuƒ“ƒGƒ“ƒWƒ“‚ÉÚ‘±‚µ‚Ü‚·B—vŒ‚É“Á’è‚̇˜‚Å€–Ú‚ªƒ`ƒFƒbƒN‚³‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚ÄAƒNƒGƒŠ‚̃pƒtƒH[ƒ}ƒ“ƒX‚ðƒ`ƒ…[ƒjƒ“ƒO‚·‚邱‚Æ‚à•K—v‚ÈꇂÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚̃cƒŠ[‚ðŽg—p‚µ‚ÄSQL•¶‚ð쬂·‚邱‚Æ‚ðŒŸ“¢‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚²——‚̂Ƃ¨‚èAƒAƒ‹ƒSƒŠƒYƒ€‚Ì‘I‘ð‚ÍAŽg—p‚·‚éA‚Ü‚½‚Í쬂·‚éƒf[ƒ^‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚±‚̂悤‚ÈŒˆ’è‚ÍAŒø—¦“I‚ȃAƒ‹ƒSƒŠƒYƒ€‚ƔߎS‚ȃAƒ‹ƒSƒŠƒYƒ€‚Ƃ̊Ԃ̂·‚ׂĂ̈Ⴂ‚ð¶‚¶‚³‚¹‚é‰Â”\«‚ª‚ ‚éB‚µ‚©‚µAŒø—¦‚¾‚¯‚ªŒœ”OŽ–€‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ÍA‚ ‚È‚½‚̃R[ƒh‚É–¼‘O•t‚«‚̕ϔ‚ð12ŒÂŽg—p‚µA‚±‚ê‚܂łǂ¨‚èŒø—¦“I‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µA‚»‚̂悤‚ȃR[ƒh‚ÍŠÈ’P‚ɕێç‚Å‚«‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¨‚»‚ç‚­A•Ï”‚Ì“K؂ȃRƒ“ƒeƒi‚ð‘I‘ð‚·‚é‚±‚Ƃœ¯‚¶ƒXƒs[ƒh‚ð•ۂ‚±‚Æ‚ª‚Å‚«A‚³‚ç‚ÉA—ˆ”N‚É‚ÍA“¯—»‚ªƒR[ƒh‚ð‚æ‚è‚æ‚­—‰ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚·B‚³‚ç‚ÉA–¾Šm‚É’è‹`‚³‚ꂽƒf[ƒ^\‘¢‚ð‘I‘ð‚·‚é‚±‚Æ‚ÅAƒR[ƒh‚Ì‘‚«Š·‚¦‚ðs‚킸‚ɃR[ƒh‚Ì‹@”\‚ðŠg’£‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B’·Šú“I‚É‚ÍAƒf[ƒ^‚Ì‘I‘ð‚É‚æ‚Á‚ÄAƒR[ƒh‚ÌI—¹Œã‚ɃR[ƒh‚ª‘¶‘±‚·‚éŠúŠÔ‚ªŒˆ‚Ü‚è‚Ü‚·B‚à‚¤ˆê‚‚̗á‚ð‹“‚°‚Ă݂܂µ‚傤BŽvl‚Ì‚½‚ß‚ÌH‚ו¨‚Í‚à‚¤­‚µ‚ ‚è‚Ü‚·BƒAƒiƒOƒ‰ƒ€‚ª“¯‚¶Ž«‘“à‚̕ʂ̒PŒê‚łȂ¯‚ê‚΂Ȃç‚È‚¢A3‚ˆÈã‚̃AƒiƒOƒ‰ƒ€‚ðŽ‚ÂŽ«‘‚Ì‚·‚ׂĂ̒PŒê‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚ ‚È‚½‚ÌŽdŽ–‚Å‚ ‚邯‚µ‚Ü‚µ‚傤B‚»‚ê‚ðŒvŽZ‚ÌŽdŽ–‚Æl‚¦‚é‚È‚ç‚ÎA‚ ‚È‚½‚Í–³ŒÀ‚Ì“w—Í‚ÉI‚í‚èAŠe’PŒê‚Ì‚·‚ׂĂ̑g‚݇‚킹‚ðŽŽ‚µ‚ÄA‚»‚ê‚ðƒŠƒXƒg‚Ì‘¼‚Ì’PŒê‚Æ”äŠr‚µ‚悤‚Æ‚µ‚Ü‚·B‚µ‚©‚µAŽèŒ³‚̃f[ƒ^‚ð•ªÍ‚·‚邯A’PŒê‚»‚Ì‚à‚̂Ƃ»‚Ì•¶Žš‚̃\[ƒg‚³‚ꂽ”z—ñ‚ðID‚Æ‚µ‚Ċ܂ރŒƒR[ƒh‚ÅŠe’PŒê‚ð•\‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚̂悤‚È’mޝ‚ðg‚ɂ‚¯‚ÄAƒAƒiƒOƒ‰ƒ€‚ðŒ©‚Â‚¯‚邱‚Æ‚ÍA’ljÁ‚̃tƒB[ƒ‹ƒh‚ÅƒŠƒXƒg‚ðƒ\[ƒg‚µA“¯‚¶ID‚ð‹¤—L‚·‚é‚à‚Ì‚ð‘I‚Ô‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·Bƒuƒ‹[ƒgƒtƒH[ƒXƒAƒ‹ƒSƒŠƒYƒ€‚ÍAŽÀs‚É”“ú‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªAƒXƒ}[ƒg‚ȃAƒ‹ƒSƒŠƒYƒ€‚͂قñ‚Ì”•b‚Å‚·B“‚¢–â‘è‚É’¼–Ê‚µ‚Ä‚¢‚邱‚Ì—á‚ðŠo‚¦‚Ä‚¨‚¢‚Ä‚­‚¾‚³‚¢B Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How to Manage Development Time.md) diff --git a/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index 94d473e..292aa28 100644 --- a/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -1,11 +1,11 @@ # How to Manage Development Time [//]: # (Version:1.0.0) -To manage development time, maintain a concise and up-to-date project plan. A project plan is an estimate, a schedule, a set of milestones for marking progress, and an assignment of your team or your own time to each task on the estimate. It should also include other things you have to remember to do, such as meeting with the quality assurance people, preparing documentation, or ordering equipment. If you are on a team, the project plan should be a consensual agreement, both at the start and as you go. +ŠJ”­ŽžŠÔ‚ðŠÇ—‚·‚邽‚ß‚ÉAŠÈŒ‰‚ÅÅV‚̃vƒƒWƒFƒNƒgŒv‰æ‚ðˆÛŽ‚·‚éBƒvƒƒWƒFƒNƒgŒv‰æ‚Æ‚ÍAŒ©Ï‚à‚èAƒXƒPƒWƒ…[ƒ‹Aisó‹µ‚ðŽ¦‚·ƒ}ƒCƒ‹ƒXƒg[ƒ“AŒ©Ï‚è‚ÌŠeƒ^ƒXƒN‚Ö‚ÌŽ©•ª‚̃`[ƒ€‚Ü‚½‚ÍŽ©•ª‚ÌŽžŠÔ‚ÌŠ„‚è“–‚Ăł·B•iŽ¿•ÛØ’S“–ŽÒ‚Ƃ̖ʒkAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚Ì€”õA‹@Ší‚Ì’•¶‚È‚ÇA–Y‚ê‚Ă͂Ȃç‚È‚¢‚±‚Æ‚à‚ ‚è‚Ü‚·Bƒ`[ƒ€‚ÉŽQ‰Á‚µ‚Ä‚¢‚éê‡AƒvƒƒWƒFƒNƒg‚ÌŒv‰æ‚ÍAŠJŽnŽž‚ÆI—¹Žž‚Ì—¼•û‚ŇˆÓ‚µ‚½‡ˆÓ‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -The project plan exists to help make decisions, not to show how organized you are. If the project plan is either too long or not up-to-date, it will be useless for making decisions. In reality, these decisions are about individual persons. The plan and your judgement let you decide if you should shift tasks from one person to another. The milestones mark your progress. If you use a fancy project planning tool, do not be seduced into creating a Big Design Up Front (BDUF) for the project, but use it to maintain concision and up-to-dateness. +ƒvƒƒWƒFƒNƒgŒv‰æ‚ÍA‚ ‚È‚½‚ª‚ǂ̂悤‚É‘gD‰»‚³‚ê‚Ä‚¢‚é‚©‚ðŽ¦‚·‚̂ł͂Ȃ­AˆÓŽvŒˆ’è‚ðŽx‰‡‚·‚邽‚߂ɑ¶Ý‚µ‚Ü‚·BƒvƒƒWƒFƒNƒgŒv‰æ‚ª’·‚·‚¬‚é‚©ÅV‚łȂ¢ê‡AˆÓŽvŒˆ’è‚ɂ͖ð‚É—§‚½‚È‚¢‚Å‚µ‚傤BŽÀÛ‚É‚ÍA‚±‚ê‚ç‚ÌŒˆ’è‚ÍŒÂl‚ÉŠÖ‚·‚é‚à‚̂ł·BŒv‰æ‚Æ‚ ‚È‚½‚Ì”»’f‚ÍAŽdŽ–‚ð‚ ‚él‚©‚ç•Ê‚Ìl‚Ɉڂ·‚ׂ«‚©‚Ç‚¤‚©‚ðŒˆ’è‚³‚¹‚Ü‚·Bƒ}ƒCƒ‹ƒXƒg[ƒ“‚Í‚ ‚È‚½‚Ìi•à‚ðŽ¦‚µ‚Ü‚·Bƒtƒ@ƒ“ƒV[‚ȃvƒƒWƒFƒNƒgŒv‰æƒc[ƒ‹‚ðŽg—p‚µ‚Ä‚¢‚éꇂÍAƒvƒƒWƒFƒNƒg‚ÌBig Design Up FrontiBDUFj‚ð쬂·‚é‚̂ɘf‚킳‚ê‚é‚̂ł͂Ȃ­A‚»‚ê‚ðŽg—p‚µ‚ÄŠÈŒ‰‚ÅÅV‚Ìó‘Ô‚ðˆÛŽ‚µ‚Ü‚·B -If you miss a milestone, you should take immediate action such as informing your boss that the scheduled completion of that project has slipped by that amount. The estimate and schedule could never have been perfect to begin with; this creates the illusion that you might be able to make up the days you missed in the latter part of the project. You might. But it is just as likely that you have underestimated that part as that you have overestimated it. Therefore the scheduled completion of the project has already slipped, whether you like it or not. +ƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªŒ‡‚¯‚Ä‚¢‚éꇂÍAãŽi‚É‚»‚̃vƒƒWƒFƒNƒg‚Ì—\’芮—¹‚ª‚»‚Ì‹àŠz‚¾‚¯•´Ž¸‚µ‚½‚±‚Æ‚ð’m‚点‚é‚È‚ÇA‚·‚®‚És“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŒ©Ï‚à‚è‚ÆƒXƒPƒWƒ…[ƒ‹‚ÍAŒˆ‚µ‚ÄŠ®àø‚È‚à‚̂ł͂Ȃ©‚Á‚½‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚±‚ê‚ÍA‚ ‚È‚½‚ªƒvƒƒWƒFƒNƒg‚̌㔼‚ÅŒ‡È‚µ‚½“ú‚ð•₤‚±‚Æ‚ª‚Å‚«‚邯‚¢‚¤öŠo‚ðì‚èo‚µ‚Ü‚·B‚»‚¤‚©‚à‚µ‚ê‚È‚¢B‚µ‚©‚µA‚ ‚È‚½‚ª‚»‚ê‚ð‰ß‘å•]‰¿‚µ‚Ä‚¢‚邯‚¢‚¤‚±‚Æ‚ð‚ ‚È‚½‚ª‰ß¬•]‰¿‚µ‚Ä‚¢‚é‰Â”\«‚à‚ ‚è‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‚ ‚È‚½‚ªD‚«‚©”Û‚©‚É‚©‚©‚í‚炸AŒv‰æ‚³‚ꂽƒvƒƒWƒFƒNƒg‚ÌŠ®—¹‚Í‚·‚łɃXƒŠƒbƒv‚µ‚Ä‚¢‚Ü‚·B -Make sure your plan includes time for: internal team meetings, demos, documentation, scheduled periodic activities, integration testing, dealing with outsiders, sickness, vacations, maintenance of existing products, and maintenance of the development environment. The project plan can serve as a way to give outsiders or your boss a view into what you or your team is doing. For this reason it should be short and up-to-date. +“à•”ƒ`[ƒ€ƒ~[ƒeƒBƒ“ƒOAƒfƒ‚A•¶‘‰»A—\’肳‚ꂽ’èŠú“I‚ÈŠˆ“®A“‡ƒeƒXƒgAŠO•”ŽÒ‚Ƃ̑ΈA•a‹CA‹x‰ÉAŠù‘¶»•i‚̃ƒ“ƒeƒiƒ“ƒXAŠJ”­ŠÂ‹«‚̃ƒ“ƒeƒiƒ“ƒX‚È‚ÇAŒv‰æ‚ÉŽžŠÔ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢BƒvƒƒWƒFƒNƒgŒv‰æ‚ÍA‚ ‚È‚½‚â‚ ‚È‚½‚̃`[ƒ€‚ª‚â‚Á‚Ä‚¢‚邱‚Æ‚ðŠO•”ŽÒ‚âãŽi‚ÉŒ©‚¹‚é•û–@‚Æ‚µ‚Ä–ð—§‚¿‚Ü‚·B‚±‚Ì‚½‚ßA’ZŠúŠÔ‚ÅÅV‚Ì‚à‚̂ɂ·‚é•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Manage Third-Party Software Risks](02-How to Manage Third-Party Software Risks.md) diff --git a/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index 336f3e8..6bfa43b 100644 --- a/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -1,11 +1,11 @@ # How to Manage Third-Party Software Risks [//]: # (Version:1.0.0) -A project often depends on software produced by organizations that it does not control. There are great risks associated with third party software that must be recognized by everyone involved. +ƒvƒƒWƒFƒNƒg‚Í‚µ‚΂µ‚ÎAŠÇ—‚µ‚Ä‚¢‚È‚¢‘gD‚É‚æ‚Á‚Ä쬂³‚ꂽƒ\ƒtƒgƒEƒFƒA‚Ɉˑ¶‚µ‚Ü‚·BŠÖŒW‚·‚é‚·‚ׂĂÌl‚ª”Fޝ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‘æŽOŽÒ‚̃\ƒtƒgƒEƒFƒA‚ɂ͑傫‚ÈƒŠƒXƒN‚ª‚ ‚è‚Ü‚·B -Never, ever, rest any hopes on *vapour*. Vapour is any alleged software that has been promised but is not yet available. This is the surest way to go out of business. It is unwise to be merely sceptical of a software company's promise to release a certain product with a certain feature at a certain date; it is far wiser to ignore it completely and forget you ever heard it. Never let it be written down in any documents used by your company. +Œˆ‚µ‚ÄAö‹C‚ɂǂñ‚ÈŠó–]‚à‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñB Vapor‚ÍA–ñ‘©‚³‚ê‚Ä‚¢‚邪‚Ü‚¾—˜—p‰Â”\‚ł͂Ȃ¢‚ÆŽå’£‚³‚ê‚Ä‚¢‚éƒ\ƒtƒgƒEƒFƒA‚Ì‚±‚Ƃł·B‚±‚ê‚Íň«‚Ì•û–@‚Å‚·B“Á’è‚Ì‹@”\‚ð”õ‚¦‚½“Á’è‚Ì»•i‚ð“Á’è‚Ì“ú•t‚ÉƒŠƒŠ[ƒX‚·‚邯‚¢‚¤ƒ\ƒtƒgƒEƒFƒAŠé‹Æ‚Ì–ñ‘©‚ð’P‚ɉù‹^“I‚É‚·‚é‚̂͌«–¾‚ł͂Ȃ¢B‚»‚ê‚ðŠ®‘S‚É–³Ž‹‚µA‚ ‚È‚½‚ª‚»‚ê‚ð•·‚¢‚½‚±‚Æ‚ð–Y‚ê‚邱‚Ƃ͂¸‚Á‚ÆŒ«–¾‚Å‚·B‚ ‚È‚½‚̉ïŽÐ‚ªŽg—p‚µ‚Ä‚¢‚é‘—Þ‚É‘‚«—¯‚߂Ă͂¢‚¯‚Ü‚¹‚ñB -If third-party software is not vapour, it is still risky, but at least it is a risk that can be tackled. If you are considering using third-party software, you should devote energy early on to evaluating it. People might not like to hear that it will take two weeks or two months to evaluate each of three products for suitability, but it has to be done as early as possible. The cost of integrating cannot be accurately estimated without a proper evaluation. +ƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ªŒÍЉ‚µ‚Ä‚¢‚È‚¢ê‡‚Å‚àA‚»‚ê‚͂܂¾ŠëŒ¯‚Å‚·‚ªA­‚È‚­‚Æ‚à‚»‚ê‚ÍŽæ‚è‘g‚Þ‚±‚Æ‚ª‚Å‚«‚郊ƒXƒN‚Å‚·BƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ðŽg—p‚·‚邱‚Æ‚ðŒŸ“¢‚µ‚Ä‚¢‚éꇂÍA‘Šú‚É•]‰¿‚µ‚Ä•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BlX‚ÍA3‚‚̻•i‚Ì‚»‚ꂼ‚ê‚ɂ‚¢‚Ä“KØ«‚ð•]‰¿‚·‚é‚Ì‚É2TŠÔ‚©2‚©ŒŽ‚©‚©‚邯•·‚¢‚Ä‚¢‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‰Â”\‚ÈŒÀ‚è‘‚­s‚¤•K—v‚ª‚ ‚è‚Ü‚·B“K؂ȕ]‰¿‚È‚µ‚ÉA“‡‚̃RƒXƒg‚ð³Šm‚É„’è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -Understanding the suitability of existing third party software for a particular purpose is very tribal knowledge. It is very subjective and generally resides in experts. You can save a lot of time if you can find those experts. Often times a project will depend on a third-party software system so completely that if the integration fails the project will fail. Express risks like that clearly in writing in the schedule. Try to have a contingency plan, such as another system that can be used or the ability to write the functionality yourself if the risk can't be removed early. Never let a schedule depend on vapour. +“Á’è‚Ì–Ú“I‚Ì‚½‚߂̊ù‘¶‚̃T[ƒhƒp[ƒeƒBƒ\ƒtƒgƒEƒFƒA‚Ì“K‡«‚ð—‰ð‚·‚邱‚Æ‚ÍA”ñí‚É•”‘°“I‚È’mޝ‚Å‚·B‚»‚ê‚Í”ñí‚ÉŽåŠÏ“I‚ÅAˆê”Ê‚Éê–副‚É‹Z‚µ‚Ä‚¢‚Ü‚·B‚»‚ê‚ç‚Ìê–副‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA‘½‚­‚ÌŽžŠÔ‚ðß–ñ‚Å‚«‚Ü‚·B‘½‚­‚Ìê‡AƒvƒƒWƒFƒNƒg‚̓T[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚Ɉˑ¶‚·‚邽‚ßA“‡‚ªŽ¸”s‚·‚邯ƒvƒƒWƒFƒNƒg‚ÍŽ¸”s‚µ‚Ü‚·B‚»‚̂悤‚ÈƒŠƒXƒN‚ðƒXƒPƒWƒ…[ƒ‹‚Å‘–ʂŖ¾Šm‚É•\Œ»‚µ‚Ä‚­‚¾‚³‚¢BƒŠƒXƒN‚ð‘Šú‚Éœ‹Ž‚Å‚«‚È‚¢ê‡‚ÍAŽg—p‰Â”\‚ȕʂ̃VƒXƒeƒ€‚â‹@”\‚ðŽ©•ª‚Å쬂·‚é‚È‚ÇA‹Ù‹}Žž‘ΉžŒv‰æ‚𗧂ĂĂ­‚¾‚³‚¢BƒXƒPƒWƒ…[ƒ‹‚Íö‹C‚Ɉˑ¶‚µ‚È‚¢‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Manage Consultants](03-How to Manage Consultants.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 6b632b9..8ef504a 100644 --- a/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -1,9 +1,9 @@ # How to Manage Consultants [//]: # (Version:1.0.0) -Use consultants, but don't rely on them. They are wonderful people and deserve a great deal of respect. Since they get to see a lot of different projects, they often know more about specific technologies and even programming techniques than you will. The best way to use them is as educators in-house that can teach by example. +ƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ðŽg—p‚µ‚Ü‚·‚ªA‚»‚ê‚É—Š‚ç‚È‚¢‚Å‚­‚¾‚³‚¢B”Þ‚ç‚Í‚·‚΂炵‚¢lX‚Å‚ ‚èA‘å‚¢‚É‘¸Œh‚³‚ê‚é‚ׂ«‚Å‚·B”Þ‚ç‚Í‘½‚­‚̈قȂéƒvƒƒWƒFƒNƒg‚ðŒ©‚Ä‚¢‚é‚Ì‚ÅA“Á’è‚̃eƒNƒmƒƒW‚âƒvƒƒOƒ‰ƒ~ƒ“ƒOƒeƒNƒjƒbƒN‚ɂ‚¢‚Ă̒mޝ‚ªA‚ ‚È‚½‚Ì‚à‚Ì‚æ‚è‚à‚µ‚΂µ‚Εª‚©‚è‚Ü‚·B‚»‚ê‚ç‚ðŽg—p‚·‚éÅ‘P‚Ì•û–@‚ÍA‹³Žt‚ªŽÐ“à‚Å‹³‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚É‚·‚邱‚Ƃł·B -However, they usually cannot become part of the team in the same sense that regular employees are, if only because you may not have enough time to learn their strengths and weaknesses. Their financial commitment is much lower. They can move more easily. They may have less to gain if the company does well. Some will be good, some will be average, and some will be bad, but hopefully your selection of consultants will not be as careful as your selection of employees, so you will get more bad ones. +‚µ‚©‚µA’Êí‚Ì‹­‚݂Ǝã‚Ý‚ðŠw‚Ô‚Ì‚É\•ª‚ÈŽžŠÔ‚ª‚È‚¢‚½‚ßA’Êí‚Ì]‹Æˆõ‚Æ“¯‚¶Š´Šo‚Ń`[ƒ€‚ÉŽQ‰Á‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB”Þ‚ç‚Ìà­“IƒRƒ~ƒbƒgƒƒ“ƒg‚͂͂邩‚É’á‚¢‚Å‚·B”Þ‚ç‚Í‚æ‚èŠÈ’P‚É“®‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B‰ïŽÐ‚ª‚¤‚Ü‚­‚¢‚­‚È‚çA”Þ‚ç‚Ì—˜‰v‚Í‚ ‚܂蓾‚ç‚ê‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¢‚­‚‚©‚Í—Ç‚¢A‚¢‚­‚‚©‚Í•½‹Ï‚ÅA‚¢‚­‚‚©‚͈«‚¢‚Å‚·‚ªA‚ ‚È‚½‚̃Rƒ“ƒTƒ‹ƒ^ƒ“ƒg‚Ì‘I‘ð‚Í‚ ‚È‚½‚Ì]‹Æˆõ‚Ì‘I‘ð‚Ù‚ÇTd‚ł͂Ȃ¢‚Å‚µ‚傤A‚ ‚È‚½‚͈«‚¢‚à‚̂𓾂é‚Å‚µ‚傤B -If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the a project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. +ƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ªƒR[ƒh‚ð‘‚­‚‚à‚è‚È‚çA‚»‚ê‚ðTd‚ÉŒŸ“¢‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBƒŒƒrƒ…[‚³‚ê‚Ä‚¢‚È‚¢‘å‚«‚ȃR[ƒhƒuƒƒbƒN‚ÌƒŠƒXƒN‚𔺂¤ƒvƒƒWƒFƒNƒg‚ÌÅŒã‚ɂ͓ž’B‚Å‚«‚Ü‚¹‚ñB‚±‚ê‚ÍŽÀۂɂ͂·‚ׂẴ`[ƒ€ƒƒ“ƒo[‚É“–‚Ă͂܂è‚Ü‚·‚ªA’Êí‚Í‚ ‚È‚½‚ɋ߂¢ƒ`[ƒ€ƒƒ“ƒo[‚Ì’mޝ‚ª‘‚¦‚Ü‚·B Next [How to Communicate the Right Amount](04-How to Communicate the Right Amount.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index 2e16157..e27e0c4 100644 --- a/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -1,7 +1,7 @@ # How to Communicate the Right Amount [//]: # (Version:1.0.0) -Carefully consider the cost of a meeting; it costs *its duration multiplied by the number of participants*. Meetings are sometimes necessary, but smaller is usually better. The quality of communication in small meetings is better, and less time overall is wasted. If any one person is bored at a meeting take this as a sign that the meeting should be smaller. +Td‚ɉï‹c”ï‚ðl—¶‚µ‚Ä‚­‚¾‚³‚¢B ‚»‚ÌŠúŠÔ‚ÉŽQ‰ÁŽÒ‚Ì”‚ðŠ|‚¯‚½*”ï—p‚ª‚©‚©‚è‚Ü‚·B ‰ï‹c‚ª•K—v‚Èê‡‚à‚ ‚è‚Ü‚·‚ªA’Êí‚ͬ‹K–͂ł·B ¬‹K–͂ȉï‹c‚ł̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽ¿‚ÍŒüサA‘S‘Ì“I‚É–³‘ʂɂȂ鎞ŠÔ‚Í­‚È‚­‚È‚è‚Ü‚·B ‰ï‹c‚É’N‚©‚ª‘Þ‹ü‚µ‚Ä‚¢‚éꇂÍA‰ï‹c‚𬂳‚­‚·‚é‚ׂ«‚Å‚ ‚邯‚¢‚¤’›Œó‚Æ‚µ‚Ä‚±‚ê‚ðŽæ‚éB -Everything possible should be done to encourage informal communication. More useful work is done during lunches with colleagues than during any other time. It is a shame that more companies do not recognize nor support this fact. +”ñŒöŽ®‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‘£i‚·‚邽‚߂ɂÍA‰Â”\‚ÈŒÀ‚è‚Ì‚±‚Æ‚ªs‚í‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢B ‚æ‚è•Ö—˜‚Èì‹Æ‚ÍA‘¼‚ÌŽžŠÔ‚æ‚è‚à“¯—»‚Ƃ̃‰ƒ“ƒ`’†‚És‚í‚ê‚Ü‚·B ‘½‚­‚ÌŠé‹Æ‚ª‚±‚ÌŽ–ŽÀ‚ð”Fޝ‚µ‚½‚èƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢‚±‚Ƃ͎c”O‚Å‚·B Next [How to Disagree Honestly and Get Away with It](05-How to Disagree Honestly and Get Away with It.md) diff --git a/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index 7ced830..c2c882d 100644 --- a/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -1,11 +1,11 @@ # How to Disagree Honestly and Get Away with It [//]: # (Version:1.0.0) -Disagreement is a great opportunity to make a good decision, but it should be handled delicately. Hopefully you feel that you have expressed your thoughts adequately and been heard before the decision is made. In that case there is nothing more to say, and you should decide whether you will stand behind the decision even though you disagree with it. If you can support this decision even though you disagree, say so. This shows how valuable you are because you are independent and are not a yes-man, but respectful of the decision and a team player. +ˆÓŒ©‚Ì•sˆê’v‚Í—Ç‚¢”»’f‚ð‚·‚éâD‚Ì‹@‰ï‚Å‚·‚ªA”÷–­‚Ɉ—‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ªŽvl‚ð“K؂ɕ\Œ»‚µAŒˆ’肪‰º‚³‚ê‚é‘O‚É•·‚¢‚½‚ÆŽv‚¤‚±‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B‚»‚Ìꇂ͉½‚àŒ¾‚¤‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ª‚»‚ê‚É“¯ˆÓ‚µ‚È‚­‚Ä‚àA‚ ‚È‚½‚ªŒˆ’è‚Ì”wŒã‚É—§‚‚©‚Ç‚¤‚©‚ðŒˆ‚ß‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚ª“¯ˆÓ‚µ‚È‚¢‚É‚à‚©‚©‚í‚炸‚±‚ÌŒˆ’è‚ðŽxŽ‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA‚»‚¤Œ¾‚¢‚È‚³‚¢B‚±‚ê‚ÍA‚ ‚È‚½‚ª“Æ—§‚µ‚Ä‚¨‚èAƒCƒGƒXEƒ}ƒ“‚ł͂Ȃ­AŒˆ’è‚Æƒ`[ƒ€EƒvƒŒ[ƒ„[‚ð‘¸d‚µ‚Ä‚¢‚邽‚ßA‚ ‚È‚½‚ª‚Ç‚ê‚Ù‚Ç‹Md‚Ȃ̂©‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·B -Sometimes a decision that you disagree with will be made when the decision makers did not have the full benefit of your opinion. You should then evaluate whether to raise the issue on the basis of the benefit to the company or tribe. If it is a small mistake in your opinion, it may not be worth reconsidering. If it is a large mistake in your opinion, then of course you must present an argument. +ˆÓŽvŒˆ’èŽÒ‚ª‚ ‚È‚½‚̈ӌ©‚ð\•ª‚ɶ‚©‚¹‚È‚©‚Á‚½‚Æ‚«‚ÉA‚ ‚È‚½‚ª”½‘΂·‚錈’è‚ð‰º‚·‚±‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ÌŒãA‰ïŽÐ‚â•”‘°‚Ì—˜‰v‚ÉŠî‚¢‚Ä–â‘è‚ð’ñ‹N‚·‚é‚©‚Ç‚¤‚©‚ð•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ꂪ‚ ‚È‚½‚̈ӌ©‚̬‚³‚ȊԈႢ‚Å‚ ‚é‚È‚çA‚»‚ê‚ÍÄl‚·‚鉿’l‚ª‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚̈ӌ©‚ɑ傫‚ȊԈႢ‚ª‚ ‚éꇂÍA‚à‚¿‚ë‚ñ‹c˜_‚ð’ñަ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -Usually, this is not a problem. In some stressful circumstances and with some personality types this can lead to things being taken personally. For instance, some very good programmers lack the confidence needed to challenge a decision even when they have good reason to believe it is wrong. In the worst of circumstances the decision maker is insecure and takes it as a personal challenge to their authority. It is best to remember that in such circumstances people react with the reptilian part of their brains. You should present your argument in private, and try to show how new knowledge changes the basis on which the decision was made. +’ÊíA‚±‚ê‚Í–â‘è‚ł͂ ‚è‚Ü‚¹‚ñBƒXƒgƒŒƒX‚Ì‘½‚¢ó‹µ‚Å‚ÍA‚¢‚­‚‚©‚̃p[ƒ\ƒiƒŠƒeƒBƒ^ƒCƒv‚Å‚ÍA‚±‚ê‚ÍŒÂl“I‚È‚à‚̂ɂ‚Ȃª‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎA”ñí‚É—D‚ꂽƒvƒƒOƒ‰ƒ}[‚̂Ȃ©‚É‚ÍA‚»‚ꂪŠÔˆá‚Á‚Ä‚¢‚邯M‚¸‚鳓–‚È——R‚ª‚ ‚éꇂłàAˆÓŽvŒˆ’è‚É’§í‚·‚邽‚߂ɕK—v‚ÈŽ©M‚ª‚È‚¢‚à‚Ì‚ª‚ ‚è‚Ü‚·Bň«‚Ì󋵂łÍAˆÓŽvŒˆ’èŽÒ‚Í•sˆÀ’è‚Å‚ ‚èAŽ©‚ç‚ÌŒ ŒÀ‚ɑ΂·‚éŒÂl“I‚È’§í‚ÆŒ©‚È‚·B‚±‚̂悤‚È󋵂łÍAlX‚Í”]‚Ìà¦’Ž—Þ‚Ì•”•ª‚É”½‰ž‚·‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚­‚±‚Æ‚ªÅ‘P‚Å‚·B‚ ‚È‚½‚Í‹c˜_‚ð”ñŒöŠJ‚Å’ñަ‚µAV‚µ‚¢’mޝ‚ª‚ǂ̂悤‚ÉŒˆ’肪‰º‚³‚ꂽ‚©‚ðŽ¦‚µ‚Ă݂é‚ׂ«‚Å‚·B -Whether the decision is reversed or not, you must remember that you will never be able to say ‘I told you so!’ since the alternate decision was fully explored. +ˆÓŽvŒˆ’肪‹t“]‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚É‚©‚©‚í‚炸A‘ã‘ÖŒˆ’è‚ªŠ®‘S‚É’²¸‚³‚ꂽ‚Ì‚ÅA‚ ‚È‚½‚Íu‚ ‚È‚½‚É‚»‚¤Œ¾‚Á‚½v‚ÆŒ¾‚¤‚±‚Ƃ͌ˆ‚µ‚Ăł«‚È‚¢‚±‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How to Tradeoff Quality Against Development Time.md) From 1dbdd84ca93e885a8945eefa4da4989774a783e2 Mon Sep 17 00:00:00 2001 From: borerere Date: Thu, 17 Nov 2016 15:35:41 +0900 Subject: [PATCH 106/149] =?UTF-8?q?translate=20=E3=80=8C3-Advanced?= =?UTF-8?q?=E3=80=8Dto=20Japanease?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../01-How to Fight Schedule Pressure.md | 8 ++++---- .../02-How to Understand the User.md | 16 +++++++-------- .../03-How to Get a Promotion.md | 10 +++++----- .../01-How to Develop Talent.md | 20 +++++++++---------- .../02-How to Choose What to Work On.md | 2 +- ...How to Get the Most From Your Teammates.md | 12 +++++------ .../04-How to Divide Problems Up.md | 6 +++--- .../05-How to Handle Boring Tasks.md | 4 ++-- .../06-How to Gather Support for a Project.md | 2 +- .../07-How to Grow a System.md | 20 +++++++++---------- .../08-How to Communicate Well.md | 8 ++++---- ...l People Things They Don't Want to Hear.md | 6 +++--- .../10-How to Deal with Managerial Myths.md | 14 ++++++------- ...1-How to Deal with Organizational Chaos.md | 8 ++++---- ...ow to Tell the Hard From the Impossible.md | 6 +++--- .../02-How to Utilize Embedded Languages.md | 8 ++++---- .../03-Choosing Languages.md | 14 ++++++------- 17 files changed, 82 insertions(+), 82 deletions(-) diff --git a/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index f54a5f0..7ec8089 100644 --- a/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -1,11 +1,11 @@ # How to Fight Schedule Pressure [//]: # (Version:1.0.0) -Time-to-market pressure is the pressure to deliver a good product quickly. It is good because it reflects a financial reality, and is healthy up to a point. Schedule pressure is the pressure to deliver something faster than it can be delivered and it is wasteful, unhealthy, and all too common. +»•i‰»‚܂ł̎žŠÔ‚Ì’Zk‚ÍA‚·‚®‚ꂽ»•i‚ðv‘¬‚É’ñ‹Ÿ‚·‚邯‚¢‚¤ƒvƒŒƒbƒVƒƒ[‚Å‚·B‚»‚ê‚Íà­“IŒ»ŽÀ‚𔽉f‚µ‚Ä‚¨‚èA‚ ‚鎞“_‚܂Ō’‘S‚Ȃ̂ŗǂ¢‚Å‚·BƒXƒPƒWƒ…[ƒ‹ˆ³—Í‚ÍA‘—’B‰Â”\‚È‘¬“x‚æ‚è‚à‘¬‚­‘—’B‚·‚鈳—͂ł ‚èA–³‘ʂł ‚èA•sŒ’‘S‚Å‚ ‚èA‚ ‚Ü‚è‚É‚àˆê”Ê“I‚Å‚ ‚éB -Schedule pressure exists for several reasons. The people who task programmers do not fully appreciate what a strong work ethic we have and how much fun it is to be a programmer. Perhaps because they project their own behaviour onto us, they believe that asking for it sooner will make us work harder to get it there sooner. This is probably actually true, but the effect is very small, and the damage is very great. Additionally, they have no visibility into what it really takes to produce software. Not being able to see it, and not be able to create it themselves, the only thing they can do is see time-to-market pressure and fuss at programmers about it. +ƒXƒPƒWƒ…[ƒ‹ˆ³—͂͂¢‚­‚‚©‚Ì——R‚Å‘¶Ý‚µ‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚𖱂߂él‚½‚¿‚ÍAŽ„‚½‚¿‚ªŽ‚Á‚Ä‚¢‚é‹­‚¢ŽdŽ–—Ï—‚ƃvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Æ‚ª‚Ç‚ê‚Ù‚ÇŠy‚µ‚¢‚©‚ð\•ª‚É—‰ð‚µ‚Ä‚¢‚Ü‚¹‚ñB‚¨‚»‚ç‚­A”Þ‚ç‚ÍŽ©•ª‚½‚¿‚Ìs“®‚ðŽ„‚½‚¿‚ɓЉe‚·‚é‚Ì‚ÅA‘‚­‚»‚ê‚ð‹‚߂邱‚Æ‚ÍAŽ„‚½‚¿‚ª‚æ‚è‘‚­‚»‚±‚É“ž’B‚·‚邿‚¤‚É‚à‚Á‚Æ“­‚­‚悤‚É‚È‚é‚ÆM‚¶‚Ä‚¢‚Ü‚·B‚±‚ê‚Í‚¨‚»‚ç‚­ŽÀۂɂ͓–‚Ă͂܂è‚Ü‚·‚ªAŒø‰Ê‚Í”ñí‚ɬ‚³‚­A‘¹‚Í”ñí‚ɑ傫‚¢‚Å‚·B‚³‚ç‚ÉA”Þ‚ç‚ÍŽÀۂɃ\ƒtƒgƒEƒFƒA‚ðì‚邽‚߂ɕK—v‚È‚à‚̂ɂ‚¢‚Ă͌©‚¦‚Ü‚¹‚ñB‚»‚ê‚ðŒ©‚é‚±‚Æ‚ª‚Å‚«‚¸A‚»‚ꎩ‘Ì‚ð쬂·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚¢‚¤‚±‚Æ‚ÍA”ނ炪‚Å‚«‚é—Bˆê‚Ì‚±‚Æ‚ÍAŽs꓊“ü‚܂ł̎žŠÔ‚̈³”—‚Æ‚»‚ê‚ÉŠÖ‚·‚éƒvƒƒOƒ‰ƒ}[‚Ì‘›‚¬‚Å‚ ‚éB -The key to fighting schedule pressure is simply to turn it into time-to-market pressure. The way to do this to give visibility into the relationship between the available labour and the product. Producing an honest, detailed, and most of all, understandable estimate of all the labour involved is the best way to do this. It has the added advantage of allowing good management decisions to be made about possible functionality trade-offs. +ƒXƒPƒWƒ…[ƒ‹‚̈³—Í‚Æí‚¤‚½‚߂̌®‚ÍA‚»‚ê‚ðƒ^ƒCƒ€EƒgƒDEƒ}[ƒPƒbƒg‚̈³—͂ɕς¦‚邱‚Ƃł·B—˜—p‰Â”\‚ȘJ“­‚Æ»•i‚Ƃ̊֌W‚ð‰ÂŽ‹‰»‚·‚邽‚߂̕û–@B³’¼‚ÅAÚׂÈA‚»‚µ‚ÄÅ‚àd—v‚È‚à‚Ì‚ðì‚èo‚·‚±‚Æ‚ÍA‚±‚ê‚ðs‚¤‚½‚ß‚ÌÅ‘P‚Ì•û–@‚Å‚·B‚±‚ê‚É‚ÍA‰Â”\«‚Ì‚ ‚é‹@”\‚̃gƒŒ[ƒhƒIƒt‚ɂ‚¢‚Ă̓K؂ȊǗã‚ÌŒˆ’è‚ð‰Â”\‚É‚·‚邯‚¢‚¤’ljÁ‚Ì—˜“_‚ª‚ ‚è‚Ü‚·B -The key insight that the estimate must make plain is that labour is an almost incompressible fluid. You can't pack more into a span of time anymore than you can pack more water into a container over and above that container's volume. In a sense, a programmer should never say ‘no’, but rather to say ‘What will you give up to get that thing you want?’ The effect of producing clear estimates will be to increase the respect for programmers. This is how other professionals behave. Programmers' hard work will be visible. Setting an unrealistic schedule will also be painfully obvious to everyone. Programmers cannot be hoodwinked. It is disrespectful and demoralizing to ask them to do something unrealistic. Extreme Programming amplifies this and builds a process around it; I hope that every reader will be lucky enough to use it. +Œ©Ï‚à‚肪–¾”’‚É‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢d—v‚È“´Ž@‚ÍA˜J“­‚͂قڔñˆ³k«‚̉t‘̂ł ‚邯‚¢‚¤‚±‚Ƃł·BƒRƒ“ƒeƒi‚Ì—eψÈã‚̃Rƒ“ƒeƒi‚É‚à‚Á‚Æ‘½‚­‚Ì…‚ð“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚éˆÓ–¡‚Å‚ÍAƒvƒƒOƒ‰ƒ}[‚Íuâ‘Îv‚ÆŒ¾‚Á‚Ă͂¢‚¯‚Ü‚¹‚ñ‚ªAu–XŽq‚Í‚ ‚È‚½‚ª–]‚Þ‚±‚Æ‚ð’ú‚ß‚é‚Å‚µ‚傤‚©Hv‚Æ‚¢‚¤–¾Šm‚ÈŒ©Ï‚à‚è‚ðo‚·‚Ì‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă̌hˆÓ‚ð‚‚߂邱‚ƂɂȂè‚Ü‚·B‚±‚ê‚Í‘¼‚Ìê–副‚Ìs“®‚Å‚·BƒvƒƒOƒ‰ƒ}[‚̘J—Í‚ªŒ©‚¦‚é‚Å‚µ‚傤B”ñŒ»ŽÀ“I‚ȃXƒPƒWƒ…[ƒ‹‚ðÝ’è‚·‚邱‚Æ‚ÍA’N‚ɂƂÁ‚Ä‚à’ÉŠ´‚·‚邱‚Ƃł·BƒvƒƒOƒ‰ƒ}‚Í‚¤‚ñ‚´‚è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB”Þ‚ç‚É”ñŒ»ŽÀ“I‚È‚±‚Æ‚ð‚·‚é‚͖̂³—ç‚È‚±‚Ƃł·B Extreme Programming‚Í‚±‚ê‚ð‘•‚µA‚»‚ÌŽü‚è‚ɃvƒƒZƒX‚ð\’z‚µ‚Ü‚·BŽ„‚ÍA‚·‚ׂĂ̓ǎ҂ª‚»‚ê‚ðŽg—p‚·‚é‚Ì‚É\•ª‚ȂقÇK‰^‚ɂȂ邱‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B Next [How to Understand the User](02-How to Understand the User.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 2d637ee..8829b11 100644 --- a/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,17 +1,17 @@ # How to Understand the User [//]: # (Version:1.0.0) -It is your duty to understand the user, and to help your boss understand the user. Because the user is not as intimately involved in the creation of your product as you are, they behave a little differently: +ƒ†[ƒU[‚ð—‰ð‚µAãŽi‚Ƀ†[ƒU[‚ð—‰ð‚³‚¹‚é‚̂͂ ‚È‚½‚Ì‹`–±‚Å‚·Bƒ†[ƒU[‚ÍŽ©•ª‚Ì»•i‚Ì쬂ɖ§Ú‚ÉŠÖ‚í‚Á‚Ä‚¢‚È‚¢‚½‚ßA­‚µˆá‚Á‚½“®ì‚ð‚µ‚Ü‚·B -- The user generally makes short pronouncements. -- The user has their own job; they will mainly think of small improvements in your product, not big improvements. -- The user can't have a vision that represents the complete body of your product users. +- ƒ†[ƒU[‚ÍAˆê”Ê“I‚É’Z‚¢”­Œ¾‚ð‚µ‚Ü‚·B +- ƒ†[ƒU[‚ÍŽ©•ª‚ÌŽdŽ–‚ðŽ‚Á‚Ä‚¢‚Ü‚·B”Þ‚ç‚ÍŽå‚ÉA‘å‚«‚ȉü‘P‚ł͂Ȃ­A‚ ‚È‚½‚Ì»•i‚̬‚³‚ȉü‘P‚ðl‚¦‚é‚Å‚µ‚傤B +- ƒ†[ƒU[‚ÍA»•iƒ†[ƒU[‚Ì‘Sg‚ð•\‚·ƒrƒWƒ‡ƒ“‚ðŽ‚Â‚±‚Ƃ͂ł«‚Ü‚¹‚ñB -It is your duty to give them what they really want, not what they say they want. It is however, better to propose it to them and get them to agree that your proposal is what they really want before you begin, but they may not have the vision to do this. Your confidence in your own ideas about this should vary. You must guard against both arrogance and false modesty in terms of knowing what the customer really wants. Programmers are trained to design and create. Market researchers are trained to figure out what people want. These two kinds of people, or two modes of thought in the same person, working harmoniously together give the best chance of formulating the correct vision. +”ނ炪–{“–‚É—~‚µ‚¢‚à‚Ì‚ð—^‚¦‚é‚̂͂ ‚È‚½‚Ì‹`–±‚Å‚ ‚èA”ނ炪–]‚Þ‚ÆŒ¾‚Á‚Ä‚¢‚é‚à‚̂ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µA‚»‚ê‚ð”Þ‚ç‚É’ñˆÄ‚µA‚ ‚È‚½‚Ì’ñˆÄ‚ª‚ ‚È‚½‚ªŽn‚ß‚é‘O‚É–{“–‚É–]‚Þ‚à‚̂ł ‚邱‚Ƃɓ¯ˆÓ‚³‚¹‚é‚Ì‚ª—Ç‚¢‚Å‚·‚ªA‚»‚¤‚·‚éƒrƒWƒ‡ƒ“‚͂Ȃ¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚±‚ê‚ÉŠÖ‚·‚é‚ ‚È‚½Ž©g‚̃AƒCƒfƒA‚ɑ΂·‚é‚ ‚È‚½‚ÌM—Š‚Í•Ï‚í‚é‚Í‚¸‚Å‚·BŒÚ‹q‚ª–{“–‚É–]‚ñ‚Å‚¢‚邱‚Æ‚ð’m‚邯‚¢‚¤ŠÏ“_‚©‚ç‚ÍA˜ü–‚³‚ÆŒë‚Á‚½Œª‹•‚³‚Ì—¼•û‚ðŽç‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ÍÝŒv‚Æì¬‚ðŒP—û‚µ‚Ä‚¢‚Ü‚·BŽsê‚ÌŒ¤‹†ŽÒ‚ÍAlX‚ª–]‚Þ‚à‚Ì‚ð—‰ð‚·‚邿‚¤‚ÉŒP—û‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚Ì2‚‚̎í—Þ‚ÌlA‚Ü‚½‚Í“¯‚¶l‚Ì2‚‚Ìl‚¦•û‚ª’²˜a‚µ‚Ĉê‚É“­‚¢‚ÄA³‚µ‚¢ƒrƒWƒ‡ƒ“‚ðô’è‚·‚éŗǂ̋@‰ï‚ð—^‚¦‚Ü‚·B -The more time you spend with users the better you will be able to understand what will really be successful. You should try to test your ideas against them as much as you can. You should eat and drink with them if you can. +ƒ†[ƒU[‚ƈê‚ɉ߂²‚·ŽžŠÔ‚ª’·‚­‚È‚ê‚΂Ȃé‚Ù‚ÇAŽÀۂɉ½‚ª¬Œ÷‚·‚é‚©‚ð—‰ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚·B‚Å‚«‚邾‚¯‚»‚ê‚ç‚ɑ΂µ‚Ä‚ ‚È‚½‚̃AƒCƒfƒA‚ðŽŽ‚»‚¤‚Æ‚·‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚ª‚Å‚«‚é‚È‚çH‚ׂĈù‚ނׂ«‚Å‚·B -Guy Kawasaki [Rules] has emphasized the importance of *watching* what your users do in addition to listening to them. +Guy Kawasaki [Rules]‚ÍAƒ†[ƒU[‚ª•·‚­‚±‚ƂɉÁ‚¦‚ÄAƒ†[ƒU[‚Ìs“®‚ðŠÄŽ‹‚·‚邱‚Æ‚Ìd—v«‚ð‹­’²‚µ‚Ä‚¢‚Ü‚·B -I believe contractors and consultants often have tremendous problems getting their clients to clarify in their own minds what they really want. If you intend to be a consultant, I suggest you choose your clients based on their clear-headedness as well as their pocketbooks. +Ž„‚Í¿•‰‹ÆŽÒ‚âƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ªA‚µ‚΂µ‚Δނ炪–{“–‚É–]‚Þ‚à‚Ì‚ðŽ©‚ç‚ÌS‚Ì’†‚Å–¾Šm‚É‚·‚邿‚¤‚Ɍڋq‚É‘i‚¦‚é‘å‚«‚È–â‘è‚ð•ø‚¦‚Ä‚¢‚邯M‚¶‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ªƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ɂȂ낤‚ÆŽv‚Á‚Ä‚¢‚é‚È‚çAŽ„‚Í‚ ‚È‚½‚̃Nƒ‰ƒCƒAƒ“ƒg‚ðA”Þ‚ç‚Ì–¾Šm‚È“ª‚Ì’†‚¾‚¯‚łȂ­A”Þ‚ç‚ÌŽè’ ‚ÉŠî‚¢‚Ä‘I‚Ô‚±‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B Next [How to Get a Promotion](03-How to Get a Promotion.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 72fa4eb..06701d8 100644 --- a/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -1,13 +1,13 @@ # How to Get a Promotion [//]: # (Version:1.0.0) -To be promoted to a role, act out that role first. +–ðŠ„‚É¸i‚³‚¹‚é‚É‚ÍA‚Ü‚¸‚»‚Ì–ðŠ„‚ðŽÀs‚µ‚Ü‚·B -To get promoted to a title, find out what is expected of that title and do that. +ƒ^ƒCƒgƒ‹‚ɸŠi‚³‚¹‚é‚É‚ÍA‚»‚̃^ƒCƒgƒ‹‚ɉ½‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚©‚ðŒ©‚Â‚¯o‚µ‚Ä‚­‚¾‚³‚¢B -To get a pay raise, negotiate armed with information. +’Àã‚°‚𓾂é‚É‚ÍAî•ñ‚Å•‘•‚µ‚ÄŒð‚·‚éB -If you feel like you are past due for a promotion, talk to your boss about it. Ask them explicitly what you need to do to get promoted, and try to do it. This sounds trite, but often times your perception of what you need to do will differ considerably from your boss's. Also this will pin your boss down in some ways. +‚ ‚È‚½‚ªƒvƒƒ‚[ƒVƒ‡ƒ“‚ÌŠúŒÀ‚ª‰ß‚¬‚Ä‚¢‚邿‚¤‚ÉŠ´‚¶‚½‚çA‚ ‚È‚½‚ÌãŽi‚ɘb‚µ‚Ä‚­‚¾‚³‚¢B¸i‚³‚¹‚邽‚߂ɉ½‚ð‚·‚é•K—v‚ª‚ ‚é‚Ì‚©??‚𖾎¦“I‚Éq‚Ë‚ÄA‚»‚ê‚ð‚â‚낤‚Æ‚µ‚Ü‚·B‚±‚ê‚Í”nŽ­‚°‚Ä‚¢‚Ü‚·‚ªA‚µ‚΂µ‚΂ ‚È‚½‚ª‚·‚é•K—v‚ª‚ ‚邱‚Ƃɑ΂·‚é‚ ‚È‚½‚Ì”Fޝ‚ÍA‚ ‚È‚½‚ÌãŽi‚Ƃ͂©‚È‚èˆÙ‚È‚é‚Å‚µ‚傤B‚Ü‚½A‚±‚ê‚Í‚¢‚­‚‚©‚Ì“_‚Å‚ ‚È‚½‚ÌãŽi‚ðƒsƒ“Ž~‚ß‚µ‚Ü‚·B -Most programmers probably have an exaggerated sense of their relative abilities in some ways---after all, we can't all be in the top 10%! However, I have seen some people who were seriously unappreciated. One cannot expect everyone's evaluation to perfectly match reality at all times, but I think people are generally moderately fair, with one caveat: you cannot be appreciated without visibility into your work. Sometimes, due to happenstance or personal habits, someone will not be noticed much. Working from home a lot or being geographically separated from your team and boss makes this especially difficult. +‚Ù‚Æ‚ñ‚ǂ̃vƒƒOƒ‰ƒ}‚ÍA‚¨‚»‚ç‚­‰½‚ç‚©‚ÌŒ`‚Å‘Š‘Î“I‚È”\—͂̌֒£‚³‚ê‚½Š´Šo‚ðŽ‚Á‚Ä‚¢‚é‚Å‚µ‚傤BŒ‹‹Ç‚̂Ƃ±‚ëA‚·‚ׂĂªƒgƒbƒv10“‚É“ü‚é‚킯‚ł͂ ‚è‚Ü‚¹‚ñI‚µ‚©‚µAŽ„‚Í^Œ•‚É•]‰¿‚³‚ê‚Ä‚¢‚È‚¢lX‚ðŒ©‚Ä‚«‚Ü‚µ‚½B‚Ý‚ñ‚Ȃ̕]‰¿‚ªí‚ÉŒ»ŽÀ‚ÉŠ®‘S‚Ƀ}ƒbƒ`‚·‚邯‚ÍŽv‚Á‚Ä‚¢‚Ü‚¹‚ñ‚ªAŽ„‚ÍlX‚ªŠT‚µ‚Ä“K“x‚ÉŒö³‚Å‚ ‚邯l‚¦‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ÌŽdŽ–‚É–Ú‚ðŒü‚¯‚邱‚ƂȂ­•]‰¿‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚Æ‚«‚É‚ÍA‹ô‘R‚âŒÂl“I‚ÈKе‚Ì‚½‚ß‚ÉA’N‚©‚É‹C•t‚©‚ê‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·BŽ©‘î‚©‚瑽‚­‚ÌŽdŽ–‚ð‚µ‚½‚èAƒ`[ƒ€‚âãŽi‚©‚ç’n—“I‚É—£‚ê‚Ä‚¢‚邯A‚±‚ê‚Í“Á‚É¢“ï‚ɂȂè‚Ü‚·B Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How to Develop Talent.md) diff --git a/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index e853798..083bda7 100644 --- a/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -1,23 +1,23 @@ # How to Develop Talent -Nietschze exaggerated when he said [Stronger]: +Nietschze‚͔ނª[Stronger]‚ÆŒ¾‚Á‚½‚Æ‚«‚Ɍ֒£‚µ‚½F -> What does not destroy me, makes me stronger. +>Ž„‚ð”j‰ó‚µ‚È‚¢‚à‚Ì‚ÍAŽ„‚ð‚æ‚è‹­‚­‚µ‚Ü‚·B -Your greatest responsibility is to your team. You should know each of them well. You should stretch your team, but not overburden them. You should usually talk to them about the way they are being stretched. If they buy in to it, they will be well motivated. On each project, or every other project, try to stretch them in both a way that they suggest and a way that you think will be good for them. Stretch them not by giving them more work, but by giving them a new skill or better yet a new role to play on the team. +‚ ‚È‚½‚ÌÅ‘å‚ÌÓ”C‚Í‚ ‚È‚½‚̃`[ƒ€‚Å‚·B‚ ‚È‚½‚Í‚»‚ꂼ‚ê‚Ì‚±‚Æ‚ð‚æ‚­’m‚Á‚Ä‚¢‚é‚Í‚¸‚Å‚·B‚ ‚È‚½‚Í‚ ‚È‚½‚̃`[ƒ€‚ðˆø‚«L‚΂·‚ׂ«‚Å‚·‚ªA”Þ‚ç‚É•‰’S‚ð‚©‚¯‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚Í’ÊíA”ނ炪L‚тĂ¢‚é•û–@‚ɂ‚¢‚Ęb‚·‚ׂ«‚Å‚·B”ނ炪‚»‚ê‚𔃎û‚·‚ê‚ÎA”Þ‚ç‚Í‚¤‚Ü‚­“®‹@‚¯‚ç‚ê‚Ü‚·BŠeƒvƒƒWƒFƒNƒgA‚Ü‚½‚Í‘¼‚Ì‚·‚ׂẴvƒƒWƒFƒNƒg‚ÅA’ñˆÄ‚·‚é•û–@‚Æ‚»‚ê‚É“K‚µ‚½•û–@‚ŃXƒgƒŒƒbƒ`‚ðs‚¢‚Ü‚·B‚æ‚葽‚­‚ÌŽdŽ–‚ð—^‚¦‚邱‚Ƃł͂Ȃ­A”Þ‚ç‚ÉV‚µ‚¢ƒXƒLƒ‹‚ð—^‚¦‚½‚èAƒ`[ƒ€‚ÅV‚µ‚¢–ðŠ„‚ð‰Ê‚½‚µ‚½‚è‚·‚邱‚Ƃɂæ‚Á‚ÄA”Þ‚ç‚ðL‚΂·B -You should allow people (including yourself) to fail occasionally and should plan for some failure in your schedule. If there is never any failure, there can be no sense of adventure. If there are not occasional failures, you are not trying hard enough. When someone fails, you should be as gentle as you can with them while not treating them as though they had succeeded. +‚ ‚È‚½Ž©gi‚ ‚È‚½Ž©g‚ðŠÜ‚Þj‚ªŽžXޏ”s‚·‚邿‚¤‚É‚µ‚ÄA‚ ‚È‚½‚̃XƒPƒWƒ…[ƒ‹‚ʼn½‚ç‚©‚ÌŽ¸”s‚ðŒv‰æ‚·‚é‚ׂ«‚Å‚·BŒˆ‚µ‚ÄŽ¸”s‚ª‚È‚¯‚ê‚ÎA–`Œ¯Š´‚Í‚ ‚è‚Ü‚¹‚ñBŽžXޏ”s‚·‚邱‚Æ‚ª‚È‚¯‚ê‚ÎA‚ ‚È‚½‚Í\•ª‚ÉŠæ’£‚Á‚Ä‚¢‚é‚킯‚ł͂ ‚è‚Ü‚¹‚ñB’N‚©‚ªŽ¸”s‚·‚邯A¬Œ÷‚µ‚½‚©‚̂悤‚Ɉµ‚킸‚ÉA‚Å‚«‚邾‚¯‰¸‚â‚©‚É‚·‚é‚ׂ«‚Å‚·B -Try to get each team member to buy in and be well motivated. Ask each of them explicitly what they need to be well-motivated if they are not. You may have to leave them dissatisfied, but you should know what everybody desires. +Šeƒ`[ƒ€‚̃ƒ“ƒo[‚ªw“ü‚µA“®‹@•t‚¯‚³‚ê‚Ä‚¢‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚»‚¤‚łȂ¢ê‡‚ÍA”ނ炪‚¤‚Ü‚­“®‹@‚¯‚ç‚ê‚Ä‚¢‚é•K—v‚ª‚ ‚邱‚Ƃ𖾊m‚É‚»‚ꂼ‚ꎿ–₵‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚Í‚»‚ê‚ð•s–ž‚̂܂܂ɂµ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚Ý‚ñ‚È‚ª–]‚Þ‚à‚Ì‚ð’m‚Á‚Ä‚¨‚­‚ׂ«‚Å‚·B -You can't give up on someone who is intentionally not carrying their share of the load because of low morale or dissatisfaction and just let them be slack. You must try to get them well-motivated and productive. As long as you have the patience, keep this up. When your patience is exhausted, fire them. You cannot allow someone who is intentionally working below their level to remain on the team, since it is not fair to the team. +’á‚¢Žm‹C‚â•s–ž‚Ì‚½‚߂ɕ‰‰×‚𕪒S‚µ‚Ä‚¢‚È‚¢l‚ð‚ ‚«‚ç‚߂邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ç‚ð‚¤‚Ü‚­“®‹@‚¯‚ĶŽY“I‚É‚·‚邿‚¤‚É“w‚߂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚ª”E‘Ï—Í‚ðŽ‚Á‚Ä‚¢‚éŒÀ‚èA‚±‚ê‚ðˆÛŽ‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚Ì”E‘Ï‚ª”æ‚ꂽ‚çA‚»‚ê‚ç‚ðŒ‚‚Á‚Ä‚­‚¾‚³‚¢BˆÓ}“I‚ɃŒƒxƒ‹‚ð‰º‰ñ‚Á‚Äì‹Æ‚µ‚Ä‚¢‚él‚ÍAƒ`[ƒ€‚ɂƂÁ‚ÄŒö•½‚ł͂Ȃ¢‚½‚ßAƒ`[ƒ€‚ÉŽc‚葱‚¯‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -Make it clear to the strong members of your team that you think they are strong by saying so in public. Praise should be public and criticism private. +‚ ‚È‚½‚̃`[ƒ€‚Ì‹­ŒÅ‚ȃƒ“ƒo[‚ÉA”Þ‚ç‚ð‹­‚­M‚¶‚Ä‚¢‚邱‚Æ‚ðAŒö‚ɘb‚·‚±‚ƂŖ¾Šm‚É‚µ‚Ü‚·BŽ^”ü‚ÍŒö‘R‚Ɣᔻƒvƒ‰ƒCƒx[ƒg‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -The strong members of the team will naturally have more difficult tasks than the weak members of the team. This is perfectly natural and nobody will be bothered by it as long as everyone works hard. +ƒ`[ƒ€‚Ì‹­‚¢ƒƒ“ƒo[‚ÍA“–‘RAƒ`[ƒ€‚ÌŽã‚¢ƒƒ“ƒo[‚æ‚è‚à“‚¢ŽdŽ–‚ð‚·‚é‚Å‚µ‚傤B‚±‚ê‚ÍŠ®‘S‚ÉŽ©‘R‚È‚±‚Ƃł ‚èA’N‚à‚ªˆê¶Œœ–½“­‚­ŒÀ‚èA’N‚à‚»‚ê‚É‚æ‚Á‚Ďז‚‚³‚ê‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñB -It is an odd fact that is not reflected in salaries that a good programmer is more productive than 10 bad programmers. This creates a strange situation. It will often be true that you could move faster if your weak programmers would just get out of the way. If you did this you would in fact make more progress in the short term. However, your tribe would lose some important benefits, namely the training of the weaker members, the spreading of tribal knowledge, and the ability to recover from the loss of the strong members. The strong must be gentle in this regard and consider the issue from all angles. +—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ª10l‚̈«‚¢ƒvƒƒOƒ‰ƒ}‚æ‚è‚à¶ŽY«‚ª‚‚¢‚Ì‚ÍA‹‹—¿‚É”½‰f‚³‚ê‚È‚¢‚Æ‚¢‚¤Šï–­‚ÈŽ–ŽÀ‚Å‚·B‚±‚ê‚ÍŠï–­‚È󋵂ðì‚èo‚µ‚Ü‚·B‚ ‚È‚½‚ÌŽã‚¢ƒvƒƒOƒ‰ƒ}‚ª‚¿‚å‚Á‚Ǝז‚‚ɂȂéꇂÍA‚ ‚È‚½‚ª‚æ‚葬‚­“®‚­‚±‚Æ‚ª‚Å‚«‚邱‚Ƃ͂µ‚΂µ‚Î^ŽÀ‚Å‚·B‚ ‚È‚½‚ª‚±‚ê‚ð‚µ‚½ê‡A‚ ‚È‚½‚ÍŽÀÛ‚É’ZŠúŠÔ‚Å‚à‚Á‚Æi•à‚ð‹‚°‚é‚Å‚µ‚傤B‚µ‚©‚µA‚ ‚È‚½‚Ì•”‘°‚ÍAŽã‚¢ƒƒ“ƒo[‚ÌŒP—ûA•”‘°‚Ì’mޝ‚Ì•‹yA‚»‚µ‚Ä‹­—͂ȃƒ“ƒo[‚Ì‘rޏ‚©‚ç‰ñ•œ‚·‚é”\—͂Ƃ¢‚¤A‚¢‚­‚‚©‚Ìd—v‚È—˜“_‚ðŽ¸‚¢‚Ü‚·B‚±‚Ì“_‚Å‹­‚­‚È‚¯‚ê‚΂Ȃ炸A–â‘è‚Í‚ ‚ç‚ä‚éŠp“x‚©‚çl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -You can often give the stronger team members challenging, but carefully delineated, tasks. +‚ ‚È‚½‚Í‚µ‚΂µ‚ÎA‚æ‚è‹­‚¢ƒ`[ƒ€ƒƒ“ƒo[‚É’§í“I‚Å‚·‚ªA’ˆÓ[‚­•`‚©‚ꂽƒ^ƒXƒN‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B Next [How to Choose What to Work On](02-How to Choose What to Work On.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index c13705c..89cbc40 100644 --- a/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -1,5 +1,5 @@ # How to Choose What to Work On -You balance your personal needs against the needs of the team in choosing what aspect of a project to work on. You should do what you are best at, but try to find a way to stretch yourself not by taking on more work but by exercising a new skill. Leadership and communication skills are more important than technical skills. If you are very strong, take on the hardest or riskiest task, and do it as early as possible in the project to decrease risk. +Ž©•ª‚̃j[ƒY‚ƃ`[ƒ€‚̃j[ƒY‚Ƃ̃oƒ‰ƒ“ƒX‚ðŽæ‚Á‚ÄA‚ǂ̂悤‚È‘¤–ʂ̃vƒƒWƒFƒNƒg‚ðì‹Æ‚·‚é‚©‚ð‘I‘ð‚µ‚Ü‚·B ‚ ‚È‚½‚ÍŽ©•ª‚ªˆê”ÔD‚«‚È‚±‚Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ‚ªA‚æ‚葽‚­‚ÌŽdŽ–‚ð‚·‚é‚̂ł͂Ȃ­AV‚µ‚¢ƒXƒLƒ‹‚ðsŽg‚µ‚ÄŽ©•ªŽ©g‚ðL‚΂·•û–@‚ðŒ©‚Â‚¯‚悤‚Æ‚µ‚Ü‚·B ƒŠ[ƒ_[ƒVƒbƒv‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“ƒXƒLƒ‹‚Í‹ZpƒXƒLƒ‹‚æ‚è‚àd—v‚Å‚·B ‚ ‚È‚½‚ª”ñí‚É‹­‚¯‚ê‚ÎAƒvƒƒWƒFƒNƒg‚Å‚ÍAƒŠƒXƒN‚ðŒ¸‚ç‚·‚½‚ß‚ÉA‚Å‚«‚邾‚¯‘‚­Ał࢓ï‚ÈA‚Ü‚½‚ÍƒŠƒXƒN‚Ì‚‚¢ƒ^ƒXƒN‚ðŽÀs‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Get the Most From Your Team-mates](03-How to Get the Most From Your Teammates.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index 1b046db..a4cd4a0 100644 --- a/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -1,15 +1,15 @@ # How to Get the Most From Your Team-mates -To get the most from your team-mates, develop a good team spirit and try to keep every individual both personally challenged and personally engaged. +ƒ`[ƒ€ƒƒCƒg‚ðÅ‘åŒÀ‚ÉŠˆ—p‚·‚é‚É‚ÍAƒ`[ƒ€‚̸_‚ð–‚«A‚·‚ׂĂÌl‚ªŒÂl“I‚É’§í‚µAŒÂl“I‚ÉŠÖ‚í‚葱‚¯‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B -To develop team spirit, corny stuff like logoized clothing and parties are good, but not as good as personal respect. If everyone respects everyone else, nobody will want to let anybody down. Team spirit is created when people make sacrifices for the team and think in terms of the good of the team before their own personal good. As a leader, you can't ask for more than you give yourself in this respect. +ƒ`[ƒ€‚̸_‚ð”­’B‚³‚¹‚邽‚ß‚ÉAƒƒS“ü‚è‚̈ߕž‚âƒp[ƒeƒB[‚̂悤‚È–ï‰î‚È‚à‚̂͗ǂ¢‚à‚Ì‚ÌAŒÂl“I‚È‘¸Œh‚Æ“¯‚¶‚­‚ç‚¢—Ç‚¢‚à‚̂ł͂ ‚è‚Ü‚¹‚ñB’N‚à‚ª‘¼‚Ìl‚ð‘¸d‚µ‚Ä‚¢‚é‚È‚çA’N‚à’N‚à—Ž’_‚³‚¹‚½‚­‚È‚¢‚Å‚µ‚傤Bƒ`[ƒ€‚̸_‚ÍAlX‚ªƒ`[ƒ€‚Ì‚½‚߂ɋ]µ‚𕥂Á‚ÄAŽ©•ª‚ÌŒÂl“I‚È—˜‰v‚Ì‘O‚Ƀ`[ƒ€‚Ì—Ç‚µˆ«‚µ‚ÌŠÏ“_‚©‚çl‚¦‚邯‚«‚Éì‚ç‚ê‚Ü‚·BŽw“±ŽÒ‚Æ‚µ‚ÄA‚ ‚È‚½‚Í‚±‚Ì“_‚ÅŽ©•ª‚æ‚è‚à‘½‚­‚ð‹‚߂邱‚Ƃ͂ł«‚Ü‚¹‚ñB -One of the keys to team leadership is to facilitate consensus so that everyone has buy in. This occasionally means allowing your team-mates to be wrong. That is, if it does not harm the project too much, you must let some of your team do things their own way, based on consensus, even if you believe with great confidence it is the wrong thing to do. When this happens, don't agree, simply disagree openly and accept the consensus. Don't sound hurt, or like you're being forced into it, simply state that you disagree but think the consensus of the team is more important. This will often cause them to backtrack. Don't insist that they go through with their initial plan if they do backtrack. +ƒ`[ƒ€ƒŠ[ƒ_[ƒVƒbƒv‚ÌŒ®‚Ì1‚‚ÍA‘Sˆõ‚ªƒoƒCƒCƒ“ƒO‚Å‚«‚邿‚¤‚ɃRƒ“ƒZƒ“ƒTƒX‚ð‘£i‚·‚邱‚Ƃł·B‚±‚ê‚ÍAƒ`[ƒ€ƒƒCƒg‚ªŠÔˆá‚Á‚Ä‚¢‚邱‚Æ‚ðŽžXˆÓ–¡‚µ‚Ü‚·B‚‚܂èA‚»‚ꂪƒvƒƒWƒFƒNƒg‚ð‚ ‚Ü‚è‚É‚àŠQ‚·‚邱‚Æ‚ª‚È‚¯‚ê‚ÎAƒRƒ“ƒZƒ“ƒTƒX‚ÉŠî‚¢‚ÄŽ©•ª‚̃`[ƒ€‚̉½l‚©‚ª“ÆŽ©‚Ì‚â‚è•û‚ð‚·‚é‚æ‚¤‚É‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚ꂪ‹N‚±‚Á‚½‚çA“¯ˆÓ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B’P‚ÉŒö‘R‚Æ”½‘΂µA‡ˆÓ‚É“¯ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B‚‚¢‚½‚èA‹­§‚³‚ê‚Ä‚¢‚邿‚¤‚É•·‚±‚¦‚½‚肵‚Ă͂¢‚¯‚Ü‚¹‚ñB‚ ‚È‚½‚ªˆÓŒ©‚É“¯ˆÓ‚µ‚Ä‚¢‚È‚¢‚ÆŒ¾‚¢‚Ü‚·‚ªAƒ`[ƒ€‚̃Rƒ“ƒZƒ“ƒTƒX‚ªd—v‚¾‚Æl‚¦‚Ä‚­‚¾‚³‚¢B‚±‚ê‚Í‚µ‚΂µ‚Δނç‚É‹t–߂肳‚¹‚Ü‚·B”ނ炪‹t–߂肵‚½ê‡A”ނ炪ʼn‚ÌŒv‰æ‚ð’ʉ߂·‚邯Žå’£‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B -If there is an individual who will not consent after you have discussed the issues from all appropriate sides, simply assert that you have to make a decision and that is what your decision is. If there is a way to judge if your decision will be wrong or if it is later shown to be wrong, switch as quickly as you can and recognize the persons who were right. +“K؂ȑ¤‚©‚ç–â‘è‚ð‹c˜_‚µ‚½Œã‚É“¯ˆÓ‚µ‚È‚¢ŒÂl‚ª‚¢‚éꇂÍA’P‚ÉŒˆ’è‚ð‰º‚·•K—v‚ª‚ ‚邯Žå’£‚µA‚»‚ꂪ‚ ‚È‚½‚ÌŒˆ’è‚Å‚ ‚邯Žå’£‚µ‚Ü‚·B‚ ‚È‚½‚ÌŒˆ’肪ŠÔˆá‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ð”»’f‚·‚é•û–@‚ª‚ ‚éê‡A‚Ü‚½‚Í‚»‚ꂪŠÔˆá‚Á‚Ä‚¢‚邱‚Æ‚ªŒã‚ÅŽ¦‚³‚ꂽꇂÍA‚Å‚«‚邾‚¯‘‚­Ø‚è‘Ö‚¦‚ÄA³‚µ‚¢l•¨‚ð”Fޝ‚µ‚Ä‚­‚¾‚³‚¢B -Ask your team, both as a group and individually, what they think would create team spirit and make for an effective team. +‚ ‚È‚½‚̃`[ƒ€‚É‚ÍAƒOƒ‹[ƒv‚Æ‚µ‚Ä‚àŒÂ•ʂɂàAƒ`[ƒ€ƒXƒsƒŠƒbƒg‚ð¶‚Ýo‚µAŒø‰Ê“I‚ȃ`[ƒ€‚ðì‚邽‚ß‚Él‚¦‚Ä‚¢‚邱‚Æ‚ðq‚˂Ă­‚¾‚³‚¢B -Praise frequently rather than lavishly. Especially praise those who disagree with you when they are praiseworthy. Praise in public and criticize in private; with one exception: sometimes growth or the correction of a fault can't be praised without drawing embarrassing attention to the original fault, so that growth should be praised in private. +æÒ‘ò‚ł͂Ȃ­•p”É‚ÉÜŽ^‚µ‚Ä‚­‚¾‚³‚¢B“Á‚É‚ ‚È‚½‚ªÜŽ^‚³‚ê‚鎞‚É‚ ‚È‚½‚É“¯ˆÓ‚µ‚È‚¢l‚ðÜŽ^‚µ‚Ü‚·BŒö‚ÉŽ^”ü‚µAŽ„“I‚ɔᔻ‚·‚éB 1‚‚̗áŠO‚𜂢‚ÄFŽž‚ɂͬ’·‚⎸”s‚Ì¥³‚ÍŒ³‚ÌŒ‡Š×‚É’p‚¸‚©‚µ‚¢’ˆÓ‚ðˆø‚­‚±‚ƂȂ­ÜŽ^‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Ì‚ÅA¬’·‚̓vƒ‰ƒCƒx[ƒg‚ÅÜŽ^‚³‚ê‚é‚ׂ«‚Å‚·B Next [How to Divide Problems Up](04-How to Divide Problems Up.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index 4ee4d14..ad263fc 100644 --- a/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -1,9 +1,9 @@ # How to Divide Problems Up -It's fun to take a software project and divide it up into tasks that will be performed by individuals. This should be done early. Sometimes managers like to think that an estimate can be made without consideration of the individuals that will perform the work. This is impossible since the productivity of individuals varies so widely. Who has particular knowledge about a component also constantly changes and can have an order of magnitude effect on performance. +ƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ð—˜—p‚µ‚ÄAŒÂl‚É‚æ‚Á‚ÄŽÀs‚³‚ê‚éƒ^ƒXƒN‚É•ªŠ„‚·‚é‚̂͊y‚µ‚¢‚±‚Ƃł·B‚±‚ê‚Í‘Šú‚És‚¤•K—v‚ª‚ ‚è‚Ü‚·BŽž‚É‚ÍAƒ}ƒl[ƒWƒƒ[‚ÍAì‹Æ‚ðŽÀs‚·‚éŒÂl‚ðl—¶‚¹‚¸‚ÉŒ©Ï‚à‚è‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚邯l‚¦‚Ä‚¢‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ÍŒÂl‚̶ŽY«‚ª”ñí‚ɈقȂ邽‚ß•s‰Â”\‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg‚ɂ‚¢‚Ă̓Á’è‚Ì’mޝ‚ðŽ‚Á‚Ä‚¢‚él‚ÍAí‚ɕω»‚µAƒpƒtƒH[ƒ}ƒ“ƒX‚ɑ傫‚ȉe‹¿‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -Just as a composer considers the timbre of the instrument that will play a part or the coach of an athletic team considers the strengths of each player, the experienced team leader will not usually be able to separate the division of the project into tasks from the team members to which they will be assigned. This is part of the reason that a high-performing team should not be broken up. +ì‹È‰Æ‚ÍA‰‰‘t‚·‚éŠyŠí‚̉¹F‚â‰^“®‘IŽè‚̃R[ƒ`‚ªŠe‘IŽè‚Ì‹­‚Ý‚ðl—¶‚µ‚Ä‚¢‚邿‚¤‚ÉAŒoŒ±–L•x‚ȃ`[ƒ€ƒŠ[ƒ_[‚ÍA’ÊíAƒvƒƒWƒFƒNƒg‚Ì•”–å‚ðƒ`[ƒ€‚©‚ç‚ÌŽdŽ–‚É•ª‚¯‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ‚»‚ê‚ç‚ªŠ„‚è“–‚Ä‚ç‚ê‚郃“ƒo[B‚±‚ê‚ÍA‚«”\‚̃`[ƒ€‚ª•ö‰ó‚µ‚Ă͂Ȃç‚È‚¢——R‚̈ꕔ‚Å‚·B -There is a certain danger in this given that people will become bored as they build upon their strengths and never improve their weaknesses or learn new skills. However, specialization is a very useful productivity tool when not overused. +‚±‚ê‚ÍAlX‚ªŽ©•ª‚Ì‹­‚Ý‚ð\’z‚µAŽã“_‚ð‰ü‘P‚µ‚½‚èAV‚µ‚¢ƒXƒLƒ‹‚ðŠw‚ñ‚¾‚肵‚đދü‚·‚邿‚¤‚É‚È‚é‚Æ‚¢‚¤A‚ ‚é’ö“x‚̊댯‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µAê–å«‚ÍA‰ß“x‚ÉŽg—p‚³‚ê‚È‚¢ê‡‚ɂ͔ñí‚É—L—p‚ȶŽY«ƒc[ƒ‹‚Å‚·B Next [How to Handle Boring Tasks](05-How to Handle Boring Tasks.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index dfdb8b9..ff95610 100644 --- a/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -1,7 +1,7 @@ # How to Handle Boring Tasks -Sometimes it is not possible to avoid boring tasks that are critical to the success of the company or the project. These tasks can really hurt the morale of those that have to do them. The best technique for dealing with this is to invoke or promote Larry Wall's programmer's virtue of Laziness. Try to find some way to get the computer to do the task for you or to help your team-mates do this. Working for a week on a program to do a task that will take a week to do by hand has the great advantage of being more educational and sometimes more repeatable. +Žž‚É‚ÍA‰ïŽÐ‚âƒvƒƒWƒFƒNƒg‚̬Œ÷‚É•s‰ÂŒ‡‚ȑދü‚Èì‹Æ‚ð”ð‚¯‚é‚±‚Ƃ͂ł«‚Ü‚¹‚ñB ‚±‚ê‚ç‚̃^ƒXƒN‚ÍAŽÀÛ‚É‚»‚ê‚ç‚ðs‚¤•K—v‚ª‚ ‚él‚ÌŽm‹C‚𑹂Ȃ¤‰Â”\«‚ª‚ ‚è‚Ü‚·B ‚±‚ê‚ɑΈ‚·‚邽‚ß‚ÌÅ‘P‚Ì•û–@‚ÍALarry Wall‚̃vƒƒOƒ‰ƒ}‚̑ӑĂ̔ü“¿‚ðŒÄ‚Ño‚·‚©A‚Ü‚½‚Í‘£i‚·‚邱‚Ƃł·B ƒRƒ“ƒsƒ…[ƒ^‚É‚ ‚È‚½‚Ì‚½‚߂̃^ƒXƒN‚ðŽÀs‚³‚¹‚é‚©Aƒ`[ƒ€ƒƒCƒg‚ª‚±‚ê‚ðs‚¤‚Ì‚ðŽè•‚¯‚·‚邽‚߂̉½‚ç‚©‚Ì•û–@‚ðŒ©‚Â‚¯‚悤‚Æ‚µ‚Ü‚·B Žè‚Ås‚¤‚Ì‚É1TŠÔ‚©‚©‚Á‚Ä‚µ‚Ü‚¤ŽdŽ–‚ð‚·‚éƒvƒƒOƒ‰ƒ€‚Å1TŠÔ“­‚¢‚Ä‚¢‚é‚Ì‚ÍA‚æ‚苳ˆç“I‚ÅAŽž‚ɂ͔½•œ«‚ª‚ ‚邯‚¢‚¤‘å‚«‚È—˜“_‚ª‚ ‚è‚Ü‚·B -If all else fails, apologize to those who have to do the boring task, but under no circumstances allow them to do it alone. At a minimum assign a team of two to do the work and promote healthy teamwork to get the task done. +‘¼‚Ì‚·‚ׂĂªŽ¸”s‚µ‚½ê‡‚ÍA‘Þ‹ü‚Èì‹Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢l‚ɂ͎Óß‚µ‚Ü‚·‚ªAŒˆ‚µ‚Ĉêl‚Ås‚¤‚±‚Ƃ͂ł«‚Ü‚¹‚ñB Å’á‚Å‚à2l‚̃`[ƒ€‚ðŠ„‚è“–‚Ä‚ÄAì‹Æ‚ðs‚¢AŒ’‘S‚ȃ`[ƒ€ƒ[ƒN‚ð‘£i‚µ‚ă^ƒXƒN‚ðŠ®—¹‚³‚¹‚Ü‚·B Next [How to Gather Support for a Project](06-How to Gather Support for a Project.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 3ba9eaf..3350793 100644 --- a/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -1,5 +1,5 @@ # How to Gather Support for a Project -To gather support for a project, create and communicate a vision that demonstrates real value to the organization as a whole. Attempt to let others share in your vision creation. This gives them a reason to support you and gives you the benefit of their ideas. Individually recruit key supporters for your project. Wherever possible, show, don't tell. If possible, construct a prototype or a mock-up to demonstrate your ideas. A prototype is always powerful but in software it is far superior to any written description. +ƒvƒƒWƒFƒNƒg‚̃Tƒ|[ƒg‚ðW‚ß‚é‚É‚ÍA‘gD‘S‘Ì‚É^‚̉¿’l‚ðŽ¦‚·ƒrƒWƒ‡ƒ“‚ð쬂µ‚Ä“`‚¦‚Ü‚·B ‚ ‚È‚½‚̃rƒWƒ‡ƒ“쬂ɑ¼‚Ìl‚½‚¿‚ð‹¤—L‚µ‚悤‚Æ‚·‚éB ‚±‚ê‚͔ނç‚É‚ ‚È‚½‚ðƒTƒ|[ƒg‚·‚é——R‚ð—^‚¦A‚ ‚È‚½‚̃AƒCƒfƒA‚̉¶Œb‚ð—^‚¦‚Ü‚·B ƒvƒƒWƒFƒNƒg‚ÌŽå—vƒTƒ|[ƒ^[‚ðŒÂ•ʂɕåW‚µ‚Ü‚·B ‰Â”\‚ÈŒÀ‚èA‹³‚¦‚Ä‚­‚¾‚³‚¢B ‰Â”\‚Å‚ ‚ê‚ÎAŽŽì•i‚⃂ƒbƒNƒAƒbƒv‚ðì‚Á‚ăAƒCƒfƒA‚ð”­Šö‚³‚¹‚Ä‚­‚¾‚³‚¢B ƒvƒƒgƒ^ƒCƒv‚Íí‚É‹­—͂ł·‚ªAƒ\ƒtƒgƒEƒFƒA‚Å‚Íà–¾•¶‚æ‚è‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B Next [How to Grow a System](07-How to Grow a System.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index f41cd4b..076513d 100644 --- a/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -1,23 +1,23 @@ # How to Grow a System -The seed of a tree contains the idea of the adult but does not fully realize the form and potency of the adult. The embryo grows. It becomes larger. It looks more like the adult and has more of the uses. Eventually it bears fruit. Later, it dies and its body feeds other organisms. +–؂̗t‚ɂ͑ål‚̃AƒCƒfƒA‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·‚ªA¬l‚ÌŒ`‚âŒø—Í‚ðŠ®‘S‚ɂ͗‰ð‚µ‚Ä‚¢‚Ü‚¹‚ñBã󂪬’·‚·‚éB‚»‚ê‚͑傫‚­‚È‚è‚Ü‚·B‘ål‚̂悤‚ÉŒ©‚¦A‚æ‚葽‚­‚Ì—p“r‚ª‚ ‚è‚Ü‚·BŒ‹‹Ç‚»‚ê‚͉ʎÀ‚ð¶‚݂܂·B‚»‚ÌŒãA‚»‚ê‚ÍŽ€‚ÉA‚»‚̑̂͑¼‚̶•¨‚ɉh—{‚ð—^‚¦‚Ü‚·B -We have the luxury of treating software like that. A bridge is not like that; there is never a baby bridge, but merely an unfinished bridge. Bridges are a lot simpler than software. +Ž„‚½‚¿‚Í‚»‚̂悤‚ȃ\ƒtƒgƒEƒFƒA‚ðˆµ‚¤æÒ‘ò‚³‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‹´‚Í‚»‚¤‚ł͂Ȃ¢Bƒxƒr[ƒuƒŠƒbƒW‚Í‚ ‚è‚Ü‚¹‚ñ‚ªA–¢Š®¬‚Ì‹´‚Í‚ ‚è‚Ü‚¹‚ñBƒuƒŠƒbƒW‚̓\ƒtƒgƒEƒFƒA‚æ‚è‚à‚͂邩‚ÉŠÈ’P‚Å‚·B -It is good to think of software as growing, because it allows us to make useful progress before we have a perfect mental image. We can get feedback from users and use that to correct the growth. Pruning off weak limbs is healthful. +ƒ\ƒtƒgƒEƒFƒA‚ª¬’·‚µ‚Ä‚¢‚邯l‚¦‚邱‚Æ‚ÍAŠ®àø‚È¸_“I‚ȃCƒ[ƒW‚𓾂é‘O‚É—L—p‚Èi•à‚ð‹‚°‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅA—Ç‚¢l‚¦‚Å‚·Bƒ†[ƒU[‚©‚ç‚̃tƒB[ƒhƒoƒbƒN‚𓾂ÄA‚»‚ê‚ðŽg‚Á‚Ĭ’·‚ðC³‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŽã‚¢Žè‘«‚ðØ‚èŽæ‚邱‚Ƃ͌’N‚Å‚·B -The programmer must design a finished system that can be delivered and used. But the advanced programmer must do more. You must design a growth path that ends in the finished system. It is your job to take a germ of an idea and build a path that takes it as smoothly as possible into a useful artefact. +ƒvƒƒOƒ‰ƒ}‚ÍA”z‘—‚µ‚ÄŽg—p‚Å‚«‚銮¬‚µ‚½ƒVƒXƒeƒ€‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µA‚“x‚ȃvƒƒOƒ‰ƒ}‚Í‚à‚Á‚Æ‘½‚­‚Ì‚±‚Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢BŠ®¬‚µ‚½ƒVƒXƒeƒ€‚ÅI‚í‚鬒·Œo˜H‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒAƒCƒfƒA‚̉è‚ðŽæ‚Á‚ÄA‚Å‚«‚邾‚¯ƒXƒ€[ƒY‚É—L—p‚ÈlH•¨‚ɕς¦‚铹‚ð‚‚­‚é‚̂͂ ‚È‚½‚ÌŽdŽ–‚Å‚·B -To do this, you must visualize the end result and communicate it in a way that the engineering team can get excited about. But you must also communicate to them a path that goes from wherever they are now to where they want to be with no large leaps. The tree must stay alive the whole time; it cannot be dead at one point and resurrected later. +‚±‚ê‚ðs‚¤‚É‚ÍAÅIŒ‹‰Ê‚ðŽ‹Šo‰»‚µAƒGƒ“ƒWƒjƒAƒŠƒ“ƒOƒ`[ƒ€‚ª‹»•±‚µ‚Ä‚â‚è‹‚°‚邱‚Æ‚ª‚Å‚«‚é•û–@‚Å“`’B‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚͂܂½A”ނ炪¡‚Ç‚±‚É‚¢‚Ä‚àA‚Ç‚±‚É‚¢‚Ä‚à‘å‚«‚È”ò–ô‚ðŒ©‚¹‚Ä‚¢‚È‚¢‚Æ‚±‚ë‚És‚­“¹‚ð”Þ‚ç‚É“`‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB–؂Ͷ‚«‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ê‚͈ê“_‚ÅŽ€‚ñ‚ł͂Ȃ炸AŒã‚Å•œŠˆ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -This approach is captured in spiral development. Milestones that are never too far apart are used to mark progress along the path. In the ultra-competitive environment of business, it is best if the milestones can be released and make money as early as possible, even if they are far away from a well-designed endpoint. One of the programmer's jobs is to balance the immediate pay-off against future pay-off by wisely choosing a growth path expressed in milestones. +‚±‚̃Aƒvƒ[ƒ`‚ÍA—†ùó‚É“WŠJ‚³‚ê‚Ä‚¢‚Ü‚·B‰“‚·‚¬‚邱‚Ƃ̂Ȃ¢ƒ}ƒCƒ‹ƒXƒg[ƒ“‚ÍAŒo˜H‚ɉˆ‚Á‚Äi’»‚ðƒ}[ƒN‚·‚邽‚߂Ɏg—p‚³‚ê‚Ü‚·B’´‹£‘ˆ“I‚ȃrƒWƒlƒXŠÂ‹«‚Å‚ÍA‚½‚Æ‚¦ÝŒv‚³‚ꂽƒGƒ“ƒhƒ|ƒCƒ“ƒg‚©‚牓‚­—£‚ê‚Ä‚¢‚Ä‚àAƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªƒŠƒŠ[ƒX‚³‚êA‚Å‚«‚邾‚¯‘‚­Žû‰v‚ðã‚°‚邱‚Æ‚ªÅ‘P‚Ì•û–@‚Å‚·BƒvƒƒOƒ‰ƒ}[‚ÌŽdŽ–‚Ì1‚‚ÍAƒ}ƒCƒ‹ƒXƒg[ƒ“‚Å•\‚³‚ꂽ¬’·Œo˜H‚ðŒ«–¾‚É‘I‘ð‚·‚é‚±‚Ƃɂæ‚Á‚ÄA‘¦Žž‚Ì•ñV‚Æ«—ˆ‚Ì•ñV‚̃oƒ‰ƒ“ƒX‚ð‚Æ‚é‚±‚Ƃł·B -The advanced programmer has the triple responsibility of growing software, teams, and persons. +æi“I‚ȃvƒƒOƒ‰ƒ}‚ÍAƒ\ƒtƒgƒEƒFƒAAƒ`[ƒ€A‚¨‚æ‚Ñlˆõ‚ð‘‚â‚·‚Æ‚¢‚¤3‚‚ÌÓ”C‚𕉂Á‚Ä‚¢‚Ü‚·B -A reader, Rob Hafernik, sent in this comment on this section that I can do no better than to quote in full: +“ÇŽÒARob Hafernik‚ÍA‚±‚̃ZƒNƒVƒ‡ƒ“‚Ì‚±‚̃Rƒƒ“ƒg‚ÅAŽ„‚ªŠ®‘S‚Ɉø—p‚·‚邿‚è‚à‚¤‚Ü‚­‚¢‚­‚±‚Ƃ͂ł«‚È‚¢F -> I think you under-emphasize the importance here. It's not just systems, but algorithms, user interfaces, data models, and so on. It's absolutely *vital* as you work on a large system to have measurable progress toward intermediate goals. Nothing is as bad as the special horror of getting down to the end and discovering that the whole thing just isn't going to work (look at the recent debacle of the Voter News System). I would even go further and state it as a law of nature: no large, complex system can be implemented from scratch, it can only be evolved from a simple system to a complex system in a series of intentional steps. +>Ž„‚Í‚ ‚È‚½‚ª‚±‚±‚Åd—v«‚ð‹­’²‚µ‚Ä‚¢‚邯Žv‚¤B‚±‚ê‚̓VƒXƒeƒ€‚¾‚¯‚łȂ­AƒAƒ‹ƒSƒŠƒYƒ€Aƒ†[ƒU[ƒCƒ“ƒ^[ƒtƒFƒCƒXAƒf[ƒ^ƒ‚ƒfƒ‹‚Ȃǂł·B‚ ‚È‚½‚ª‘å‚«‚È–Ú•W‚ð’B¬‚·‚邽‚߂ɑå‹K–͂ȃVƒXƒeƒ€‚ÉŽæ‚è‘g‚ނ悤‚É‚È‚é‚ÆAâ‘΂Éd—v‚Å‚·BI‚í‚è‚ɋ߂«A‚·‚ׂĂª‚¿‚傤‚Ç‚¤‚Ü‚­‚¢‚©‚È‚¢‚±‚Ƃ𔭌©‚·‚邯‚¢‚¤“Á•ʂȋ°•|‚قLj«‚­‚È‚¢i“Š•[ŽÒƒjƒ…[ƒXƒVƒXƒeƒ€‚Ìŋ߂̑厸”s‚ðŒ©‚Ä‚­‚¾‚³‚¢jBŽ„‚Í‚³‚ç‚Éi‚ñ‚ÅA‚»‚ê‚ðŽ©‘R‚Ì–@‘¥‚ÆŒ¾‚Á‚Ä‚¢‚Ü‚·B‘å‹K–͂ŕ¡ŽG‚ȃVƒXƒeƒ€‚̓[ƒ‚©‚çŽÀ‘•‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB’Pƒ‚ȃVƒXƒeƒ€‚©‚çˆê˜A‚̈Ó}“I‚ȃXƒeƒbƒv‚Å•¡ŽG‚ȃVƒXƒeƒ€‚É‚µ‚©i‰»‚Å‚«‚Ü‚¹‚ñB -To which one can only reply *Fiat lux*! +‚Ç‚¿‚ç‚É•ÔM‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H* Fiat lux *I Next [How to Communicate Well](08-How to Communicate Well.md) diff --git a/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index d189a0d..8794954 100644 --- a/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -1,11 +1,11 @@ # How to Communicate Well -To communicate well, you have to recognize how hard it is. It is a skill unto itself. It is made harder by the fact that the persons with whom you have to communicate are flawed. They do not work hard at understanding you. They speak poorly and write poorly. They are often overworked or bored, and, at a minimum, somewhat focused on their own work rather than the larger issues you may be addressing. One of the advantages of taking classes and practising writing, public speaking, and listening is that if you become good at it you can more readily see where problems lie and how to correct them. +‚¤‚Ü‚­ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŽæ‚é‚É‚ÍA‚»‚ꂪ‚Ç‚ê‚قǓ‚¢‚©‚ð”Fޝ‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ê‚Í‚»‚ꎩg‚̃XƒLƒ‹‚Å‚·B‚ ‚È‚½‚ªƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢l‚ÉŒ‡Š×‚ª‚ ‚邯‚¢‚¤Ž–ŽÀ‚É‚æ‚Á‚ÄA‚»‚ê‚Í‚æ‚袓ï‚ɂȂéB”Þ‚ç‚Í‚ ‚È‚½‚ð—‰ð‚·‚邱‚ƂɔMS‚É“­‚¢‚Ä‚¢‚Ü‚¹‚ñB”Þ‚ç‚Í•nŽã‚ɘb‚µA•nŽã‚É‘‚­B”Þ‚ç‚Í‚µ‚΂µ‚ΉߘJ‚Ü‚½‚͑ދü‚Å‚ ‚èAÅ’á‚Å‚à‚ ‚È‚½‚ªŽæ‚è‘g‚ñ‚Å‚¢‚é‘å‚«‚È–â‘è‚ł͂Ȃ­AŽ©•ª‚ÌŽdŽ–‚É‘½­W’†‚µ‚Ä‚¢‚Ü‚·BŽö‹Æ‚ðŽóu‚µAŽ·•MA‰‰àA’®‰ð‚ðŽÀ‘H‚·‚邱‚Ƃ̗˜“_‚Ì1‚‚ÍAŽ™“¶‚ª‚¤‚Ü‚­‚¢‚¯‚ÎA–â‘肪‚Ç‚±‚É‚ ‚é‚Ì‚©A‚ǂ̂悤‚É’ù³‚·‚é‚Ì‚©‚ð‚æ‚èŠÈ’P‚É’m‚邱‚Æ‚ª‚Å‚«‚邯‚¢‚¤‚±‚Ƃł·B -The programmer is a social animal whose survival depends on communication with her team. The advanced programmer is a social animal whose satisfaction depends on communication with people outside her team. +ƒvƒƒOƒ‰ƒ}[‚Ͷ‚«Žc‚肪”Þ—‚̃`[ƒ€‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ɉˑ¶‚·‚éŽÐ‰ï“I‚È“®•¨‚Å‚·B‚“x‚ȃvƒƒOƒ‰ƒ}[‚ÍA–ž‘«“x‚ª”Þ—‚̃`[ƒ€ŠO‚ÌlX‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ɉˑ¶‚·‚éŽÐ‰ï“I‚È“®•¨‚Å‚·B -The programmer brings order out of chaos. One interesting way to do this is to initiate a proposal of some kind outside the team. This can be done in a *strawman* or *white-paper* format or just verbally. This leadership has the tremendous advantage of setting the terms of the debate. It also exposes you to criticism, and worse, rejection and neglect. The advanced programmer must be prepared to accept this, because she has a unique power and therefore a unique responsibility. Entrepreneurs who are not programmers need programmers to provide leadership in some ways. Programmers are the part of the bridge between ideas and reality that rests on reality. +ƒvƒƒOƒ‰ƒ}[‚ͬ—‚©‚ç–½—ß‚ðo‚µ‚Ü‚·B‚±‚ê‚ðs‚¤1‚‚̋»–¡[‚¢•û–@‚ÍAƒ`[ƒ€ŠO‚̉½‚ç‚©‚Ì’ñˆÄ‚ðŠJŽn‚·‚邱‚Ƃł·B‚±‚ê‚ÍA* strawman *‚Ü‚½‚Í* white-paper *Œ`Ž®‚ÅA‚Ü‚½‚ÍŒû“ª‚ł̂Ýs‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃Š[ƒ_[ƒVƒbƒv‚ÍA‹c˜_‚ÌðŒ‚ðÝ’è‚·‚邯‚¢‚¤‘å‚«‚È—˜“_‚ª‚ ‚è‚Ü‚·B‚»‚ê‚Í‚ ‚È‚½‚ð”á”»‚É‚³‚炵A‚³‚ç‚Ɉ«‚¢‚±‚Æ‚ÉA‹‘â‚Æ–³Ž‹‚ð–\˜I‚µ‚Ü‚·B‚“x‚ȃvƒƒOƒ‰ƒ}‚ÍA“Æ“Á‚Ì—Í‚ðŽ‚Á‚Ä‚¢‚邽‚ߓƎ©‚ÌÓ”C‚ª‚ ‚é‚Ì‚ÅA‚±‚ê‚ðŽó‚¯“ü‚ê‚途õ‚ª‚Å‚«‚Ä‚¢‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ł͂Ȃ¢‹N‹Æ‰Æ‚ÍA‚¢‚­‚‚©‚Ì“_‚ŃŠ[ƒ_[ƒVƒbƒv‚ð’ñ‹Ÿ‚·‚éƒvƒƒOƒ‰ƒ}[‚ð•K—v‚Æ‚µ‚Ä‚¢‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ÍAŒ»ŽÀ‚É—Š‚Á‚Ä‚¢‚éƒAƒCƒfƒA‚ÆƒŠƒAƒŠƒeƒB‚Ì‹´“n‚µ‚̈ꕔ‚Å‚·B -I haven't mastered communicating well, but what I'm currently trying is what I think of as a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. +Ž„‚Í‚¤‚Ü‚­ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðƒ}ƒXƒ^[‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½‚ªAŽ„‚ªŒ»ÝŽæ‚è‘g‚ñ‚Å‚¢‚é‚Ì‚ÍAŽ„‚ª4‚‚̃Aƒvƒ[ƒ`‚ð‚Æ‚Á‚Ä‚¢‚邯Žv‚¢‚Ü‚·BŽ©•ª‚̃AƒCƒfƒA‚ð‡’²‚É€”õ‚µ‚½ŒãAŽ„‚ÍŒû“ª‚Řb‚µAކ‚ÍiŽÀÛ‚ÌŽ†‚É‚à“dŽq“I‚É‚àjƒfƒ‚‚ðŒ©‚¹‚ÄA‚±‚̃vƒƒZƒX‚ðh•ø‹­‚­ŒJ‚è•Ô‚·BŽ„‚Í‚±‚ÌŽí‚̓‚¢ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Å‚ÍA‰½“x‚àŽ„‚½‚¿‚ª\•ª‚Éh•ø‹­‚­‚È‚¢‚ÆŽv‚¢‚Ü‚·B‚ ‚È‚½‚̃AƒCƒfƒA‚ª‚·‚®‚Ɏ󂯓ü‚ê‚ç‚ê‚È‚¢‚È‚çA‚ ‚È‚½‚Í—Ž’_‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñB”Þ‚ç‚Ì€”õ‚ɃGƒlƒ‹ƒM[‚𓊓ü‚µ‚½ê‡A’N‚à‚ ‚È‚½‚Ì‚½‚߂ɂ»‚ê‚ð•nŽã‚¾‚Ƃ͎v‚í‚È‚¢‚Å‚µ‚傤B Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) diff --git a/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index dc6c539..3e736c0 100644 --- a/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -1,9 +1,9 @@ # How to Tell People Things They Don't Want to Hear -You will often have to tell people things that will make them uncomfortable. Remember that you are doing this for a reason. Even if nothing can be done about the problem, you are telling them as early as possible so they will be well-informed. +‚ ‚È‚½‚Í‚µ‚΂µ‚ÎAlX‚É•s‰õŠ´‚ð—^‚¦‚邿‚¤‚È‚±‚Æ‚ð“`‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ª‰½‚ç‚©‚Ì——R‚Å‚±‚ê‚ð‚µ‚Ä‚¢‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B–â‘è‚ɂ‚¢‚ĉ½‚à‚Å‚«‚È‚¢ê‡‚Å‚àA‚Å‚«‚邾‚¯‘‚­‚»‚ê‚ç‚ð“`‚¦‚Ä‚¢‚é‚Ì‚ÅA”Þ‚ç‚Í\•ª‚Èî•ñ‚𓾂ç‚ê‚Ü‚·B -The best way to tell someone about a problem is to offer a solution at the same time. The second best way is to appeal to them for help with the problem. If there is a danger that you won't be believed, you should gather some support for your assertion. +’N‚©‚É–â‘è‚ð“`‚¦‚éŗǂ̕û–@‚ÍA“¯Žž‚ɉðŒˆô‚ð’ñަ‚·‚邱‚Ƃł·B‘æ“ñ‚ÌÅ‘P‚Ì•û–@‚ÍA–â‘è‚Ì•‚¯‚ðŽØ‚è‚Ĕނç‚ɃAƒs[ƒ‹‚·‚邱‚Ƃł·BM‚¶‚ç‚ê‚È‚¢ŠëŒ¯‚ª‚ ‚éꇂÍA‚ ‚È‚½‚ÌŽå’£‚ÌŽxŽ‚ðW‚ß‚é‚ׂ«‚Å‚·B -One of the most unpleasant and common things you will have to say is, ‘The schedule will have to slip.’ The conscientious programmer hates to say this, but must say it as early as possible. There is nothing worse than postponing action when a milestone slips, even if the only action is to inform everyone. In doing this, it is better to do it as a team, at least in spirit, if not physically. You will want your team's input on both where you stand and what can be done about it, and the team will have to face the consequences with you. +‚ ‚È‚½‚ªŒ¾‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢Å‚à•s–ù‰õ‚ňê”Ê“I‚È‚±‚Ƃ̈ê‚‚ÍA”ނ̃XƒPƒWƒ…[ƒ‹‚ªŠÔˆá‚Á‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·B—ÇS“I‚ȃvƒƒOƒ‰ƒ}[‚ÍA‚±‚ê‚ðŒ¾‚¤‚̂͌™‚Å‚·‚ªA‚Å‚«‚邾‚¯‘‚­Œ¾‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB—Bˆê‚̃AƒNƒVƒ‡ƒ“‚ª’N‚ɂłà’m‚点‚邱‚Ƃł ‚Á‚Ä‚àAƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªŠŠ‚Á‚½‚Æ‚«‚ɃAƒNƒVƒ‡ƒ“‚ð‰„Šú‚·‚邿‚è‚àˆ«‚¢‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚ðs‚¤‚É‚ÍA•¨—??“I‚ɂłȂ­‚Ä‚àA­‚È‚­‚Æ‚à¸_“I‚ɂ̓`[ƒ€‚Æ‚µ‚Äs‚¤•û‚ª—Ç‚¢‚Å‚·B‚ ‚È‚½‚ª—§‚Á‚Ä‚¢‚éꊂƂ»‚ê‚ɂ‚¢‚ĉ½‚ª‚Å‚«‚é‚©‚Ì—¼•û‚Å‚ ‚È‚½‚̃`[ƒ€‚Ì“ü—Í‚ð–]‚Þ‚Å‚µ‚傤Bƒ`[ƒ€‚Í‚ ‚È‚½‚ɉe‹¿‚ð—^‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB Next [How to Deal with Managerial Myths](10-How to Deal with Managerial Myths.md) diff --git a/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 6acb49d..c13a7db 100644 --- a/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,13 +1,13 @@ # How to Deal with Managerial Myths -The word *myth* sometimes means fiction. But it has a deeper connotation. It also means a story of religious significance that explains the universe and mankind's relationship to it. Managers tend to forget what they learned as programmers and believe in certain myths. It would be as rude and unsuccessful to try to convince them these myths are false as to try to disillusion a devoutly religious person of their beliefs. For that reason, you should recognize these beliefs as myths: +* myth *‚Æ‚¢‚¤Œ¾—t‚ÍŽž‚ɂ̓tƒBƒNƒVƒ‡ƒ“‚ðˆÓ–¡‚µ‚Ü‚·B‚µ‚©‚µ‚»‚ê‚Í‚æ‚è[‚¢ˆÓ–¡‚ðŽ‚¿‚Ü‚·B‚»‚ê‚͂܂½A‰F’ˆ‚Æl—ނƂ̊֌W‚ðà–¾‚·‚é@‹³“IˆÓ–¡‚Ì•¨Œê‚ðˆÓ–¡‚µ‚Ü‚·Bƒ}ƒl[ƒWƒƒ[‚ÍAƒvƒƒOƒ‰ƒ}[‚Æ‚µ‚ÄŠw‚ñ‚¾‚±‚Æ‚ð–Y‚ê‚ÄA“Á’è‚Ì_˜b‚ðM‚¶‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚Ì_˜b‚ª‹U‚è‚Å‚ ‚邱‚Æ‚ðM‚¶‚³‚¹‚悤‚Æ‚·‚é‚͖̂³—ç‚Å‚ ‚莸”s‚µ‚Ä‚¢‚é‚Å‚µ‚傤B‚»‚Ì‚½‚ßA‚ ‚È‚½‚Í‚±‚ê‚ç‚ÌM”O‚ð_˜b‚Æ‚µ‚Ä”Fޝ‚·‚ׂ«‚Å‚·F -- More documentation is always better. (They want it, but they don't want you to spend any time on it.) -- Programmers can be equated. (Programmers vary by an order of magnitude.) -- Resources can be added to a late project to speed it. (The cost of communication with the new persons is almost always more taxing than helpful.) -- It is possible to estimate software development reliably. (It is not even theoretically possible.) -- Programmers' productivity can be measured in terms of some simple metric, like lines of code. (If succinctness is power, lines of code are bad, not good.) +- ‚æ‚葽‚­‚̃hƒLƒ…ƒƒ“ƒg‚ªí‚É—D‚ê‚Ä‚¢‚Ü‚·B i”Þ‚ç‚Í‚»‚ꂪ—~‚µ‚¢‚ªA‚¢‚Â‚Å‚à‚ ‚È‚½‚ª‚»‚ê‚É”ï‚â‚·‚±‚Æ‚ð–]‚ñ‚Å‚¢‚È‚¢Bj +- ƒvƒƒOƒ‰ƒ}‚Í“¯“™‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B iƒvƒƒOƒ‰ƒ}‚ÍŒ…ˆá‚¢‚ɈقȂéj +- ‚»‚ê‚ðƒXƒs[ƒhƒAƒbƒv‚·‚邽‚ß‚ÉAƒŠƒ\[ƒX‚ðŒã”¼‚̃vƒƒWƒFƒNƒg‚ɒljÁ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B iV‚µ‚¢l‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚̃RƒXƒg‚ÍA•‚¯‚É‚È‚é‚æ‚è‚à‚Ù‚Æ‚ñ‚Çí‚ɉÛÅ‚³‚ê‚Ü‚·Bj +- ƒ\ƒtƒgƒEƒFƒAŠJ”­‚ðŠmŽÀ‚ÉŒ©Ï‚à‚邱‚Æ‚ª‰Â”\‚Å‚·B i—˜_“I‚É‚à‰Â”\‚ł͂ ‚è‚Ü‚¹‚ñBj +- ƒvƒƒOƒ‰ƒ}‚̶ŽY«‚ÍAƒR[ƒhs‚̂悤‚È’Pƒ‚ȃƒgƒŠƒbƒN‚ÌŠÏ“_‚©‚瑪’è‚Å‚«‚Ü‚·B i‚à‚µŠÈŒ‰‚³‚ª—͂ł ‚ê‚ÎAƒR[ƒhs‚͈«‚¢A—Ç‚¢‚±‚Ƃł͂ ‚è‚Ü‚¹‚ñBj -If you have an opportunity, you can try to explain these things, but don't feel bad if you have no success and don't damage your reputation by confronting these myths belligerently. Each of these myths reinforces the manager's idea that they have some actual control over what is going on. The truth is that managers facilitate if they are good, and impede if they are bad. +‹@‰ï‚ª‚ ‚ê‚ÎA‚±‚ê‚ç‚Ì‚±‚Æ‚ðà–¾‚·‚邱‚Ƃ͂ł«‚Ü‚·‚ªA¬Œ÷‚µ‚Ä‚¢‚È‚¢‚ƈ«‚¢‹CŽ‚¿‚ɂȂ炸A‚±‚ê‚ç‚Ì_˜b‚É‘ÎR‚µ‚Ä‚ ‚È‚½‚Ì•]”»‚𑹂Ȃ¤‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚ç‚Ì_˜b‚Ì‚»‚ꂼ‚ê‚ÍA‰½‚ª‹N‚±‚Á‚Ä‚¢‚é‚©‚ðŽÀÛ‚ÉŽx”z‚µ‚Ä‚¢‚éƒ}ƒl[ƒWƒƒ[‚Ìl‚¦‚ð‹­‚ß‚éB^ŽÀ‚ÍAƒ}ƒl[ƒWƒƒ[‚ª”ނ炪—Ç‚¯‚ê‚ΗeˆÕ‚ɂȂèA”ނ炪ˆ«‚¢ê‡‚ɂ͂»‚ê‚ð–W‚°‚邱‚Ƃł·B Next [How to Deal with Organizational Chaos](11-How to Deal with Organizational Chaos.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md index 247a626..5f6967b 100644 --- a/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md +++ b/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md @@ -1,11 +1,11 @@ # How to Deal with Organizational Chaos -There are often brief periods of great organizational chaos, such as lay-offs, buyouts, ipos, firings, new hirings, and so on. These are unsettling to everyone, but perhaps a little less unsettling to the programmer whose personal self-esteem is founded in capacity rather than in position. Organizational chaos is a great opportunity for programmers to exercise their magic power. I've saved this for last because it is a deep tribal secret. If you are not a programmer, please stop reading now. +ƒŒƒCƒIƒtAƒoƒCƒAƒEƒgAiposA”­‰ÎAV‚µ‚¢Ì—p‚Ȃǂ̂悤‚ÈA‘gD“I¬—‚Ì’Z‚¢ŠúŠÔ‚ª‚µ‚΂µ‚΂ ‚è‚Ü‚·B‚±‚ê‚ç‚ÍŠF‚ɂƂÁ‚Ä•sˆÀ‚Å‚·‚ªAŒÂl“I‚ÈŽ©‘¸S‚ª—§Ø‚³‚ê‚Ä‚¢‚é‚̂ł͂Ȃ­A”\—Í‚ÅÝ—§‚³‚ꂽƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͂¨‚»‚ç‚­­‚µ•sˆÀ‚Å‚·B‘gD‚̬—‚ÍAƒvƒƒOƒ‰ƒ}‚ɂƂÁ‚Ä–‚–@‚̗͂𔭊ö‚·‚éâD‚Ì‹@‰ï‚Å‚·B‚»‚ê‚Í[‚¢•”‘°‚̔閧‚Å‚ ‚邽‚ßA‚±‚ê‚ðÅŒã‚ɕۑ¶‚µ‚Ü‚µ‚½B‚ ‚È‚½‚ªƒvƒƒOƒ‰ƒ}[‚łȂ¯‚ê‚ÎA¡“Ç‚ñ‚Å‚¨‚¢‚Ä‚­‚¾‚³‚¢B -> Engineers have the power to create and sustain. +>ƒGƒ“ƒWƒjƒA‚Í‘n‘¢—͂Ǝ‘±—Í‚ðŽ‚Á‚Ä‚¢‚Ü‚·B -Non-engineers can order people around but, in a typical software company, can create and sustain nothing without engineers, just as engineers typically cannot sell a product or manage a business effectively. This power is proof against almost all of the problems associated with temporary organizational mayhem. When you have it you should ignore the chaos completely and carry on as if nothing is happening. You may, of course, get fired, but if that happens you can probably get a new job because of the magic power. More commonly, some stressed-out person who does not have the magic power will come into your cube and tell you to do something stupid. If you are really sure that it is stupid, it is best to smile and nod until they go away and then carry on doing what you know is best for the company. +ƒmƒ“ƒGƒ“ƒWƒjƒA‚͈ê”ʂ̃\ƒtƒgƒEƒFƒA‰ïŽÐ‚Å‚ÍAƒGƒ“ƒWƒjƒA‚ªˆê”Ê“I‚É»•i‚ð”Ì”„‚µ‚½‚èAƒrƒWƒlƒX‚ðŒø‰Ê“I‚ÉŠÇ—‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚ßAƒGƒ“ƒWƒjƒA‚È‚µ‚ʼn½‚à쬂µ‚Ĉێ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚±‚Ì”\—Í‚ÍAˆêŽž“I‚È‘gD‘›—‚ÉŠÖ˜A‚·‚é‚Ù‚Æ‚ñ‚Ç‚·‚ׂĂ̖â‘è‚ɑ΂µ‚Ä—§Ø‚·‚é‚à‚̂ł·B‚ ‚È‚½‚ª‚»‚ê‚ðŽ‚Á‚Ä‚¢‚邯‚«A¬—‚ðŠ®‘S‚É–³Ž‹‚µ‚ÄA‰½‚à‹N‚±‚Á‚Ä‚¢‚È‚¢‚©‚̂悤‚É‘±‚¯‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚Í‚à‚¿‚ë‚ñA‰ðŒÙ‚³‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚à‚µ‹N‚±‚ê‚ÎA‚¨‚»‚ç‚­–‚—͂̂½‚ß‚ÉV‚µ‚¢ŽdŽ–‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B‚æ‚èˆê”Ê“I‚É‚ÍA–‚–@‚Ì—Í‚ðŽ‚Á‚Ä‚¢‚È‚¢ƒXƒgƒŒƒX‚Ì‘½‚¢l‚ª‚ ‚È‚½‚Ì—§•û‘̂ɓü‚Á‚ÄA‚ ‚È‚½‚ɉ½‚©‚΂©‚°‚½‚±‚Æ‚ðŒ¾‚¤‚悤‚ɂȂè‚Ü‚·B‚ ‚È‚½‚ª–{“–‚É‚»‚ꂪ”nŽ­‚¾‚ÆŠmM‚µ‚Ä‚¢‚é‚È‚ç‚ÎA”ނ炪‹Ž‚é‚܂Ŕ÷΂ñ‚Åèõ‚­‚Ì‚ªˆê”Ô‚Å‚·B -If you are a leader, tell your people to do the same thing and tell them to ignore what anybody else tells them. This course of action is the best for you personally, and is the best for your company or project. +‚ ‚È‚½‚ªƒŠ[ƒ_[‚Å‚ ‚ê‚ÎA“¯‚¶‚±‚Ƃ𑼂Ìl‚ª˜b‚·‚±‚Ƃ𖳎‹‚·‚邿‚¤‚ÉlX‚É“`‚¦‚Ü‚·B‚±‚Ìs“®‘[’u‚ÍAŒÂl“I‚É‚ÍÅ‚‚Ì‚à‚̂ł ‚èA‚ ‚È‚½‚̉ïŽÐ‚âƒvƒƒWƒFƒNƒg‚ÉÅ“K‚Å‚·B Next [Glossary](../../GLOSSARY.md) diff --git a/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index 0c8ec8e..ae40549 100644 --- a/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,9 +1,9 @@ # How to Tell the Hard From the Impossible [//]: # (Version:1.0.1) -It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. +“‚¢‚±‚Æ‚ð‚µ‚ÄA•s‰Â”\‚ÆŒ©‚È‚·‚͎̂„‚½‚¿‚ÌŽdŽ–‚Å‚·B‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÌŠÏ“_‚©‚ç‚ÍA’Pƒ‚ȃVƒXƒeƒ€‚©‚笒·‚Å‚«‚È‚¢‚©A„’è‚Å‚«‚È‚¢ê‡‚Í•s‰Â”\‚Å‚·B‚±‚Ì’è‹`‚É‚æ‚Á‚ÄAŒ¤‹†‚ƌĂ΂ê‚é‚à‚͕̂s‰Â”\‚Å‚·B‘å—ʂ̒P‚È‚éŽdŽ–‚͓‚¢‚ªA•K‚¸‚µ‚à•s‰Â”\‚Æ‚¢‚¤‚킯‚ł͂Ȃ¢B -The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. +‰ÈŠw“I‚ÈŠÏ“_‚âƒ\ƒtƒgƒEƒFƒAHŠw‚ÌŠÏ“_‚©‚ç‚ÍAŽÀۂɂ͕s‰Â”\‚È‚±‚Æ‚ð”ñí‚É‚¤‚Ü‚­‚â‚Á‚Ä‚­‚ê‚é‚©‚à‚µ‚ê‚È‚¢‚Ì‚ÅA‚±‚Ì‹æ•ʂ͖ʔ’‚­‚È‚¢B‚»‚ê‚Í‹N‹Æ‰Æ‚ª’P‚Ȃ颓ï‚Å‚ ‚èA”ނ炪–]‚Þ‚à‚̂̂قƂñ‚ǂ𓾂釗“I‚ȉðŒˆô‚ðŒ©‚Â‚¯‚é‚̂𕂯‚é‚ ‚È‚½‚ÌŽdŽ–‚ɂȂè‚Ü‚·B‰ðŒˆô‚ÍAŽ©M‚ðŽ‚Á‚ăXƒPƒWƒ…[ƒ‹‚³‚êAƒŠƒXƒN‚ª—‰ð‚³‚ê‚Ä‚¢‚éꇂɂ͓‚¢‚Å‚·B -It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is no crisp definition of success, you will not succeed. +Å‚à–£—Í“I‚È”¯Œ^‚âF‚ðŒvŽZ‚·‚éƒVƒXƒeƒ€‚È‚ÇA”™‘R‚Æ‚µ‚½—v‹‚ð–ž‚½‚·‚±‚Ƃ͕s‰Â”\‚Å‚·B—vŒ‚ð‚æ‚è‘N–¾‚É‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎAl‚Ì–£—Í“I‚È”¯Œ^‚ÆF‚ðŒvŽZ‚µA‚»‚ê‚ðƒvƒŒƒrƒ…[‚µ‚½‚è•ÏX‚µ‚½‚èAŒ³‚̃Xƒ^ƒCƒ‹‚ÉŠî‚¢‚Čڋq–ž‘«“x‚ð‚‚ß‚ÄA‚½‚­‚³‚ñ‚Ì‚¨‹à‚ð‰Ò‚®ƒVƒXƒeƒ€‚ð\’z‚µ‚Ü‚µ‚傤B¬Œ÷‚Ì‘N–¾‚È’è‹`‚ª‚È‚¢A‚ ‚È‚½‚ͬŒ÷‚µ‚Ü‚¹‚ñB Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) diff --git a/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index dc1d8ac..87a8901 100644 --- a/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -1,11 +1,11 @@ # How to Utilize Embedded Languages -Embedding a programming language into a system has an almost erotic fascination to a programmer. It is one of the most creative acts that can be performed. It makes the system tremendously powerful. It allows you to exercise her most creative and Promethean skills. It makes the system into your friend. +ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðƒVƒXƒeƒ€‚É‘g‚Ýž‚Þ‚±‚Æ‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͂قƂñ‚ǃGƒƒ`ƒbƒN‚È–£—Í‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚»‚ê‚ÍŽÀs‚Å‚«‚éÅ‚à‘n‘¢“I‚Èsˆ×‚Ì1‚‚ł·B‚»‚ê‚̓VƒXƒeƒ€‚ð”ñí‚É‹­—͂ɂµ‚Ü‚·B”Þ—‚͔ޗ‚ÌÅ‚à‘n‘¢“I‚ȃvƒƒƒeƒEƒX‚̃XƒLƒ‹‚ð”­Šö‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚ê‚Í‚ ‚È‚½‚Ì—Fl‚ɃVƒXƒeƒ€‚ðì‚éB -The best text editors in the world all have embedded languages. This can be used to the extent that the intended audience can master the language. Of course, use of the language can be made optional, as it is in text editors, so that initiates can use it and no one else has to. +¢ŠE’†‚ÌÅ‚‚̃eƒLƒXƒgƒGƒfƒBƒ^‚É‚ÍA‚·‚ׂȾŒê‚ª‘g‚Ýž‚Ü‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍA–Ú“I‚ÌŽ‹’®ŽÒ‚ªŒ¾Œê‚ðK“¾‚Å‚«‚é”͈͂Ŏg—p‚Å‚«‚Ü‚·B‚à‚¿‚ë‚ñAŒ¾Œê‚ÌŽg—p‚ÍAƒeƒLƒXƒgƒGƒfƒBƒ^‚̂悤‚ɃIƒvƒVƒ‡ƒ“‚Ås‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚Ì‚½‚ßAƒCƒjƒVƒAƒ`ƒu‚Í‚»‚ê‚ðŽg—p‚Å‚«A’N‚à‚»‚ê‚ðŽg—p‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -I and many other programmers have fallen into the trap of creating special purpose embedded languages. I fell into it twice. There already exist many languages designed specifically to be embedded languages. You should think twice before creating a new one. +Ž„‚Æ‘¼‚Ì‘½‚­‚̃vƒƒOƒ‰ƒ}[‚ÍA“ÁŽê–Ú“I‚Ì‘g‚Ýž‚ÝŒ¾Œê‚ð쬂·‚邯‚¢‚¤ã©‚ɊׂÁ‚Ä‚¢‚Ü‚·BŽ„‚Í‚»‚ê‚É“ñ“x—Ž‚¿‚½B‚·‚łɑg‚Ýž‚ÝŒ¾Œê‚É“Á‰»‚µ‚ÄÝŒv‚³‚ꂽ‘½‚­‚ÌŒ¾Œê‚ª‘¶Ý‚µ‚Ü‚·B‚ ‚È‚½‚ÍV‚µ‚¢‚à‚Ì‚ðì‚é‘O‚É“ñ“xl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -The real question to ask oneself before embedding a language is: Does this work with or against the culture of my audience? If you intended audience is exclusively non-programmers, how will it help? If your intended audience is exclusively programmers, would they prefer an applications programmers interface (API)? And what language will it be? Programmers don't want to learn a new language that is narrowly used; but if it meshes with their culture they will not have to spend much time learning it. It is a joy to create a new language. But we should not let that blind us to the needs of the user. Unless you have some truly original needs and ideas, why not use an existing language so that you can leverage the familiarity users already have with it? +Œ¾Œê‚ð–„‚ßž‚Þ‘O‚ÉŽ©•ªŽ©g‚Éq‚Ë‚é‚ׂ«^‚ÌŽ¿–â‚ÍA‚±‚ê‚ÍŽ„‚Ì’®O‚Ì•¶‰»‚ƈê‚ÉA‚Ü‚½‚Í”½‘΂ɓ­‚­‚̂łµ‚傤‚©H‚ ‚È‚½‚ª’®O‚ðƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚ÉŒÀ’肵‚悤‚ÆŽv‚Á‚½‚çA‚Ç‚¤‚·‚ê‚΂»‚ꂪ–ð‚É—§‚¿‚Ü‚·‚©H‚ ‚È‚½‚̈Ó}‚·‚éƒI[ƒfƒBƒGƒ“ƒX‚ªê‚çƒvƒƒOƒ‰ƒ}‚Å‚ ‚éê‡A”Þ‚ç‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ}ƒCƒ“ƒ^ƒtƒF[ƒXiAPIj‚ðD‚Þ‚Å‚µ‚傤‚©H‚»‚ê‚͂ǂñ‚ÈŒ¾Œê‚Å‚·‚©HƒvƒƒOƒ‰ƒ}[‚ÍA‹·‚­Žg‚í‚ê‚Ä‚¢‚éV‚µ‚¢Œ¾Œê‚ðŠw‚Ô‚±‚Æ‚ð–]‚܂Ȃ¢B”Þ‚ç‚Ì•¶‰»‚Æ—‚݇‚¤‚ÆA‚»‚ê‚ðŠw‚Ԃ̂ɑ½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·•K—v‚Í‚ ‚è‚Ü‚¹‚ñBV‚µ‚¢Œ¾Œê‚ð쬂·‚邱‚Ƃ͊ì‚тł·B‚µ‚©‚µAŽ„‚½‚¿‚Í‚»‚ê‚ðƒ†[ƒU[‚̃j[ƒY‚É–Ó–Ú“I‚É‚·‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ª–{“–‚ÉŒ³‚̃j[ƒY‚ƃAƒCƒfƒA‚ðŽ‚Á‚Ä‚¢‚È‚¢ŒÀ‚èAŠù‘¶‚ÌŒ¾Œê‚ðŽg—p‚µ‚ÄAƒ†[ƒU[‚ªŠù‚ÉŽ‚Á‚Ä‚¢‚éŽg‚¢Šµ‚ꂽ‚à‚Ì‚ðŠˆ—p‚Å‚«‚邿‚¤‚É‚µ‚Ü‚µ‚傤B Next [Choosing Languages](03-Choosing Languages.md) \ No newline at end of file diff --git a/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 50dee07..1c7dcf2 100644 --- a/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,15 +1,15 @@ # Choosing Languages -The solitary programmer that loves his work (a hacker) can choose the best language for the task. Most working programmers have very little control of the language they will use. Generally, this issue is dictated by pointy-haired bosses who are making a political decision, rather than a technological decision, and lack the courage to promote an unconventional tool even when they know, often with first-hand knowledge, that the less accepted tool is best. In other cases the very real benefit of unity among the team, and to some extent with a larger community, precludes choice on the part of the individual. Often managers are driven by the need to be able to hire programmers with experience in a given language. No doubt they are serving what they perceive to be the best interests of the project or company, and must be respected for that. However, I personally believe this is the most wasteful and erroneous common practice you are likely to encounter. +”Þ‚ÌŽdŽ–iƒnƒbƒJ[j‚ðˆ¤‚·‚éŒÇ“ƂȃvƒƒOƒ‰ƒ}[‚ÍAƒ^ƒXƒN‚Ì‚½‚ß‚Ìŗǂ̌¾Œê‚ð‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÍAŽg—p‚·‚錾Œê‚ð‚Ù‚Æ‚ñ‚ǧŒä‚Å‚«‚Ü‚¹‚ñBˆê”Ê“I‚ÉA‚±‚Ì–â‘è‚ÍA‹Zp“I‚ÈŒˆ’è‚ł͂Ȃ­­Ž¡“I‚ÈŒˆ’è‚ð‰º‚µ‚Ä‚¢‚éæ“±“I‚ÈãŽi‚É‚æ‚Á‚ÄŒˆ’肳‚ê‚Ä‚¨‚èA‚µ‚΂µ‚Î’¼Ú‚Ì’mޝ‚ÅA‚ ‚Ü‚èŽó‚¯“ü‚ê‚ç‚ê‚Ä‚¢‚È‚¢ƒc[ƒ‹‚ð’m‚Á‚Ä‚¢‚邯‚«‚Å‚³‚¦AÅ‚‚Å‚·B‘¼‚ÌꇂɂÍAƒ`[ƒ€ŠÔ‚Ì’cŒ‹‚Ì^‚̉¶Œb‚ÍA‚ ‚é’ö“xƒRƒ~ƒ…ƒjƒeƒB‚̑傫‚³‚É‚æ‚Á‚ÄAŒÂl‚Ì‘I‘ðŽˆ‚ð”rœ‚µ‚Ü‚·B‘½‚­‚Ìê‡Aƒ}ƒl[ƒWƒƒ[‚ÍA“Á’è‚ÌŒ¾Œê‚ł̌oŒ±‚ðŽ‚ÂƒvƒƒOƒ‰ƒ}[‚ðŒÙ‚¤•K—v‚ª‚ ‚邱‚ƂɌ¡ˆø‚³‚ê‚Ü‚·BŠÔˆá‚¢‚È‚­A”Þ‚ç‚̓vƒƒWƒFƒNƒg‚âŠé‹Æ‚ɂƂÁ‚ÄÅ‘P‚Ì—˜‰v‚Æ”Fޝ‚µ‚Ä‚¢‚é‚à‚Ì‚ð’ñ‹Ÿ‚µ‚Ä‚¨‚èA‚»‚ê‚ð‘¸d‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µAŽ„‚ÍŒÂl“I‚É‚ÍA‚±‚ꂪ‚ ‚È‚½‚ª‘˜‹ö‚·‚é‰Â”\«‚Ì‚‚¢Å‚à–³‘ʂŌë‚Á‚½‹¤’ʂ̗ûK‚Å‚ ‚邯ŒÂl“I‚ÉM‚¶‚Ä‚¢‚Ü‚·B -But of course, things are never one-dimensional. Even if a core language is mandated and beyond your control, it is often the case that tools and other programs can and should be written in a different language. If a language is to be embedded (and you should always consider it!) the choice of language will depend a lot on the culture of the users. One should take advantage of this to serve your company or project by using the best language for the job, and in so doing make work more interesting. +‚à‚¿‚ë‚ñA•¨Ž–‚ÍŒˆ‚µ‚ĈꎟŒ³‚ł͂ ‚è‚Ü‚¹‚ñBƒRƒAŒ¾Œê‚ª‹`–±•t‚¯‚ç‚ê‚Ä‚¢‚Ä‚àA‚ ‚È‚½‚̃Rƒ“ƒgƒ[ƒ‹‚͈̔͂𒴂¦‚Ä‚¢‚Ä‚àAƒc[ƒ‹‚⑼‚̃vƒƒOƒ‰ƒ€‚ð•ʂ̌¾Œê‚Å‘‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢ê‡‚ª‚ ‚è‚Ü‚·BŒ¾Œê‚ª–„‚ßž‚Ü‚ê‚éê‡i‚Ü‚½Aí‚Él—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·jAŒ¾Œê‚Ì‘I‘ð‚̓†[ƒU[‚Ì•¶‰»‚ɑ傫‚­ˆË‘¶‚µ‚Ü‚·BŽdŽ–‚ÉÅ‚à“K‚µ‚½Œ¾Œê‚ðŽg—p‚µ‚ĉïŽÐ‚âƒvƒƒWƒFƒNƒg‚ɃT[ƒrƒX‚ð’ñ‹Ÿ‚µAŽdŽ–‚ð‚æ‚è–Ê”’‚­‚·‚邽‚ß‚ÉA‚±‚ê‚ð—˜—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -Programming languages should really be called notations in that learning one is not at all as difficult as learning a natural language. To beginners and to some outsiders 'learning a new language' seems a daunting task; but after you have three under your belt it's really just a question of becoming familiar with the available libraries. One tends to think of a large system that has components in three or four languages as a messy hodgepodge; but I argue that such a system is in many cases stronger than a one-language system in several ways: +ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ÍAŽ©‘RŒ¾Œê‚ðŠw‚ԂقǓ‚­‚È‚¢‚Æ‚¢‚¤“_‚ÅAŽÀۂɂ͕\‹L–@‚ƌĂ΂ê‚é‚ׂ«‚Å‚·B‰SŽÒ‚âˆê•”‚ÌŠO•”‚Ìl‚É‚ÍV‚µ‚¢Œ¾Œê‚ðŠw‚Ԃ͓̂‚¢ì‹Æ‚Å‚·B‚ ‚È‚½‚̃xƒ‹ƒg‚̉º‚É3‚‚̃xƒ‹ƒg‚ª‚ ‚邯A‚»‚ê‚ÍŽÀÛ‚É—˜—p‰Â”\‚ȃ‰ƒCƒuƒ‰ƒŠ‚ÉŠµ‚ê‚邽‚߂̖â‘è‚ɉ߂¬‚Ü‚¹‚ñB 1‚‚ÍA3‚‚܂½‚Í4‚‚̌¾Œê‚ŃRƒ“ƒ|[ƒlƒ“ƒg‚ª¬—‚µ‚Ä‚¢‚邿‚¤‚ȑ傫‚ȃVƒXƒeƒ€‚ðl‚¦‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚»‚̂悤‚ȃVƒXƒeƒ€‚ÍA‘½‚­‚Ìê‡A1‚‚̌¾ŒêƒVƒXƒeƒ€‚æ‚è‚à‚¢‚­‚‚©‚Ì“_‚Å‚æ‚è‹­—͂ł ‚邯Žå’£‚µ‚Ä‚¢‚Ü‚·B -- There is necessarily loose coupling between the components that are written in different notations (though maybe not clean interfaces), -- You can evolve to a new language/platform easily by rewriting each component individually, -- One language may not be a good fit for the overall system - having multiple languages for your modules allows you to pick the right tool for the job. +- ˆÙ‚È‚é•\‹L–@‚Å‹Lq‚³‚ê‚Ä‚¢‚éƒRƒ“ƒ|[ƒlƒ“ƒgŠÔ‚É‚ÍA•K‘R“I‚É‘aŒ‹‡‚ª‘¶Ý‚µ‚Ü‚·i‚½‚¾‚µA‚«‚ê‚¢‚ȃCƒ“ƒ^ƒtƒF[ƒX‚ł͂Ȃ¢‚©‚à‚µ‚ê‚Ü‚¹‚ñjB +- ŠeƒRƒ“ƒ|[ƒlƒ“ƒg‚ðŒÂ•ʂɑ‚«’¼‚·‚±‚Æ‚ÅAV‚µ‚¢Œ¾Œê/ƒvƒ‰ƒbƒgƒtƒH[ƒ€‚ÉŠÈ’P‚Éi‰»‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +- 1‚‚̌¾Œê‚ªƒVƒXƒeƒ€‘S‘̂ɓK‚µ‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·Bƒ‚ƒWƒ…[ƒ‹‚É•¡”‚ÌŒ¾Œê‚ðŽg—p‚·‚邱‚Æ‚ÅA“K؂ȃc[ƒ‹‚ð‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B -Some of these effects may only be psychological; but psychology matters. In the end, the costs of language tyranny outweigh any advantage that it provides. +‚±‚ê‚ç‚̉e‹¿‚̈ꕔ‚ÍS—Šw“I‚È‚à‚̂ɉ߂¬‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBS—Šw‚Íd—v‚Å‚·BŒ‹‹Ç‚̂Ƃ±‚ëAŒ¾Œêê§Žå‹`‚Ì”ï—p‚Í‚»‚ꂪ’ñ‹Ÿ‚·‚é—˜“_‚æ‚è‚àd—v‚Å‚·B Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) From 205f2e5cae94077d190e1c68653c4f0eb644c23e Mon Sep 17 00:00:00 2001 From: borerere Date: Thu, 17 Nov 2016 15:37:10 +0900 Subject: [PATCH 107/149] translate README.md to Japanease --- jp/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jp/README.md b/jp/README.md index 81c3ac2..eec0ba9 100644 --- a/jp/README.md +++ b/jp/README.md @@ -6,16 +6,16 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -## Introduction -To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one. +##‚Í‚¶‚ß‚É +—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂȂ邱‚Ƃ͓‚­A‚‹M‚Å‚·Bƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ÌŽÀŽ¿“I‚ȃrƒWƒ‡ƒ“‚ðŽÀŒ»‚·‚éÅ‚à“‚¢•”•ª‚ÍA“¯—»‚âŒÚ‹q‚ðˆµ‚¤‚±‚Ƃł·BƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ€‚ð‘‚­‚±‚Æ‚Íd—v‚Å‚ ‚èA—D‚ꂽ’m«‚ƃXƒLƒ‹‚ð•K—v‚Æ‚µ‚Ü‚·B‚µ‚©‚µAŽÀÛ‚ÉŽq‹Ÿ‚Ì—V‚тł ‚é‚Ì‚ÍA—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ªAŒÚ‹q‚Æ•”•ª“I‚ÉÓ”C‚ª‚ ‚é–³”‚Ì“¯—»‚Ì—¼•û‚Ì‚½‚߂ɬŒ÷‚·‚éƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðì‚邽‚߂ɕK—v‚È‚±‚Ƃł·B‚±‚̃GƒbƒZƒC‚Å‚ÍA21΂̂Ƃ«‚É’N‚©‚ªŽ„‚Éà–¾‚µ‚½‚©‚Á‚½‚±‚Æ‚ð‰Â”\‚ÈŒÀ‚èŠÈŒ‰‚ɂ܂Ƃ߂悤‚Æ‚µ‚Ä‚¢‚Ü‚·B -This is very subjective and, therefore, this essay is doomed to be personal and somewhat opinionated. I confine myself to problems that a programmer is very likely to have to face in her work. Many of these problems and their solutions are so general to the human condition that I will probably seem preachy. I hope in spite of this that this essay will be useful. +‚±‚ê‚Í”ñí‚ÉŽåŠÏ“I‚È‚à‚̂ł ‚èA‚µ‚½‚ª‚Á‚ÄA‚±‚̘_•¶‚ÍŒÂl“I‚ÅA‘½­‚̈ӌ©‚ð‚à‚Á‚ĉ^–½‚¯‚ç‚ê‚Ü‚·BŽ„‚̓vƒƒOƒ‰ƒ}‚ªŽ©•ª‚ÌŽdŽ–‚Å’¼–Ê‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‰Â”\«‚ª‚‚¢–â‘è‚ÉŽ©•ªŽ©g‚ðŒÀ’肵‚Ä‚¢‚Ü‚·B‚±‚ê‚ç‚Ì–â‘è‚Ì‘½‚­‚Æ‚»‚̉ðŒˆô‚Ì‘½‚­‚ÍlŠÔ‚Ìó‘Ô‚É”ñí‚Ɉê”Ê“I‚È‚à‚̂ł ‚èA‚¨‚»‚ç‚­Ž„‚Íà“¾—Í‚ª‚ ‚邿‚¤‚ÉŒ©‚¦‚Ü‚·B‚»‚ê‚É‚à‚©‚©‚í‚炸AŽ„‚Í‚±‚̃GƒbƒZƒC‚ª–𗧂‚±‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B -Computer programming is taught in courses. The excellent books: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], and Extreme Programming Explained [XP99] all teach computer programming and the larger issues of being a good programmer. The essays of Paul Graham [PGSite] and Eric Raymond [Hacker] should certainly be read before or along with this article. This essay differs from those excellent works by emphasizing social problems and comprehensively summarizing the entire set of necessary skills as I see them. +ƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚̓R[ƒX‚Å‹³‚¦‚ç‚ê‚Ü‚·B—D‚ꂽ–{FPragmatic Programmer [Prag99]ACode Complete [CodeC93]ARapid Development [RDev96]AExtreme Programming Explained [XP99]‚Í‚·‚ׂăRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Æ—D‚ꂽƒvƒƒOƒ‰ƒ}[‚Å‚ ‚邯‚¢‚¤‘å‚«‚È–â‘è‚ð‹³‚¦‚Ä‚¢‚Ü‚·Bƒ|[ƒ‹EƒOƒ‰ƒnƒ€iPGSitej‚ƃGƒŠƒbƒNEƒŒƒCƒ‚ƒ“ƒh[ƒnƒbƒJ[]‚̃GƒbƒZƒC‚ÍA‚±‚Ì‹LŽ–‚Ì‘O‚ÉA‚Ü‚½‚Í‚±‚Ì‹LŽ–‚ƂƂà‚ɓǂނׂ«‚Å‚·B‚±‚̃GƒbƒZƒC‚ÍAŽÐ‰ï–â‘è‚ð‹­’²‚µA•K—v‚ȃXƒLƒ‹‘S‘Ì‚ð•“I‚É—v–ñ‚·‚邱‚Ƃɂæ‚Á‚ÄA‚»‚ê‚ç‚Ì—D‚ꂽì•i‚Ƃ͈قȂè‚Ü‚·B -In this essay the term boss is used to refer to whomever gives you projects to do. I use the words business, company, and tribe, synonymously except that business connotes moneymaking, company connotes the modern workplace and tribe is generally the people you share loyalty with. +‚±‚̃GƒbƒZƒC‚Å‚ÍAƒ{ƒX‚Æ‚¢‚¤Œ¾—t‚ÍA‚ ‚È‚½‚ª‚·‚éƒvƒƒWƒFƒNƒg‚ð’ñ‹Ÿ‚·‚él‚ðŽw‚·‚̂Ɏg—p‚³‚ê‚Ü‚·BŽ„‚̓rƒWƒlƒXA‰ïŽÐA•”‘°‚Æ‚¢‚¤Œ¾—t‚𓯋`Œê‚Æ‚µ‚ÄŽg‚Á‚Ä‚¢‚Ü‚·‚ªAƒrƒWƒlƒX‚Í‚¨‹à‚ð•ø‚­‚±‚Æ‚ðˆÃަ‚µ‚Ü‚·‚ªA‰ïŽÐ‚ÍŒ»‘ã‚ÌEê‚ðˆÃަ‚µA•”‘°‚͈ê”Ê“I‚É‚ ‚È‚½‚ª’‰½S‚𕪂©‚¿‡‚¤lX‚Å‚·B -Welcome to the tribe. +•”‘°‚ւ悤‚±‚»B ## Contents From 5e5c72e5d46c153ccd014cf8bf7ddae9eddac46d Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Fri, 18 Nov 2016 19:16:26 +0000 Subject: [PATCH 108/149] Updated readme to include link to Japanese version --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 71222ee..ceb0e4d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # How to be a Programmer: Community Version -[//]: # (Version:1.0.0) +[//]: # (Version:1.1.0) Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read @@ -23,7 +23,7 @@ Welcome to the tribe. ## Contents -**[Also available in Chinese](zh/README.md)** +**Also available in [Chinese](zh/README.md) and [Japanese](jp/README.md)** 1. [Beginner](en/1-Beginner) - Personal Skills From 86329f7f4a304048383cae4cb7767f197508679d Mon Sep 17 00:00:00 2001 From: Eric Tendian Date: Tue, 21 Mar 2017 12:44:20 -0500 Subject: [PATCH 109/149] URL encoding Markdown links with spaces (English version) --- README.md | 132 ++++++++++++++++++------------------ en/1-Beginner/README.md | 46 ++++++------- en/2-Intermediate/README.md | 48 ++++++------- en/3-Advanced/README.md | 34 +++++----- 4 files changed, 130 insertions(+), 130 deletions(-) diff --git a/README.md b/README.md index ceb0e4d..736517e 100644 --- a/README.md +++ b/README.md @@ -27,79 +27,79 @@ Welcome to the tribe. 1. [Beginner](en/1-Beginner) - Personal Skills - - [Learn to Debug](en/1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](en/1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](en/1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [Learn to Debug](en/1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + - [How to Debug by Splitting the Problem Space](en/1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [How to Remove an Error](en/1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [How to Debug Using a Log](en/1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [How to Understand Performance Problems](en/1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [How to Fix Performance Problems](en/1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [How to Optimize Loops](en/1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [How to Deal with I/O Expense](en/1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [How to Manage Memory](en/1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [How to Deal with Intermittent Bugs](en/1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [How to Learn Design Skills](en/1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [How to Conduct Experiments](en/1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - Team Skills - - [Why Estimation is Important](en/1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](en/1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](en/1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](en/1-Beginner/Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + - [Why Estimation is Important](en/1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [How to Estimate Programming Time](en/1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [How to Find Out Information](en/1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [How to Utilize People as Information Sources](en/1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [How to Document Wisely](en/1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + - [How to Work with Poor Code](en/1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [How to Use Source Code Control](en/1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [How to Unit Test](en/1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + - [Take Breaks when Stumped](en/1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [How to Recognize When to Go Home](en/1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [How to Deal with Difficult People](en/1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) 2. [Intermediate](en/2-Intermediate) - Personal Skills - - [How to Stay Motivated](en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](en/2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](en/2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](en/2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](en/2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](en/2-Intermediate/Personal-Skills/11-How to analyze data.md) + - [How to Stay Motivated](en/2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [How to be Widely Trusted](en/2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [How to Tradeoff Time vs. Space](en/2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [How to Stress Test](en/2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + - [How to Balance Brevity and Abstraction](en/2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [How to Learn New Skills](en/2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [Learn to Type](en/2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + - [How to Do Integration Testing](en/2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [Communication Languages](en/2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + - [Heavy Tools](en/2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + - [How to analyze data](en/2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) - Team Skills - - [How to Manage Development Time](en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [How to Manage Development Time](en/2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [How to Manage Third-Party Software Risks](en/2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [How to Manage Consultants](en/2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [How to Communicate the Right Amount](en/2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [How to Disagree Honestly and Get Away with It](en/2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](en/2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [How to Manage Software System Dependence](en/2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [How to Decide if Software is Too Immature](en/2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [How to Make a Buy vs. Build Decision](en/2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How%20to%20Grow%20zProfessionally.md) + - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) 3. [Advanced](en/3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](en/3-Advanced/Technical-Judgment/03-Choosing Languages.md) - - Compromising Wisely - - [How to Fight Schedule Pressure](en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) - - Serving Your Team - - [How to Develop Talent](en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](en/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [How to Utilize Embedded Languages](en/3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [Choosing Languages](en/3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - Compromising Wisely + - [How to Fight Schedule Pressure](en/3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [How to Understand the User](en/3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [How to Get a Promotion](en/3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - Serving Your Team + - [How to Develop Talent](en/3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [How to Choose What to Work On](en/3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [How to Get the Most From Your Team-mates](en/3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [How to Divide Problems Up](en/3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [How to Handle Boring Tasks](en/3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [How to Gather Support for a Project](en/3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [How to Grow a System](en/3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [How to Communicate Well](en/3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [How to Deal with Managerial Myths](en/3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [How to Deal with Organizational Chaos](en/3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) 4. [Glossary](en/GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](en/5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](en/6-History.md) diff --git a/en/1-Beginner/README.md b/en/1-Beginner/README.md index 9baadf0..22bbed7 100644 --- a/en/1-Beginner/README.md +++ b/en/1-Beginner/README.md @@ -1,27 +1,27 @@ # 1. Beginner [//]: # (Version:1.0.0) - Personal Skills - - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) + - [Learn to Debug](Personal-Skills/01-Learn%20To%20Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [How to Remove an Error](Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [How to Manage Memory](Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - Team Skills - - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](Team-Skills/11-How to Deal with Difficult People.md) \ No newline at end of file + - [Why Estimation is Important](Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [How to Find Out Information](Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [How to Document Wisely](Team-Skills/05-How%20to%20Document%20Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [How to Use Source Code Control](Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [How to Unit Test](Team-Skills/08-How%20to%20Unit%20Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [How to Deal with Difficult People](Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) diff --git a/en/2-Intermediate/README.md b/en/2-Intermediate/README.md index d33316e..851df65 100644 --- a/en/2-Intermediate/README.md +++ b/en/2-Intermediate/README.md @@ -1,29 +1,29 @@ # 2. Intermediate [//]: # (Version:1.0.0) - Personal Skills - - [How to Stay Motivated](Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](Personal-Skills/11-How to analyze data.md) + - [How to Stay Motivated](Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [How to be Widely Trusted](Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [How to Tradeoff Time vs. Space](Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [How to Stress Test](Personal-Skills/04-How%20to%20Stress%20Test.md) + - [How to Balance Brevity and Abstraction](Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [How to Learn New Skills](Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [Learn to Type](Personal-Skills/07-Learn%20to%20Type.md) + - [How to Do Integration Testing](Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [Communication Languages](Personal-Skills/09-Communication%20Languages.md) + - [Heavy Tools](Personal-Skills/10-Heavy%20Tools.md) + - [How to analyze data](Personal-Skills/11-How%20to%20analyze%20data.md) - Team Skills - - [How to Manage Development Time](Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [How to Manage Development Time](Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [How to Manage Third-Party Software Risks](Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [How to Manage Consultants](Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [How to Communicate the Right Amount](Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](Judgment/08-How to Talk to Non-Engineers.md) \ No newline at end of file + - [How to Tradeoff Quality Against Development Time](Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [How to Manage Software System Dependence](Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [How to Decide if Software is Too Immature](Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [How to Make a Buy vs. Build Decision](Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [How to Grow Professionally](Judgment/05-How%20to%20Grow%20zProfessionally.md) + - [How to Evaluate Interviewees](Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [How to Talk to Non-Engineers](Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) diff --git a/en/3-Advanced/README.md b/en/3-Advanced/README.md index fb65816..de5d52a 100644 --- a/en/3-Advanced/README.md +++ b/en/3-Advanced/README.md @@ -1,22 +1,22 @@ # 3. Advanced [//]: # (Version:1.0.0) - Technological Judgment - - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](Technical-Judgment/03-Choosing Languages.md) + - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [How to Utilize Embedded Languages](Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [Choosing Languages](Technical-Judgment/03-Choosing%20Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](Compromising-Wisely/03-How to Get a Promotion.md) + - [How to Fight Schedule Pressure](Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [How to Understand the User](Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [How to Get a Promotion](Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) - Serving Your Team - - [How to Develop Talent](Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) \ No newline at end of file + - [How to Develop Talent](Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [How to Choose What to Work On](Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [How to Divide Problems Up](Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [How to Handle Boring Tasks](Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [How to Gather Support for a Project](Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [How to Grow a System](Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [How to Communicate Well](Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [How to Deal with Managerial Myths](Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) From 4dc3ef0d4bb5c4efbcd28d0a3108a443855f3836 Mon Sep 17 00:00:00 2001 From: Eric Tendian Date: Tue, 21 Mar 2017 12:44:30 -0500 Subject: [PATCH 110/149] URL encoding Markdown links with spaces (Japanese version) --- jp/1-Beginner/README.md | 46 +++++++++++++++++------------------ jp/2-Intermediate/README.md | 48 ++++++++++++++++++------------------- jp/3-Advanced/README.md | 34 +++++++++++++------------- 3 files changed, 64 insertions(+), 64 deletions(-) diff --git a/jp/1-Beginner/README.md b/jp/1-Beginner/README.md index 9baadf0..22bbed7 100644 --- a/jp/1-Beginner/README.md +++ b/jp/1-Beginner/README.md @@ -1,27 +1,27 @@ # 1. Beginner [//]: # (Version:1.0.0) - Personal Skills - - [Learn to Debug](Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](Personal-Skills/12-How to Conduct Experiments.md) + - [Learn to Debug](Personal-Skills/01-Learn%20To%20Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [How to Remove an Error](Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [How to Manage Memory](Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - Team Skills - - [Why Estimation is Important](Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](Team-Skills/11-How to Deal with Difficult People.md) \ No newline at end of file + - [Why Estimation is Important](Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [How to Find Out Information](Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [How to Document Wisely](Team-Skills/05-How%20to%20Document%20Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [How to Use Source Code Control](Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [How to Unit Test](Team-Skills/08-How%20to%20Unit%20Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [How to Deal with Difficult People](Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) diff --git a/jp/2-Intermediate/README.md b/jp/2-Intermediate/README.md index d33316e..851df65 100644 --- a/jp/2-Intermediate/README.md +++ b/jp/2-Intermediate/README.md @@ -1,29 +1,29 @@ # 2. Intermediate [//]: # (Version:1.0.0) - Personal Skills - - [How to Stay Motivated](Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](Personal-Skills/11-How to analyze data.md) + - [How to Stay Motivated](Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [How to be Widely Trusted](Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [How to Tradeoff Time vs. Space](Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [How to Stress Test](Personal-Skills/04-How%20to%20Stress%20Test.md) + - [How to Balance Brevity and Abstraction](Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [How to Learn New Skills](Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [Learn to Type](Personal-Skills/07-Learn%20to%20Type.md) + - [How to Do Integration Testing](Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [Communication Languages](Personal-Skills/09-Communication%20Languages.md) + - [Heavy Tools](Personal-Skills/10-Heavy%20Tools.md) + - [How to analyze data](Personal-Skills/11-How%20to%20analyze%20data.md) - Team Skills - - [How to Manage Development Time](Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [How to Manage Development Time](Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [How to Manage Third-Party Software Risks](Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [How to Manage Consultants](Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [How to Communicate the Right Amount](Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](Judgment/08-How to Talk to Non-Engineers.md) \ No newline at end of file + - [How to Tradeoff Quality Against Development Time](Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [How to Manage Software System Dependence](Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [How to Decide if Software is Too Immature](Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [How to Make a Buy vs. Build Decision](Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [How to Grow Professionally](Judgment/05-How%20to%20Grow%20zProfessionally.md) + - [How to Evaluate Interviewees](Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [How to Talk to Non-Engineers](Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) diff --git a/jp/3-Advanced/README.md b/jp/3-Advanced/README.md index fb65816..de5d52a 100644 --- a/jp/3-Advanced/README.md +++ b/jp/3-Advanced/README.md @@ -1,22 +1,22 @@ # 3. Advanced [//]: # (Version:1.0.0) - Technological Judgment - - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](Technical-Judgment/03-Choosing Languages.md) + - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [How to Utilize Embedded Languages](Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [Choosing Languages](Technical-Judgment/03-Choosing%20Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](Compromising-Wisely/03-How to Get a Promotion.md) + - [How to Fight Schedule Pressure](Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [How to Understand the User](Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [How to Get a Promotion](Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) - Serving Your Team - - [How to Develop Talent](Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) \ No newline at end of file + - [How to Develop Talent](Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [How to Choose What to Work On](Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [How to Divide Problems Up](Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [How to Handle Boring Tasks](Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [How to Gather Support for a Project](Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [How to Grow a System](Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [How to Communicate Well](Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [How to Deal with Managerial Myths](Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) From 305ee4013d9afcbad397d9d118e40c7966b551bc Mon Sep 17 00:00:00 2001 From: Eric Tendian Date: Tue, 21 Mar 2017 12:47:36 -0500 Subject: [PATCH 111/149] URL encoding Markdown links with spaces (Chinese version) --- zh/1-Beginner/README.md | 46 ++++++------- zh/2-Intermediate/README.md | 50 +++++++------- zh/3-Advanced/README.md | 40 +++++------ zh/README.md | 132 ++++++++++++++++++------------------ 4 files changed, 134 insertions(+), 134 deletions(-) diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md index cb320d8..1033674 100644 --- a/zh/1-Beginner/README.md +++ b/zh/1-Beginner/README.md @@ -1,27 +1,27 @@ # 1. 入门 [//]: # (Version:1.0.0) - 个人技能 - - [学会 Debug](Personal-Skills/01-Learn To Debug.md) - - [如何通过分割问题 Debug](Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除一个错误](Personal-Skills/03-How to Remove an Error.md) - - [如何使用日志调试](Personal-Skills/04-How to Debug Using a Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How to Understand Performance Problems.md) - - [如何解决性能问题](Personal-Skills/06-How to Fix Performance Problems.md) - - [如何优化循环](Personal-Skills/07-How to Optimize Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How to Deal with IO Expense.md) - - [如何管ç†å†…å­˜](Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [如何学习设计技能](Personal-Skills/11-How to Learn Design Skills.md) - - [如何进行实验](Personal-Skills/12-How to Conduct Experiments.md) + - [学会 Debug](Personal-Skills/01-Learn%20To%20Debug.md) + - [如何通过分割问题 Debug](Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [如何移除一个错误](Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [如何使用日志调试](Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [如何解决性能问题](Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [如何优化循环](Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [如何管ç†å†…å­˜](Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [如何学习设计技能](Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [如何进行实验](Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - 团队技能 - - [为什么预估很é‡è¦](Team-Skills/01-Why Estimation is Important.md) - - [如何预估编程时间](Team-Skills/02-How to Estimate Programming Time.md) - - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How to Find Out Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How to Utilize People as Information Sources.md) - - [如何优雅地写文档](Team-Skills/05-How to Document Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How to Work with Poor Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How to Use Source Code Control.md) - - [如何进行å•元测试](Team-Skills/08-How to Unit Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take Breaks when Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How to Recognize When to Go Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How to Deal with Difficult People.md) + - [为什么预估很é‡è¦](Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [如何预估编程时间](Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [如何优雅地写文档](Team-Skills/05-How%20to%20Document%20Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [如何进行å•元测试](Team-Skills/08-How%20to%20Unit%20Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) diff --git a/zh/2-Intermediate/README.md b/zh/2-Intermediate/README.md index 68194cc..36b0dee 100644 --- a/zh/2-Intermediate/README.md +++ b/zh/2-Intermediate/README.md @@ -1,29 +1,29 @@ # 2. 进阶 [//]: # (Version:1.0.0) - 个人技能 - - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How to Stay Motivated.md) - - [如何被广泛信任](Personal-Skills/02-How to be Widely Trusted.md) - - [如何在时间和空间æƒè¡¡](Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [如何进行压力测试](Personal-Skills/04-How to Stress Test.md) - - [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [如何学习新技能](Personal-Skills/06-How to Learn New Skills.md) - - [学会打字](Personal-Skills/07-Learn to Type.md) - - [如何åšé›†æˆæµ‹è¯•](Personal-Skills/08-How to Do Integration Testing.md) - - [沟通语言](Personal-Skills/09-Communication Languages.md) - - [é‡åž‹å·¥å…·](Personal-Skills/10-Heavy Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](Personal-Skills/11-How to analyze data.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [如何进行压力测试](Personal-Skills/04-How%20to%20Stress%20Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [如何学习新技能](Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [学会打字](Personal-Skills/07-Learn%20to%20Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [交æµè¯­è¨€](Personal-Skills/09-Communication%20Languages.md) + - [é‡åž‹å·¥å…·](Personal-Skills/10-Heavy%20Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](Personal-Skills/11-How%20to%20analyze%20data.md) - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](Team-Skills/01-How to Manage Development Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶çš„风险](Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [如何管ç†å’¨è¯¢å¸ˆ](Team-Skills/03-How to Manage Consultants.md) - - [如何适é‡äº¤æµ](Team-Skills/04-How to Communicate the Right Amount.md) - - [如何直言å对æ„è§ä»¥åŠé¿å…如此](Team-Skills/05-How to Disagree Honestly and Get Away with It.md) -- 判断 - - [如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´æƒè¡¡](Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](Judgment/02-How to Manage Software System Dependence.md) - - [如何判断一个软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How to Decide if Software is Too Immature.md) - - [如何决定购买还是构建](Judgment/04-How to Make a Buy vs Build Decision.md) - - [如何专业地æˆé•¿](Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•者](Judgment/06-How to Evaluate Interviewees.md) - - [如何知é“何时实施昂贵的计算机科学](Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How to Talk to Non-Engineers.md) + - [如何管ç†å¼€å‘æ—¶é—´](Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [如何管ç†å’¨è¯¢](Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [如何适度交æµ](Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) +- 评判 + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [如何决定购买还是构建](Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [如何专业地æˆé•¿](Judgment/05-How%20to%20Grow%20Professionally.md) + - [如何评估é¢è¯•者](Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index 015ea4e..4eb98e4 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -1,22 +1,22 @@ # 3. 高级 [//]: # (Version:1.0.0) -- 技术评审 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„地方](Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [如何使用嵌入å¼è¯­è¨€](Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [选择语言](Technical-Judgment/03-Choosing Languages.md) -- 明智地妥å - - [如何与时间压力斗争](Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How to Understand the User.md) - - [如何得到晋å‡](Compromising-Wisely/03-How to Get a Promotion.md) -- æœåŠ¡ä½ ä»¬çš„å›¢é˜Ÿ - - [如何å‘展你们的æ‰èƒ½](Serving-Your-Team/01-How to Develop Talent.md) - - [如何选择工作的内容](Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何让你队å‹çš„价值最大化](Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何划分问题](Serving-Your-Team/04-How to Divide Problems Up.md) - - [å¦‚ä½•å¤„ç†æ— èŠçš„任务](Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How to Gather Support for a Project.md) - - [如何å‘展一个系统](Serving-Your-Team/07-How to Grow a System.md) - - [如何有效地沟通](Serving-Your-Team/08-How to Communicate Well.md) - - [如何告诉别人他们ä¸åƒçŸ¥é“的东西](Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [如何处ç†ç»„织混乱](Serving-Your-Team/11-How to Deal with Organizational Chaos.md) +- 技术评判 + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [如何使用嵌入型语言](Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [选择语言](Technical-Judgment/03-Choosing%20Languages.md) +- 机智地妥å + - [如何与时间压力作斗争](Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [如何获得晋å‡](Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) +- æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [如何选择工作内容](Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [如何让你队å‹çš„价值最大化](Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [如何划分问题](Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [如何å‘展一个系统](Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [如何有效地沟通](Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) diff --git a/zh/README.md b/zh/README.md index f11f8cc..e27c6ea 100644 --- a/zh/README.md +++ b/zh/README.md @@ -30,79 +30,79 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens 1. [入门](1-Beginner) - 个人技能 - - [学会 Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除一个错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [如何使用日志调试](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [如何使用日志调试](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - 团队技能 - - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [如何预估编程时间](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [如何优雅地写文档](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) 2. [进阶](2-Intermediate) - 个人技能 - - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [如何学习新技能](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - 评判 - - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) 3. [高级](3-Advanced) - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) - - 机智地妥å - - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) - - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - 机智地妥å + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) From 9451022bffb38b7fbda36c61d0b7580434738ca0 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Wed, 22 Mar 2017 11:33:45 +0000 Subject: [PATCH 112/149] Updated all links to be url-endcoded --- .../Personal-Skills/01-Learn To Debug.md | 2 +- ...to Debug by Splitting the Problem Space.md | 2 +- .../03-How to Remove an Error.md | 2 +- .../04-How to Debug Using a Log.md | 2 +- ...-How to Understand Performance Problems.md | 2 +- .../06-How to Fix Performance Problems.md | 2 +- .../07-How to Optimize Loops.md | 2 +- .../08-How to Deal with IO Expense.md | 2 +- .../09-How to Manage Memory.md | 2 +- .../10-How to Deal with Intermittent Bugs.md | 2 +- .../11-How to Learn Design Skills.md | 2 +- .../12-How to Conduct Experiments.md | 2 +- .../01-Why Estimation is Important.md | 2 +- .../02-How to Estimate Programming Time.md | 2 +- .../03-How to Find Out Information.md | 2 +- ...o Utilize People as Information Sources.md | 2 +- .../Team-Skills/05-How to Document Wisely.md | 2 +- .../06-How to Work with Poor Code.md | 2 +- .../07-How to Use Source Code Control.md | 2 +- .../Team-Skills/08-How to Unit Test.md | 2 +- .../10-How to Recognize When to Go Home.md | 2 +- ...adeoff Quality Against Development Time.md | 2 +- ...ow to Manage Software System Dependence.md | 2 +- ...w to Decide if Software is Too Immature.md | 2 +- .../04-How to Make a Buy vs Build Decision.md | 2 +- .../Judgment/05-How to Grow Professionally.md | 2 +- .../06-How to Evaluate Interviewees.md | 2 +- ...ow When to Apply Fancy Computer Science.md | 2 +- .../01-How to Stay Motivated.md | 2 +- .../02-How to be Widely Trusted.md | 2 +- .../03-How to Tradeoff Time vs Space.md | 2 +- .../Personal-Skills/04-How to Stress Test.md | 2 +- ...-How to Balance Brevity and Abstraction.md | 2 +- .../06-How to Learn New Skills.md | 2 +- .../Personal-Skills/07-Learn to Type.md | 2 +- .../08-How to Do Integration Testing.md | 2 +- .../09-Communication Languages.md | 2 +- .../Personal-Skills/10-Heavy Tools.md | 2 +- .../Personal-Skills/11-How to analyze data.md | 2 +- .../01-How to Manage Development Time.md | 2 +- ...ow to Manage Third-Party Software Risks.md | 2 +- .../03-How to Manage Consultants.md | 2 +- .../04-How to Communicate the Right Amount.md | 2 +- ... Disagree Honestly and Get Away with It.md | 2 +- .../01-How to Fight Schedule Pressure.md | 2 +- .../02-How to Understand the User.md | 2 +- .../03-How to Get a Promotion.md | 2 +- .../01-How to Develop Talent.md | 2 +- .../02-How to Choose What to Work On.md | 2 +- ...How to Get the Most From Your Teammates.md | 2 +- .../04-How to Divide Problems Up.md | 2 +- .../05-How to Handle Boring Tasks.md | 2 +- .../06-How to Gather Support for a Project.md | 2 +- .../07-How to Grow a System.md | 2 +- .../08-How to Communicate Well.md | 2 +- ...l People Things They Don't Want to Hear.md | 2 +- .../10-How to Deal with Managerial Myths.md | 2 +- en/README.md | 128 ++++++++-------- en/SUMMARY.md | 128 ++++++++-------- .../Personal-Skills/01-Learn To Debug.md | 22 +-- ...to Debug by Splitting the Problem Space.md | 2 +- .../03-How to Remove an Error.md | 8 +- .../04-How to Debug Using a Log.md | 14 +- ...-How to Understand Performance Problems.md | 10 +- .../06-How to Fix Performance Problems.md | 12 +- .../07-How to Optimize Loops.md | 20 +-- .../08-How to Deal with IO Expense.md | 12 +- .../09-How to Manage Memory.md | 14 +- .../10-How to Deal with Intermittent Bugs.md | 16 +- .../11-How to Learn Design Skills.md | 8 +- .../12-How to Conduct Experiments.md | 26 ++-- .../01-Why Estimation is Important.md | 14 +- .../02-How to Estimate Programming Time.md | 20 +-- .../03-How to Find Out Information.md | 18 +-- ...o Utilize People as Information Sources.md | 14 +- .../Team-Skills/05-How to Document Wisely.md | 24 +-- .../06-How to Work with Poor Code.md | 10 +- .../07-How to Use Source Code Control.md | 8 +- .../Team-Skills/08-How to Unit Test.md | 8 +- .../09-Take Breaks when Stumped.md | 4 +- .../10-How to Recognize When to Go Home.md | 18 +-- ...adeoff Quality Against Development Time.md | 12 +- ...ow to Manage Software System Dependence.md | 14 +- ...w to Decide if Software is Too Immature.md | 26 ++-- .../04-How to Make a Buy vs Build Decision.md | 20 +-- .../Judgment/05-How to Grow Professionally.md | 10 +- .../06-How to Evaluate Interviewees.md | 14 +- ...ow When to Apply Fancy Computer Science.md | 16 +- .../01-How to Stay Motivated.md | 16 +- .../02-How to be Widely Trusted.md | 6 +- .../03-How to Tradeoff Time vs Space.md | 14 +- .../Personal-Skills/04-How to Stress Test.md | 12 +- ...-How to Balance Brevity and Abstraction.md | 8 +- .../06-How to Learn New Skills.md | 12 +- .../Personal-Skills/07-Learn to Type.md | 4 +- .../08-How to Do Integration Testing.md | 6 +- .../09-Communication Languages.md | 10 +- .../Personal-Skills/10-Heavy Tools.md | 18 +-- .../Personal-Skills/11-How to analyze data.md | 10 +- .../01-How to Manage Development Time.md | 10 +- ...ow to Manage Third-Party Software Risks.md | 10 +- .../03-How to Manage Consultants.md | 8 +- .../04-How to Communicate the Right Amount.md | 6 +- ... Disagree Honestly and Get Away with It.md | 10 +- .../01-How to Fight Schedule Pressure.md | 10 +- .../02-How to Understand the User.md | 18 +-- .../03-How to Get a Promotion.md | 12 +- .../01-How to Develop Talent.md | 22 +-- .../02-How to Choose What to Work On.md | 4 +- ...How to Get the Most From Your Teammates.md | 14 +- .../04-How to Divide Problems Up.md | 8 +- .../05-How to Handle Boring Tasks.md | 6 +- .../06-How to Gather Support for a Project.md | 4 +- .../07-How to Grow a System.md | 22 +-- .../08-How to Communicate Well.md | 10 +- ...l People Things They Don't Want to Hear.md | 8 +- .../10-How to Deal with Managerial Myths.md | 16 +- ...ow to Tell the Hard From the Impossible.md | 8 +- .../02-How to Utilize Embedded Languages.md | 10 +- .../03-Choosing Languages.md | 16 +- jp/README.md | 140 +++++++++--------- jp/SUMMARY.md | 128 ++++++++-------- .../Personal-Skills/01-Learn To Debug.md | 4 +- ...to Debug by Splitting the Problem Space.md | 2 +- .../03-How to Remove an Error.md | 2 +- .../04-How to Debug Using a Log.md | 2 +- ...-How to Understand Performance Problems.md | 2 +- .../06-How to Fix Performance Problems.md | 2 +- .../07-How to Optimize Loops.md | 2 +- .../08-How to Deal with IO Expense.md | 2 +- .../09-How to Manage Memory.md | 2 +- .../10-How to Deal with Intermittent Bugs.md | 2 +- .../11-How to Learn Design Skills.md | 2 +- .../12-How to Conduct Experiments.md | 2 +- .../01-Why Estimation is Important.md | 2 +- .../02-How to Estimate Programming Time.md | 2 +- .../03-How to Find Out Information.md | 2 +- ...o Utilize People as Information Sources.md | 2 +- .../Team-Skills/05-How to Document Wisely.md | 2 +- .../06-How to Work with Poor Code.md | 2 +- .../07-How to Use Source Code Control.md | 2 +- .../Team-Skills/08-How to Unit Test.md | 2 +- .../09-Take Breaks when Stumped.md | 2 +- .../10-How to Recognize When to Go Home.md | 2 +- ...adeoff Quality Against Development Time.md | 2 +- ...ow to Manage Software System Dependence.md | 2 +- ...w to Decide if Software is Too Immature.md | 2 +- .../04-How to Make a Buy vs Build Decision.md | 2 +- .../Judgment/05-How to Grow Professionally.md | 2 +- .../06-How to Evaluate Interviewees.md | 2 +- ...ow When to Apply Fancy Computer Science.md | 2 +- .../01-How to Stay Motivated.md | 2 +- .../02-How to be Widely Trusted.md | 2 +- .../03-How to Tradeoff Time vs Space.md | 2 +- .../Personal-Skills/04-How to Stress Test.md | 2 +- ...-How to Balance Brevity and Abstraction.md | 2 +- .../06-How to Learn New Skills.md | 2 +- .../Personal-Skills/07-Learn to Type.md | 2 +- .../08-How to Do Integration Testing.md | 2 +- .../09-Communication Languages.md | 2 +- .../Personal-Skills/10-Heavy Tools.md | 2 +- .../Personal-Skills/11-How to analyze data.md | 2 +- .../01-How to Manage Development Time.md | 2 +- ...ow to Manage Third-Party Software Risks.md | 2 +- .../03-How to Manage Consultants.md | 2 +- .../04-How to Communicate the Right Amount.md | 2 +- ... Disagree Honestly and Get Away with It.md | 2 +- .../01-How to Fight Schedule Pressure.md | 2 +- .../02-How to Understand the User.md | 2 +- .../03-How to Get a Promotion.md | 2 +- .../01-How to Develop Talent.md | 2 +- .../02-How to Choose What to Work On.md | 2 +- ...How to Get the Most From Your Teammates.md | 2 +- .../04-How to Divide Problems Up.md | 2 +- .../05-How to Handle Boring Tasks.md | 2 +- .../06-How to Gather Support for a Project.md | 2 +- .../07-How to Grow a System.md | 2 +- .../08-How to Communicate Well.md | 2 +- ...l People Things They Don't Want to Hear.md | 2 +- .../10-How to Deal with Managerial Myths.md | 2 +- ...ow to Tell the Hard From the Impossible.md | 2 +- .../02-How to Utilize Embedded Languages.md | 2 +- .../03-Choosing Languages.md | 2 +- zh/SUMMARY.md | 128 ++++++++-------- 184 files changed, 826 insertions(+), 826 deletions(-) diff --git a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md index b073d2d..67a4119 100644 --- a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/en/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -18,4 +18,4 @@ Debugging tools are wonderful when they are stable and available, but printlinin Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. -Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) +Next [How to Debug by Splitting the Problem Space](02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) diff --git a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index f8fbe61..03a18d6 100644 --- a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -12,4 +12,4 @@ To a true beginner, the space of all possible errors looks like every line in th Once you have evenly subdivided the space of all that can go wrong, you must try to decide in which space the error lies. In the simple case where the mystery is: ‘Which single unknown line makes my program crash?’, you can ask yourself: ‘Is the unknown line executed before or after this line that I judge to be executed in the middle of the running program?’ Usually you will not be so lucky as to know that the error exists in a single line, or even a single block. Often the mystery will be more like: ‘Either there is a pointer in that graph that points to the wrong node, or my algorithm that adds up the variables in that graph doesn't work.’ In that case you may have to write a small program to check that the pointers in the graph are all correct in order to decide which part of the subdivided mystery can be eliminated. -Next [How to Remove an Error](03-How to Remove an Error.md) +Next [How to Remove an Error](03-How%20to%20Remove%20an%20Error.md) diff --git a/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md index d88eb5d..89a6b64 100644 --- a/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -6,4 +6,4 @@ In fixing a bug, you want to make the smallest change that fixes the bug. You ma Sometimes, there are really several bugs that look like one. It is up to you to define the bugs and fix them one at a time. Sometimes it is unclear what the program should do or what the original author intended. In this case, you must exercise your experience and judgment and assign your own meaning to the code. Decide what it should do, and comment it or clarify it in some way and then make the code conform to your meaning. This is an intermediate or advanced skill that is sometimes harder than writing the original function in the first place, but the real world is often messy. You may have to fix a system you cannot rewrite. -Next [How to Debug Using a Log](04-How to Debug Using a Log.md) \ No newline at end of file +Next [How to Debug Using a Log](04-How%20to%20Debug%20Using%20a%20Log.md) \ No newline at end of file diff --git a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index 1cc3ab9..2a2e776 100644 --- a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -10,4 +10,4 @@ The amount to output into the log is always a compromise between information and If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. -Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) +Next [How to Understand Performance Problems](05-How%20to%20Understand%20Performance%20Problems.md) diff --git a/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index 72e26d6..f29616f 100644 --- a/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -8,4 +8,4 @@ There are many dimensions to the performance of a computer system, and many reso Contention for shared resources that are synchronized can cause deadlock and starvation. Deadlock is the inability to proceed because of improper synchronization or resource demands. Starvation is the failure to schedule a component properly. If it can be at all anticipated, it is best to have a way of measuring this contention from the start of your project. Even if this contention does not occur, it is very helpful to be able to assert that with confidence. -Next [How to Fix Performance Problems](06-How to Fix Performance Problems.md) +Next [How to Fix Performance Problems](06-How%20to%20Fix%20Performance%20Problems.md) diff --git a/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index fbed002..9d5ef6e 100644 --- a/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -10,4 +10,4 @@ Often, the bottlenecks in performance will be an example of counting cows by cou What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down. You can continue making small improvements or you can seriously redesign a system or a subsystem. (This is a great opportunity to use your skills as a good programmer, not only in the new design but also in convincing your boss that this is a good idea.) However, before you argue for the redesign of a subsystem, you should ask yourself whether or not your proposal will make it five to ten time better. -Next [How to Optimize Loops](07-How to Optimize Loops.md) +Next [How to Optimize Loops](07-How%20to%20Optimize%20Loops.md) diff --git a/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index f73305d..41d289d 100644 --- a/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -12,4 +12,4 @@ Sometimes you'll encounter loops, or recursive functions, that take a long time The cost of each of these operations depends on your specific system. On some systems compilers and hardware do these things for you. Clear, efficient code is better than code that requires an understanding of a particular platform. -Next [How to Deal with I/O Expense](08-How to Deal with IO Expense.md) +Next [How to Deal with I/O Expense](08-How%20to%20Deal%20with%20IO%20Expense.md) diff --git a/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index 81a3a15..2ea5d66 100644 --- a/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -10,4 +10,4 @@ Representations can often be improved by a factor of two or three from their fir A third technique that is sometimes possible is to improve the locality of reference by pushing the computation closer to the data. For instance, if you are reading some data from a database and computing something simple from it, such as a summation, try to get the database server to do it for you. This is highly dependent on the kind of system you're working with, but you should explore it. -Next [How to Manage Memory](09-How to Manage Memory.md) \ No newline at end of file +Next [How to Manage Memory](09-How%20to%20Manage%20Memory.md) \ No newline at end of file diff --git a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md index 8c657c3..fd2ecbb 100644 --- a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -12,4 +12,4 @@ An important case occurs when you can define an upper bound on the number of obj Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form of garbage collection, such as reference counting, to do this for them. -Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) +Next [How to Deal with Intermittent Bugs](10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) diff --git a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 40238bd..82c4741 100644 --- a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -14,4 +14,4 @@ This illustrates some risk associated with third-party software. We were using a The program performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. -Next [How to Learn Design Skills](11-How to Learn Design Skills.md) +Next [How to Learn Design Skills](11-How%20to%20Learn%20Design%20Skills.md) diff --git a/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 50a64f0..b70fd2f 100644 --- a/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -6,4 +6,4 @@ Then you must do it yourself. Start with a small project. When you are finally d It is natural and helpful to develop your own style, but remember that design is an art, not a science. People who write books on the subject have a vested interest in making it seem scientific. Don't become dogmatic about particular design styles. -Next [How to Conduct Experiments](12-How to Conduct Experiments.md) +Next [How to Conduct Experiments](12-How%20to%20Conduct%20Experiments.md) diff --git a/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index f857f86..23d9b0e 100644 --- a/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -20,4 +20,4 @@ First, try to be very clear about your hypothesis, or the assertion that you are You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. -Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why%20Estimation%20is%20Important.md) diff --git a/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 3cb806e..f503a31 100644 --- a/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -12,4 +12,4 @@ really means: This common interpretation problem requires that you explicitly discuss what the estimate means with your boss or customer as if they were a simpleton. Restate your assumptions, no matter how obvious they seem to you. -Next [How to Estimate Programming Time](02-How to Estimate Programming Time.md) +Next [How to Estimate Programming Time](02-How%20to%20Estimate%20Programming%20Time.md) diff --git a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 88b96d6..111851f 100644 --- a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -18,4 +18,4 @@ If there are big risks that cannot be evaluated, it is your duty to state so for If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. -Next [How to Find Out Information](03-How to Find Out Information.md) +Next [How to Find Out Information](03-How%20to%20Find%20Out%20Information.md) diff --git a/en/1-Beginner/Team-Skills/03-How to Find Out Information.md b/en/1-Beginner/Team-Skills/03-How to Find Out Information.md index aecc0ef..2113109 100644 --- a/en/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/en/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -16,4 +16,4 @@ If you want to know *how likely it is* that a faster algorithm for a particular If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. -Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) +Next [How to Utilize People as Information Sources](04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) diff --git a/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index 69be910..a267f9d 100644 --- a/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -12,4 +12,4 @@ A strange example of this is the summer intern. A summer intern in a highly tech You should ask people for a little bit of their wisdom and judgement whenever you honestly believe they have something to say. This flatters them and you will learn something and teach them something. A good programmer does not often need the advice of a Vice President of Sales, but if you ever do, you be sure to ask for it. I once asked to listen in on a few sales calls to better understand the job of our sales staff. This took no more than 30 minutes but I think that small effort made an impression on the sales force. -Next [How to Document Wisely](05-How to Document Wisely.md) \ No newline at end of file +Next [How to Document Wisely](05-How%20to%20Document%20Wisely.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/05-How to Document Wisely.md b/en/1-Beginner/Team-Skills/05-How to Document Wisely.md index abded59..acf2815 100644 --- a/en/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/en/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -17,4 +17,4 @@ This does not make it easier on the responsible programmer. How does one write s - Thinking about the reader and spending some of your precious time to make it easier on her; and - Not ever using a function name like `foo`,`bar`, or `doIt`! -Next [How to Work with Poor Code](06-How to Work with Poor Code.md) \ No newline at end of file +Next [How to Work with Poor Code](06-How%20to%20Work%20with%20Poor%20Code.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index e5b2aa3..a171a5f 100644 --- a/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -8,4 +8,4 @@ In any estimate that you make for work against code you didn't write, the qualit It is important to remember that abstraction and encapsulation, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. -Next [How to Use Source Code Control](07-How to Use Source Code Control.md) \ No newline at end of file +Next [How to Use Source Code Control](07-How%20to%20Use%20Source%20Code%20Control.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 3285753..3f59359 100644 --- a/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -6,4 +6,4 @@ I was late to appreciate the benefits of source code control systems but now I w A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. -Next [How to Unit Test](08-How to Unit Test.md) +Next [How to Unit Test](08-How%20to%20Unit%20Test.md) diff --git a/en/1-Beginner/Team-Skills/08-How to Unit Test.md b/en/1-Beginner/Team-Skills/08-How to Unit Test.md index 2e9a344..21b1415 100644 --- a/en/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/en/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -6,4 +6,4 @@ Use assertion checking and test drivers whenever possible. This not only catches The Extreme Programming developers are writing extensively on unit testing effectively; I can do no better than to recommend their writings. -Next [Take Breaks when Stumped](09-Take Breaks when Stumped.md) \ No newline at end of file +Next [Take Breaks when Stumped](09-Take%20Breaks%20when%20Stumped.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index 7f33239..9114768 100644 --- a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -13,4 +13,4 @@ Most programmers are good programmers, and good programmers want to get a lot do Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. -Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) +Next [How to Deal with Difficult People](11-How%20to%20Deal%20with%20Difficult%20People.md) diff --git a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index 0f1bb61..b46ac3f 100644 --- a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -10,4 +10,4 @@ NinjaProgrammer at Slashdot sent in this gem: > Remember that a good design will be resilient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this. -Next [How to Manage Software Dependence](02-How to Manage Software System Dependence.md) +Next [How to Manage Software Dependence](02-How%20to%20Manage%20Software%20System%20Dependence.md) diff --git a/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index 86900ca..eea11f9 100644 --- a/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -10,4 +10,4 @@ It is always best to encapsulate the component in some way so that it is isolate Having the source code for a component decreases the risk by a factor of four. With source code, you can evaluate it easier, debug it easier, find workarounds easier, and make fixes easier. If you make fixes, you should give them to the owner of the component and get the fixes incorporated into an official release; otherwise you will uncomfortably have to maintain an unofficial version. -Next [How to Decide if Software is Too Immature](03-How to Decide if Software is Too Immature.md) +Next [How to Decide if Software is Too Immature](03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) diff --git a/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index 93f03ff..40d953a 100644 --- a/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -15,4 +15,4 @@ Using software other people wrote is one of the most effective ways to quickly b A little consideration of these criteria demonstrates the great value of well-established free software and open-source software in reducing risk to the entrepreneur. -Next [How to Make a Buy vs. Build Decision](04-How to Make a Buy vs Build Decision.md) \ No newline at end of file +Next [How to Make a Buy vs. Build Decision](04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) \ No newline at end of file diff --git a/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index 64d69e7..fc5283a 100644 --- a/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -13,4 +13,4 @@ You should think twice before building something that is big enough to serve as After considering these questions, you should perhaps prepare two draft project plans, one for building and one for buying. This will force you to consider the integration costs. You should also consider the long term maintenance costs of both solutions. To estimate the integration costs, you will have to do a thorough evaluation of the software before you buy it. If you can't evaluate it, you will assume an unreasonable risk in buying it and you should decide against buying that particular product. If there are several buy decisions under consideration, some energy will have to be spent evaluating each. -Next [How to Grow Professionally](05-How to Grow Professionally.md) +Next [How to Grow Professionally](05-How%20to%20Grow%20Professionally.md) diff --git a/en/2-Intermediate/Judgment/05-How to Grow Professionally.md b/en/2-Intermediate/Judgment/05-How to Grow Professionally.md index 5ad8576..24d1e28 100644 --- a/en/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/en/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -8,4 +8,4 @@ Evaluate yourself. If you want to become a better programmer, ask someone you ad Plan ways to learn new skills, both the trivial technical kind, like learning a new software system, and the hard social kind, like writing well, by integrating them into your work. -Next [How to Evaluate Interviewees](06-How to Evaluate Interviewees.md) \ No newline at end of file +Next [How to Evaluate Interviewees](06-How%20to%20Evaluate%20Interviewees.md) \ No newline at end of file diff --git a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index cf24614..f7c9990 100644 --- a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -12,4 +12,4 @@ A reader has had good luck using a ‘take-home’ test for interviewees. This h Finally, interviewing is also a process of selling. You should be selling your company or project to the candidate. However, you are talking to a programmer, so don't try to colour the truth. Start off with the bad stuff, then finish strong with the good stuff. -Next [How to Know When to Apply Fancy Computer Science](07-How to Know When to Apply Fancy Computer Science.md) +Next [How to Know When to Apply Fancy Computer Science](07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) diff --git a/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index 8575639..863ec85 100644 --- a/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -12,4 +12,4 @@ The three most important considerations for the potential computer science techn If a well-isolated algorithm that uses a slightly fancy algorithm can decrease hardware cost or increase performance by a factor of two across an entire system, then it would be criminal not to consider it. One of the keys to arguing for such an approach is to show that the risk is really quite low, since the proposed technology has probably been well studied, the only issue is the risk of integration. Here a programmer's experience and judgement can truly synergize with the fancy technology to make integration easy. -Next [How to Talk to Non-Engineers](08-How to Talk to Non-Engineers.md) \ No newline at end of file +Next [How to Talk to Non-Engineers](08-How%20to%20Talk%20to%20Non-Engineers.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index aa7a9b3..edfce76 100644 --- a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -12,4 +12,4 @@ Obviously, there are entire industries organized around motivational techniques Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and it also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. -Next [How to be Widely Trusted](02-How to be Widely Trusted.md) +Next [How to be Widely Trusted](02-How%20to%20be%20Widely%20Trusted.md) diff --git a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index c115d4e..ea17652 100644 --- a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -4,4 +4,4 @@ To be trusted you must be trustworthy. You must also be visible. If no one knows Don't pretend to know something that you don't. With people that are not teammates, you may have to make a clear distinction between 'not knowing right off the top of my head' and 'not being able to figure it out, ever.' -Next [How to Tradeoff Time vs. Space](03-How to Tradeoff Time vs Space.md) +Next [How to Tradeoff Time vs. Space](03-How%20to%20Tradeoff%20Time%20vs%20Space.md) diff --git a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index e58a029..22b31fc 100644 --- a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -12,4 +12,4 @@ Improving the space/time trade-off can often change one or the other dramaticall Memory on modern computers appears cheap, because unlike processor time, you can't see it being used until you hit the wall; but then failure is catastrophic. There are also other hidden costs to using memory, such as your effect on other programs that must be resident, and the time to allocate and deallocate it. Consider this carefully before you trade away space to gain speed. -Next [How to Stress Test](04-How to Stress Test.md) +Next [How to Stress Test](04-How%20to%20Stress%20Test.md) diff --git a/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md index 30c4418..2d0a97f 100644 --- a/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -14,4 +14,4 @@ Knowing where the wall is is essential not only to moving the wall, but also to [1] "to hit" -Next [How to Balance Brevity and Abstraction](05-How to Balance Brevity and Abstraction.md) \ No newline at end of file +Next [How to Balance Brevity and Abstraction](05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index e7112b0..78b443c 100644 --- a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -6,4 +6,4 @@ There is a certain dogma associated with useful techniques such as *information Portability poses a similar problem. Should code be portable to a different computer, compiler, software system or platform, or simply easily ported? I think a non-portable, short-and-easily-ported piece of code is better than a long portable one. It is relatively easy and certainly a good idea to confine non-portable code to designated areas, such as a class that makes database queries that are specific to a given DBMS. -Next [How to Learn New Skills](06-How to Learn New Skills.md) +Next [How to Learn New Skills](06-How%20to%20Learn%20New%20Skills.md) diff --git a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index d025b46..39376e4 100644 --- a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -10,4 +10,4 @@ Try to get your boss to let you have formal training, but understand that it is If you lead people, understand how they learn and assist them by assigning them projects that are the right size and that exercise skills they are interested in. Don't forget that the most important skills for a programmer are not the technical ones. Give your people a chance to play and practice courage, honesty, and communication. -Next [Learn to Type](07-Learn to Type.md) +Next [Learn to Type](07-Learn%20to%20Type.md) diff --git a/en/2-Intermediate/Personal-Skills/07-Learn to Type.md b/en/2-Intermediate/Personal-Skills/07-Learn to Type.md index c678ddd..9be7d5d 100644 --- a/en/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/en/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) Learn to touch-type. This is an intermediate skill because writing code is so hard that the speed at which you can type is irrelevant and can't put much of a dent in the time it takes to write code, no matter how good you are. However, by the time you are an intermediate programmer you will probably spend a lot of time writing natural language to your colleagues and others. This is a fun test of your commitment; it takes dedicated time that is not much fun to learn something like that. Legend has it that when Michael Tiemann was at MCC people would stand outside his door to listen to the hum generated by his keystrokes which were so rapid as to be indistinguishable. -Next [How to Do Integration Testing](08-How to Do Integration Testing.md) \ No newline at end of file +Next [How to Do Integration Testing](08-How%20to%20Do%20Integration%20Testing.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index 2e111a0..6309f6d 100644 --- a/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -4,4 +4,4 @@ Integration testing is the testing of the integration of various components that Ideally you should organize a project so that there is not a phase at the end where integration must explicitly take place. It is far better to gradually integrate things as they are completed over the course of the project. If it is unavoidable estimate it carefully. -Next [Communication Languages](09-Communication Languages.md) \ No newline at end of file +Next [Communication Languages](09-Communication%20Languages.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/09-Communication Languages.md b/en/2-Intermediate/Personal-Skills/09-Communication Languages.md index 8d39438..052d4a6 100644 --- a/en/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/en/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -8,4 +8,4 @@ XML is a standard for defining new standards. It is not a solution to data inter SQL is a very powerful and rich data query and manipulation language that is not quite a programming language. It has many variations, typically quite product-dependent, which are less important than the standardized core. SQL is the *lingua franca* of relational databases. You may or may not work in any field that can benefit from an understanding of relational databases, but you should have a basic understanding of them and the syntax and meaning of SQL. -Next [Heavy Tools](10-Heavy Tools.md) +Next [Heavy Tools](10-Heavy%20Tools.md) diff --git a/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md index d5fcb55..c319056 100644 --- a/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -11,4 +11,4 @@ To my mind right now some of the best heavy tools are: - XML parsers, and - Spreadsheets. -Next [How to analyze data](11-How to analyze data.md) +Next [How to analyze data](11-How%20to%20analyze%20data.md) diff --git a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md index dccc36a..71b7930 100644 --- a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/en/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -8,4 +8,4 @@ No matter at which stage you start looking at it, data is the main concern of a Therefore, since algorithms don't spin their wheels in a vacuum, you need to analyze both the data that somebody else has identified for you and the data that is necessary to write down your code. A trivial example will make the matter clearer. You are implementing a search routine for a library. According to your specifications, the user can select books by a combination of genre, author, title, publisher, printing year, and number of pages. The ultimate goal of your routine is to produce a legal SQL statement to search the back-end database. Based on these requirements, you have several choices: check each control in turn, using a "switch" statement, or several "if" ones; make an array of data controls, checking each element to see if it is set; create (or use) an abstract control object from which to inherit all your specific controls, and connect them to an event-driven engine. If your requirements include also tuning up the query performance, by making sure that the items are checked in a specific order, you may consider using a tree of components to build your SQL statement. As you can see, the choice of the algorithm depends on the data you decide to use, or to create. Such decisions can make all the difference between an efficient algorithm and a disastrous one. However, efficiency is not the only concern. You may use a dozen named variables in your code and make it as efficient as it can ever be. But such a piece of code might not be easily maintainable. Perhaps choosing an appropriate container for your variables could keep the same speed and in addition allow your colleagues to understand the code better when they look at it next year. Furthermore, choosing a well defined data structure may allow them to extend the functionality of your code without rewriting it. In the long run, your choices of data determines how long your code will survive after you are finished with it. Let me give you another example, just some more food for thought. Let's suppose that your task is to find all the words in a dictionary with more than three anagrams, where an anagram must be another word in the same dictionary. If you think of it as a computational task, you will end up with an endless effort, trying to work out all the combinations of each word and then comparing it to the other words in the list. However, if you analyze the data at hand, you'll realize that each word may be represented by a record containing the word itself and a sorted array of its letters as ID. Armed with such knowledge, finding anagrams means just sorting the list on the additional field and picking up the ones that share the same ID. The brute force algorithm may take several days to run, while the smart one is just a matter of a few seconds. Remember this example the next time you are facing an intractable problem. -Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How to Manage Development Time.md) +Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How%20to%20Manage%20Development%20Time.md) \ No newline at end of file diff --git a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index 94d473e..bd83b38 100644 --- a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -8,4 +8,4 @@ If you miss a milestone, you should take immediate action such as informing your Make sure your plan includes time for: internal team meetings, demos, documentation, scheduled periodic activities, integration testing, dealing with outsiders, sickness, vacations, maintenance of existing products, and maintenance of the development environment. The project plan can serve as a way to give outsiders or your boss a view into what you or your team is doing. For this reason it should be short and up-to-date. -Next [How to Manage Third-Party Software Risks](02-How to Manage Third-Party Software Risks.md) +Next [How to Manage Third-Party Software Risks](02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) diff --git a/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index 336f3e8..e2c77c8 100644 --- a/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -8,4 +8,4 @@ If third-party software is not vapour, it is still risky, but at least it is a r Understanding the suitability of existing third party software for a particular purpose is very tribal knowledge. It is very subjective and generally resides in experts. You can save a lot of time if you can find those experts. Often times a project will depend on a third-party software system so completely that if the integration fails the project will fail. Express risks like that clearly in writing in the schedule. Try to have a contingency plan, such as another system that can be used or the ability to write the functionality yourself if the risk can't be removed early. Never let a schedule depend on vapour. -Next [How to Manage Consultants](03-How to Manage Consultants.md) \ No newline at end of file +Next [How to Manage Consultants](03-How%20to%20Manage%20Consultants.md) \ No newline at end of file diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 6b632b9..bcff407 100644 --- a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -6,4 +6,4 @@ However, they usually cannot become part of the team in the same sense that regu If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the a project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. -Next [How to Communicate the Right Amount](04-How to Communicate the Right Amount.md) \ No newline at end of file +Next [How to Communicate the Right Amount](04-How%20to%20Communicate%20the%20Right%20Amount.md) \ No newline at end of file diff --git a/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index 2e16157..0d524d9 100644 --- a/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -4,4 +4,4 @@ Carefully consider the cost of a meeting; it costs *its duration multiplied by t Everything possible should be done to encourage informal communication. More useful work is done during lunches with colleagues than during any other time. It is a shame that more companies do not recognize nor support this fact. -Next [How to Disagree Honestly and Get Away with It](05-How to Disagree Honestly and Get Away with It.md) +Next [How to Disagree Honestly and Get Away with It](05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) diff --git a/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index 7ced830..2f6d836 100644 --- a/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -8,4 +8,4 @@ Usually, this is not a problem. In some stressful circumstances and with some pe Whether the decision is reversed or not, you must remember that you will never be able to say ‘I told you so!’ since the alternate decision was fully explored. -Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How to Tradeoff Quality Against Development Time.md) +Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) diff --git a/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index f54a5f0..8dc938e 100644 --- a/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -8,4 +8,4 @@ The key to fighting schedule pressure is simply to turn it into time-to-market p The key insight that the estimate must make plain is that labour is an almost incompressible fluid. You can't pack more into a span of time anymore than you can pack more water into a container over and above that container's volume. In a sense, a programmer should never say ‘no’, but rather to say ‘What will you give up to get that thing you want?’ The effect of producing clear estimates will be to increase the respect for programmers. This is how other professionals behave. Programmers' hard work will be visible. Setting an unrealistic schedule will also be painfully obvious to everyone. Programmers cannot be hoodwinked. It is disrespectful and demoralizing to ask them to do something unrealistic. Extreme Programming amplifies this and builds a process around it; I hope that every reader will be lucky enough to use it. -Next [How to Understand the User](02-How to Understand the User.md) \ No newline at end of file +Next [How to Understand the User](02-How%20to%20Understand%20the%20User.md) \ No newline at end of file diff --git a/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 2d637ee..ff466f1 100644 --- a/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -14,4 +14,4 @@ Guy Kawasaki [Rules] has emphasized the importance of *watching* what your users I believe contractors and consultants often have tremendous problems getting their clients to clarify in their own minds what they really want. If you intend to be a consultant, I suggest you choose your clients based on their clear-headedness as well as their pocketbooks. -Next [How to Get a Promotion](03-How to Get a Promotion.md) \ No newline at end of file +Next [How to Get a Promotion](03-How%20to%20Get%20a%20Promotion.md) \ No newline at end of file diff --git a/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 72fa4eb..9a2cf54 100644 --- a/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -10,4 +10,4 @@ If you feel like you are past due for a promotion, talk to your boss about it. A Most programmers probably have an exaggerated sense of their relative abilities in some ways---after all, we can't all be in the top 10%! However, I have seen some people who were seriously unappreciated. One cannot expect everyone's evaluation to perfectly match reality at all times, but I think people are generally moderately fair, with one caveat: you cannot be appreciated without visibility into your work. Sometimes, due to happenstance or personal habits, someone will not be noticed much. Working from home a lot or being geographically separated from your team and boss makes this especially difficult. -Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How to Develop Talent.md) +Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How%20to%20Develop%20Talent.md) diff --git a/en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index e853798..30f983a 100644 --- a/en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -20,4 +20,4 @@ It is an odd fact that is not reflected in salaries that a good programmer is mo You can often give the stronger team members challenging, but carefully delineated, tasks. -Next [How to Choose What to Work On](02-How to Choose What to Work On.md) \ No newline at end of file +Next [How to Choose What to Work On](02-How%20to%20Choose%20What%20to%20Work%20On.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index c13705c..ae0d9c0 100644 --- a/en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -2,4 +2,4 @@ You balance your personal needs against the needs of the team in choosing what aspect of a project to work on. You should do what you are best at, but try to find a way to stretch yourself not by taking on more work but by exercising a new skill. Leadership and communication skills are more important than technical skills. If you are very strong, take on the hardest or riskiest task, and do it as early as possible in the project to decrease risk. -Next [How to Get the Most From Your Team-mates](03-How to Get the Most From Your Teammates.md) \ No newline at end of file +Next [How to Get the Most From Your Team-mates](03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index 1b046db..aac68e0 100644 --- a/en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -12,4 +12,4 @@ Ask your team, both as a group and individually, what they think would create te Praise frequently rather than lavishly. Especially praise those who disagree with you when they are praiseworthy. Praise in public and criticize in private; with one exception: sometimes growth or the correction of a fault can't be praised without drawing embarrassing attention to the original fault, so that growth should be praised in private. -Next [How to Divide Problems Up](04-How to Divide Problems Up.md) \ No newline at end of file +Next [How to Divide Problems Up](04-How%20to%20Divide%20Problems%20Up.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index 4ee4d14..c3444c7 100644 --- a/en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -6,4 +6,4 @@ Just as a composer considers the timbre of the instrument that will play a part There is a certain danger in this given that people will become bored as they build upon their strengths and never improve their weaknesses or learn new skills. However, specialization is a very useful productivity tool when not overused. -Next [How to Handle Boring Tasks](05-How to Handle Boring Tasks.md) \ No newline at end of file +Next [How to Handle Boring Tasks](05-How%20to%20Handle%20Boring%20Tasks.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index dfdb8b9..a1a565c 100644 --- a/en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -4,4 +4,4 @@ Sometimes it is not possible to avoid boring tasks that are critical to the succ If all else fails, apologize to those who have to do the boring task, but under no circumstances allow them to do it alone. At a minimum assign a team of two to do the work and promote healthy teamwork to get the task done. -Next [How to Gather Support for a Project](06-How to Gather Support for a Project.md) \ No newline at end of file +Next [How to Gather Support for a Project](06-How%20to%20Gather%20Support%20for%20a%20Project.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 3ba9eaf..6dc3a50 100644 --- a/en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -2,4 +2,4 @@ To gather support for a project, create and communicate a vision that demonstrates real value to the organization as a whole. Attempt to let others share in your vision creation. This gives them a reason to support you and gives you the benefit of their ideas. Individually recruit key supporters for your project. Wherever possible, show, don't tell. If possible, construct a prototype or a mock-up to demonstrate your ideas. A prototype is always powerful but in software it is far superior to any written description. -Next [How to Grow a System](07-How to Grow a System.md) \ No newline at end of file +Next [How to Grow a System](07-How%20to%20Grow%20a%20System.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index f41cd4b..4d309ed 100644 --- a/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -20,4 +20,4 @@ A reader, Rob Hafernik, sent in this comment on this section that I can do no be To which one can only reply *Fiat lux*! -Next [How to Communicate Well](08-How to Communicate Well.md) +Next [How to Communicate Well](08-How%20to%20Communicate%20Well.md) diff --git a/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index d189a0d..9b88fe1 100644 --- a/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -8,4 +8,4 @@ The programmer brings order out of chaos. One interesting way to do this is to i I haven't mastered communicating well, but what I'm currently trying is what I think of as a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. -Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) diff --git a/en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index dc6c539..c630982 100644 --- a/en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -6,4 +6,4 @@ The best way to tell someone about a problem is to offer a solution at the same One of the most unpleasant and common things you will have to say is, ‘The schedule will have to slip.’ The conscientious programmer hates to say this, but must say it as early as possible. There is nothing worse than postponing action when a milestone slips, even if the only action is to inform everyone. In doing this, it is better to do it as a team, at least in spirit, if not physically. You will want your team's input on both where you stand and what can be done about it, and the team will have to face the consequences with you. -Next [How to Deal with Managerial Myths](10-How to Deal with Managerial Myths.md) +Next [How to Deal with Managerial Myths](10-How%20to%20Deal%20with%20Managerial%20Myths.md) diff --git a/en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 6acb49d..8665c09 100644 --- a/en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -10,4 +10,4 @@ The word *myth* sometimes means fiction. But it has a deeper connotation. It als If you have an opportunity, you can try to explain these things, but don't feel bad if you have no success and don't damage your reputation by confronting these myths belligerently. Each of these myths reinforces the manager's idea that they have some actual control over what is going on. The truth is that managers facilitate if they are good, and impede if they are bad. -Next [How to Deal with Organizational Chaos](11-How to Deal with Organizational Chaos.md) \ No newline at end of file +Next [How to Deal with Organizational Chaos](11-How%20to%20Deal%20with%20Organizational%20Chaos.md) \ No newline at end of file diff --git a/en/README.md b/en/README.md index 81c3ac2..0d021ac 100644 --- a/en/README.md +++ b/en/README.md @@ -21,79 +21,79 @@ Welcome to the tribe. 1. [Beginner](1-Beginner) - Personal Skills - - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - Team Skills - - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) 2. [Intermediate](2-Intermediate) - Personal Skills - - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) - Team Skills - - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) 3. [Advanced](3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) 4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) diff --git a/en/SUMMARY.md b/en/SUMMARY.md index 552702e..d049bd5 100644 --- a/en/SUMMARY.md +++ b/en/SUMMARY.md @@ -2,79 +2,79 @@ [//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) * [Intermediate](2-Intermediate/README.md) * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) * [Advanced](3-Advanced/README.md) * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) diff --git a/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md b/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md index 7ebb5c1..44da946 100644 --- a/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -1,21 +1,21 @@ # Learn to Debug [//]: # (Version:1.0.0) -ƒfƒoƒbƒO‚̓vƒƒOƒ‰ƒ}‚ɂȂ邽‚߂̊î‘b‚Å‚·B“®ŽŒ "debug"‚Ìʼn‚̈Ӗ¡‚̓Gƒ‰[‚ðŽæ‚èœ‚­‚±‚Ƃł·‚ªAŽÀÛ‚Éd—v‚ȈӖ¡‚ÍAƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚𒲂ׂDz‚ׂ邱‚Ƃł·BŒø‰Ê“I‚ɃfƒoƒbƒO‚Å‚«‚È‚¢ƒvƒƒOƒ‰ƒ}[‚Í–Ú‚ªŒ©‚¦‚Ü‚¹‚ñB +�f�o�b�O�̓v���O���}�ɂȂ邽�߂̊��b�ł��B���� "debug"�ÌÅ��̈Ӗ��̓G���[�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚ł����A���ۂÉd�v�ȈӖ��ÍA�v���O�����̎��s�𒲂ׂĒ��ׂ邱�Ƃł��B���ʓI�Ƀf�o�b�O�ł��Ȃ��v���O���}�[�͖ڂ������܂����B -—‘zŽå‹`ŽÒAÝŒvA•ªÍA•¡ŽG‚³‚Ì—˜_‚ȂǂªƒfƒoƒbƒO‚æ‚è‚àŠî–{“I‚¾‚Æl‚¦‚él‚ÍAƒvƒƒOƒ‰ƒ}[‚ð“­‚©‚¹‚Ä‚¢‚Ü‚¹‚ñB“­‚­ƒvƒƒOƒ‰ƒ}[‚Í—‘z“I‚È¢ŠE‚ÉZ‚ñ‚Å‚¢‚Ü‚¹‚ñB‚ ‚È‚½‚ªŠ®àø‚Å‚ ‚Á‚Ä‚àA‘åŽèƒ\ƒtƒgƒEƒFƒA‰ïŽÐAGNU‚̂悤‚È‘gDA‚¨‚æ‚Ñ‚ ‚È‚½‚Ì“¯—»‚É‚æ‚Á‚Ä‘‚©‚ꂽƒR[ƒh‚Ɉ͂܂ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃R[ƒh‚̂قƂñ‚ǂ͕sŠ®‘S‚Å‚ ‚èA•sŠ®‘S‚É•¶‘‰»‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚̃R[ƒh‚ÌŽÀs‚ð‰ÂŽ‹‰»‚·‚é‹@”\‚ª‚È‚¯‚ê‚ÎA‚킸‚©‚ȃoƒ“ƒv‚Í‚ ‚È‚½‚ð‰i‰“‚ɓЂ°ŽÌ‚Ă܂·B‘½‚­‚Ìê‡A‚±‚̉Ž‹«‚ÍŽÀŒ±iƒfƒoƒbƒOj‚É‚æ‚Á‚Ă̂ݓ¾‚ç‚ê‚Ü‚·B +���z���`�ÒA�݌v�A���ÍA���G���̗��_�Ȃǂ��f�o�b�O���������{�I���Æl�����l�ÍA�v���O���}�[�𓭂����Ă��܂����B�����v���O���}�[�͗��z�I�È��E�ÉZ���ł��܂����B���Ȃ��������ł����Ă��A�����\�t�g�E�F�A���ÐAGNU�̂悤�ȑg�D�A�����т��Ȃ��̓����ɂ����Ä����ꂽ�R�[�h�Ɉ͂܂��Ă��Ȃ����΂Ȃ��܂����B���̃R�[�h�̂قƂ��ǂ͕s���S�ł����A�s���S�ɕ����������Ă��܂��B���̃R�[�h�̎��s�����������@�\���Ȃ����ÎA�킸���ȃo���v�͂��Ȃ����i���ɓ����̂Ă܂��B�����Ìê‡ï¿½A���̉Ž����͎����i�f�o�b�O�j�ɂ����Ă̂ݓ������܂��B -ƒfƒoƒbƒO‚ÍAƒvƒƒOƒ‰ƒ€‚»‚Ì‚à‚̂ł͂Ȃ­AƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ÉŠÖ‚·‚é‚à‚̂ł·B‚ ‚È‚½‚ª‘åŽèƒ\ƒtƒgƒEƒFƒA‰ïŽÐ‚©‚牽‚©‚ðw“ü‚µ‚½ê‡A’Êí‚Í‚»‚̃vƒƒOƒ‰ƒ€‚ðŒ©‚é‚±‚Ƃ͂ł«‚Ü‚¹‚ñB‚µ‚©‚µAƒR[ƒh‚ªƒhƒLƒ…ƒƒ“ƒg‚É€‹’‚µ‚Ä‚¢‚È‚¢êŠiƒ}ƒVƒ“‘S‘Ì‚ðƒNƒ‰ƒbƒVƒ…‚³‚¹‚邱‚Ƃ͈ê”Ê“I‚Å‘s‘å‚È—á‚Å‚·j‚âƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ªƒ~ƒ…[ƒg‚³‚ê‚Ä‚¢‚éꊂª”­¶‚µ‚Ü‚·B‚æ‚èˆê”Ê“I‚É‚ÍAƒGƒ‰[‚ð쬂µA‘‚«ž‚ñ‚¾ƒR[ƒh‚𒲂×AƒGƒ‰[‚ª‚ǂ̂悤‚É”­¶‚·‚é‰Â”\«‚ª‚ ‚é‚Ì‚©??‚í‚©‚è‚Ü‚¹‚ñB•K‘R“I‚ÉA‚±‚ê‚Í‚ ‚È‚½‚ªì‚Á‚Ä‚¢‚邯‚¢‚¤‘O’ñ‚ª‚©‚Ȃ賂µ‚­‚È‚¢‚±‚ÆA‚ ‚é‚¢‚Í‚ ‚È‚½‚ª—\Šú‚µ‚Ä‚¢‚È‚¢ó‘Ô‚ª”­¶‚µ‚½‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·BŽž‚É‚ÍAƒ\[ƒXƒR[ƒh‚𒭂߂Ă¢‚é–‚–@‚ª‚¤‚Ü‚­“®ì‚·‚邱‚Æ‚à‚ ‚è‚Ü‚·B‚»‚¤‚łȂ¢ê‡‚ÍAƒfƒoƒbƒO‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�f�o�b�O�ÍA�v���O�������̂��̂ł͂Ȃ��A�v���O�����̎��s�Ɋւ������̂ł��B���Ȃ��������\�t�g�E�F�A���Ђ��牽�����w�������ê‡ï¿½A�Ê��͂��̃v���O���������邱�Ƃ͂ł��܂����B�������A�R�[�h���h�L�������g�É������Ă��Ȃ��êŠï¿½i�}�V���S�̂��N���b�V�������邱�Ƃ͈��ʓI�ős���ȗ��ł��j���h�L�������e�[�V�������~���[�g���������êŠï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B�������ʓI�ɂÍA�G���[���ì¬ï¿½ï¿½ï¿½A�������ñ‚¾ƒR�[�h�𒲂×A�G���[���ǂ̂悤�ɔ��������”\���������̂�??�킩���܂����B�K�R�I�ÉA�����͂��Ȃ��������Ă����Ƃ����O�ñ‚ª‚��Ȃè³ï¿½ï¿½ï¿½ï¿½ï¿½È‚����ÆA���邢�͂��Ȃ����\�����Ă��Ȃ����Ԃ������������Ƃ��Ӗ����܂��B���ɂÍA�\�[�X�R�[�h�𒭂߂Ă��閂�@�����܂����삷�邱�Ƃ������܂��B�����łȂ��ê‡ï¿½ÍA�f�o�b�O�����K�v�������܂��B -ƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ð‰ÂŽ‹‰»‚·‚é‚É‚ÍAƒR[ƒh‚ðŽÀs‚µ‚Ä‚»‚̃R[ƒh‚ðŠÏŽ@‚Å‚«‚é•K—v‚ª‚ ‚è‚Ü‚·B‰æ–ʂɕ\ަ‚³‚ê‚Ä‚¢‚é‚à‚ÌA‚Ü‚½‚Í2‚‚̃Cƒxƒ“ƒgŠÔ‚Ì’x‰„‚̂悤‚ÉA‚±‚ꂪ–Ú‚ÉŒ©‚¦‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‘½‚­‚Ìê‡AƒR[ƒh“à‚Ì‚¢‚­‚‚©‚̕ϔ‚Ìó‘ÔAŽÀÛ‚ÉŽÀs‚³‚ê‚Ä‚¢‚éƒR[ƒh‚ÌsA‚Ü‚½‚Í•¡ŽG‚ȃf[ƒ^\‘¢‚ɂ킽‚Á‚Ä“Á’è‚̃AƒT[ƒVƒ‡ƒ“‚ª•ÛŽ‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚È‚ÇA–Ú‚ÉŒ©‚¦‚È‚¢‚à‚Ì‚ªŠÜ‚Ü‚ê‚Ü‚·B‚±‚ê‚ç‚̉B‚³‚ꂽ‚à‚͖̂¾‚ç‚©‚É‚³‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB +�v���O�����̎��s���Ž��������ɂÍA�R�[�h�����s���Ă��̃R�[�h���ώ@�ł����K�v�������܂��B���ʂɕ\�������������ÌA�܂���2�‚̃C�x���g�Ԃ̒x���̂悤�ÉA���ꂪ�ڂɌ����邱�Ƃ������܂��B�����Ìê‡ï¿½A�R�[�h���̂����‚��̕Ï��Ì��ÔA���ۂɎ��s���������R�[�h�Ìs�A�܂��͕��G�ȃf�[�^�\���ɂ킽���ē����̃A�T�[�V�������ێ������Ă��邩�ǂ����ȂÇA�ڂɌ����Ȃ����̂��܂܂��܂��B�������̉B���ꂽ���͖̂��炩�ɂ����Ȃ����΂Ȃ��܂����B -ŽÀsƒvƒƒOƒ‰ƒ€‚Ì "nnards"‚𒲂ׂéˆê”Ê“I‚È•û–@‚ÍAŽŸ‚̂悤‚É•ª—Þ‚Å‚«‚Ü‚·B +���s�v���O������ "nnards"�𒲂ׂ����ʓI�ȕ��@�ÍA���̂悤�ɕ��ނł��܂��B -- ƒfƒoƒbƒOƒc[ƒ‹‚ðŽg—p‚µ‚ÄA -- Printlining - ƒvƒƒOƒ‰ƒ€‚ðˆêŽž“I‚É•ÏX‚µ‚Ü‚·B’ÊíAî•ñ‚ðo—Í‚·‚és‚ð’ljÁ‚µ‚Ü‚·B -- ƒƒMƒ“ƒO - ƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ɉi‘±“I‚ȃEƒBƒ“ƒhƒE‚ðƒƒO‚ÌŒ`‚Å쬂µ‚Ü‚·B +- �f�o�b�O�c�[�����g�p���ÄA +- Printlining - �v���O�������ꎞ�I�ɕÏX���܂��B�Ê��A�������o�͂����s���lj����܂��B +- ���M���O - �v���O�����̎��s�ɉi���I�ȃE�B���h�E�����O�̌`�Åì¬ï¿½ï¿½ï¿½Ü‚��B -ƒfƒoƒbƒMƒ“ƒOƒc[ƒ‹‚ÍAˆÀ’肵‚Ä—˜—p‰Â”\‚Èꇂ͑f°‚炵‚¢‚Å‚·‚ªAˆóüƒ‰ƒCƒeƒBƒ“ƒO‚ƃƒMƒ“ƒO‚Í‚³‚ç‚Éd—v‚Å‚·BƒfƒoƒbƒOƒc[ƒ‹‚ÍŒ¾ŒêŠJ”­‚É’x‚ê‚ð‚Æ‚é‚±‚Æ‚ª‘½‚¢‚½‚ßA‚¢‚Â‚Å‚à—˜—p‚Å‚«‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B‚³‚ç‚ÉAƒfƒoƒbƒOƒc[ƒ‹‚ª”÷–­‚ɃvƒƒOƒ‰ƒ€‚ÌŽÀs•û–@‚ð•ÏX‚·‚é‰Â”\«‚ª‚ ‚邽‚ßA•K‚¸‚µ‚àŽÀÛ“I‚ł͂Ȃ¢ê‡‚ª‚ ‚è‚Ü‚·BÅŒã‚ÉA‘å‚«‚ȃf[ƒ^\‘¢‚ɑ΂·‚éƒAƒT[ƒVƒ‡ƒ“‚̃`ƒFƒbƒNAƒR[ƒh‚Ì‹LqAƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚Ì•ÏX‚È‚ÇA‚¢‚­‚‚©‚ÌŽí—ނ̃fƒoƒbƒO‚ª‚ ‚è‚Ü‚·BƒfƒoƒbƒOƒc[ƒ‹‚ªˆÀ’肵‚Ä‚¢‚邯‚«‚ɃfƒoƒbƒOƒc[ƒ‹‚ðŽg—p‚·‚é•û–@‚ð’m‚Á‚Ä‚¨‚­‚±‚Ƃ͗ǂ¢‚±‚Ƃł·‚ªA‘¼‚Ì2‚‚̕û–@‚ðŽg—p‚Å‚«‚邱‚Æ‚ªd—v‚Å‚·B +�f�o�b�M���O�c�[���ÍA���肵�ė��p�”\�Èê‡ï¿½Í‘f���炵���ł����A�������C�e�B���O�ƃ��M���O�͂����Éd�v�ł��B�f�o�b�O�c�[���͌����J���ɒx�����Ƃ邱�Ƃ��������ßA���‚ł����p�ł��Ȃ��”\���������܂��B�����ÉA�f�o�b�O�c�[���������Ƀv���O�����̎��s���@���ÏX�����”\�������邽�ßA�K���������ۓI�ł͂Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ÉA�傫�ȃf�[�^�\���ɑ΂����A�T�[�V�����̃`�F�b�N�A�R�[�h�̋L�q�A�v���O�����̎��s�̕ÏX�ȂÇA�����‚��̎��ނ̃f�o�b�O�������܂��B�f�o�b�O�c�[�������肵�Ă����Ƃ��Ƀf�o�b�O�c�[�����g�p�������@���m���Ă������Ƃ͗ǂ����Ƃł����A����2�‚̕��@���g�p�ł��邱�Ƃ��d�v�ł��B -‚¢‚­‚‚©‚̉SŽÒ‚ÍAƒR[ƒh‚ð•ÏX‚·‚é•K—v‚ª‚ ‚邯‚«‚ɃfƒoƒbƒO‚ð‹°‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚Í—‰ð‚Å‚«‚é - ‚»‚ê‚Í’Tõ“IŽèp‚̂悤‚È‚à‚̂ł·B‚µ‚©‚µA‚ ‚È‚½‚̓R[ƒh‚ð“Ë‚«Žh‚µ‚ăWƒƒƒ“ƒv‚³‚¹‚邱‚Æ‚ðŠw‚΂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ðŽŽ‚µ‚ÄA‚ ‚È‚½‚ªˆêŽž“I‚És‚¤‚±‚Ƃ͂»‚ê‚ðˆ«‰»‚³‚¹‚é‚à‚͉̂½‚à‚È‚¢‚±‚Æ‚ð—‰ð‚·‚邱‚Æ‚ðŠw‚΂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚Ì‹°•|‚ðŠ´‚¶‚éꇂÍAƒƒ“ƒ^[‚ð’T‚µ‚Ä‚­‚¾‚³‚¢B‚±‚Ì‹°•|‚Ö‚Ì•qŠ´‚ÈŽn‚Ü‚è‚ÅA‘½‚­‚Ì—D‚ꂽƒvƒƒOƒ‰ƒ}[‚ðŽ¸‚¢‚Ü‚·B +�����‚��Ì��S�҂ÍA�R�[�h���ÏX�����K�v�������Ƃ��Ƀf�o�b�O�������Ă��܂��B�����͗����ł��� - �����͒T���I���p�̂悤�Ȃ��̂ł��B�������A���Ȃ��̓R�[�h���˂��h���ăW�����v�����邱�Ƃ��w�΂Ȃ����΂Ȃ��܂����B���Ȃ��͂����������ÄA���Ȃ����ꎞ�I�És�����Ƃ͂������������������͉̂����Ȃ����Ƃð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��w�΂Ȃ����΂Ȃ��܂����B���̋��|���������ê‡ï¿½ÍA�����^�[���T�����������B���̋��|�ւ̕q���Ȏn�܂��ÅA�����̗D�ꂽ�v���O���}�[�������܂��B -Next [How to Debug by Splitting the Problem Space](02-How to Debug by Splitting the Problem Space.md) +Next [How to Debug by Splitting the Problem Space](02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) diff --git a/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index a2d1c27..e2c91f5 100644 --- a/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -11,4 +11,4 @@ 真ã®åˆå¿ƒè€…ã«ã¨ã£ã¦ã€è€ƒãˆã‚‰ã‚Œã‚‹ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ã®é ˜åŸŸã¯ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰å†…ã®ã™ã¹ã¦ã®è¡Œã®ã‚ˆã†ã«è¦‹ãˆã¾ã™ã€‚実行ã•れãŸè¡Œã®ã‚¹ãƒšãƒ¼ã‚¹ã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã€ãƒ¡ãƒ¢ãƒªç®¡ç†ã€å¤–部コードã¨ã®ã‚„りã¨ã‚Šã€å±é™ºãªã‚³ãƒ¼ãƒ‰ãªã©ã€ãƒ—ログラムã®ä»–ã®æ¬¡å…ƒã‚’見るãŸã‚ã«å¾Œã§é–‹ç™ºã™ã‚‹ãƒ“ジョンã¯ã‚りã¾ã›ã‚“。å˜ç´”ãªã‚³ãƒ¼ãƒ‰ã§ã™ã€‚経験豊富ãªãƒ—ログラマーã«ã¨ã£ã¦ã€ã“れらã®ä»–ã®æ¬¡å…ƒã¯ã€é–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã™ã¹ã¦ã®äº‹æŸ„ã®ä¸å®Œå…¨ã ãŒéžå¸¸ã«æœ‰ç”¨ãªç²¾ç¥žãƒ¢ãƒ‡ãƒ«ã‚’å½¢æˆã™ã‚‹ã€‚ãã®ç²¾ç¥žãƒ¢ãƒ‡ãƒ«ã‚’æŒã¤ã“ã¨ã¯ã€è¬Žã®çœŸã‚“中を効果的ã«è¦‹ã¤ã‘ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ é–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ã®ã‚る領域をå‡ç­‰ã«ç´°åˆ†ã—ãŸã‚‰ã€ã‚¨ãƒ©ãƒ¼ãŒã©ã®é ˜åŸŸã«ã‚ã‚‹ã‹ã‚’判断ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ç§ã®ãƒ—ログラムãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å˜ä¸€ã®ä¸æ˜Žãªè¡Œã¯ã©ã‚Œã§ã™ã‹ï¼Ÿå˜ç´”ãªã‚±ãƒ¼ã‚¹ã§ã¯ã€è‡ªåˆ†ãŒå®Ÿè¡Œã—ã¦ã„るプログラムã®é€”中ã§å®Ÿè¡Œã•れるã¨åˆ¤æ–­ã—ãŸè¡Œã®å‰ã¾ãŸã¯å¾Œã«æœªçŸ¥ã®è¡ŒãŒå®Ÿè¡Œã•れã¦ã„ã¾ã™ã‹ï¼Ÿ '通常ã€ã‚¨ãƒ©ãƒ¼ãŒå˜ä¸€ã®è¡Œã«å­˜åœ¨ã™ã‚‹ã‹ã€å˜ä¸€ã®ãƒ–ロックã§ã‚ã‚‹ã‹ã‚’知るã“ã¨ã¯å¤§å¤‰å¹¸é‹ãªã“ã¨ã§ã¯ã‚りã¾ã›ã‚“。ã—ã°ã—ã°ã€ãƒŸã‚¹ãƒ†ãƒªãƒ¼ã¯ã€ã€Œé–“é•ã£ãŸãƒŽãƒ¼ãƒ‰ã‚’指ã—示ã™ãƒã‚¤ãƒ³ã‚¿ãŒãã®ã‚°ãƒ©ãƒ•ã«ã‚ã‚‹ã‹ã€ã¾ãŸã¯ãã®ã‚°ãƒ©ãƒ•内ã®å¤‰æ•°ã‚’加算ã™ã‚‹ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒæ©Ÿèƒ½ã—ã¾ã›ã‚“ã€ã¨ã„ã†å ´åˆãŒã‚りã¾ã™ã€‚ãã®å ´åˆã¯ã€åˆ†å‰²ã•れãŸè¬Žã®ã©ã®éƒ¨åˆ†ã‚’除去ã§ãã‚‹ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€ã‚°ãƒ©ãƒ•内ã®ãƒã‚¤ãƒ³ã‚¿ãŒã™ã¹ã¦æ­£ã—ã„ã“ã¨ã‚’確èªã™ã‚‹å°ã•ãªãƒ—ログラム。 -Next [How to Remove an Error](03-How to Remove an Error.md) +Next [How to Remove an Error](03-How%20to%20Remove%20an%20Error.md) diff --git a/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md index ee9cd1c..fa2717d 100644 --- a/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -1,9 +1,9 @@ # How to Remove an Error [//]: # (Version:1.0.0) -Ž„‚͈Ó}“I‚ɃvƒƒOƒ‰ƒ€‚ÌŽÀs‚ðƒGƒ‰[‚ðC³‚·‚ésˆ×‚©‚ç’²‚ׂ邯‚¢‚¤sˆ×‚𕪂¯‚½B‚à‚¿‚ë‚ñAƒfƒoƒbƒO‚̓oƒO‚ðŽæ‚èœ‚­‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B—‘z“I‚É‚ÍAƒR[ƒh‚ðŠ®‘S‚É—‰ð‚µAƒGƒ‰[‚ªŠ®‘S‚É•\ަ‚³‚êAC³‚·‚é•û–@‚ðŽ¦‚·uƒnƒnIv‚ÌuŠÔ‚É“ž’B‚µ‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚Å‚ÍA‰ÂŽ‹«‚̂Ȃ¢•¶‘‰»‚³‚ꂽƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‘½‚¢‚½‚ßA•K‚¸‚µ‚à‚»‚¤‚Å‚ ‚邯‚ÍŒÀ‚è‚Ü‚¹‚ñB‘¼‚̃P[ƒX‚Å‚ÍAƒR[ƒh‚ª•¡ŽG‚Å‚ ‚邽‚ßA—‰ð‚ªŠ®‘S‚ł͂ ‚è‚Ü‚¹‚ñB +���͈Ó}�I�Ƀv���O�����̎��s���G���[���C�������s�ׂ��璲�ׂ��Ƃ����s�ׂ𕪂����B���������A�f�o�b�O�̓o�O�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��Ӗ����܂��B���z�I�ɂÍA�R�[�h�����S�ɗ������A�G���[�����S�ɕ\�������A�C���������@�������u�n�n�I�v�Ìu�Ԃɓ��B���܂��B�������A���Ȃ��̃v���O�����łÍA�Ž����̂Ȃ����������ꂽ�V�X�e�����g�p���邱�Ƃ��������ßA�K�����������ł����Ƃ͌����܂����B���̃P�[�X�łÍA�R�[�h�����G�ł��邽�ßA���������S�ł͂����܂����B -ƒoƒO‚ðC³‚·‚é‚É‚ÍAƒoƒO‚ðC³‚·‚éŬŒÀ‚Ì•ÏX‚ð‰Á‚¦‚½‚¢‚Æl‚¦‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚͉ü‘P‚ª•K—v‚È‘¼‚Ì‚à‚Ì‚ðŒ©‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB“¯Žž‚É‚»‚ê‚ç‚ðC³‚µ‚È‚¢‚Å‚­‚¾‚³‚¢Bˆê“x‚Ɉê‚‚̂±‚ÆA‚½‚¾ˆê‚‚̎–‚ð•Ï‚¦‚é‰ÈŠw“I•û–@‚ðÌ—p‚µ‚悤‚Æ‚·‚éB‚±‚Ì‚½‚ß‚Ìŗǂ̃vƒƒZƒX‚ÍAƒoƒO‚ðŠÈ’P‚ÉÄŒ»‚µAC³ƒvƒƒOƒ‰ƒ€‚ð“K—p‚µ‚Ä‚©‚çƒvƒƒOƒ‰ƒ€‚ðÄŽÀs‚µAƒoƒO‚ª‘¶Ý‚µ‚È‚­‚È‚Á‚½‚±‚Æ‚ðŠm”F‚·‚邱‚Ƃł·B‚à‚¿‚ë‚ñAŽž‚ɂ͕¡”‚Ìs‚ð•ÏX‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒoƒO‚ðC³‚·‚邽‚߂ɊT”O“I‚É1‚‚̃Aƒgƒ~ƒbƒN‚È•ÏX‚ð“K—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�o�O���C�������ɂÍA�o�O���C�������Å����̕ÏX�����������Æl���Ă��܂��B���Ȃ��͉��P���K�v�ȑ��̂��̂����邩�������܂����B�����ɂ��������C�����Ȃ��ł��������B���x�Ɉ��‚̂��ÆA�������‚̎����ς����Ȋw�I���@���̗p���悤�Ƃ����B���̂��߂Ìŗǂ̃v���Z�X�ÍA�o�O���ȒP�É����A�C���v���O�������K�p�������v���O���������s���A�o�O�����݂��Ȃ��Ȃ������Ƃ��m�F���邱�Ƃł��B���������A���ɂ͕����Ìs���ÏX�����K�v�����邩�������܂��ñ‚ªA�o�O���C�����邽�߂ɊT�O�I��1�‚̃A�g�~�b�N�ȕÏX���K�p�����K�v�������܂��B -Žž‚É‚ÍAŽÀÛ‚É‚Í1‚‚̂悤‚ÉŒ©‚¦‚é‚¢‚­‚‚©‚̃oƒO‚ª‚ ‚è‚Ü‚·BƒoƒO‚ð’è‹`‚µ‚Ĉê“x‚ÉC³‚·‚é‚̂͂ ‚È‚½ŽŸ‘æ‚Å‚·BŽžXAƒvƒƒOƒ‰ƒ€‚ª‰½‚ð‚·‚×‚«‚©A‚Ü‚½‚ÍŒ³‚Ì’˜ŽÒ‚ªˆÓ}‚µ‚½‚à‚Ì‚ª•s–¾‚Å‚ ‚éB‚±‚Ìê‡A‚ ‚È‚½‚ÍŽ©•ª‚ÌŒoŒ±‚Æ”»’f‚ðs‚¢AƒR[ƒh‚ÉŽ©•ª‚̈Ӗ¡‚ðŠ„‚è“–‚Ä‚é•K—v‚ª‚ ‚è‚Ü‚·B‰½‚ð‚·‚×‚«‚©‚ðŒˆ’è‚µAƒRƒƒ“ƒg‚µ‚½‚èA‰½‚ç‚©‚Ì•û–@‚Å‚»‚ê‚𖾊m‚É‚µ‚½‚肵‚ÄAƒR[ƒh‚ð‚ ‚È‚½‚̈Ӗ¡‚É“K‡‚³‚¹‚Ü‚·B‚±‚ê‚ÍAʼn‚ÌꊂɌ³‚ÌŠÖ”‚ð‘‚­‚æ‚è‚àŽž‚ɂ͓‚¢’†‹‰‚Ü‚½‚Í㋉‚̃XƒLƒ‹‚Å‚·‚ªAŽÀÛ‚Ì¢ŠE‚Í‚µ‚΂µ‚Ζʓ|‚Å‚·B‘‚«Š·‚¦‚ª‚Å‚«‚È‚¢ƒVƒXƒeƒ€‚ðC³‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB +���ɂÍA���ۂɂ�1�‚̂悤�Ɍ����邢���‚��̃o�O�������܂��B�o�O�����`���Ĉ��x�ÉC�������̂͂��Ȃ������ł��B���X�A�v���O�������������ׂ����A�܂��͌��̒��҂��Ó}�������̂��s���ł����B���Ìê‡ï¿½A���Ȃ��͎����̌o���Ɣ��f���s���A�R�[�h�Ɏ����̈Ӗ������蓖�Ă��K�v�������܂��B�������ׂ��������肵�A�R�����g�������A���炩�̕��@�ł����𖾊m�ɂ����肵�ÄA�R�[�h�����Ȃ��̈Ӗ��ɓK�������܂��B�����ÍA�Å��ÌêŠï¿½ÉŒï¿½ï¿½ÌŠÖ����������������ɂ͓�������܂��Í㋉�̃X�L���ł����A���ۂÌ��E�͂��΂��Ζʓ|�ł��B�����������ł��Ȃ��V�X�e�����C�������K�v�����邩�������܂����B -Next [How to Debug Using a Log](04-How to Debug Using a Log.md) \ No newline at end of file +Next [How to Debug Using a Log](04-How%20to%20Debug%20Using%20a%20Log.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index cf152a2..996b0ce 100644 --- a/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -1,12 +1,12 @@ # How to Debug Using a Log [//]: # (Version:1.0.0) -*ƒƒMƒ“ƒO*‚ÍAƒƒO‚ƌĂ΂ê‚éˆê˜A‚Ì—L‰v‚ȃŒƒR[ƒh‚𶬂·‚邿‚¤‚ɃVƒXƒeƒ€‚ð쬂·‚é•û–@‚Å‚·B * Printlining *‚Í’Pƒ‚ÈA’Êí‚͈ꎞ“I‚ȃƒO‚𶬂µ‚Ä‚¢‚Ü‚·BƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì’mޝ‚ªŒÀ‚ç‚ê‚Ä‚¢‚邽‚ßAâ‘ΉSŽÒ‚̓ƒO‚ð—‰ð‚µ‚ÄŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒVƒXƒeƒ€ÝŒvŽÒ‚ÍAƒVƒXƒeƒ€‚Ì•¡ŽG‚³‚Ì‚½‚߃ƒO‚ð—‰ð‚µ‚ÄŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒƒO‚É‚æ‚Á‚Ä’ñ‹Ÿ‚³‚ê‚éî•ñ‚Ì—Ê‚ÍAƒvƒƒOƒ‰ƒ€‚ªŽÀs‚³‚ê‚Ä‚¢‚éŠÔ‚Í—‘z“I‚É\¬‰Â”\‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñBˆê”Ê‚ÉAƒƒO‚É‚Í3‚‚̊î–{“I‚È—˜“_‚ª‚ ‚è‚Ü‚·B +*���M���O*�ÍA���O�ƌĂ΂������A�̗L�v�ȃ��R�[�h�ð¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½æ‚¤ï¿½ÉƒV�X�e�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½@�ł��B * Printlining *�͒P���ÈA�Ê��͈ꎞ�I�ȃ��O�ð¶ï¿½ï¿½ï¿½ï¿½Ä‚��܂��B�v���O���~���O�̒m�����������Ă��邽�ßA���Î��S�҂̓��O�ð—‰ï¿½ï¿½ï¿½ï¿½ÄŽg�p�����K�v�������܂��B�V�X�e���݌v�҂ÍA�V�X�e���̕��G���̂��߃��O�ð—‰ï¿½ï¿½ï¿½ï¿½ÄŽg�p�����K�v�������܂��B���O�ɂ����Ēñ‹Ÿ‚����������̗ʂÍA�v���O���������s�����Ă����Ԃ͗��z�I�É\���”\�łȂ����΂Ȃ��܂����B���ʂÉA���O�ɂ�3�‚̊��{�I�ȗ��_�������܂��B -- ƒƒO‚ÍAÄŒ»‚·‚é‚Ì‚ª“‚¢ƒoƒOiƒvƒƒ_ƒNƒVƒ‡ƒ“ŠÂ‹«‚Å”­¶‚·‚é‚à‚Ì‚ÌAƒeƒXƒgŠÂ‹«‚Å‚ÍÄŒ»‚Å‚«‚È‚¢ƒoƒO‚È‚Çj‚ÉŠÖ‚·‚é—L—p‚Èî•ñ‚ð’ñ‹Ÿ‚µ‚Ü‚·B -- ƒƒO‚ÍAƒXƒe[ƒgƒƒ“ƒgŠÔ‚ÌŽžŠÔ‚ÌŒo‰ß‚È‚ÇAƒpƒtƒH[ƒ}ƒ“ƒX‚ÉŠÖ˜A‚·‚铌v‚¨‚æ‚уf[ƒ^‚ð’ñ‹Ÿ‚Å‚«‚Ü‚·B -- \¬‰Â”\‚Èê‡AƒƒO‚͈ê”Ê“I‚Èî•ñ‚ðƒLƒƒƒvƒ`ƒƒ‚µ‚ÄA“Á’è‚Ì–â‘è‚ðˆ—‚·‚邽‚ß‚¾‚¯‚ɃR[ƒh‚ðC³‚¨‚æ‚Ñ/‚Ü‚½‚ÍăfƒvƒƒC‚·‚邱‚ƂȂ­A—\Šú‚µ‚È‚¢“Á’è‚Ì–â‘è‚ðƒfƒoƒbƒO‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +- ���O�ÍA�Č������̂�����o�O�i�v���_�N�V�����‹��Ŕ����������̂ÌA�e�X�g�‹��łÍČ��ł��Ȃ��o�O�ȂÇj�Ɋւ����L�p�È������ñ‹Ÿ‚��܂��B +- ���O�ÍA�X�e�[�g�����g�Ԃ̎��Ԃ̌o�߂ȂÇA�p�t�H�[�}���X�Ɋ֘A���é“�v�����уf�[�^���ñ‹Ÿ‚ł��܂��B +- �\���”\�Èê‡ï¿½A���O�͈��ʓI�È������L���v�`�����ÄA�����̖������������邽�߂����ɃR�[�h���C��������/�܂��Íăf�v���C���邱�ƂȂ��A�\�����Ȃ������̖������f�o�b�O���邱�Ƃ��ł��܂��B -ƒƒO‚Éo—Í‚·‚é—Ê‚ÍAî•ñ‚ÆŠÈŒ‰‚³‚̊Ԃ̑˦“_‚Å‚·Bî•ñ‚ª‘½‚·‚¬‚邯ƒƒO‚ª‚‰¿‚ɂȂèA*ƒXƒNƒ[ƒ‹ƒuƒ‰ƒCƒ“ƒh*‚ª”­¶‚µA•K—v‚Èî•ñ‚ðŒ©‚Â‚¯‚邱‚Æ‚ª“‚­‚È‚è‚Ü‚·Bî•ñ‚ª­‚È‚·‚¬A•K—v‚Èî•ñ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B‚±‚Ì‚½‚ßAo—Í‚ð\¬‰Â”\‚É‚·‚邱‚Ƃ͔ñí‚ɕ֗˜‚Å‚·B’ÊíAƒƒO“à‚ÌŠeƒŒƒR[ƒh‚ÍAƒ\[ƒXƒR[ƒh“à‚̈ʒuAŽÀs‰Â”\‚Èꇂ͂»‚ê‚ðŽÀs‚µ‚½ƒXƒŒƒbƒhAŽÀs‚̳Šm‚ÈŽžA‚¨‚æ‚шê”Ê“I‚ÉA•Ï”‚Ì’lAƒf[ƒ^ƒIƒuƒWƒFƒNƒg‚Ì”‚ȂǂªŠÜ‚Ü‚ê‚Ü‚·B‚±‚ê‚ç‚̃ƒOƒXƒe[ƒgƒƒ“ƒg‚ÍAƒ\[ƒXƒR[ƒh‘S‘̂ɂ킽‚Á‚ÄA“Á‚ÉŽå—v‹@”\“_‚âŠëŒ¯‚ȃR[ƒh‚ÌŽü‚è‚ÉŽUÝ‚µ‚Ä‚¢‚Ü‚·BŠeƒXƒe[ƒgƒƒ“ƒg‚ɃŒƒxƒ‹‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«AƒVƒXƒeƒ€‚ªŒ»Ý‚»‚̃Œƒxƒ‹‚ðo—Í‚·‚邿‚¤‚Éݒ肳‚ê‚Ä‚¢‚éꇂɂ̂݃ŒƒR[ƒh‚ðo—Í‚µ‚Ü‚·B—\‘z‚³‚ê‚é–â‘è‚ɑΈ‚·‚邽‚ß‚ÉAƒƒOƒXƒe[ƒgƒƒ“ƒg‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒpƒtƒH[ƒ}ƒ“ƒX‚𑪒肷‚é•K—v«‚ð—\Šú‚µ‚Ü‚·B +���O�Éo�͂����ʂÍA�����ƊȌ����̊Ԃ̑Ë��_�ł��B���ñ‚ª‘��������ƃ��O�������ɂȂ��A*�X�N���[���u���C���h*���������A�K�v�È��������‚��邱�Ƃ�����Ȃ��܂��B���ñ‚ªï¿½ï¿½È‚����A�K�v�È��ñ‚ªŠÜ‚܂��Ă��Ȃ��”\���������܂��B���̂��ßA�o�͂��\���”\�ɂ��邱�Ƃ͔����ɕ֗��ł��B�Ê��A���O���̊e���R�[�h�ÍA�\�[�X�R�[�h���̈ʒu�A���s�”\�Èê‡ï¿½Í‚��������s�����X���b�h�A���s�Ì��m�Ȏ����A�����ш��ʓI�ÉA�Ï��̒l�A�f�[�^�I�u�W�F�N�g�Ì��Ȃǂ��܂܂��܂��B�������̃��O�X�e�[�g�����g�ÍA�\�[�X�R�[�h�S�̂ɂ킽���ÄA���Ɏ��v�@�\�_���댯�ȃR�[�h�̎����ɎU�݂��Ă��܂��B�e�X�e�[�g�����g�Ƀ��x�������蓖�Ă邱�Ƃ��ł��A�V�X�e�������݂��̃��x�����o�͂����悤�Éݒ肳���Ă����ê‡ï¿½É‚̂݃��R�[�h���o�͂��܂��B�\�z�����������ɑÎ����邽�߂ÉA���O�X�e�[�g�����g���݌v�����K�v�������܂��B�p�t�H�[�}���X�𑪒肷���K�v�����\�����܂��B -‰i‘±“I‚ȃƒO‚ª‚ ‚éꇂÍAƒƒOƒŒƒR[ƒh‚ÉŠÖ‚µ‚Ĉóüƒ‰ƒCƒ“‚ðŽÀs‚Å‚«‚邿‚¤‚ɂȂèAˆê•”‚̃fƒoƒbƒO•¶‚ªƒƒMƒ“ƒOƒVƒXƒeƒ€‚ɉi‹v‚ɒljÁ‚³‚ê‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B -Next [How to Understand Performance Problems](05-How to Understand Performance Problems.md) +�i���I�ȃ��O�������ê‡ï¿½ÍA���O���R�[�h�Ɋւ��Ĉ������C�������s�ł����悤�ɂȂ��A�ꕔ�̃f�o�b�O�������M���O�V�X�e���ɉi�v�ɒlj��������”\���������܂��B +Next [How to Understand Performance Problems](05-How%20to%20Understand%20Performance%20Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index 2a9b09f..fd94180 100644 --- a/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -1,11 +1,11 @@ # How to Understand Performance Problems [//]: # (Version:1.0.0) -ŽÀs’†‚̃VƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ð—‰ð‚·‚邱‚Æ‚ÍAƒfƒoƒbƒO‚ðŠwK‚·‚é‚̂Ɠ¯‚¶——R‚©‚ç”ð‚¯‚ç‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚ª‘‚¢‚½ƒR[ƒh‚̃RƒXƒg‚ðŠ®‘S‚ɳŠm‚É—‰ð‚µ‚Ä‚¢‚Ä‚àA‚ ‚È‚½‚̃R[ƒh‚ÍA‚ ‚È‚½‚ª‚Ù‚Æ‚ñ‚ǧŒä‚Å‚«‚È‚¢‚©‰ÂŽ‹‚Å‚ ‚鑼‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðŒÄ‚Ño‚·‚Å‚µ‚傤B‚µ‚©‚µAŽÀÛ‚É‚ÍAƒpƒtƒH[ƒ}ƒ“ƒX‚Ì–â‘è‚͈ê”Ê“I‚ɃfƒoƒbƒO‚æ‚è‚à­‚µˆÙ‚È‚èA­‚µŠÈ’P‚Å‚·B +���s���̃V�X�e���̃p�t�H�[�}���X�ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ÍA�f�o�b�O���w�K�����̂Ɠ������R�������������܂����B���Ȃ����������R�[�h�̃R�X�g�����S�É��m�ɗ������Ă��Ă��A���Ȃ��̃R�[�h�ÍA���Ȃ����قƂ��Ç����ł��Ȃ����Ž��ł��鑼�̃\�t�g�E�F�A�V�X�e�����ĂÑo���ł��傤�B�������A���ۂɂÍA�p�t�H�[�}���X�̖����͈��ʓI�Ƀf�o�b�O�����������قȂ��A�����ȒP�ł��B -‚ ‚È‚½‚â‚ ‚È‚½‚̌ڋq‚ªAƒVƒXƒeƒ€‚âƒTƒuƒVƒXƒeƒ€‚Ì‘¬“x‚ª’x‚·‚¬‚邯l‚¦‚Ä‚¢‚邯‚µ‚Ü‚·B‘¬‚­‚µ‚悤‚Æ‚·‚é‘O‚ÉA‚È‚º‚»‚ꂪ’x‚¢‚Ì‚©‚̸_ƒ‚ƒfƒ‹‚ð\’z‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ðs‚¤‚É‚ÍAƒvƒƒtƒ@ƒCƒŠƒ“ƒOƒc[ƒ‹‚Ü‚½‚Í“K؂ȃƒO‚ðŽg—p‚µ‚ÄAŽžŠÔ‚â‚»‚Ì‘¼‚ÌƒŠƒ\[ƒX‚ªŽÀÛ‚É”ï‚₳‚ê‚Ä‚¢‚éꊂð“Á’肵‚Ü‚·B‚»‚ÌŽžŠÔ‚Ì90“‚ªƒR[ƒh‚Ì10“‚É”ï‚₳‚ê‚邯‚¢‚¤—L–¼‚ÈŒ¾—t‚ª‚ ‚è‚Ü‚·BŽ„‚Í‚»‚ê‚ɃpƒtƒH[ƒ}ƒ“ƒX‚Ì–â‘è‚ɑ΂·‚é“üo—Í”ï—piI / Oj‚Ìd—v«‚ð’ljÁ‚µ‚Ü‚·B‘½‚­‚Ìê‡A‚Ù‚Æ‚ñ‚Ç‚Ìê‡AI / O‚Í‚ ‚éˆÓ–¡‚Å”ï‚₳‚ê‚Ü‚·B‚‰¿‚ÈI / O‚ƃR[ƒh‚Ì‚‰¿‚È10“‚ðŒ©‚Â‚¯‚邱‚Æ‚ÍA‚ ‚È‚½‚̃ƒ“ƒ^ƒ‹ƒ‚ƒfƒ‹‚ð\’z‚·‚邽‚߂̑æˆê•à‚Å‚·B +���Ȃ��₠�Ȃ��̌ڋq���A�V�X�e�����T�u�V�X�e���̑��x���x�������Æl���Ă����Ƃ��܂��B�������悤�Ƃ����O�ÉA�Ȃ����ꂪ�x���̂��Ì��_���f�����\�z�����K�v�������܂��B�������s���ɂÍA�v���t�@�C�����O�c�[���܂��͓K�؂ȃ��O���g�p���ÄA���Ԃ₻�̑��̃��\�[�X�����ۂɔ��₳���Ă����êŠï¿½ï¿½ï¿½ï¿½ï¿½è‚µï¿½Ü‚��B���̎��Ԃ�90�����R�[�h��10���ɔ��₳�����Ƃ����L���Ȍ��t�������܂��B���͂����Ƀp�t�H�[�}���X�̖����ɑ΂������o�͔��p�iI / O�j�Ìd�v�����lj����܂��B�����Ìê‡ï¿½A�قƂ��ǂÌê‡ï¿½AI / O�͂����Ӗ��Ŕ��₳���܂��B������I / O�ƃR�[�h�Ì�����10�������‚��邱�ƂÍA���Ȃ��̃����^�����f�����\�z���邽�߂̑������ł��B -ƒRƒ“ƒsƒ…[ƒ^ƒVƒXƒeƒ€‚Ì«”\‚ɂ͑½‚­‚ÌŽŸŒ³‚ª‚ ‚èA‘½‚­‚ÌƒŠƒ\[ƒX‚ªÁ”‚ê‚Ü‚·B‘ª’è‚·‚éʼn‚ÌƒŠƒ\[ƒX‚ÍA* wall-clock time *‚Å‚·B‚±‚ê‚ÍAŒvŽZ‚É•K—v‚ȇŒvŽžŠÔ‚Å‚·BƒƒMƒ“ƒO*ƒEƒH[ƒ‹ƒNƒƒbƒNŽžŠÔ*‚ÍA‘¼‚̃vƒƒtƒ@ƒCƒŠƒ“ƒO‚ªŽÀ—p“I‚łȂ¢ó‹µ‚Å‹N‚±‚é—\‘ª•s‰Â”\‚È󋵂ɂ‚¢‚Ä’Ê’m‚Å‚«‚邽‚ßA“Á‚Éd—v‚Å‚·B‚µ‚©‚µA‚±‚ê‚Í•K‚¸‚µ‚à‰æ‘œ‘S‘Ì‚ð•\‚·‚Ƃ͌À‚ç‚È‚¢Bꇂɂæ‚Á‚Ăͭ‚µŽžŠÔ‚ª‚©‚©‚è‚Ü‚·‚ªAŽÀۂɈ—‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ƒRƒ“ƒsƒ…[ƒeƒBƒ“ƒOŠÂ‹«‚Å‚ÍA”ñí‚É‘½‚­‚̃vƒƒZƒbƒT•b‚ðÁ”ï‚·‚é‚à‚̂͂¸‚Á‚Æ—Ç‚¢‚Å‚µ‚傤B“¯—l‚ÉAƒƒ‚ƒŠ[Aƒlƒbƒgƒ[ƒN‘шæ•Aƒf[ƒ^ƒx[ƒX‚Ü‚½‚Í‘¼‚̃T[ƒo[‚ւ̃AƒNƒZƒX‚ÍAÅI“I‚ɃvƒƒZƒbƒT•b‚æ‚è‚à‚͂邩‚É‚‰¿‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·B +�R���s���[�^�V�X�e���Ì��\�ɂ͑����̎����������A�����̃��\�[�X��������܂��B���肷���Å��̃��\�[�X�ÍA* wall-clock time *�ł��B�����ÍA�v�Z�ɕK�v�È��v���Ԃł��B���M���O*�E�H�[���N���b�N����*�ÍA���̃v���t�@�C�����O�����p�I�łȂ��󋵂ŋN�����\���s�”\�È󋵂ɂ‚��Ēʒm�ł��邽�ßA���Éd�v�ł��B�������A�����͕K�������摜�S�̂��\���Ƃ͌����Ȃ��B�ê‡ï¿½É‚����ĂÍ������Ԃ��������܂����A���ۂÉ������Ȃ����΂Ȃ��Ȃ��R���s���[�e�B���O�‹��łÍA�����ɑ����̃v���Z�b�T�b����������̂͂����Ɨǂ��ł��傤�B���l�ÉA�������[�A�l�b�g���[�N�шæ•�A�f�[�^�x�[�X�܂��͑��̃T�[�o�[�ւ̃A�N�Z�X�ÍA�ÅI�I�Ƀv���Z�b�T�b�������͂邩�É����ɂȂ��”\���������܂��B -“¯Šú‰»‚³‚ꂽ‹¤—LƒŠƒ\[ƒX‚Ì‹£‡‚ÍAƒfƒbƒhƒƒbƒN‚Æ‹Q‰ì‚ðˆø‚«‹N‚±‚·‰Â”\«‚ª‚ ‚è‚Ü‚·BƒfƒbƒhƒƒbƒN‚ÍA•s“K؂ȓ¯Šú‚⃊ƒ\[ƒX—v‹‚Ì‚½‚߂Ɉ—‚Å‚«‚È‚¢‚±‚Ƃł·B‹Q‰ì‚Æ‚ÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚ð“K؂ɃXƒPƒWƒ…[ƒ‹‚·‚邱‚Ƃł͂ ‚è‚Ü‚¹‚ñB‚»‚ꂪ‚·‚ׂĊú‘Ò‚Å‚«‚éꇂÍAƒvƒƒWƒFƒNƒg‚ÌŠJŽnŽž‚©‚炱‚Ì‹£‡‚𑪒肷‚é•û–@‚ª‚ ‚邱‚Æ‚ªÅ‘P‚Å‚·B‚±‚Ì‹£‡‚ª‹N‚±‚ç‚È‚­‚Ä‚àA‚»‚ê‚ðŽ©M‚ð‚à‚Á‚Ä•\–¾‚Å‚«‚邱‚Ƃ͔ñí‚É—L—p‚Å‚·B +���������ꂽ���L���\�[�X�̋����ÍA�f�b�h���b�N�ƋQ���������N�����”\���������܂��B�f�b�h���b�N�ÍA�s�K�؂ȓ����⃊�\�[�X�v���̂��߂É����ł��Ȃ����Ƃł��B�Q���ƂÍA�R���|�[�l���g���K�؂ɃX�P�W���[�����邱�Ƃł͂����܂����B���ꂪ���ׂĊ��҂ł����ê‡ï¿½ÍA�v���W�F�N�g�̊J�n�����炱�̋����𑪒肷�����@�����邱�Ƃ��őP�ł��B���̋������N�����Ȃ��Ă��A���������M�������ĕ\���ł��邱�Ƃ͔����ɗL�p�ł��B -Next [How to Fix Performance Problems](06-How to Fix Performance Problems.md) +Next [How to Fix Performance Problems](06-How%20to%20Fix%20Performance%20Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index 426edcb..e066233 100644 --- a/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -1,12 +1,12 @@ # How to Fix Performance Problems [//]: # (Version:1.0.0) -‚Ù‚Æ‚ñ‚ǂ̃\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ÍAʼn‚ÉƒŠƒŠ[ƒX‚³‚ꂽ‚Æ‚«‚æ‚è‚à10?100”{‚Ì‘¬“x‚Å”äŠr“IŠÈ’P‚É쬂ł«‚Ü‚·BŽs꓊“ü‚܂ł̎žŠÔ‚ð”—‚ç‚ê‚é’†‚ÅA’Pƒ‚©‚Âv‘¬‚Éì‹Æ‚ðs‚¤ƒ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð‘I‘ð‚·‚é‚±‚Æ‚ÍAŒ«–¾‚ÅŒø‰Ê“I‚Å‚·‚ªA‘¼‚̃\ƒŠƒ…[ƒVƒ‡ƒ“‚æ‚èŒø—¦“I‚ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAƒpƒtƒH[ƒ}ƒ“ƒX‚̓†[ƒUƒrƒŠƒeƒB‚̈ꕔ‚Å‚ ‚èA‚µ‚΂µ‚ÎÅI“I‚ɂ͂æ‚èTd‚ÉŒŸ“¢‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�قƂ��ǂ̃\�t�g�E�F�A�v���W�F�N�g�ÍA�Å��Ƀ����[�X���ꂽ�Ƃ�������10?100�{�̑��x�Ŕ��r�I�ȒP�Éì¬ï¿½Å‚��܂��B�s�꓊���܂ł̎��Ԃ𔗂����钆�ÅA�P�����Âv���É��Ƃ��s���\�����[�V�������I�����邱�ƂÍA�����Ō��ʓI�ł����A���̃\�����[�V�������������I�ł͂����܂����B�������A�p�t�H�[�}���X�̓��[�U�r���e�B�̈ꕔ�ł����A���΂��ÎÅI�I�ɂ͂����T�d�Ɍ��������K�v�������܂��B -”ñí‚É•¡ŽG‚ȃVƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ðŒüコ‚¹‚邽‚߂̌®‚ÍAƒ{ƒgƒ‹ƒlƒbƒN*‚⃊ƒ\[ƒX‚̑啔•ª‚ªÁ”‚ê‚éêŠ‚ðŒ©‚Â‚¯‚é‚Ì‚É\•ª‚É•ªÍ‚·‚邱‚Ƃł·BŒvŽZŽžŠÔ‚̂킸‚©1“‚ðè‚ß‚éŠÖ”‚ÌÅ“K‰»‚ɂ͂ ‚Ü‚èˆÓ–¡‚ª‚ ‚è‚Ü‚¹‚ñBŒoŒ±‘¥‚Æ‚µ‚ÄAƒVƒXƒeƒ€‚âƒVƒXƒeƒ€‚Ìd—v‚È•”•ª‚ð­‚È‚­‚Æ‚à2”{‘¬‚­‚·‚邯Žv‚í‚È‚¢ŒÀ‚èA‰½‚©‚ð‚·‚é‘O‚ÉTd‚Él‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B’Ê킱‚ê‚ðs‚¤•û–@‚ª‚ ‚è‚Ü‚·B•ÏX‚É•K—v‚ȃeƒXƒg‚Æ•iŽ¿•ÛØ‚Ì“w—Í‚ðŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B‚»‚ꂼ‚ê‚Ì•ÏX‚É‚æ‚Á‚ăeƒXƒg‚Ì•‰’S‚ª‚©‚©‚è‚Ü‚·‚Ì‚ÅA‚¢‚­‚‚©‚̑傫‚È•ÏX‚ð‰Á‚¦‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B +�����ɕ��G�ȃV�X�e���̃p�t�H�[�}���X�����コ���邽�߂̌��ÍA�{�g���l�b�N*�⃊�\�[�X�̑啔������������êŠï¿½ï¿½ï¿½ï¿½ï¿½Â‚����̂É\���ɕ��͂��邱�Ƃł��B�v�Z���Ԃ̂킸��1�������߂��Ö��ÌÅ“K���ɂ͂��܂��Ӗ��������܂����B�o�����Ƃ��ÄA�V�X�e�����V�X�e���Ìd�v�ȕ��������Ȃ��Ƃ�2�{���������Ǝv���Ȃ������A�����������O�ÉT�d�Él�����K�v�������܂��B�Ê킱�����s�����@�������܂��B�ÏX�ɕK�v�ȃe�X�g�ƕiï¿½ï¿½ï¿½ÛØ‚Ì“w�͂��������Ă��������B���ꂼ���̕ÏX�ɂ����ăe�X�g�̕��S���������܂��̂ÅA�����‚��̑傫�ȕÏX�������������͂邩�ɗD���Ă��܂��B -‰½‚©‚ð2”{‚ɉü‘P‚µ‚½Œã‚ÍAƒVƒXƒeƒ€‚Ì’†‚ÅŽŸ‚É‚‰¿‚ȃ{ƒgƒ‹ƒlƒbƒN‚ð”­Œ©‚·‚邽‚߂ɭ‚È‚­‚Æ‚àÄl‚µAÄ•ªÍ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +������2�{�ɉ��P�������ÍA�V�X�e���̒��Ŏ��É����ȃ{�g���l�b�N�𔭌����邽�߂É��Ȃ��Ƃ��Äl���A�ĕ��͂����K�v�������܂��B -‘½‚­‚Ìê‡AƒpƒtƒH[ƒ}ƒ“ƒX‚̃{ƒgƒ‹ƒlƒbƒN‚ÍA“ª‚𔂦‚é‘ã‚í‚è‚ÉA‘«‚𔂦A4‚ÅŠ„‚邱‚Ƃɂæ‚Á‚Ä‹‚𔂦‚é—á‚ɂȂè‚Ü‚·B‚½‚Æ‚¦‚ÎAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒXƒVƒXƒeƒ€‚É“K؂ȃCƒ“ƒfƒbƒNƒX‚ð•t‚¯‚邱‚Æ‚ª‚Å‚«‚¸A‘½‚­‚ÌŒŸõ‚ðs‚¤‚ÆA­‚È‚­‚Æ‚à20”{’x‚­‚È‚é‚Ȃǂ̃Gƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B‘¼‚Ì—á‚Æ‚µ‚Ä‚ÍA“à•”ƒ‹[ƒv‚Å•s•K—v‚ÈI / O‚ðŽÀs‚µA•s—v‚ȃfƒoƒbƒO•¶‚ðŽc‚µ‚½‚èA•s•K—v‚ȃƒ‚ƒŠŠ„‚è“–‚ÄA“Á‚ɃpƒtƒH[ƒ}ƒ“ƒX‚ÉŠÖ‚µ‚Ä•¶‘‰»‚³‚ê‚Ä‚¢‚È‚¢ƒ‰ƒCƒuƒ‰ƒŠ‚â‚»‚Ì‘¼‚̃TƒuƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‹“‚°‚ç‚ê‚Ü‚·B‚±‚ÌŽí‚̉ü‘P‚ÍŽžXu’áŠ|‚¯‚̉ʎÀv‚ƌĂ΂êA‚¢‚­‚‚©‚Ì—˜“_‚ð’ñ‹Ÿ‚·‚邽‚߂ɊȒP‚É‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B +�����Ìê‡ï¿½A�p�t�H�[�}���X�̃{�g���l�b�N�ÍA���ð”‚����������ÉA���ð”‚��A4�Ŋ��邱�Ƃɂ����ċ��ð”‚������ɂȂ��܂��B���Ƃ��ÎA�����[�V���i���f�[�^�x�[�X�V�X�e���ɓK�؂ȃC���f�b�N�X���t���邱�Ƃ��ł����A�����̌������s���ÆA���Ȃ��Ƃ�20�{�x���Ȃ��Ȃǂ̃G���[���������܂����B���̗��Ƃ��ĂÍA�������[�v�ŕs�K�v��I / O�����s���A�s�v�ȃf�o�b�O�����c�������A�s�K�v�ȃ��������蓖�ÄA���Ƀp�t�H�[�}���X�Ɋւ��ĕ����������Ă��Ȃ����C�u�����₻�̑��̃T�u�V�X�e�����g�p���邱�Ƃ����������܂��B���̎��̉��P�͎��X�u���|���̉ʎ��v�ƌĂ΂��A�����‚��̗��_���ñ‹Ÿ‚��邽�߂ɊȒP�ɑI�Ԃ��Ƃ��ł��܂��B -‚Ԃ牺‚ª‚Á‚Ä‚¢‚é‰Ê•¨‚ª‘«‚è‚È‚­‚È‚Á‚Ä‚©‚çA‚ ‚È‚½‚͉½‚ð‚µ‚Ü‚·‚©H‚³‚ÄA‚ ‚È‚½‚Í‚à‚Á‚Æã‚És‚­‚±‚Æ‚ª‚Å‚«‚éA‚Ü‚½‚Í–Ø‚ðƒ`ƒ‡ƒbƒv‚·‚éB¬‚³‚ȉü‘P‚𑱂¯‚邱‚Æ‚àAƒVƒXƒeƒ€‚âƒTƒuƒVƒXƒeƒ€‚ð^Œ•‚ÉÄÝŒv‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B i‚±‚ê‚ÍAV‚µ‚¢ÝŒv‚¾‚¯‚łȂ­AãŽi‚É‚±‚ꂪ—Ç‚¢l‚¦‚Å‚ ‚邱‚Æ‚ð”[“¾‚³‚¹‚é—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Æ‚µ‚Ă̂ ‚È‚½‚̃XƒLƒ‹‚ðŽg—p‚·‚éâD‚Ì‹@‰ï‚Å‚·Bj‚µ‚©‚µAƒTƒuƒVƒXƒeƒ€‚ÌÄÝŒv‚ɂ‚¢‚Ę_‚¶‚é‘O‚ÉA‚ ‚È‚½‚Ì’ñˆÄ‚ª‚»‚ê‚ð5?10”{—Ç‚­‚·‚é‚©‚Ç‚¤‚©‚É‚©‚©‚í‚炸A -Next [How to Optimize Loops](07-How to Optimize Loops.md) +�Ԃ牺�����Ă����ʕ��������Ȃ��Ȃ��Ă����A���Ȃ��͉������܂����H���ÄA���Ȃ��͂����Æï¿½ï¿½És�����Ƃ��ł����A�܂��͖؂��`���b�v�����B�����ȉ��P�𑱂��邱�Ƃ��A�V�X�e�����T�u�V�X�e�����^���ÉÄÝŒv���邱�Ƃ��ł��܂��B �i�����ÍA�V�����݌v�����łȂ��A���i�ɂ��ꂪ�ǂ��l���ł��邱�Ƃ��[���������ǂ��v���O���}�[�Ƃ��Ă̂��Ȃ��̃X�L�����g�p�������D�̋@���ł��B�j�������A�T�u�V�X�e���ÌÄÝŒv�ɂ‚��Ę_�����O�ÉA���Ȃ��̒��Ă�������5?10�{�ǂ����邩�ǂ����ɂ������炸�A +Next [How to Optimize Loops](07-How%20to%20Optimize%20Loops.md) diff --git a/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index 0b0ca4e..9fb72aa 100644 --- a/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -1,14 +1,14 @@ # How to Optimize Loops [//]: # (Version:1.0.0) -Žž‚É‚ÍAŽÀs‚ÉŽžŠÔ‚ª‚©‚©‚èA»•i‚̃{ƒgƒ‹ƒlƒbƒN‚ƂȂ郋[ƒv‚âÄ‹AŠÖ”‚ª”­¶‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·Bƒ‹[ƒv‚ð­‚µ‘‚­‚·‚é‘O‚ÉAŠ®‘S‚É휂·‚é•û–@‚ª‚ ‚é‚©‚Ç‚¤‚©‚ðŒŸ“¢‚µ‚ÄA”•ª‚ð”ï‚₵‚Ä‚­‚¾‚³‚¢B•ʂ̃Aƒ‹ƒSƒŠƒYƒ€‚ª‚â‚è‚Ü‚·‚©H‘¼‚ɉ½‚©‚ðŒvŽZ‚µ‚È‚ª‚ç‚»‚ê‚ðŒvŽZ‚Å‚«‚Ü‚·‚©H‰ñ”ðô‚ªŒ©‚‚©‚ç‚È‚¢ê‡‚ÍAƒ‹[ƒv‚ðÅ“K‰»‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍŠÈ’P‚Å‚·B•¨‚ð“®‚©‚·BŒ‹‹Ç‚̂Ƃ±‚ëA‚±‚ê‚ɂ͓Ƒn«‚¾‚¯‚łȂ­AŠeŽí—Þ‚Ì’Âq‚Æ•\Œ»‚Ì”ï—p‚Ì—‰ð‚à•K—v‚ƂȂè‚Ü‚·B‚±‚±‚É‚¢‚­‚‚©‚Ì’ñˆÄ‚ª‚ ‚è‚Ü‚·F +���ɂÍA���s�Ɏ��Ԃ��������A���i�̃{�g���l�b�N�ƂȂ郋�[�v���ċA�Ö����������邱�Ƃ������܂��B���[�v���������������O�ÉA���S�Éíœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½@�����邩�ǂ������������ÄA���������₵�Ă��������B�ʂ̃A���S���Y���������܂����H���ɉ������v�Z���Ȃ��炻�����v�Z�ł��܂����H�����ô‚ªŒï¿½ï¿½Â‚����Ȃ��ê‡ï¿½ÍA���[�v���œK�����邱�Ƃ��ł��܂��B�����͊ȒP�ł��B���𓮂����B���ǂ̂Ƃ����A�����ɂ͓Ƒn�������łȂ��A�e���ނ̒Âq�ƕ\���̔��p�̗������K�v�ƂȂ��܂��B�����ɂ����‚��̒��Ă������܂��F -- •‚“®¬”“_‰‰ŽZ‚ð휂µ‚Ü‚·B -- V‚µ‚¢ƒƒ‚ƒŠƒuƒƒbƒN‚ð•s•K—v‚ÉŠ„‚è“–‚ĂȂ¢‚Å‚­‚¾‚³‚¢B -- ’蔂ðˆê‚É܂肽‚½‚݂܂·B -- I / O‚ðƒoƒbƒtƒ@‚Ɉړ®‚·‚éB -- •ª—ô‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B -- ‚‰¿‚ÈŒ^ƒLƒƒƒXƒg‚ð‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B -- ƒCƒ“ƒfƒbƒNƒX‚ðÄŒvŽZ‚·‚é‚̂ł͂Ȃ­Aƒ|ƒCƒ“ƒ^‚ðˆÚ“®‚·‚éB +- ���������_���Z���íœï¿½ï¿½ï¿½Ü‚��B +- �V�����������u���b�N���s�K�v�Ɋ��蓖�ĂȂ��ł��������B +- �è”���ê�É܂肽���݂܂��B +- I / O���o�b�t�@�Ɉړ������B +- ���ô‚µ‚Ȃ��ł��������B +- �����Ȍ^�L���X�g�����Ȃ��ł��������B +- �C���f�b�N�X���Čv�Z�����̂ł͂Ȃ��A�|�C���^���ړ������B -‚±‚ê‚ç‚ÌŠe‘€ì‚̃RƒXƒg‚ÍA“Á’è‚̃VƒXƒeƒ€‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚¢‚­‚‚©‚̃VƒXƒeƒ€‚Å‚ÍAƒRƒ“ƒpƒCƒ‰‚ƃn[ƒhƒEƒFƒA‚ª‚±‚ê‚ç‚Ì‚±‚Æ‚ðs‚¢‚Ü‚·B–¾Šm‚ÅŒø—¦“I‚ȃR[ƒh‚ÍA“Á’è‚̃vƒ‰ƒbƒgƒtƒH[ƒ€‚Ì—‰ð‚ð•K—v‚Æ‚·‚éƒR[ƒh‚æ‚è‚à—D‚ê‚Ä‚¢‚Ü‚·B -Next [How to Deal with I/O Expense](08-How to Deal with IO Expense.md) +�������̊e�����̃R�X�g�ÍA�����̃V�X�e���ɂ����ĈقȂ��܂��B�����‚��̃V�X�e���łÍA�R���p�C���ƃn�[�h�E�F�A���������̂��Ƃ��s���܂��B���m�����I�ȃR�[�h�ÍA�����̃v���b�g�t�H�[���̗������K�v�Ƃ����R�[�h�������D���Ă��܂��B +Next [How to Deal with I/O Expense](08-How%20to%20Deal%20with%20IO%20Expense.md) diff --git a/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index 0aa2165..31b812b 100644 --- a/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -1,13 +1,13 @@ # How to Deal with I/O Expense [//]: # (Version:1.0.0) -‘½‚­‚Ì–â‘è‚ɑ΂µ‚ÄAƒvƒƒZƒbƒT‚̓n[ƒhƒEƒFƒAƒfƒoƒCƒX‚Ƃ̒ÊMƒRƒXƒg‚É”ä‚ׂĂ‘¬‚Å‚·B‚±‚̃RƒXƒg‚ÍA’Êí‚ÍI / O‚ÆÈ—ª‚³‚êAƒlƒbƒgƒ[ƒNƒRƒXƒgAƒfƒBƒXƒNI / OAƒf[ƒ^ƒx[ƒXƒNƒGƒŠAƒtƒ@ƒCƒ‹I / OA‚¨‚æ‚уvƒƒZƒbƒT‚É‚ ‚Ü‚è‹ßÚ‚µ‚È‚¢ƒn[ƒhƒEƒFƒA‚ÌŽg—p‚ȂǂªŠÜ‚Ü‚ê‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‚‘¬‚ȃVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ÍA‚µ‚΂µ‚΂¢‚­‚‚©‚Ì‚«‚‚¢ƒ‹[ƒv‚ŃR[ƒh‚ð‰ü‘P‚·‚邱‚ÆA‚Ü‚½‚̓Aƒ‹ƒSƒŠƒYƒ€‚ð‰ü‘P‚·‚邱‚Æ‚æ‚è‚àI / O‚ð‰ü‘P‚·‚邱‚Ƃ̖â‘è‚Å‚·B +�����̖����ɑ΂��ÄA�v���Z�b�T�̓n�[�h�E�F�A�f�o�C�X�Ƃ̒ÊM�R�X�g�ɔ��ׂÄ����ł��B���̃R�X�g�ÍA�Ê���I / O�ÆÈ—������A�l�b�g���[�N�R�X�g�A�f�B�X�NI / O�A�f�[�^�x�[�X�N�G���A�t�@�C��I / O�A�����уv���Z�b�T�ɂ��܂��ßڂ��Ȃ��n�[�h�E�F�A�̎g�p�Ȃǂ��܂܂��܂��B���������ÄA�����ȃV�X�e�����\�z���邱�ƂÍA���΂��΂����‚��̂��‚����[�v�ŃR�[�h�����P���邱�ÆA�܂��̓A���S���Y�������P���邱�Ƃ�����I / O�����P���邱�Ƃ̖����ł��B -I / O‚ð‰ü‘P‚·‚é‚É‚ÍAƒLƒƒƒbƒVƒ“ƒO‚Æ•\Œ»‚Ì2‚‚̔ñí‚ÉŠî–{“I‚ȃeƒNƒjƒbƒN‚ª‚ ‚è‚Ü‚·BƒLƒƒƒbƒVƒ“ƒO‚ÍA‚»‚Ì’l‚̃Rƒs[‚ðƒ[ƒJƒ‹‚ÉŠi”[‚·‚邱‚Æ‚ÅI / O‚ð‰ñ”ð‚µ‚Äiˆê”Ê“I‚ɂ͉½‚ç‚©‚Ì’ŠÛ“I‚È’l‚̓ǂݎæ‚è‚ð”ð‚¯‚éjA’l‚ðŽæ“¾‚·‚邽‚ß‚ÉI / O‚ÍŽÀs‚³‚ê‚Ü‚¹‚ñBƒLƒƒƒbƒVƒ“ƒO‚Ì‘æˆê‚ÌŒ®‚ÍA‚ǂ̃f[ƒ^‚ªƒ}ƒXƒ^[‚Å‚ ‚èA‚ǂ̃f[ƒ^‚ªƒRƒs[‚Å‚ ‚é‚©‚𖾊m‚É‚·‚邱‚Ƃł·Bƒ}ƒXƒ^[ŠúŠÔ‚Í1‚‚¾‚¯‚Å‚·BƒLƒƒƒbƒVƒ“ƒO‚ÍAƒRƒs[‚ªuŽž‚Ƀ}ƒXƒ^[‚Ö‚Ì•ÏX‚𔽉f‚Å‚«‚È‚¢‚±‚Æ‚ª‚ ‚邯‚¢‚¤ŠëŒ¯«‚ð‚à‚½‚炵‚Ü‚·B +I / O�����P�����ɂÍA�L���b�V���O�ƕ\����2�‚̔����Ɋ��{�I�ȃe�N�j�b�N�������܂��B�L���b�V���O�ÍA���̒l�̃R�s�[�����[�J���Ɋi�[���邱�Ƃ�I / O���������Äi���ʓI�ɂ͉��炩�̒��ۓI�Ȓl�̓ǂݎ������������j�A�l���擾���邽�߂�I / O�͎��s�����܂����B�L���b�V���O�̑����̌��ÍA�ǂ̃f�[�^���}�X�^�[�ł����A�ǂ̃f�[�^���R�s�[�ł��邩�𖾊m�ɂ��邱�Ƃł��B�}�X�^�[���Ԃ�1�‚����ł��B�L���b�V���O�ÍA�R�s�[���u���Ƀ}�X�^�[�ւ̕ÏX�𔽉f�ł��Ȃ����Ƃ������Ƃ����댯���������炵�܂��B -•\Œ»‚ÍAƒf[ƒ^‚ð‚æ‚èŒø—¦“I‚É•\Œ»‚·‚邱‚Ƃɂæ‚Á‚ÄI / O‚ðˆÀ‚­‚·‚éƒAƒvƒ[ƒ`‚Å‚·B‚±‚ê‚ÍAlŠÔ‚̉“ǫ‚â‰Â”À«‚È‚ÇA‘¼‚Ì—v‹‚Ƌْ£‚µ‚Ä‚¢‚邱‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B +�\���ÍA�f�[�^�����������I�ɕ\�����邱�Ƃɂ�����I / O�����������A�v���[�`�ł��B�����ÍA�l�Ԃ̉“Ç����”����ȂÇA���̗v���Ƌْ����Ă��邱�Ƃ��悭�����܂��B -•\Œ»‚ÍAʼn‚ÌŽÀ‘•‚©‚ç2?3”{‚ɉü‘P‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ðs‚¤‚½‚߂̋Zp‚É‚ÍAlŠÔ‚ª“ǂ߂é‚à‚̂̑ã‚í‚è‚ɃoƒCƒiƒŠ•\Œ»‚ðŽg—p‚·‚邱‚ÆA’·‚¢ƒVƒ“ƒ{ƒ‹‚ðƒGƒ“ƒR[ƒh‚·‚é•K—v‚ª‚È‚¢‚悤‚ɃVƒ“ƒ{ƒ‹‚ÌŽ«‘‚ð‘—M‚·‚邱‚ÆA‚»‚µ‚ċɒ[‚Ƀnƒtƒ}ƒ“•„†‰»‚̂悤‚È‚±‚Æ‚ªŠÜ‚Ü‚ê‚Ü‚·B +�\���ÍA�Å��̎�������2?3�{�ɉ��P�����邱�Ƃ������܂��B�������s�����߂̋Z�p�ɂÍA�l�Ԃ��ǂ߂����̂̑������Ƀo�C�i���\�����g�p���邱�ÆA�����V���{�����G���R�[�h�����K�v���Ȃ��悤�ɃV���{���̎����ð‘—M���邱�ÆA�����ċɒ[�Ƀn�t�}���������̂悤�Ȃ��Ƃ��܂܂��܂��B -Žž‚ɂ͉”\‚È‘æ3‚Ì‹Z–@‚ÍAŒvŽZ‚ðƒf[ƒ^‚ɋ߂¯‚邱‚Ƃɂæ‚Á‚ÄŽQƂ̋NJ«‚ð‰ü‘P‚·‚邱‚Ƃł ‚éB‚½‚Æ‚¦‚ÎAƒf[ƒ^ƒx[ƒX‚©‚ç‚¢‚­‚‚©‚̃f[ƒ^‚ð“ǂݞ‚ÝAWŒv‚Ȃǂ̒Pƒ‚È‚à‚Ì‚ðŒvŽZ‚·‚éꇂÍAƒf[ƒ^ƒx[ƒXƒT[ƒo[‚Ŏ擾‚µ‚Ä‚­‚¾‚³‚¢B‚±‚ê‚Í‚ ‚È‚½‚ªì‹Æ‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚ÌŽí—ނɑ傫‚­ˆË‘¶‚µ‚Ü‚·‚ªA‚»‚ê‚𒲂ׂé•K—v‚ª‚ ‚è‚Ü‚·B +���ɂ͉”\�ȑ�3�̋Z�@�ÍA�v�Z���f�[�^�ɋ߂Â��邱�Ƃɂ����ĎQ�Ƃ̋Ç��������P���邱�Ƃł����B���Ƃ��ÎA�f�[�^�x�[�X���炢���‚��̃f�[�^���ǂÝ��ÝA�W�v�Ȃǂ̒P���Ȃ��̂��v�Z�����ê‡ï¿½ÍA�f�[�^�x�[�X�T�[�o�[�Ŏ擾���Ă��������B�����͂��Ȃ������Ƃ��Ă����V�X�e���̎��ނɑ傫���ˑ����܂����A�����𒲂ׂ��K�v�������܂��B -Next [How to Manage Memory](09-How to Manage Memory.md) \ No newline at end of file +Next [How to Manage Memory](09-How%20to%20Manage%20Memory.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md index 58f9ea6..23c6c6c 100644 --- a/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -1,15 +1,15 @@ # How to Manage Memory [//]: # (Version:1.0.0) -ƒƒ‚ƒŠ‚ÍA‚ ‚È‚½‚ªŽg‚¢‰Ê‚½‚µ‚Ă͂Ȃç‚È‚¢‹Md‚ÈƒŠƒ\[ƒX‚Å‚·B‚µ‚΂炭‚»‚ê‚𖳎‹‚·‚邱‚Ƃ͂ł«‚Ü‚·‚ªAÅI“I‚ɂ̓ƒ‚ƒŠ‚ÌŠÇ—•û–@‚ðŒˆ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�������ÍA���Ȃ����g���ʂ����Ă͂Ȃ��Ȃ��M�d�ȃ��\�[�X�ł��B���΂炭�����𖳎����邱�Ƃ͂ł��܂����A�ÅI�I�ɂ̓������̊Ǘ����@�����肷���K�v�������܂��B -’Pˆê‚̃Tƒuƒ‹[ƒ`ƒ“‚͈̔͂𒴂¦‚ÄŽ‘±‚·‚é•K—v‚ª‚ ‚é—̈æ‚ÍA‚µ‚΂µ‚Î* heap allocated *‚ƌĂ΂ê‚Ü‚·Bƒƒ‚ƒŠ‚̃`ƒƒƒ“ƒN‚Í–ð‚É—§‚½‚È‚¢‚Ì‚ÅA‰½‚àŒ¾‹y‚µ‚Ä‚¢‚È‚¢‚Æ‚«‚Í*ƒSƒ~*‚Å‚·B‚ ‚È‚½‚ªŽg—p‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚É‚æ‚Á‚Ä‚ÍAƒƒ‚ƒŠ‚ª‚²‚݂ɂȂÁ‚Ä‚µ‚Ü‚¤‚Æ‚«‚ÉAŽ©•ª‚Å–¾Ž¦“I‚Ƀƒ‚ƒŠ‚ÌŠ„‚è“–‚Ä‚ð‰ðœ‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚æ‚è•p”É‚É*ƒKƒx[ƒWƒRƒŒƒNƒ^*‚ð’ñ‹Ÿ‚·‚éƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BƒKƒx[ƒWƒRƒŒƒNƒ^‚̓Sƒ~‚É‹C‚¢‚ÄAƒvƒƒOƒ‰ƒ}‚ª—v‹‚·‚éƒAƒNƒVƒ‡ƒ“‚È‚µ‚ɃXƒy[ƒX‚ð‰ð•ú‚µ‚Ü‚·BƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚Í‘f°‚炵‚¢‚Å‚·FƒGƒ‰[‚ðŒ¸‚ç‚µAƒR[ƒh‚ÌŠÈŒ‰‚³‚ÆŠÈŒ‰‚³‚ðˆÀ‚­‚µ‚Ü‚·B‰Â”\‚Å‚ ‚ê‚ÎŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +�P���̃T�u���[�`���͈̔͂𒴂��Ď��������K�v�������̈��ÍA���΂���* heap allocated *�ƌĂ΂��܂��B�������̃`�����N�͖��ɗ����Ȃ��̂ÅA�������y���Ă��Ȃ��Ƃ���*�S�~*�ł��B���Ȃ����g�p�������V�X�e���ɂ����ĂÍA�����������݂ɂȂ��Ă��܂��Ƃ��ÉA�����Ŗ����I�Ƀ������̊��蓖�Ă����������K�v�����邩�������܂����B�����p�ɂ�*�K�x�[�W�R���N�^*���ñ‹Ÿ‚����V�X�e�����g�p���邱�Ƃ��ł��܂��B�K�x�[�W�R���N�^�̓S�~�ɋC���ÄA�v���O���}���v�������A�N�V�����Ȃ��ɃX�y�[�X���������܂��B�K�x�[�W�R���N�V�����͑f���炵���ł��F�G���[�����炵�A�R�[�h�̊Ȍ����ƊȌ������������܂��B�”\�ł����Ύg�p�����������B -‚µ‚©‚µAƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚Å‚ ‚Á‚Ä‚àA‚·‚ׂẴƒ‚ƒŠ‚ðƒSƒ~‚Å‚¢‚Á‚Ï‚¢‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŒÃ“T“I‚ȊԈႢ‚ÍAƒnƒbƒVƒ…ƒe[ƒuƒ‹‚ðƒLƒƒƒbƒVƒ…‚Æ‚µ‚ÄŽg—p‚µAƒnƒbƒVƒ…ƒe[ƒuƒ‹“à‚ÌŽQÆ‚ð휂·‚邱‚Æ‚ð–Y‚ê‚Ä‚µ‚Ü‚¢‚Ü‚·BŽQÆ‚ªŽc‚Á‚Ä‚¢‚é‚Ì‚ÅAŽwަ‘ÎÛ‚ÍŽûW‚Å‚«‚È‚¢‚à‚Ì‚ÌA–ð‚É—§‚½‚È‚¢B‚±‚ê‚Í*ƒƒ‚ƒŠƒŠ[ƒN*‚ƌĂ΂ê‚Ü‚·Bƒƒ‚ƒŠƒŠ[ƒN‚ð‘Šú‚ÉŒ©‚‚¯‚ÄC³‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B’·ŽžŠÔ‰Ò“®‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚Å‚ÍAƒeƒXƒg‚Ńƒ‚ƒŠ[‚ªŽg‚¢‰Ê‚½‚³‚ê‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñ‚ªAƒ†[ƒU[‚ÍŽg‚¢‰Ê‚½‚³‚ê‚Ü‚·B +�������A�K�x�[�W�R���N�V�����ł����Ă��A���ׂẴ��������S�~�ł����ς��ɂ��邱�Ƃ��ł��܂��B�ÓT�I�ȊԈႢ�ÍA�n�b�V���e�[�u�����L���b�V���Ƃ��Ďg�p���A�n�b�V���e�[�u�����̎Q�Ƃ��íœï¿½ï¿½ï¿½é‚±ï¿½Æ‚��Y���Ă��܂��܂��B�Q�Ƃ��c���Ă����̂ÅA�w���Îۂ͎��W�ł��Ȃ����̂ÌA���ɗ����Ȃ��B������*���������[�N*�ƌĂ΂��܂��B���������[�N�ð‘Šï¿½ï¿½ÉŒï¿½ï¿½Â‚��ÄC�������K�v�������܂��B�����ԉғ����Ă����V�X�e���łÍA�e�X�g�������[���g���ʂ������邱�Ƃ͂����܂��ñ‚ªA���[�U�[�͎g���ʂ������܂��B -V‚µ‚¢ƒIƒuƒWƒFƒNƒg‚Ì쬂ÍA‚ǂ̃VƒXƒeƒ€‚Å‚à“K“x‚É‚‰¿‚Å‚·B‚µ‚©‚µAƒTƒuƒ‹[ƒ`ƒ“‚̃[ƒJƒ‹•Ï”‚É’¼ÚŠ„‚è“–‚Ä‚ç‚ꂽƒƒ‚ƒŠ‚ÍA’ÊíA‚»‚ê‚ð‰ð•ú‚·‚é•ûj‚ª”ñí‚ÉŠÈ’P‚Ȃ̂ÅAˆÀ‰¿‚Å‚·B•s—v‚ȃIƒuƒWƒFƒNƒg‚Ì쬂ð”ð‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·B +�V�����I�u�W�F�N�g�Ìì¬ï¿½ÍA�ǂ̃V�X�e���ł��K�x�É����ł��B�������A�T�u���[�`���̃��[�J���Ï��ɒ��ڊ��蓖�Ă��ꂽ�������ÍA�Ê��A�����������������j�������ɊȒP�Ȃ̂ÅA�����ł��B�s�v�ȃI�u�W�F�N�g�Ìì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½K�v�������܂��B -d—v‚ȃP[ƒX‚ÍAˆê“x‚É•K—v‚ȃIƒuƒWƒFƒNƒg”‚ÌãŒÀ‚ð’è‹`‚Å‚«‚邯‚«‚Å‚·B‚±‚ê‚ç‚̃IƒuƒWƒFƒNƒg‚ª‚·‚ׂ睂¶—ʂ̃ƒ‚ƒŠ‚ðè‚ß‚éꇂÍA‚»‚ê‚ç‚ð‚·‚×‚Ä•ÛŽ‚·‚邽‚ß‚ÉA’Pˆê‚̃ƒ‚ƒŠƒuƒƒbƒN‚Ü‚½‚̓oƒbƒtƒ@‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚Ü‚·B•K—v‚ȃIƒuƒWƒFƒNƒg‚ÍA‚±‚̃oƒbƒtƒ@“à‚Åݒ肳‚ꂽ‰ñ“]ƒpƒ^[ƒ“‚ÅŠ„‚è“–‚Ä‚ç‚ê‰ð•ú‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚µ‚½‚ª‚Á‚ÄAƒŠƒ“ƒOƒoƒbƒtƒ@‚ƌĂ΂ê‚邱‚Æ‚à‚ ‚è‚Ü‚·B‚±‚ê‚Í’ÊíAƒq[ƒvŠ„‚è“–‚Ä‚æ‚è‚à‚‘¬‚Å‚·B +�d�v�ȃP�[�X�ÍA���x�ɕK�v�ȃI�u�W�F�N�g���Ì��������`�ł����Ƃ��ł��B�������̃I�u�W�F�N�g�����ׂē����ʂ̃����������߂��ê‡ï¿½ÍA�����������ׂĕێ����邽�߂ÉA�P���̃������u���b�N�܂��̓o�b�t�@�����蓖�Ă邱�Ƃ��ł��܂��B�K�v�ȃI�u�W�F�N�g�ÍA���̃o�b�t�@���Åݒ肳�ꂽ���]�p�^�[���Ŋ��蓖�Ă������������邱�Ƃ������܂��B���������ÄA�����O�o�b�t�@�ƌĂ΂��邱�Ƃ������܂��B�����͒Ê��A�q�[�v���蓖�Ă����������ł��B -ƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚É—Š‚é‚̂ł͂Ȃ­AŠ„‚è“–‚Ä‚ç‚ꂽƒXƒy[ƒX‚𖾎¦“I‚ɉð•ú‚·‚é•K—v‚ª‚ ‚éꇂª‚ ‚è‚Ü‚·BŽŸ‚ÉAŠ„‚è“–‚Ä‚ç‚ꂽƒƒ‚ƒŠ‚ÌŠeƒ`ƒƒƒ“ƒN‚ÉTd‚ȃCƒ“ƒeƒŠƒWƒFƒ“ƒX‚ð“K—p‚µA“K؂ȃ^ƒCƒ~ƒ“ƒO‚ÅŠ„‚è“–‚Ä‚ð‰ðœ‚·‚é•û–@‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·Bƒƒ\ƒbƒh‚ÍA쬂·‚éƒIƒuƒWƒFƒNƒg‚ÌŽí—Þ‚²‚ƂɈقȂéꇂª‚ ‚è‚Ü‚·Bƒƒ‚ƒŠŠ„‚è“–‚Ä‘€ì‚Ì‚·‚ׂĂ̎Às‚ªAƒƒ‚ƒŠŠ„‚è“–‚ĉ𜑀ì‚É‚æ‚Á‚ÄÅI“I‚Ɉê’v‚·‚邱‚Æ‚ðŠm”F‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚Í”ñí‚ɓ‚¢‚Ì‚ÅAƒvƒƒOƒ‰ƒ}‚ÍŽQƃJƒEƒ“ƒg‚Ȃǂ̊î–{“I‚ÈŒ`Ž®‚̃K[ƒxƒWƒRƒŒƒNƒVƒ‡ƒ“‚ðŽÀ‘•‚·‚邾‚¯‚Åς݂܂·B +�K�x�[�W�R���N�V�����ɗ����̂ł͂Ȃ��A���蓖�Ă��ꂽ�X�y�[�X�𖾎��I�ɉ��������K�v�������ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ÉA���蓖�Ă��ꂽ�������̊e�`�����N�ÉT�d�ȃC���e���W�F���X���K�p���A�K�؂ȃ^�C�~���O�Ŋ��蓖�Ă������������@���݌v�����K�v�������܂��B���\�b�h�ÍA�ì¬ï¿½ï¿½ï¿½ï¿½ï¿½I�u�W�F�N�g�̎��ނ��ƂɈقȂ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���������蓖�đ����̂��ׂĂ̎��s���A���������蓖�ĉ��������ɂ����ÄÅI�I�Ɉ��v���邱�Ƃ��m�F�����K�v�������܂��B�����͔����ɓ���̂ÅA�v���O���}�͎Q�ƃJ�E���g�Ȃǂ̊��{�I�Ȍ`���̃K�[�x�W�R���N�V�������������邾���Åς݂܂��B -Next [How to Deal with Intermittent Bugs](10-How to Deal with Intermittent Bugs.md) +Next [How to Deal with Intermittent Bugs](10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) diff --git a/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index e288d99..62dfaac 100644 --- a/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -1,17 +1,17 @@ # How to Deal with Intermittent Bugs [//]: # (Version:1.0.0) -’f‘±“I‚ȃoƒO‚ÍA50ƒtƒB[ƒg‚Ì•s‰ÂŽ‹‚Ì“dŽÔ‚©‚çŠO‰F’ˆ‚ÌŽí—ނ̃oƒO‚Ì‚¢‚Æ‚±‚Å‚·B‚±‚̈«–²‚Í”ñí‚ɂ܂ê‚Å‚ ‚èAŠÏŽ@‚·‚é‚͓̂‚¢‚Å‚·‚ªA‚µ‚΂µ‚΂»‚ê‚𖳎‹‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚ª‚»‚ê‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Ì‚ÅAƒfƒoƒbƒO‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB +�f���I�ȃo�O�ÍA50�t�B�[�g�̕s�Ž��̓d�Ԃ����O�F���̎��ނ̃o�O�̂��Ƃ��ł��B���̈����͔����ɂ܂��ł����A�ώ@�����͓̂���ł����A���΂��΂����𖳎����邱�Ƃ͂ł��܂����B���Ȃ������������‚��邱�Ƃ��ł��Ȃ��̂ÅA�f�o�b�O���邱�Ƃ͂ł��܂����B -’f‘±“I‚ȃoƒO‚ÍA8ŽžŠÔŒã‚ɂ͋^–â‚ðŽ‚¿Žn‚߂܂·‚ªA‘¼‚Ì‚·‚ׂẴƒWƒbƒN‚Æ“¯‚¶–@‘¥‚É]‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ꂪ“‚¢‚Ì‚ÍA‚»‚ꂪ–¢’m‚ÌðŒ‰º‚ł̂݋N‚±‚邯‚¢‚¤‚±‚Ƃł·BƒoƒO‚ª”­¶‚·‚é󋵂ð‹L˜^‚µ‚ÄAƒoƒ‰ƒcƒL‚ª–{“–‚ɉ½‚Å‚ ‚é‚©‚ð„‘ª‚Å‚«‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢BðŒ‚̓f[ƒ^’l‚ÉŠÖ˜A‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B—Ⴆ‚ÎAƒƒCƒIƒ~ƒ“ƒO*‚ð’l‚Æ‚µ‚Ä“ü—Í‚·‚éꇂɂ̂ݔ­¶‚µ‚Ü‚·B‚»‚ꂪ•Ï“®«‚ÌŒ´ˆö‚łȂ¢ê‡AŽŸ‚Ì‹^˜f‚Í•Às«‚ª•s“K؂ɓ¯Šú‚³‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·B +�f���I�ȃo�O�ÍA8���Ԍ��ɂ͋^���������n�߂܂����A���̂��ׂẴ��W�b�N�Ɠ����@���É]���Ȃ����΂Ȃ��܂����B���ꂪ����̂ÍA���ꂪ���m�Ì������ł̂݋N�����Ƃ������Ƃł��B�o�O�����������󋵂��L�^���ÄA�o���c�L���{���ɉ��ł��邩�ð„‘��ł����悤�ɂ��Ă��������B�����̓f�[�^�l�Ɋ֘A���Ă����”\���������܂��B�Ⴆ�ÎA���C�I�~���O*���l�Ƃ��ē��͂����ê‡ï¿½É‚̂ݔ������܂��B���ꂪ�ϓ����̌����łȂ��ê‡ï¿½A���̋^�f�͕��s�����s�K�؂ɓ����������K�v�������܂��B -ƒoƒO‚ð§Œä‚³‚ꂽ•û–@‚ÅÄŒ»‚µ‚悤‚Æ‚µ‚Ă݂Ă­‚¾‚³‚¢B‚»‚ê‚ðÄŒ»‚Å‚«‚È‚¢ê‡‚ÍAƒƒMƒ“ƒOƒVƒXƒeƒ€‚ð\’z‚·‚邱‚ƂŃgƒ‰ƒbƒv‚ðݒ肵‚Ü‚·B•K—v‚Èꇂ͓Á•ʂȃƒOƒVƒXƒeƒ€‚ð쬂µAŽÀÛ‚É”­¶‚µ‚½‚Æ‚«‚É•K—v‚ÆŽv‚í‚ê‚é‚à‚Ì‚ðƒƒO‚É‹L˜^‚Å‚«‚Ü‚·BƒoƒO‚ª‚ ‚È‚½‚Ì‹C‚Ü‚®‚ê‚ł͂Ȃ­Aƒvƒƒ_ƒNƒVƒ‡ƒ“‚ł̂݋N‚±‚é‚È‚ç‚ÎA‚±‚ê‚Í’·‚¢ƒvƒƒZƒX‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒƒO‚©‚瓾‚ç‚ê‚éƒqƒ“ƒg‚͉ðŒˆô‚ð’ñ‹Ÿ‚µ‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒƒO‚ð‰ü‘P‚·‚é‚Ì‚É\•ª‚Èî•ñ‚ð’ñ‹Ÿ‚·‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‰ü—Ç‚³‚ꂽƒƒMƒ“ƒOƒVƒXƒeƒ€‚ÍA¶ŽY‚ɓГü‚·‚é‚܂łɒ·‚¢ŽžŠÔ‚ª‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ÌŒãAƒoƒO‚ªÄ”­‚µ‚Ä‚æ‚葽‚­‚Ìî•ñ‚𓾂é‚Ì‚ð‘Ò‚½‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃TƒCƒNƒ‹‚Í‚µ‚΂炭‚ÌŠÔ‘±‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B +�o�O�ð§Œä‚³ï¿½ê‚½ï¿½ï¿½ï¿½@�ÅČ����悤�Ƃ��Ă݂Ă��������B�������Č��ł��Ȃ��ê‡ï¿½ÍA���M���O�V�X�e�����\�z���邱�ƂŃg���b�v���ݒ肵�܂��B�K�v�Èê‡ï¿½Í“��ʂȃ��O�V�X�e�����ì¬ï¿½ï¿½ï¿½A���ۂɔ��������Ƃ��ɕK�v�Ǝv���������̂����O�ɋL�^�ł��܂��B�o�O�����Ȃ��̋C�܂����ł͂Ȃ��A�v���_�N�V�����ł̂݋N�����Ȃ��ÎA�����͒����v���Z�X���������܂����B���O���瓾�������q���g�͉��������ñ‹Ÿ‚��Ȃ����������܂��ñ‚ªA���O�����P�����̂É\���È������ñ‹Ÿ‚��邩�������܂����B���ǂ��ꂽ���M���O�V�X�e���ÍA���Y�ɓ��������܂łɒ������Ԃ������邱�Ƃ������܂��B���̌��A�o�O���Ĕ����Ă��葽���Ì����𓾂��̂��҂��Ȃ����΂Ȃ��܂����B���̃T�C�N���͂��΂炭�̊ԑ������Ƃ��ł��܂��B -Ž„‚ª¡‚܂łÉ쬂µ‚½‚΂©‚°‚½’f‘±“I‚ȃoƒO‚ÍAƒNƒ‰ƒXƒvƒƒWƒFƒNƒg‚Ì‚½‚߂̊֔Œ^ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚̃}ƒ‹ƒ`ƒXƒŒƒbƒhŽÀ‘•‚Å‚·BŽ„‚Í‹@”\ƒvƒƒOƒ‰ƒ€‚̳Šm‚È•Às•]‰¿‚ð”ñí‚ÉTd‚ÉŠm•Û‚µAŽg—p‰Â”\‚È‚·‚ׂĂÌCPUi‚±‚ÌꇂÍ8ŒÂj‚ð—LŒø‚ÉŠˆ—p‚µ‚Ü‚µ‚½BƒKƒx[ƒWƒRƒŒƒNƒ^‚Ì“¯Šú‚ð–Y‚ê‚Ä‚µ‚Ü‚Á‚½BƒVƒXƒeƒ€‚ÍA‰½‚©–Ú—§‚‚±‚Æ‚ªŠÔˆá‚Á‚Ä‚µ‚Ü‚¤‘O‚ÉA‚µ‚΂µ‚ÎŽ„‚ªŽn‚ß‚½ŽdŽ–‚ðI‚í‚点‚éA’·‚¢ŽžŠÔ‚ðŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŽ„‚̊ԈႢ‚ªŽ„‚É‹N‚±‚é‘O‚ÉAŽ„‚ªƒn[ƒhƒEƒFƒA‚É‹^–â‚ðŽ‚¿Žn‚ß‚½‚±‚Æ‚ð”F‚߂Ēp‚¸‚©‚µ‚¢B +�������܂łÉì¬ï¿½ï¿½ï¿½ï¿½ï¿½Î‚������f���I�ȃo�O�ÍA�N���X�v���W�F�N�g�̂��߂̊Ö��^�v���O���~���O�����̃}���`�X���b�h�����ł��B���͋@�\�v���O�����Ì��m�ȕ��s�]���������ÉT�d�Ɋm�ۂ��A�g�p�”\�Ȃ��ׂĂ�CPU�i���Ìê‡ï¿½ï¿½8�Âj���L���Ɋ��p���܂����B�K�x�[�W�R���N�^�̓������Y���Ă��܂����B�V�X�e���ÍA�����ڗ��‚��Ƃ��Ԉ����Ă��܂��O�ÉA���΂��Ύ����n�߂��d�����I���点���A�������Ԃ����s���邱�Ƃ��ł��܂��B���̊ԈႢ�����ɋN�����O�ÉA�����n�[�h�E�F�A�ɋ^���������n�߂����Ƃ��F�߂Ēp���������B -Eê‚Å‚ÍÅ‹ßAŠÔŒ‡“I‚ȃoƒO‚ª‚ ‚èA”TŠÔ‚ÅŒ©‚‚¯‚Ü‚µ‚½BŽ„‚½‚¿‚ÍAApacheâ„uWebƒT[ƒo[‚Ì”wŒã‚É‚ ‚éJavaâ„uƒ}ƒ‹ƒ`ƒXƒŒƒbƒhƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒT[ƒo[‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚‘¬‚ȃy[ƒWƒ^[ƒ“‚ðˆÛŽ‚·‚邽‚ß‚ÉAŽ„‚½‚¿‚̓y[ƒW‚ß‚­‚èƒXƒŒƒbƒh‚Ƃ͈قȂé4‚‚̕ÊX‚̃XƒŒƒbƒh‚̬‚³‚ȃZƒbƒg‚Å‚·‚ׂĂÌI / O‚ðŽÀs‚µ‚Ü‚·BŽžXA‚±‚ê‚ç‚ÍA–¾‚ç‚©‚ÉAŽ„‚½‚¿‚Ì‹L˜^‚ªŽ„‚½‚¿‚ɉ½ŽžŠÔ‚à“`‚¦‚邱‚Æ‚ª‚Å‚«‚½ŒÀ‚èA‰½‚©—L—p‚È‚±‚Æ‚ð‚â‚ß‚³‚¹‚邱‚ƂɂȂè‚Ü‚·BŽ„‚½‚¿‚Í4‚‚̃XƒŒƒbƒh‚ðŽ‚Á‚Ä‚¢‚½‚Ì‚ÅA4‚‚·‚ׂĂªƒXƒ^ƒbƒN‚µ‚Ä‚¢‚È‚¢ŒÀ‚èA‚±‚ê‚Í‚»‚ꎩ‘Ì‹‘å‚È–â‘è‚ł͂ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½B‚±‚ê‚ç‚̃XƒŒƒbƒh‚É‚æ‚Á‚Ä‹ó‚É‚³‚ꂽƒLƒ…[‚ÍA‚·‚ׂĂ̎g—p‰Â”\‚ȃƒ‚ƒŠ‚ð‚·‚Î‚â‚­–„‚ß‚ÄAƒT[ƒo[‚ðƒNƒ‰ƒbƒVƒ…‚³‚¹‚Ü‚·B‚±‚Ì‚±‚Æ‚ð—‰ð‚·‚é‚Ì‚É1TŠÔ‚Ù‚Ç‚©‚©‚è‚Ü‚µ‚½‚ªA‰½‚ªŒ´ˆö‚©A”­¶‚·‚é‚©AƒXƒŒƒbƒh‚ª‰½‚ð‚µ‚Ä‚¢‚é‚Ì‚©‚͂܂¾•ª‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B +�E���łÍÅ‹ßA�Ԍ��I�ȃo�O�������A���T�ԂŌ��‚��܂����B�������ÍAApacheâ„uWeb�T�[�o�[�̔w���ɂ���Javaâ„u�}���`�X���b�h�A�v���P�[�V�����T�[�o�[�������Ă��܂��B�����ȃy�[�W�^�[�����ێ����邽�߂ÉA�������̓y�[�W�߂����X���b�h�Ƃ͈قȂ�4�‚̕ÊX�̃X���b�h�Ì����ȃZ�b�g�ł��ׂĂ�I / O�����s���܂��B���X�A�������ÍA���炩�ÉA�������̋L�^���������ɉ����Ԃ��`���邱�Ƃ��ł��������A�����L�p�Ȃ��Ƃ����߂����邱�ƂɂȂ��܂��B��������4�‚̃X���b�h�������Ă����̂ÅA4�‚��ׂĂ��X�^�b�N���Ă��Ȃ������A�����͂��ꎩ�̋����Ȗ����ł͂����܂����ł����B�������̃X���b�h�ɂ����ċ��ɂ��ꂽ�L���[�ÍA���ׂĂ̎g�p�”\�ȃ����������΂₭���߂ÄA�T�[�o�[���N���b�V�������܂��B���̂��Ƃð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚�1�T�Ԃقǂ������܂������A�����������A�������邩�A�X���b�h���������Ă����̂��͂܂��������܂����ł����B -‚±‚ê‚ÍAƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ÉŠÖ˜A‚·‚郊ƒXƒN‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·BƒeƒLƒXƒg‚©‚çHTMLƒ^ƒO‚ð휂µ‚½ƒ‰ƒCƒZƒ“ƒXƒR[ƒh‚ðŽg—p‚µ‚Ä‚¢‚Ü‚µ‚½BŽ„‚½‚¿‚̓\[ƒXƒR[ƒh‚ðŽ‚Á‚Ä‚¢‚Ü‚µ‚½‚ªAŽ„‚½‚¿‚̓T[ƒo[‚̃ƒO‚ð—§‚Ä‚é‚Ü‚ÅATd‚ÉŒ¤‹†‚µ‚Ä‚¢‚Ü‚¹‚ñ‚Å‚µ‚½BŽ„‚½‚¿‚ÍÅI“I‚ÉA–â‘è‚Ì‚ ‚郉ƒCƒZƒ“ƒXƒR[ƒh‚É“dŽqƒ[ƒ‹ƒXƒŒƒbƒh‚ª‹l‚Ü‚Á‚Ä‚¢‚邱‚ƂɋC•t‚«‚Ü‚µ‚½B +�����ÍA�T�[�h�p�[�e�B�̃\�t�g�E�F�A�Ɋ֘A���郊�X�N�������Ă��܂��B�e�L�X�g����HTML�^�O���íœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½C�Z���X�R�[�h���g�p���Ă��܂����B�������̓\�[�X�R�[�h�������Ă��܂������A�������̓T�[�o�[�̃��O�𗧂Ă��܂ÅA�T�d�Ɍ������Ă��܂����ł����B�������ÍÅI�I�ÉA�����̂��郉�C�Z���X�R�[�h�ɓd�q���[���X���b�h���l�܂��Ă��邱�ƂɋC�t���܂����B -‚±‚̃vƒƒOƒ‰ƒ€‚ÍA’·‚­‚Ä’¿‚µ‚¢Ží—ނ̃eƒLƒXƒg‚𜂢‚ÄA‚¤‚Ü‚­‚¢‚Á‚½B‚±‚ê‚ç‚Ì•¶Í‚Å‚ÍAƒR[ƒh‚Í“ñŽŸ“I‚Å‚ ‚Á‚½‚èAˆ«‚©‚Á‚½‚肵‚Ü‚·B‚±‚ê‚ÍAˆ—ŽžŠÔ‚ªƒeƒLƒXƒg‚Ì’·‚³‚Ì2æ‚É”ä—á‚·‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚ç‚̃eƒLƒXƒg‚ªˆê”Ê“I‚É”­¶‚µ‚Ä‚¢‚½ê‡‚ÍA‚·‚®‚ɃoƒO‚ð”­Œ©‚µ‚½‚Í‚¸‚Å‚·B”ނ炪‚Ü‚Á‚½‚­‹N‚±‚Á‚½‚±‚Æ‚ª‚È‚¯‚ê‚ÎAŽ„‚½‚¿‚ÍŒˆ‚µ‚Ä–â‘è‚ð•ø‚¦‚Ü‚¹‚ñ‚Å‚µ‚½B‚»‚ꂪ‹N‚±‚邯AÅI“I‚É–â‘è‚ð—‰ð‚µ‰ðŒˆ‚·‚é‚܂łɔTŠÔ‚©‚©‚è‚Ü‚µ‚½B +���̃v���O�����ÍA�����Ē��������ނ̃e�L�X�g�������ÄA���܂��������B�������̕��͂łÍA�R�[�h�͓ñŽŸ“I�ł��������A���������肵�܂��B�����ÍA�������Ԃ��e�L�X�g�̒�����2���ɔ��Ⴗ�邱�Ƃ��Ӗ����܂��B�������̃e�L�X�g�����ʓI�ɔ������Ă����ê‡ï¿½ÍA�����Ƀo�O�𔭌������͂��ł��B�ނ炪�܂������N���������Ƃ��Ȃ����ÎA�������͌����Ė����������܂����ł����B���ꂪ�N�����ÆA�ÅI�I�ɖ����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚Å‚É��T�Ԃ������܂����B -Next [How to Learn Design Skills](11-How to Learn Design Skills.md) +Next [How to Learn Design Skills](11-How%20to%20Learn%20Design%20Skills.md) diff --git a/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 600af9b..10ef977 100644 --- a/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -1,9 +1,9 @@ # How to Learn Design Skills [//]: # (Version:1.0.0) -ƒ\ƒtƒgƒEƒFƒA‚ðÝŒv‚·‚é•û–@‚ðŠw‚Ô‚É‚ÍAÝŒvŽž‚É•¨—“I‚É‘¶Ý‚·‚邱‚Ƃɂæ‚Á‚ăƒ“ƒ^[‚Ìs“®‚ðŒ¤‹†‚µ‚Ü‚·B ŽŸ‚ÉA‚æ‚­‘‚©‚ꂽƒ\ƒtƒgƒEƒFƒA‚𒲂ׂ܂·B ‚»‚ÌŒãAÅV‚ÌÝŒv‹Zp‚ÉŠÖ‚·‚é‘Ђð“ǂނ±‚Æ‚ª‚Å‚«‚Ü‚·B +�\�t�g�E�F�A���݌v�������@���w�ԂɂÍA�݌v���ɕ����I�ɑ��݂��邱�Ƃɂ����ă����^�[�Ìs�����������܂��B ���ÉA�悭�����ꂽ�\�t�g�E�F�A�𒲂ׂ܂��B ���̌��A�ÅV�ÌÝŒv�Z�p�Ɋւ��é‘�Ђ��ǂނ��Ƃ��ł��܂��B -‚»‚ê‚©‚çA‚ ‚È‚½‚Í‚»‚ê‚ðŽ©•ª‚Å‚â‚é•K—v‚ª‚ ‚è‚Ü‚·B ¬‚³‚ȃvƒƒWƒFƒNƒg‚©‚çŽn‚߂܂µ‚傤B ÅI“I‚ÉŠ®—¹‚µ‚½‚çAƒfƒUƒCƒ“‚ªŽ¸”s‚µ‚½‚©A¬Œ÷‚µ‚½‚©AŒ³‚Ì”­‘z‚©‚ç‚ǂ̂悤‚É•ªŠò‚µ‚½‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B ‚»‚ÌŒãA‘¼‚Ìl‚Æ‹¦—Í‚µ‚ÄA‚æ‚è‘å‚«‚ȃvƒƒWƒFƒNƒg‚Éi‚ñ‚Å‚­‚¾‚³‚¢B ƒfƒUƒCƒ“‚ÍAŠl“¾‚·‚é‚܂łɉ½”N‚à‚©‚©‚é”»’f‚Ì–â‘è‚Å‚·B ƒXƒ}[ƒg‚ȃvƒƒOƒ‰ƒ}[‚ÍA2ƒ–ŒŽ‚Å\•ª‚ÉŠî‘b‚ðŠw‚ÑA‚»‚±‚©‚ç‰ü‘P‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +���ꂩ���A���Ȃ��͂����������ł����K�v�������܂��B �����ȃv���W�F�N�g�����n�߂܂��傤�B �ÅI�I�Ɋ����������A�f�U�C�������s�������A�����������A���̔��z�����ǂ̂悤�ɕ��ò‚µ‚������l�����������B ���̌��A���Ìl�Ƌ��͂��ÄA�����傫�ȃv���W�F�N�g�Éi���ł��������B �f�U�C���ÍA�l�������܂łɉ��N�������锻�f�̖����ł��B �X�}�[�g�ȃv���O���}�[�ÍA2�����Å\���Ɋ��b���w�ÑA�����������P���邱�Ƃ��ł��܂��B -Ž©•ª‚̃Xƒ^ƒCƒ‹‚ðŠJ”­‚·‚é‚͎̂©‘R‚Å–ð—§‚¿‚Ü‚·‚ªAƒfƒUƒCƒ“‚͉Ȋw‚ł͂Ȃ­Œ|p‚Å‚ ‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B ”팱ŽÒ‚É–{‚ð‘‚­l‚ÍA‚»‚ê‚ð‰ÈŠw“I‚ÉŒ©‚¹‚邱‚ƂɊÖS‚ª‚ ‚è‚Ü‚·B “Á’è‚̃fƒUƒCƒ“ƒXƒ^ƒCƒ‹‚ɂ‚¢‚ēƒf‚ɂ͂Ȃç‚È‚¢‚Å‚­‚¾‚³‚¢B +�����̃X�^�C�����J�������͎̂��R�Ŗ𗧂��܂����A�f�U�C���͉Ȋw�ł͂Ȃ��|�p�ł��邱�Ƃ��Y���Ȃ��ł��������B �팱�҂ɖ{�������l�ÍA�������Ȋw�I�Ɍ����邱�ƂɊÖS�������܂��B �����̃f�U�C���X�^�C���ɂ‚��ēƒf�ɂ͂Ȃ��Ȃ��ł��������B -Next [How to Conduct Experiments](12-How to Conduct Experiments.md) +Next [How to Conduct Experiments](12-How%20to%20Conduct%20Experiments.md) diff --git a/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index b468e1d..9796242 100644 --- a/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -1,23 +1,23 @@ # How to Conduct Experiments [//]: # (Version:1.0.0) -’x‚­‚Ĉ̑å‚ÈEdsger Dijkstra‚ÍAƒRƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‚ÍŽÀŒ±“I‚ȉȊw‚ł͂Ȃ­[ExpCS]‚Å‚ ‚èA“dŽqŒvŽZ‹@‚Ɉˑ¶‚µ‚È‚¢‚±‚Æ‚ð—Y•Ù‚Éà–¾‚µ‚Ü‚µ‚½B”Þ‚Í‚»‚ê‚ð1960”N‘ã[ƒiƒCƒt]‚ƌĂñ‚Å‚¢‚Ü‚·B +�x���Ĉ̑���Edsger Dijkstra�ÍA�R���s���[�^�T�C�G���X�͎����I�ȉȊw�ł͂Ȃ�[ExpCS]�ł����A�d�q�v�Z�@�Ɉˑ����Ȃ����Ƃ��Y�قÉ������܂����B�ނ͂�����1960�N��[�i�C�t]�ƌĂ��ł��܂��B -> ...Šë‹@‚ª‹N‚±‚Á‚½F‚»‚̃gƒsƒbƒN‚ÍAŽÀۂɂ͎èp‚Æ‚µ‚ÄŽèp‰ÈŠw‚ðŠw‚Ԃ悤‚È‚à‚̂ł ‚èAƒRƒ“ƒsƒ…[ƒeƒBƒ“ƒOƒTƒCƒGƒ“ƒX‚ÍlŠÔ‚ÌS‚É‚µ‚Á‚©‚è‚Æ–„‚ßž‚Ü‚ê‚Ä‚¢‚½Aƒ}ƒVƒ“‚Æ‚»‚ÌŽü•Ó‹@Ší‚ɂ‚¢‚ÄB +> ...���@���N�������F���̃g�s�b�N�ÍA���ۂɂ͎��p�Ƃ��Ď��p�Ȋw���w�Ԃ悤�Ȃ��̂ł����A�R���s���[�e�B���O�T�C�G���X�Íl�ԂÌS�ɂ��������Ɩ��ß��܂��Ă����A�}�V���Ƃ��̎��Ӌ@���ɂ‚��ÄB -ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÍŽÀŒ±“I‚ȉȊw‚Å‚ ‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÍAƒ_ƒCƒNƒXƒgƒ‰‚ªŒvŽZ‰ÈŠw‚É‚æ‚Á‚ĈӖ¡‚·‚é‚à‚̂Ɋ֗^‚·‚éæÒ‘ò‚ðŽ‚Á‚Ä‚¢‚Ü‚¹‚ñBŽ„‚½‚¿‚ÍŽÀŒ±‚Ì•ª–ì‚Å“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB•¨—ŠwŽÒ‚Ì‚·‚ׂĂª‚»‚¤‚ł͂Ȃ¢‚悤‚ÉAŽ„‚½‚¿‚ÍŽÀŒ±‚Ì•ª–ì‚Å“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB¡‚©‚ç30”N‚ðŽÀŒ±‚È‚µ‚És‚¤‚±‚Æ‚ª‚Å‚«‚ê‚ÎA‚»‚ê‚̓Rƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‚̈̑å‚Ȭ‰Ê‚ƂȂé‚Å‚µ‚傤B +�v���O���~���O�͎����I�ȉȊw�ł����ׂ��ł͂����܂��ñ‚ªA�قƂ��ǂÌ��ƃv���O���}�[�ÍA�_�C�N�X�g�����v�Z�Ȋw�ɂ����ĈӖ��������̂Ɋ֗^�����ґ��������Ă��܂����B�������͎����̕����œ����Ȃ����΂Ȃ��܂����B�����w�҂̂��ׂĂ������ł͂Ȃ��悤�ÉA�������͎����̕����œ����Ȃ����΂Ȃ��܂����B������30�N�������Ȃ��És�����Ƃ��ł����ÎA�����̓R���s���[�^�T�C�G���X�̈̑��È��ʂƂȂ��ł��傤�B -ŽÀs‚·‚é•K—v‚Ì‚ ‚éŽÀŒ±‚ÌŽí—Þ‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·B +���s�����K�v�̂��������̎��ނ͎��̂Ƃ����ł��B -- ­”‚̗Ⴊ‚ ‚éƒVƒXƒeƒ€‚ðƒeƒXƒg‚µ‚ÄA‚»‚ê‚炪ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚É€‹’‚µ‚Ä‚¢‚邱‚Æ‚ðŒŸØ‚µ‚½‚èAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ª‚È‚¢ê‡‚̉ž“š‚ð—‰ð‚µ‚½‚èA -- ¬‚³‚ȃR[ƒh‚Ì•ÏX‚ðƒeƒXƒg‚µ‚ÄAŽÀۂɃoƒO‚ðC³‚µ‚½‚©‚Ç‚¤‚©‚ðŠm”F‚µA -- «”\“Á«‚Ì•sŠ®‘S‚È’mޝ‚Ì‚½‚ß‚É2‚‚̈قȂéðŒ‰º‚ŃVƒXƒeƒ€‚Ì«”\‚𑪒肷‚éB -- ƒf[ƒ^‚Ì®‡«‚ðƒ`ƒFƒbƒN‚·‚éB -- ¢“ï‚ÈA‚Ü‚½‚͓‚¢ƒoƒO‚̉ðŒˆô‚ðŽ¦´‚·‚铌v‚ðŽûW‚·‚éB +- �����̗Ⴊ�����V�X�e�����e�X�g���ÄA�����炪�h�L�������e�[�V�����É������Ă��邱�Ƃ����؂������A�h�L�������e�[�V�������Ȃ��ê‡ï¿½Ì‰ï¿½ï¿½ï¿½ï¿½ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A +- �����ȃR�[�h�̕ÏX���e�X�g���ÄA���ۂɃo�O���C���������ǂ������m�F���A +- ���\�����̕s���S�Ȓm���̂��߂�2�‚̈قȂ��������ŃV�X�e���Ì��\�𑪒肷���B +- �f�[�^�Ì��������`�F�b�N�����B +- �����ÈA�܂��͓���o�O�̉��������������é“�v�����W�����B -Ž„‚Í‚±‚̃GƒbƒZƒC‚ł͎ÀŒ±‚̃fƒUƒCƒ“‚ðà–¾‚Å‚«‚邯‚ÍŽv‚í‚È‚¢B‚ ‚È‚½‚͕׋­‚µA—ûK‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µAŽ„‚Í2ƒrƒbƒg‚̃AƒhƒoƒCƒX‚ð’ñ‹Ÿ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +���͂��̃G�b�Z�C�ł͎����̃f�U�C���������ł����Ƃ͎v���Ȃ��B���Ȃ��͕׋����A���K���Ȃ����΂Ȃ��܂����B�������A����2�r�b�g�̃A�h�o�C�X���ñ‹Ÿ‚��邱�Ƃ��ł��܂��B -‚Ü‚¸A‚ ‚È‚½‚̉¼àA‚Ü‚½‚Í‚ ‚È‚½‚ªƒeƒXƒg‚µ‚悤‚Æ‚µ‚Ä‚¢‚éŽå’£‚ɂ‚¢‚ÄA”ñí‚É–¾Šm‚É‚·‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½A“Á‚ÉŽ©•ª‚ª¬—‚µ‚Ä‚¢‚éA‚Ü‚½‚Í‘¼‚Ìl‚Æ“­‚¢‚Ä‚¢‚邯Žv‚í‚ê‚éꇂÍA‰¼à‚ð‘‚«—¯‚ß‚é‚̂ɖ𗧂¿‚Ü‚·B +�܂��A���Ȃ��̉����A�܂��͂��Ȃ����e�X�g���悤�Ƃ��Ă����咣�ɂ‚��ÄA�����ɖ��m�ɂ����悤�ɂ��Ă��������B�܂��A���Ɏ������������Ă����A�܂��͑��Ìl�Ɠ����Ă����Ǝv�������ê‡ï¿½ÍA�������������߂��̂ɖ𗧂��܂��B -ˆê˜A‚ÌŽÀŒ±‚ðÝŒv‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B‚»‚ꂼ‚ê‚ÌŽÀŒ±‚ÍÅŒã‚ÌŽÀŒ±‚Å“¾‚ç‚ꂽ’mޝ‚ÉŠî‚¢‚Ä‚¢‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‰Â”\‚ÈŒÀ‚葽‚­‚Ìî•ñ‚ð’ñ‹Ÿ‚·‚邿‚¤‚ÉŽÀŒ±‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŽc”O‚È‚ª‚çA‚±‚ê‚ÍŠeŽÀŒ±‚ðŠÈ’P‚É‚·‚邱‚Ƃɋْ£‚µ‚Ä‚¢‚Ü‚·BŒoŒ±‚ð’Ê‚µ‚Ä‚±‚Ì”»’f‚ð”­“W‚³‚¹‚é•K—v‚ª‚ ‚è‚Ü‚·B +���A�̎������݌v���Ȃ����΂Ȃ��Ȃ����Ƃ��悭�����܂��B���ꂼ���̎����ÍŌ��̎����œ����ꂽ�m���Ɋ��Â��Ă��܂��B���������ÄA�”\�Ȍ��葽���Ì������ñ‹Ÿ‚����悤�Ɏ������݌v�����K�v�������܂��B�c�O�Ȃ����A�����͊e�������ȒP�ɂ��邱�Ƃɋْ����Ă��܂��B�o�����ʂ��Ă��̔��f�𔭓W�������K�v�������܂��B -Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why Estimation is Important.md) +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why%20Estimation%20is%20Important.md) diff --git a/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md index f641843..1a11cee 100644 --- a/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -1,15 +1,15 @@ # Why Estimation is Important [//]: # (Version:1.0.0) -‚Å‚«‚邾‚¯‘‚­Œ»—p‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ð‰Ò“­‚³‚¹‚é‚É‚ÍAŠJ”­‚ÌŒv‰æ‚¾‚¯‚łȂ­AƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“A“±“üAƒ}[ƒPƒeƒBƒ“ƒO‚àŒv‰æ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¤‹ÆƒvƒƒWƒFƒNƒg‚Å‚ÍA”Ì”„‚Æà–±‚à•K—v‚Å‚·BŠJ”­ŽžŠÔ‚ð—\‘ª‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ê‡A‚±‚ê‚ç‚ðŒø‰Ê“I‚ÉŒv‰æ‚·‚邱‚Ƃ͕s‰Â”\‚Å‚·B +�ł��邾���������p�̃\�t�g�E�F�A�V�X�e�����ғ��������ɂÍA�J���̌v�悾���łȂ��A�h�L�������e�[�V�����A�����A�}�[�P�e�B���O���v�悷���K�v�������܂��B���ƃv���W�F�N�g�łÍA�̔��Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½K�v�ł��B�J�����Ԃ��\�����邱�Ƃ��ł��Ȃ��ê‡ï¿½A�����������ʓI�Ɍv�悷�邱�Ƃ͕s�”\�ł��B -—ÇD‚È„’è‚Í—\‘ª‰Â”\«‚ð’ñ‹Ÿ‚·‚éBƒ}ƒl[ƒWƒƒ[‚à‚»‚ê‚ðˆ¤‚µ‚Ä‚¢‚Ü‚·B—˜_“I‚É‚àŽÀÛ“I‚É‚àAƒ\ƒtƒgƒEƒFƒA‚ÌŠJ”­‚ɂǂꂭ‚ç‚¢‚ÌŽžŠÔ‚ª‚©‚©‚é‚©‚ð³Šm‚É—\‘ª‚·‚邱‚Ƃ͕s‰Â”\‚Å‚ ‚邯‚¢‚¤Ž–ŽÀ‚ÍA‚µ‚΂µ‚ÎŒo‰cŽÒ‚ɂƂÁ‚ÄŽ¸‚í‚ê‚Ü‚·BŽ„‚½‚¿‚Í‚±‚Ì•s‰Â”\‚È‚±‚Æ‚ð‚¢‚Â‚à‚·‚邿‚¤‚É‹‚ß‚ç‚ê‚Ä‚¨‚èA³’¼‚É‚»‚ê‚É’¼–Ê‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µA‚±‚Ìì‹Æ‚Ì•s‰Â”\«‚ð”F‚߂Ȃ¢‚±‚Ƃͳ’¼‚Å‚ ‚èA•K—v‚ɉž‚¶‚Äà–¾‚µ‚Ä‚­‚¾‚³‚¢B„’è’l‚ɂ‚¢‚ÄŒë‚Á‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—]’n‚ª‚½‚­‚³‚ñ‚ ‚è‚Ü‚·BlX‚ÍŠè‚í‚­‚Í•¶Í‚ª‹Á‚­‚悤‚ÉŽv‚¦‚éŒXŒü‚ª‚ ‚è‚Ü‚·B +�ÇD�È����͗\���”\�����ñ‹Ÿ‚����B�}�l�[�W���[�������������Ă��܂��B���_�I�ɂ����ۓI�ɂ��A�\�t�g�E�F�A�̊J���ɂǂꂭ�炢�̎��Ԃ������邩�ð³Šm�ɗ\�����邱�Ƃ͕s�”\�ł����Ƃ��������ÍA���΂��Όo�c�҂ɂƂ��Ď������܂��B�������͂��̕s�”\�Ȃ��Ƃ����‚������悤�ɋ��߂����Ă����A�����ɂ����ɒ��ʂ��Ȃ����΂Ȃ��܂����B�������A���Ì��Ƃ̕s�”\�����F�߂Ȃ����ƂÍ����ł����A�K�v�ɉ����Ä��������������B�����l�ɂ‚��Č������R�~���j�P�[�V�����̗]�n���������ñ‚ ‚��܂��B�l�X�͊��킭�͕��͂������悤�Ɏv�����X���������܂��B ->Ž„‚ÍA‚à‚µŽ„‚ª–{“–‚É–â‘è‚ð—‰ð‚·‚ê‚ÎA5TŠÔ‚Å–ñ50“‚ÌŠm—¦‚Å’B¬‚·‚邱‚Æ‚ª‚Å‚«‚邯„‘ª‚µ‚Ü‚·i‚»‚ÌŠÔ‚É’N‚àŽ„‚½‚¿‚ð”Y‚Ü‚³‚È‚¯‚ê‚ÎjB +>���ÍA���������{���ɖ����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÎA5�T�ԂŖ�50���̊m���ŒB�����邱�Ƃ��ł����Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��i���̊ԂɒN�����������Y�܂��Ȃ����Îj�B -–{“–‚ɈӖ¡‚·‚éF +�{���ɈӖ������F ->Ž„‚Í¡‚©‚ç5TŠÔŒã‚É‚·‚ׂĂ̂±‚Æ‚ð‚â‚邱‚Æ‚ð–ñ‘©‚µ‚Ü‚·B +>���Í�����5�T�Ԍ��ɂ��ׂĂ̂��Ƃ����邱�Ƃ��ñ‘©‚��܂��B -‚±‚̈ê”Ê“I‚ȉðŽß‚Ì–â‘è‚Å‚ÍAãŽi‚âŒÚ‹q‚ÆŒ©Ï‚à‚肪‰½‚ðˆÓ–¡‚·‚é‚Ì‚©‚ðAƒVƒ“ƒvƒgƒ“‚̂悤‚É–¾Ž¦“I‚É‹c˜_‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B”ނ炪‚ ‚È‚½‚ɂǂ̂悤‚ÉŒ©‚¦‚é‚©‚É‚©‚©‚í‚炸A‚ ‚È‚½‚Ì‘O’ñ‚ðÄl‚µ‚Ä‚­‚¾‚³‚¢B +���̈��ʓI�ȉ��߂̖����łÍA���i���ڋq�ƌ��ς��肪�����Ӗ������̂����A�V���v�g���̂悤�ɖ����I�ɋc�_�����K�v�������܂��B�ނ炪���Ȃ��ɂǂ̂悤�Ɍ����邩�ɂ������炸�A���Ȃ��̑O�����Äl�����������B -Next [How to Estimate Programming Time](02-How to Estimate Programming Time.md) +Next [How to Estimate Programming Time](02-How%20to%20Estimate%20Programming%20Time.md) diff --git a/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index 8a4c3bb..d8c444f 100644 --- a/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -1,21 +1,21 @@ # How to Estimate Programming Time [//]: # (Version:1.0.0) -Œ©Ï‚à‚è‚ɂ͗ûK‚ª•K—v‚Å‚·B‚»‚ê‚͂܂½˜J“­‚ð•K—v‚Æ‚·‚éB‚»‚ê‚Í”ñí‚É‘½‚­‚̘J—Í‚ª‚©‚©‚é‚Ì‚ÅA“Á‚ɑ傫‚È‚à‚Ì‚ðŒ©Ï‚à‚邿‚¤‚É‹‚ß‚ç‚ꂽꇂɂÍAŒ©Ï‚à‚è‚É‚©‚©‚鎞ŠÔ‚ðŒ©Ï‚à‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B +���ς����ɂ͗��K���K�v�ł��B�����͂܂��J�����K�v�Ƃ����B�����͔����ɑ����̘J�͂��������̂ÅA���ɑ傫�Ȃ��̂����ς����悤�ɋ��߂��ꂽ�ê‡ï¿½É‚ÍA���ς����ɂ����鎞�Ԃ����ς��邱�Ƃ������߂��܂��B -‰½‚©‘å‚«‚¢‚à‚̂̌©Ï‚à‚è‚ð’ñ‹Ÿ‚·‚邿‚¤‚É—Š‚Ü‚ê‚½‚Æ‚«Ał೒¼‚È‚±‚Ƃ̓Xƒg[ƒ‹‚·‚邱‚Ƃł·B‚Ù‚Æ‚ñ‚ǂ̃Gƒ“ƒWƒjƒA‚Í”M‹¶“I‚Å‚ ‚èA”M–]‚µ‚Ä‚¢‚Ü‚·BƒXƒg[ƒ‹‚·‚邯AƒXƒg[ƒ‹‚µ‚Ä‚à•s‰õŠ´‚ðŠ´‚¶‚Ü‚·B‚µ‚©‚µAŒ»ê‚ł̌©Ï‚à‚è‚ÍA‚¨‚»‚ç‚­³Šm‚ų’¼‚ł͂ ‚è‚Ü‚¹‚ñB +�����傫�����̂̌��ς������ñ‹Ÿ‚����悤�ɗ��܂ꂽ�Ƃ��A�ł������Ȃ��Ƃ̓X�g�[�����邱�Ƃł��B�قƂ��ǂ̃G���W�j�A�͔M���I�ł����A�M�]���Ă��܂��B�X�g�[�������ÆA�X�g�[�������s�����������܂��B�������A�����ł̌��ς����ÍA�����炭���m�Å����ł͂����܂����B -’âŽ~’†‚ÍAƒ^ƒXƒN‚ÌŽÀs‚⎎ì‚ðŒŸ“¢‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B­Ž¡“Iˆ³—Í‚ª‹–‚¹‚ÎA‚±‚ê‚Í„’è’l‚𶬂·‚éłೊm‚È•û–@‚Å‚ ‚èAŽÀÛ‚Ìi•à‚ð‚à‚½‚ç‚·B +���~���ÍA�^�X�N�̎��s�⎎�����������邱�Ƃ��ł��܂��B�����I���͂������ÎA�����Í����l�ð¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Å‚����m�ȕ��@�ł����A���ۂÌi���������炷�B -‰½‚ç‚©‚Ì’²¸‚Ì‚½‚߂ɎžŠÔ‚ð‚Æ‚é‚±‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚«‚ÍAʼn‚ÉŒ©Ï‚à‚è‚Ì??ˆÓ–¡‚ð”ñí‚É–¾Šm‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚̈Ӗ¡‚ð‘–ʂł̌©Ï‚à‚è‚Ì??ʼn‚ÆÅŒã‚Ì•”•ª‚É–ß‚µ‚Ä‚­‚¾‚³‚¢BŠeƒ^ƒXƒN‚ª1“úˆÈ‰º‚ɂȂé‚Ü‚ÅAƒ^ƒXƒN‚ð™X‚ɬ‚³‚ȃTƒuƒ^ƒXƒN‚É\¬‰ðœ‚·‚邱‚Ƃɂæ‚Á‚ÄA‘–ʂɂæ‚錩ςà‚è‚ð€”õ‚µ‚Ü‚·B—‘z“I‚ɂ͒·‚³‚ªÅ‘å‚Å‚ ‚éBÅ‚àd—v‚È‚±‚Ƃ͉½‚àŽc‚³‚È‚¢‚±‚Ƃł·B—Ⴆ‚ÎAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“AƒeƒXƒgAŒv‰æ‚ÌŽžŠÔA‘¼‚̃Oƒ‹[ƒv‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽžŠÔA‚¨‚æ‚Ñ‹x‰ÉŽžŠÔ‚Í‚·‚ׂĔñí‚Éd—v‚Å‚·B‚ ‚È‚½‚ªƒiƒbƒNƒ‹ƒwƒbƒh‚ðˆµ‚¤–ˆ“ú‚̈ꕔ‚ð”ï‚₵‚Ä‚¢‚éꇂÍA‚»‚ê‚Ì‚½‚ß‚ÌL\žî•ñ‚ðŒ©Ï‚à‚è‚É“ü‚ê‚Ü‚·B‚±‚ê‚É‚æ‚èA‚ ‚È‚½‚ÌãŽi‚Í‚ ‚È‚½‚ÌŽžŠÔ‚ðŬŒÀ‚É—}‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚ɂȂèA‚³‚ç‚ÉŽžŠÔ‚ª‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B +���炩�̒����̂��߂Ɏ��Ԃ��Ƃ邱�Ƃ��ł��Ȃ��Ƃ��ÍA�Å��Ɍ��ς�����??�Ӗ��������ɖ��m�ɂ����K�v�������܂��B���̈Ӗ������ʂł̌��ς�����??�Å��ÆÅŒï¿½ï¿½Ì•����ɖ߂��Ă��������B�e�^�X�N��1���ȉ��ɂȂ��܂ÅA�^�X�N�����X�É����ȃT�u�^�X�N�É\���������邱�Ƃɂ����ÄA���ʂɂ��錩�ς������������܂��B���z�I�ɂ͒������ő��ł����B�ł��d�v�Ȃ��Ƃ͉����c���Ȃ����Ƃł��B�Ⴆ�ÎA�h�L�������e�[�V�����A�e�X�g�A�v���̎��ÔA���̃O���[�v�Ƃ̃R�~���j�P�[�V�����̎��ÔA�����ыx�Ɏ��Ԃ͂��ׂĔ����Éd�v�ł��B���Ȃ����i�b�N���w�b�h�����������̈ꕔ�����₵�Ă����ê‡ï¿½ÍA�����̂��߂ÌL���\�����������ς����ɓ����܂��B�����ɂ����A���Ȃ��Ì��i�͂��Ȃ��̎��Ԃ��Å����ɗ}���邱�Ƃ��ł����悤�ɂȂ��A�����Ɏ��Ԃ������邱�Ƃ������܂��B -Ž„‚͈Öق̂¤‚¿‚É„’è’l‚ð–„‚ßž‚Þ—D‚ꂽƒGƒ“ƒWƒjƒA‚ð’m‚Á‚Ä‚¢‚Ü‚·‚ªA‚»‚¤‚µ‚È‚¢‚Æ‚¨Š©‚ß‚µ‚Ü‚·BƒpƒbƒfƒBƒ“ƒO‚ÌŒ‹‰Ê‚Ì1‚‚ÍA‚ ‚È‚½‚ÌM—Š‚ªŒÍЉ‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚邱‚Ƃł·B—Ⴆ‚ÎAƒGƒ“ƒWƒjƒA‚ÍA–{“–‚É1“ú‚©‚©‚邯Žv‚¤ŽdŽ–‚Ì‚½‚ß‚É3“úŠÔ‚ðŒ©Ï‚à‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒGƒ“ƒWƒjƒA‚ÍA2“úŠÔ‚»‚ê‚ð•¶‘‰»‚µ‚½‚èA2“úŠÔ‘¼‚Ì—L—p‚ȃvƒƒWƒFƒNƒg‚ÉŽæ‚èŠ|‚©‚낤‚ÆŒv‰æ‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚µ‚©‚µA‚»‚Ìì‹Æ‚ª1“ú‚ÅŠ®—¹‚µ‚½‚±‚Æ‚ªŒŸo‚³‚êi‚»‚̂悤‚É”»–¾‚µ‚½ê‡jA‚½‚é‚݂܂½‚͉ߑå•]‰¿‚ÌŠOŠÏ‚ª¶‚Ü‚ê‚éB‚ ‚È‚½‚ªŽÀÛ‚É‚â‚Á‚Ä‚¢‚邱‚Æ‚ð“K؂ɉŽ‹‰»‚·‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·BƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ªƒR[ƒfƒBƒ“ƒO‚Ì2”{‚ÌŽžŠÔ‚ð—v‚µAŒ©Ï‚à‚肪‚»‚¤‚Å‚ ‚邯‚·‚ê‚ÎA‚±‚ê‚ðƒ}ƒl[ƒWƒƒ[‚ÉŒ©‚¦‚邿‚¤‚É‚·‚邱‚Ƃő傫‚È—˜“_‚ª“¾‚ç‚ê‚Ü‚·B +���͈Öق̂����É����l�𖄂ß��ޗD�ꂽ�G���W�j�A���m���Ă��܂����A�������Ȃ��Ƃ����߂��܂��B�p�b�f�B���O�̌��ʂ�1�‚ÍA���Ȃ��ÌM�����͊����Ă����”\�������邱�Ƃł��B�Ⴆ�ÎA�G���W�j�A�ÍA�{����1���������Ǝv���d���̂��߂�3���Ԃ����ς��邩�������܂����B�G���W�j�A�ÍA2���Ԃ����ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A2���ԑ��̗L�p�ȃv���W�F�N�g�Ɏ����|���낤�ƌv�悵�Ă��邩�������܂����B�������A���Ì��Ƃ�1���Ŋ����������Ƃ����o�����i���̂悤�ɔ��������ê‡ï¿½j�A�����݂܂��͉ߑ��]���̊O�ς����܂����B���Ȃ������ۂɂ����Ă��邱�Ƃ��K�؂ɉŽ������������͂邩�ɗD���Ă��܂��B�h�L�������e�[�V�������R�[�f�B���O��2�{�̎��Ԃ��v���A���ς��肪�����ł����Ƃ����ÎA�������}�l�[�W���[�Ɍ������悤�ɂ��邱�Ƃő傫�ȗ��_���������܂��B -‘ã‚í‚è‚É–¾Ž¦“I‚ɃpƒbƒhB‚ ‚È‚½‚̃Aƒvƒ[ƒ`‚ª‚¤‚Ü‚­‚¢‚©‚È‚¢ê‡Aƒ^ƒXƒN‚ɂ͂¨‚»‚ç‚­1“ú‚©‚©‚è‚Ü‚·‚ªA10“ú‚©‚©‚Á‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB‚»‚¤‚łȂ¢ê‡‚ÍA­‚È‚­‚Æ‚àAŠm—¦‚ÌŒ©Ï‚à‚è‚É‚æ‚Á‚Ä•½‹Ï“I‚Éd‚Ý•t‚¯‚³‚ê‚Ü‚·Bޝ•Ê‚µ‚ÄŒ©Ï‚à‚è‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚郊ƒXƒN—vˆö‚ÍAƒXƒPƒWƒ…[ƒ‹‚É“ü‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚é1TŠÔ‚É1l‚ª•a‹C‚ɂȂ邱‚Ƃ͂܂¸‚ ‚è‚Ü‚¹‚ñB‚µ‚©‚µA‘½‚­‚̃Gƒ“ƒWƒjƒA‚ð•ø‚¦‚é‘å‹K–͂ȃvƒƒWƒFƒNƒg‚ɂ͕a‹C‚ª‚ ‚è‚Ü‚·B“¯—l‚É‹x‰É‚ÌŽžŠÔB‚»‚µ‚ÄA‘SŽÐ“I‚ÈŒP—ûƒZƒ~ƒi[‚ª‹`–±‰»‚³‚ê‚éŠm—¦‚ÍH‚»‚ꂪ„‘ª‚Å‚«‚éꇂÍA‚»‚ê‚ð“\‚è‚Ü‚·B‚à‚¿‚ë‚ñA–¢’m‚Ì–¢’m”A‚Ü‚½‚Í* unk-unks *‚ª‚ ‚è‚Ü‚·B’è‹`‚É‚æ‚éUnk-unks‚͌•ʂɌ©Ï‚à‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚·‚ׂĂÌunk-unks‚̃Oƒ[ƒoƒ‹‚ÈL\žî•ñ‚ð쬂µ‚½‚èAãŽi‚ɘA—‚·‚鑼‚Ì•û–@‚Å‚»‚ê‚ç‚ðˆ—‚µ‚½‚è‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚ÌãŽi‚ɔނ炪‘¶Ý‚µ‚Ä‚¢‚邱‚Æ‚ð–Y‚ê‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚»‚µ‚ÄAunk-unks‚ªl—¶‚³‚ê‚Ä‚¢‚È‚¢‚ÆŒ©Ï‚à‚肪—\’è‚ɂȂé‚Ì‚ÍA‘å•ÏŠÈ’P‚Å‚·B +�������ɖ����I�Ƀp�b�h�B���Ȃ��̃A�v���[�`�����܂������Ȃ��ê‡ï¿½A�^�X�N�ɂ͂����炭1���������܂����A10���������Ă����܂��܂����B�����łȂ��ê‡ï¿½ÍA���Ȃ��Ƃ��A�m���̌��ς����ɂ����ĕ��ϓI�Éd�ݕt�������܂��B���ʂ��Č��ς��������蓖�Ă邱�Ƃ��ł��郊�X�N�v���ÍA�X�P�W���[���ɓ����K�v�������܂��B����1�T�Ԃ�1�l���a�C�ɂȂ邱�Ƃ͂܂������܂����B�������A�����̃G���W�j�A�����������K�͂ȃv���W�F�N�g�ɂ͕a�C�������܂��B���l�ɋx�ɂ̎��ÔB�����ÄA�S�ГI�ȌP���Z�~�i�[���`�����������m���ÍH���ꂪ�����ł����ê‡ï¿½ÍA�������\���܂��B���������A���m�̖��m���A�܂���* unk-unks *�������܂��B���`�ɂ���Unk-unks�͌•ʂɌ��ς��邱�Ƃ͂ł��܂����B���ׂĂ�unk-unks�̃O���[�o���ÈL���\���������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A���i�ɘA�����鑼�̕��@�ł����������������肷�邱�Ƃ��ł��܂��B�������A���Ȃ��Ì��i�ɔނ炪���݂��Ă��邱�Ƃ��Y���邱�Ƃ͂ł��܂����B�����ÄAunk-unks���l�������Ă��Ȃ��ƌ��ς��肪�\���ɂȂ��̂ÍA���ϊȒP�ł��B -ƒ`[ƒ€ŠÂ‹«‚Å‚ÍAì‹Æ‚ðs‚¤l‚ÉŒ©Ï‚à‚è‚ð‚³‚¹‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½Aƒ`[ƒ€‘S‘̂Ō©Ï‚à‚è‚Ì??ƒRƒ“ƒZƒ“ƒTƒX‚𓾂悤‚Æ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BlX‚Í‹ZpAŒoŒ±A€”õA‚»‚µ‚ÄŽ©M‚Ì“x‡‚¢‚ª‘å‚«‚­ˆÙ‚È‚è‚Ü‚·B‹­—͂ȃvƒƒOƒ‰ƒ}[‚ªŽ©•ªŽ©g‚ð„’肵AŽã‚¢ƒvƒƒOƒ‰ƒ}[‚ª‚±‚Ì„’è’l‚ð•ÛŽ‚µ‚Ä‚¢‚邯‚«‚É‚ÍAƒJƒ‰ƒ~ƒeƒB‚ª”­¶‚µ‚Ü‚·B‘S‘̂̃`[ƒ€‚ªŒ©Ï‚à‚è‚Ƀ‰ƒCƒ“‚²‚ƂɇˆÓ‚·‚邯‚¢‚¤sˆ×‚ÍAƒ`[ƒ€‚Ì—‰ð‚𖾊m‚É‚µAƒŠƒ\[ƒX‚Ìíp“I‚ÈÄŠ„‚è“–‚Ă̋@‰ï‚ð‰Â”\‚É‚·‚éi—Ⴆ‚ÎA‚æ‚èŽã‚¢ƒ`[ƒ€ƒƒ“ƒo[‚©‚ç‚æ‚è‹­‚¢ƒ`[ƒ€‚É•‰’S‚ðˆÚ‚·‚È‚ÇjB +�`�[���‹��łÍA���Ƃ��s���l�Ɍ��ς������������悤�ɂ��Ă��������B�܂��A�`�[���S�̂Ō��ς�����??�R���Z���T�X�𓾂悤�Ƃ����K�v�������܂��B�l�X�͋Z�p�A�o���A�����A�������M�̓x�������傫���قȂ��܂��B���͂ȃv���O���}�[���������g�ð„’肵�A�ア�v���O���}�[�����Ì����l���ێ����Ă����Ƃ��ɂÍA�J���~�e�B���������܂��B�S�̂̃`�[�������ς����Ƀ��C�����ƂÉ��ӂ����Ƃ����s�ׂÍA�`�[���̗����𖾊m�ɂ��A���\�[�X�Ì��p�I�ÈĊ��蓖�Ă̋@�����”\�ɂ����i�Ⴆ�ÎA�����ア�`�[�������o�[�������苭���`�[���ɕ��S���ڂ��ȂÇj�B -•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‘å‚«‚ÈƒŠƒXƒN‚ª‚ ‚éꇂÍA‚ ‚È‚½‚̃}ƒl[ƒWƒƒ[‚ªƒRƒ~ƒbƒg‚µ‚Ä‚¢‚È‚¢‚Ù‚Ç‹­—Í‚Éq‚×AƒŠƒXƒN‚ª”­¶‚·‚邯’p‚¸‚©‚µ‚¢‚à‚̂ɂȂ邱‚Ƃ͂ ‚È‚½‚Ì‹`–±‚Å‚·B‚»‚̂悤‚ÈꇂɂÍA•K—v‚È‚±‚Æ‚ª‚ ‚ê‚ÎAƒŠƒXƒN‚ðŒ¸‚ç‚·‚½‚ß‚És‚í‚ê‚邱‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B +�]�����邱�Ƃ��ł��Ȃ��傫�ȃ��X�N�������ê‡ï¿½ÍA���Ȃ��̃}�l�[�W���[���R�~�b�g���Ă��Ȃ��قNj��͂Éq�×A���X�N�����������ƒp�����������̂ɂȂ邱�Ƃ͂��Ȃ��̋`���ł��B���̂悤�Èê‡ï¿½É‚ÍA�K�v�Ȃ��Ƃ������ÎA���X�N�����炷���߂És�����邱�Ƃ������Ă��܂��B -* Extreme Programming *‚ðŽg—p‚·‚邿‚¤‚ɉïŽÐ‚É”[“¾‚³‚¹‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA”äŠr“I¬‚³‚È‚à‚Ì‚ðŒ©Ï‚à‚邾‚¯‚ł悭A‚±‚ê‚Í‚à‚Á‚ÆŠy‚µ‚­¶ŽY“I‚Å‚·B +* Extreme Programming *���g�p�����悤�ɉ��Ђɔ[�������邱�Ƃ��ł����ÎA���r�I�����Ȃ��̂����ς��邾���ł悭�A�����͂����Ɗy�������Y�I�ł��B -Next [How to Find Out Information](03-How to Find Out Information.md) +Next [How to Find Out Information](03-How%20to%20Find%20Out%20Information.md) diff --git a/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md b/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md index acdd272..7123c8a 100644 --- a/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -1,19 +1,19 @@ # How to Find Out Information [//]: # (Version:1.0.0) -‚ ‚È‚½‚ª’m‚é•K—v‚Ì‚ ‚髎¿‚ÍA‚ ‚È‚½‚ª‚»‚ê‚ðŒ©‚Â‚¯‚é•û–@‚ðŒˆ’è‚µ‚Ü‚·B +���Ȃ����m���K�v�̂��é«ï¿½ï¿½ï¿½ÍA���Ȃ������������‚������@�����肵�܂��B -ƒ\ƒtƒgƒEƒFƒA»•i‚ÌÅV‚̃pƒbƒ`ƒŒƒxƒ‹‚È‚ÇA‹qŠÏ“I‚ÅŠÈ’P‚È‹ï‘Ì“I‚È‚à‚̂Ɋւ·‚éî•ñ*‚ª•K—v‚ÈꇂÍAƒCƒ“ƒ^[ƒlƒbƒg‚ðŒŸõ‚µ‚½‚èAƒfƒBƒXƒJƒbƒVƒ‡ƒ“ƒOƒ‹[ƒv‚É“Še‚µ‚½‚肵‚ÄA‘½‚­‚Ìl‚É’š”J‚ÉŽ¿–₵‚Ä‚­‚¾‚³‚¢BƒCƒ“ƒ^[ƒlƒbƒgã‚ňӌ©‚âŽåŠÏ“I‚ȉðŽß‚Ì‚¢‚¸‚ê‚©‚ð’@‚¢‚Ä‚¢‚é‚à‚̂͌Ÿõ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢BƒhƒŠƒuƒ“‚Æ^ŽÀ‚̔䗦‚ª‚‚·‚¬‚Ü‚·B +�\�t�g�E�F�A���i�ÌÅV�̃p�b�`���x���ȂÇA�q�ϓI�ŊȒP�ȋ��̓I�Ȃ��̂Ɋւ�������*���K�v�Èê‡ï¿½ÍA�C���^�[�l�b�g�������������A�f�B�X�J�b�V�����O���[�v�ɓ��e�����肵�ÄA�����Ìl�ɒ��J�Ɏ��₵�Ă��������B�C���^�[�l�b�g���ňӌ������ϓI�ȉ��߂̂����ꂩ���@���Ă������̂͌������Ȃ��ł��������B�h���u���Æ^���̔䗦���������܂��B -‚ ‚È‚½‚ª‰½‚©ŽåŠÏ“I‚È‚à‚̂Ɋւ·‚éˆê”Ê“I‚È’mޝ*lX‚ª‚»‚ê‚ɂ‚¢‚Äl‚¦‚Ä‚«‚½—ðŽj‚ð’m‚肽‚¢‚È‚çA}‘ŠÙi–{‚ª•ÛŠÇ‚³‚ê‚Ä‚¢‚镨—“IŒš•¨j‚És‚«‚Ü‚·B‚½‚Æ‚¦‚ÎA”Šw‚â‚«‚Ì‚±‚â_”é‚ɂ‚¢‚ÄŠw‚Ô‚É‚ÍA}‘ŠÙ‚És‚«‚Ü‚·B +���Ȃ����������ϓI�Ȃ��̂Ɋւ������ʓI�Ȓm��*�l�X�������ɂ‚��Äl���������j���m�肽���Ȃ��A�}���Ùi�{���ۊǂ����Ă��镨���I�����j�És���܂��B���Ƃ��ÎA���w�₫�̂����_���ɂ‚��Ċw�ԂɂÍA�}���قÉs���܂��B -‚ ‚È‚½‚ª’m‚Á‚Ä‚¢‚é•K—v‚ª‚ ‚é*ŠÈ’P‚È‚±‚Ƃł͂Ȃ¢‰½‚©‚ð‚·‚é•û–@* 2‚‚܂½‚Í3‚Â‚Ì‘Ð‚ðŽæ“¾‚µA‚»‚ê‚ç‚ð“Ç‚ñ‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ÍAƒCƒ“ƒ^[ƒlƒbƒg‚©‚çƒ\ƒtƒgƒEƒFƒAƒpƒbƒP[ƒW‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚È‚ÇAŠÈ’P‚È‚±‚Æ‚ð‚·‚é•û–@‚ðŠw‚Ô‚©‚à‚µ‚ê‚Ü‚¹‚ñB—Ç‚¢ƒvƒƒOƒ‰ƒ~ƒ“ƒOƒeƒNƒjƒbƒN‚̂悤‚Èd—v‚È‚±‚Æ‚ðŠw‚Ô‚±‚Æ‚³‚¦‚Å‚«‚Ü‚·‚ªAƒ\ƒŠƒbƒhƒuƒbƒN‚Ì“K؂ȕ”•ª‚ð“ǂނ̂ɗv‚·‚邿‚è‚àŒ‹‰Ê‚ÌŒŸõ‚Æ•À‚בւ¦AŒ‹‰Ê‚ÌŒ ŒÀ‚ÌŒ@‚èo‚µ‚É‚à‚Á‚Æ‘½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B +���Ȃ����m�������K�v������*�ȒP�Ȃ��Ƃł͂Ȃ��������������@* 2�‚܂���3�‚Ì��Ђ��擾���A���������ǂ��ł��������B���Ȃ��ÍA�C���^�[�l�b�g�����\�t�g�E�F�A�p�b�P�[�W���C���X�g�[�������ȂÇA�ȒP�Ȃ��Ƃ��������@���w�Ԃ��������܂����B�ǂ��v���O���~���O�e�N�j�b�N�̂悤�Èd�v�Ȃ��Ƃ��w�Ԃ��Ƃ����ł��܂����A�\���b�h�u�b�N�̓K�؂ȕ������ǂނ̂ɗv�������������ʂ̌����ƕ��בւ��A���ʂ̌����̌@���o���ɂ����Ƒ����̎��Ԃ����₷���Ƃ��ł��܂��B -*‘¼‚É’N‚à’m‚肽‚­‚È‚¢î•ñ‚ª•K—v‚Èê‡*‚½‚Æ‚¦‚ÎA‚±‚̃\ƒtƒgƒEƒFƒA‚ª‹‘å‚ȃf[ƒ^ƒZƒbƒg‚ÌV‚µ‚¢ì•i‚Å‚ ‚邱‚Æ‚ð’m‚Á‚Ä‚¢‚éê‡AƒCƒ“ƒ^[ƒlƒbƒg‚ƃ‰ƒCƒuƒ‰ƒŠ‚ðŒŸõ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚̃IƒvƒVƒ‡ƒ“‚ªŠ®‘S‚ÉŽg‚¢s‚­‚³‚ꂽŒãA‚»‚ê‚ðŠm”F‚·‚邽‚߂ɎÀŒ±‚ðÝŒv‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +*���ɒN���m�肽���Ȃ����ñ‚ª•K�v�Èê‡*���Ƃ��ÎA���̃\�t�g�E�F�A�������ȃf�[�^�Z�b�g�ÌV�������i�ł��邱�Ƃ��m�������ê‡ï¿½A�C���^�[�l�b�g�ƃ��C�u���������������K�v�������܂��B�������̃I�v�V���������S�Ɏg���s�����ꂽ���A�������m�F���邽�߂Ɏ������݌v���邱�Ƃ��ł��܂��B -“Æ“Á‚È󋵂ðl—¶‚µ‚½ˆÓŒ©‚≿’l”»’f‚ª•K—v‚ÈꇂÍAê–副‚ɑВk‚µ‚Ä‚­‚¾‚³‚¢B‚½‚Æ‚¦‚ÎALISP‚ÉÅV‚̃f[ƒ^ƒx[ƒXŠÇ—ƒVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ª—Ç‚¢‚©‚Ç‚¤‚©‚ð’m‚肽‚¢ê‡‚ÍALISP‚Ìê–副‚ƃf[ƒ^ƒx[ƒX‚Ìê–副‚ɑВk‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�Ɠ��È󋵂��l�������ӌ��≿�l���f���K�v�Èê‡ï¿½ÍA�����Ƃɑ��k�����������B���Ƃ��ÎALISP�ÉÅV�̃f�[�^�x�[�X�Ǘ��V�X�e�����\�z���邱�Ƃ��ǂ����ǂ������m�肽���ê‡ï¿½ÍALISP�Ì����Ƃƃf�[�^�x�[�X�Ì����Ƃɑ��k�����K�v�������܂��B -*‚Ü‚¾ŒöŠJ‚³‚ê‚Ä‚¢‚È‚¢“Á’è‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“—p‚Ì‚æ‚è‚‘¬‚ȃAƒ‹ƒSƒŠƒYƒ€‚ª‘¶Ý‚·‚é‰Â”\«‚ª‚ ‚邱‚Æ‚ð’m‚肽‚¢ê‡‚ÍA‚»‚̃tƒB[ƒ‹ƒh‚Å“­‚¢‚Ä‚¢‚él‚Ƙb‚µ‚Ü‚µ‚傤B +*�܂����J�����Ă��Ȃ������̃A�v���P�[�V�����p�̂��è‚���ȃA���S���Y�������݂����”\�������邱�Ƃ��m�肽���ê‡ï¿½ÍA���̃t�B�[���h�œ����Ă����l�Ƙb���܂��傤�B -‚ ‚È‚½‚ªƒrƒWƒlƒX‚ðŽn‚߂Ȃ¯‚ê‚΂Ȃç‚È‚¢‚©‚Ç‚¤‚©‚ð‚ ‚È‚½‚¾‚¯‚ªl‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚É*ŒÂl“I‚ÈŒˆ’è‚ð‚µ‚½‚¢‚̂ł ‚ê‚ÎA‚»‚̃AƒCƒfƒBƒA‚ɑ΂·‚é‹c˜_‚ÌƒŠƒXƒg‚ð‘‚¢‚Ă݂Ă­‚¾‚³‚¢B‚»‚ê‚ªŽ¸”s‚·‚ê‚ÎAè‚¢‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚·‚ׂĂ̊p“x‚©‚çƒAƒCƒfƒA‚ðŠw‚ÑA‚ ‚È‚½‚Ìh‘è‚ð‚·‚×‚ÄI‚¦‚ÄA‚ ‚È‚½‚ÌS‚Ì’†‚Å‚·‚ׂĂ̌‹‰Ê‚Æ’·Š‚Æ’ZŠ‚ðŽæ‚èœ‚¢‚½‚ªAˆË‘R‚Æ‚µ‚ÄžB–†‚Ȃ܂܂ł¢‚邯‚µ‚Ü‚·B‚ ‚È‚½‚Í¡‚ ‚È‚½‚ÌS‚É]‚Á‚ÄA‚ ‚È‚½‚Ì”]‚É–Ù‚é‚æ‚¤‚ÉŒ¾‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB—˜—p‰Â”\‚Èè‚¢‚Ì‹Z–@‚Ì‘½‚­‚ÍA‚ ‚È‚½‚Ìö݈ӎ¯‚ªˆÓ–¡‚ðŠ„‚è“–‚Ă銮‘S‚È‚ ‚¢‚Ü‚¢‚щƒ“ƒ_ƒ€‚ȃpƒ^[ƒ“‚ð’ñަ‚·‚é‚Ì‚ÅAŽ©•ª‚Ì”¼ˆÓޝ“I‚È—~–]‚ð”»’f‚·‚é‚̂ɔñí‚É–ð—§‚¿‚Ü‚·B +���Ȃ����r�W�l�X���n�߂Ȃ����΂Ȃ��Ȃ����ǂ��������Ȃ��������l���邱�Ƃ��ł����悤��*�Âl�I�Ȍ������������̂ł����ÎA���̃A�C�f�B�A�ɑ΂����c�_�̃��X�g�������Ă݂Ă��������B���ꂪ���s�����ÎA�肢���l�����������B���ׂĂ̊p�x�����A�C�f�A���w�ÑA���Ȃ��Ìh�������ׂÄI���ÄA���Ȃ��ÌS�̒��ł��ׂĂ̌��ʂƒ����ƒZ�������èœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A�ˑR�Ƃ��ĞB���Ȃ܂܂ł����Ƃ��܂��B���Ȃ��Í����Ȃ��ÌS�É]���ÄA���Ȃ��̔]�ɖق��悤�Ɍ����Ȃ����΂Ȃ��܂����B���p�”\�È肢�̋Z�@�̑����ÍA���Ȃ��Ì��݈ӎ����Ӗ������蓖�Ă銮�S�Ȃ����܂��Ń����_���ȃp�^�[�����ñަ‚����̂ÅA�����̔��ӎ��I�ȗ~�]�𔻒f�����̂ɔ����ɖ𗧂��܂��B -Next [How to Utilize People as Information Sources](04-How to Utilize People as Information Sources.md) +Next [How to Utilize People as Information Sources](04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) diff --git a/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index d8e4667..bcd5851 100644 --- a/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -1,15 +1,15 @@ # How to Utilize People as Information Sources [//]: # (Version:1.0.0) -‚·‚ׂĂÌl‚ÌŽžŠÔ‚ð‘¸d‚µAŽ©•ª‚ÌŽžŠÔ‚ƃoƒ‰ƒ“ƒX‚ðŽæ‚Á‚Ä‚­‚¾‚³‚¢B’N‚©‚ÉŽ¿–â‚·‚邱‚Æ‚ÍA“š‚¦‚ðŽó‚¯Žæ‚邾‚¯‚ł͂ ‚è‚Ü‚¹‚ñB‚»‚Ìl‚Í‚ ‚È‚½‚Ì‘¶Ý‚ðŠy‚µ‚ñ‚ÅA“Á’è‚ÌŽ¿–â‚ð•·‚­‚±‚Ƃɂæ‚Á‚ÄA‚ ‚È‚½‚ɂ‚¢‚ÄŠw‚т܂·B‚»‚Ìl‚ɂ‚¢‚Ä“¯‚¶‚悤‚ÉŠw‚ÑA‚ ‚È‚½‚ª‹‚߂铚‚¦‚ð’m‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍA‚ ‚È‚½‚ÌŽ¿–â‚æ‚è‚à‚͂邩‚Éd—v‚Å‚·B +���ׂĂÌl�̎��Ԃð‘¸d���A�����̎��Ԃƃo�����X���������������B�N���Ɏ��₷�邱�ƂÍA�������󂯎��邾���ł͂����܂����B���Ìl�͂��Ȃ��̑��݂��y�����ÅA�����̎����𕷂����Ƃɂ����ÄA���Ȃ��ɂ‚��Ċw�т܂��B���Ìl�ɂ‚��ē����悤�Ɋw�ÑA���Ȃ������߂铚�����m�邱�Ƃ��ł��܂��B�����ÍA���Ȃ��̎����������͂邩�Éd�v�ł��B -‚µ‚©‚µA‚±‚ê‚̉¿’l‚Í‚ ‚È‚½‚ª‚»‚ê‚ðs‚¤‚Ù‚ÇŒ¸­‚µ‚Ü‚·B‚ ‚È‚½‚ÍAŒ‹‹Ç‚̂Ƃ±‚ëAl‚ªŽ‚Á‚Ä‚¢‚éÅ‚à‹Md‚Ȥ•iA‚·‚Ȃ킿‚»‚ÌŽžŠÔ‚ðŽg‚Á‚Ä‚¢‚Ü‚·BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—˜“_‚ÍAƒRƒXƒg‚Æ”äŠr‚µ‚ÄdŽ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚³‚ç‚ÉA“¾‚ç‚ê‚é“Á’è‚̃RƒXƒg‚Æ—˜“_‚ÍAl‚É‚æ‚Á‚ĈقȂè‚Ü‚·BŽ„‚ÍA100l‚ÌŠ²•”‚ª–ˆŒŽ5•ª‚ðŽ©•ª‚Ì‘gD‚ÌŠel‚Ƙb‚·•K—v‚ª‚ ‚邯‹­‚­M‚¶‚Ä‚¨‚èA‚»‚ÌŽžŠÔ‚Ì–ñ5“‚ɂȂè‚Ü‚·B‚µ‚©‚µA1000l‚Ì]‹Æˆõ‚ª‚¢‚éê‡A10•ª‚ª‘½‚·‚¬‚é‰Â”\«‚ª‚ ‚èA5•ª‚ª‘½‚·‚¬‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‘gD“à‚ÌŠel‚Ƙb‚·ŽžŠÔ‚ÍA‚»‚Ì–ðŠ„iEˆÊˆÈãj‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚ ‚È‚½‚ÌãŽi‚ÉãŽi‚Ƙb‚µ‡‚¤‚ׂ«‚Å‚·‚ªAãŽi‚ÌãŽi‚É­‚µ˜b‚µ‚Ä‚­‚¾‚³‚¢B‚»‚ê‚Í•s‰õ‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAŽ„‚Í‚ ‚È‚½‚ªãŽi‚É­‚µ‚¸‚ÂA–ˆŒŽA‰½‚ð˜b‚µ‚Ä‚à‹`–±‚ª‚ ‚邯M‚¶‚Ä‚¢‚Ü‚·B +�������A�����̉��l�͂��Ȃ����������s���قnj������܂��B���Ȃ��ÍA���ǂ̂Ƃ����A�l�������Ă����ł��M�d�È��i�A���Ȃ킿���̎��Ԃ��g���Ă��܂��B�R�~���j�P�[�V�����̗��_�ÍA�R�X�g�Ɣ��r���Äd�������K�v�������܂��B�����ÉA�������������̃R�X�g�Ɨ��_�ÍA�l�ɂ����ĈقȂ��܂��B���ÍA100�l�̊���������5���������̑g�D�̊e�l�Ƙb���K�v�������Ƌ����M�������A���̎��Ԃ̖�5���ɂȂ��܂��B�������A1000�l�Ì]�ƈ��������ê‡ï¿½A10�������������”\���������A5�������������”\���������܂��B�g�D���̊e�l�Ƙb�����ԂÍA���̖����i�E�ʈÈ��j�ɂ����ĈقȂ��܂��B���Ȃ��Ì��i�É��i�Ƙb�������ׂ��ł����A���i�Ì��i�É����b�����������B�����͕s�����������܂��ñ‚ªA���͂��Ȃ������i�É������ÂA�����A�����b�����`���������ÆM���Ă��܂��B -Šî–{“I‚ȃ‹[ƒ‹‚ÍA’N‚à‚ª‚ ‚È‚½‚Ƙb‚·‚±‚Æ‚©‚ç—˜‰v‚𓾂邱‚Ƃł ‚èA”ނ炪‚ ‚È‚½‚ɘb‚·‚±‚Æ‚ª‘½‚¢‚Ù‚ÇA”ނ炪”h¶‚·‚é—˜‰v‚Í­‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·B”Þ‚ç‚É‚±‚̉¶Œb‚ð’ñ‹Ÿ‚µA”Þ‚ç‚Æ‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—˜‰v‚𓾂邽‚ß‚ÉA‚ ‚È‚½‚ÌŽdŽ–‚ÍA”ï‚₳‚ê‚½ŽžŠÔ‚Ƃ̃oƒ‰ƒ“ƒX‚Å—˜‰v‚ð•ۂ‚±‚Ƃł·B +���{�I�ȃ��[���ÍA�N�������Ȃ��Ƙb�����Ƃ��痘�v�𓾂邱�Ƃł����A�ނ炪���Ȃ��ɘb�����Ƃ������قÇA�ނ炪�h�����闘�v�Í��Ȃ��Ƃ������Ƃł��B�ނ��ɂ��̉��b���ñ‹Ÿ‚��A�ނ��Ƃ̃R�~���j�P�[�V�����̗��v�𓾂邽�߂ÉA���Ȃ��̎d���ÍA���₳�ꂽ���ԂƂ̃o�����X�ŗ��v���ۂ‚��Ƃł��B -Ž©•ª‚ÌŽžŠÔ‚ð‘¸d‚·‚邱‚Æ‚ªd—v‚Å‚·B’N‚©‚Ƙb‚·‚È‚çA‚½‚Æ‚¦‚»‚ê‚ÉŽžŠÔ‚ª‚©‚©‚邯‚µ‚Ä‚àAŽžŠÔ‚ð‘å•‚Éß–ñ‚·‚é‚Å‚µ‚傤B‚ ‚È‚½‚ÌŽžŠÔ‚ª‚ ‚È‚½‚Ì‚à‚Ì‚æ‚è‚à‹Md‚È‚à‚Ì‚¾‚ÆŽv‚í‚È‚¢ŒÀ‚èA‚»‚ê‚ðs‚¤‚ׂ«‚Å‚·B +�����̎��Ԃð‘¸d���邱�Ƃ��d�v�ł��B�N���Ƙb���Ȃ��A���Ƃ������Ɏ��Ԃ��������Ƃ��Ă��A���Ԃ��å•�Éß–ñ‚·‚��ł��傤�B���Ȃ��̎��Ԃ����Ȃ��̂��̂������M�d�Ȃ��̂��Ǝv���Ȃ������A�������s���ׂ��ł��B -‚±‚ê‚ÌŠï–­‚È—á‚͉ẴCƒ“ƒ^[ƒ“‚Å‚·B‚“x‚É‹Zp“I‚È—§ê‚̉ĊúƒCƒ“ƒ^[ƒ“‚ÍA‚ ‚܂謉ʂðã‚°‚邱‚Ƃ͊ú‘Ò‚Å‚«‚Ü‚¹‚ñB”Þ‚ç‚Í‚»‚±‚É‚¢‚é’N‚à‚ª’n–‚ÉP‚í‚ê‚邱‚Æ‚ª—\‘z‚³‚ê‚Ü‚·B‚»‚ê‚łȂº‚±‚ê‚Í—e”F‚³‚ê‚Ü‚·‚©H‹ê‚µ‚ñ‚¾l‚ÍAƒCƒ“ƒ^[ƒ“‚©‚çd—v‚ȉ½‚©‚ðŽó‚¯‚Ä‚¢‚é‚Ì‚ÅB”Þ‚ç‚Í­‚µŒÖަ‚·‚é‹@‰ï‚𓾂éB‚¨‚»‚ç‚­AV‚µ‚¢ƒAƒCƒfƒA‚ð•·‚­ƒ`ƒƒƒ“ƒX‚ª‚ ‚è‚Ü‚·B”Þ‚ç‚͈قȂ鎋“_‚©‚ç•¨Ž–‚ðŒ©‚é‹@‰ï‚𓾂éB”Þ‚ç‚͂܂½AƒCƒ“ƒ^[ƒ“‚ð•åW‚µ‚悤‚Æ‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚»‚¤‚łȂ¢ê‡‚Å‚àA“¾‚é‚ׂ«‚±‚Æ‚ª‚½‚­‚³‚ñ‚ ‚è‚Ü‚·B +�����̊�ȗ��͉ẴC���^�[���ł��B���x�ɋZ�p�I�ȗ����̉Ċ��C���^�[���ÍA���܂è¬ï¿½Ê‚��グ�邱�Ƃ͊��҂ł��܂����B�ނ��͂����ɂ����N�����n���ÉP�����邱�Ƃ��\�z�����܂��B�����łȂ������͗e�F�����܂����H�ꂵ�ñ‚¾l�ÍA�C���^�[�������d�v�ȉ������󂯂Ă����̂ÅB�ނ��Í����֎������@���𓾂��B�����炭�A�V�����A�C�f�A�𕷂��`�����X�������܂��B�ނ��͈قȂ鎋�_���畨���������@���𓾂��B�ނ��͂܂��A�C���^�[�������W���悤�Ƃ��Ă��邩�������܂��ñ‚ªA�����łȂ��ê‡ï¿½Å‚��A�����ׂ����Ƃ��������ñ‚ ‚��܂��B -‚ ‚È‚½‚ÍA³’¼‚ÉŒ¾‚¢‚½‚¢‚±‚Æ‚ª‚ ‚邯M‚¶‚邯‚«‚Í‚¢‚‚łàAlX‚ɔނç‚Ì’mŒb‚Æ”»’f—͂̂قñ‚Ì­‚µ‚ðq‚Ë‚é‚ׂ«‚Å‚·B‚±‚ê‚͔ނç‚𕽂炰A‚ ‚È‚½‚͉½‚©‚ðŠw‚ÑA‰½‚©‚ð‹³‚¦‚é‚Å‚µ‚傤B—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ÍAƒZ[ƒ‹ƒX’S“–ƒoƒCƒXƒvƒŒƒWƒfƒ“ƒg‚Ì•Œ¾‚ð•K—v‚Æ‚µ‚È‚¢‚±‚Ƃ͂悭‚ ‚è‚Ü‚·‚ªA‚±‚ê‚܂łÉs‚Á‚½‚±‚Æ‚ª‚ ‚ê‚ÎA‚»‚ê‚ð‹‚߂Ă­‚¾‚³‚¢BŽ„‚͉c‹Æ’S“–ŽÒ‚ÌŽdŽ–‚ð‚æ‚è‚æ‚­—‰ð‚·‚邽‚ß‚ÉA‚¢‚­‚‚©‚̃Z[ƒ‹ƒXƒR[ƒ‹‚ð•·‚¢‚Ă݂邱‚Æ‚ðˆê“x‹‚߂܂µ‚½B‚±‚ê‚Í30•ª‚ð—v‚µ‚Ü‚¹‚ñ‚Å‚µ‚½‚ªAŽ„‚ͬ‹K–͂ȓw—Í‚ª”Ì”„ˆõ‚ɈóÛ‚ð—^‚¦‚½‚ÆŽv‚¢‚Ü‚·B +���Ȃ��ÍA�����Ɍ����������Ƃ������ÆM�����Ƃ��͂��‚ł��A�l�X�ɔނ��̒m�b�Ɣ��f�͂̂ق��Ì������q�˂��ׂ��ł��B�����͔ނ��𕽂炰�A���Ȃ��͉������w�ÑA�������������ł��傤�B�ǂ��v���O���}�[�ÍA�Z�[���X�S���o�C�X�v���W�f���g�Ì������K�v�Ƃ��Ȃ����Ƃ͂悭�����܂����A�����܂łÉs�������Ƃ������ÎA���������߂Ă��������B���͉c�ƒS���҂̎d���������悭�������邽�߂ÉA�����‚��̃Z�[���X�R�[���𕷂��Ă݂邱�Ƃ����x���߂܂����B������30�����v���܂����ł������A���Í��K�͂ȓw�͂��̔����Ɉ��ۂ��^�����Ǝv���܂��B -Next [How to Document Wisely](05-How to Document Wisely.md) \ No newline at end of file +Next [How to Document Wisely](05-How%20to%20Document%20Wisely.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md b/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md index 270f16e..1dc9ebb 100644 --- a/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -1,20 +1,20 @@ # How to Document Wisely [//]: # (Version:1.0.0) -l¶‚Í’Z‚­‚Ä’N‚à“ǂ܂Ȃ¢‚­‚ç‚¢‚Ì‚±‚Ƃ𑂢‚Ä‚¢‚éB‚ ‚È‚½‚ª‚½‚킲‚Ƃ𑂭‚È‚çA’N‚à‚»‚ê‚ð“ǂ܂Ȃ¢‚Å‚µ‚傤B‚µ‚½‚ª‚Á‚ÄA­‚µ—Ç‚¢ƒhƒLƒ…ƒƒ“ƒg‚ªÅ“K‚Å‚·Bƒ}ƒl[ƒWƒƒ[‚Í‚±‚ê‚ð—‰ð‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B‚È‚º‚È‚çAŒë‚Á‚½ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚Å‚ ‚Á‚Ä‚àA”ނ炪ƒvƒƒOƒ‰ƒ}[‚Ɉˑ¶‚µ‚Ä‚¢‚È‚¢‚Æ‚¢‚¤Œë‚Á‚½ƒZƒLƒ…ƒŠƒeƒBŠ´Šo‚ð—^‚¦‚é‚©‚ç‚Å‚·B’N‚©‚ª–{“–‚É–ð‚É—§‚½‚È‚¢•¶‘‚ð‘‚¢‚Ä‚¢‚邯’fŒ¾‚µ‚Ä‚¢‚éꇂÍAu‚Í‚¢v‚ÆŒ¾‚Á‚Ä©‚ÉŽdŽ–‚ð’T‚µŽn‚ß‚éB +�l���͒Z���ĒN���ǂ܂Ȃ����炢�̂��Ƃ������Ă����B���Ȃ������킲�Ƃ������Ȃ��A�N���������ǂ܂Ȃ��ł��傤�B���������ÄA�����ǂ��h�L�������g���œK�ł��B�}�l�[�W���[�͂����ð—‰ï¿½ï¿½ï¿½ï¿½Ä‚��Ȃ����Ƃ��悭�����܂��B�Ȃ��Ȃ��A�������h�L�������e�[�V�����ł����Ă��A�ނ炪�v���O���}�[�Ɉˑ����Ă��Ȃ��Ƃ����������Z�L�����e�B���o���^���邩���ł��B�N�����{���ɖ��ɗ����Ȃ������������Ă����ƒf���������ê‡ï¿½ÍA�u�͂��v�ƌ����ÄÂ��Ɏd�����T���n�߂��B -ƒhƒLƒ…ƒƒ“ƒg‚ÌŽù—v‚ðŠÉ˜a‚·‚邽‚ß‚ÉA“K؂ȃhƒLƒ…ƒƒ“ƒg‚ðŒ©Ï‚à‚è‚É‘g‚Ýž‚ނ̂ɂ©‚©‚鎞ŠÔ‚ð³Šm‚ÉŒ©Ï‚à‚邱‚Æ‚ÍA‚»‚ê‚Ù‚ÇŒø‰Ê“I‚ł͂ ‚è‚Ü‚¹‚ñB^ŽÀ‚ÍŠ¦‚­‚ē‚¢FƒeƒXƒg‚̂悤‚ȃhƒLƒ…ƒƒ“ƒg‚ÍAƒR[ƒh‚ðŠJ”­‚·‚邿‚è‚à‰½”{‚à’·‚­‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B +�h�L�������g�̎��v���ɘa���邽�߂ÉA�K�؂ȃh�L�������g�����ς����ɑg�Ý��ނ̂ɂ����鎞�Ԃð³Šm�Ɍ��ς��邱�ƂÍA�����قnj��ʓI�ł͂����܂����B�^���͊����ē���F�e�X�g�̂悤�ȃh�L�������g�ÍA�R�[�h���J���������������{�����������邱�Ƃ������܂��B -—Ç‚¢•¶‘‚ð‘‚­‚±‚Æ‚ÍA‚Ü‚¸‘æˆê‚ÉA—Ç‚¢‘‚«•û‚Å‚·BŽ„‚Í‚ ‚È‚½‚ªŽ·•MA•׋­A—ûK‚ÉŠÖ‚·‚é–{‚ðŒ©‚Â‚¯‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B‚µ‚©‚µA‚½‚Æ‚¦‚ ‚È‚½‚ª”Ú—ò‚Èì‰Æ‚Å‚ ‚Á‚Ä‚àA‚ ‚È‚½‚ª•¶‘‰»‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢Œ¾—t‚Ì•nŽã‚È–½—ß‚ðŽ‚Á‚Ä‚¢‚Ä‚àA‰©‹à‚̃‹[ƒ‹‚Í–{“–‚É•K—v‚È‚à‚̂ł·Fu‚ ‚È‚½‚ª”Þ‚ç‚É‚ ‚È‚½‚Ì‚±‚Æ‚ð‚³‚¹‚邿‚¤‚ÉA‘¼l‚És‚¢‚Ü‚·B’N‚ª‚ ‚È‚½‚Ì‘—Þ‚ð“Ç‚ñ‚Å‚¢‚é‚Ì‚©A‚»‚±‚©‚甲‚¯o‚·•K—v‚ª‚ ‚é‚Ì‚©??A‚ǂ̂悤‚É‚»‚ê‚ç‚ð‹³‚¦‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚»‚¤‚·‚é‚È‚çA‚ ‚È‚½‚Í•½‹Ï“I‚ȃhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“ƒ‰ƒCƒ^[‚Å‚ ‚èA—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ɂȂé‚Å‚µ‚傤B +�ǂ��������������ƂÍA�܂������ÉA�ǂ��������ł��B���͂��Ȃ������M�A�׋��A���K�Ɋւ����{�����‚��邱�Ƃ������߂��܂��B�������A���Ƃ����Ȃ����ڗ��È��Ƃł����Ă��A���Ȃ������������Ȃ����΂Ȃ��Ȃ����t�̕n���Ȗ��߂������Ă��Ă��A�����̃��[���͖{���ɕK�v�Ȃ��̂ł��F�u���Ȃ����ނ��ɂ��Ȃ��̂��Ƃ��������悤�ÉA���l�És���܂��B�N�����Ȃ��Ì��ނ��ǂ��ł����̂��A�������甲���o���K�v�������̂�??�A�ǂ̂悤�ɂ������������邱�Ƃ��ł����̂����l�����������B���������Ȃ��A���Ȃ��͕��ϓI�ȃh�L�������e�[�V�������C�^�[�ł����A�ǂ��v���O���}�[�ɂȂ��ł��傤�B -ƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚ªŽÀۂɓǂނ±‚Æ‚ª‚Å‚«‚é•¶‘‚ð쬂·‚é‚̂ł͂Ȃ­AŽÀۂɃR[ƒhŽ©‘̂𕶑‰»‚·‚邱‚ƂɊւµ‚Ä‚ÍAŽ„‚ª¡‚܂łɒm‚Á‚Ä‚¢‚éÅ‚‚̃vƒƒOƒ‰ƒ}[‚Í••Õ“I‚ÈŠ´î‚ðŽ‚Á‚Ä‚¢‚Ü‚·FŽ©–¾‚̃R[ƒh‚ð‘‚¢‚ÄAƒR[ƒhŽ©‘̂𑂭‚±‚Ƃł͂Á‚«‚肳‚¹‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚±‚ê‚É‚ÍA2‚‚̗—R‚ª‚ ‚è‚Ü‚·B‚Ü‚¸AƒR[ƒhƒŒƒxƒ‹‚̃hƒLƒ…ƒƒ“ƒg‚ðŽQÆ‚·‚é•K—v‚ª‚ ‚él‚ÍA‚Ù‚Æ‚ñ‚Ç‚Ìê‡AƒR[ƒh‚ð“Ç‚ß‚é‚æ‚¤‚ɂȂè‚Ü‚·BŠm‚©‚ÉA‚±‚ê‚͉SŽÒ‚æ‚è‚àŒoŒ±–L•x‚ȃvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͊ȒP‚Å‚·B‚µ‚©‚µA‚³‚ç‚Éd—v‚Ȃ̂ÍA•¶‘‚ª‚È‚¯‚ê‚ÎAƒR[ƒh‚Æ•¶‘‚Í–µ‚‚µ‚Ä‚¢‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·Bň«‚Ìê‡Aƒ\[ƒXƒR[ƒh‚ÍŠÔˆá‚Á‚Ĭ—‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·BŠ®‘S‚É‘‚©‚ê‚Ä‚¢‚È‚¯‚ê‚ÎA‚»‚Ì•¶‘‚Í‚¤‚»‚ð‚‚­‚±‚Æ‚ª‚Å‚«A‚»‚ê‚͉½ç”{‚àˆ«‰»‚µ‚Ü‚·B +�v���O���}�[�ȊO�Ìl�����ۂɓǂނ��Ƃ��ł��镶�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚ł͂Ȃ��A���ۂɃR�[�h���̂ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚Ɋւ��ĂÍA�������܂łɒm�������Å��̃v���O���}�[�͕��ՓI�Ȋ����������Ă��܂��F�����̃R�[�h�������ÄA�R�[�h���̂��������Ƃł͂����肳���邱�Ƃ͂ł��܂����B�����ɂÍA2�‚̗��R�������܂��B�܂��A�R�[�h���x���̃h�L�������g���Q�Ƃ����K�v�������l�ÍA�قƂ��ǂÌê‡ï¿½A�R�[�h���ǂ߂��悤�ɂȂ��܂��B�m���ÉA�����Í��S�҂������o���L�x�ȃv���O���}�[�ɂƂ��Ă͊ȒP�ł��B�������A�����Éd�v�Ȃ̂ÍA�������Ȃ����ÎA�R�[�h�ƕ����͖������Ă��Ȃ��Ƃ������Ƃł��B�ň��Ìê‡ï¿½A�\�[�X�R�[�h�͊Ԉ����Ä��������”\���������܂��B���S�É������Ă��Ȃ����ÎA���̕����͂������‚����Ƃ��ł��A�����͉����{���������܂��B -‚±‚ê‚ÍÓ”C‚ ‚éƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚æ‚èŠÈ’P‚ɂ͂Ȃè‚Ü‚¹‚ñBŽ©–¾‚̃R[ƒh‚ð‚ǂ̂悤‚É‘‚­‚̂ł·‚©H‚»‚ê‚͂ǂ¤‚¢‚¤ˆÓ–¡‚Å‚·‚©H‚»‚̈Ӗ¡‚ÍF +�����ÍÓ”C�����v���O���}�[�ɂƂ��Ă����ȒP�ɂ͂Ȃ��܂����B�����̃R�[�h���ǂ̂悤�É����̂ł����H�����͂ǂ������Ӗ��ł����H���̈Ӗ��ÍF -’N‚©‚ª‚»‚ê‚ð“ǂޕK—v‚ª‚ ‚邱‚Æ‚ð’m‚Á‚Ä‚¢‚éƒR[ƒh‚ð‘‚­B -- ƒS[ƒ‹ƒfƒ“ƒ‹[ƒ‹‚ð“K—p‚·‚éB -- •ʂ̃\ƒŠƒ…[ƒVƒ‡ƒ“‚ðv‘¬‚É—˜—p‚Å‚«‚éꇂłàAŠÈ’P‚ȃ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð‘I‘ð‚·‚éB -- ƒR[ƒh‚ð“ï“lj»‚·‚鬂³‚ÈÅ“K‰»‚ð‹]µ‚É‚·‚éB -- “ÇŽÒ‚Ì‚±‚Æ‚ðl‚¦‚ÄA”Þ—‚ð‚à‚Á‚ÆŠy‚É‚·‚é‹Md‚ÈŽžŠÔ‚ð”ï‚₵‚Ä‚­‚¾‚³‚¢B‚»‚µ‚Ä -- `foo`A` bar`A `doIt`‚̂悤‚ÈŠÖ”–¼‚ðŽg—p‚·‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñI +�N�����������ǂޕK�v�����邱�Ƃ��m�������R�[�h�������B +- �S�[���f�����[�����K�p�����B +- �ʂ̃\�����[�V�������v���ɗ��p�ł����ê‡ï¿½Å‚��A�ȒP�ȃ\�����[�V�������I�������B +- �R�[�h�����lj����é¬ï¿½ï¿½ï¿½ÈÅ“K�����]���ɂ����B +- �ǎ҂̂��Ƃ��l���ÄA�Þ��������Ɗy�ɂ����M�d�Ȏ��Ԃ����₵�Ă��������B������ +- `foo`�A` bar`�A `doIt`�̂悤�ȊÖ������g�p���邱�Ƃ͂����܂����I -Next [How to Work with Poor Code](06-How to Work with Poor Code.md) \ No newline at end of file +Next [How to Work with Poor Code](06-How%20to%20Work%20with%20Poor%20Code.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index de9d2d7..2dd8e59 100644 --- a/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -1,10 +1,10 @@ # How to Work with Poor Code [//]: # (Version:1.0.0) -’N‚©‚ª‘‚¢‚½—òˆ«‚ȃR[ƒh‚Åì‹Æ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Ƃ͔ñí‚Ɉê”Ê“I‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚ªŒC‚ð—š‚­‚܂łÍA‚ ‚Ü‚è‚É‚à•nŽã‚ł͂Ȃ¢‚ÆŽv‚Á‚Ä‚­‚¾‚³‚¢B”Þ‚ç‚ÍAƒXƒPƒWƒ…[ƒ‹ˆ³—͂𖞂½‚·‚½‚߂ɉ½‚©‚ð‚·‚Î‚â‚­s‚¤‚½‚ß‚ÉAˆÓޝ“I‚ɗЂ܂ê‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚»‚ê‚É‚©‚©‚í‚炸A•s–¾—ĂȃR[ƒh‚Åì‹Æ‚·‚é‚É‚ÍA‚»‚ê‚ð—‰ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ð—‰ð‚·‚é‚ɂ͊wKŽžŠÔ‚ª•K—v‚ÅA‚»‚ÌŽžŠÔ‚͂ǂ±‚©‚̃XƒPƒWƒ…[ƒ‹‚©‚ço‚È‚¯‚ê‚΂Ȃ炸A‚ ‚È‚½‚Í‚»‚ê‚ðŽå’£‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ð—‰ð‚·‚é‚É‚ÍAƒ\[ƒXƒR[ƒh‚ð“ǂ܂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚¨‚»‚ç‚­‚»‚ê‚ðŽŽ‚·•K—v‚ª‚ ‚è‚Ü‚·B +�N�����������òˆ«‚ȃR�[�h�Å��Ƃ��Ȃ����΂Ȃ��Ȃ����Ƃ͔����Ɉ��ʓI�ł��B�������A���Ȃ����C�𗚂��܂łÍA���܂��ɂ��n���ł͂Ȃ��Ǝv�����������B�ނ��ÍA�X�P�W���[�����͂𖞂������߂ɉ��������΂₭�s�����߂ÉA�ӎ��I�ɗ��܂��Ă��邩�������܂����B�����ɂ������炸�A�s���ĂȃR�[�h�Å��Ƃ����ɂÍA�����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½K�v�������܂��B�����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É‚ÍŠw�K���Ԃ��K�v�ÅA���̎��Ԃ͂ǂ����̃X�P�W���[�������o�Ȃ����΂Ȃ炸�A���Ȃ��͂������咣�����K�v�������܂��B�����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É‚ÍA�\�[�X�R�[�h���ǂ܂Ȃ����΂Ȃ��܂����B���Ȃ��͂����炭�����������K�v�������܂��B -ƒR[ƒh‚ð•¶‘‰»‚µ‚悤‚Æ‚·‚邯A‚ ‚È‚½‚ªl—¶‚µ‚È‚©‚Á‚½‚©‚à‚µ‚ê‚È‚¢Šp“x‚ðl—¶‚µ‚È‚¯‚ê‚΂Ȃç‚È‚­‚È‚èAŒ‹‰Ê‚Æ‚µ‚Ä“¾‚ç‚ê‚é•¶‘‚ª–𗧂‚©‚à‚µ‚ê‚È‚¢‚Ì‚ÅAŽ©•ªŽ©g‚¾‚¯‚Å‚ ‚Á‚Ä‚àA‚±‚ê‚ð•¶‘‰»‚·‚é‚̂͂¢‚¢ŽžŠÔ‚Å‚·B‚±‚ê‚ð‚â‚Á‚Ä‚¢‚éŠÔAƒR[ƒh‚̈ꕔ‚Ü‚½‚Í‘S•”‚ð‘‚«’¼‚·‚ɂ͉½‚ª•K—v‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚»‚ê‚ÍŽÀÛ‚É‚»‚ê‚ð‘‚«Š·‚¦‚鎞ŠÔ‚ðß–ñ‚·‚é‚Å‚µ‚傤‚©H‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚ÆA‚ ‚È‚½‚Í‚»‚ê‚ð‚æ‚èM—Ђł«‚é‚Å‚µ‚傤‚©H‚±‚±‚Řü–‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚ÆA‚ ‚È‚½‚͑Έ‚µ‚â‚·‚­‚È‚è‚Ü‚·‚ªA‚»‚ê‚ð“ǂ܂Ȃ¯‚ê‚΂Ȃç‚È‚¢ŽŸ‚Ìl‚ɂƂÁ‚Ă͖{“–‚ÉŠÈ’P‚Å‚µ‚傤‚©H‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚È‚çAƒeƒXƒg‚Ì•‰’S‚Í‚¢‚­‚ç‚Å‚·‚©H‚»‚ê‚ðăeƒXƒg‚·‚é•K—v«‚ÍA“¾‚ç‚ê‚é‰Â”\«‚Ì‚ ‚é—˜‰v‚æ‚è‚àd—v‚¾‚낤‚©H +�R�[�h�ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½æ‚¤ï¿½Æ‚����ÆA���Ȃ����l�����Ȃ��������������Ȃ��p�x���l�����Ȃ����΂Ȃ��Ȃ��Ȃ��A���ʂƂ��ē������镶�����𗧂‚��������Ȃ��̂ÅA�������g�����ł����Ă��A�����ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚͂������Ԃł��B���������������ÔA�R�[�h�̈ꕔ�܂��͑S�������������ɂ͉����K�v�����l�����������B�����͎��ۂɂ��������������鎞�Ԃ��ߖñ‚·‚��ł��傤���H���Ȃ������������������ÆA���Ȃ��͂����������M���ł����ł��傤���H�����Ř����ɒ��ӂ��Ă��������B���Ȃ������������������ÆA���Ȃ��͑Î����₷���Ȃ��܂����A�������ǂ܂Ȃ����΂Ȃ��Ȃ����Ìl�ɂƂ��Ă͖{���ɊȒP�ł��傤���H���Ȃ������������������Ȃ��A�e�X�g�̕��S�͂������ł����H�������ăe�X�g�����K�v���ÍA���������”\���̂��闘�v�������d�v���낤���H -‚ ‚È‚½‚ª‘‚¢‚Ä‚¢‚È‚¢ƒR[ƒh‚ɑ΂·‚éì‹Æ‚Ì‚½‚߂̂ ‚È‚½‚Ì„’è‚Å‚ÍA‚»‚̃R[ƒh‚Ì•iŽ¿‚ÍA–â‘è‚âunk-unks‚ÌƒŠƒXƒN‚ɑ΂·‚é‚ ‚È‚½‚Ì”Fޝ‚ɉe‹¿‚ð—^‚¦‚é‚Í‚¸‚Å‚·B +���Ȃ��������Ă��Ȃ��R�[�h�ɑ΂������Ƃ̂��߂̂��Ȃ��Ì����łÍA���̃R�[�h�̕i���ÍA������unk-unks�̃��X�N�ɑ΂��邠�Ȃ��̔F���ɉe�����^�����͂��ł��B -ƒvƒƒOƒ‰ƒ}‚ÌÅ‚à—D‚ꂽƒc[ƒ‹‚Ì‚¤‚¿‚Ì2‚‚ł ‚é’ŠÛ‰»‚ƃJƒvƒZƒ‹‰»‚ÍA“Á‚É–ï‰î‚ȃR[ƒh‚É“K—p‰Â”\‚Å‚ ‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚­‚±‚Æ‚ªd—v‚Å‚·B‘å‚«‚ȃR[ƒhƒuƒƒbƒN‚ðÄÝŒv‚·‚邱‚Ƃ͂ł«‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚ ‚é’ŠÛ‰»—Ê‚ð’ljÁ‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA—Ç‚¢ƒfƒUƒCƒ“‚̃ƒŠƒbƒg‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B“Á‚ÉAŒÂ•Ê‚ÉÄÝŒv‚·‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚ÉA“Á‚Ɉ«‚¢•”•i‚ðŽæ‚èœ‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B -Next [How to Use Source Code Control](07-How to Use Source Code Control.md) \ No newline at end of file +�v���O���}�Ìł��D�ꂽ�c�[���̂�����2�‚ł��钊�ۉ��ƃJ�v�Z�����ÍA���ɖ����ȃR�[�h�ɓK�p�”\�ł��邱�Ƃ��o���Ă������Ƃ��d�v�ł��B�傫�ȃR�[�h�u���b�N���ÄÝŒv���邱�Ƃ͂ł��Ȃ����������܂��ñ‚ªA���钊�ۉ��ʂ��lj����邱�Ƃ��ł����ÎA�ǂ��f�U�C���̃����b�g�𓾂邱�Ƃ��ł��܂��B���ÉA�•ʂÉÄÝŒv���邱�Ƃ��ł����悤�ÉA���Ɉ������i�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��ł��܂��B +Next [How to Use Source Code Control](07-How%20to%20Use%20Source%20Code%20Control.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 4ab57b1..49fc4de 100644 --- a/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -1,9 +1,9 @@ # How to Use Source Code Control [//]: # (Version:1.0.0) -ƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€iƒo[ƒWƒ‡ƒ“ŠÇ—ƒVƒXƒeƒ€‚Æ‚àŒÄ‚΂ê‚Ü‚·j‚Å‚ÍAƒvƒƒWƒFƒNƒg‚ðŒø‰Ê“I‚ÉŠÇ—‚Å‚«‚Ü‚·B”Þ‚ç‚͈êl‚ɂƂÁ‚ĂƂĂà—L—p‚ÅAƒOƒ‹[ƒv‚ɂ͕K—v•s‰ÂŒ‡‚Å‚·BƒR[ƒh‚ªŽ¸‚í‚ꂸA•ÏX‚ɈӖ¡‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚邿‚¤‚ÉAˆÙ‚È‚éƒo[ƒWƒ‡ƒ“‚Ì‚·‚ׂĂ̕ÏX‚ð’ÇÕ‚µ‚Ü‚·B‚ ‚È‚½‚ª•ÏX‚·‚éƒR[ƒh‚ÍAƒ`[ƒ€‚Æ‹¤—L‚³‚ê‚éA‚Ü‚½‚ÍƒŠƒŠ[ƒX‚³‚ê‚éƒRƒ~ƒbƒg‚³‚ꂽŒöŽ®‚̃R[ƒh‚©‚çTd‚ɕۂ½‚ê‚é‚Ì‚ÅAƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚ÉŽ©M‚ðŽ‚Á‚ăXƒ[ƒAƒEƒFƒC‚ƃfƒoƒbƒOƒR[ƒh‚ð쬂·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +�\�[�X�R�[�h�Ǘ��V�X�e���i�o�[�W�����Ǘ��V�X�e���Ƃ��Ă΂��܂��j�łÍA�v���W�F�N�g�����ʓI�ɊǗ��ł��܂��B�ނ��͈��l�ɂƂ��ĂƂĂ��L�p�ÅA�O���[�v�ɂ͕K�v�s�Œ��ł��B�R�[�h�������ꂸ�A�ÏX�ɈӖ������蓖�Ă邱�Ƃ��ł����悤�ÉA�قȂ��o�[�W�����̂��ׂĂ̕ÏX���ÇՂ��܂��B���Ȃ����ÏX�����R�[�h�ÍA�`�[���Ƌ��L�������A�܂��̓����[�X�������R�~�b�g���ꂽ�����̃R�[�h�����T�d�ɕۂ������̂ÅA�\�[�X�R�[�h�Ǘ��V�X�e���Ɏ��M�������ăX���[�A�E�F�C�ƃf�o�b�O�R�[�h���ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��܂��B -Ž„‚̓\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚Ì—˜“_‚ð—‰ð‚·‚é‚̂ɒx‚ê‚Ü‚µ‚½‚ªA¡‚Í1l‚̃vƒƒWƒFƒNƒg‚Å‚à‚È‚­‚Ăං«‚Ä‚¢‚Ü‚¹‚ñBˆê”Ê“I‚É‚ÍA“¯‚¶ƒR[ƒhƒx[ƒX‚Åì‹Æ‚·‚éƒ`[ƒ€‚ª•K—v‚ÈꇂɕK—v‚Å‚·B‚µ‚©‚µA”Þ‚ç‚ɂ͕ʂ̑傫‚È—˜“_‚ª‚ ‚è‚Ü‚·BƒR[ƒh‚𬒷‚µ‚Ä‚¢‚éƒI[ƒKƒjƒbƒNƒVƒXƒeƒ€‚Æl‚¦‚邱‚Æ‚ð§—サ‚Ü‚·BŠe•ÏX‚ÍV‚µ‚¢–¼‘O‚Ü‚½‚͔Ԇ‚ÌV‚µ‚¢ƒŠƒrƒWƒ‡ƒ“‚Æ‚µ‚ă}[ƒN‚³‚ê‚邽‚ßAƒ\ƒtƒgƒEƒFƒA‚Í–Ú‚ÉŒ©‚¦‚éi•à“I‚Ȉê˜A‚̉ü‘P‚Æl‚¦‚邿‚¤‚ɂȂè‚Ü‚·BŽ„‚Í‚±‚ꂪ‰SŽÒ‚ɂƂÁ‚Ä“Á‚ɕ֗˜‚¾‚ÆŽv‚¢‚Ü‚·B +���̓\�[�X�R�[�h�Ǘ��V�X�e���̗��_�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚É’x���܂������A����1�l�̃v���W�F�N�g�ł��Ȃ��Ă������Ă��܂����B���ʓI�ɂÍA�����R�[�h�x�[�X�Å��Ƃ����`�[�����K�v�Èê‡ï¿½É•K�v�ł��B�������A�ނ��ɂ͕ʂ̑傫�ȗ��_�������܂��B�R�[�h�ð¬’��������I�[�K�j�b�N�V�X�e���Æl���邱�Ƃ����サ�܂��B�e�ÏX�ÍV�������O�܂��͔Ô��ÌV�������r�W�����Ƃ��ă}�[�N�����邽�ßA�\�t�g�E�F�A�͖ڂɌ������i���I�Ȉ��A�̉��P�Æl�����悤�ɂȂ��܂��B���͂��ꂪ���S�҂ɂƂ��ē��ɕ֗����Ǝv���܂��B -ƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚ðŽg—p‚·‚邽‚߂̗ǂ¢ƒeƒNƒjƒbƒN‚ÍAí‚ÉÅV‚Ìó‘ԂɂȂÁ‚Ä‚©‚甓úˆÈ“à‚É‘ØÝ‚·‚邱‚Ƃł·B”“ú‚ÅI—¹‚Å‚«‚È‚¢ƒR[ƒh‚̓`ƒFƒbƒNƒCƒ“‚³‚ê‚Ä‚¢‚Ü‚·‚ªA”ñƒAƒNƒeƒBƒu‚ŌĂÑo‚³‚ê‚邱‚Ƃ͂Ȃ¢‚½‚ßA‘¼‚Ìl‚ɂ͖â‘è‚Ͷ‚¶‚Ü‚¹‚ñB‚ ‚È‚½‚̃`[ƒ€ƒƒCƒg‚ðŒ¸‘¬‚³‚¹‚éŠÔˆá‚¢‚ð”Æ‚·‚±‚Æ‚Íd‘å‚ȃGƒ‰[‚Å‚·B‚»‚ê‚Í‚µ‚΂µ‚΃^ƒu[‚Å‚·B +�\�[�X�R�[�h�Ǘ��V�X�e�����g�p���邽�߂̗ǂ��e�N�j�b�N�ÍA���ÉÅV�Ì��ԂɂȂ��Ă��ç”���ȓ��ɑØÝ‚��邱�Ƃł��B�����ÅI���ł��Ȃ��R�[�h�̓`�F�b�N�C�������Ă��܂����A���A�N�e�B�u�ŌĂÑo�����邱�Ƃ͂Ȃ����ßA���Ìl�ɂ͖����Í����܂����B���Ȃ��̃`�[�����C�g�������������ԈႢ���Ƃ����ƂÍd���ȃG���[�ł��B�����͂��΂��΃^�u�[�ł��B -Next [How to Unit Test](08-How to Unit Test.md) +Next [How to Unit Test](08-How%20to%20Unit%20Test.md) diff --git a/jp/1-Beginner/Team-Skills/08-How to Unit Test.md b/jp/1-Beginner/Team-Skills/08-How to Unit Test.md index 8786974..68883d0 100644 --- a/jp/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/jp/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -1,9 +1,9 @@ # How to Unit Test [//]: # (Version:1.0.0) -’P‘̃eƒXƒg‚ÍA‚»‚ê‚ð‘‚¢‚½ƒ`[ƒ€‚É‚æ‚Á‚ăR[ƒh‰»‚³‚ꂽ‹@”\‚ÌŒÂX‚Ì•”•ª‚ðƒeƒXƒg‚·‚邱‚Æ‚ÍA‚»‚ê‚Æ‚͈قȂé‚à‚̂ł͂Ȃ­AƒR[ƒfƒBƒ“ƒO‚̈ꕔ‚Å‚·B ƒR[ƒh‚ÌÝŒv‚̈ꕔ‚ÍAƒeƒXƒg‚·‚é•û–@‚ðÝŒv‚·‚邱‚Ƃł·B 1‚‚̕¶‚¾‚¯‚Å‚ ‚Á‚Ä‚àAƒeƒXƒgŒv‰æ‚ð‘‚«—¯‚ß‚é‚ׂ«‚Å‚·B Žž‚ɂ̓eƒXƒg‚ªŠÈ’P‚ɂȂéFuƒ{ƒ^ƒ“‚ÍŒ©‰h‚¦‚ª—Ç‚¢‚ÌHv Žž‚ɂ͕¡ŽG‚ɂȂè‚Ü‚·F '‚±‚̃}ƒbƒ`ƒ“ƒOƒAƒ‹ƒSƒŠƒYƒ€‚ͳŠm‚ɳ‚µ‚¢ƒ}ƒbƒ`‚ð•Ô‚µ‚Ü‚µ‚½‚©H' +�P�̃e�X�g�ÍA�������������`�[���ɂ����ăR�[�h�����ꂽ�@�\�̌ÂX�̕������e�X�g���邱�ƂÍA�����Ƃ͈قȂ����̂ł͂Ȃ��A�R�[�f�B���O�̈ꕔ�ł��B �R�[�h�ÌÝŒv�̈ꕔ�ÍA�e�X�g�������@���݌v���邱�Ƃł��B 1�‚̕������ł����Ă��A�e�X�g�v�����������߂��ׂ��ł��B ���ɂ̓e�X�g���ȒP�ɂȂ��F�u�{�^���͌��h�����ǂ��ÌH�v ���ɂ͕��G�ɂȂ��܂��F '���̃}�b�`���O�A���S���Y���Í��m�É������}�b�`���Ԃ��܂������H' -‰Â”\‚Å‚ ‚ê‚ÎAƒAƒT[ƒVƒ‡ƒ“ƒ`ƒFƒbƒN‚ƃeƒXƒgƒhƒ‰ƒCƒo‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B ‚±‚ê‚Í‘Šú‚ɃoƒO‚ðƒLƒƒƒbƒ`‚·‚邾‚¯‚łȂ­AŒã‚Å”ñí‚ɕ֗˜‚ÅA‚ ‚È‚½‚ªS”z‚·‚é•K—v‚̂Ȃ¢ƒ~ƒXƒeƒŠ[‚ð”rœ‚µ‚Ü‚·B +�”\�ł����ÎA�A�T�[�V�����`�F�b�N�ƃe�X�g�h���C�o���g�p�����������B �����͑����Ƀo�O���L���b�`���邾���łȂ��A���Ŕ����ɕ֗��ÅA���Ȃ����S�z�����K�v�̂Ȃ��~�X�e���[���r�����܂��B -ƒGƒNƒXƒgƒŠ[ƒ€EƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÌŠJ”­ŽÒ‚ÍAƒ†ƒjƒbƒgEƒeƒXƒg‚ðŒø‰Ê“I‚ÉŽÀs‚µ‚Ä‚¢‚Ü‚·B Ž„‚͔ނç‚Ì•¶Í‚ð„‘E‚·‚邿‚è‚à‚¤‚Ü‚­‚¢‚­‚±‚Ƃ͂ł«‚Ü‚¹‚ñB +�G�N�X�g���[���E�v���O���~���O�̊J���҂ÍA���j�b�g�E�e�X�g�����ʓI�Ɏ��s���Ă��܂��B ���͔ނ��̕��͂ð„‘E�������������܂��������Ƃ͂ł��܂����B -Next [Take Breaks when Stumped](09-Take Breaks when Stumped.md) \ No newline at end of file +Next [Take Breaks when Stumped](09-Take%20Breaks%20when%20Stumped.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index ef3001f..d434b4e 100644 --- a/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -1,5 +1,5 @@ # Take Breaks when Stumped [//]: # (Version:1.0.0) -¢‚Á‚½‚Æ‚«‚ÍA‹xŒe‚µ‚Ä‚­‚¾‚³‚¢B ¢‚Á‚½‚Æ‚«‚ÉŽ„‚ÍŽž‚É‚Í15•ªŠÔáÒ‘z‚µAŽ„‚ª‚»‚ê‚É–ß‚Á‚½‚Æ‚«‚É–â‘è‚Í–‚–@‚̂悤‚ɉð‚­B –é‚̇–°‚ÍŽž‚ɂ͓¯‚¶‚悤‚ɑ傫‚­‚È‚éB ˆêŽž“I‚É‘¼‚̃AƒNƒeƒBƒrƒeƒB‚ÉØ‚è‘Ö‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +�������Ƃ��ÍA�x�e�����������B �������Ƃ��Ɏ��͎��ɂ�15�����ґz���A���������ɖ߂����Ƃ��ɖ����͖��@�̂悤�ɉ����B ���Ì����͎��ɂ͓����悤�ɑ傫���Ȃ��B �ꎞ�I�ɑ��̃A�N�e�B�r�e�Bï¿½ÉØ‚��ւ��邱�Ƃ��ł��܂��B -Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file +Next [How to Recognize When to Go Home](10-How%20to%20Recognize%20When%20to%20Go%20Home.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index 534e0b5..88ea70f 100644 --- a/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -1,16 +1,16 @@ # How to Recognize When to Go Home [//]: # (Version:1.0.0) -ƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÍA•¶‰»‚Å‚à‚ ‚銈“®‚Å‚·BŽc”O‚È‚±‚Æ‚ÉASg‚ÌŒ’N‚ð‘娂ɂ·‚é•¶‰»‚ł͂ ‚è‚Ü‚¹‚ñB•¶‰»“I/—ðŽj“I‚È——Ri—Ⴆ‚ÎA–éŠÔ‚ɃRƒ“ƒsƒ…[ƒ^‚ðƒAƒ“ƒ[ƒh‚·‚é•K—v«j‚âAŽs꓊“ü‚܂ł̎žŠÔ‚̈³”—‚ƃvƒƒOƒ‰ƒ}‚Ì•s‘«‚Ì‚½‚ß‚ÉAƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ}‚Í“`““I‚ɉߘJ‚Å‚·BŽ„‚Í‚ ‚È‚½‚ª•·‚¢‚Ä‚¢‚é‚·‚ׂĂ̕¨Œê‚ðM‚¶‚邱‚Ƃ͂ł«‚È‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·‚ªAT‚É60ŽžŠÔ‚ªˆê”Ê“I‚ÅA50‚Í‚©‚Ȃ譂Ȃ¢‚ÆŽv‚¢‚Ü‚·B‚±‚ê‚ÍA‚»‚ê‚æ‚è‚à‚͂邩‚É‘½‚­‚Ì‚±‚Æ‚ª•K—v‚Å‚ ‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚Í—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂƂÁ‚Äd‘å‚È–â‘è‚Å‚ ‚èAƒvƒƒOƒ‰ƒ}‚ÍŽ©•ªŽ©g‚ł͂Ȃ­ƒ`[ƒ€ƒƒCƒg‚Å‚à‚ ‚è‚Ü‚·B‚¢‚‰ƂɋA‚é‚ׂ«‚©AŽž‚ɂ͑¼‚Ìl‚ª‰Æ‚É‹A‚邱‚Æ‚ðŽ¦´‚·‚邯‚«‚ð”Fޝ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚Ì–â‘è‚ð‰ðŒˆ‚·‚邽‚߂̌Œ肳‚ꂽƒ‹[ƒ‹‚Í‚ ‚è‚Ü‚¹‚ñB‚È‚º‚Ȃ瓯‚¶——R‚ÅA‚·‚ׂĂÌlŠÔ‚ªˆÙ‚È‚Á‚Ä‚¢‚é‚©‚ç‚Å‚·B +�R���s���[�^�v���O���~���O�ÍA�����ł����銈���ł��B�c�O�Ȃ��ƂÉA�S�g�̌��N�����؂ɂ��镶���ł͂����܂����B�����I/���j�I�ȗ��R�i�Ⴆ�ÎA���ԂɃR���s���[�^���A�����[�h�����K�v���j���A�s�꓊���܂ł̎��Ԃ̈����ƃv���O���}�̕s���̂��߂ÉA�R���s���[�^�v���O���}�͓`���I�ɉߘJ�ł��B���͂��Ȃ��������Ă��邷�ׂĂ̕������M���邱�Ƃ͂ł��Ȃ��Ǝv���Ă��܂����A�T��60���Ԃ����ʓI�ÅA50�͂��Ȃè­ï¿½È‚��Ǝv���܂��B�����ÍA�����������͂邩�ɑ����̂��Ƃ��K�v�ł��邱�Ƃ��Ӗ����܂��B�����͗ǂ��v���O���}�ɂƂ��Äd���Ȗ����ł����A�v���O���}�͎������g�ł͂Ȃ��`�[�����C�g�ł������܂��B���‰ƂɋA���ׂ����A���ɂ͑��Ìl���ƂɋA�邱�Ƃ����������Ƃ����F�������K�v�������܂��B���̖������������邽�߂̌Œ肳�ꂽ���[���͂����܂����B�Ȃ��Ȃ瓯�����R�ÅA���ׂĂÌl�Ԃ��قȂ��Ă��邩���ł��B -1TŠÔ‚É60ŽžŠÔ‚ð’´‚¦‚邯AŽ„‚Í’ZŠúŠÔi–ñ1TŠÔj\‚µž‚Þ‚±‚Æ‚ª‚Å‚«AŽž‚ɂ͎„‚ÉŠú‘Ò‚³‚ê‚éAŽ„‚ɂƂÁ‚Ä“Á•ʂȓw—͂ł·BŽ„‚Íl‚©‚ç60ŽžŠÔ‚ÌŽdŽ–‚ðŠú‘Ò‚·‚é‚Ì‚ªŒö³‚Å‚ ‚é‚©‚Ç‚¤‚©‚Í•ª‚©‚è‚Ü‚¹‚ñBŽ„‚Í40‚ªŒö³‚Å‚ ‚é‚©‚Ç‚¤‚©‚í‚©‚ç‚È‚¢B‚µ‚©‚µAŽ„‚Í‚ ‚È‚½‚ª“­‚¢‚Ä‚¢‚é—]•ª‚ÈŽžŠÔ‚ð­‚µ‚Å‚àŽg‚¢‰Ê‚½‚µ‚Ä‚¢‚é‚Ù‚ÇAŽdŽ–‚ª‹ð‚©‚Å‚ ‚邯ŠmM‚µ‚Ä‚¢‚Ü‚·BŒÂl“I‚É‚ÍA‚»‚ê‚ÍT‚É60ŽžŠÔˆÈã‚Å‚·BŽ„‚ÍŒÂl“I‚É‚ÍAƒvƒƒOƒ‰ƒ}[‚ªƒm[ƒuƒ‹ƒŒƒX‚ðŽÀs‚µ‚Äd‚¢•‰’S‚𕉂í‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æl‚¦‚Ä‚¢‚Ü‚·B‚µ‚©‚µA‚»‚ê‚̓vƒƒOƒ‰ƒ}‚Ì‹`–±‚ł͂ ‚è‚Ü‚¹‚ñB”ß‚µ‚¢Ž–ŽÀ‚ÍAƒvƒƒOƒ‰ƒ}[‚ÍA’N‚©‚Ì‚½‚߂ɃVƒ‡[‚ð‚·‚é‚½‚ß‚ÉA—Ⴆ‚ÎŒo‰cŽÒ‚Ɉóۂ¯‚éƒ}ƒl[ƒWƒƒ[‚È‚ÇAƒpƒgƒŒƒC‚ɂȂ邱‚Æ‚ð‚æ‚­—v‹‚³‚ê‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚Í‚µ‚΂µ‚΂±‚ê‚ɋꂵ‚ñ‚Å‚¢‚Ü‚·B‚È‚º‚È‚çA”Þ‚ç‚ÍŠì‚ñ‚Å—~‚µ‚¢‚Æ”M–]‚µ‚Ä‚¢‚ÄA‚¢‚¢‚¦‚ł͂Ȃ¢‚ÆŒ¾‚Á‚Ä‚¢‚È‚¢‚©‚ç‚Å‚·B‚±‚ê‚ɑ΂µ‚Ä4‚‚̖hŒä‚ª‚ ‚è‚Ü‚·F +1�T�Ԃ�60���Ԃ𒴂����ÆA���͒Z���Ôi��1�T�Ôj�\�����ނ��Ƃ��ł��A���ɂ͎��Ɋ��҂������A���ɂƂ��ē��ʂȓw�͂ł��B���Íl����60���Ԃ̎d�������҂����̂������ł��邩�ǂ����͕������܂����B����40�������ł��邩�ǂ����킩���Ȃ��B�������A���͂��Ȃ��������Ă����]���Ȏ��Ԃ������ł��g���ʂ����Ă����قÇA�d���������ł����Ɗm�M���Ă��܂��B�Âl�I�ɂÍA�����ÍT��60���ԈÈ��ł��B���͌Âl�I�ɂÍA�v���O���}�[���m�[�u�����X�����s���Äd�����S�𕉂��Ȃ����΂Ȃ��Ȃ��Æl���Ă��܂��B�������A�����̓v���O���}�̋`���ł͂����܂����B�߂��������ÍA�v���O���}�[�ÍA�N���̂��߂ɃV���[�����邽�߂ÉA�Ⴆ�Όo�c�҂Ɉ��ۂÂ����}�l�[�W���[�ȂÇA�p�g���C�ɂȂ邱�Ƃ��悭�v�������܂��B�v���O���}�[�͂��΂��΂����ɋꂵ���ł��܂��B�Ȃ��Ȃ��A�ނ��͊����ŗ~�����ƔM�]�����ÄA�������ł͂Ȃ��ƌ����Ă��Ȃ������ł��B�����ɑ΂���4�‚̖h�䂪�����܂��F -- ŽÐ“à‚Ì‘Sˆõ‚ƂȂé‚ׂ­‘½‚­‚Ìl‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚Æ‚Á‚ÄA‰½‚ª‹N‚±‚Á‚Ä‚¢‚é‚Ì‚©‚ɂ‚¢‚ÄŒo‰cŽÒ‚ÉŒë‰ð‚ð—^‚¦‚邱‚Æ‚ª‚È‚¢‚悤‚É‚µ‚Ü‚·B -- –h‰q“I‚©‚–¾Ž¦“I‚ÉŒ©Ï‚à‚èAƒXƒPƒWƒ…[ƒ‹‚𗧂Ă邱‚Æ‚ðŠw‚ÑA’N‚ªƒXƒPƒWƒ…[ƒ‹‚ª‰½‚Å‚ ‚é‚©A‚Ç‚±‚É—§‚Á‚Ä‚¢‚é‚Ì‚©‚ðŒ©‚¦‚邿‚¤‚É‚·‚éB -- •K—v‚Å‚ ‚ê‚΂¢‚¢‚¦A‚¢‚¢‚¦ƒ`[ƒ€‚ÆŒ¾‚¤‚±‚Æ‚ðŠw‚Ô -‚ ‚È‚½‚ª‚·‚é•K—v‚ª‚ ‚ê‚ÎI—¹‚µ‚Ü‚·B +- �Г��̑S���ƂȂ��ׂ������Ìl�ƃR�~���j�P�[�V�������Ƃ��ÄA�����N�����Ă����̂��ɂ‚��Čo�c�҂Ɍ������^���邱�Ƃ��Ȃ��悤�ɂ��܂��B +- �h�q�I���–����I�Ɍ��ς����A�X�P�W���[���𗧂Ă邱�Ƃ��w�ÑA�N���X�P�W���[�������ł��邩�A�ǂ��ɗ����Ă����̂����������悤�ɂ����B +- �K�v�ł����΂������A�������`�[���ƌ������Ƃ��w�� +���Ȃ��������K�v�������ÎI�����܂��B -‚Ù‚Æ‚ñ‚ǂ̃vƒƒOƒ‰ƒ}[‚Í—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Å‚ ‚èA—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Í‘½‚­‚Ì‚±‚Æ‚ð‚µ‚½‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·B‚»‚Ì‚½‚߂ɂÍAŽžŠÔ‚ðŒø‰Ê“I‚ÉŠÇ—‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B–â‘è‚É’g‚©‚­‚È‚èA‚»‚ê‚É[‚­ŠÖ‚í‚邱‚ƂɊ֘A‚µ‚ÄA‚ ‚é’ö“x‚̸_“Iе«‚ª‚ ‚è‚Ü‚·B‘½‚­‚̃vƒƒOƒ‰ƒ}[‚ÍAƒEƒH[ƒ~ƒ“ƒOƒAƒbƒv‚µ‚ÄW’†‚·‚鎞ŠÔ‚ª’·‚­‚Ä“rØ‚ê‚邱‚Ƃ̂Ȃ¢ŽžŠÔ‚ª‚ ‚ê‚ÎA”Þ‚ç‚ªÅ‚àŒø‰Ê“I‚Å‚ ‚邯д‚¶‚Ä‚¢‚Ü‚·B‚µ‚©‚µAlX‚Í–°‚ç‚È‚¯‚ê‚΂Ȃ炸A‘¼‚Ì”C–±‚ð‹s‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢B‚»‚ꂼ‚ê‚Ìl‚ÍAlŠÔ‚ÌƒŠƒYƒ€‚ÆŽdŽ–‚ÌƒŠƒYƒ€‚Ì—¼•û‚ð–ž‘«‚³‚¹‚é•û–@‚ðŒ©‚Â‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·BŠeƒvƒƒOƒ‰ƒ}[‚ÍAÅ‚àd—v‚ȉï‹c‚ɂ̂ݎQ‰Á‚·‚é“Á’è‚Ì“ú‚ð—\–ñ‚·‚é‚È‚ÇAŒø—¦“I‚Èì‹ÆŠúŠÔ‚ðŠm•Û‚·‚邽‚߂ɕK—v‚Èì‹Æ‚ð‚·‚×‚Äs‚¤•K—v‚ª‚ ‚è‚Ü‚·B +�قƂ��ǂ̃v���O���}�[�͗ǂ��v���O���}�[�ł����A�ǂ��v���O���}�[�͑����̂��Ƃ��������Ǝv���Ă��܂��B���̂��߂ɂÍA���Ԃ����ʓI�ɊǗ������K�v�������܂��B�����ɒg�����Ȃ��A�����É[���ւ��邱�ƂɊ֘A���ÄA�������x�Ì��_�I�����������܂��B�����̃v���O���}�[�ÍA�E�H�[�~���O�A�b�v���ÄW�����鎞�Ԃ������ēr�؂��邱�Ƃ̂Ȃ����Ԃ������ÎA�ނ炪�ł����ʓI�ł����Ɗ����Ă��܂��B�������A�l�X�͖����Ȃ����΂Ȃ炸�A���̔C���ð‹s���Ȃ����΂Ȃ��Ȃ��B���ꂼ���Ìl�ÍA�l�Ԃ̃��Y���Ǝd���̃��Y���̗����𖞑����������@�����‚����K�v�������܂��B�e�v���O���}�[�ÍA�ł��d�v�ȉ��c�ɂ̂ݎQ�����������̓����\�ñ‚·‚��ȂÇA�����I�È��Ɗ��Ԃ��m�ۂ��邽�߂ɕK�v�È��Ƃ����ׂÄs���K�v�������܂��B -Ž„‚ÍŽq‹Ÿ‚ª‚¢‚é‚Ì‚ÅAŽžX”Þ‚ç‚Æˆê‚É–é‚ð‰ß‚²‚µ‚Ä‚¢‚Ü‚·BŽ„‚ɂƂÁ‚ÄÅ‚àŒø‰Ê“I‚ÈƒŠƒYƒ€‚ÍA”ñí‚É’·‚¢ˆê“ú‚ð‰ß‚²‚·‚±‚Ƃł·BƒIƒtƒBƒX‚âƒIƒtƒBƒX‹ß‚­‚ÅQ‚邱‚Æ‚ª‚Å‚«‚Ü‚·iŽ„‚͒ʋ΂©‚ç’ʋ΂܂Œʋ΂µ‚Ä‚¢‚Ü‚·jBQ‚éBŽ„‚Í‚±‚ê‚ÉŠµ‚ê‚Ä‚¢‚Ü‚¹‚ñ‚ªA‚»‚ê‚ÍŽ„‚ª‰ðŒˆ‚Å‚«‚éÅ‘P‚̑˦ˆÄ‚Å‚·B“`õ•a‚Ìꇂ͉ƂɋA‚éB‚ ‚È‚½‚ªŽ©ŽEŽvl‚ðl‚¦‚Ä‚¢‚é‚È‚çA‚ ‚È‚½‚͉ƂɋA‚é‚ׂ«‚Å‚·BŽEl‚ÌŽvl‚ð”•bˆÈãl‚¦‚邯A‹xŒe‚â‰Æ‚É‹A‚é‚ׂ«‚Å‚·Bd“x‚̸_ˆÙíAŒy“x‚Ì‚¤‚•aˆÈŠO‚̸_޾г‚Ì’›Œó‚ðŽ¦‚·ê‡‚ÍA’N‚©‚ð‰Æ‚É”hŒ­‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª’Êí‚Í”æ‚ê‚ÌŒ´ˆö‚ł͂Ȃ¢•û–@‚Å•s³’¼‚Ü‚½‚Í‹\áÔ‚É—U˜f‚³‚ꂽꇂÍA‹xŒe‚ðŽæ‚é•K—v‚ª‚ ‚è‚Ü‚·B”æ˜J‚É‘ÎR‚·‚邽‚߂ɃRƒJƒCƒ“‚Ü‚½‚̓Aƒ“ƒtƒFƒ^ƒ~ƒ“‚ðŽg—p‚µ‚È‚¢‚Å‚­‚¾‚³‚¢BƒJƒtƒFƒCƒ“‚ð——p‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +���͎q���������̂ÅA���X�ނ��ƈê�ɖ����߂����Ă��܂��B���ɂƂ��Äł����ʓI�ȃ��Y���ÍA�����ɒ����������߂������Ƃł��B�I�t�B�X���I�t�B�X�߂��ÅQ�邱�Ƃ��ł��܂��i���͒ʋ΂����ʋ΂܂Œʋ΂��Ă��܂��j�B�Q���B���͂����Ɋ����Ă��܂��ñ‚ªA�����͎��������ł����őP�̑Ë��Ăł��B�`���a�Ìê‡ï¿½Í‰Æ‚É‹A���B���Ȃ������E�v�l���l���Ă����Ȃ��A���Ȃ��͉ƂɋA���ׂ��ł��B�E�l�̎v�l�ð”•b�È��l�����ÆA�x�e���ƂɋA���ׂ��ł��B�d�x�Ì��_�Ù��A�y�x�̂��•a�ȊO�Ì��_�����̒����������ê‡ï¿½ÍA�N�����Ƃɔh�������������B���Ȃ����Ê��͔����̌����ł͂Ȃ����@�ŕs�����܂��͋\�ԂɗU�f���ꂽ�ê‡ï¿½ÍA�x�e�������K�v�������܂��B���J�ɑÎR���邽�߂ɃR�J�C���܂��̓A���t�F�^�~�����g�p���Ȃ��ł��������B�J�t�F�C���ð——p���Ȃ��ł��������B -Next [How to Deal with Difficult People](11-How to Deal with Difficult People.md) +Next [How to Deal with Difficult People](11-How%20to%20Deal%20with%20Difficult%20People.md) diff --git a/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index a33dd4d..d0ab4d0 100644 --- a/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -1,13 +1,13 @@ # How to Tradeoff Quality Against Development Time [//]: # (Version:1.0.0) -ƒ\ƒtƒgƒEƒFƒAŠJ”­‚ÍAƒvƒƒWƒFƒNƒg‚ªs‚¤‚±‚ƂƃvƒƒWƒFƒNƒg‚ðŠ®—¹‚³‚¹‚邱‚Ƃ̊ԂÅí‚ɑ˦‚Å‚·B‚µ‚©‚µAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚âƒrƒWƒlƒX‚ÌŠ´«‚ð‚‚¯‚邿‚¤‚È•û–@‚ŃvƒƒWƒFƒNƒg‚Ì“WŠJ‚ðƒXƒs[ƒhƒAƒbƒv‚·‚邽‚ß‚ÉA•iŽ¿‚ðƒgƒŒ[ƒhƒIƒt‚·‚邿‚¤‚É‹‚ß‚ç‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎAƒ\ƒtƒgƒEƒFƒAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚ÌŠµs‚ª•nŽã‚ÅAƒƒ“ƒeƒiƒ“ƒX‚Ì–â‘肪‘½‚­”­¶‚·‚邿‚¤‚Èì‹Æ‚ð‚·‚é‚æ‚¤‚É‹‚ß‚ç‚ê‚éꇂª‚ ‚è‚Ü‚·B +�\�t�g�E�F�A�J���ÍA�v���W�F�N�g���s�����Ƃƃv���W�F�N�g�����������邱�Ƃ̊ԂÅ��ɑË��ł��B�������A�G���W�j�A�����O���r�W�l�X�̊��������‚����悤�ȕ��@�Ńv���W�F�N�g�̓W�J���X�s�[�h�A�b�v���邽�߂ÉA�i�����g���[�h�I�t�����悤�ɋ��߂����邱�Ƃ������܂��B���Ƃ��ÎA�\�t�g�E�F�A�G���W�j�A�����O�̊��s���n���ÅA�����e�i���X�̖��肪�������������悤�È��Ƃ������悤�ɋ��߂������ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B -‚±‚ꂪ‹N‚«‚½ê‡‚ÍA‚Ü‚¸ƒ`[ƒ€‚É’m‚点A•iŽ¿’ቺ‚̃RƒXƒg‚𖾊m‚Éà–¾‚·‚邱‚Ƃł·BŒ‹‹Ç‚̂Ƃ±‚ëA‚ ‚È‚½‚Ì—‰ð‚Í‚ ‚È‚½‚ÌãŽi‚Ì—‰ð‚æ‚è‚͂邩‚É—Ç‚¢‚Í‚¸‚Å‚·B‰½‚ªŽ¸‚í‚ê‚Ä‚¢‚é‚Ì‚©A‰½‚ª“¾‚ç‚ê‚Ä‚¢‚é‚Ì‚©‚𖾊m‚É‚µAŽŸ‚̃TƒCƒNƒ‹‚ÅŽ¸‚í‚ꂽ’n–Ê‚ð‚ǂ̂悤‚ȃRƒXƒg‚ÅŽæ‚è–ß‚·‚̂łµ‚傤‚©B‚±‚Ì’†‚ÅA—Ç‚¢ƒvƒƒWƒFƒNƒgŒv‰æ‚ª’ñ‹Ÿ‚·‚é‰ÂŽ‹«‚ª–𗧂‚͂¸‚Å‚·B•iŽ¿‚̃gƒŒ[ƒhƒIƒt‚ª•iŽ¿•ÛØ‚Ì“w—͂ɉe‹¿‚ð‹y‚Ú‚·ê‡‚ÍA‚»‚ê‚ðŽw“E‚µ‚Ä‚­‚¾‚³‚¢iãŽi‚Æ•iŽ¿•ÛØ’S“–ŽÒ‚Ì—¼•û‚ÉjB•iŽ¿‚̃gƒŒ[ƒhƒIƒt‚ª•iŽ¿•ÛØŠúŠÔŒã‚É•ñ‚³‚ê‚éƒoƒO‚ð‘‚₷ꇂÍA‚»‚ê‚ðŽw“E‚µ‚Ä‚­‚¾‚³‚¢B +���ꂪ�N�����ê‡ï¿½ÍA�܂��`�[���ɒm�点�A�i���ቺ�̃R�X�g�𖾊m�É������邱�Ƃł��B���ǂ̂Ƃ����A���Ȃ��̗����͂��Ȃ��Ì��i�̗��������͂邩�ɗǂ��͂��ł��B�����������Ă����̂��A�����������Ă����̂��𖾊m�ɂ��A���̃T�C�N���Ŏ����ꂽ�n�ʂ��ǂ̂悤�ȃR�X�g�Ŏ����߂��̂ł��傤���B���̒��ÅA�ǂ��v���W�F�N�g�v�悪�ñ‹Ÿ‚����Ž������𗧂‚͂��ł��B�i���̃g���[�h�I�t���iï¿½ï¿½ï¿½ÛØ‚Ì“w�͂ɉe�����y�ڂ��ê‡ï¿½ÍA�������w�E�����������i���i�ƕiï¿½ï¿½ï¿½ÛØ’S���҂̗����Éj�B�i���̃g���[�h�I�t���iï¿½ï¿½ï¿½ÛØŠï¿½ï¿½ÔŒï¿½ï¿½É•ñ‚������o�O�ð‘‚₷�ê‡ï¿½ÍA�������w�E�����������B -”Þ—‚ª‚Ü‚¾Žå’£‚µ‚Ä‚¢‚é‚È‚çAŽŸ‚̃TƒCƒNƒ‹‚Å‘‚«’¼‚µ‚â‰ü‘P‚ðŒv‰æ‚·‚邱‚Æ‚ª‚Å‚«‚é“Á’è‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚É•sŽ©—R‚³‚𕪗£‚µ‚悤‚Æ‚·‚é‚ׂ«‚Å‚·B‚±‚ê‚ð‚ ‚È‚½‚̃`[ƒ€‚Éà–¾‚µAŒv‰æ‚𗧂Ă邱‚Æ‚ª‚Å‚«‚Ü‚·B +�Þ����܂��咣���Ă����Ȃ��A���̃T�C�N���Å������������P���v�悷�邱�Ƃ��ł��������̃R���|�[�l���g�ɕs���R���𕪗����悤�Ƃ����ׂ��ł��B���������Ȃ��̃`�[���É������A�v���𗧂Ă邱�Ƃ��ł��܂��B -Slashdot‚ÌNinjaProgrammer‚ª‚±‚Ì•ó΂𑗂Á‚½F +Slashdot��NinjaProgrammer�����̕��΂𑗂����F ->—D‚ꂽ݌v‚ÍA•nŽã‚ȃR[ƒhŽÀ‘•‚ɑ΂µ‚ĉñ•œ‚·‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢BƒR[ƒh‘S‘̂ŗÇD‚ȃCƒ“ƒ^ƒtƒF[ƒX‚Æ’ŠÛŠT”O‚ª‘¶Ý‚·‚éê‡AÅI“I‚È‘‚«Š·‚¦‚͂͂邩‚É–³’ɂɂȂè‚Ü‚·BC³‚ª“‚¢–¾Šm‚ȃR[ƒh‚ð‘‚­‚Ì‚ª“‚¢ê‡‚ÍA‚±‚ê‚ðˆø‚«‹N‚±‚µ‚Ä‚¢‚éƒRƒAƒfƒUƒCƒ“‚ɉ½‚ª–â‘è‚Ȃ̂©‚ðŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B +>�D�ꂽ�݌v�ÍA�n���ȃR�[�h�����ɑ΂��ĉñ•œ‚��邱�Ƃ��Y���Ȃ��ł��������B�R�[�h�S�̂ŗÇD�ȃC���^�t�F�[�X�ƒ��ۊT�O�����݂����ê‡ï¿½A�ÅI�I�È��������͂͂邩�ɖ��ɂɂȂ��܂��B�C����������m�ȃR�[�h�������̂�����ê‡ï¿½ÍA�����������N���������R�A�f�U�C���ɉ��������Ȃ̂����������Ă��������B -Next [How to Manage Software Dependence](02-How to Manage Software System Dependence.md) +Next [How to Manage Software Dependence](02-How%20to%20Manage%20Software%20System%20Dependence.md) diff --git a/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index e46fc50..45baf89 100644 --- a/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -1,13 +1,13 @@ # How to Manage Software System Dependence [//]: # (Version:1.0.0) -Œ»‘ã‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ÍA‚ ‚È‚½‚̃Rƒ“ƒgƒ[ƒ‹‰º‚É’¼Ú‘¶Ý‚µ‚È‚¢‚©‚à‚µ‚ê‚È‚¢‘½‚­‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚Ɉˑ¶‚·‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É‚æ‚èAƒVƒiƒW[‚ÆÄ—˜—p‚É‚æ‚è¶ŽY«‚ªŒüサ‚Ü‚·B‚µ‚©‚µAŠeƒRƒ“ƒ|[ƒlƒ“ƒg‚ɂ͂¢‚­‚‚©‚Ì–â‘肪‚ ‚è‚Ü‚·B +�����̃\�t�g�E�F�A�V�X�e���ÍA���Ȃ��̃R���g���[�����ɒ��ڑ��݂��Ȃ����������Ȃ������̃R���|�[�l���g�Ɉˑ������X���������܂��B�����ɂ����A�V�i�W�[�ÆÄ—��p�ɂ��è¶ï¿½Y�������サ�܂��B�������A�e�R���|�[�l���g�ɂ͂����‚��̖��肪�����܂��B -- ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃oƒO‚ð‚ǂ̂悤‚ÉC³‚µ‚Ü‚·‚©H -- ƒRƒ“ƒ|[ƒlƒ“ƒg‚ª“Á’è‚̃n[ƒhƒEƒFƒA‚Ü‚½‚̓\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ɧŒÀ‚µ‚Ä‚¢‚Ü‚·‚©H -- ƒRƒ“ƒ|[ƒlƒ“ƒg‚ªŠ®‘S‚ÉŽ¸”s‚µ‚½‚ç‚Ç‚¤‚µ‚Ü‚·‚©H +- �R���|�[�l���g�̃o�O���ǂ̂悤�ÉC�����܂����H +- �R���|�[�l���g�������̃n�[�h�E�F�A�܂��̓\�t�g�E�F�A�V�X�e���É������Ă��܂����H +- �R���|�[�l���g�����S�Ɏ��s�������ǂ����܂����H -ƒRƒ“ƒ|[ƒlƒ“ƒg‚ª‰½‚ç‚©‚Ì•û–@‚ŃJƒvƒZƒ‹‰»‚³‚êAƒRƒ“ƒ|[ƒlƒ“ƒg‚ª•ª—£‚³‚êAƒXƒƒbƒvƒAƒEƒg‚Å‚«‚邿‚¤‚É‚·‚邱‚Æ‚ªí‚ɃxƒXƒg‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg‚ªŠ®‘S‚É‹@”\‚µ‚È‚¢‚Æ”»–¾‚µ‚½ê‡‚ÍA•ʂ̃Rƒ“ƒ|[ƒlƒ“ƒg‚ðŽè‚É“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA“ÆŽ©‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚ð쬂·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒJƒvƒZƒ‹‰»‚͈ÚA«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªAˆÚA‚ª—eˆÕ‚ɂȂè‚Ü‚·‚ªA‚±‚ê‚͂قړ¯‚¶‚Å‚·B +�R���|�[�l���g�����炩�̕��@�ŃJ�v�Z���������A�R���|�[�l���g�����������A�X���b�v�A�E�g�ł����悤�ɂ��邱�Ƃ����Ƀx�X�g�ł��B�R���|�[�l���g�����S�ɋ@�\���Ȃ��Ɣ��������ê‡ï¿½ÍA�ʂ̃R���|�[�l���g�����ɓ����邱�Ƃ��ł��܂����A�Ǝ��̃R���|�[�l���g���ì¬ï¿½ï¿½ï¿½ï¿½ï¿½K�v�������܂��B�J�v�Z�����͈ÚA���ł͂����܂��ñ‚ªA�ÚA���e�ՂɂȂ��܂����A�����͂قړ����ł��B -ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃\[ƒXƒR[ƒh‚ðŽ‚Â‚±‚Æ‚ÍAƒŠƒXƒN‚ð4”{‚ÉŒ¸­‚³‚¹‚Ü‚·Bƒ\[ƒXƒR[ƒh‚ðŽg—p‚·‚邯A‚æ‚èŠÈ’P‚É•]‰¿‚µAŠÈ’P‚ɃfƒoƒbƒO‚µA‰ñ”ðô‚ðŒ©‚Â‚¯‚â‚·‚­‚È‚èAC³‚ðŠÈ’P‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·BC³ƒvƒƒOƒ‰ƒ€‚ð쬂·‚éꇂÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚ÌŠ—LŽÒ‚ÉC³ƒvƒƒOƒ‰ƒ€‚ð“n‚µAC³ƒvƒƒOƒ‰ƒ€‚ðŒöŽ®ƒŠƒŠ[ƒX‚É‘g‚Ýž‚Þ•K—v‚ª‚ ‚è‚Ü‚·B‚»‚êˆÈŠO‚ÌꇂÍA”ñŒöŽ®‚̃o[ƒWƒ‡ƒ“‚ðˆÛŽ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�R���|�[�l���g�̃\�[�X�R�[�h�����‚��ƂÍA���X�N��4�{�Ɍ��������܂��B�\�[�X�R�[�h���g�p�����ÆA�����ȒP�ɕ]�����A�ȒP�Ƀf�o�b�O���A�����������‚��₷���Ȃ��A�C�����ȒP�És�����Ƃ��ł��܂��B�C���v���O�������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ê‡ï¿½ÍA�R���|�[�l���g�Ì��L�҂ÉC���v���O�������n���A�C���v���O���������������[�X�ɑg�Ý��ޕK�v�������܂��B�����ȊO�Ìê‡ï¿½ÍA�������̃o�[�W�������ێ������K�v�������܂��B -Next [How to Decide if Software is Too Immature](03-How to Decide if Software is Too Immature.md) +Next [How to Decide if Software is Too Immature](03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) diff --git a/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index 18512b4..017b779 100644 --- a/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -1,18 +1,18 @@ # How to Decide if Software is Too Immature [//]: # (Version:1.0.0) -‘¼‚Ìl‚ª‘‚¢‚½ƒ\ƒtƒgƒEƒFƒA‚ðŽg—p‚·‚邱‚Æ‚ÍAŒ˜˜S‚ȃVƒXƒeƒ€‚ðv‘¬‚É\’z‚·‚éÅ‚àŒø‰Ê“I‚È•û–@‚Ì1‚‚ł·B‚»‚ê‚Í—Ž’_‚·‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚»‚ê‚É”º‚¤ƒŠƒXƒN‚ðŒŸ“¢‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBÅ‚à‘å‚«‚ÈƒŠƒXƒN‚Ì1‚‚ÍAƒ\ƒtƒgƒEƒFƒA‚ªŽg—p‰Â”\‚È»•i‚ɬn‚·‚é‘O‚ÉA‚µ‚΂µ‚΃\ƒtƒgƒEƒFƒA‚ÉŠÖ˜A‚µ‚Ä‚¢‚éAƒoƒO‚Æ•sŠ®‘S‚È“®ì‚ÌŠúŠÔ‚Å‚·Bƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚Ƃ̓‡‚ðŒŸ“¢‚·‚é‘O‚ÉAŽÐ“à‚Å쬂³‚ꂽ‚à‚̂ł ‚낤‚Æ‘æŽOŽÒ‚É‚æ‚Á‚Ä쬂³‚ꂽ‚à‚̂ł ‚낤‚ÆAŽÀÛ‚ÉŽg—p‚·‚é‚É‚Í\•ª‚ɬn‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŒŸ“¢‚·‚邱‚Æ‚ª”ñí‚Éd—v‚Å‚·B‚±‚±‚Å‚ ‚È‚½Ž©g‚Éq‚Ë‚é‚ׂ«10‚ÌŽ¿–₪‚ ‚è‚Ü‚·F +���Ìl���������\�t�g�E�F�A���g�p���邱�ƂÍA���S�ȃV�X�e�����v���É\�z�����ł����ʓI�ȕ��@��1�‚ł��B�����͗��_���ׂ��ł͂����܂��ñ‚ªA�����ɔ������X�N���������Ȃ����΂Ȃ��܂����B�ł��傫�ȃ��X�N��1�‚ÍA�\�t�g�E�F�A���g�p�”\�È��i�É��n�����O�ÉA���΂��΃\�t�g�E�F�A�Ɋ֘A�������A�o�O�ƕs���S�ȓ����̊��Ԃł��B�\�t�g�E�F�A�V�X�e���Ƃ̓��������������O�ÉA���Åì¬ï¿½ï¿½ï¿½ê‚½ï¿½ï¿½ï¿½Ì‚ł��낤�Ƒ��O�҂ɂ����Äì¬ï¿½ï¿½ï¿½ê‚½ï¿½ï¿½ï¿½Ì‚ł��낤�ÆA���ۂɎg�p�����ɂÍ\���É��n���Ă��邩�ǂ������������邱�Ƃ������Éd�v�ł��B�����ł��Ȃ����g�Éq�˂��ׂ�10�̎��₪�����܂��F -1.ö‹C‚Å‚·‚©H i–ñ‘©‚Í”ñí‚É–¢¬n‚Å‚·jB -2.ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚·‚é’mޝ‚Ì‚ ‚éƒAƒNƒZƒX‰Â”\‚È–{‘Ì‚ª‚ ‚è‚Ü‚·‚©H -3.‚ ‚È‚½‚Íʼn‚̃†[ƒU[‚Å‚·‚©H -4.Œp‘±‚É‹­‚¢ƒCƒ“ƒZƒ“ƒeƒBƒu‚Í‚ ‚è‚Ü‚·‚©H -5.ƒƒ“ƒeƒiƒ“ƒX‚É“w—Í‚µ‚Ä‚¢‚Ü‚µ‚½‚©H -6.‚»‚ê‚ÍŒ»Ý‚̃ƒ“ƒeƒi‚Ì•ö‰ó‚©‚ç¶‚«Žc‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H -7.­‚È‚­‚Æ‚à”¼•ª‚Ì–¡•t‚¯‚Ì‘ã‘Ö•i‚ª‚ ‚è‚Ü‚·‚©H -‚ ‚È‚½‚Ì•”‘°‚â‰ïŽÐ‚É‚»‚ê‚Í’m‚ç‚ê‚Ä‚¢‚Ü‚·‚©H -‚ ‚È‚½‚Ì•”‘°‚â‰ïŽÐ‚ɂ͖]‚Ü‚µ‚¢‚̂ł·‚©H -10.‚ ‚È‚½‚ªˆ«‚¢ê‡‚Å‚à‚»‚ê‚ÉŽæ‚è‘g‚ÞlX‚ðŒÙ‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·‚©H +1.���C�ł����H �i�ñ‘©‚͔����ɖ����n�ł��j�B +2.�\�t�g�E�F�A�Ɋւ����m���̂����A�N�Z�X�”\�Ȗ{�̂������܂����H +3.���Ȃ��ÍÅ��̃��[�U�[�ł����H +4.�p���ɋ����C���Z���e�B�u�͂����܂����H +5.�����e�i���X�ɓw�͂��Ă��܂������H +6.�����͌��݂̃����e�i�̕��󂩂ç¶ï¿½ï¿½ï¿½c�邱�Ƃ��ł��܂����H +7.���Ȃ��Ƃ������̖��t���̑��֕i�������܂����H +���Ȃ��̕��������Ђɂ����͒m�����Ă��܂����H +���Ȃ��̕��������Ђɂ͖]�܂����̂ł����H +10.���Ȃ��������ê‡ï¿½Å‚������Ɏ����g�Þl�X���ق����Ƃ��ł��܂����H -‚±‚ê‚ç‚̊𭂵l—¶‚·‚ê‚ÎA‹N‹Æ‰Æ‚ÌƒŠƒXƒN‚ð팸‚·‚邽‚ß‚Ì\•ª‚ÉŠm—§‚³‚ꂽƒtƒŠ[ƒ\ƒtƒgƒEƒFƒA‚ƃI[ƒvƒ“ƒ\[ƒXƒ\ƒtƒgƒEƒFƒA‚̑傫‚ȉ¿’l‚ªØ–¾‚³‚ê‚Ü‚·B +�������̊î€ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½l�������ÎA�N�ƉƂ̃��X�N���팸���邽�߂Ì\���Ɋm�����ꂽ�t���[�\�t�g�E�F�A�ƃI�[�v���\�[�X�\�t�g�E�F�A�̑傫�ȉ��l���ؖ������܂��B -Next [How to Make a Buy vs. Build Decision](04-How to Make a Buy vs Build Decision.md) \ No newline at end of file +Next [How to Make a Buy vs. Build Decision](04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index 7bfd78f..8a381f2 100644 --- a/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -1,16 +1,16 @@ # How to Make a Buy vs. Build Decision [//]: # (Version:1.0.0) -ƒ\ƒtƒgƒEƒFƒA‚ðŽg‚Á‚ĉ½‚©‚ð’B¬‚µ‚悤‚Æ‚µ‚Ä‚¢‚é‹N‹Æ‰Æ‚ÌŠé‹Æ‚âƒvƒƒWƒFƒNƒg‚ÍAí‚Éuw“üv‘ÎuŒˆ’èv‚ÌŒˆ’è‚ð‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃tƒŒ[ƒY‚̃^[ƒ“‚ÍA2‚‚̓_‚Å•sK‚Å‚ ‚éBƒI[ƒvƒ“ƒ\[ƒX‚ÆA•K‚¸‚µ‚à*”ƒ‚Á‚Ä‚¢‚È‚¢ƒtƒŠ[ƒ\ƒtƒgƒEƒFƒA‚𖳎‹‚µ‚Ä‚¢‚邿‚¤‚¾B‚³‚ç‚Éd—v‚Ȃ̂ÍA“‡ƒRƒXƒg‚ðl—¶‚·‚é•K—v‚ª‚ ‚邽‚ßA‚±‚±‚Ŏ擾‚µ‚Ä“‡‚·‚é‚©A‚±‚±‚Å\’z‚µ‚ÄŒˆ’è‚·‚é‚©‚𓇂·‚邱‚Ƃł·B‚±‚ê‚É‚ÍAƒrƒWƒlƒXAŠÇ—AƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚ɸ’Ê‚µ‚½lÞ‚ª•K—v‚Å‚·B +�\�t�g�E�F�A���g���ĉ������B�����悤�Ƃ��Ă����N�ƉƂ̊��Ƃ��v���W�F�N�g�ÍA���Éu�w���v�Îu�����v�̌��������Ȃ����΂Ȃ��܂����B���̃t���[�Y�̃^�[���ÍA2�‚̓_�ŕs�K�ł����B�I�[�v���\�[�X�ÆA�K������*�����Ă��Ȃ��t���[�\�t�g�E�F�A�𖳎����Ă����悤���B�����Éd�v�Ȃ̂ÍA�����R�X�g���l�������K�v�����邽�ßA�����Ŏ擾���ē������邩�A�����Å\�z���Č��肷�邩�ð“����邱�Ƃł��B�����ɂÍA�r�W�l�X�A�Ǘ��A�G���W�j�A�����O�É��ʂ����l�ނ��K�v�ł��B -- ‚ ‚È‚½‚̃j[ƒY‚ÍA‚»‚ꂪ݌v‚³‚ꂽ‚à‚̂Ƃǂꂭ‚ç‚¢‚æ‚­‡‚Á‚Ä‚¢‚Ü‚·‚©H -- ‚ ‚È‚½‚ªw“ü‚·‚é‚à‚̂̂¤‚¿A‚ǂ̕”•ª‚ª•K—v‚Å‚·‚©H -- “‡‚ð•]‰¿‚·‚éƒRƒXƒg‚Í‚¢‚­‚ç‚Å‚·‚©H -- “‡‚̃RƒXƒg‚Í‚¢‚­‚ç‚Å‚·‚©H -- w“ü‚Í’·Šú“I‚Ȉێ”ï‚𑌸‚³‚¹‚邾‚낤‚©H -- ‚»‚ê‚ð\’z‚·‚邱‚Æ‚ÅA‚ ‚È‚½‚ª–]‚ñ‚Å‚¢‚È‚¢ƒrƒWƒlƒXƒ|ƒWƒVƒ‡ƒ“‚É‚ ‚È‚½‚ð’u‚­‚±‚Ƃ͂ł«‚Ü‚·‚©H +- ���Ȃ��̃j�[�Y�ÍA���ꂪ�݌v���ꂽ���̂Ƃǂꂭ�炢�悭�����Ă��܂����H +- ���Ȃ����w���������̂̂����A�ǂ̕������K�v�ł����H +- �������]�������R�X�g�͂������ł����H +- �����̃R�X�g�͂������ł����H +- �w���͒����I�Ȉێ����ð‘Œï¿½ï¿½ï¿½ï¿½ï¿½ï¿½é‚¾ï¿½ë‚¤ï¿½ï¿½ï¿½H +- �������\�z���邱�ƂÅA���Ȃ����]���ł��Ȃ��r�W�l�X�|�W�V�����ɂ��Ȃ����u�����Ƃ͂ł��܂����H -‚ ‚È‚½‚ÍA‘¼‚̃rƒWƒlƒX‘S‘̂̊î‘b‚ƂȂé‚قǑ傫‚È‚à‚Ì‚ð\’z‚·‚é‘O‚ÉA“ñ“xl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚̂悤‚ȃAƒCƒfƒA‚ÍA‚ ‚È‚½‚̃`[ƒ€‚ÉvŒ£‚·‚邱‚Æ‚ª‚½‚­‚³‚ñ‚ ‚é–¾‚é‚­ŠyŠÏ“I‚ÈlX‚É‚æ‚Á‚Ä’ñˆÄ‚³‚ê‚邱‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B”Þ‚ç‚̃AƒCƒfƒA‚ª–£—Í“I‚Å‚ ‚ê‚ÎAƒrƒWƒlƒXƒvƒ‰ƒ“‚ð•ÏX‚µ‚½‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBˆÓޝ‚ª‚È‚­‚Ä‚àŽ©•ª‚̃rƒWƒlƒX‚æ‚è‚à‘å‚«‚ȃ\ƒŠƒ…[ƒVƒ‡ƒ“‚É“ŠŽ‘‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +���Ȃ��ÍA���̃r�W�l�X�S�̂̊��b�ƂȂ��قǑ傫�Ȃ��̂��\�z�����O�ÉA���x�l���Ȃ����΂Ȃ��܂����B���̂悤�ȃA�C�f�A�ÍA���Ȃ��̃`�[���Év�����邱�Ƃ��������ñ‚ ‚閾�邭�y�ϓI�Èl�X�ɂ����Ē��Ă����邱�Ƃ��悭�����܂��B�ނ��̃A�C�f�A�����͓I�ł����ÎA�r�W�l�X�v�������ÏX���������������܂����B�ӎ����Ȃ��Ă������̃r�W�l�X�������傫�ȃ\�����[�V�����ɓ������Ȃ��ł��������B -‚±‚ê‚ç‚ÌŽ¿–â‚ðŒŸ“¢‚µ‚½ŒãA‚¨‚»‚ç‚­Œš’z—p‚Æw“ü—p‚Ì2‚‚̃vƒƒWƒFƒNƒgŒv‰æˆÄ‚ð€”õ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É‚æ‚èA“‡ƒRƒXƒg‚ðl—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½A—¼•û‚̃\ƒŠƒ…[ƒVƒ‡ƒ“‚Ì’·Šú“I‚ȃƒ“ƒeƒiƒ“ƒXƒRƒXƒg‚àl—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B“‡ƒRƒXƒg‚ðŒ©Ï‚à‚é‚É‚ÍAƒ\ƒtƒgƒEƒFƒA‚ðw“ü‚·‚é‘O‚ÉŠ®‘S‚È•]‰¿‚ðs‚¤•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ª‚»‚ê‚ð•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ê‡A‚ ‚È‚½‚Í‚»‚ê‚ðw“ü‚·‚éÛ‚É•s‡—‚ÈƒŠƒXƒN‚ð‘z’肵A‚»‚Ì“Á’è‚Ì»•i‚ðw“ü‚·‚邱‚Æ‚ðŒˆ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·Bl—¶’†‚Ìw“üŒˆ’肪‚¢‚­‚‚©‚ ‚éê‡A‚»‚ꂼ‚ê‚ð•]‰¿‚·‚邽‚߂ɂ¢‚­‚‚©‚̃Gƒlƒ‹ƒM[‚ð”ï‚â‚·•K—v‚ª‚ ‚è‚Ü‚·B +�������̎����������������A�����炭���z�p�Æw���p��2�‚̃v���W�F�N�g�v�������������K�v�������܂��B�����ɂ����A�����R�X�g���l�������K�v�������܂��B�܂��A�����̃\�����[�V�����̒����I�ȃ����e�i���X�R�X�g���l�������K�v�������܂��B�����R�X�g�����ς����ɂÍA�\�t�g�E�F�A���w�������O�Ɋ��S�ȕ]�����s���K�v�������܂��B���Ȃ����������]�����邱�Ƃ��ł��Ȃ��ê‡ï¿½A���Ȃ��͂������w�������ۂɕs�����ȃ��X�N���z�肵�A���̓����Ì��i���w�����邱�Ƃ����肷���K�v�������܂��B�l�����Ìw�����肪�����‚������ê‡ï¿½A���ꂼ�����]�����邽�߂ɂ����‚��̃G�l���M�[�����₷�K�v�������܂��B -Next [How to Grow Professionally](05-How to Grow Professionally.md) +Next [How to Grow Professionally](05-How%20to%20Grow%20Professionally.md) diff --git a/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md b/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md index f3ab647..23cea99 100644 --- a/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -1,11 +1,11 @@ # How to Grow Professionally [//]: # (Version:1.0.0) -‚ ‚È‚½‚ÌŒ ŒÀ‚ð’´‚¦‚½Ó”C‚𕉂¢‚Ü‚·B ‚ ‚È‚½‚ª–]‚Þ–ðŠ„‚ð‰Ê‚½‚µ‚Ä‚­‚¾‚³‚¢B ‘å‹K–͂ȑgD‚̬Œ÷‚Ö‚ÌlX‚ÌvŒ£A‚»‚µ‚Ä‚ ‚È‚½‚ªŒÂl“I‚ɖ𗧂‚à‚̂ւ̊´ŽÓ‚ð•\–¾‚µ‚Ä‚­‚¾‚³‚¢B +���Ȃ��̌����𒴂����ӔC�𕉂��܂��B ���Ȃ����]�ޖ������ʂ����Ă��������B ���K�͂ȑg�D�Ì����ւÌl�X�Ìv���A�����Ă��Ȃ����Âl�I�ɖ𗧂‚��̂ւ̊��ӂ��\�������������B -‚ ‚È‚½‚ªƒ`[ƒ€ƒŠ[ƒ_[‚ɂȂ肽‚¢‚È‚çAƒRƒ“ƒZƒ“ƒTƒX‚ÌŒ`¬‚𑣂·B ƒ}ƒl[ƒWƒƒ[‚ɂȂ肽‚¢ê‡‚ÍAƒXƒPƒWƒ…[ƒ‹‚ð’S“–‚µ‚Ä‚­‚¾‚³‚¢B ƒŠ[ƒ_[‚âƒ}ƒl[ƒWƒƒ[‚ƈê‚ÉŽdŽ–‚ð‚µ‚Ä‚¢‚éŠÔ‚ÍA’Ê킱‚ê‚ð‰õ“K‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚É‚æ‚èAƒŠ[ƒ_[‚âƒ}ƒl[ƒWƒƒ[‚ª‚æ‚è‘å‚«‚ÈÓ”C‚𕉂¤‚±‚ƂɂȂè‚Ü‚·B ‚»‚ê‚ªŽŽ‚µ‚·‚¬‚é‚È‚çAˆê“x‚É­‚µ‚µ‚Ä‚­‚¾‚³‚¢B +���Ȃ����`�[�����[�_�[�ɂȂ肽���Ȃ��A�R���Z���T�X�̌`���𑣂��B �}�l�[�W���[�ɂȂ肽���ê‡ï¿½ÍA�X�P�W���[�����S�������������B ���[�_�[���}�l�[�W���[�ƈê�Ɏd�������Ă����ԂÍA�Ê킱�������K�És�����Ƃ��ł��܂��B�����ɂ����A���[�_�[���}�l�[�W���[�������傫�ÈÓ”C�𕉂����ƂɂȂ��܂��B ���ꂪ�����������Ȃ��A���x�É��������������B -‚ ‚È‚½Ž©g‚ð•]‰¿‚µ‚Ä‚­‚¾‚³‚¢B ‚ ‚È‚½‚ª‚æ‚è—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂȂ肽‚¢‚È‚çA‚ ‚È‚½‚ª‚ǂ̂悤‚É‚»‚ê‚ç‚̂悤‚ɂȂ邱‚Æ‚ª‚Å‚«‚é‚©ÜŽ^‚·‚él‚Éq‚˂Ȃ³‚¢B ãŽi‚É•·‚­‚±‚Æ‚à‚Å‚«‚Ü‚·BãŽi‚ɂ͒m‚Á‚Ä‚¢‚Ü‚·‚ªA‚ ‚È‚½‚̃LƒƒƒŠƒA‚ɑ傫‚ȉe‹¿‚ð—^‚¦‚Ü‚·B +���Ȃ����g���]�������������B ���Ȃ��������ǂ��v���O���}�ɂȂ肽���Ȃ��A���Ȃ����ǂ̂悤�ɂ������̂悤�ɂȂ邱�Ƃ��ł��邩�܎^�����l�Éq�˂Ȃ����B ���i�ɕ������Ƃ��ł��܂��B���i�ɂ͒m���Ă��܂����A���Ȃ��̃L�����A�ɑ傫�ȉe�����^���܂��B -V‚µ‚¢ƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðŠw‚Ô‚±‚Ƃ̂悤‚ÈA±×‚È‹Zp“I‚È‚à‚̂łàA‚ ‚È‚½‚ÌŽdŽ–‚É‚»‚ê‚ç‚𓇂·‚邱‚Ƃɂæ‚Á‚ÄA‚¤‚Ü‚­‘‚­‚悤‚ȃn[ƒh‚ȎЉï“I‚È‚à‚̂łàAV‚µ‚¢ƒXƒLƒ‹‚ðŠw‚Ô•û–@‚ðŒv‰æ‚·‚éB +�V�����\�t�g�E�F�A�V�X�e�����w�Ԃ��Ƃ̂悤�ÈA���ׂȋZ�p�I�Ȃ��̂ł��A���Ȃ��̎d���ɂ������ð“����邱�Ƃɂ����ÄA���܂������悤�ȃn�[�h�ȎЉ��I�Ȃ��̂ł��A�V�����X�L�����w�ԕ��@���v�悷���B -Next [How to Evaluate Interviewees](06-How to Evaluate Interviewees.md) \ No newline at end of file +Next [How to Evaluate Interviewees](06-How%20to%20Evaluate%20Interviewees.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index 766438e..6e17415 100644 --- a/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -1,15 +1,15 @@ # How to Evaluate Interviewees [//]: # (Version:1.0.0) -öÝ“I‚È]‹Æˆõ‚ð•]‰¿‚·‚邱‚Æ‚ÍA‚»‚ê‚ɂӂ³‚킵‚¢ƒGƒlƒ‹ƒM[‚ª—^‚¦‚ç‚ê‚Ä‚¢‚È‚¢Bˆ«‚¢Œ‹¥‚̂悤‚Ȉ«‚¢ŒÙ—p‚͂Ђǂ¢‚Å‚·B‚Ý‚ñ‚Ȃ̃Gƒlƒ‹ƒM[‚Ì‚©‚È‚è‚Ì•”•ª‚Í•åW‚É”ï‚₳‚ê‚é‚ׂ«‚Å‚·‚ªA‚±‚ê‚͂߂Á‚½‚És‚í‚ê‚Ü‚¹‚ñB +���ݓI�È]�ƈ����]�����邱�ƂÍA�����ɂӂ��킵���G�l���M�[���^�������Ă��Ȃ��B���������̂悤�Ȉ����ٗp�͂Ђǂ��ł��B�݂��Ȃ̃G�l���M�[�̂��Ȃ��̕����͕��W�ɔ��₳�����ׂ��ł����A�����͂߂����És�����܂����B -ƒCƒ“ƒ^ƒrƒ…[ƒXƒ^ƒCƒ‹‚Í‚³‚Ü‚´‚܂ł·BŒó•âŽÒ‚Ì’†‚ɂ͔ñí‚ɃXƒgƒŒƒX‚ðŠ´‚¶‚邿‚¤‚ÉÝŒv‚³‚ꂽ‰–â‰Æ‚à‚¢‚Ü‚·B‚±‚ê‚̓XƒgƒŒƒX‰º‚ł̃Lƒƒƒ‰ƒNƒ^[‚ÌŒ‡Š×‚âŽã“_‚𖾂炩‚É‚·‚é”ñí‚É‹Md‚È–Ú“I‚ð‰Ê‚½‚µ‚Ü‚·BŒó•âŽÒ‚ÍŽ©•ªŽ©g‚Æ”ä‚ׂăCƒ“ƒ^ƒrƒ…ƒA[‚ɂͳ’¼‚ł͂Ȃ­AŽ©ŒÈ‹\áԂɑ΂·‚élŠÔ‚Ì”\—͂͋Á‚­‚ׂ«‚à‚̂ł·B +�C���^�r���[�X�^�C���͂��܂��܂ł��B�����҂̒��ɂ͔����ɃX�g���X���������悤�ÉÝŒv���ꂽ�����Ƃ����܂��B�����̓X�g���X���ł̃L�����N�^�[�̌��ׂ����_�𖾂炩�ɂ��������ɋM�d�ȖړI���ʂ����܂��B�����҂͎������g�Ɣ��ׂăC���^�r���A�[�ɂÍ����ł͂Ȃ��A���ȋ\�Ԃɑ΂����l�Ԃ̔\�͂͋����ׂ����̂ł��B -‚ ‚È‚½‚Í­‚È‚­‚Æ‚àA2ŽžŠÔ‚Ì‹ZpƒXƒLƒ‹‚ÌŒû“ªŽŽŒ±‚ɑГ–‚·‚é‚à‚Ì‚ðŒó•âŽÒ‚É—^‚¦‚é‚ׂ«‚Å‚·B—ûK‚Å‚ÍAŽ©•ª‚ª’m‚Á‚Ä‚¢‚邱‚Æ‚ð‚·‚Î‚â‚­ƒJƒo[‚µA‹«ŠEü‚ðƒ}[ƒN‚·‚邽‚߂ɒm‚ç‚È‚¢‚à‚Ì‚©‚ç‚·‚Î‚â‚­Žæ‚è–ß‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B–ÊÚŽÒ‚Í‚±‚ê‚ð‘¸d‚·‚é‚Å‚µ‚傤BŽ„‚ÍAƒCƒ“ƒ^ƒrƒ…[‚ÅAŽŽŒ±‚ÌŽ¿‚ÍŠé‹Æ‚ð‘I‚Ô“®‹@‚Ì1‚‚ł ‚邯”‰ñ•·‚¢‚½‚±‚Æ‚ª‚ ‚è‚Ü‚·B‘P—Ç‚Èl‚½‚¿‚ÍA”ނ炪Ōã‚É“­‚¢‚½êŠ‚â”ނ炪s‚Á‚½ŠwZA‚Ü‚½‚Í‘¼‚Ì•s‰ÂŒ‡‚È“Á’¥‚ł͂Ȃ­A”Þ‚ç‚̃XƒLƒ‹‚Ì‚½‚߂Ɍقí‚ꂽ‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·B +���Ȃ��Í��Ȃ��Ƃ��A2���Ԃ̋Z�p�X�L���̌��������ɑ����������̂������҂ɗ^�����ׂ��ł��B���K�łÍA�������m���Ă��邱�Ƃ����΂₭�J�o�[���A���E�����}�[�N���邽�߂ɒm���Ȃ����̂��炷�΂₭�����߂����Ƃ��ł��܂��B�Êڎ҂͂����ð‘¸d�����ł��傤�B���ÍA�C���^�r���[�ÅA�����̎��͊��Ƃ��I�ԓ��@��1�‚ł����Æï¿½ï¿½ñ•·‚������Ƃ������܂��B�P�ǂÈl�����ÍA�ނ炪�Ō��ɓ������êŠï¿½ï¿½ï¿½Þ‚炪�s�����w�Z�A�܂��͑��̕s�Œ��ȓ����ł͂Ȃ��A�ނ��̃X�L���̂��߂Ɍق��ꂽ���Ǝv���Ă��܂��B -‚±‚ê‚ðs‚¤‚É‚ ‚½‚Á‚Ä‚ÍAŽ©•ª‚ª’m‚Á‚Ä‚¢‚邿‚è‚à‚͂邩‚Éd—v‚ÈAŠwK‚·‚é”\—Í‚à•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½A¢“ï‚Èl‚½‚¿‚É‚æ‚Á‚Ä•¥‚í‚ꂽ—LŠQ•¨Ž¿‚Ì—~‹‚ðŠÄŽ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚̓Cƒ“ƒ^ƒrƒ…[‚ÌŒã‚Ńm[ƒg‚ð”äŠr‚·‚邱‚Ƃɂæ‚Á‚Ä‚»‚ê‚ð”Fޝ‚·‚邱‚Æ‚ª‚Å‚«‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒCƒ“ƒ^ƒrƒ…[‚Ì”M‚Å‚»‚ê‚ð”Fޝ‚·‚邱‚Ƃ͢“ï‚Å‚·BÅV‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðã‰ñ‚邿‚è‚àAlX‚ªƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚µ‚ÄlX‚Ƃǂ̂­‚ç‚¢‚¤‚Ü‚­‚â‚Á‚Ä‚¢‚­‚©‚ªd—v‚Å‚·B +�������s���ɂ������ĂÍA�������m���Ă����������͂邩�Éd�v�ÈA�w�K�����\�͂��]�������K�v�������܂��B�܂��A�����Èl�����ɂ����ĕ����ꂽ�L�Q�����̗~�����������K�v�������܂��B���Ȃ��̓C���^�r���[�̌��Ńm�[�g�����r���邱�Ƃɂ����Ă������F�����邱�Ƃ��ł��邩�������܂��ñ‚ªA�C���^�r���[�̔M�ł������F�����邱�ƂÍ����ł��B�ÅV�̃v���O���~���O�������������������A�l�X���R�~���j�P�[�V���������Äl�X�Ƃǂ̂��炢���܂������Ă��������d�v�ł��B -“ǎ҂̓Cƒ“ƒ^ƒrƒ…[‘ÎÛŽÒ‚Ì‚½‚߂ɃeƒCƒNEƒz[ƒ€EƒeƒXƒg‚ðŽg‚Á‚ÄK‰^‚ð‹F‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍAŽ©•ªŽ©g‚ð‚¤‚Ü‚­’ñަ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAŽÀۂɂ̓R[ƒh‰»‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ƒCƒ“ƒ^ƒrƒ…ƒC[‚𖾂炩‚É‚·‚邱‚Æ‚ª‚Å‚«‚邯‚¢‚¤—˜“_‚ª‚ ‚è‚Ü‚·BŽ„‚ÍŒÂl“I‚ɂ͂±‚̃eƒNƒjƒbƒN‚ðŽŽ‚µ‚Ä‚¢‚Ü‚¹‚ñ‚ªA‚»‚ê‚ÍŒ«–¾‚Ȃ悤‚Å‚·B +�ǎ҂̓C���^�r���[�Îێ҂̂��߂Ƀe�C�N�E�z�[���E�e�X�g���g���ÄK�^���F���Ă��܂��B�����ÍA�������g�����܂��ñަ‚��邱�Ƃ��ł��܂����A���ۂɂ̓R�[�h�����邱�Ƃ��ł��Ȃ��C���^�r���C�[�𖾂炩�ɂ��邱�Ƃ��ł����Ƃ������_�������܂��B���͌Âl�I�ɂ͂��̃e�N�j�b�N�������Ă��܂��ñ‚ªA�����͌����Ȃ悤�ł��B -ÅŒã‚ÉAƒCƒ“ƒ^ƒrƒ…[‚͔̔„‚̃vƒƒZƒX‚Å‚à‚ ‚è‚Ü‚·BŒó•âŽÒ‚É‚ ‚È‚½‚̉ïŽÐ‚âƒvƒƒWƒFƒNƒg‚𔄂Á‚Ä‚¢‚é‚Í‚¸‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚̓vƒƒOƒ‰ƒ}‚Ƙb‚µ‚Ä‚¢‚é‚Ì‚ÅA^ŽÀ‚ðF‚¯‚µ‚悤‚Æ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢Bˆ«‚¢‚à‚Ì‚©‚çŽn‚ß‚ÄAŽŸ‚É—Ç‚¢‚à‚̂ŋ­‚­Ždã‚°‚Ä‚­‚¾‚³‚¢B +���ÉA�C���^�r���[�͔̔��̃v���Z�X�ł������܂��B�����҂ɂ��Ȃ��̉��Ђ��v���W�F�N�g�𔄂��Ă����͂��ł��B�������A���Ȃ��̓v���O���}�Ƙb���Ă����̂ÅA�^�����F�Â����悤�Ƃ��Ȃ��ł��������B�������̂����n�߂ÄA���ɗǂ����̂ŋ����d�グ�Ă��������B -Next [How to Know When to Apply Fancy Computer Science](07-How to Know When to Apply Fancy Computer Science.md) +Next [How to Know When to Apply Fancy Computer Science](07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) diff --git a/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index 761a94f..b6bdbb0 100644 --- a/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -1,15 +1,15 @@ # How to Know When to Apply Fancy Computer Science [//]: # (Version:1.0.0) -ƒAƒ‹ƒSƒŠƒYƒ€Aƒf[ƒ^\‘¢A”ŠwA‚»‚Ì‘¼‚̂قƂñ‚ǂ̃vƒƒOƒ‰ƒ}‚ª’m‚Á‚Ä‚¢‚邱‚Ƃ͂قƂñ‚Ç‚ ‚è‚Ü‚¹‚ñ‚ªA‚ ‚Ü‚èŽg‚í‚ê‚Ä‚¢‚È‚¢‚±‚Ƃɂ‚¢‚Ă̒mޝ‚ª‚ ‚è‚Ü‚·BŽÀÛ‚É‚ÍA‚±‚Ì‘f°‚炵‚¢‚à‚̂͂ ‚Ü‚è‚É‚à•¡ŽG‚ňê”Ê“I‚ɂ͕s—v‚Å‚·B‚Ù‚Æ‚ñ‚ǂ̎žŠÔ‚ª”ñŒø—¦“I‚ȃf[ƒ^ƒx[ƒXŒÄ‚Ño‚µ‚ðs‚¤‚̂ɔï‚₳‚ꂽ‚Æ‚«‚É‚ÍAƒAƒ‹ƒSƒŠƒYƒ€‚̉ü‘P‚ɂ͉½‚̈Ӗ¡‚à‚ ‚è‚Ü‚¹‚ñBƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì•sK‚È—Ê‚ÍAƒVƒXƒeƒ€‚ª‚¨ŒÝ‚¢‚ɘb‚ð‚µ‚½‚èA”ñí‚É’Pƒ‚ȃf[ƒ^\‘¢‚ðŽg‚Á‚Ä‚·‚΂炵‚¢ƒ†[ƒU[ƒCƒ“ƒ^[ƒtƒFƒCƒX‚ð\’z‚·‚邱‚Æ‚©‚笂è‚Ü‚·B +�A���S���Y���A�f�[�^�\���A���w�A���̑��̂قƂ��ǂ̃v���O���}���m���Ă��邱�Ƃ͂قƂ��ǂ����܂��ñ‚ªA���܂��g�����Ă��Ȃ����Ƃɂ‚��Ă̒m���������܂��B���ۂɂÍA���̑f���炵�����̂͂��܂��ɂ����G�ň��ʓI�ɂ͕s�v�ł��B�قƂ��ǂ̎��Ԃ��������I�ȃf�[�^�x�[�X�ĂÑo�����s���̂ɔ��₳�ꂽ�Ƃ��ɂÍA�A���S���Y���̉��P�ɂ͉��̈Ӗ��������܂����B�v���O���~���O�̕s�K�ȗʂÍA�V�X�e�������݂��ɘb���������A�����ɒP���ȃf�[�^�\�����g���Ă��΂炵�����[�U�[�C���^�[�t�F�C�X���\�z���邱�Ƃ��ç¬ï¿½ï¿½ï¿½Ü‚��B -‚“x‚È‹Zp‚Í‚¢‚“K؂ȋZp‚Å‚·‚©H‚ ‚È‚½‚ÍA–{•¨‚̃Aƒ‹ƒSƒŠƒYƒ€ˆÈŠO‚̉½‚©‚𓾂邽‚߂ɂ¢‚–{‚ð‰ð“Ç‚·‚ׂ«‚Å‚·‚©H‚±‚ê‚ðs‚¤‚Ì‚ª•Ö—˜‚È‚±‚Æ‚à‚ ‚è‚Ü‚·‚ªATd‚É•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +���x�ȋZ�p�͂��“K�؂ȋZ�p�ł����H���Ȃ��ÍA�{���̃A���S���Y���ȊO�̉����𓾂邽�߂ɂ��–{�����ǂ��ׂ��ł����H�������s���̂��֗��Ȃ��Ƃ������܂����A�T�d�ɕ]�������K�v�������܂��B -öÝ“I‚ȃRƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‹Zp‚Ì3‚‚ÌÅ‚àd—v‚Èl—¶Ž–€‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·B +���ݓI�ȃR���s���[�^�T�C�G���X�Z�p��3�‚Ìł��d�v�Èl�������͎��̂Ƃ����ł��B -- ‘¼‚̃VƒXƒeƒ€‚ɑ΂·‚郊ƒXƒN‚ª’á‚­A•¡ŽG‚³‚ƕێçƒRƒXƒg‚Ì‘S‘Ì“I‚È‘‰Á‚ª­‚È‚¢‚悤‚ÉA\•ª‚ɃJƒvƒZƒ‹‰»‚³‚ê‚Ä‚¢‚Ü‚·‚©H -- —˜‰v‚Í‹ÁˆÙ“I‚Å‚·i—Ⴆ‚ÎA¬n‚µ‚½ƒVƒXƒeƒ€‚Å‚Í2”{AV‚µ‚¢ƒVƒXƒeƒ€‚Å‚Í10”{jB -- ‚»‚ê‚ðŒø‰Ê“I‚ɃeƒXƒg‚µ•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H +- ���̃V�X�e���ɑ΂��郊�X�N���Ⴍ�A���G���ƕێ��R�X�g�̑S�̓I�ȑ��������Ȃ��悤�ÉA�\���ɃJ�v�Z���������Ă��܂����H +- ���v�͋��ٓI�ł��i�Ⴆ�ÎA���n�����V�X�e���ł�2�{�A�V�����V�X�e���ł�10�{�j�B +- ���������ʓI�Ƀe�X�g���]�����邱�Ƃ��ł��܂����H -‚킸‚©‚É•¡ŽG‚ȃAƒ‹ƒSƒŠƒYƒ€‚ðŽg—p‚·‚éŒÇ—§‚µ‚½ƒAƒ‹ƒSƒŠƒYƒ€‚Å‚ÍAƒVƒXƒeƒ€‘S‘̂Ńn[ƒhƒEƒFƒA‚̃RƒXƒg‚ð팸‚µ‚½‚èAƒpƒtƒH[ƒ}ƒ“ƒX‚ð2”{‚É‚‚߂邱‚Æ‚ª‚Å‚«‚ê‚ÎA”ÆßŽÒ‚Í‚»‚ê‚ðl—¶‚µ‚È‚¢‚±‚ƂɂȂè‚Ü‚·B‚»‚̂悤‚ȃAƒvƒ[ƒ`‚ðŽå’£‚·‚錮‚Ì1‚‚ÍA’ñˆÄ‚³‚ꂽ‹Zp‚ª‚¨‚»‚ç‚­\•ª‚ÉŒ¤‹†‚³‚ê‚Ä‚¢‚é‚Ì‚ÅAƒŠƒXƒN‚ªŽÀۂɂ͂©‚È‚è’á‚¢‚±‚Æ‚ðŽ¦‚·‚±‚Ƃł·B—Bˆê‚Ì–â‘è‚Í“‡‚ÌƒŠƒXƒN‚Å‚·B‚±‚±‚ŃvƒƒOƒ‰ƒ}‚ÌŒoŒ±‚Æ”»’f‚ÍA“‡‚ð—eˆÕ‚É‚·‚邽‚߂̔hŽè‚È‹Zp‚Æ‘ŠæŒø‰Ê‚ª‚ ‚è‚Ü‚·B +�킸���ɕ��G�ȃA���S���Y�����g�p�����Ǘ������A���S���Y���łÍA�V�X�e���S�̂Ńn�[�h�E�F�A�̃R�X�g���팸�������A�p�t�H�[�}���X��2�{�É��߂邱�Ƃ��ł����ÎA�ÆßŽÒ‚͂������l�����Ȃ����ƂɂȂ��܂��B���̂悤�ȃA�v���[�`���咣���錮��1�‚ÍA���Ă��ꂽ�Z�p�������炭�\���Ɍ��������Ă����̂ÅA���X�N�����ۂɂ͂��Ȃ��Ⴂ���Ƃ��������Ƃł��B�B���̖����͓����̃��X�N�ł��B�����Ńv���O���}�̌o���Ɣ��f�ÍA�������e�Ղɂ��邽�߂̔h���ȋZ�p�Ƒ������ʂ������܂��B -Next [How to Talk to Non-Engineers](08-How to Talk to Non-Engineers.md) \ No newline at end of file +Next [How to Talk to Non-Engineers](08-How%20to%20Talk%20to%20Non-Engineers.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index a210a4a..dc60bcd 100644 --- a/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -1,15 +1,15 @@ # How to Stay Motivated [//]: # (Version:1.0.0) -ƒvƒƒOƒ‰ƒ}[‚ªA”ü‚µ‚­A—L‰v‚ÈA‚Ü‚½‚Í‹C‚Ì—˜‚¢‚½lH•¨‚ð쬂µ‚½‚¢‚Æ‚¢‚¤—~‹‚É‚æ‚Á‚Ä‚‚¢ˆÓ—~‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ÍA‘f°‚炵‚¢A‹Á‚­‚ׂ«Ž–ŽÀ‚Å‚·B‚±‚Ì—v–]‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚àƒ†ƒjƒo[ƒTƒ‹‚Å‚à‚È‚­AƒvƒƒOƒ‰ƒ}[ŠÔ‚Å”ñí‚É‹­‚­‹¤’Ê‚µ‚Ä‚¢‚邽‚ßA‘¼‚Ì–ðŠ„‚Ìƒƒ“ƒo[‚Ƃ͕ª‚©‚ê‚Ä‚¢‚Ü‚·B +�v���O���}�[���A�������A�L�v�ÈA�܂��͋C�̗������l�H�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Æ‚����~���ɂ����Ä����ӗ~�������Ă��邱�ƂÍA�f���炵���A�����ׂ������ł��B���̗v�]�ÍA�v���O���}�[�ɂƂ��Ă����j�o�[�T���ł��Ȃ��A�v���O���}�[�ԂŔ����ɋ������ʂ��Ă��邽�ßA���̖����̃����o�[�Ƃ͕������Ă��܂��B -‚±‚ê‚ɂ͎À—p“I‚©‚Âd—v‚ÈŒ‹‰Ê‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ªA”ü‚µ‚­‚È‚¢A—L‰v‚ÈA‚Ü‚½‚Í‹C‚Ì—˜‚¢‚½‚à‚̂łȂ¢‚±‚Æ‚ð‚·‚é‚æ‚¤‹‚ß‚ç‚ꂽê‡A”Þ‚ç‚Í’á‚¢Žm‹C‚ðŽ‚Â‚Å‚µ‚傤BX‚¢A‹ð‚©‚ÈA‘Þ‹ü‚È‚à‚Ì‚ð‚â‚Á‚Äì‚邽‚߂ɂ½‚­‚³‚ñ‚Ì‚¨‹à‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µAŒ‹‹Ç‚̂Ƃ±‚ëAŠy‚µ‚݂͉ïŽÐ‚Ì‚½‚ß‚ÉÅ‚à‚¨‹à‚ð‰Ò‚®‚Å‚µ‚傤B +�����ɂ͎��p�I���Âd�v�Ȍ��ʂ������܂��B�v���O���}�[���A�������Ȃ��A�L�v�ÈA�܂��͋C�̗��������̂łȂ����Ƃ������悤���߂��ꂽ�ê‡ï¿½A�ނ��͒Ⴂ�m�C�����‚ł��傤�B�X���A�����ÈA�ދ��Ȃ��̂������Ä��邽�߂ɂ��������̂����������܂��B�������A���ǂ̂Ƃ����A�y���݂͉��Ђ̂��߂Éł��������҂��ł��傤�B -–¾‚ç‚©‚ÉA‚±‚±‚ɂ͂¢‚­‚‚©‚Ì“®‹@‚¯‹Zp‚ª‘g‚Ýž‚܂ꂽ‹ÆŠE‘S‘Ì‚ª‚ ‚è‚Ü‚·BŽ„‚ª“Á’è‚Å‚«‚éƒvƒƒOƒ‰ƒ~ƒ“ƒO“Á—L‚ÌŽ–•¿‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·F +���炩�ÉA�����ɂ͂����‚��̓��@���Z�p���g�Ý��܂ꂽ�ƊE�S�̂������܂��B���������ł����v���O���~���O���L�̎����͎��̂Ƃ����ł��F -- ŽdŽ–‚ÉÅ“K‚ÈŒ¾Œê‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B -- V‚µ‚¢‹ZpAŒ¾ŒêA‹Zp‚ð“K—p‚·‚é‹@‰ï‚ð’T‚µ‚Ü‚·B -- ‚»‚ꂼ‚ê‚̃vƒƒWƒFƒNƒg‚ÅA¬‚³‚¢‚à‚Ì‚ÌA‰½‚©‚ðŠw‚ÑA‹³‚¦‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B +- �d���ÉÅ“K�Ȍ������g�p�����������B +- �V�����Z�p�A�����A�Z�p���K�p�����@�����T���܂��B +- ���ꂼ���̃v���W�F�N�g�ÅA���������̂ÌA�������w�ÑA�������悤�ɂ��Ă��������B -ÅŒã‚ÉA‰Â”\‚Å‚ ‚ê‚ÎAŽ©•ª‚ÌŽdŽ–‚̉e‹¿‚ðAŒÂl“I‚É“®‹@•t‚¯‚ç‚ê‚é‚à‚̂Ƃµ‚Ä‘ª’肵‚Ü‚·B‚½‚Æ‚¦‚ÎAƒoƒO‚ðC³‚·‚邯‚«AŽ„‚ªC³‚µ‚½ƒoƒO‚Ì”‚ðƒJƒEƒ“ƒg‚·‚邱‚Æ‚ÍA‚»‚ꂪ‚Ü‚¾‘¶Ý‚·‚é‚©‚à‚µ‚ê‚È‚¢”‚Ƃ͖³ŠÖŒW‚Å‚ ‚èAŽ„‚̉ïŽÐ‰Â”\‚ÈŒÀ‚謂³‚È•û–@‚Å‚¨‹q—l‚É’ñ‹Ÿ‚µ‚Ü‚·B‚µ‚©‚µA‚»‚ꂼ‚ê‚̃oƒO‚ðK‚¹‚Ȍڋq‚ÉŒ‹‚Ñ•t‚¯‚邱‚Æ‚ÍAŽ„‚ÌŒÂl“I‚È“®‹@‚Å‚·B +���ÉA�”\�ł����ÎA�����̎d���̉e�����A�Âl�I�ɓ��@�t�����������̂Ƃ��đ��肵�܂��B���Ƃ��ÎA�o�O���C�������Ƃ��A�����C�������o�O�Ì����J�E���g���邱�ƂÍA���ꂪ�܂����݂��邩�������Ȃ����Ƃ͖��֌W�ł����A���̉��Љ”\�Ȍ��è¬ï¿½ï¿½ï¿½È•��@�ł��q�l�ɒñ‹Ÿ‚��܂��B�������A���ꂼ���̃o�O���K���Ȍڋq�Ɍ��ѕt���邱�ƂÍA���̌Âl�I�ȓ��@�ł��B -Next [How to be Widely Trusted](02-How to be Widely Trusted.md) +Next [How to be Widely Trusted](02-How%20to%20be%20Widely%20Trusted.md) diff --git a/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index 4bbcf5e..cee6d25 100644 --- a/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -1,7 +1,7 @@ # How to be Widely Trusted [//]: # (Version:1.0.0) -‚ ‚È‚½‚ªM—Š‚³‚ê‚邽‚߂ɂÍAM—Ђł«‚é‚à‚̂łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB ‚ ‚È‚½‚àŒ©‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B ’N‚à‚ ‚È‚½‚ɂ‚¢‚Ä’m‚Á‚Ä‚¢‚È‚¯‚ê‚ÎA‚ ‚È‚½‚É‚ÍM—Š‚Í“ŠŽ‘‚³‚ê‚Ü‚¹‚ñB ‚ ‚È‚½‚̃`[ƒ€ƒƒCƒg‚̂悤‚ÈA‚ ‚È‚½‚ɋ߂¢l‚½‚¿‚ÆA‚±‚ê‚Í–â‘è‚ł͂ ‚è‚Ü‚¹‚ñB ‚ ‚È‚½‚ÍA‚ ‚È‚½‚Ì•”‚âƒ`[ƒ€ŠO‚Ìl‚É•qŠ´‚Å—L‰v‚Å‚ ‚邱‚Ƃɂæ‚Á‚ÄM—Š‚ðŠm—§‚µ‚Ü‚·B ŽžXA’N‚©‚ª‚±‚ÌM—p‚ð——p‚µA•s“–‚ȉ¶Œb‚ð‹‚߂邱‚Æ‚ª‚ ‚è‚Ü‚·B ‚±‚ê‚ð‹°‚ê‚Ă͂¢‚¯‚Ü‚¹‚ñBDˆÓ‚ð‹s‚·‚邽‚߂ɂ ‚È‚½‚ª‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Æ‚ðà–¾‚µ‚Ä‚­‚¾‚³‚¢B +���Ȃ����M�������邽�߂ɂÍA�M���ł������̂łȂ����΂Ȃ��܂����B ���Ȃ����������K�v�������܂��B �N�����Ȃ��ɂ‚��Ēm���Ă��Ȃ����ÎA���Ȃ��ɂÍM���͓��������܂����B ���Ȃ��̃`�[�����C�g�̂悤�ÈA���Ȃ��ɋ߂��l�����ÆA�����͖����ł͂����܂����B ���Ȃ��ÍA���Ȃ��̕������`�[���O�Ìl�ɕq���ŗL�v�ł��邱�Ƃɂ����ÄM�����m�����܂��B ���X�A�N�������ÌM�p�ð——p���A�s���ȉ��b�����߂邱�Ƃ������܂��B �����������Ă͂����܂����B�D�ӂð‹s���邽�߂ɂ��Ȃ������Ȃ����΂Ȃ��Ȃ����Ƃ��������Ă��������B -‚ ‚È‚½‚ª‚µ‚È‚¢‚±‚Æ‚ð’m‚Á‚Ä‚¢‚é‚Ó‚è‚ð‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B ƒ`[ƒ€ƒ[ƒg‚ł͂Ȃ¢l‚½‚¿‚É‚ÍAuŽ„‚Ì“ª‚Ìã‚©‚ç‰E‚É•ª‚©‚ç‚È‚¢v‚Æu‚»‚ê‚ðŒˆ‚ß‚é‚±‚Æ‚ª‚Å‚«‚È‚¢v‚Ƃ̖¾Šm‚È‹æ•Ê‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB +���Ȃ������Ȃ����Ƃ��m���Ă����ӂ������Ȃ��ł��������B �`�[�����[�g�ł͂Ȃ��l�����ɂÍA�u���̓��Ìォ���E�ɕ������Ȃ��v�Æu���������߂邱�Ƃ��ł��Ȃ��v�Ƃ̖��m�ȋ��ʂ����Ȃ����΂Ȃ��Ȃ����������܂����B -Next [How to Tradeoff Time vs. Space](03-How to Tradeoff Time vs Space.md) +Next [How to Tradeoff Time vs. Space](03-How%20to%20Tradeoff%20Time%20vs%20Space.md) diff --git a/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index 08e64fb..ab22183 100644 --- a/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -1,15 +1,15 @@ # How to Tradeoff Time vs. Space [//]: # (Version:1.0.0) -‚ ‚È‚½‚Í‘åŠw‚És‚©‚È‚­‚Ä‚à—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAŠî–{“I‚ÈŒvŽZ•¡ŽG«—˜_‚ð’m‚ç‚È‚­‚Ä‚àA—D‚ꂽ’†ŠÔƒvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚Í 'big O'•\‹L–@‚ð’m‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñ‚ªAŽ„‚ÍŒÂl“I‚É‚ÍA 'ˆê’莞ŠÔ'A 'n log n'‚Æ 'n squared'‚̈Ⴂ‚ð—‰ð‚Å‚«‚È‚¯‚ê‚΂Ȃç‚È‚¢‚ÆŽv‚¢‚Ü‚·B‚±‚Ì’mޝ‚ª‚È‚­‚Ä‚àAŽžŠÔ‚Æ‹óŠÔ‚Ƃ̃gƒŒ[ƒhƒIƒt‚ÌŽd•û‚ð’m‚邱‚Æ‚ª‚Å‚«‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA•sÝ‚Ìê‡A“¯—»‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì‚½‚߂̊mŒÅ‚½‚éŠî”Õ‚Í‚ ‚è‚Ü‚¹‚ñB +���Ȃ��͑��w�És���Ȃ��Ă��ǂ��v���O���}�[�ɂȂ邱�Ƃ��ł��܂����A���{�I�Ȍv�Z���G�����_���m���Ȃ��Ă��A�D�ꂽ���ԃv���O���}�[�ɂȂ邱�Ƃ͂ł��܂����B���Ȃ��� 'big O'�\�L�@���m���K�v�͂����܂��ñ‚ªA���͌Âl�I�ɂÍA '���莞��'�A 'n log n'�� 'n squared'�̈Ⴂ�ð—‰ï¿½ï¿½Å‚��Ȃ����΂Ȃ��Ȃ��Ǝv���܂��B���̒m�����Ȃ��Ă��A���ԂƋ��ԂƂ̃g���[�h�I�t�̎d�����m�邱�Ƃ��ł��邩�������܂��ñ‚ªA�s�݂Ìê‡ï¿½A�����Ƃ̃R�~���j�P�[�V�����̂��߂̊m�ł������Ղ͂����܂����B -ƒAƒ‹ƒSƒŠƒYƒ€‚ÌÝŒv‚Ü‚½‚Í—‰ð‚É‚ ‚½‚Á‚Ä‚ÍAŽÀs‚É—v‚·‚鎞ŠÔ‚Í“ü—͂̃TƒCƒY‚ÌŠÖ”‚Å‚ ‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ꂪ^‚Å‚ ‚邯‚«AƒAƒ‹ƒSƒŠƒYƒ€‚Ìň«/—\‘z/ŗǃP[ƒX‚ÌŽÀsŽžŠÔ‚ÍAƒTƒCƒY‚̑Δi$ n $j‚É”ä—á‚·‚邯 'n log n'‚ÆŒ¾‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B•\‹L–@‚¨‚æ‚Ñ”­º–@‚ÍAƒf[ƒ^\‘¢‚É‚æ‚Á‚Äè‚ß‚ç‚ê‚é‹óŠÔ‚É‚à“K—p‚·‚邱‚Æ‚ª‚Å‚«‚éB +�A���S���Y���ÌÝŒv�܂��͗����ɂ������ĂÍA���s�ɗv���鎞�Ԃ͓��͂̃T�C�Y�̊Ö��ł��邱�Ƃ������܂��B���ꂪ�^�ł����Ƃ��A�A���S���Y���Ìň�/�\�z/�ŗǃP�[�X�̎��s���ԂÍA�T�C�Y�̑Î��i$ n $�j�ɔ��Ⴗ���� 'n log n'�ƌ������Ƃ��ł��܂��B�\�L�@�����є����@�ÍA�f�[�^�\���ɂ����Ä��߂��������Ԃɂ��K�p���邱�Ƃ��ł����B -Ž„‚ɂƂÁ‚ÄAŒvŽZ‚Ì•¡ŽG‚³‚Ì—˜_‚Í”ü‚µ‚­A•¨—Šw‚Ù‚Ç[‚­A‚»‚µ‚Ä­‚µ‚͉“‚­‚És‚­‚̂ł·I +���ɂƂ��ÄA�v�Z�̕��G���̗��_�͔������A�����w�قÇ[���A�����Ä����͉����És���̂ł��I -ŽžŠÔiƒvƒƒZƒbƒT[EƒTƒCƒNƒ‹j‚ƃXƒy[ƒXiƒƒ‚ƒŠ[j‚Í‚¨ŒÝ‚¢‚ɃgƒŒ[ƒhƒIƒt‚Å‚«‚Ü‚·BƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚͑˦‚Å‚ ‚èA‚±‚ê‚Í—Ç‚¢—á‚Å‚·B•K‚¸‚µ‚à‘ÌŒn“I‚ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAˆê”Ê“I‚É‚ÍAƒfƒR[ƒh‚·‚é•K—v‚ª‚ ‚邯‚«‚ÉŒvŽZŽžŠÔ‚ð‹]µ‚É‚µ‚ÄA‚æ‚茵–§‚ɃGƒ“ƒR[ƒh‚·‚邱‚ƂŃXƒy[ƒX‚ðß–ñ‚Å‚«‚Ü‚·BƒLƒƒƒbƒVƒ…‚̈êŠÑ«‚ðˆÛŽ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚½‚ßAƒLƒƒƒbƒVƒ…‚·‚邱‚ƂŎžŠÔ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚‚܂èA‰½‚©‚̃[ƒJƒ‹ƒRƒs[‚ðŠi”[‚·‚邽‚߂̃Xƒy[ƒX‚ð”ï‚â‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·Bƒf[ƒ^\‘¢“à‚Å‚æ‚葽‚­‚Ìî•ñ‚ð•ÛŽ‚·‚邱‚Ƃɂæ‚Á‚ÄAŽžŠÔ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚Í’ÊíA‚킸‚©‚ȃXƒy[ƒX‚µ‚©•K—v‚Æ‚µ‚Ü‚¹‚ñ‚ªAƒAƒ‹ƒSƒŠƒYƒ€‚ª•¡ŽG‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·B +���Ôi�v���Z�b�T�[�E�T�C�N���j�ƃX�y�[�X�i�������[�j�͂��݂��Ƀg���[�h�I�t�ł��܂��B�G���W�j�A�����O�͑Ë��ł����A�����͗ǂ����ł��B�K�������̌n�I�ł͂����܂����B�������A���ʓI�ɂÍA�f�R�[�h�����K�v�������Ƃ��Ɍv�Z���Ԃ��]���ɂ��ÄA���茵���ɃG���R�[�h���邱�ƂŃX�y�[�X���ߖ��ł��܂��B�L���b�V���̈��Ñ����ێ����Ȃ����΂Ȃ��Ȃ����ßA�L���b�V�����邱�ƂŎ��Ԃ��ߖñ‚·‚邱�Ƃ��ł��܂��B�‚܂��A�����̃��[�J���R�s�[���i�[���邽�߂̃X�y�[�X�����₷���Ƃ��ł��܂��B�f�[�^�\�����ł��葽���Ì������ێ����邱�Ƃɂ����ÄA���Ԃ��ߖñ‚·‚邱�Ƃ��ł��܂��B�����͒Ê��A�킸���ȃX�y�[�X�����K�v�Ƃ��܂��ñ‚ªA�A���S���Y�������G�ɂȂ��”\���������܂��B -‹óŠÔ/ŽžŠÔ‚̃gƒŒ[ƒhƒIƒt‚ð‰ü‘P‚·‚邱‚Æ‚ÍA‚µ‚΂µ‚Έê•û‚Ü‚½‚Í‘¼•û‚ðŒ€“I‚ɕς¦‚邱‚Æ‚ª‚Å‚«‚éB‚µ‚©‚µA‚±‚ê‚ÉŽæ‚è‘g‚Þ‘O‚ÉA‚ ‚È‚½‚ª‰ü‘P‚µ‚Ä‚¢‚é‚à‚Ì‚ªA–{“–‚ÉÅ‚à‰ü‘P‚ª•K—v‚È‚à‚̂Ȃ̂©AŽ©•ªŽ©g‚Éq‚˂Ă­‚¾‚³‚¢BƒAƒ‹ƒSƒŠƒYƒ€‚Åì‹Æ‚·‚é‚̂͊y‚µ‚¢‚Å‚·‚ªA–â‘è‚ł͂Ȃ¢‚à‚Ì‚ð‰ü‘P‚·‚邱‚ƂŖڗ§‚Á‚½ˆá‚¢‚͂Ȃ­AƒeƒXƒg‚Ì•‰’S‚ð‚©‚¯‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñB +����/���Ԃ̃g���[�h�I�t�����P���邱�ƂÍA���΂��Έ����܂��͑��������I�ɕς��邱�Ƃ��ł����B�������A�����Ɏ����g�ޑO�ÉA���Ȃ������P���Ă������̂��A�{���Éł����P���K�v�Ȃ��̂Ȃ̂��A�������g�Éq�˂Ă��������B�A���S���Y���Å��Ƃ����̂͊y�����ł����A�����ł͂Ȃ����̂����P���邱�ƂŖڗ������Ⴂ�͂Ȃ��A�e�X�g�̕��S�������邱�Ƃ͂����܂����B -Œ»‘ã‚̃Rƒ“ƒsƒ…[ƒ^‚̃ƒ‚ƒŠ‚ÍAƒvƒƒZƒbƒTŽžŠÔ‚Ƃ͈قȂèA•Ç‚ÉÕ“Ë‚·‚é‚܂Ŏg—p‚³‚ê‚Ä‚¢‚È‚¢‚½‚ßAˆÀ‰¿‚ÉŒ©‚¦‚Ü‚·Bޏ”s‚͉ó–Å“I‚Å‚·Bí’“‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‘¼‚̃vƒƒOƒ‰ƒ€‚ւ̉e‹¿‚âAŠ„‚è“–‚Ă⊄‚è“–‚Ä‚ð‰ðœ‚·‚鎞ŠÔ‚È‚ÇAƒƒ‚ƒŠ‚ðŽg—p‚·‚邽‚߂̉B‚³‚ꂽƒRƒXƒg‚à‚ ‚è‚Ü‚·BƒXƒs[ƒh‚ðã‚°‚邽‚߂ɃXƒy[ƒX‚ðŽæ‚èœ‚­‘O‚ÉA‚±‚ê‚ðTd‚ÉŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B +�����̃R���s���[�^�̃������ÍA�v���Z�b�T���ԂƂ͈قȂ��A�ǂÉՓ˂����܂Ŏg�p�����Ă��Ȃ����ßA�����Ɍ����܂��B���s�͉��œI�ł��B�풓���Ȃ����΂Ȃ��Ȃ����̃v���O�����ւ̉e�����A���蓖�Ă⊄�蓖�Ă��������鎞�ԂȂÇA���������g�p���邽�߂̉B���ꂽ�R�X�g�������܂��B�X�s�[�h���グ�邽�߂ɃX�y�[�X�����èœï¿½ï¿½ï¿½O�ÉA�������T�d�Ɍ������Ă��������B -Next [How to Stress Test](04-How to Stress Test.md) +Next [How to Stress Test](04-How%20to%20Stress%20Test.md) diff --git a/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md index 5af320a..2506458 100644 --- a/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -1,17 +1,17 @@ # How to Stress Test [//]: # (Version:1.0.0) -ƒXƒgƒŒƒXƒeƒXƒg‚ÍŠy‚µ‚¢‚Å‚·Bʼn‚ÍAƒXƒgƒŒƒXƒeƒXƒg‚Ì–Ú“I‚ÍAƒVƒXƒeƒ€‚ª•‰‰×‚̉º‚Å“®ì‚·‚é‚©‚Ç‚¤‚©‚𒲂ׂ邱‚Ƃł·BŽÀÛ‚É‚ÍAƒVƒXƒeƒ€‚ª•‰‰×‚̉º‚Å“®ì‚·‚é‚͈̂ê”Ê“I‚Å‚·‚ªA•‰‰×‚ª\•ª‚Éd‚¢ê‡‚͉½‚ç‚©‚Ì•û–@‚Å“®ì‚µ‚Ü‚¹‚ñBŽ„‚Í‚±‚ê‚ð•Ç*‚Ü‚½‚Í*ƒ{ƒ“ƒLƒ“ƒO* [1] ‚É“–‚ĂĂ¢‚Ü‚·B‚¢‚­‚‚©‚Ì—áŠO‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚Ù‚Æ‚ñ‚Çí‚Éu•Çv‚ª‚ ‚è‚Ü‚·BƒXƒgƒŒƒXƒeƒXƒg‚Ì–Ú“I‚ÍA•Ç‚ª‚Ç‚±‚É‚ ‚é‚©‚ð”cˆ¬‚µA•Ç‚ð‚³‚ç‚ɉ“‚´‚¯‚é•û–@‚ð—‰ð‚·‚邱‚Ƃł·B +�X�g���X�e�X�g�͊y�����ł��B�Å��ÍA�X�g���X�e�X�g�̖ړI�ÍA�V�X�e�������ׂ̉��œ��삷�邩�ǂ����𒲂ׂ邱�Ƃł��B���ۂɂÍA�V�X�e�������ׂ̉��œ��삷���͈̂��ʓI�ł����A���ׂ��\���Éd���ê‡ï¿½Í‰ï¿½ï¿½ç‚©ï¿½Ì•��@�œ��삵�܂����B���͂�������*�܂���*�{���L���O* [1] �ɓ��ĂĂ��܂��B�����‚��̗��O�����邩�������܂��ñ‚ªA�قƂ��Ç��Éu�Çv�������܂��B�X�g���X�e�X�g�̖ړI�ÍA�ǂ��ǂ��ɂ��邩���c�����A�ǂ������ɉ����������@�ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ł��B -ƒXƒgƒŒƒXƒeƒXƒg‚ÌŒv‰æ‚ÍAŠú‘Ò‚³‚ê‚邱‚Æ‚ð³Šm‚É–¾Šm‚É‚·‚é‚̂ɖ𗧂‚±‚Æ‚ª‘½‚¢‚Ì‚ÅAƒvƒƒWƒFƒNƒg‚Ì‘‚¢ŽžŠú‚ÉŠJ”­‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B Webƒy[ƒW—v‹‚ª”ߎS‚ÈŽ¸”s‚©¬Œ÷‚µ‚½‚Ì‚Í2•b‚Å‚·‚©H 500l‚Ì“¯Žžƒ†[ƒU[‚ª\•ª‚Å‚·‚©H‚»‚ê‚Í‚à‚¿‚ë‚ñAˆË‘¶‚µ‚Ä‚¢‚Ü‚·‚ªA—v‹‚É“š‚¦‚éƒVƒXƒeƒ€‚ðÝŒv‚·‚邯‚«‚Í“š‚¦‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·BƒXƒgƒŒƒXƒeƒXƒg‚ÍAŽÀ—p«‚ð\•ª‚É”­Šö‚Å‚«‚邿‚¤‚Ƀ‚ƒfƒ‹‰»‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B 500l‚Ì•sˆÀ’è‚Å—\‘ª•s”\‚ÈlŠÔ‚ðƒVƒXƒeƒ€‚ðŽg‚Á‚Ä“¯Žž‚ÉŠÈ’P‚ɃVƒ~ƒ…ƒŒ[ƒg‚·‚邱‚Ƃ͎Àۂɂ͉”\‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA­‚È‚­‚Æ‚à500‚̃Vƒ~ƒ…ƒŒ[ƒVƒ‡ƒ“‚ð쬂µA‚»‚ê‚炪s‚¤‰Â”\«‚Ì‚ ‚é•”•ª‚ðƒ‚ƒfƒŠƒ“ƒO‚µ‚悤‚Æ‚µ‚Ü‚·B +�X�g���X�e�X�g�̌v���ÍA���҂����邱�Ƃð³Šm�ɖ��m�ɂ����̂ɖ𗧂‚��Ƃ������̂ÅA�v���W�F�N�g�̑��������ɊJ�������K�v�������܂��B Web�y�[�W�v�����ߎS�Ȏ��s�����������̂�2�b�ł����H 500�l�̓������[�U�[���\���ł����H�����͂��������A�ˑ����Ă��܂����A�v���ɓ������V�X�e�����݌v�����Ƃ��͓������m���K�v�������܂��B�X�g���X�e�X�g�ÍA���p�����\���ɔ����ł����悤�Ƀ��f���������K�v�������܂��B 500�l�̕s�����ŗ\���s�\�Èl�Ԃ��V�X�e�����g���ē����ɊȒP�ɃV�~�����[�g���邱�Ƃ͎��ۂɂ͉”\�ł͂����܂��ñ‚ªA���Ȃ��Ƃ�500�̃V�~�����[�V�������ì¬ï¿½ï¿½ï¿½A�����炪�s���”\���̂��镔�������f�����O���悤�Ƃ��܂��B -ƒXƒgƒŒƒXƒeƒXƒg‚Å‚ÍAŒy•‰‰×‚ÅŽn“®‚µA•ǂɓ–‚½‚é‚Ü‚ÅA“ü—Í‘¬“x‚â“ü—̓TƒCƒY‚Ȃǂ̡–@‚ɉˆ‚Á‚ăVƒXƒeƒ€‚ðƒ[ƒh‚µ‚Ü‚·Bƒƒ‚ƒŠAƒvƒƒZƒbƒTAI / OAƒlƒbƒgƒ[ƒN‘шæ•A‚Ü‚½‚̓f[ƒ^‚Ì‹£‡‚ÍA•Ç‚ª‚ ‚È‚½‚̃j[ƒY‚ð–ž‚½‚·‚ɂ͋߂·‚¬‚éꇂÍAƒ{ƒgƒ‹ƒlƒbƒN‚ƂȂ郊ƒ\[ƒXi’Êí‚ÍŽx”z“I‚È‚à‚Ìj‚ð”cˆ¬‚µ‚Ä‚­‚¾‚³‚¢BŽŸ‚ÉA•ǂ𓮂©‚·•û–@‚ðŒ©‚Â‚¯‚Ü‚·BƒEƒH[ƒ‹‚ð“®‚©‚·A‚‚܂èƒVƒXƒeƒ€‚ªˆ—‚Å‚«‚éő啉‰×‚ð‘‚â‚·‚±‚Æ‚ÍA•‰‰×‚ÌŒy‚¢ƒVƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ð’ቺ‚³‚¹‚½‚èAŽÀÛ‚ÉŠQ‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B’ÊíA•‰‰×‚ªŒy‚¢ê‡‚̃pƒtƒH[ƒ}ƒ“ƒX‚ÍA•‰‰×‚ªd‚¢ê‡‚̃pƒtƒH[ƒ}ƒ“ƒX‚æ‚è‚àd—v‚Å‚·B +�X�g���X�e�X�g�łÍA�y���ׂŎn�����A�ǂɓ������܂ÅA���͑��x�����̓T�C�Y�ȂǂÌ��@�ɉ����ăV�X�e�������[�h���܂��B�������A�v���Z�b�T�AI / O�A�l�b�g���[�N�шæ•�A�܂��̓f�[�^�̋����ÍA�ǂ����Ȃ��̃j�[�Y�𖞂����ɂ͋߂������ê‡ï¿½ÍA�{�g���l�b�N�ƂȂ郊�\�[�X�i�Ê��͎x�z�I�Ȃ��Ìj���c�������������B���ÉA�ǂ𓮂������@�����‚��܂��B�E�H�[���𓮂����A�‚܂��V�X�e���������ł����ő啉�ׂð‘‚₷���ƂÍA���ׂ̌y���V�X�e���̃p�t�H�[�}���X���ቺ���������A���ۂɊQ�����”\���������܂��B�Ê��A���ׂ��y���ê‡ï¿½Ìƒp�t�H�[�}���X�ÍA���ׂ��d���ê‡ï¿½Ìƒp�t�H�[�}���X�������d�v�ł��B -‚ ‚È‚½‚Í‚»‚ê‚̸_“Iƒ‚ƒfƒ‹‚ð\’z‚·‚邽‚ß‚ÉA‚¢‚­‚‚©‚̈قȂ鎟Œ³‚ð‰ÂŽ‹‰»‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB’Pˆê‚Ì‹Zp‚Å\•ª‚ł͂Ȃ¢B‚½‚Æ‚¦‚ÎAƒƒMƒ“ƒO‚Å‚ÍAƒVƒXƒeƒ€“à‚Ì2‚‚̃Cƒxƒ“ƒgŠÔ‚̃EƒH[ƒ‹ƒNƒƒbƒNŽžŠÔ‚ð‚æ‚­’m‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªATd‚É\’z‚µ‚È‚¢ŒÀ‚èAƒƒ‚ƒŠŽg—p—¦‚âƒf[ƒ^\‘¢ƒTƒCƒY‚̉Ž‹«‚Í‚ ‚è‚Ü‚¹‚ñB“¯—l‚ÉAÅV‚̃VƒXƒeƒ€‚Å‚ÍA‘½‚­‚̃Rƒ“ƒsƒ…[ƒ^‚Æ‘½‚­‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ª‹¦—Í‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B“Á‚ÉA•ǂɓ–‚½‚Á‚½‚Æ‚«i‚‚܂èA“ü—͂̑傫‚³‚ɉž‚¶‚ăpƒtƒH[ƒ}ƒ“ƒX‚ª”ñ’¼ü“I‚Å‚ ‚éjA‚±‚ê‚ç‚Ì‘¼‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚̓{ƒgƒ‹ƒlƒbƒN‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·BŽQ‰Á‚µ‚Ä‚¢‚é‚·‚ׂẴ}ƒVƒ“‚̃vƒƒZƒbƒT•‰‰×‚𑪒肷‚邾‚¯‚Å‚ ‚Á‚Ä‚àA‚±‚ê‚ç‚̃VƒXƒeƒ€‚̉Ž‹«‚Í”ñí‚É–ð—§‚¿‚Ü‚·B +���Ȃ��͂����Ì��_�I���f�����\�z���邽�߂ÉA�����‚��̈قȂ鎟�����Ž������Ȃ����΂Ȃ��Ȃ����������܂����B�P���̋Z�p�Å\���ł͂Ȃ��B���Ƃ��ÎA���M���O�łÍA�V�X�e������2�‚̃C�x���g�Ԃ̃E�H�[���N���b�N���Ԃ��悭�m�邱�Ƃ������܂����A�T�d�É\�z���Ȃ������A�������g�p�����f�[�^�\���T�C�Y�̉Ž����͂����܂����B���l�ÉA�ÅV�̃V�X�e���łÍA�����̃R���s���[�^�Ƒ����̃\�t�g�E�F�A�V�X�e�������͂��Ă����”\���������܂��B���ÉA�ǂɓ��������Ƃ��i�‚܂��A���͂̑傫���ɉ����ăp�t�H�[�}���X���ñ’¼ï¿½ï¿½I�ł����j�A�������̑��̃\�t�g�E�F�A�V�X�e���̓{�g���l�b�N�ɂȂ��”\���������܂��B�Q�����Ă��邷�ׂẴ}�V���̃v���Z�b�T���ׂ𑪒肷�邾���ł����Ă��A�������̃V�X�e���̉Ž����͔����ɖ𗧂��܂��B -•Ç‚ª‚Ç‚±‚É‚ ‚é‚©‚ð’m‚邱‚Æ‚ÍA•ǂ𓮂©‚·‚¾‚¯‚łȂ­A—\‘ª‰Â”\«‚ð’ñ‹Ÿ‚µ‚ărƒWƒlƒX‚ðŒø—¦“I‚ÉŠÇ—‚Å‚«‚邿‚¤‚É‚·‚邽‚߂ɂà•s‰ÂŒ‡‚Å‚·B +�ǂ��ǂ��ɂ��邩���m�邱�ƂÍA�ǂ𓮂��������łȂ��A�\���”\�����ñ‹Ÿ‚��ăr�W�l�X�������I�ɊǗ��ł����悤�ɂ��邽�߂ɂ��s�Œ��ł��B --- [1] "to hit" -Next [How to Balance Brevity and Abstraction](05-How to Balance Brevity and Abstraction.md) \ No newline at end of file +Next [How to Balance Brevity and Abstraction](05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index e99a0ad..504b787 100644 --- a/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -1,9 +1,9 @@ # How to Balance Brevity and Abstraction [//]: # (Version:1.0.0) -’ŠÛ‰»‚̓vƒƒOƒ‰ƒ~ƒ“ƒO‚ɂƂÁ‚Äd—v‚Å‚·B‚ ‚È‚½‚͂ǂ̂悤‚É’ŠÛ“I‚Å‚ ‚é•K—v‚ª‚ ‚é‚©‚ðTd‚É‘I‘ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚Ì”MˆÓ‚ÍA‚µ‚΂µ‚Ζ{“–‚É—L—p‚È‚à‚Ì‚æ‚è‚à’ŠÛ“x‚ð‚‚߂܂·B‚±‚ê‚ðŽ¦‚·ˆê‚‚̒›Œó‚ÍAŽÀۂɃR[ƒh‚ðŠÜ‚܂Ȃ¢ƒNƒ‰ƒX‚ð쬂µA’ŠÛ“I‚È‚à‚Ì‚ð’ñ‹Ÿ‚·‚éˆÈŠO‚͉½‚à‚µ‚È‚¢ƒNƒ‰ƒX‚ð쬂·‚éꇂł·B‚±‚ê‚Ì–£—͂͗‰ð‚Å‚«‚Ü‚·‚ªAƒR[ƒh‚ÌŠÈŒ‰‚³‚̉¿’l‚Í’ŠÛ‰»‚̉¿’l‚ɑ΂µ‚Ä‘ª’肳‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBŽžÜA”M‹¶“I‚È—‘zŽå‹`ŽÒ‚ªŠÔˆá‚¢‚ð”Æ‚µ‚½‚±‚Æ‚ª‚ ‚è‚Ü‚·BƒvƒƒWƒFƒNƒg‚ÌŠJŽnŽž‚É‚ÍA’ŠÛ“I‚ÉŽv‚¦‚鑽‚­‚̃Nƒ‰ƒX‚ª’è‹`‚³‚êA”­¶‚·‚é‰Â”\«‚Ì‚ ‚é‚·‚ׂĂ̎–‘Ô‚ðˆ—‚·‚邯„‘ª‚µ‚Ü‚·BƒvƒƒWƒFƒNƒg‚ªis‚µA”æ˜J‚ª“ü‚螂ނɂ‚ê‚ÄAƒR[ƒhŽ©‘Ì‚ª—ŽG‚ɂȂè‚Ü‚·BŠÖ”–{‘Ì‚ÍA•K—vˆÈã‚É’·‚­‚È‚è‚Ü‚·B‹ó‚̃Nƒ‰ƒX‚ÍA•¶‘‰»‚Ì•‰’S‚Å‚ ‚èAƒvƒŒƒbƒVƒƒ[‰º‚ł͖³Ž‹‚³‚ê‚Ü‚·B’ŠÛ‰»‚É”ï‚₳‚ꂽƒGƒlƒ‹ƒM[‚ªA•¨Ž–‚ð’Z‚­ŠÈ’P‚ɕۂ‚½‚߂ɔï‚₳‚ꂽ‚È‚çAÅI“I‚ÈŒ‹‰Ê‚Í‚æ‚è—Ç‚¢‚à‚̂ɂȂè‚Ü‚µ‚½B‚±‚ê‚Í“Š‹@“IƒvƒƒOƒ‰ƒ~ƒ“ƒO*‚̈êŒ`‘Ô‚Å‚·BŽ„‚ÍA[Paul Graham‚É‚æ‚é[ 'Succinctness is Power'ihttp://www.paulgraham.com/power.htmlj‚Ì‹LŽ–‚ð‹­‚­‚¨Š©‚ß‚µ‚Ü‚·B +���ۉ��̓v���O���~���O�ɂƂ��Äd�v�ł��B���Ȃ��͂ǂ̂悤�ɒ��ۓI�ł����K�v�����邩���T�d�ɑI�������K�v�������܂��B�v���O���}�[�̔M�ӂÍA���΂��Ζ{���ɗL�p�Ȃ��̂��������ۓx�����߂܂��B�������������‚̒����ÍA���ۂɃR�[�h���܂܂Ȃ��N���X���ì¬ï¿½ï¿½ï¿½A���ۓI�Ȃ��̂��ñ‹Ÿ‚����ȊO�͉������Ȃ��N���X���ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ê‡ï¿½Å‚��B�����̖��͂͗����ł��܂����A�R�[�h�̊Ȍ����̉��l�͒��ۉ��̉��l�ɑ΂��đ��肳���Ȃ����΂Ȃ��܂����B���ÜA�M���I�ȗ��z���`�҂��ԈႢ���Ƃ������Ƃ������܂��B�v���W�F�N�g�̊J�n���ɂÍA���ۓI�Ɏv���鑽���̃N���X�����`�����A���������”\���̂��邷�ׂĂ̎��Ԃ����������Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B�v���W�F�N�g���i�s���A���J�����èžï¿½Þ‚ɂ‚��ÄA�R�[�h���̂����G�ɂȂ��܂��B�Ö��{�̂ÍA�K�v�È��ɒ����Ȃ��܂��B���̃N���X�ÍA�������̕��S�ł����A�v���b�V���[���ł͖��������܂��B���ۉ��ɔ��₳�ꂽ�G�l���M�[���A�������Z���ȒP�ɕۂ‚��߂ɔ��₳�ꂽ�Ȃ��A�ÅI�I�Ȍ��ʂ͂����ǂ����̂ɂȂ��܂����B�����͓��@�I�v���O���~���O*�̈��`�Ԃł��B���ÍA[Paul Graham�ɂ���[ 'Succinctness is Power'�ihttp://www.paulgraham.com/power.html�j�̋L�������������߂��܂��B -*î•ñ‰B•Á*‚âƒIƒuƒWƒFƒNƒgŽwŒüƒvƒƒOƒ‰ƒ~ƒ“ƒO*‚Ȃǂ֗̕˜‚ȃeƒNƒjƒbƒN‚ÉŠÖ˜A‚µ‚½ƒhƒOƒ}‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚Ì‹Zp‚ÍA1‚‚̃R[ƒh‚ð’ŠÛ“I‚È‚à‚̂ɂµA•ω»‚ð—\Šú‚·‚éBŽ„‚ÍŒÂl“I‚É‚ÍA‘½‚­‚Ì“Š‹@“I‚ȃR[ƒh‚𶬂·‚ׂ«‚ł͂Ȃ¢‚ÆŽv‚¢‚Ü‚·B‚½‚Æ‚¦‚ÎA•Ï”Ž©‘Ì‚ªƒGƒNƒXƒ|[ƒY‚³‚ê‚È‚¢‚悤‚ÉAƒ~ƒ…[ƒ^ƒ‰‚ƃAƒNƒZƒT‚Ì”wŒã‚É‚ ‚éƒIƒuƒWƒFƒNƒg‚Ì®”•Ï”‚ð”ñ•\ަ‚É‚µ‚ÄA‚»‚ê‚ɑ΂·‚鬂³‚ȃCƒ“ƒ^[ƒtƒF[ƒX‚¾‚¯‚ðŽó‚¯“ü‚ê‚éƒXƒ^ƒCƒ‹‚Í—e”F‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚É‚æ‚èAŒÄ‚Ño‚µƒR[ƒh‚ɉe‹¿‚ð—^‚¦‚¸‚É‚»‚̕ϔ‚ÌŽÀ‘•‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«A”ñí‚ɈÀ’肵‚½API‚ðŒöŠJ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ƒ‰ƒCƒuƒ‰ƒŠƒ‰ƒCƒ^[‚ɂƂÁ‚Ă͂¨‚»‚ç‚­“K؂ł·B‚µ‚©‚µŽ„‚ÍAŽ„‚̃`[ƒ€‚ªƒR[ƒŠƒ“ƒOƒR[ƒh‚ðŠ—L‚µ‚Ä‚¢‚é‚Ì‚ÅAŒÄ‚Ño‚µŒ³‚ðŠÈ’P‚ɃR[ƒ‰[‚Æ“¯‚¶‚悤‚ÉăR[ƒfƒBƒ“ƒO‚·‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅA‚±‚ê‚Ì—˜“_‚ª‚»‚ÌŒ¾Œê‚̃RƒXƒg‚ðã‰ñ‚邯‚ÍŽv‚í‚È‚¢B 4‚‚܂½‚Í5‚‚̗]•ª‚ȃR[ƒhs‚ÍA‚±‚Ì“Š‹@“I‚È—˜‰v‚Ì‚½‚߂Ɏx•¥‚¤‚½‚ß‚Ìd‚¢‘㞂ł·B +*�����B��*���I�u�W�F�N�g�w���v���O���~���O*�Ȃǂ֗̕��ȃe�N�j�b�N�Ɋ֘A�����h�O�}�������܂��B�������̋Z�p�ÍA1�‚̃R�[�h�ð’ŠÛ“I�Ȃ��̂ɂ��A�ω����\�������B���͌Âl�I�ɂÍA�����̓��@�I�ȃR�[�h�ð¶ï¿½ï¿½ï¿½ï¿½×‚��ł͂Ȃ��Ǝv���܂��B���Ƃ��ÎA�Ï����̂��G�N�X�|�[�Y�����Ȃ��悤�ÉA�~���[�^���ƃA�N�Z�T�̔w���ɂ����I�u�W�F�N�g�Ì����Ï������\���ɂ��ÄA�����ɑ΂��é¬ï¿½ï¿½ï¿½ÈƒC���^�[�t�F�[�X�������󂯓������X�^�C���͗e�F�����Ă��܂��B�����ɂ����A�ĂÑo���R�[�h�ɉe�����^�����ɂ��̕Ï��̎������ÏX���邱�Ƃ��ł��A�����Ɉ��肵��API�����J���Ȃ����΂Ȃ��Ȃ����C�u�������C�^�[�ɂƂ��Ă͂����炭�K�؂ł��B���������ÍA���̃`�[�����R�[�����O�R�[�h�����L���Ă����̂ÅA�ĂÑo�������ȒP�ɃR�[���[�Ɠ����悤�ÉăR�[�f�B���O���邱�Ƃ��ł����̂ÅA�����̗��_�����̌����̃R�X�g���������Ƃ͎v���Ȃ��B 4�‚܂���5�‚̗]���ȃR�[�h�s�ÍA���̓��@�I�ȗ��v�̂��߂Ɏx�������߂Ìd���ãžï¿½Å‚��B -ˆÚA«‚É‚à“¯—l‚Ì–â‘肪‚ ‚è‚Ü‚·BƒR[ƒh‚ð•ʂ̃Rƒ“ƒsƒ…[ƒ^AƒRƒ“ƒpƒCƒ‰Aƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€A‚Ü‚½‚̓vƒ‰ƒbƒgƒtƒH[ƒ€‚ɈÚA‚·‚é‚©AŠÈ’P‚ɈÚA‚·‚é•K—v‚ª‚ ‚è‚Ü‚·‚©Hƒ|[ƒ^ƒuƒ‹‚ł͂Ȃ¢A’Z‚­‚ÄŠÈ’P‚ɈÚA‚Å‚«‚éƒR[ƒh‚ÍA’·‚¢ˆÚA‰Â”\‚ȃR[ƒh‚æ‚è‚à—D‚ê‚Ä‚¢‚邯Žv‚¢‚Ü‚·B“Á’è‚ÌDBMS‚ɌŗL‚̃f[ƒ^ƒx[ƒXƒNƒGƒŠ‚ð쬂·‚éƒNƒ‰ƒX‚È‚ÇAƒ|[ƒ^ƒuƒ‹‚łȂ¢ƒR[ƒh‚ðŽw’肳‚ꂽ—̈æ‚ÉŒÀ’è‚·‚邱‚Ƃ͔äŠr“IŠÈ’P‚Å‚ ‚èAŠm‚©‚É—Ç‚¢l‚¦‚Å‚·B +�ÚA���ɂ����l�̖��肪�����܂��B�R�[�h���ʂ̃R���s���[�^�A�R���p�C���A�\�t�g�E�F�A�V�X�e���A�܂��̓v���b�g�t�H�[���ɈÚA���邩�A�ȒP�ɈÚA�����K�v�������܂����H�|�[�^�u���ł͂Ȃ��A�Z���ĊȒP�ɈÚA�ł����R�[�h�ÍA�����ÚA�”\�ȃR�[�h�������D���Ă����Ǝv���܂��B������DBMS�ɌŗL�̃f�[�^�x�[�X�N�G�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½N���X�ȂÇA�|�[�^�u���łȂ��R�[�h���w�肳�ꂽ�̈��Ɍ��肷�邱�Ƃ͔��r�I�ȒP�ł����A�m���ɗǂ��l���ł��B -Next [How to Learn New Skills](06-How to Learn New Skills.md) +Next [How to Learn New Skills](06-How%20to%20Learn%20New%20Skills.md) diff --git a/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index 04d828d..430fec0 100644 --- a/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -1,13 +1,13 @@ # How to Learn New Skills [//]: # (Version:1.0.0) -V‚µ‚¢ƒXƒLƒ‹A“Á‚É”ñ‹ZpƒXƒLƒ‹‚ðŠw‚Ô‚±‚Æ‚ÍA‚·‚ׂĂÌl‚ÌÅ‘å‚ÌŠy‚µ‚݂ł·B‚Ù‚Æ‚ñ‚Ç‚ÌŠé‹Æ‚ÍA‚±‚ꂪƒvƒƒOƒ‰ƒ}[‚̃‚ƒ`ƒx[ƒVƒ‡ƒ“‚ð‚ǂ̂­‚ç‚¢—‰ð‚·‚é‚©‚É‚æ‚Á‚ÄA‚æ‚è—Ç‚¢Žm‹C‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B +�V�����X�L���A���ɔ��Z�p�X�L�����w�Ԃ��ƂÍA���ׂĂÌl�Ìő��̊y���݂ł��B�قƂ��ǂ̊��ƂÍA���ꂪ�v���O���}�[�̃��`�x�[�V�������ǂ̂��炢�������邩�ɂ����ÄA�����ǂ��m�C�𓾂邱�Ƃ��ł��܂��B -lŠÔ‚Í‚â‚Á‚ÄŠw‚ÔBƒuƒbƒNƒŠ[ƒfƒBƒ“ƒO‚ƃNƒ‰ƒXŽö‹Æ‚͕֗˜‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚̓vƒƒOƒ‰ƒ€‚ð‘‚¢‚½‚±‚Ƃ̂Ȃ¢ƒvƒƒOƒ‰ƒ}[‚𑸌h‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©HƒXƒLƒ‹‚ðŠw‚Ô‚½‚߂ɂÍA‚»‚̃XƒLƒ‹‚ð”­Šö‚Å‚«‚銰—e‚Ȉʒu‚ÉŽ©•ªŽ©g‚ð’u‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBV‚µ‚¢ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðŠw‚Ô‚Æ‚«‚ÍA‘å‚«‚ȃvƒƒWƒFƒNƒg‚ðs‚¤‘O‚ɬ‚³‚ȃvƒƒWƒFƒNƒg‚ðŽÀs‚µ‚Ă݂Ă­‚¾‚³‚¢Bƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ðŠÇ—‚·‚é•û–@‚ðŠw‚Ô‚Æ‚«‚ÍA‚Ü‚¸¬‚³‚È‚à‚Ì‚ðŠÇ—‚µ‚Ä‚­‚¾‚³‚¢B +�l�Ԃ͂����Ċw�ÔB�u�b�N���[�f�B���O�ƃN���X���Ƃ͕֗��ł��B�������A���Ȃ��̓v���O���������������Ƃ̂Ȃ��v���O���}�[�𑸌h���邱�Ƃ��ł��܂����H�X�L�����w�Ԃ��߂ɂÍA���̃X�L���𔭊��ł��銰�e�Ȉʒu�Ɏ������g���u���Ȃ����΂Ȃ��܂����B�V�����v���O���~���O�������w�ԂƂ��ÍA�傫�ȃv���W�F�N�g���s���O�É����ȃv���W�F�N�g�����s���Ă݂Ă��������B�\�t�g�E�F�A�v���W�F�N�g���Ǘ��������@���w�ԂƂ��ÍA�܂������Ȃ��̂��Ǘ����Ă��������B -—Ç‚¢Žw“±ŽÒ‚ÍAŽ©•ª‚Å‚â‚邱‚Ƃɑã‚í‚é‚à‚̂ł͂ ‚è‚Ü‚¹‚ñ‚ªA–{‚æ‚è‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B”Þ‚ç‚Ì’mޝ‚ƈø‚«Š·‚¦‚ÉAöÝ“I‚ȃƒ“ƒ^[‚ð‚ ‚È‚½‚É’ñ‹Ÿ‚·‚邱‚Ƃ͂ł«‚Ü‚·‚©HÅ’á‚Å‚àA•׋­‚µ‚ÄŽžŠÔ‚𖳑ʂɂµ‚È‚¢‚悤‚ɧ—ã‚·‚é‚ׂ«‚Å‚·B +�ǂ��w���҂ÍA�����ł��邱�Ƃɑ��������̂ł͂����܂��ñ‚ªA�{�����͂邩�ɗD���Ă��܂��B�ނ��̒m���ƈ��������ÉA���ݓI�ȃ����^�[�����Ȃ��ɒñ‹Ÿ‚��邱�Ƃ͂ł��܂����H�Œ��ł��A�׋����Ď��Ԃ𖳑ʂɂ��Ȃ��悤�É��シ���ׂ��ł��B -‚ ‚È‚½‚ÌãŽi‚ɳޮ‚ÈŒP—û‚ð‚³‚¹‚Ä‚à‚炤‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚µ‚©‚µA‚ ‚È‚½‚ªŠw‚Ñ‚½‚¢V‚µ‚¢ƒXƒLƒ‹‚Å—V‚ñ‚Å‚¢‚é‚̂Ɠ¯‚¶‚­‚ç‚¢‘½‚­‚ÌŽžŠÔ‚Í‚»‚ê‚Ù‚Ç—Ç‚­‚È‚¢‚Æ—‰ð‚µ‚Ä‚¢‚Ü‚·B‚µ‚©‚µA•sŠ®‘S‚È¢ŠE‚Å‚ÍA‰‰Œ€‚æ‚è‚àƒgƒŒ[ƒjƒ“ƒO‚ð‹‚ß‚é‚Ì‚ªŠÈ’P‚Å‚·B³Ž®‚ȃgƒŒ[ƒjƒ“ƒO‚Ì‘½‚­‚ÍA—[H‰ï‚ð‘Ò‚Á‚Ä‚¢‚éu‹`‚ð’Ê‚µ‚ÄQ‚Ä‚¢‚邾‚¯‚Å‚·B +���Ȃ��Ì��i�É����ȌP���������Ă��炤�悤�ɂ��Ă��������B�������A���Ȃ����w���V�����X�L���ŗV���ł����̂Ɠ������炢�����̎��Ԃ͂����قǗǂ��Ȃ��Ɨ������Ă��܂��B�������A�s���S�È��E�łÍA�����������g���[�j���O�����߂��̂��ȒP�ł��B�����ȃg���[�j���O�̑����ÍA�[�H�����҂��Ă����u�`���ʂ��ÄQ�Ă��邾���ł��B -‚ ‚È‚½‚ªl‚𓱂­ê‡A”ނ炪‹»–¡‚ðŽ‚Á‚Ä‚¢‚é“K؂ȋK–͂̃vƒƒWƒFƒNƒg‚ðŠ„‚è“–‚Ă邱‚Ƃɂæ‚Á‚ÄA”ނ炪‚ǂ̂悤‚ÉŠw‚ÑA‰‡•‚·‚é‚©‚ð—‰ð‚·‚éBƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚ÄÅ‚àd—v‚ȃXƒLƒ‹‚Í‹Zp“I‚È‚à‚̂ł͂Ȃ¢‚±‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ÌlX‚ÉA—E‹CA³’¼‚³AƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚µ‚Ä—ûK‚·‚é‹@‰ï‚ð—^‚¦‚Ü‚µ‚傤B +���Ȃ����l�𓱂��ê‡ï¿½A�ނ炪�����������Ă����K�؂ȋK�͂̃v���W�F�N�g�����蓖�Ă邱�Ƃɂ����ÄA�ނ炪�ǂ̂悤�Ɋw�ÑA�������邩�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½B�v���O���}�[�ɂƂ��Äł��d�v�ȃX�L���͋Z�p�I�Ȃ��̂ł͂Ȃ����Ƃ��Y���Ȃ��ł��������B���Ȃ��Ìl�X�ÉA�E�C�A�������A�R�~���j�P�[�V����������K�����@�����^���܂��傤�B -Next [Learn to Type](07-Learn to Type.md) +Next [Learn to Type](07-Learn%20to%20Type.md) diff --git a/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md b/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md index de0269e..f08319d 100644 --- a/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -1,5 +1,5 @@ # Learn to Type [//]: # (Version:1.0.0) -ƒ^ƒbƒ`ƒ^ƒCƒv‚ðŠw‚ÔB ‚±‚ê‚Í’†‹‰‚̃XƒLƒ‹‚Å‚·BƒR[ƒh‚ð‘‚­‚±‚Ƃ͔ñí‚ɓ‚­A“ü—Í‚·‚鑬“x‚ª–³ŠÖŒW‚ÅAƒR[ƒh‚Ì‘‚«•û‚ÉŽžŠÔ‚ª‚©‚©‚ç‚È‚¢‚悤‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B ‚µ‚©‚µA’†ŠÔƒvƒƒOƒ‰ƒ}[‚Å‚ ‚ê‚ÎA‚¨‚»‚ç‚­‚ ‚È‚½‚Ì“¯—»‚⑼l‚ÉŽ©‘RŒ¾Œê‚ð‘‚­‚̂ɑ½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·‚Å‚µ‚傤B ‚±‚ê‚Í‚ ‚È‚½‚̃Rƒ~ƒbƒgƒƒ“ƒg‚ÌŠy‚µ‚¢ƒeƒXƒg‚Å‚·B ‚»‚̂悤‚È‚±‚Æ‚ðŠw‚Ԃ̂͂ ‚Ü‚è–Ê”’‚­‚È‚¢ê—p‚ÌŽžŠÔ‚ª‚©‚©‚è‚Ü‚·B “`à‚É‚æ‚ê‚ÎAMichael Tiemann‚ªMCC‚É‚¢‚½‚Æ‚«Al‚ÍA”ނ̃L[ƒXƒgƒ[ƒN‚É‚æ‚Á‚ͬ‚³‚ꂽƒnƒ€‰¹‚ð•·‚­‚½‚߂ɃhƒA‚ÌŠO‚É—§‚‚±‚ƂɂȂè‚Ü‚µ‚½B +�^�b�`�^�C�v���w�ÔB �����͒����̃X�L���ł��B�R�[�h���������Ƃ͔����ɓ���A���͂��鑬�x�����֌W�ÅA�R�[�h�Ì������Ɏ��Ԃ��������Ȃ��悤�ɂ��邱�Ƃ��ł��܂��B �������A���ԃv���O���}�[�ł����ÎA�����炭���Ȃ��̓����⑼�l�Ɏ��R�����������̂ɑ����̎��Ԃ����₷�ł��傤�B �����͂��Ȃ��̃R�~�b�g�����g�̊y�����e�X�g�ł��B ���̂悤�Ȃ��Ƃ��w�Ԃ̂͂��܂��ʔ����Ȃ����p�̎��Ԃ��������܂��B �`���ɂ����ÎAMichael Tiemann��MCC�ɂ����Ƃ��A�l�ÍA�ނ̃L�[�X�g���[�N�ɂ����Ä������ꂽ�n�����𕷂����߂Ƀh�A�̊O�ɗ��‚��ƂɂȂ��܂����B -Next [How to Do Integration Testing](08-How to Do Integration Testing.md) \ No newline at end of file +Next [How to Do Integration Testing](08-How%20to%20Do%20Integration%20Testing.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index aaaa6e1..bf09379 100644 --- a/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -1,7 +1,7 @@ # How to Do Integration Testing [//]: # (Version:1.0.0) -“‡ƒeƒXƒg‚ÍA’P‘̃eƒXƒg‚³‚ꂽ‚³‚Ü‚´‚܂ȃRƒ“ƒ|[ƒlƒ“ƒg‚Ì“‡ƒeƒXƒg‚Å‚·B “‡‚Í‚‰¿‚Å‚ ‚èAƒeƒXƒg‚Åo‚Ä‚­‚éB ‚ ‚È‚½‚ÌŒ©Ï‚à‚è‚Æ‚ ‚È‚½‚̃XƒPƒWƒ…[ƒ‹‚É‚±‚ê‚ÌŽžŠÔ‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚è‚Ü‚·B +�����e�X�g�ÍA�P�̃e�X�g���ꂽ���܂��܂ȃR���|�[�l���g�̓����e�X�g�ł��B �����Í����ł����A�e�X�g�Åo�����B ���Ȃ��̌��ς����Ƃ��Ȃ��̃X�P�W���[���ɂ����̎��Ԃ��܂߂��K�v�������܂��B -—‘z“I‚É‚ÍA“‡‚𖾎¦“I‚És‚¤•K—v‚ª‚ ‚éƒtƒF[ƒY‚ªÅI’iŠK‚ɂȂ¢‚悤‚ɃvƒƒWƒFƒNƒg‚ð•Ò¬‚·‚é‚Ì‚ª—‘z“I‚Å‚·B ƒvƒƒWƒFƒNƒg‚̉ߒö‚ÅŠ®¬‚µ‚½‚à‚Ì‚ð’iŠK“I‚É“‡‚·‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B ‚â‚ނ𓾂Ȃ¢ê‡‚Í’ˆÓ[‚­Œ©Ï‚à‚Á‚Ä‚­‚¾‚³‚¢B +���z�I�ɂÍA�����𖾎��I�És���K�v�������t�F�[�Y���ÅI�i�K�ɂȂ��悤�Ƀv���W�F�N�g���Ò������̂����z�I�ł��B �v���W�F�N�g�̉ߒ��Ŋ����������̂��i�K�I�ɓ������������͂邩�ɗD���Ă��܂��B ���ނ𓾂Ȃ��ê‡ï¿½Í’��Ó[�����ς����Ă��������B -Next [Communication Languages](09-Communication Languages.md) \ No newline at end of file +Next [Communication Languages](09-Communication%20Languages.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md b/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md index 0ea3a3b..3163ec5 100644 --- a/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -1,11 +1,11 @@ # Communication Languages [//]: # (Version:1.0.0) -ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ł͂Ȃ­A’ÊMŒ¾Œê*‚Å‚ ‚éŒ`Ž®“I‚É’è‹`‚³‚ꂽ\•¶ƒVƒXƒeƒ€‚Ì‚¢‚­‚‚©‚ÌŒ¾Œê‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚ÍA•W€‰»‚ð’Ê‚¶‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð—eˆÕ‚É‚·‚邿‚¤‚É“Á•Ê‚ÉÝŒv‚³‚ê‚Ä‚¢‚Ü‚·B 2003”N‚É‚ÍA‚±‚ê‚ç‚Ì’†‚ÅÅ‚àd—v‚Ȃ̂ªUMLAXMLASQL‚Å‚·B‚ ‚È‚½‚͂悭ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚µA‚¢‚ÂŽg‚¤‚ׂ«‚©‚ðŒˆ‚ß‚é‚½‚ß‚ÉA‚±‚ê‚ç‚·‚ׂĂɸ’Ê‚µ‚Ä‚¢‚é•K—v‚ª‚ ‚è‚Ü‚·B +�v���O���~���O�����ł͂Ȃ��A�ÊM����*�ł����`���I�ɒ��`���ꂽ�\���V�X�e���̂����‚��̌��ꂪ�����܂��B�������ÍA�W�������ʂ����R�~���j�P�[�V�������e�Ղɂ����悤�ɓ��ʂÉÝŒv�����Ă��܂��B 2003�N�ɂÍA�������̒��Åł��d�v�Ȃ̂�UML�AXML�ASQL�ł��B���Ȃ��͂悭�R�~���j�P�[�V�������A���Žg���ׂ��������߂邽�߂ÉA�����炷�ׂĂÉ��ʂ��Ă����K�v�������܂��B -UML‚ÍAÝŒv‚ð‹Lq‚·‚é}–Ê‚ð쬂·‚邽‚߂̖L‚©‚È³Ž®‚ȃVƒXƒeƒ€‚Å‚·B‚»‚Ì”ü‚µ‚³‚ÍA‚»‚ꂪƒrƒWƒ…ƒAƒ‹‚Å‚àƒtƒH[ƒ}ƒ‹‚Å‚à‚ ‚èAìŽÒ‚Ɠǎ҂̗¼•û‚ªUML‚ð’m‚Á‚Ä‚¢‚ê‚ÎA‘å—Ê‚Ìî•ñ‚ð“`‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚È‚½‚Í‚»‚ê‚ɂ‚¢‚Ä’m‚é•K—v‚ª‚ ‚è‚Ü‚·B‚È‚º‚È‚çA‚»‚Ì’†‚ŃfƒUƒCƒ“‚ª“`‚¦‚ç‚ê‚邱‚Æ‚ª‚ ‚é‚©‚ç‚Å‚·B”ñí‚Éê–å“I‚ÉŒ©‚¦‚éUML}–Ê‚ð쬂·‚邽‚߂̔ñí‚É—L—p‚ȃc[ƒ‹‚ª‚ ‚è‚Ü‚·B‘½‚­‚Ìê‡AUML‚Í³Ž®‚È‚à‚̂ł ‚èAÝŒv}–ʂɂ͂æ‚è’Pƒ‚È*ƒ{ƒbƒNƒX‚Æ–îˆó*ƒXƒ^ƒCƒ‹‚ðŽg—p‚µ‚Ä‚¢‚Ü‚·B‚µ‚©‚µAŽ„‚ÍAUML‚ª­‚È‚­‚Æ‚àƒ‰ƒeƒ“Œê‚ð•׋­‚·‚é‚̂ɂ҂Á‚½‚è‚Å‚ ‚邯ŠmM‚µ‚Ä‚¢‚Ü‚·B +UML�ÍA�݌v���L�q�����}�ʂ��ì¬ï¿½ï¿½ï¿½é‚½ï¿½ß‚Ì–L���È����ȃV�X�e���ł��B���̔������ÍA���ꂪ�r�W���A���ł��t�H�[�}���ł������A���҂Ɠǎ҂̗�����UML���m�������ÎA���ʂÌ������`���邱�Ƃ��ł��܂��B���Ȃ��͂����ɂ‚��Ēm���K�v�������܂��B�Ȃ��Ȃ��A���̒��Ńf�U�C�����`�������邱�Ƃ����邩���ł��B�����É����I�Ɍ�����UML�}�ʂ��ì¬ï¿½ï¿½ï¿½é‚½ï¿½ß‚̔����ɗL�p�ȃc�[���������܂��B�����Ìê‡ï¿½AUML�Í����Ȃ��̂ł����A�݌v�}�ʂɂ͂����P����*�{�b�N�X�Ɩ���*�X�^�C�����g�p���Ă��܂��B�������A���ÍAUML�����Ȃ��Ƃ����e�������׋������̂ɂ҂������ł����Ɗm�M���Ă��܂��B -XML‚ÍV‚µ‚¢•W€‚ð’è‹`‚·‚邽‚߂̕W€‚Å‚·Bƒf[ƒ^ŒðŠ·‚Ì–â‘è‚̉ðŒˆô‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚Ü‚é‚Å‚»‚ꂪ‘¶Ý‚·‚é‚©‚̂悤‚É•\ަ‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚Þ‚µ‚ëAƒf[ƒ^ŒðŠ·‚ÌÅ‚à‘Þ‹ü‚È•”•ª‚ÌŽ©“®‰»A‚·‚Ȃ킿•\Œ»‚ðüŒ`ƒV[ƒPƒ“ƒX‚É\‘¢‰»‚µA\‘¢‚É\•¶‰ðÍ‚·‚邱‚Æ‚ðŠ½Œ}‚·‚鎩“®‰»‚Å‚·BŽÀÛ‚É•K—v‚ÆŽv‚í‚ê‚é‚à‚̂̂قñ‚̈ꕔ‚Å‚ ‚é‚É‚à‚©‚©‚í‚炸A‚¢‚­‚‚©‚̃^ƒCƒvƒ`ƒFƒbƒN‚Ƴ‚µ‚³ƒ`ƒFƒbƒN‚ª‚ ‚è‚Ü‚·B +XML�ÍV�����W�������`���邽�߂̕W���ł��B�f�[�^�����̖����̉������ł͂����܂��ñ‚ªA�܂��ł��ꂪ���݂��邩�̂悤�ɕ\�������邱�Ƃ������܂��B�ނ����A�f�[�^�����Ìł��ދ��ȕ����̎������A���Ȃ킿�\�������`�V�[�P���X�É\�������A�\���É\�����͂��邱�Ƃ����}���鎩�����ł��B���ۂɕK�v�Ǝv���������̂̂ق��̈ꕔ�ł����ɂ��������炸�A�����‚��̃^�C�v�`�F�b�N�Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½`�F�b�N�������܂��B -SQL‚ÍAƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ł͂Ȃ¢”ñí‚É‹­—͂ŖL•x‚ȃf[ƒ^ƒNƒGƒŠ‚¨‚æ‚Ñ‘€ìŒ¾Œê‚Å‚·B•W€‰»‚³‚ꂽƒRƒA‚æ‚è‚àd—v‚ł͂Ȃ¢A‘½‚­‚̃oƒŠƒG[ƒVƒ‡ƒ“i’Êí‚Í»•iˆË‘¶j‚ª‚ ‚è‚Ü‚·B SQL‚ÍAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒX‚Ì* lingua franca *‚Å‚·BƒŠƒŒ[ƒVƒ‡ƒiƒ‹Eƒf[ƒ^ƒx[ƒX‚Ì—‰ð‚̉¶Œb‚ðŽó‚¯‚é‰Â”\«‚Ì‚ ‚镪–ì‚Åì‹Æ‚·‚éê‡‚à‚ ‚ê‚ÎAì‹Æ‚µ‚È‚¢ê‡‚à‚ ‚è‚Ü‚·‚ªASQL‚Ì\•¶‚ƈӖ¡‚ɂ‚¢‚Ă͊î–{“I‚É—‰ð‚µ‚Ä‚¨‚­•K—v‚ª‚ ‚è‚Ü‚·B +SQL�ÍA�v���O���~���O�����ł͂Ȃ������ɋ��͂ŖL�x�ȃf�[�^�N�G�������ё��쌾���ł��B�W�������ꂽ�R�A�������d�v�ł͂Ȃ��A�����̃o���G�[�V�����i�Ê��Í��i�ˑ��j�������܂��B SQL�ÍA�����[�V���i���f�[�^�x�[�X��* lingua franca *�ł��B�����[�V���i���E�f�[�^�x�[�X�̗����̉��b���󂯂��”\���̂��镪���Å��Ƃ����ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÎA���Ƃ��Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚����ASQL�Ì\���ƈӖ��ɂ‚��Ă͊��{�I�ɗ������Ă����K�v�������܂��B -Next [Heavy Tools](10-Heavy Tools.md) +Next [Heavy Tools](10-Heavy%20Tools.md) diff --git a/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md index 59ed429..6d68e82 100644 --- a/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -1,14 +1,14 @@ # Heavy Tools [//]: # (Version:1.0.0) -Ž„‚½‚¿‚Ì‹Zp•¶‰»‚ªi‚ނɂ‚ê‚ÄAƒ\ƒtƒgƒEƒFƒA‹Zp‚ÍA‘z‘œ‚à‚Å‚«‚È‚¢‚à‚Ì‚©‚çAŒ¤‹†AV»•iA•W€‰»‚³‚ꂽ»•iAL‚­•‹y‚µ‚½ˆÀ‰¿‚È»•i‚ɈÚs‚µ‚Ä‚¢‚Ü‚·B ‚±‚ê‚ç‚Ìd‚¢H‹ï‚͑傫‚È•‰‰×‚ð‚©‚¯‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªAˆÐˆ³‚·‚邱‚Æ‚ª‚ ‚èA—‰ð‚ɑ傫‚È“ŠŽ‘‚ð•K—v‚Æ‚µ‚Ü‚·B ’†ŠÔƒvƒƒOƒ‰ƒ}[‚ÍA‚»‚ê‚ç‚ðŠÇ—‚·‚é•û–@‚ÆA‚»‚ê‚ç‚ð‚¢‚ÂŽg—p‚·‚ׂ«‚©A‚Ü‚½‚Íl—¶‚·‚ׂ«‚©‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·B +�������̋Z�p�������i�ނɂ‚��ÄA�\�t�g�E�F�A�Z�p�ÍA�z�����ł��Ȃ����̂����A�����A�V���i�A�W�������ꂽ���i�A�L�����y���������È��i�ɈÚs���Ă��܂��B �������Ìd���H���͑傫�ȕ��ׂ������邱�Ƃ������܂����A�Ј����邱�Ƃ������A�����ɑ傫�ȓ������K�v�Ƃ��܂��B ���ԃv���O���}�[�ÍA���������Ǘ��������@�ÆA�����������Žg�p���ׂ����A�܂��Íl�����ׂ������m���K�v�������܂��B -¡Ž„‚ÌS‚É‚ÍAÅ‚àd‚¢ƒc[ƒ‹‚Ì‚¢‚­‚‚©‚ª‚ ‚è‚Ü‚·F +�����ÌS�ɂÍA�ł��d���c�[���̂����‚��������܂��F -- ƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒXA -- ‘S•¶ŒŸõƒGƒ“ƒWƒ“A -- ”Šwƒ‰ƒCƒuƒ‰ƒŠ[A -- OpenGLA -- XMLƒp[ƒT[A -- ƒXƒvƒŒƒbƒhƒV[ƒgB +- �����[�V���i���f�[�^�x�[�X�A +- �S�������G���W���A +- ���w���C�u�����[�A +- OpenGL�A +- XML�p�[�T�[�A +- �X�v���b�h�V�[�g�B -Next [How to analyze data](11-How to analyze data.md) +Next [How to analyze data](11-How%20to%20analyze%20data.md) diff --git a/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md b/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md index c53bed6..960a748 100644 --- a/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -1,11 +1,11 @@ # How to analyze data [//]: # (Version:1.0.0) -ƒf[ƒ^•ªÍ‚ÍAƒ\ƒtƒgƒEƒFƒAŠJ”­‚̉Šú’iŠK‚̃vƒƒZƒX‚ÅAƒrƒWƒlƒXƒAƒNƒeƒBƒrƒeƒB‚𒲂×A‚»‚ê‚ðƒ\ƒtƒgƒEƒFƒAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ɕϊ·‚·‚邽‚߂̗vŒ‚ðŒ©‚Â‚¯o‚·ƒvƒƒZƒX‚Å‚·B‚±‚ê‚Í³Ž®‚È’è‹`‚Å‚ ‚èAƒf[ƒ^•ªÍ‚̓VƒXƒeƒ€ƒAƒiƒŠƒXƒg‚É”C‚¹‚Ä‚¨‚­‚ׂ«s“®‚Å‚ ‚邯M‚¶‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒvƒƒOƒ‰ƒ}[‚Í’N‚©‚ªÝŒv‚µ‚½‚à‚Ì‚ðƒR[ƒfƒBƒ“ƒO‚·‚邱‚Æ‚ÉÅ“_‚ð“–‚Ä‚é‚ׂ«‚Å‚·BŒµ–§‚Ƀ\ƒtƒgƒEƒFƒAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚̃pƒ‰ƒ_ƒCƒ€‚É]‚¦‚ÎA³‚µ‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBŒoŒ±–L•x‚ȃvƒƒOƒ‰ƒ}[‚ªƒfƒUƒCƒi[‚ɂȂèA‰s‚¢ƒfƒUƒCƒi[‚ªƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚ɂȂèA‚·‚ׂẴf[ƒ^—vŒ‚ɂ‚¢‚Äl‚¦‚邱‚Æ‚ª‚Å‚«A–¾Šm‚ȃ^ƒXƒN‚ðŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍAƒf[ƒ^‚ª‚·‚ׂẴvƒƒOƒ‰ƒ~ƒ“ƒOŠˆ“®‚Ì’†Šj‚ƂȂ邽‚ßAŠ®‘S‚ɂͳŠm‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚ʼn½‚ð‚µ‚Ä‚àA‚ ‚È‚½‚͈ړ®‚µ‚Ä‚¢‚é‚©Aƒf[ƒ^‚ð•ÏX‚µ‚Ä‚¢‚Ü‚·BƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚̓j[ƒY‚ð‚æ‚è‘å‹K–͂ɕªÍ‚µ‚Ä‚¢‚Ü‚·Bƒ\ƒtƒgƒEƒFƒAƒfƒUƒCƒi[‚ÍA‚±‚̂悤‚È‹K–Í‚ð‚³‚ç‚Éi‚èž‚ñ‚ÅA–â‘肪‚ ‚È‚½‚ÌŠ÷‚Ìã‚É’…‚­‚ÆAI–­‚ȃAƒ‹ƒSƒŠƒYƒ€‚ð“K—p‚µ‚ÄŠù‘¶‚̃f[ƒ^‚ðˆÚ“®‚·‚邾‚¯‚Å‚·B +�f�[�^���͂ÍA�\�t�g�E�F�A�J���Ì����i�K�̃v���Z�X�ÅA�r�W�l�X�A�N�e�B�r�e�B�𒲂×A�������\�t�g�E�F�A�A�v���P�[�V�����ɕϊ����邽�߂̗v�������‚��o���v���Z�X�ł��B�����Í����Ȓ��`�ł����A�f�[�^���͂̓V�X�e���A�i���X�g�ɔC���Ă����ׂ��s���ł����ÆM���邩�������܂��ñ‚ªA�v���O���}�[�͒N�����݌v�������̂��R�[�f�B���O���邱�ƂÉÅ“_�𓖂Ă��ׂ��ł��B�����Ƀ\�t�g�E�F�A�G���W�j�A�����O�̃p���_�C���É]���ÎA���������������܂����B�o���L�x�ȃv���O���}�[���f�U�C�i�[�ɂȂ��A�s���f�U�C�i�[���r�W�l�X�A�i���X�g�ɂȂ��A���ׂẴf�[�^�v���ɂ‚��Äl���邱�Ƃ��ł��A���m�ȃ^�X�N�����s���邱�Ƃ��ł��܂��B�����ÍA�f�[�^�����ׂẴv���O���~���O�����̒��j�ƂȂ邽�ßA���S�ɂÍ��m�ł͂����܂����B���Ȃ��̃v���O�����ʼn������Ă��A���Ȃ��͈ړ����Ă��邩�A�f�[�^���ÏX���Ă��܂��B�r�W�l�X�A�i���X�g�̓j�[�Y���������K�͂ɕ��͂��Ă��܂��B�\�t�g�E�F�A�f�U�C�i�[�ÍA���̂悤�ȋK�͂������Éi�èžï¿½ï¿½ï¿½ÅA���肪���Ȃ��̊��Ì��ɒ����ÆA�I���ȃA���S���Y�����K�p���Ċ����̃f�[�^���ړ����邾���ł��B -‚»‚¤‚ł͂ ‚è‚Ü‚¹‚ñB +�����ł͂����܂����B -‚ǂ̒iŠK‚ÅŒ©‚Ä‚àAƒf[ƒ^‚Í‚¤‚Ü‚­ÝŒv‚³‚ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŽå‚ÈŠÖSŽ–‚Å‚·BƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚ªŒÚ‹q‚Ì—v‹‚©‚ç‚ǂ̂悤‚É—vŒ‚ðŽæ“¾‚µ‚Ä‚¢‚é‚©‚ðÚ‚µ‚­Œ©‚ê‚ÎAƒf[ƒ^‚ªŠî–{“I‚È–ðŠ„‚ð‰Ê‚½‚·‚±‚Æ‚ª‚í‚©‚è‚Ü‚·BƒAƒiƒŠƒXƒg‚Í‚¢‚í‚ä‚éƒf[ƒ^ƒtƒ[ƒ_ƒCƒAƒOƒ‰ƒ€‚ð쬂µA‚·‚ׂẴf[ƒ^ƒ\[ƒX‚ªŽ¯•Ê‚³‚êAî•ñƒtƒ[‚ªŒ`¬‚³‚ê‚Ü‚·B‚ǂ̃f[ƒ^‚ðƒVƒXƒeƒ€‚̈ꕔ‚É‚·‚é‚©‚𖾊m‚É‚µ‚½ã‚ÅAƒf[ƒ^ƒx[ƒXŠÖŒWAƒf[ƒ^ŒðŠ·ƒvƒƒgƒRƒ‹A‚¨‚æ‚уtƒ@ƒCƒ‹Œ`Ž®‚ÌŠÏ“_‚©‚çAÝŒvŽÒ‚̓f[ƒ^ƒ\[ƒX‚ð®Œ`‚µ‚ăvƒƒOƒ‰ƒ}‚É“n‚·€”õ‚ª®‚¢‚Ü‚·B‚µ‚©‚µAƒvƒƒZƒX‚͂܂¾I‚í‚Á‚Ä‚¢‚Ü‚¹‚ñB‚±‚Ì“O’ꂵ‚½ƒf[ƒ^ô—ûƒvƒƒZƒX‚ÌŒã‚Å‚ ‚Á‚Ä‚àiƒvƒƒOƒ‰ƒ}jA‰Â”\‚ÈŒÀ‚èŗǂ̕û–@‚Ńf[ƒ^‚ð•ªÍ‚·‚é•K—v‚ª‚ ‚é‚©‚ç‚Å‚·B‚ ‚È‚½‚ÌŽdŽ–‚ÌÅIs‚ÍA‚¢‚­‚‚©‚ÌŒ¾Œê‚Ì•ƒ‚Å‚ ‚éNiklaus Wirth‚Ì’†ŠjƒƒbƒZ[ƒW‚Å‚·B "ƒAƒ‹ƒSƒŠƒYƒ€+ƒf[ƒ^\‘¢=ƒvƒƒOƒ‰ƒ€"’P“ƂŃAƒ‹ƒSƒŠƒYƒ€‚𗧂Ă邱‚Ƃ͌ˆ‚µ‚Ä‚ ‚è‚Ü‚¹‚ñB‚·‚ׂẴAƒ‹ƒSƒŠƒYƒ€‚ÍA­‚È‚­‚Æ‚à1‚‚̃f[ƒ^‚ɑ΂µ‚ĉ½‚©‚ðs‚¤‚±‚ƂɂȂÁ‚Ä‚¢‚Ü‚·B +�ǂ̒i�K�Ō��Ă��A�f�[�^�͂��܂��݌v���ꂽ�A�v���P�[�V�����̎��ȊÖS���ł��B�r�W�l�X�A�i���X�g���ڋq�̗v�������ǂ̂悤�ɗv�����擾���Ă��邩���ڂ��������ÎA�f�[�^�����{�I�Ȗ������ʂ������Ƃ��킩���܂��B�A�i���X�g�͂��������f�[�^�t���[�_�C�A�O�������ì¬ï¿½ï¿½ï¿½A���ׂẴf�[�^�\�[�X�����ʂ����A�����t���[���`�������܂��B�ǂ̃f�[�^���V�X�e���̈ꕔ�ɂ��邩�𖾊m�ɂ������ÅA�f�[�^�x�[�X�֌W�A�f�[�^�����v���g�R���A�����уt�@�C���`���̊ϓ_�����A�݌v�҂̓f�[�^�\�[�X�ð®Œ`���ăv���O���}�ɓn�������������܂��B�������A�v���Z�X�͂܂��I�����Ă��܂����B���̓O�ꂵ���f�[�^�����v���Z�X�̌��ł����Ă��i�v���O���}�j�A�”\�Ȍ����ŗǂ̕��@�Ńf�[�^�ð•ªÍ‚����K�v�����邩���ł��B���Ȃ��̎d���ÌÅI�s�ÍA�����‚��̌����̕��ł���Niklaus Wirth�̒��j���b�Z�[�W�ł��B "�A���S���Y��+�f�[�^�\��=�v���O����"�P�ƂŃA���S���Y���𗧂Ă邱�Ƃ͌����Ă����܂����B���ׂẴA���S���Y���ÍA���Ȃ��Ƃ�1�‚̃f�[�^�ɑ΂��ĉ������s�����ƂɂȂ��Ă��܂��B -‚µ‚½‚ª‚Á‚ÄAƒAƒ‹ƒSƒŠƒYƒ€‚Í^‹ó‚ÅŽÔ—Ö‚ð‰ñ“]‚³‚¹‚È‚¢‚Ì‚ÅA‘¼l‚ª‚ ‚È‚½‚Ì‚½‚߂ɓÁ’肵‚½ƒf[ƒ^‚ƃR[ƒh‚ð‘‚«—¯‚ß‚é‚̂ɕK—v‚ȃf[ƒ^‚Ì—¼•û‚ð•ªÍ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŠÈ’P‚È—á‚Å‚ÍA–â‘肪‚æ‚è–¾Šm‚ɂȂè‚Ü‚·Bƒ‰ƒCƒuƒ‰ƒŠ‚ÌŒŸõƒ‹[ƒ`ƒ“‚ðŽÀ‘•‚µ‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ÌŽd—l‚É‚æ‚邯Aƒ†[ƒU[‚̓Wƒƒƒ“ƒ‹A’˜ŽÒAƒ^ƒCƒgƒ‹Ao”ÅŽÐAˆóü”NAƒy[ƒW”‚Ì‘g‚݇‚킹‚őЂð‘I‘ð‚Å‚«‚Ü‚·Bƒ‹[ƒ`ƒ“‚ÌÅI“I‚È–Ú•W‚ÍAƒoƒbƒNƒGƒ“ƒhEƒf[ƒ^ƒx[ƒX‚ðŒŸõ‚·‚邽‚߂̳“–‚ÈSQL•¶‚𶬂·‚邱‚Ƃł·B‚±‚ê‚ç‚Ì—vŒ‚ÉŠî‚¢‚ÄA‚¢‚­‚‚©‚Ì‘I‘ðŽˆ‚ª‚ ‚è‚Ü‚·BuswitchvƒXƒe[ƒgƒƒ“ƒgA‚Ü‚½‚Í•¡”‚ÌuifvƒXƒe[ƒgƒƒ“ƒg‚ðŽg—p‚µ‚ÄAŠeƒRƒ“ƒgƒ[ƒ‹‚ð‡”ԂɃ`ƒFƒbƒN‚µ‚Ü‚·Bƒf[ƒ^ƒRƒ“ƒgƒ[ƒ‹‚Ì”z—ñ‚ð쬂µAŠe—v‘f‚ªÝ’肳‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN‚µ‚Ü‚·B‚·‚ׂĂ̓Á’è‚̃Rƒ“ƒgƒ[ƒ‹‚ðŒp³‚·‚é’ŠÛƒRƒ“ƒgƒ[ƒ‹ƒIƒuƒWƒFƒNƒg‚ðì¬i‚Ü‚½‚ÍŽg—pj‚µA‚»‚ê‚ç‚ðƒCƒxƒ“ƒgƒhƒŠƒuƒ“ƒGƒ“ƒWƒ“‚ÉÚ‘±‚µ‚Ü‚·B—vŒ‚É“Á’è‚̇˜‚Å€–Ú‚ªƒ`ƒFƒbƒN‚³‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚ÄAƒNƒGƒŠ‚̃pƒtƒH[ƒ}ƒ“ƒX‚ðƒ`ƒ…[ƒjƒ“ƒO‚·‚邱‚Æ‚à•K—v‚ÈꇂÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚̃cƒŠ[‚ðŽg—p‚µ‚ÄSQL•¶‚ð쬂·‚邱‚Æ‚ðŒŸ“¢‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚²——‚̂Ƃ¨‚èAƒAƒ‹ƒSƒŠƒYƒ€‚Ì‘I‘ð‚ÍAŽg—p‚·‚éA‚Ü‚½‚Í쬂·‚éƒf[ƒ^‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚±‚̂悤‚ÈŒˆ’è‚ÍAŒø—¦“I‚ȃAƒ‹ƒSƒŠƒYƒ€‚ƔߎS‚ȃAƒ‹ƒSƒŠƒYƒ€‚Ƃ̊Ԃ̂·‚ׂĂ̈Ⴂ‚ð¶‚¶‚³‚¹‚é‰Â”\«‚ª‚ ‚éB‚µ‚©‚µAŒø—¦‚¾‚¯‚ªŒœ”OŽ–€‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ÍA‚ ‚È‚½‚̃R[ƒh‚É–¼‘O•t‚«‚̕ϔ‚ð12ŒÂŽg—p‚µA‚±‚ê‚܂łǂ¨‚èŒø—¦“I‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µA‚»‚̂悤‚ȃR[ƒh‚ÍŠÈ’P‚ɕێç‚Å‚«‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¨‚»‚ç‚­A•Ï”‚Ì“K؂ȃRƒ“ƒeƒi‚ð‘I‘ð‚·‚é‚±‚Ƃœ¯‚¶ƒXƒs[ƒh‚ð•ۂ‚±‚Æ‚ª‚Å‚«A‚³‚ç‚ÉA—ˆ”N‚É‚ÍA“¯—»‚ªƒR[ƒh‚ð‚æ‚è‚æ‚­—‰ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚·B‚³‚ç‚ÉA–¾Šm‚É’è‹`‚³‚ꂽƒf[ƒ^\‘¢‚ð‘I‘ð‚·‚é‚±‚Æ‚ÅAƒR[ƒh‚Ì‘‚«Š·‚¦‚ðs‚킸‚ɃR[ƒh‚Ì‹@”\‚ðŠg’£‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B’·Šú“I‚É‚ÍAƒf[ƒ^‚Ì‘I‘ð‚É‚æ‚Á‚ÄAƒR[ƒh‚ÌI—¹Œã‚ɃR[ƒh‚ª‘¶‘±‚·‚éŠúŠÔ‚ªŒˆ‚Ü‚è‚Ü‚·B‚à‚¤ˆê‚‚̗á‚ð‹“‚°‚Ă݂܂µ‚傤BŽvl‚Ì‚½‚ß‚ÌH‚ו¨‚Í‚à‚¤­‚µ‚ ‚è‚Ü‚·BƒAƒiƒOƒ‰ƒ€‚ª“¯‚¶Ž«‘“à‚̕ʂ̒PŒê‚łȂ¯‚ê‚΂Ȃç‚È‚¢A3‚ˆÈã‚̃AƒiƒOƒ‰ƒ€‚ðŽ‚ÂŽ«‘‚Ì‚·‚ׂĂ̒PŒê‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚ ‚È‚½‚ÌŽdŽ–‚Å‚ ‚邯‚µ‚Ü‚µ‚傤B‚»‚ê‚ðŒvŽZ‚ÌŽdŽ–‚Æl‚¦‚é‚È‚ç‚ÎA‚ ‚È‚½‚Í–³ŒÀ‚Ì“w—Í‚ÉI‚í‚èAŠe’PŒê‚Ì‚·‚ׂĂ̑g‚݇‚킹‚ðŽŽ‚µ‚ÄA‚»‚ê‚ðƒŠƒXƒg‚Ì‘¼‚Ì’PŒê‚Æ”äŠr‚µ‚悤‚Æ‚µ‚Ü‚·B‚µ‚©‚µAŽèŒ³‚̃f[ƒ^‚ð•ªÍ‚·‚邯A’PŒê‚»‚Ì‚à‚̂Ƃ»‚Ì•¶Žš‚̃\[ƒg‚³‚ꂽ”z—ñ‚ðID‚Æ‚µ‚Ċ܂ރŒƒR[ƒh‚ÅŠe’PŒê‚ð•\‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚̂悤‚È’mޝ‚ðg‚ɂ‚¯‚ÄAƒAƒiƒOƒ‰ƒ€‚ðŒ©‚Â‚¯‚邱‚Æ‚ÍA’ljÁ‚̃tƒB[ƒ‹ƒh‚ÅƒŠƒXƒg‚ðƒ\[ƒg‚µA“¯‚¶ID‚ð‹¤—L‚·‚é‚à‚Ì‚ð‘I‚Ô‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·Bƒuƒ‹[ƒgƒtƒH[ƒXƒAƒ‹ƒSƒŠƒYƒ€‚ÍAŽÀs‚É”“ú‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªAƒXƒ}[ƒg‚ȃAƒ‹ƒSƒŠƒYƒ€‚͂قñ‚Ì”•b‚Å‚·B“‚¢–â‘è‚É’¼–Ê‚µ‚Ä‚¢‚邱‚Ì—á‚ðŠo‚¦‚Ä‚¨‚¢‚Ä‚­‚¾‚³‚¢B +���������ÄA�A���S���Y���Í^���Ŏԗւ����]�����Ȃ��̂ÅA���l�����Ȃ��̂��߂ɓ��肵���f�[�^�ƃR�[�h���������߂��̂ɕK�v�ȃf�[�^�̗����ð•ªÍ‚����K�v�������܂��B�ȒP�ȗ��łÍA���肪���薾�m�ɂȂ��܂��B���C�u�����̌������[�`�����������Ă��܂��B���Ȃ��̎d�l�ɂ����ÆA���[�U�[�̓W�������A���ÒA�^�C�g���A�o�ŎÐA�����N�A�y�[�W���̑g�Ý��킹�Å��Ђ��I���ł��܂��B���[�`���ÌÅI�I�ȖڕW�ÍA�o�b�N�G���h�E�f�[�^�x�[�X���������邽�߂Ì�����SQL���ð¶ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ł��B�������̗v���Ɋ��Â��ÄA�����‚��̑I�����������܂��B�uswitch�v�X�e�[�g�����g�A�܂��͕����Ìuif�v�X�e�[�g�����g���g�p���ÄA�e�R���g���[�������ԂɃ`�F�b�N���܂��B�f�[�^�R���g���[���̔z�����ì¬ï¿½ï¿½ï¿½A�e�v�f���ݒ肳���Ă��邩�ǂ����`�F�b�N���܂��B���ׂĂ̓����̃R���g���[�����p�����钊�ۃR���g���[���I�u�W�F�N�g���ì¬ï¿½i�܂��͎g�p�j���A���������C�x���g�h���u���G���W���Éڑ����܂��B�v���ɓ����Ì����Å��ڂ��`�F�b�N�����Ă��邱�Ƃ��m�F���ÄA�N�G���̃p�t�H�[�}���X���`���[�j���O���邱�Ƃ��K�v�Èê‡ï¿½ÍA�R���|�[�l���g�̃c���[���g�p����SQL�����ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��������邱�Ƃ��ł��܂��B�����̂Ƃ����A�A���S���Y���̑I���ÍA�g�p�����A�܂��Íì¬ï¿½ï¿½ï¿½ï¿½ï¿½f�[�^�ɂ����ĈقȂ��܂��B���̂悤�Ȍ����ÍA�����I�ȃA���S���Y���ƔߎS�ȃA���S���Y���Ƃ̊Ԃ̂��ׂĂ̈Ⴂ�ð¶‚��������”\���������B�������A�������������O�����ł͂����܂����B���Ȃ��ÍA���Ȃ��̃R�[�h�ɖ��O�t���̕Ï���12�Žg�p���A�����܂łǂ��������I�ɂ��邱�Ƃ��ł��܂��B�������A���̂悤�ȃR�[�h�͊ȒP�ɕێ��ł��Ȃ����������܂����B�����炭�A�Ï��̓K�؂ȃR���e�i���I�����邱�Ƃœ����X�s�[�h���ۂ‚��Ƃ��ł��A�����ÉA���N�ɂÍA�������R�[�h�������悭�����ł����悤�ɂȂ��܂��B�����ÉA���m�ɒ��`���ꂽ�f�[�^�\�����I�����邱�ƂÅA�R�[�h�Ì����������s�킸�ɃR�[�h�̋@�\���g�����邱�Ƃ��ł��܂��B�����I�ɂÍA�f�[�^�̑I���ɂ����ÄA�R�[�h�ÌI�����ɃR�[�h�������������Ԃ����܂��܂��B�������‚̗��������Ă݂܂��傤�B�v�l�̂��߂ÌH�ו��͂������������܂��B�A�i�O�����������������̕ʂ̒P���łȂ����΂Ȃ��Ȃ��A3�ˆÈ��̃A�i�O���������Ž����̂��ׂĂ̒P�������‚��邱�Ƃ����Ȃ��̎d���ł����Ƃ��܂��傤�B�������v�Z�̎d���Æl�����Ȃ��ÎA���Ȃ��͖����̓w�͂ÉI�����A�e�P���̂��ׂĂ̑g�Ý��킹�������ÄA���������X�g�̑��̒P���Ɣ��r���悤�Ƃ��܂��B�������A�茳�̃f�[�^�ð•ªÍ‚����ÆA�P�ꂻ�̂��̂Ƃ��̕����̃\�[�g���ꂽ�z����ID�Ƃ��Ċ܂ރ��R�[�h�Ŋe�P�����\�����Ƃ��ł��܂��B���̂悤�Ȓm�����g�ɂ‚��ÄA�A�i�O���������‚��邱�ƂÍA�lj��̃t�B�[���h���X�g���\�[�g���A����ID�����L�������̂��I�Ԃ��Ƃ��Ӗ����܂��B�u���[�g�t�H�[�X�A���S���Y���ÍA���s�É��������邱�Ƃ������܂����A�X�}�[�g�ȃA���S���Y���͂ق��Ì��b�ł��B��������ɒ��ʂ��Ă��邱�̗����o���������������B -Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How to Manage Development Time.md) +Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How%20to%20Manage%20Development%20Time.md) diff --git a/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index 292aa28..bed0a32 100644 --- a/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -1,11 +1,11 @@ # How to Manage Development Time [//]: # (Version:1.0.0) -ŠJ”­ŽžŠÔ‚ðŠÇ—‚·‚邽‚ß‚ÉAŠÈŒ‰‚ÅÅV‚̃vƒƒWƒFƒNƒgŒv‰æ‚ðˆÛŽ‚·‚éBƒvƒƒWƒFƒNƒgŒv‰æ‚Æ‚ÍAŒ©Ï‚à‚èAƒXƒPƒWƒ…[ƒ‹Aisó‹µ‚ðŽ¦‚·ƒ}ƒCƒ‹ƒXƒg[ƒ“AŒ©Ï‚è‚ÌŠeƒ^ƒXƒN‚Ö‚ÌŽ©•ª‚̃`[ƒ€‚Ü‚½‚ÍŽ©•ª‚ÌŽžŠÔ‚ÌŠ„‚è“–‚Ăł·B•iŽ¿•ÛØ’S“–ŽÒ‚Ƃ̖ʒkAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚Ì€”õA‹@Ší‚Ì’•¶‚È‚ÇA–Y‚ê‚Ă͂Ȃç‚È‚¢‚±‚Æ‚à‚ ‚è‚Ü‚·Bƒ`[ƒ€‚ÉŽQ‰Á‚µ‚Ä‚¢‚éê‡AƒvƒƒWƒFƒNƒg‚ÌŒv‰æ‚ÍAŠJŽnŽž‚ÆI—¹Žž‚Ì—¼•û‚ŇˆÓ‚µ‚½‡ˆÓ‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB +�J�����Ԃ��Ǘ����邽�߂ÉA�Ȍ��ÅÅV�̃v���W�F�N�g�v�����ێ������B�v���W�F�N�g�v���ƂÍA�����A�X�P�W���[���A�i�s�󋵂������}�C���X�g�[���A���ς��̊e�^�X�N�ւ̎����̃`�[���܂��͎����̎��Ԃ̊��蓖�Ăł��B�iï¿½ï¿½ï¿½ÛØ’S���҂Ƃ̖ʒk�A�h�L�������e�[�V�����Ì����A�@���̒����ȂÇA�Y���Ă͂Ȃ��Ȃ����Ƃ������܂��B�`�[���ɎQ���������ê‡ï¿½A�v���W�F�N�g�̌v���ÍA�J�n���ÆI�����̗����Å��ӂ������ӂłȂ����΂Ȃ��܂����B -ƒvƒƒWƒFƒNƒgŒv‰æ‚ÍA‚ ‚È‚½‚ª‚ǂ̂悤‚É‘gD‰»‚³‚ê‚Ä‚¢‚é‚©‚ðŽ¦‚·‚̂ł͂Ȃ­AˆÓŽvŒˆ’è‚ðŽx‰‡‚·‚邽‚߂ɑ¶Ý‚µ‚Ü‚·BƒvƒƒWƒFƒNƒgŒv‰æ‚ª’·‚·‚¬‚é‚©ÅV‚łȂ¢ê‡AˆÓŽvŒˆ’è‚ɂ͖ð‚É—§‚½‚È‚¢‚Å‚µ‚傤BŽÀÛ‚É‚ÍA‚±‚ê‚ç‚ÌŒˆ’è‚ÍŒÂl‚ÉŠÖ‚·‚é‚à‚̂ł·BŒv‰æ‚Æ‚ ‚È‚½‚Ì”»’f‚ÍAŽdŽ–‚ð‚ ‚él‚©‚ç•Ê‚Ìl‚Ɉڂ·‚ׂ«‚©‚Ç‚¤‚©‚ðŒˆ’è‚³‚¹‚Ü‚·Bƒ}ƒCƒ‹ƒXƒg[ƒ“‚Í‚ ‚È‚½‚Ìi•à‚ðŽ¦‚µ‚Ü‚·Bƒtƒ@ƒ“ƒV[‚ȃvƒƒWƒFƒNƒgŒv‰æƒc[ƒ‹‚ðŽg—p‚µ‚Ä‚¢‚éꇂÍAƒvƒƒWƒFƒNƒg‚ÌBig Design Up FrontiBDUFj‚ð쬂·‚é‚̂ɘf‚킳‚ê‚é‚̂ł͂Ȃ­A‚»‚ê‚ðŽg—p‚µ‚ÄŠÈŒ‰‚ÅÅV‚Ìó‘Ô‚ðˆÛŽ‚µ‚Ü‚·B +�v���W�F�N�g�v���ÍA���Ȃ����ǂ̂悤�ɑg�D�������Ă��邩�������̂ł͂Ȃ��A�ӎv�������x�����邽�߂ɑ��݂��܂��B�v���W�F�N�g�v�悪�������邩�ÅV�łȂ��ê‡ï¿½A�ӎv�����ɂ͖��ɗ����Ȃ��ł��傤�B���ۂɂÍA�������̌����͌Âl�Ɋւ������̂ł��B�v���Ƃ��Ȃ��̔��f�ÍA�d���������l�����ʂÌl�Ɉڂ��ׂ����ǂ��������肳���܂��B�}�C���X�g�[���͂��Ȃ��Ìi���������܂��B�t�@���V�[�ȃv���W�F�N�g�v���c�[�����g�p�������ê‡ï¿½ÍA�v���W�F�N�g��Big Design Up Front�iBDUF�j���ì¬ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚ɘf�킳�����̂ł͂Ȃ��A�������g�p���ĊȌ��ÅÅV�Ì��Ԃ��ێ����܂��B -ƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªŒ‡‚¯‚Ä‚¢‚éꇂÍAãŽi‚É‚»‚̃vƒƒWƒFƒNƒg‚Ì—\’芮—¹‚ª‚»‚Ì‹àŠz‚¾‚¯•´Ž¸‚µ‚½‚±‚Æ‚ð’m‚点‚é‚È‚ÇA‚·‚®‚És“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŒ©Ï‚à‚è‚ÆƒXƒPƒWƒ…[ƒ‹‚ÍAŒˆ‚µ‚ÄŠ®àø‚È‚à‚̂ł͂Ȃ©‚Á‚½‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚±‚ê‚ÍA‚ ‚È‚½‚ªƒvƒƒWƒFƒNƒg‚̌㔼‚ÅŒ‡È‚µ‚½“ú‚ð•₤‚±‚Æ‚ª‚Å‚«‚邯‚¢‚¤öŠo‚ðì‚èo‚µ‚Ü‚·B‚»‚¤‚©‚à‚µ‚ê‚È‚¢B‚µ‚©‚µA‚ ‚È‚½‚ª‚»‚ê‚ð‰ß‘å•]‰¿‚µ‚Ä‚¢‚邯‚¢‚¤‚±‚Æ‚ð‚ ‚È‚½‚ª‰ß¬•]‰¿‚µ‚Ä‚¢‚é‰Â”\«‚à‚ ‚è‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‚ ‚È‚½‚ªD‚«‚©”Û‚©‚É‚©‚©‚í‚炸AŒv‰æ‚³‚ꂽƒvƒƒWƒFƒNƒg‚ÌŠ®—¹‚Í‚·‚łɃXƒŠƒbƒv‚µ‚Ä‚¢‚Ü‚·B +�}�C���X�g�[�������������ê‡ï¿½ÍA���i�ɂ��̃v���W�F�N�g�̗\�芮�������̋��z���������������Ƃ��m�点���ȂÇA�����És�������K�v�������܂��B���ς����ƃX�P�W���[���ÍA�����Ċ����Ȃ��̂ł͂Ȃ��������������܂����B�����ÍA���Ȃ����v���W�F�N�g�̌㔼�Ō��Ȃ��������₤���Ƃ��ł����Ƃ������o�������o���܂��B�������������Ȃ��B�������A���Ȃ����������ߑ��]�����Ă����Ƃ������Ƃ����Ȃ����ß��]�����Ă����”\���������܂��B���������ÄA���Ȃ����D�����ۂ��ɂ������炸�A�v�悳�ꂽ�v���W�F�N�g�̊����͂��łɃX���b�v���Ă��܂��B -“à•”ƒ`[ƒ€ƒ~[ƒeƒBƒ“ƒOAƒfƒ‚A•¶‘‰»A—\’肳‚ꂽ’èŠú“I‚ÈŠˆ“®A“‡ƒeƒXƒgAŠO•”ŽÒ‚Ƃ̑ΈA•a‹CA‹x‰ÉAŠù‘¶»•i‚̃ƒ“ƒeƒiƒ“ƒXAŠJ”­ŠÂ‹«‚̃ƒ“ƒeƒiƒ“ƒX‚È‚ÇAŒv‰æ‚ÉŽžŠÔ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢BƒvƒƒWƒFƒNƒgŒv‰æ‚ÍA‚ ‚È‚½‚â‚ ‚È‚½‚̃`[ƒ€‚ª‚â‚Á‚Ä‚¢‚邱‚Æ‚ðŠO•”ŽÒ‚âãŽi‚ÉŒ©‚¹‚é•û–@‚Æ‚µ‚Ä–ð—§‚¿‚Ü‚·B‚±‚Ì‚½‚ßA’ZŠúŠÔ‚ÅÅV‚Ì‚à‚̂ɂ·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�����`�[���~�[�e�B���O�A�f���A�������A�\�肳�ꂽ�����I�Ȋ����A�����e�X�g�A�O���҂Ƃ̑Î��A�a�C�A�x�ÉA�������i�̃����e�i���X�A�J���‹��̃����e�i���X�ȂÇA�v���Ɏ��Ԃ��܂܂��Ă��邱�Ƃ��m�F�����������B�v���W�F�N�g�v���ÍA���Ȃ��₠�Ȃ��̃`�[���������Ă��邱�Ƃ��O���҂����i�Ɍ��������@�Ƃ��Ė𗧂��܂��B���̂��ßA�Z���ԂÅÅV�̂��̂ɂ����K�v�������܂��B -Next [How to Manage Third-Party Software Risks](02-How to Manage Third-Party Software Risks.md) +Next [How to Manage Third-Party Software Risks](02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) diff --git a/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index 6bfa43b..5d6ba67 100644 --- a/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -1,11 +1,11 @@ # How to Manage Third-Party Software Risks [//]: # (Version:1.0.0) -ƒvƒƒWƒFƒNƒg‚Í‚µ‚΂µ‚ÎAŠÇ—‚µ‚Ä‚¢‚È‚¢‘gD‚É‚æ‚Á‚Ä쬂³‚ꂽƒ\ƒtƒgƒEƒFƒA‚Ɉˑ¶‚µ‚Ü‚·BŠÖŒW‚·‚é‚·‚ׂĂÌl‚ª”Fޝ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‘æŽOŽÒ‚̃\ƒtƒgƒEƒFƒA‚ɂ͑傫‚ÈƒŠƒXƒN‚ª‚ ‚è‚Ü‚·B +�v���W�F�N�g�͂��΂��ÎA�Ǘ����Ă��Ȃ��g�D�ɂ����Äì¬ï¿½ï¿½ï¿½ê‚½ï¿½\�t�g�E�F�A�Ɉˑ����܂��B�֌W���邷�ׂĂÌl���F�����Ȃ����΂Ȃ��Ȃ����O�҂̃\�t�g�E�F�A�ɂ͑傫�ȃ��X�N�������܂��B -Œˆ‚µ‚ÄAö‹C‚ɂǂñ‚ÈŠó–]‚à‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñB Vapor‚ÍA–ñ‘©‚³‚ê‚Ä‚¢‚邪‚Ü‚¾—˜—p‰Â”\‚ł͂Ȃ¢‚ÆŽå’£‚³‚ê‚Ä‚¢‚éƒ\ƒtƒgƒEƒFƒA‚Ì‚±‚Ƃł·B‚±‚ê‚Íň«‚Ì•û–@‚Å‚·B“Á’è‚Ì‹@”\‚ð”õ‚¦‚½“Á’è‚Ì»•i‚ð“Á’è‚Ì“ú•t‚ÉƒŠƒŠ[ƒX‚·‚邯‚¢‚¤ƒ\ƒtƒgƒEƒFƒAŠé‹Æ‚Ì–ñ‘©‚ð’P‚ɉù‹^“I‚É‚·‚é‚̂͌«–¾‚ł͂Ȃ¢B‚»‚ê‚ðŠ®‘S‚É–³Ž‹‚µA‚ ‚È‚½‚ª‚»‚ê‚ð•·‚¢‚½‚±‚Æ‚ð–Y‚ê‚邱‚Ƃ͂¸‚Á‚ÆŒ«–¾‚Å‚·B‚ ‚È‚½‚̉ïŽÐ‚ªŽg—p‚µ‚Ä‚¢‚é‘—Þ‚É‘‚«—¯‚߂Ă͂¢‚¯‚Ü‚¹‚ñB +�����ÄA���C�ɂǂ��Ȋ��]�����Ă͂����܂����B Vapor�ÍA�ñ‘©‚����Ă��邪�܂����p�”\�ł͂Ȃ��Ǝ咣�����Ă����\�t�g�E�F�A�̂��Ƃł��B�����Íň��̕��@�ł��B�����̋@�\�������������Ì��i�������̓��t�Ƀ����[�X�����Ƃ����\�t�g�E�F�A���Ƃ̖ñ‘©‚��P�ɉ��^�I�ɂ����̂͌����ł͂Ȃ��B���������S�ɖ������A���Ȃ��������𕷂������Ƃ��Y���邱�Ƃ͂����ƌ����ł��B���Ȃ��̉��Ђ��g�p�����é‘�ނÉ������߂Ă͂����܂����B -ƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ªŒÍЉ‚µ‚Ä‚¢‚È‚¢ê‡‚Å‚àA‚»‚ê‚͂܂¾ŠëŒ¯‚Å‚·‚ªA­‚È‚­‚Æ‚à‚»‚ê‚ÍŽæ‚è‘g‚Þ‚±‚Æ‚ª‚Å‚«‚郊ƒXƒN‚Å‚·BƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ðŽg—p‚·‚邱‚Æ‚ðŒŸ“¢‚µ‚Ä‚¢‚éꇂÍA‘Šú‚É•]‰¿‚µ‚Ä•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BlX‚ÍA3‚‚̻•i‚Ì‚»‚ꂼ‚ê‚ɂ‚¢‚Ä“KØ«‚ð•]‰¿‚·‚é‚Ì‚É2TŠÔ‚©2‚©ŒŽ‚©‚©‚邯•·‚¢‚Ä‚¢‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‰Â”\‚ÈŒÀ‚è‘‚­s‚¤•K—v‚ª‚ ‚è‚Ü‚·B“K؂ȕ]‰¿‚È‚µ‚ÉA“‡‚̃RƒXƒg‚ð³Šm‚É„’è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB +�T�[�h�p�[�e�B�̃\�t�g�E�F�A���͊����Ă��Ȃ��ê‡ï¿½Å‚��A�����͂܂��댯�ł����A���Ȃ��Ƃ������͎����g�ނ��Ƃ��ł��郊�X�N�ł��B�T�[�h�p�[�e�B�̃\�t�g�E�F�A���g�p���邱�Ƃ��������Ă����ê‡ï¿½ÍA�����ɕ]�����ĕ]�������K�v�������܂��B�l�X�ÍA3�‚Ì��i�̂��ꂼ���ɂ‚��ēK�Øï¿½ï¿½ï¿½ï¿½]�������̂�2�T�Ԃ�2�����������ƕ����Ă��Ȃ����������܂��ñ‚ªA�”\�Ȍ��è‘���s���K�v�������܂��B�K�؂ȕ]���Ȃ��ÉA�����̃R�X�g�ð³Šm�É��肷�邱�Ƃ͂ł��܂����B -“Á’è‚Ì–Ú“I‚Ì‚½‚߂̊ù‘¶‚̃T[ƒhƒp[ƒeƒBƒ\ƒtƒgƒEƒFƒA‚Ì“K‡«‚ð—‰ð‚·‚邱‚Æ‚ÍA”ñí‚É•”‘°“I‚È’mޝ‚Å‚·B‚»‚ê‚Í”ñí‚ÉŽåŠÏ“I‚ÅAˆê”Ê‚Éê–副‚É‹Z‚µ‚Ä‚¢‚Ü‚·B‚»‚ê‚ç‚Ìê–副‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA‘½‚­‚ÌŽžŠÔ‚ðß–ñ‚Å‚«‚Ü‚·B‘½‚­‚Ìê‡AƒvƒƒWƒFƒNƒg‚̓T[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚Ɉˑ¶‚·‚邽‚ßA“‡‚ªŽ¸”s‚·‚邯ƒvƒƒWƒFƒNƒg‚ÍŽ¸”s‚µ‚Ü‚·B‚»‚̂悤‚ÈƒŠƒXƒN‚ðƒXƒPƒWƒ…[ƒ‹‚Å‘–ʂŖ¾Šm‚É•\Œ»‚µ‚Ä‚­‚¾‚³‚¢BƒŠƒXƒN‚ð‘Šú‚Éœ‹Ž‚Å‚«‚È‚¢ê‡‚ÍAŽg—p‰Â”\‚ȕʂ̃VƒXƒeƒ€‚â‹@”\‚ðŽ©•ª‚Å쬂·‚é‚È‚ÇA‹Ù‹}Žž‘ΉžŒv‰æ‚𗧂ĂĂ­‚¾‚³‚¢BƒXƒPƒWƒ…[ƒ‹‚Íö‹C‚Ɉˑ¶‚µ‚È‚¢‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B +�����̖ړI�̂��߂̊����̃T�[�h�p�[�e�B�\�t�g�E�F�A�̓K�����ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ÍA�����ɕ����I�Ȓm���ł��B�����͔����Ɏ��ϓI�ÅA���ʂÉ����Ƃɋ��Z���Ă��܂��B�������Ì����Ƃ����‚��邱�Ƃ��ł����ÎA�����̎��Ԃ��ߖ��ł��܂��B�����Ìê‡ï¿½A�v���W�F�N�g�̓T�[�h�p�[�e�B�̃\�t�g�E�F�A�V�X�e���Ɉˑ����邽�ßA���������s�����ƃv���W�F�N�g�͎��s���܂��B���̂悤�ȃ��X�N���X�P�W���[���Å��ʂŖ��m�ɕ\�������������B���X�N�ð‘Šï¿½ï¿½É����ł��Ȃ��ê‡ï¿½ÍA�g�p�”\�ȕʂ̃V�X�e�����@�\�������Åì¬ï¿½ï¿½ï¿½ï¿½ï¿½È‚ÇA�ً}���Ή��v���𗧂ĂĂ��������B�X�P�W���[���Í��C�Ɉˑ����Ȃ��悤�ɂ��Ă��������B -Next [How to Manage Consultants](03-How to Manage Consultants.md) \ No newline at end of file +Next [How to Manage Consultants](03-How%20to%20Manage%20Consultants.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 8ef504a..01c983b 100644 --- a/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -1,9 +1,9 @@ # How to Manage Consultants [//]: # (Version:1.0.0) -ƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ðŽg—p‚µ‚Ü‚·‚ªA‚»‚ê‚É—Š‚ç‚È‚¢‚Å‚­‚¾‚³‚¢B”Þ‚ç‚Í‚·‚΂炵‚¢lX‚Å‚ ‚èA‘å‚¢‚É‘¸Œh‚³‚ê‚é‚ׂ«‚Å‚·B”Þ‚ç‚Í‘½‚­‚̈قȂéƒvƒƒWƒFƒNƒg‚ðŒ©‚Ä‚¢‚é‚Ì‚ÅA“Á’è‚̃eƒNƒmƒƒW‚âƒvƒƒOƒ‰ƒ~ƒ“ƒOƒeƒNƒjƒbƒN‚ɂ‚¢‚Ă̒mޝ‚ªA‚ ‚È‚½‚Ì‚à‚Ì‚æ‚è‚à‚µ‚΂µ‚Εª‚©‚è‚Ü‚·B‚»‚ê‚ç‚ðŽg—p‚·‚éÅ‘P‚Ì•û–@‚ÍA‹³Žt‚ªŽÐ“à‚Å‹³‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚É‚·‚邱‚Ƃł·B +�R���T���^���g���g�p���܂����A�����ɗ����Ȃ��ł��������B�ނ��͂��΂炵���l�X�ł����A�傢�ɑ��h�������ׂ��ł��B�ނ��͑����̈قȂ��v���W�F�N�g�����Ă����̂ÅA�����̃e�N�m���W���v���O���~���O�e�N�j�b�N�ɂ‚��Ă̒m�����A���Ȃ��̂��̂��������΂��Ε������܂��B���������g�p�����őP�̕��@�ÍA���t���Г��ŋ����邱�Ƃ��ł����悤�ɂ��邱�Ƃł��B -‚µ‚©‚µA’Êí‚Ì‹­‚݂Ǝã‚Ý‚ðŠw‚Ô‚Ì‚É\•ª‚ÈŽžŠÔ‚ª‚È‚¢‚½‚ßA’Êí‚Ì]‹Æˆõ‚Æ“¯‚¶Š´Šo‚Ń`[ƒ€‚ÉŽQ‰Á‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB”Þ‚ç‚Ìà­“IƒRƒ~ƒbƒgƒƒ“ƒg‚͂͂邩‚É’á‚¢‚Å‚·B”Þ‚ç‚Í‚æ‚èŠÈ’P‚É“®‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B‰ïŽÐ‚ª‚¤‚Ü‚­‚¢‚­‚È‚çA”Þ‚ç‚Ì—˜‰v‚Í‚ ‚܂蓾‚ç‚ê‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¢‚­‚‚©‚Í—Ç‚¢A‚¢‚­‚‚©‚Í•½‹Ï‚ÅA‚¢‚­‚‚©‚͈«‚¢‚Å‚·‚ªA‚ ‚È‚½‚̃Rƒ“ƒTƒ‹ƒ^ƒ“ƒg‚Ì‘I‘ð‚Í‚ ‚È‚½‚Ì]‹Æˆõ‚Ì‘I‘ð‚Ù‚ÇTd‚ł͂Ȃ¢‚Å‚µ‚傤A‚ ‚È‚½‚͈«‚¢‚à‚̂𓾂é‚Å‚µ‚傤B +�������A�Ê��̋��݂Ǝ��݂��w�Ԃ̂É\���Ȏ��Ԃ��Ȃ����ßA�Ê��Ì]�ƈ��Ɠ������o�Ń`�[���ɎQ�����邱�Ƃ͂ł��܂����B�ނ��Ì����I�R�~�b�g�����g�͂͂邩�ɒႢ�ł��B�ނ��͂����ȒP�ɓ������Ƃ��ł��܂��B���Ђ����܂������Ȃ��A�ނ��̗��v�͂��܂蓾�����Ȃ����������܂����B�����‚��͗ǂ��A�����‚��͕��ςÅA�����‚��͈����ł����A���Ȃ��̃R���T���^���g�̑I���͂��Ȃ��Ì]�ƈ��̑I���قÇT�d�ł͂Ȃ��ł��傤�A���Ȃ��͈������̂𓾂��ł��傤�B -ƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ªƒR[ƒh‚ð‘‚­‚‚à‚è‚È‚çA‚»‚ê‚ðTd‚ÉŒŸ“¢‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBƒŒƒrƒ…[‚³‚ê‚Ä‚¢‚È‚¢‘å‚«‚ȃR[ƒhƒuƒƒbƒN‚ÌƒŠƒXƒN‚𔺂¤ƒvƒƒWƒFƒNƒg‚ÌÅŒã‚ɂ͓ž’B‚Å‚«‚Ü‚¹‚ñB‚±‚ê‚ÍŽÀۂɂ͂·‚ׂẴ`[ƒ€ƒƒ“ƒo[‚É“–‚Ă͂܂è‚Ü‚·‚ªA’Êí‚Í‚ ‚È‚½‚ɋ߂¢ƒ`[ƒ€ƒƒ“ƒo[‚Ì’mޝ‚ª‘‚¦‚Ü‚·B +�R���T���^���g���R�[�h�������‚����Ȃ��A�������T�d�Ɍ������Ȃ����΂Ȃ��܂����B���r���[�����Ă��Ȃ��傫�ȃR�[�h�u���b�N�̃��X�N�𔺂��v���W�F�N�g�ÌŌ��ɂ͓��B�ł��܂����B�����͎��ۂɂ͂��ׂẴ`�[�������o�[�ɓ��Ă͂܂��܂����A�Ê��͂��Ȃ��ɋ߂��`�[�������o�[�̒m���������܂��B -Next [How to Communicate the Right Amount](04-How to Communicate the Right Amount.md) \ No newline at end of file +Next [How to Communicate the Right Amount](04-How%20to%20Communicate%20the%20Right%20Amount.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index e27e0c4..c4dba8a 100644 --- a/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -1,7 +1,7 @@ # How to Communicate the Right Amount [//]: # (Version:1.0.0) -Td‚ɉï‹c”ï‚ðl—¶‚µ‚Ä‚­‚¾‚³‚¢B ‚»‚ÌŠúŠÔ‚ÉŽQ‰ÁŽÒ‚Ì”‚ðŠ|‚¯‚½*”ï—p‚ª‚©‚©‚è‚Ü‚·B ‰ï‹c‚ª•K—v‚Èê‡‚à‚ ‚è‚Ü‚·‚ªA’Êí‚ͬ‹K–͂ł·B ¬‹K–͂ȉï‹c‚ł̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽ¿‚ÍŒüサA‘S‘Ì“I‚É–³‘ʂɂȂ鎞ŠÔ‚Í­‚È‚­‚È‚è‚Ü‚·B ‰ï‹c‚É’N‚©‚ª‘Þ‹ü‚µ‚Ä‚¢‚éꇂÍA‰ï‹c‚𬂳‚­‚·‚é‚ׂ«‚Å‚ ‚邯‚¢‚¤’›Œó‚Æ‚µ‚Ä‚±‚ê‚ðŽæ‚éB +�T�d�ɉ��c�����l�������������B ���̊��ԂɎQ���҂Ì����|����*���p���������܂��B ���c���K�v�Èê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚����A�Ê��Í��K�͂ł��B ���K�͂ȉ��c�ł̃R�~���j�P�[�V�����̎��͌��サ�A�S�̓I�ɖ��ʂɂȂ鎞�ԂÍ��Ȃ��Ȃ��܂��B ���c�ɒN�����ދ����Ă����ê‡ï¿½ÍA���c�������������ׂ��ł����Ƃ��������Ƃ��Ă����������B -”ñŒöŽ®‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‘£i‚·‚邽‚߂ɂÍA‰Â”\‚ÈŒÀ‚è‚Ì‚±‚Æ‚ªs‚í‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢B ‚æ‚è•Ö—˜‚Èì‹Æ‚ÍA‘¼‚ÌŽžŠÔ‚æ‚è‚à“¯—»‚Ƃ̃‰ƒ“ƒ`’†‚És‚í‚ê‚Ü‚·B ‘½‚­‚ÌŠé‹Æ‚ª‚±‚ÌŽ–ŽÀ‚ð”Fޝ‚µ‚½‚èƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢‚±‚Ƃ͎c”O‚Å‚·B +�������̃R�~���j�P�[�V�����ð‘£i���邽�߂ɂÍA�”\�Ȍ����̂��Ƃ��s�����Ȃ����΂Ȃ��Ȃ��B �����֗��È��ƂÍA���̎��Ԃ����������Ƃ̃����`���És�����܂��B �����̊��Ƃ����̎������F���������T�|�[�g���Ă��Ȃ����Ƃ͎c�O�ł��B -Next [How to Disagree Honestly and Get Away with It](05-How to Disagree Honestly and Get Away with It.md) +Next [How to Disagree Honestly and Get Away with It](05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) diff --git a/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index c2c882d..14c9013 100644 --- a/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -1,11 +1,11 @@ # How to Disagree Honestly and Get Away with It [//]: # (Version:1.0.0) -ˆÓŒ©‚Ì•sˆê’v‚Í—Ç‚¢”»’f‚ð‚·‚éâD‚Ì‹@‰ï‚Å‚·‚ªA”÷–­‚Ɉ—‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ªŽvl‚ð“K؂ɕ\Œ»‚µAŒˆ’肪‰º‚³‚ê‚é‘O‚É•·‚¢‚½‚ÆŽv‚¤‚±‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B‚»‚Ìꇂ͉½‚àŒ¾‚¤‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ª‚»‚ê‚É“¯ˆÓ‚µ‚È‚­‚Ä‚àA‚ ‚È‚½‚ªŒˆ’è‚Ì”wŒã‚É—§‚‚©‚Ç‚¤‚©‚ðŒˆ‚ß‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚ª“¯ˆÓ‚µ‚È‚¢‚É‚à‚©‚©‚í‚炸‚±‚ÌŒˆ’è‚ðŽxŽ‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA‚»‚¤Œ¾‚¢‚È‚³‚¢B‚±‚ê‚ÍA‚ ‚È‚½‚ª“Æ—§‚µ‚Ä‚¨‚èAƒCƒGƒXEƒ}ƒ“‚ł͂Ȃ­AŒˆ’è‚Æƒ`[ƒ€EƒvƒŒ[ƒ„[‚ð‘¸d‚µ‚Ä‚¢‚邽‚ßA‚ ‚È‚½‚ª‚Ç‚ê‚Ù‚Ç‹Md‚Ȃ̂©‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·B +�ӌ��̕s���v�͗ǂ����f���������D�̋@���ł����A�����É��������K�v�������܂��B���Ȃ����v�l���K�؂ɕ\�����A���肪���������O�ɕ������Ǝv�����Ƃ������Ă��܂��B���Ìê‡ï¿½Í‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Æ‚͂����܂����B���Ȃ��������ɓ��ӂ��Ȃ��Ă��A���Ȃ��������̔w���ɗ��‚��ǂ��������߂��ׂ��ł��B���Ȃ������ӂ��Ȃ��ɂ��������炸���̌������x�����邱�Ƃ��ł����ÎA���������Ȃ����B�����ÍA���Ȃ����Ɨ����Ă����A�C�G�X�E�}���ł͂Ȃ��A�����ƃ`�[���E�v���[���[�ð‘¸d���Ă��邽�ßA���Ȃ����ǂ��قNjM�d�Ȃ̂��������Ă��܂��B -ˆÓŽvŒˆ’èŽÒ‚ª‚ ‚È‚½‚̈ӌ©‚ð\•ª‚ɶ‚©‚¹‚È‚©‚Á‚½‚Æ‚«‚ÉA‚ ‚È‚½‚ª”½‘΂·‚錈’è‚ð‰º‚·‚±‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ÌŒãA‰ïŽÐ‚â•”‘°‚Ì—˜‰v‚ÉŠî‚¢‚Ä–â‘è‚ð’ñ‹N‚·‚é‚©‚Ç‚¤‚©‚ð•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ꂪ‚ ‚È‚½‚̈ӌ©‚̬‚³‚ȊԈႢ‚Å‚ ‚é‚È‚çA‚»‚ê‚ÍÄl‚·‚鉿’l‚ª‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚̈ӌ©‚ɑ傫‚ȊԈႢ‚ª‚ ‚éꇂÍA‚à‚¿‚ë‚ñ‹c˜_‚ð’ñަ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +�ӎv�����҂����Ȃ��̈ӌ����\���É������Ȃ������Ƃ��ÉA���Ȃ������΂��錈�����������Ƃ������܂��B���̌��A���Ђ╔���̗��v�Ɋ��Â��Ė��������N���邩�ǂ������]�������K�v�������܂��B���ꂪ���Ȃ��̈ӌ��Ì����ȊԈႢ�ł����Ȃ��A�����ÍÄl���鉿�l���Ȃ����������܂����B���Ȃ��̈ӌ��ɑ傫�ȊԈႢ�������ê‡ï¿½ÍA���������c�_���ñަ‚����K�v�������܂��B -’ÊíA‚±‚ê‚Í–â‘è‚ł͂ ‚è‚Ü‚¹‚ñBƒXƒgƒŒƒX‚Ì‘½‚¢ó‹µ‚Å‚ÍA‚¢‚­‚‚©‚̃p[ƒ\ƒiƒŠƒeƒBƒ^ƒCƒv‚Å‚ÍA‚±‚ê‚ÍŒÂl“I‚È‚à‚̂ɂ‚Ȃª‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎA”ñí‚É—D‚ꂽƒvƒƒOƒ‰ƒ}[‚̂Ȃ©‚É‚ÍA‚»‚ꂪŠÔˆá‚Á‚Ä‚¢‚邯M‚¸‚鳓–‚È——R‚ª‚ ‚éꇂłàAˆÓŽvŒˆ’è‚É’§í‚·‚邽‚߂ɕK—v‚ÈŽ©M‚ª‚È‚¢‚à‚Ì‚ª‚ ‚è‚Ü‚·Bň«‚Ì󋵂łÍAˆÓŽvŒˆ’èŽÒ‚Í•sˆÀ’è‚Å‚ ‚èAŽ©‚ç‚ÌŒ ŒÀ‚ɑ΂·‚éŒÂl“I‚È’§í‚ÆŒ©‚È‚·B‚±‚̂悤‚È󋵂łÍAlX‚Í”]‚Ìà¦’Ž—Þ‚Ì•”•ª‚É”½‰ž‚·‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚­‚±‚Æ‚ªÅ‘P‚Å‚·B‚ ‚È‚½‚Í‹c˜_‚ð”ñŒöŠJ‚Å’ñަ‚µAV‚µ‚¢’mޝ‚ª‚ǂ̂悤‚ÉŒˆ’肪‰º‚³‚ꂽ‚©‚ðŽ¦‚µ‚Ă݂é‚ׂ«‚Å‚·B +�Ê��A�����͖����ł͂����܂����B�X�g���X�̑����󋵂łÍA�����‚��̃p�[�\�i���e�B�^�C�v�łÍA�����͌Âl�I�Ȃ��̂ɂ‚Ȃ����”\���������܂��B���Ƃ��ÎA�����ɗD�ꂽ�v���O���}�[�̂Ȃ��ɂÍA���ꂪ�Ԉ����Ă����ÆM���é³ï¿½ï¿½ï¿½È—��R�������ê‡ï¿½Å‚��A�ӎv�����ɒ��킷�邽�߂ɕK�v�Ȏ��M���Ȃ����̂������܂��B�ň��Ì󋵂łÍA�ӎv�����҂͕s�����ł����A�����̌����ɑ΂����Âl�I�Ȓ����ƌ��Ȃ��B���̂悤�È󋵂łÍA�l�X�͔]��঒��ނ̕����ɔ������邱�Ƃ��o���Ă������Ƃ��őP�ł��B���Ȃ��͋c�_�������J�Œñަ‚��A�V�����m�����ǂ̂悤�Ɍ��肪�����ꂽ���������Ă݂��ׂ��ł��B -ˆÓŽvŒˆ’肪‹t“]‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚É‚©‚©‚í‚炸A‘ã‘ÖŒˆ’è‚ªŠ®‘S‚É’²¸‚³‚ꂽ‚Ì‚ÅA‚ ‚È‚½‚Íu‚ ‚È‚½‚É‚»‚¤Œ¾‚Á‚½v‚ÆŒ¾‚¤‚±‚Ƃ͌ˆ‚µ‚Ăł«‚È‚¢‚±‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B +�ӎv���肪�t�]���Ă��邩�ǂ����ɂ������炸�A���֌��肪���S�ɒ������ꂽ�̂ÅA���Ȃ��Íu���Ȃ��ɂ����������v�ƌ������Ƃ͌����Ăł��Ȃ����Ƃ��Y���Ȃ��ł��������B -Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How to Tradeoff Quality Against Development Time.md) +Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) diff --git a/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index 7ec8089..e9dee43 100644 --- a/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -1,11 +1,11 @@ # How to Fight Schedule Pressure [//]: # (Version:1.0.0) -»•i‰»‚܂ł̎žŠÔ‚Ì’Zk‚ÍA‚·‚®‚ꂽ»•i‚ðv‘¬‚É’ñ‹Ÿ‚·‚邯‚¢‚¤ƒvƒŒƒbƒVƒƒ[‚Å‚·B‚»‚ê‚Íà­“IŒ»ŽÀ‚𔽉f‚µ‚Ä‚¨‚èA‚ ‚鎞“_‚܂Ō’‘S‚Ȃ̂ŗǂ¢‚Å‚·BƒXƒPƒWƒ…[ƒ‹ˆ³—Í‚ÍA‘—’B‰Â”\‚È‘¬“x‚æ‚è‚à‘¬‚­‘—’B‚·‚鈳—͂ł ‚èA–³‘ʂł ‚èA•sŒ’‘S‚Å‚ ‚èA‚ ‚Ü‚è‚É‚àˆê”Ê“I‚Å‚ ‚éB +���i���܂ł̎��Ԃ̒Z�k�ÍA�����ꂽ���i���v���ɒñ‹Ÿ‚����Ƃ����v���b�V���[�ł��B�����Í����I�����𔽉f�������A���鎞�_�܂Ō��S�Ȃ̂ŗǂ��ł��B�X�P�W���[�����͂ÍA���B�”\�ȑ��x�������������B���鈳�͂ł����A���ʂł����A�s���S�ł����A���܂��ɂ����ʓI�ł����B -ƒXƒPƒWƒ…[ƒ‹ˆ³—͂͂¢‚­‚‚©‚Ì——R‚Å‘¶Ý‚µ‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚𖱂߂él‚½‚¿‚ÍAŽ„‚½‚¿‚ªŽ‚Á‚Ä‚¢‚é‹­‚¢ŽdŽ–—Ï—‚ƃvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Æ‚ª‚Ç‚ê‚Ù‚ÇŠy‚µ‚¢‚©‚ð\•ª‚É—‰ð‚µ‚Ä‚¢‚Ü‚¹‚ñB‚¨‚»‚ç‚­A”Þ‚ç‚ÍŽ©•ª‚½‚¿‚Ìs“®‚ðŽ„‚½‚¿‚ɓЉe‚·‚é‚Ì‚ÅA‘‚­‚»‚ê‚ð‹‚߂邱‚Æ‚ÍAŽ„‚½‚¿‚ª‚æ‚è‘‚­‚»‚±‚É“ž’B‚·‚邿‚¤‚É‚à‚Á‚Æ“­‚­‚悤‚É‚È‚é‚ÆM‚¶‚Ä‚¢‚Ü‚·B‚±‚ê‚Í‚¨‚»‚ç‚­ŽÀۂɂ͓–‚Ă͂܂è‚Ü‚·‚ªAŒø‰Ê‚Í”ñí‚ɬ‚³‚­A‘¹‚Í”ñí‚ɑ傫‚¢‚Å‚·B‚³‚ç‚ÉA”Þ‚ç‚ÍŽÀۂɃ\ƒtƒgƒEƒFƒA‚ðì‚邽‚߂ɕK—v‚È‚à‚̂ɂ‚¢‚Ă͌©‚¦‚Ü‚¹‚ñB‚»‚ê‚ðŒ©‚é‚±‚Æ‚ª‚Å‚«‚¸A‚»‚ꎩ‘Ì‚ð쬂·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚¢‚¤‚±‚Æ‚ÍA”ނ炪‚Å‚«‚é—Bˆê‚Ì‚±‚Æ‚ÍAŽs꓊“ü‚܂ł̎žŠÔ‚̈³”—‚Æ‚»‚ê‚ÉŠÖ‚·‚éƒvƒƒOƒ‰ƒ}[‚Ì‘›‚¬‚Å‚ ‚éB +�X�P�W���[�����͂͂����‚��̗��R�ő��݂��܂��B�v���O���}�[�𖱂߂��l�����ÍA�������������Ă��鋭���d���ϗ��ƃv���O���}�[�ɂȂ邱�Ƃ��ǂ��قNJy���������\���ɗ������Ă��܂����B�����炭�A�ނ��͎��������Ìs�����������ɓ��e�����̂ÅA�������������߂邱�ƂÍA�����������è‘�������ɓ��B�����悤�ɂ����Ɠ����悤�ɂȂ��ÆM���Ă��܂��B�����͂����炭���ۂɂ͓��Ă͂܂��܂����A���ʂ͔����É������A�����͔����ɑ傫���ł��B�����ÉA�ނ��͎��ۂɃ\�t�g�E�F�A�����邽�߂ɕK�v�Ȃ��̂ɂ‚��Ă͌����܂����B���������邱�Ƃ��ł����A���ꎩ�̂��ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��Ȃ��Ƃ������ƂÍA�ނ炪�ł����B���̂��ƂÍA�s�꓊���܂ł̎��Ԃ̈����Ƃ����Ɋւ����v���O���}�[�̑����ł����B -ƒXƒPƒWƒ…[ƒ‹‚̈³—Í‚Æí‚¤‚½‚߂̌®‚ÍA‚»‚ê‚ðƒ^ƒCƒ€EƒgƒDEƒ}[ƒPƒbƒg‚̈³—͂ɕς¦‚邱‚Ƃł·B—˜—p‰Â”\‚ȘJ“­‚Æ»•i‚Ƃ̊֌W‚ð‰ÂŽ‹‰»‚·‚邽‚߂̕û–@B³’¼‚ÅAÚׂÈA‚»‚µ‚ÄÅ‚àd—v‚È‚à‚Ì‚ðì‚èo‚·‚±‚Æ‚ÍA‚±‚ê‚ðs‚¤‚½‚ß‚ÌÅ‘P‚Ì•û–@‚Å‚·B‚±‚ê‚É‚ÍA‰Â”\«‚Ì‚ ‚é‹@”\‚̃gƒŒ[ƒhƒIƒt‚ɂ‚¢‚Ă̓K؂ȊǗã‚ÌŒˆ’è‚ð‰Â”\‚É‚·‚邯‚¢‚¤’ljÁ‚Ì—˜“_‚ª‚ ‚è‚Ü‚·B +�X�P�W���[���̈��͂Æí‚¤ï¿½ï¿½ï¿½ß‚̌��ÍA�������^�C���E�g�D�E�}�[�P�b�g�̈��͂ɕς��邱�Ƃł��B���p�”\�ȘJ���Æï¿½ï¿½i�Ƃ̊֌W���Ž������邽�߂̕��@�B�����ÅA�ÚׂÈA�����Äł��d�v�Ȃ��̂������o�����ƂÍA�������s�����߂ÌÅ‘P�̕��@�ł��B�����ɂÍA�”\���̂����@�\�̃g���[�h�I�t�ɂ‚��Ă̓K�؂ȊǗ����̌������”\�ɂ����Ƃ����lj��̗��_�������܂��B -Œ©Ï‚à‚肪–¾”’‚É‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢d—v‚È“´Ž@‚ÍA˜J“­‚͂قڔñˆ³k«‚̉t‘̂ł ‚邯‚¢‚¤‚±‚Ƃł·BƒRƒ“ƒeƒi‚Ì—eψÈã‚̃Rƒ“ƒeƒi‚É‚à‚Á‚Æ‘½‚­‚Ì…‚ð“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚éˆÓ–¡‚Å‚ÍAƒvƒƒOƒ‰ƒ}[‚Íuâ‘Îv‚ÆŒ¾‚Á‚Ă͂¢‚¯‚Ü‚¹‚ñ‚ªAu–XŽq‚Í‚ ‚È‚½‚ª–]‚Þ‚±‚Æ‚ð’ú‚ß‚é‚Å‚µ‚傤‚©Hv‚Æ‚¢‚¤–¾Šm‚ÈŒ©Ï‚à‚è‚ðo‚·‚Ì‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă̌hˆÓ‚ð‚‚߂邱‚ƂɂȂè‚Ü‚·B‚±‚ê‚Í‘¼‚Ìê–副‚Ìs“®‚Å‚·BƒvƒƒOƒ‰ƒ}[‚̘J—Í‚ªŒ©‚¦‚é‚Å‚µ‚傤B”ñŒ»ŽÀ“I‚ȃXƒPƒWƒ…[ƒ‹‚ðÝ’è‚·‚邱‚Æ‚ÍA’N‚ɂƂÁ‚Ä‚à’ÉŠ´‚·‚邱‚Ƃł·BƒvƒƒOƒ‰ƒ}‚Í‚¤‚ñ‚´‚è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB”Þ‚ç‚É”ñŒ»ŽÀ“I‚È‚±‚Æ‚ð‚·‚é‚͖̂³—ç‚È‚±‚Ƃł·B Extreme Programming‚Í‚±‚ê‚ð‘•‚µA‚»‚ÌŽü‚è‚ɃvƒƒZƒX‚ð\’z‚µ‚Ü‚·BŽ„‚ÍA‚·‚ׂĂ̓ǎ҂ª‚»‚ê‚ðŽg—p‚·‚é‚Ì‚É\•ª‚ȂقÇK‰^‚ɂȂ邱‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B +���ς��肪�����ɂ��Ȃ����΂Ȃ��Ȃ��d�v�ȓ��@�ÍA�J���͂قڔñˆ³k���̉t�̂ł����Ƃ������Ƃł��B�R���e�i�̗e�ψÈ��̃R���e�i�ɂ����Ƒ����Ì��������邱�Ƃ��ł��܂��B�����Ӗ��łÍA�v���O���}�[�Íu���Îv�ƌ����Ă͂����܂��ñ‚ªA�u�X�q�͂��Ȃ����]�ނ��Ƃ����߂��ł��傤���H�v�Ƃ������m�Ȍ��ς������o���̂ÍA�v���O���}�[�ɂƂ��Ă̌h�ӂ����߂邱�ƂɂȂ��܂��B�����͑��Ì����ƂÌs���ł��B�v���O���}�[�̘J�͂��������ł��傤�B�ñŒ»Žï¿½ï¿½I�ȃX�P�W���[�����ݒ肷�邱�ƂÍA�N�ɂƂ��Ă��Ɋ����邱�Ƃł��B�v���O���}�͂��ñ‚´‚肷�邱�Ƃ͂ł��܂����B�ނ��ɔñŒ»Žï¿½ï¿½I�Ȃ��Ƃ������͖̂����Ȃ��Ƃł��B Extreme Programming�͂����ð‘•����A���̎����Ƀv���Z�X���\�z���܂��B���ÍA���ׂĂ̓ǎ҂��������g�p�����̂É\���ȂقÇK�^�ɂȂ邱�Ƃ������Ă��܂��B -Next [How to Understand the User](02-How to Understand the User.md) \ No newline at end of file +Next [How to Understand the User](02-How%20to%20Understand%20the%20User.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index 8829b11..4652ebf 100644 --- a/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -1,17 +1,17 @@ # How to Understand the User [//]: # (Version:1.0.0) -ƒ†[ƒU[‚ð—‰ð‚µAãŽi‚Ƀ†[ƒU[‚ð—‰ð‚³‚¹‚é‚̂͂ ‚È‚½‚Ì‹`–±‚Å‚·Bƒ†[ƒU[‚ÍŽ©•ª‚Ì»•i‚Ì쬂ɖ§Ú‚ÉŠÖ‚í‚Á‚Ä‚¢‚È‚¢‚½‚ßA­‚µˆá‚Á‚½“®ì‚ð‚µ‚Ü‚·B +���[�U�[�ð—‰ï¿½ï¿½ï¿½ï¿½A���i�Ƀ��[�U�[�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚͂��Ȃ��̋`���ł��B���[�U�[�͎����Ì��i�Ìì¬ï¿½É–��ڂɊւ����Ă��Ȃ����ßA�������������������܂��B -- ƒ†[ƒU[‚ÍAˆê”Ê“I‚É’Z‚¢”­Œ¾‚ð‚µ‚Ü‚·B -- ƒ†[ƒU[‚ÍŽ©•ª‚ÌŽdŽ–‚ðŽ‚Á‚Ä‚¢‚Ü‚·B”Þ‚ç‚ÍŽå‚ÉA‘å‚«‚ȉü‘P‚ł͂Ȃ­A‚ ‚È‚½‚Ì»•i‚̬‚³‚ȉü‘P‚ðl‚¦‚é‚Å‚µ‚傤B -- ƒ†[ƒU[‚ÍA»•iƒ†[ƒU[‚Ì‘Sg‚ð•\‚·ƒrƒWƒ‡ƒ“‚ðŽ‚Â‚±‚Ƃ͂ł«‚Ü‚¹‚ñB +- ���[�U�[�ÍA���ʓI�ɒZ�����������܂��B +- ���[�U�[�͎����̎d���������Ă��܂��B�ނ��͎��ÉA�傫�ȉ��P�ł͂Ȃ��A���Ȃ��Ì��i�Ì����ȉ��P���l�����ł��傤�B +- ���[�U�[�ÍA���i���[�U�[�̑S�g���\���r�W���������‚��Ƃ͂ł��܂����B -”ނ炪–{“–‚É—~‚µ‚¢‚à‚Ì‚ð—^‚¦‚é‚̂͂ ‚È‚½‚Ì‹`–±‚Å‚ ‚èA”ނ炪–]‚Þ‚ÆŒ¾‚Á‚Ä‚¢‚é‚à‚̂ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µA‚»‚ê‚ð”Þ‚ç‚É’ñˆÄ‚µA‚ ‚È‚½‚Ì’ñˆÄ‚ª‚ ‚È‚½‚ªŽn‚ß‚é‘O‚É–{“–‚É–]‚Þ‚à‚̂ł ‚邱‚Ƃɓ¯ˆÓ‚³‚¹‚é‚Ì‚ª—Ç‚¢‚Å‚·‚ªA‚»‚¤‚·‚éƒrƒWƒ‡ƒ“‚͂Ȃ¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚±‚ê‚ÉŠÖ‚·‚é‚ ‚È‚½Ž©g‚̃AƒCƒfƒA‚ɑ΂·‚é‚ ‚È‚½‚ÌM—Š‚Í•Ï‚í‚é‚Í‚¸‚Å‚·BŒÚ‹q‚ª–{“–‚É–]‚ñ‚Å‚¢‚邱‚Æ‚ð’m‚邯‚¢‚¤ŠÏ“_‚©‚ç‚ÍA˜ü–‚³‚ÆŒë‚Á‚½Œª‹•‚³‚Ì—¼•û‚ðŽç‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ÍÝŒv‚Æì¬‚ðŒP—û‚µ‚Ä‚¢‚Ü‚·BŽsê‚ÌŒ¤‹†ŽÒ‚ÍAlX‚ª–]‚Þ‚à‚Ì‚ð—‰ð‚·‚邿‚¤‚ÉŒP—û‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚Ì2‚‚̎í—Þ‚ÌlA‚Ü‚½‚Í“¯‚¶l‚Ì2‚‚Ìl‚¦•û‚ª’²˜a‚µ‚Ĉê‚É“­‚¢‚ÄA³‚µ‚¢ƒrƒWƒ‡ƒ“‚ðô’è‚·‚éŗǂ̋@‰ï‚ð—^‚¦‚Ü‚·B +�ނ炪�{���ɗ~�������̂��^�����̂͂��Ȃ��̋`���ł����A�ނ炪�]�ނƌ����Ă������̂ł͂����܂����B�������A�������ނ��ɒ��Ă��A���Ȃ��̒��Ă����Ȃ����n�߂��O�ɖ{���ɖ]�ނ��̂ł��邱�Ƃɓ��ӂ������̂��ǂ��ł����A���������r�W�����͂Ȃ����������܂����B�����Ɋւ��邠�Ȃ����g�̃A�C�f�A�ɑ΂��邠�Ȃ��ÌM���͕ς����͂��ł��B�ڋq���{���ɖ]���ł��邱�Ƃ��m���Ƃ����ϓ_�����ÍA�������ƌ������������̗����������K�v�������܂��B�v���O���}�[�ÍÝŒv�Æì¬ï¿½ï¿½ï¿½P�����Ă��܂��B�s���̌����҂ÍA�l�X���]�ނ��̂ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½æ‚¤ï¿½ÉŒP�������Ă��܂��B����2�‚̎��ނÌl�A�܂��͓����l��2�‚Ìl���������a���Ĉê�ɓ����ÄA�������r�W���������肷���ŗǂ̋@�����^���܂��B -ƒ†[ƒU[‚ƈê‚ɉ߂²‚·ŽžŠÔ‚ª’·‚­‚È‚ê‚΂Ȃé‚Ù‚ÇAŽÀۂɉ½‚ª¬Œ÷‚·‚é‚©‚ð—‰ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚·B‚Å‚«‚邾‚¯‚»‚ê‚ç‚ɑ΂µ‚Ä‚ ‚È‚½‚̃AƒCƒfƒA‚ðŽŽ‚»‚¤‚Æ‚·‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚ª‚Å‚«‚é‚È‚çH‚ׂĈù‚ނׂ«‚Å‚·B +���[�U�[�ƈê�ɉ߂������Ԃ������Ȃ��΂Ȃ��قÇA���ۂɉ����������邩�ð—‰ï¿½ï¿½Å‚����悤�ɂȂ��܂��B�ł��邾���������ɑ΂��Ă��Ȃ��̃A�C�f�A���������Ƃ����ׂ��ł��B���Ȃ����ł����Ȃ��H�ׂĈ��ނׂ��ł��B -Guy Kawasaki [Rules]‚ÍAƒ†[ƒU[‚ª•·‚­‚±‚ƂɉÁ‚¦‚ÄAƒ†[ƒU[‚Ìs“®‚ðŠÄŽ‹‚·‚邱‚Æ‚Ìd—v«‚ð‹­’²‚µ‚Ä‚¢‚Ü‚·B +Guy Kawasaki [Rules]�ÍA���[�U�[���������Ƃɉ����ÄA���[�U�[�Ìs�����Ď����邱�ƂÌd�v�����������Ă��܂��B -Ž„‚Í¿•‰‹ÆŽÒ‚âƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ªA‚µ‚΂µ‚Δނ炪–{“–‚É–]‚Þ‚à‚Ì‚ðŽ©‚ç‚ÌS‚Ì’†‚Å–¾Šm‚É‚·‚邿‚¤‚Ɍڋq‚É‘i‚¦‚é‘å‚«‚È–â‘è‚ð•ø‚¦‚Ä‚¢‚邯M‚¶‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ªƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ɂȂ낤‚ÆŽv‚Á‚Ä‚¢‚é‚È‚çAŽ„‚Í‚ ‚È‚½‚̃Nƒ‰ƒCƒAƒ“ƒg‚ðA”Þ‚ç‚Ì–¾Šm‚È“ª‚Ì’†‚¾‚¯‚łȂ­A”Þ‚ç‚ÌŽè’ ‚ÉŠî‚¢‚Ä‘I‚Ô‚±‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B +���Í����Ǝ҂��R���T���^���g���A���΂��Δނ炪�{���ɖ]�ނ��̂������ÌS�̒��Ŗ��m�ɂ����悤�Ɍڋq�ɑi�����傫�Ȗ����������Ă����ÆM���Ă��܂��B���Ȃ����R���T���^���g�ɂȂ낤�Ǝv���Ă����Ȃ��A���͂��Ȃ��̃N���C�A���g���A�ނ��̖��m�ȓ��̒������łȂ��A�ނ��̎蒠�Ɋ��Â��đI�Ԃ��Ƃ������߂��܂��B -Next [How to Get a Promotion](03-How to Get a Promotion.md) \ No newline at end of file +Next [How to Get a Promotion](03-How%20to%20Get%20a%20Promotion.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 06701d8..83edf95 100644 --- a/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -1,13 +1,13 @@ # How to Get a Promotion [//]: # (Version:1.0.0) -–ðŠ„‚É¸i‚³‚¹‚é‚É‚ÍA‚Ü‚¸‚»‚Ì–ðŠ„‚ðŽÀs‚µ‚Ü‚·B +�����É��i�������ɂÍA�܂����̖��������s���܂��B -ƒ^ƒCƒgƒ‹‚ɸŠi‚³‚¹‚é‚É‚ÍA‚»‚̃^ƒCƒgƒ‹‚ɉ½‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚©‚ðŒ©‚Â‚¯o‚µ‚Ä‚­‚¾‚³‚¢B +�^�C�g���É��i�������ɂÍA���̃^�C�g���ɉ������҂����Ă��邩�����‚��o�����������B -’Àã‚°‚𓾂é‚É‚ÍAî•ñ‚Å•‘•‚µ‚ÄŒð‚·‚éB +���グ�𓾂��ɂÍA�����ŕ������Č��‚����B -‚ ‚È‚½‚ªƒvƒƒ‚[ƒVƒ‡ƒ“‚ÌŠúŒÀ‚ª‰ß‚¬‚Ä‚¢‚邿‚¤‚ÉŠ´‚¶‚½‚çA‚ ‚È‚½‚ÌãŽi‚ɘb‚µ‚Ä‚­‚¾‚³‚¢B¸i‚³‚¹‚邽‚߂ɉ½‚ð‚·‚é•K—v‚ª‚ ‚é‚Ì‚©??‚𖾎¦“I‚Éq‚Ë‚ÄA‚»‚ê‚ð‚â‚낤‚Æ‚µ‚Ü‚·B‚±‚ê‚Í”nŽ­‚°‚Ä‚¢‚Ü‚·‚ªA‚µ‚΂µ‚΂ ‚È‚½‚ª‚·‚é•K—v‚ª‚ ‚邱‚Ƃɑ΂·‚é‚ ‚È‚½‚Ì”Fޝ‚ÍA‚ ‚È‚½‚ÌãŽi‚Ƃ͂©‚È‚èˆÙ‚È‚é‚Å‚µ‚傤B‚Ü‚½A‚±‚ê‚Í‚¢‚­‚‚©‚Ì“_‚Å‚ ‚È‚½‚ÌãŽi‚ðƒsƒ“Ž~‚ß‚µ‚Ü‚·B +���Ȃ����v�����[�V�����̊������߂��Ă����悤�Ɋ��������A���Ȃ��Ì��i�ɘb�����������B���i�����邽�߂ɉ��������K�v�������̂�??�𖾎��I�Éq�˂ÄA���������낤�Ƃ��܂��B�����͔n�����Ă��܂����A���΂��΂��Ȃ��������K�v�����邱�Ƃɑ΂��邠�Ȃ��̔F���ÍA���Ȃ��Ì��i�Ƃ͂��Ȃ��قȂ��ł��傤�B�܂��A�����͂����‚��̓_�ł��Ȃ��Ì��i���s���~�߂��܂��B -‚Ù‚Æ‚ñ‚ǂ̃vƒƒOƒ‰ƒ}‚ÍA‚¨‚»‚ç‚­‰½‚ç‚©‚ÌŒ`‚Å‘Š‘Î“I‚È”\—͂̌֒£‚³‚ê‚½Š´Šo‚ðŽ‚Á‚Ä‚¢‚é‚Å‚µ‚傤BŒ‹‹Ç‚̂Ƃ±‚ëA‚·‚ׂĂªƒgƒbƒv10“‚É“ü‚é‚킯‚ł͂ ‚è‚Ü‚¹‚ñI‚µ‚©‚µAŽ„‚Í^Œ•‚É•]‰¿‚³‚ê‚Ä‚¢‚È‚¢lX‚ðŒ©‚Ä‚«‚Ü‚µ‚½B‚Ý‚ñ‚Ȃ̕]‰¿‚ªí‚ÉŒ»ŽÀ‚ÉŠ®‘S‚Ƀ}ƒbƒ`‚·‚邯‚ÍŽv‚Á‚Ä‚¢‚Ü‚¹‚ñ‚ªAŽ„‚ÍlX‚ªŠT‚µ‚Ä“K“x‚ÉŒö³‚Å‚ ‚邯l‚¦‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ÌŽdŽ–‚É–Ú‚ðŒü‚¯‚邱‚ƂȂ­•]‰¿‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚Æ‚«‚É‚ÍA‹ô‘R‚âŒÂl“I‚ÈKе‚Ì‚½‚ß‚ÉA’N‚©‚É‹C•t‚©‚ê‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·BŽ©‘î‚©‚瑽‚­‚ÌŽdŽ–‚ð‚µ‚½‚èAƒ`[ƒ€‚âãŽi‚©‚ç’n—“I‚É—£‚ê‚Ä‚¢‚邯A‚±‚ê‚Í“Á‚É¢“ï‚ɂȂè‚Ü‚·B +�قƂ��ǂ̃v���O���}�ÍA�����炭���炩�̌`�ő��ΓI�Ȕ\�͂̌֒����ꂽ���o�������Ă����ł��傤�B���ǂ̂Ƃ����A���ׂĂ��g�b�v10���ɓ����킯�ł͂����܂����I�������A���Í^���ɕ]�������Ă��Ȃ��l�X�����Ă��܂����B�݂��Ȃ̕]�������Ɍ����Ɋ��S�Ƀ}�b�`�����Ƃ͎v���Ă��܂��ñ‚ªA���Íl�X���T���ēK�x�Ɍ����ł����Æl���Ă��܂��B���Ȃ��̎d���ɖڂ������邱�ƂȂ��]�����邱�Ƃ͂ł��܂����B�Ƃ��ɂÍA���R���Âl�I�ÈK���̂��߂ÉA�N���ɋC�t�����Ȃ����Ƃ������܂��B����瑽���̎d�����������A�`�[�������i�����n���I�ɗ����Ă����ÆA�����͓��É����ɂȂ��܂��B -Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How to Develop Talent.md) +Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How%20to%20Develop%20Talent.md) diff --git a/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index 083bda7..b9fde68 100644 --- a/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -1,23 +1,23 @@ # How to Develop Talent -Nietschze‚͔ނª[Stronger]‚ÆŒ¾‚Á‚½‚Æ‚«‚Ɍ֒£‚µ‚½F +Nietschze�͔ނ�[Stronger]�ƌ������Ƃ��Ɍ֒������F ->Ž„‚ð”j‰ó‚µ‚È‚¢‚à‚Ì‚ÍAŽ„‚ð‚æ‚è‹­‚­‚µ‚Ü‚·B +>�����j�󂵂Ȃ����̂ÍA�������苭�����܂��B -‚ ‚È‚½‚ÌÅ‘å‚ÌÓ”C‚Í‚ ‚È‚½‚̃`[ƒ€‚Å‚·B‚ ‚È‚½‚Í‚»‚ꂼ‚ê‚Ì‚±‚Æ‚ð‚æ‚­’m‚Á‚Ä‚¢‚é‚Í‚¸‚Å‚·B‚ ‚È‚½‚Í‚ ‚È‚½‚̃`[ƒ€‚ðˆø‚«L‚΂·‚ׂ«‚Å‚·‚ªA”Þ‚ç‚É•‰’S‚ð‚©‚¯‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚Í’ÊíA”ނ炪L‚тĂ¢‚é•û–@‚ɂ‚¢‚Ęb‚·‚ׂ«‚Å‚·B”ނ炪‚»‚ê‚𔃎û‚·‚ê‚ÎA”Þ‚ç‚Í‚¤‚Ü‚­“®‹@‚¯‚ç‚ê‚Ü‚·BŠeƒvƒƒWƒFƒNƒgA‚Ü‚½‚Í‘¼‚Ì‚·‚ׂẴvƒƒWƒFƒNƒg‚ÅA’ñˆÄ‚·‚é•û–@‚Æ‚»‚ê‚É“K‚µ‚½•û–@‚ŃXƒgƒŒƒbƒ`‚ðs‚¢‚Ü‚·B‚æ‚葽‚­‚ÌŽdŽ–‚ð—^‚¦‚邱‚Ƃł͂Ȃ­A”Þ‚ç‚ÉV‚µ‚¢ƒXƒLƒ‹‚ð—^‚¦‚½‚èAƒ`[ƒ€‚ÅV‚µ‚¢–ðŠ„‚ð‰Ê‚½‚µ‚½‚è‚·‚邱‚Ƃɂæ‚Á‚ÄA”Þ‚ç‚ðL‚΂·B +���Ȃ��Ìő��ÌÓ”C�͂��Ȃ��̃`�[���ł��B���Ȃ��͂��ꂼ���̂��Ƃ��悭�m���Ă����͂��ł��B���Ȃ��͂��Ȃ��̃`�[���������L�΂��ׂ��ł����A�ނ��ɕ��S���������ׂ��ł͂����܂����B���Ȃ��͒Ê��A�ނ炪�L�тĂ������@�ɂ‚��Ęb���ׂ��ł��B�ނ炪�����𔃎������ÎA�ނ��͂��܂����@�Â������܂��B�e�v���W�F�N�g�A�܂��͑��̂��ׂẴv���W�F�N�g�ÅA���������@�Ƃ����ɓK�������@�ŃX�g���b�`���s���܂��B���葽���̎d�����^���邱�Ƃł͂Ȃ��A�ނ��ÉV�����X�L�����^�������A�`�[���ÅV�����������ʂ������肷�邱�Ƃɂ����ÄA�ނ����L�΂��B -‚ ‚È‚½Ž©gi‚ ‚È‚½Ž©g‚ðŠÜ‚Þj‚ªŽžXޏ”s‚·‚邿‚¤‚É‚µ‚ÄA‚ ‚È‚½‚̃XƒPƒWƒ…[ƒ‹‚ʼn½‚ç‚©‚ÌŽ¸”s‚ðŒv‰æ‚·‚é‚ׂ«‚Å‚·BŒˆ‚µ‚ÄŽ¸”s‚ª‚È‚¯‚ê‚ÎA–`Œ¯Š´‚Í‚ ‚è‚Ü‚¹‚ñBŽžXޏ”s‚·‚邱‚Æ‚ª‚È‚¯‚ê‚ÎA‚ ‚È‚½‚Í\•ª‚ÉŠæ’£‚Á‚Ä‚¢‚é‚킯‚ł͂ ‚è‚Ü‚¹‚ñB’N‚©‚ªŽ¸”s‚·‚邯A¬Œ÷‚µ‚½‚©‚̂悤‚Ɉµ‚킸‚ÉA‚Å‚«‚邾‚¯‰¸‚â‚©‚É‚·‚é‚ׂ«‚Å‚·B +���Ȃ����g�i���Ȃ����g���܂Þj�����X���s�����悤�ɂ��ÄA���Ȃ��̃X�P�W���[���ʼn��炩�̎��s���v�悷���ׂ��ł��B�������s���Ȃ����ÎA�`�����͂����܂����B���X���s���邱�Ƃ��Ȃ����ÎA���Ȃ��Í\���Ɋ撣���Ă����킯�ł͂����܂����B�N�������s�����ÆA�����������̂悤�Ɉ��킸�ÉA�ł��邾�����₩�ɂ����ׂ��ł��B -Šeƒ`[ƒ€‚̃ƒ“ƒo[‚ªw“ü‚µA“®‹@•t‚¯‚³‚ê‚Ä‚¢‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚»‚¤‚łȂ¢ê‡‚ÍA”ނ炪‚¤‚Ü‚­“®‹@‚¯‚ç‚ê‚Ä‚¢‚é•K—v‚ª‚ ‚邱‚Ƃ𖾊m‚É‚»‚ꂼ‚ꎿ–₵‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚Í‚»‚ê‚ð•s–ž‚̂܂܂ɂµ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚Ý‚ñ‚È‚ª–]‚Þ‚à‚Ì‚ð’m‚Á‚Ä‚¨‚­‚ׂ«‚Å‚·B +�e�`�[���̃����o�[���w�����A���@�t�������Ă����悤�ɂ��Ă��������B�����łȂ��ê‡ï¿½ÍA�ނ炪���܂����@�����������K�v�����邱�Ƃ𖾊m�ɂ��ꂼ�ꎿ�₵�Ă��������B���Ȃ��͂������s���̂܂܂ɂ��Ȃ����΂Ȃ��Ȃ����������܂��ñ‚ªA�݂��Ȃ��]�ނ��̂��m���Ă����ׂ��ł��B -’á‚¢Žm‹C‚â•s–ž‚Ì‚½‚߂ɕ‰‰×‚𕪒S‚µ‚Ä‚¢‚È‚¢l‚ð‚ ‚«‚ç‚߂邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ç‚ð‚¤‚Ü‚­“®‹@‚¯‚ĶŽY“I‚É‚·‚邿‚¤‚É“w‚߂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚ª”E‘Ï—Í‚ðŽ‚Á‚Ä‚¢‚éŒÀ‚èA‚±‚ê‚ðˆÛŽ‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚Ì”E‘Ï‚ª”æ‚ꂽ‚çA‚»‚ê‚ç‚ðŒ‚‚Á‚Ä‚­‚¾‚³‚¢BˆÓ}“I‚ɃŒƒxƒ‹‚ð‰º‰ñ‚Á‚Äì‹Æ‚µ‚Ä‚¢‚él‚ÍAƒ`[ƒ€‚ɂƂÁ‚ÄŒö•½‚ł͂Ȃ¢‚½‚ßAƒ`[ƒ€‚ÉŽc‚葱‚¯‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB +�Ⴂ�m�C���s���̂��߂ɕ��ׂ𕪒S���Ă��Ȃ��l���������߂邱�Ƃ͂ł��܂����B���Ȃ��͂����������܂����@���Ä��Y�I�ɂ����悤�ɓw�߂Ȃ����΂Ȃ��܂����B���Ȃ����E�ϗ͂������Ă��������A�������ێ����Ă��������B���Ȃ��̔E�ς����ꂽ���A���������������������B�Ó}�I�Ƀ��x�����������Ä��Ƃ��Ă����l�ÍA�`�[���ɂƂ��Č����ł͂Ȃ����ßA�`�[���Ɏc�葱���邱�Ƃ͂ł��܂����B -‚ ‚È‚½‚̃`[ƒ€‚Ì‹­ŒÅ‚ȃƒ“ƒo[‚ÉA”Þ‚ç‚ð‹­‚­M‚¶‚Ä‚¢‚邱‚Æ‚ðAŒö‚ɘb‚·‚±‚ƂŖ¾Šm‚É‚µ‚Ü‚·BŽ^”ü‚ÍŒö‘R‚Ɣᔻƒvƒ‰ƒCƒx[ƒg‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +���Ȃ��̃`�[���̋��łȃ����o�[�ÉA�ނ��������M���Ă��邱�Ƃ��A���ɘb�����ƂŖ��m�ɂ��܂��B�^���͌��R�Ɣᔻ�v���C�x�[�g�ɂ����K�v�������܂��B -ƒ`[ƒ€‚Ì‹­‚¢ƒƒ“ƒo[‚ÍA“–‘RAƒ`[ƒ€‚ÌŽã‚¢ƒƒ“ƒo[‚æ‚è‚à“‚¢ŽdŽ–‚ð‚·‚é‚Å‚µ‚傤B‚±‚ê‚ÍŠ®‘S‚ÉŽ©‘R‚È‚±‚Ƃł ‚èA’N‚à‚ªˆê¶Œœ–½“­‚­ŒÀ‚èA’N‚à‚»‚ê‚É‚æ‚Á‚Ďז‚‚³‚ê‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñB +�`�[���̋��������o�[�ÍA���R�A�`�[���̎ア�����o�[����������d���������ł��傤�B�����͊��S�Ɏ��R�Ȃ��Ƃł����A�N�����ê¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A�N�������ɂ����Ďז������邱�Ƃ͂����܂����B -—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ª10l‚̈«‚¢ƒvƒƒOƒ‰ƒ}‚æ‚è‚à¶ŽY«‚ª‚‚¢‚Ì‚ÍA‹‹—¿‚É”½‰f‚³‚ê‚È‚¢‚Æ‚¢‚¤Šï–­‚ÈŽ–ŽÀ‚Å‚·B‚±‚ê‚ÍŠï–­‚È󋵂ðì‚èo‚µ‚Ü‚·B‚ ‚È‚½‚ÌŽã‚¢ƒvƒƒOƒ‰ƒ}‚ª‚¿‚å‚Á‚Ǝז‚‚ɂȂéꇂÍA‚ ‚È‚½‚ª‚æ‚葬‚­“®‚­‚±‚Æ‚ª‚Å‚«‚邱‚Ƃ͂µ‚΂µ‚Î^ŽÀ‚Å‚·B‚ ‚È‚½‚ª‚±‚ê‚ð‚µ‚½ê‡A‚ ‚È‚½‚ÍŽÀÛ‚É’ZŠúŠÔ‚Å‚à‚Á‚Æi•à‚ð‹‚°‚é‚Å‚µ‚傤B‚µ‚©‚µA‚ ‚È‚½‚Ì•”‘°‚ÍAŽã‚¢ƒƒ“ƒo[‚ÌŒP—ûA•”‘°‚Ì’mޝ‚Ì•‹yA‚»‚µ‚Ä‹­—͂ȃƒ“ƒo[‚Ì‘rޏ‚©‚ç‰ñ•œ‚·‚é”\—͂Ƃ¢‚¤A‚¢‚­‚‚©‚Ìd—v‚È—˜“_‚ðŽ¸‚¢‚Ü‚·B‚±‚Ì“_‚Å‹­‚­‚È‚¯‚ê‚΂Ȃ炸A–â‘è‚Í‚ ‚ç‚ä‚éŠp“x‚©‚çl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB +�ǂ��v���O���}��10�l�̈����v���O���}���������Y���������̂ÍA�����ɔ��f�����Ȃ��Ƃ�����Ȏ����ł��B�����͊�È󋵂������o���܂��B���Ȃ��̎ア�v���O���}���������Ǝז��ɂȂ��ê‡ï¿½ÍA���Ȃ������葬���������Ƃ��ł��邱�Ƃ͂��΂��Î^���ł��B���Ȃ��������������ê‡ï¿½A���Ȃ��͎��ۂɒZ���Ԃł����Æi���ð‹‚����ł��傤�B�������A���Ȃ��̕����ÍA�ア�����o�[�̌P���A�����̒m���̕��y�A�����ċ��͂ȃ����o�[�̑r�������ñ•œ‚����\�͂Ƃ����A�����‚��Ìd�v�ȗ��_�������܂��B���̓_�ŋ����Ȃ����΂Ȃ炸�A�����͂��������p�x�����l���Ȃ����΂Ȃ��܂����B -‚ ‚È‚½‚Í‚µ‚΂µ‚ÎA‚æ‚è‹­‚¢ƒ`[ƒ€ƒƒ“ƒo[‚É’§í“I‚Å‚·‚ªA’ˆÓ[‚­•`‚©‚ꂽƒ^ƒXƒN‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +���Ȃ��͂��΂��ÎA���苭���`�[�������o�[�ɒ����I�ł����A���Ó[���`���ꂽ�^�X�N���^���邱�Ƃ��ł��܂��B -Next [How to Choose What to Work On](02-How to Choose What to Work On.md) \ No newline at end of file +Next [How to Choose What to Work On](02-How%20to%20Choose%20What%20to%20Work%20On.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index 89cbc40..4d047b3 100644 --- a/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -1,5 +1,5 @@ # How to Choose What to Work On -Ž©•ª‚̃j[ƒY‚ƃ`[ƒ€‚̃j[ƒY‚Ƃ̃oƒ‰ƒ“ƒX‚ðŽæ‚Á‚ÄA‚ǂ̂悤‚È‘¤–ʂ̃vƒƒWƒFƒNƒg‚ðì‹Æ‚·‚é‚©‚ð‘I‘ð‚µ‚Ü‚·B ‚ ‚È‚½‚ÍŽ©•ª‚ªˆê”ÔD‚«‚È‚±‚Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ‚ªA‚æ‚葽‚­‚ÌŽdŽ–‚ð‚·‚é‚̂ł͂Ȃ­AV‚µ‚¢ƒXƒLƒ‹‚ðsŽg‚µ‚ÄŽ©•ªŽ©g‚ðL‚΂·•û–@‚ðŒ©‚Â‚¯‚悤‚Æ‚µ‚Ü‚·B ƒŠ[ƒ_[ƒVƒbƒv‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“ƒXƒLƒ‹‚Í‹ZpƒXƒLƒ‹‚æ‚è‚àd—v‚Å‚·B ‚ ‚È‚½‚ª”ñí‚É‹­‚¯‚ê‚ÎAƒvƒƒWƒFƒNƒg‚Å‚ÍAƒŠƒXƒN‚ðŒ¸‚ç‚·‚½‚ß‚ÉA‚Å‚«‚邾‚¯‘‚­Ał࢓ï‚ÈA‚Ü‚½‚ÍƒŠƒXƒN‚Ì‚‚¢ƒ^ƒXƒN‚ðŽÀs‚µ‚Ä‚­‚¾‚³‚¢B +�����̃j�[�Y�ƃ`�[���̃j�[�Y�Ƃ̃o�����X�������ÄA�ǂ̂悤�ȑ��ʂ̃v���W�F�N�g�����Ƃ��邩���I�����܂��B ���Ȃ��͎��������ÔD���Ȃ��Ƃ����Ȃ����΂Ȃ��܂��ñ‚ªA���葽���̎d���������̂ł͂Ȃ��A�V�����X�L�����s�g���������g���L�΂����@�����‚��悤�Ƃ��܂��B ���[�_�[�V�b�v�ƃR�~���j�P�[�V�����X�L���͋Z�p�X�L���������d�v�ł��B ���Ȃ��������ɋ������ÎA�v���W�F�N�g�łÍA���X�N�����炷���߂ÉA�ł��邾�������A�ł������ÈA�܂��̓��X�N�Ì����^�X�N�����s�����������B -Next [How to Get the Most From Your Team-mates](03-How to Get the Most From Your Teammates.md) \ No newline at end of file +Next [How to Get the Most From Your Team-mates](03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index a4cd4a0..401ba30 100644 --- a/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -1,15 +1,15 @@ # How to Get the Most From Your Team-mates -ƒ`[ƒ€ƒƒCƒg‚ðÅ‘åŒÀ‚ÉŠˆ—p‚·‚é‚É‚ÍAƒ`[ƒ€‚̸_‚ð–‚«A‚·‚ׂĂÌl‚ªŒÂl“I‚É’§í‚µAŒÂl“I‚ÉŠÖ‚í‚葱‚¯‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B +�`�[�����C�g���ő����Ɋ��p�����ɂÍA�`�[���Ì��_�ð–‚��A���ׂĂÌl���Âl�I�ɒ��킵�A�Âl�I�Ɋւ��葱�����悤�ɂ��Ă��������B -ƒ`[ƒ€‚̸_‚ð”­’B‚³‚¹‚邽‚ß‚ÉAƒƒS“ü‚è‚̈ߕž‚âƒp[ƒeƒB[‚̂悤‚È–ï‰î‚È‚à‚̂͗ǂ¢‚à‚Ì‚ÌAŒÂl“I‚È‘¸Œh‚Æ“¯‚¶‚­‚ç‚¢—Ç‚¢‚à‚̂ł͂ ‚è‚Ü‚¹‚ñB’N‚à‚ª‘¼‚Ìl‚ð‘¸d‚µ‚Ä‚¢‚é‚È‚çA’N‚à’N‚à—Ž’_‚³‚¹‚½‚­‚È‚¢‚Å‚µ‚傤Bƒ`[ƒ€‚̸_‚ÍAlX‚ªƒ`[ƒ€‚Ì‚½‚߂ɋ]µ‚𕥂Á‚ÄAŽ©•ª‚ÌŒÂl“I‚È—˜‰v‚Ì‘O‚Ƀ`[ƒ€‚Ì—Ç‚µˆ«‚µ‚ÌŠÏ“_‚©‚çl‚¦‚邯‚«‚Éì‚ç‚ê‚Ü‚·BŽw“±ŽÒ‚Æ‚µ‚ÄA‚ ‚È‚½‚Í‚±‚Ì“_‚ÅŽ©•ª‚æ‚è‚à‘½‚­‚ð‹‚߂邱‚Ƃ͂ł«‚Ü‚¹‚ñB +�`�[���Ì��_�𔭒B�����邽�߂ÉA���S�����̈ߕ����p�[�e�B�[�̂悤�Ȗ����Ȃ��̂͗ǂ����̂ÌA�Âl�I�ȑ��h�Ɠ������炢�ǂ����̂ł͂����܂����B�N�������Ìl�ð‘¸d���Ă����Ȃ��A�N���N�����_���������Ȃ��ł��傤�B�`�[���Ì��_�ÍA�l�X���`�[���̂��߂ɋ]���𕥂��ÄA�����̌Âl�I�ȗ��v�̑O�Ƀ`�[���̗ǂ������̊ϓ_�����l�����Ƃ��É������܂��B�w���҂Ƃ��ÄA���Ȃ��͂��̓_�Ŏ������������������߂邱�Ƃ͂ł��܂����B -ƒ`[ƒ€ƒŠ[ƒ_[ƒVƒbƒv‚ÌŒ®‚Ì1‚‚ÍA‘Sˆõ‚ªƒoƒCƒCƒ“ƒO‚Å‚«‚邿‚¤‚ɃRƒ“ƒZƒ“ƒTƒX‚ð‘£i‚·‚邱‚Ƃł·B‚±‚ê‚ÍAƒ`[ƒ€ƒƒCƒg‚ªŠÔˆá‚Á‚Ä‚¢‚邱‚Æ‚ðŽžXˆÓ–¡‚µ‚Ü‚·B‚‚܂èA‚»‚ꂪƒvƒƒWƒFƒNƒg‚ð‚ ‚Ü‚è‚É‚àŠQ‚·‚邱‚Æ‚ª‚È‚¯‚ê‚ÎAƒRƒ“ƒZƒ“ƒTƒX‚ÉŠî‚¢‚ÄŽ©•ª‚̃`[ƒ€‚̉½l‚©‚ª“ÆŽ©‚Ì‚â‚è•û‚ð‚·‚é‚æ‚¤‚É‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚ꂪ‹N‚±‚Á‚½‚çA“¯ˆÓ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B’P‚ÉŒö‘R‚Æ”½‘΂µA‡ˆÓ‚É“¯ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B‚‚¢‚½‚èA‹­§‚³‚ê‚Ä‚¢‚邿‚¤‚É•·‚±‚¦‚½‚肵‚Ă͂¢‚¯‚Ü‚¹‚ñB‚ ‚È‚½‚ªˆÓŒ©‚É“¯ˆÓ‚µ‚Ä‚¢‚È‚¢‚ÆŒ¾‚¢‚Ü‚·‚ªAƒ`[ƒ€‚̃Rƒ“ƒZƒ“ƒTƒX‚ªd—v‚¾‚Æl‚¦‚Ä‚­‚¾‚³‚¢B‚±‚ê‚Í‚µ‚΂µ‚Δނç‚É‹t–߂肳‚¹‚Ü‚·B”ނ炪‹t–߂肵‚½ê‡A”ނ炪ʼn‚ÌŒv‰æ‚ð’ʉ߂·‚邯Žå’£‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +�`�[�����[�_�[�V�b�v�̌���1�‚ÍA�S�����o�C�C���O�ł����悤�ɃR���Z���T�X�ð‘£i���邱�Ƃł��B�����ÍA�`�[�����C�g���Ԉ����Ă��邱�Ƃ����X�Ӗ����܂��B�‚܂��A���ꂪ�v���W�F�N�g�����܂��ɂ��Q���邱�Ƃ��Ȃ����ÎA�R���Z���T�X�Ɋ��Â��Ď����̃`�[���̉��l�����Ǝ��̂������������悤�ɂ��Ȃ����΂Ȃ��܂����B���ꂪ�N���������A���ӂ��Ȃ��ł��������B�P�Ɍ��R�Ɣ��΂��A���ӂɓ��ӂ��Ă��������B���‚������A���������Ă����悤�ɕ��������肵�Ă͂����܂����B���Ȃ����ӌ��ɓ��ӂ��Ă��Ȃ��ƌ����܂����A�`�[���̃R���Z���T�X���d�v���Æl�����������B�����͂��΂��Δނ��ɋt�߂肳���܂��B�ނ炪�t�߂肵���ê‡ï¿½A�ނ炪�Å��̌v�����ʉ߂����Ǝ咣���Ȃ��ł��������B -“K؂ȑ¤‚©‚ç–â‘è‚ð‹c˜_‚µ‚½Œã‚É“¯ˆÓ‚µ‚È‚¢ŒÂl‚ª‚¢‚éꇂÍA’P‚ÉŒˆ’è‚ð‰º‚·•K—v‚ª‚ ‚邯Žå’£‚µA‚»‚ꂪ‚ ‚È‚½‚ÌŒˆ’è‚Å‚ ‚邯Žå’£‚µ‚Ü‚·B‚ ‚È‚½‚ÌŒˆ’肪ŠÔˆá‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ð”»’f‚·‚é•û–@‚ª‚ ‚éê‡A‚Ü‚½‚Í‚»‚ꂪŠÔˆá‚Á‚Ä‚¢‚邱‚Æ‚ªŒã‚ÅŽ¦‚³‚ꂽꇂÍA‚Å‚«‚邾‚¯‘‚­Ø‚è‘Ö‚¦‚ÄA³‚µ‚¢l•¨‚ð”Fޝ‚µ‚Ä‚­‚¾‚³‚¢B +�K�؂ȑ������������c�_�������ɓ��ӂ��Ȃ��Âl�������ê‡ï¿½ÍA�P�Ɍ����������K�v�������Ǝ咣���A���ꂪ���Ȃ��̌����ł����Ǝ咣���܂��B���Ȃ��̌��肪�Ԉ����Ă��邩�ǂ����𔻒f�������@�������ê‡ï¿½A�܂��͂��ꂪ�Ԉ����Ă��邱�Ƃ����Ŏ����ꂽ�ê‡ï¿½ÍA�ł��邾�������؂��ւ��ÄA�������l�����F�������������B -‚ ‚È‚½‚̃`[ƒ€‚É‚ÍAƒOƒ‹[ƒv‚Æ‚µ‚Ä‚àŒÂ•ʂɂàAƒ`[ƒ€ƒXƒsƒŠƒbƒg‚ð¶‚Ýo‚µAŒø‰Ê“I‚ȃ`[ƒ€‚ðì‚邽‚ß‚Él‚¦‚Ä‚¢‚邱‚Æ‚ðq‚˂Ă­‚¾‚³‚¢B +���Ȃ��̃`�[���ɂÍA�O���[�v�Ƃ��Ă��•ʂɂ��A�`�[���X�s���b�g�ð¶‚Ýo���A���ʓI�ȃ`�[�������邽�߂Él���Ă��邱�Ƃ��q�˂Ă��������B -æÒ‘ò‚ł͂Ȃ­•p”É‚ÉÜŽ^‚µ‚Ä‚­‚¾‚³‚¢B“Á‚É‚ ‚È‚½‚ªÜŽ^‚³‚ê‚鎞‚É‚ ‚È‚½‚É“¯ˆÓ‚µ‚È‚¢l‚ðÜŽ^‚µ‚Ü‚·BŒö‚ÉŽ^”ü‚µAŽ„“I‚ɔᔻ‚·‚éB 1‚‚̗áŠO‚𜂢‚ÄFŽž‚ɂͬ’·‚⎸”s‚Ì¥³‚ÍŒ³‚ÌŒ‡Š×‚É’p‚¸‚©‚µ‚¢’ˆÓ‚ðˆø‚­‚±‚ƂȂ­ÜŽ^‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Ì‚ÅA¬’·‚̓vƒ‰ƒCƒx[ƒg‚ÅÜŽ^‚³‚ê‚é‚ׂ«‚Å‚·B +�ґ��ł͂Ȃ��p�ɂÉÜŽ^�����������B���ɂ��Ȃ����܎^�����鎞�ɂ��Ȃ��ɓ��ӂ��Ȃ��l���܎^���܂��B���Ɏ^�����A���I�ɔᔻ�����B 1�‚̗��O�������ÄF���ɂÍ����⎸�s�Ì����͌��̌��ׂɒp�����������ӂ��������ƂȂ��܎^���邱�Ƃ��ł��Ȃ��̂ÅA�����̓v���C�x�[�g�ÅÜŽ^�������ׂ��ł��B -Next [How to Divide Problems Up](04-How to Divide Problems Up.md) \ No newline at end of file +Next [How to Divide Problems Up](04-How%20to%20Divide%20Problems%20Up.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index ad263fc..9761a94 100644 --- a/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -1,9 +1,9 @@ # How to Divide Problems Up -ƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ð—˜—p‚µ‚ÄAŒÂl‚É‚æ‚Á‚ÄŽÀs‚³‚ê‚éƒ^ƒXƒN‚É•ªŠ„‚·‚é‚̂͊y‚µ‚¢‚±‚Ƃł·B‚±‚ê‚Í‘Šú‚És‚¤•K—v‚ª‚ ‚è‚Ü‚·BŽž‚É‚ÍAƒ}ƒl[ƒWƒƒ[‚ÍAì‹Æ‚ðŽÀs‚·‚éŒÂl‚ðl—¶‚¹‚¸‚ÉŒ©Ï‚à‚è‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚邯l‚¦‚Ä‚¢‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ÍŒÂl‚̶ŽY«‚ª”ñí‚ɈقȂ邽‚ß•s‰Â”\‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg‚ɂ‚¢‚Ă̓Á’è‚Ì’mޝ‚ðŽ‚Á‚Ä‚¢‚él‚ÍAí‚ɕω»‚µAƒpƒtƒH[ƒ}ƒ“ƒX‚ɑ傫‚ȉe‹¿‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +�\�t�g�E�F�A�v���W�F�N�g�𗘗p���ÄA�Âl�ɂ����Ď��s�������^�X�N�ɕ��������̂͊y�������Ƃł��B�����͑����És���K�v�������܂��B���ɂÍA�}�l�[�W���[�ÍA���Ƃ����s�����Âl���l�������Ɍ��ς������s�����Ƃ��ł����Æl���Ă��邱�Ƃ������܂��B�����͌Âl�Ì��Y���������ɈقȂ邽�ߕs�”\�ł��B�R���|�[�l���g�ɂ‚��Ă̓����̒m�������������l�ÍA���ɕω����A�p�t�H�[�}���X�ɑ傫�ȉe�����^���邱�Ƃ��ł��܂��B -ì‹È‰Æ‚ÍA‰‰‘t‚·‚éŠyŠí‚̉¹F‚â‰^“®‘IŽè‚̃R[ƒ`‚ªŠe‘IŽè‚Ì‹­‚Ý‚ðl—¶‚µ‚Ä‚¢‚邿‚¤‚ÉAŒoŒ±–L•x‚ȃ`[ƒ€ƒŠ[ƒ_[‚ÍA’ÊíAƒvƒƒWƒFƒNƒg‚Ì•”–å‚ðƒ`[ƒ€‚©‚ç‚ÌŽdŽ–‚É•ª‚¯‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ‚»‚ê‚ç‚ªŠ„‚è“–‚Ä‚ç‚ê‚郃“ƒo[B‚±‚ê‚ÍA‚«”\‚̃`[ƒ€‚ª•ö‰ó‚µ‚Ă͂Ȃç‚È‚¢——R‚̈ꕔ‚Å‚·B +���ȉƂÍA���t�����y���̉��F���^���I���̃R�[�`���e�I���̋��݂��l�����Ă����悤�ÉA�o���L�x�ȃ`�[�����[�_�[�ÍA�Ê��A�v���W�F�N�g�̕������`�[�������̎d���ɕ����邱�Ƃ͂ł��܂��ñ‚»‚��炪���蓖�Ă����éƒï¿½ï¿½ï¿½o�[�B�����ÍA�����\�̃`�[�������󂵂Ă͂Ȃ��Ȃ����R�̈ꕔ�ł��B -‚±‚ê‚ÍAlX‚ªŽ©•ª‚Ì‹­‚Ý‚ð\’z‚µAŽã“_‚ð‰ü‘P‚µ‚½‚èAV‚µ‚¢ƒXƒLƒ‹‚ðŠw‚ñ‚¾‚肵‚đދü‚·‚邿‚¤‚É‚È‚é‚Æ‚¢‚¤A‚ ‚é’ö“x‚̊댯‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µAê–å«‚ÍA‰ß“x‚ÉŽg—p‚³‚ê‚È‚¢ê‡‚ɂ͔ñí‚É—L—p‚ȶŽY«ƒc[ƒ‹‚Å‚·B +�����ÍA�l�X�������̋��݂��\�z���A���_�����P�������A�V�����X�L�����w�ñ‚¾‚肵�đދ������悤�ɂȂ��Ƃ����A�������x�̊댯�������܂��B�������A���å«ï¿½ÍA�ߓx�Ɏg�p�����Ȃ��ê‡ï¿½É‚͔����ɗL�p�È��Y���c�[���ł��B -Next [How to Handle Boring Tasks](05-How to Handle Boring Tasks.md) \ No newline at end of file +Next [How to Handle Boring Tasks](05-How%20to%20Handle%20Boring%20Tasks.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index ff95610..68476b7 100644 --- a/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -1,7 +1,7 @@ # How to Handle Boring Tasks -Žž‚É‚ÍA‰ïŽÐ‚âƒvƒƒWƒFƒNƒg‚̬Œ÷‚É•s‰ÂŒ‡‚ȑދü‚Èì‹Æ‚ð”ð‚¯‚é‚±‚Ƃ͂ł«‚Ü‚¹‚ñB ‚±‚ê‚ç‚̃^ƒXƒN‚ÍAŽÀÛ‚É‚»‚ê‚ç‚ðs‚¤•K—v‚ª‚ ‚él‚ÌŽm‹C‚𑹂Ȃ¤‰Â”\«‚ª‚ ‚è‚Ü‚·B ‚±‚ê‚ɑΈ‚·‚邽‚ß‚ÌÅ‘P‚Ì•û–@‚ÍALarry Wall‚̃vƒƒOƒ‰ƒ}‚̑ӑĂ̔ü“¿‚ðŒÄ‚Ño‚·‚©A‚Ü‚½‚Í‘£i‚·‚邱‚Ƃł·B ƒRƒ“ƒsƒ…[ƒ^‚É‚ ‚È‚½‚Ì‚½‚߂̃^ƒXƒN‚ðŽÀs‚³‚¹‚é‚©Aƒ`[ƒ€ƒƒCƒg‚ª‚±‚ê‚ðs‚¤‚Ì‚ðŽè•‚¯‚·‚邽‚߂̉½‚ç‚©‚Ì•û–@‚ðŒ©‚Â‚¯‚悤‚Æ‚µ‚Ü‚·B Žè‚Ås‚¤‚Ì‚É1TŠÔ‚©‚©‚Á‚Ä‚µ‚Ü‚¤ŽdŽ–‚ð‚·‚éƒvƒƒOƒ‰ƒ€‚Å1TŠÔ“­‚¢‚Ä‚¢‚é‚Ì‚ÍA‚æ‚苳ˆç“I‚ÅAŽž‚ɂ͔½•œ«‚ª‚ ‚邯‚¢‚¤‘å‚«‚È—˜“_‚ª‚ ‚è‚Ü‚·B +���ɂÍA���Ђ��v���W�F�N�g�Ì����ɕs�Œ��ȑދ��È��Ƃ������邱�Ƃ͂ł��܂����B �������̃^�X�N�ÍA���ۂɂ��������s���K�v�������l�̎m�C�𑹂Ȃ��”\���������܂��B �����ɑÎ����邽�߂ÌÅ‘P�̕��@�ÍALarry Wall�̃v���O���}�̑ӑĂ̔������ĂÑo�����A�܂��͑��i���邱�Ƃł��B �R���s���[�^�ɂ��Ȃ��̂��߂̃^�X�N�����s�����邩�A�`�[�����C�g���������s���̂��è•�����邽�߂̉��炩�̕��@�����‚��悤�Ƃ��܂��B ���Ås���̂�1�T�Ԃ������Ă��܂��d���������v���O������1�T�ԓ����Ă����̂ÍA���苳���I�ÅA���ɂ͔������������Ƃ����傫�ȗ��_�������܂��B -‘¼‚Ì‚·‚ׂĂªŽ¸”s‚µ‚½ê‡‚ÍA‘Þ‹ü‚Èì‹Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢l‚ɂ͎Óß‚µ‚Ü‚·‚ªAŒˆ‚µ‚Ĉêl‚Ås‚¤‚±‚Ƃ͂ł«‚Ü‚¹‚ñB Å’á‚Å‚à2l‚̃`[ƒ€‚ðŠ„‚è“–‚Ä‚ÄAì‹Æ‚ðs‚¢AŒ’‘S‚ȃ`[ƒ€ƒ[ƒN‚ð‘£i‚µ‚ă^ƒXƒN‚ðŠ®—¹‚³‚¹‚Ü‚·B +���̂��ׂĂ����s�����ê‡ï¿½ÍA�ދ��È��Ƃ����Ȃ����΂Ȃ��Ȃ��l�ɂ͎Ó߂��܂����A�����Ĉ��l�Ås�����Ƃ͂ł��܂����B �Œ��ł�2�l�̃`�[�������蓖�ĂÄA���Ƃ��s���A���S�ȃ`�[�����[�N�ð‘£i���ă^�X�N�����������܂��B -Next [How to Gather Support for a Project](06-How to Gather Support for a Project.md) \ No newline at end of file +Next [How to Gather Support for a Project](06-How%20to%20Gather%20Support%20for%20a%20Project.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 3350793..72b88b1 100644 --- a/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -1,5 +1,5 @@ # How to Gather Support for a Project -ƒvƒƒWƒFƒNƒg‚̃Tƒ|[ƒg‚ðW‚ß‚é‚É‚ÍA‘gD‘S‘Ì‚É^‚̉¿’l‚ðŽ¦‚·ƒrƒWƒ‡ƒ“‚ð쬂µ‚Ä“`‚¦‚Ü‚·B ‚ ‚È‚½‚̃rƒWƒ‡ƒ“쬂ɑ¼‚Ìl‚½‚¿‚ð‹¤—L‚µ‚悤‚Æ‚·‚éB ‚±‚ê‚͔ނç‚É‚ ‚È‚½‚ðƒTƒ|[ƒg‚·‚é——R‚ð—^‚¦A‚ ‚È‚½‚̃AƒCƒfƒA‚̉¶Œb‚ð—^‚¦‚Ü‚·B ƒvƒƒWƒFƒNƒg‚ÌŽå—vƒTƒ|[ƒ^[‚ðŒÂ•ʂɕåW‚µ‚Ü‚·B ‰Â”\‚ÈŒÀ‚èA‹³‚¦‚Ä‚­‚¾‚³‚¢B ‰Â”\‚Å‚ ‚ê‚ÎAŽŽì•i‚⃂ƒbƒNƒAƒbƒv‚ðì‚Á‚ăAƒCƒfƒA‚ð”­Šö‚³‚¹‚Ä‚­‚¾‚³‚¢B ƒvƒƒgƒ^ƒCƒv‚Íí‚É‹­—͂ł·‚ªAƒ\ƒtƒgƒEƒFƒA‚Å‚Íà–¾•¶‚æ‚è‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B +�v���W�F�N�g�̃T�|�[�g���W�߂��ɂÍA�g�D�S�̂É^�̉��l�������r�W�������ì¬ï¿½ï¿½ï¿½Ä“`���܂��B ���Ȃ��̃r�W�����ì¬ï¿½É‘��Ìl���������L���悤�Ƃ����B �����͔ނ��ɂ��Ȃ����T�|�[�g���é—�R���^���A���Ȃ��̃A�C�f�A�̉��b���^���܂��B �v���W�F�N�g�̎��v�T�|�[�^�[���•ʂɕ��W���܂��B �”\�Ȍ����A�������������B �”\�ł����ÎA�����i�⃂�b�N�A�b�v�������ăA�C�f�A�𔭊������Ă��������B �v���g�^�C�v�Í��ɋ��͂ł����A�\�t�g�E�F�A�łÍ����������͂邩�ɗD���Ă��܂��B -Next [How to Grow a System](07-How to Grow a System.md) \ No newline at end of file +Next [How to Grow a System](07-How%20to%20Grow%20a%20System.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index 076513d..3d6ce4e 100644 --- a/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -1,23 +1,23 @@ # How to Grow a System -–؂̗t‚ɂ͑ål‚̃AƒCƒfƒA‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·‚ªA¬l‚ÌŒ`‚âŒø—Í‚ðŠ®‘S‚ɂ͗‰ð‚µ‚Ä‚¢‚Ü‚¹‚ñBã󂪬’·‚·‚éB‚»‚ê‚͑傫‚­‚È‚è‚Ü‚·B‘ål‚̂悤‚ÉŒ©‚¦A‚æ‚葽‚­‚Ì—p“r‚ª‚ ‚è‚Ü‚·BŒ‹‹Ç‚»‚ê‚͉ʎÀ‚ð¶‚݂܂·B‚»‚ÌŒãA‚»‚ê‚ÍŽ€‚ÉA‚»‚̑̂͑¼‚̶•¨‚ɉh—{‚ð—^‚¦‚Ü‚·B +�؂̗t�ɂ͑��l�̃A�C�f�A���܂܂��Ă��܂����A���l�̌`�����͂����S�ɂ͗������Ă��܂����B�ó‚ªï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½B�����͑傫���Ȃ��܂��B���l�̂悤�Ɍ����A���葽���̗p�r�������܂��B���ǂ����͉ʎ��ð¶‚݂܂��B���̌��A�����͎��ÉA���̑̂͑��Ì����ɉh�{���^���܂��B -Ž„‚½‚¿‚Í‚»‚̂悤‚ȃ\ƒtƒgƒEƒFƒA‚ðˆµ‚¤æÒ‘ò‚³‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‹´‚Í‚»‚¤‚ł͂Ȃ¢Bƒxƒr[ƒuƒŠƒbƒW‚Í‚ ‚è‚Ü‚¹‚ñ‚ªA–¢Š®¬‚Ì‹´‚Í‚ ‚è‚Ü‚¹‚ñBƒuƒŠƒbƒW‚̓\ƒtƒgƒEƒFƒA‚æ‚è‚à‚͂邩‚ÉŠÈ’P‚Å‚·B +�������͂��̂悤�ȃ\�t�g�E�F�A�������ґò‚³‚������Ă��܂��B���͂����ł͂Ȃ��B�x�r�[�u���b�W�͂����܂��ñ‚ªA�������̋��͂����܂����B�u���b�W�̓\�t�g�E�F�A�������͂邩�ɊȒP�ł��B -ƒ\ƒtƒgƒEƒFƒA‚ª¬’·‚µ‚Ä‚¢‚邯l‚¦‚邱‚Æ‚ÍAŠ®àø‚È¸_“I‚ȃCƒ[ƒW‚𓾂é‘O‚É—L—p‚Èi•à‚ð‹‚°‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅA—Ç‚¢l‚¦‚Å‚·Bƒ†[ƒU[‚©‚ç‚̃tƒB[ƒhƒoƒbƒN‚𓾂ÄA‚»‚ê‚ðŽg‚Á‚Ĭ’·‚ðC³‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŽã‚¢Žè‘«‚ðØ‚èŽæ‚邱‚Ƃ͌’N‚Å‚·B +�\�t�g�E�F�A�������������Æl���邱�ƂÍA�����È��_�I�ȃC���[�W�𓾂��O�ɗL�p�Èi���ð‹‚��邱�Ƃ��ł����̂ÅA�ǂ��l���ł��B���[�U�[�����̃t�B�[�h�o�b�N�𓾂ÄA�������g���Ä������C�����邱�Ƃ��ł��܂��B�ア�葫���؂����邱�Ƃ͌��N�ł��B -ƒvƒƒOƒ‰ƒ}‚ÍA”z‘—‚µ‚ÄŽg—p‚Å‚«‚銮¬‚µ‚½ƒVƒXƒeƒ€‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µA‚“x‚ȃvƒƒOƒ‰ƒ}‚Í‚à‚Á‚Æ‘½‚­‚Ì‚±‚Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢BŠ®¬‚µ‚½ƒVƒXƒeƒ€‚ÅI‚í‚鬒·Œo˜H‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒAƒCƒfƒA‚̉è‚ðŽæ‚Á‚ÄA‚Å‚«‚邾‚¯ƒXƒ€[ƒY‚É—L—p‚ÈlH•¨‚ɕς¦‚铹‚ð‚‚­‚é‚̂͂ ‚È‚½‚ÌŽdŽ–‚Å‚·B +�v���O���}�ÍA�z�����Ďg�p�ł��銮�������V�X�e�����݌v�����K�v�������܂��B�������A���x�ȃv���O���}�͂����Ƒ����̂��Ƃ����Ȃ����΂Ȃ��Ȃ��B���������V�X�e���ÅI���é¬ï¿½ï¿½ï¿½o�H���݌v�����K�v�������܂��B�A�C�f�A�̉��������ÄA�ł��邾���X���[�Y�ɗL�p�Èl�H���ɕς��铹���‚����̂͂��Ȃ��̎d���ł��B -‚±‚ê‚ðs‚¤‚É‚ÍAÅIŒ‹‰Ê‚ðŽ‹Šo‰»‚µAƒGƒ“ƒWƒjƒAƒŠƒ“ƒOƒ`[ƒ€‚ª‹»•±‚µ‚Ä‚â‚è‹‚°‚邱‚Æ‚ª‚Å‚«‚é•û–@‚Å“`’B‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚͂܂½A”ނ炪¡‚Ç‚±‚É‚¢‚Ä‚àA‚Ç‚±‚É‚¢‚Ä‚à‘å‚«‚È”ò–ô‚ðŒ©‚¹‚Ä‚¢‚È‚¢‚Æ‚±‚ë‚És‚­“¹‚ð”Þ‚ç‚É“`‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB–؂Ͷ‚«‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ê‚͈ê“_‚ÅŽ€‚ñ‚ł͂Ȃ炸AŒã‚Å•œŠˆ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB +�������s���ɂÍA�ÅI���ʂ����o�����A�G���W�j�A�����O�`�[�������������è‹ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł������@�œ`�B�����K�v�������܂��B�������A���Ȃ��͂܂��A�ނ炪���ǂ��ɂ��Ă��A�ǂ��ɂ��Ă��傫�Ȕ����������Ă��Ȃ��Ƃ����És�������ނ��ɓ`���Ȃ����΂Ȃ��܂����B�؂Í����Ă��Ȃ����΂Ȃ��܂����B�����͈��_�Ŏ����ł͂Ȃ炸�A���ŕ������邱�Ƃ͂ł��܂����B -‚±‚̃Aƒvƒ[ƒ`‚ÍA—†ùó‚É“WŠJ‚³‚ê‚Ä‚¢‚Ü‚·B‰“‚·‚¬‚邱‚Ƃ̂Ȃ¢ƒ}ƒCƒ‹ƒXƒg[ƒ“‚ÍAŒo˜H‚ɉˆ‚Á‚Äi’»‚ðƒ}[ƒN‚·‚邽‚߂Ɏg—p‚³‚ê‚Ü‚·B’´‹£‘ˆ“I‚ȃrƒWƒlƒXŠÂ‹«‚Å‚ÍA‚½‚Æ‚¦ÝŒv‚³‚ꂽƒGƒ“ƒhƒ|ƒCƒ“ƒg‚©‚牓‚­—£‚ê‚Ä‚¢‚Ä‚àAƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªƒŠƒŠ[ƒX‚³‚êA‚Å‚«‚邾‚¯‘‚­Žû‰v‚ðã‚°‚邱‚Æ‚ªÅ‘P‚Ì•û–@‚Å‚·BƒvƒƒOƒ‰ƒ}[‚ÌŽdŽ–‚Ì1‚‚ÍAƒ}ƒCƒ‹ƒXƒg[ƒ“‚Å•\‚³‚ꂽ¬’·Œo˜H‚ðŒ«–¾‚É‘I‘ð‚·‚é‚±‚Ƃɂæ‚Á‚ÄA‘¦Žž‚Ì•ñV‚Æ«—ˆ‚Ì•ñV‚̃oƒ‰ƒ“ƒX‚ð‚Æ‚é‚±‚Ƃł·B +���̃A�v���[�`�ÍA�������ɓW�J�����Ă��܂��B�������邱�Ƃ̂Ȃ��}�C���X�g�[���ÍA�o�H�ɉ����Äi�����}�[�N���邽�߂Ɏg�p�����܂��B�������I�ȃr�W�l�X�‹��łÍA���Ƃ��݌v���ꂽ�G���h�|�C���g���牓�������Ă��Ă��A�}�C���X�g�[���������[�X�����A�ł��邾���������v���グ�邱�Ƃ��őP�̕��@�ł��B�v���O���}�[�̎d����1�‚ÍA�}�C���X�g�[���ŕ\���ꂽ�����o�H�������ɑI�����邱�Ƃɂ����ÄA�����̕��V�Æï¿½ï¿½ï¿½ï¿½Ì•��V�̃o�����X���Ƃ邱�Ƃł��B -æi“I‚ȃvƒƒOƒ‰ƒ}‚ÍAƒ\ƒtƒgƒEƒFƒAAƒ`[ƒ€A‚¨‚æ‚Ñlˆõ‚ð‘‚â‚·‚Æ‚¢‚¤3‚‚ÌÓ”C‚𕉂Á‚Ä‚¢‚Ü‚·B +���i�I�ȃv���O���}�ÍA�\�t�g�E�F�A�A�`�[���A�����Ñl���ð‘‚₷�Ƃ���3�‚ÌÓ”C�𕉂��Ă��܂��B -“ÇŽÒARob Hafernik‚ÍA‚±‚̃ZƒNƒVƒ‡ƒ“‚Ì‚±‚̃Rƒƒ“ƒg‚ÅAŽ„‚ªŠ®‘S‚Ɉø—p‚·‚邿‚è‚à‚¤‚Ü‚­‚¢‚­‚±‚Ƃ͂ł«‚È‚¢F +�ǎÒARob Hafernik�ÍA���̃Z�N�V�����̂��̃R�����g�ÅA�������S�Ɉ��p�������������܂��������Ƃ͂ł��Ȃ��F ->Ž„‚Í‚ ‚È‚½‚ª‚±‚±‚Åd—v«‚ð‹­’²‚µ‚Ä‚¢‚邯Žv‚¤B‚±‚ê‚̓VƒXƒeƒ€‚¾‚¯‚łȂ­AƒAƒ‹ƒSƒŠƒYƒ€Aƒ†[ƒU[ƒCƒ“ƒ^[ƒtƒFƒCƒXAƒf[ƒ^ƒ‚ƒfƒ‹‚Ȃǂł·B‚ ‚È‚½‚ª‘å‚«‚È–Ú•W‚ð’B¬‚·‚邽‚߂ɑå‹K–͂ȃVƒXƒeƒ€‚ÉŽæ‚è‘g‚ނ悤‚É‚È‚é‚ÆAâ‘΂Éd—v‚Å‚·BI‚í‚è‚ɋ߂«A‚·‚ׂĂª‚¿‚傤‚Ç‚¤‚Ü‚­‚¢‚©‚È‚¢‚±‚Ƃ𔭌©‚·‚邯‚¢‚¤“Á•ʂȋ°•|‚قLj«‚­‚È‚¢i“Š•[ŽÒƒjƒ…[ƒXƒVƒXƒeƒ€‚Ìŋ߂̑厸”s‚ðŒ©‚Ä‚­‚¾‚³‚¢jBŽ„‚Í‚³‚ç‚Éi‚ñ‚ÅA‚»‚ê‚ðŽ©‘R‚Ì–@‘¥‚ÆŒ¾‚Á‚Ä‚¢‚Ü‚·B‘å‹K–͂ŕ¡ŽG‚ȃVƒXƒeƒ€‚̓[ƒ‚©‚çŽÀ‘•‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB’Pƒ‚ȃVƒXƒeƒ€‚©‚çˆê˜A‚̈Ó}“I‚ȃXƒeƒbƒv‚Å•¡ŽG‚ȃVƒXƒeƒ€‚É‚µ‚©i‰»‚Å‚«‚Ü‚¹‚ñB +>���͂��Ȃ��������Åd�v�����������Ă����Ǝv���B�����̓V�X�e�������łȂ��A�A���S���Y���A���[�U�[�C���^�[�t�F�C�X�A�f�[�^���f���Ȃǂł��B���Ȃ����傫�ȖڕW���B�����邽�߂ɑ��K�͂ȃV�X�e���Ɏ����g�ނ悤�ɂȂ��ÆA���΂Éd�v�ł��B�I�����ɋ߂Â��A���ׂĂ����傤�ǂ��܂������Ȃ����Ƃ𔭌������Ƃ������ʂȋ��|�قLj����Ȃ��i���[�҃j���[�X�V�X�e���Ìŋ߂̑厸�s�������������j�B���͂����Éi���ÅA���������R�̖@���ƌ����Ă��܂��B���K�͂ŕ��G�ȃV�X�e���̓[�������������邱�Ƃ͂ł��܂����B�P���ȃV�X�e���������A�̈Ó}�I�ȃX�e�b�v��G�ȃV�X�e���ɂ����i���ł��܂����B -‚Ç‚¿‚ç‚É•ÔM‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H* Fiat lux *I +�ǂ����ɕÔM���邱�Ƃ��ł��܂����H* Fiat lux *�I -Next [How to Communicate Well](08-How to Communicate Well.md) +Next [How to Communicate Well](08-How%20to%20Communicate%20Well.md) diff --git a/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index 8794954..9e44503 100644 --- a/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -1,11 +1,11 @@ # How to Communicate Well -‚¤‚Ü‚­ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŽæ‚é‚É‚ÍA‚»‚ꂪ‚Ç‚ê‚قǓ‚¢‚©‚ð”Fޝ‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ê‚Í‚»‚ꎩg‚̃XƒLƒ‹‚Å‚·B‚ ‚È‚½‚ªƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢l‚ÉŒ‡Š×‚ª‚ ‚邯‚¢‚¤Ž–ŽÀ‚É‚æ‚Á‚ÄA‚»‚ê‚Í‚æ‚袓ï‚ɂȂéB”Þ‚ç‚Í‚ ‚È‚½‚ð—‰ð‚·‚邱‚ƂɔMS‚É“­‚¢‚Ä‚¢‚Ü‚¹‚ñB”Þ‚ç‚Í•nŽã‚ɘb‚µA•nŽã‚É‘‚­B”Þ‚ç‚Í‚µ‚΂µ‚ΉߘJ‚Ü‚½‚͑ދü‚Å‚ ‚èAÅ’á‚Å‚à‚ ‚È‚½‚ªŽæ‚è‘g‚ñ‚Å‚¢‚é‘å‚«‚È–â‘è‚ł͂Ȃ­AŽ©•ª‚ÌŽdŽ–‚É‘½­W’†‚µ‚Ä‚¢‚Ü‚·BŽö‹Æ‚ðŽóu‚µAŽ·•MA‰‰àA’®‰ð‚ðŽÀ‘H‚·‚邱‚Ƃ̗˜“_‚Ì1‚‚ÍAŽ™“¶‚ª‚¤‚Ü‚­‚¢‚¯‚ÎA–â‘肪‚Ç‚±‚É‚ ‚é‚Ì‚©A‚ǂ̂悤‚É’ù³‚·‚é‚Ì‚©‚ð‚æ‚èŠÈ’P‚É’m‚邱‚Æ‚ª‚Å‚«‚邯‚¢‚¤‚±‚Ƃł·B +���܂��R�~���j�P�[�V�����������ɂÍA���ꂪ�ǂ��قǓ�������F�����Ȃ����΂Ȃ��܂����B�����͂��ꎩ�g�̃X�L���ł��B���Ȃ����R�~���j�P�[�V�������Ȃ����΂Ȃ��Ȃ��l�Ɍ��ׂ������Ƃ��������ɂ����ÄA�����͂��è¢ï¿½ï¿½ï¿½É‚Ȃ��B�ނ��͂��Ȃ��ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚É”M�S�ɓ����Ă��܂����B�ނ��͕n���ɘb���A�n���É����B�ނ��͂��΂��ΉߘJ�܂��͑ދ��ł����A�Œ��ł����Ȃ��������g���ł����傫�Ȗ����ł͂Ȃ��A�����̎d���ɑ����W�����Ă��܂��B���Ƃ����u���A���M�A�����A���������H���邱�Ƃ̗��_��1�‚ÍA���������܂������ÎA���肪�ǂ��ɂ����̂��A�ǂ̂悤�ɒ��������̂��������ȒP�ɒm�邱�Ƃ��ł����Ƃ������Ƃł��B -ƒvƒƒOƒ‰ƒ}[‚Ͷ‚«Žc‚肪”Þ—‚̃`[ƒ€‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ɉˑ¶‚·‚éŽÐ‰ï“I‚È“®•¨‚Å‚·B‚“x‚ȃvƒƒOƒ‰ƒ}[‚ÍA–ž‘«“x‚ª”Þ—‚̃`[ƒ€ŠO‚ÌlX‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ɉˑ¶‚·‚éŽÐ‰ï“I‚È“®•¨‚Å‚·B +�v���O���}�[�Í����c�肪�Þ��̃`�[���Ƃ̃R�~���j�P�[�V�����Ɉˑ������Љ��I�ȓ����ł��B���x�ȃv���O���}�[�ÍA�����x���Þ��̃`�[���O�Ìl�X�Ƃ̃R�~���j�P�[�V�����Ɉˑ������Љ��I�ȓ����ł��B -ƒvƒƒOƒ‰ƒ}[‚ͬ—‚©‚ç–½—ß‚ðo‚µ‚Ü‚·B‚±‚ê‚ðs‚¤1‚‚̋»–¡[‚¢•û–@‚ÍAƒ`[ƒ€ŠO‚̉½‚ç‚©‚Ì’ñˆÄ‚ðŠJŽn‚·‚邱‚Ƃł·B‚±‚ê‚ÍA* strawman *‚Ü‚½‚Í* white-paper *Œ`Ž®‚ÅA‚Ü‚½‚ÍŒû“ª‚ł̂Ýs‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃Š[ƒ_[ƒVƒbƒv‚ÍA‹c˜_‚ÌðŒ‚ðÝ’è‚·‚邯‚¢‚¤‘å‚«‚È—˜“_‚ª‚ ‚è‚Ü‚·B‚»‚ê‚Í‚ ‚È‚½‚ð”á”»‚É‚³‚炵A‚³‚ç‚Ɉ«‚¢‚±‚Æ‚ÉA‹‘â‚Æ–³Ž‹‚ð–\˜I‚µ‚Ü‚·B‚“x‚ȃvƒƒOƒ‰ƒ}‚ÍA“Æ“Á‚Ì—Í‚ðŽ‚Á‚Ä‚¢‚邽‚ߓƎ©‚ÌÓ”C‚ª‚ ‚é‚Ì‚ÅA‚±‚ê‚ðŽó‚¯“ü‚ê‚途õ‚ª‚Å‚«‚Ä‚¢‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ł͂Ȃ¢‹N‹Æ‰Æ‚ÍA‚¢‚­‚‚©‚Ì“_‚ŃŠ[ƒ_[ƒVƒbƒv‚ð’ñ‹Ÿ‚·‚éƒvƒƒOƒ‰ƒ}[‚ð•K—v‚Æ‚µ‚Ä‚¢‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ÍAŒ»ŽÀ‚É—Š‚Á‚Ä‚¢‚éƒAƒCƒfƒA‚ÆƒŠƒAƒŠƒeƒB‚Ì‹´“n‚µ‚̈ꕔ‚Å‚·B +�v���O���}�[�Í������疽�߂��o���܂��B�������s��1�‚̋����[�����@�ÍA�`�[���O�̉��炩�̒��Ă��J�n���邱�Ƃł��B�����ÍA* strawman *�܂���* white-paper *�`���ÅA�܂��͌����ł̂Ýs�����Ƃ��ł��܂��B���̃��[�_�[�V�b�v�ÍA�c�_�Ì������ݒ肷���Ƃ����傫�ȗ��_�������܂��B�����͂��Ȃ����ᔻ�ɂ��炵�A�����Ɉ������ƂÉA�����Ɩ������\�I���܂��B���x�ȃv���O���}�ÍA�Ɠ��̗͂������Ă��邽�ߓƎ��ÌÓ”C�������̂ÅA�������󂯓����é€ï¿½ï¿½ï¿½ï¿½ï¿½Å‚������K�v�������܂��B�v���O���}�[�ł͂Ȃ��N�ƉƂÍA�����‚��̓_���[�_�[�V�b�v���ñ‹Ÿ‚����v���O���}�[���K�v�Ƃ��Ă��܂��B�v���O���}�[�ÍA�����ɗ����Ă����A�C�f�A�ƃ��A���e�B�̋��n���̈ꕔ�ł��B -Ž„‚Í‚¤‚Ü‚­ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðƒ}ƒXƒ^[‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½‚ªAŽ„‚ªŒ»ÝŽæ‚è‘g‚ñ‚Å‚¢‚é‚Ì‚ÍAŽ„‚ª4‚‚̃Aƒvƒ[ƒ`‚ð‚Æ‚Á‚Ä‚¢‚邯Žv‚¢‚Ü‚·BŽ©•ª‚̃AƒCƒfƒA‚ð‡’²‚É€”õ‚µ‚½ŒãAŽ„‚ÍŒû“ª‚Řb‚µAކ‚ÍiŽÀÛ‚ÌŽ†‚É‚à“dŽq“I‚É‚àjƒfƒ‚‚ðŒ©‚¹‚ÄA‚±‚̃vƒƒZƒX‚ðh•ø‹­‚­ŒJ‚è•Ô‚·BŽ„‚Í‚±‚ÌŽí‚̓‚¢ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Å‚ÍA‰½“x‚àŽ„‚½‚¿‚ª\•ª‚Éh•ø‹­‚­‚È‚¢‚ÆŽv‚¢‚Ü‚·B‚ ‚È‚½‚̃AƒCƒfƒA‚ª‚·‚®‚Ɏ󂯓ü‚ê‚ç‚ê‚È‚¢‚È‚çA‚ ‚È‚½‚Í—Ž’_‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñB”Þ‚ç‚Ì€”õ‚ɃGƒlƒ‹ƒM[‚𓊓ü‚µ‚½ê‡A’N‚à‚ ‚È‚½‚Ì‚½‚߂ɂ»‚ê‚ð•nŽã‚¾‚Ƃ͎v‚í‚È‚¢‚Å‚µ‚傤B +���͂��܂��R�~���j�P�[�V�������}�X�^�[�ł��܂����ł������A�������ݎ����g���ł����̂ÍA����4�‚̃A�v���[�`���Ƃ��Ă����Ǝv���܂��B�����̃A�C�f�A�������É����������A���͌����Řb���A���Íi���ۂ̎��ɂ��d�q�I�ɂ��j�f���������ÄA���̃v���Z�X���h�������J���Ԃ��B���͂��̎��̓���R�~���j�P�[�V�����łÍA���x�����������\���Éh�������Ȃ��Ǝv���܂��B���Ȃ��̃A�C�f�A�������Ɏ󂯓��������Ȃ��Ȃ��A���Ȃ��͗��_���Ă͂����܂����B�ނ��Ì����ɃG�l���M�[�𓊓������ê‡ï¿½A�N�����Ȃ��̂��߂ɂ������n�ゾ�Ƃ͎v���Ȃ��ł��傤�B -Next [How to Tell People Things They Don't Want to Hear](09-How to Tell People Things They Don't Want to Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) diff --git a/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index 3e736c0..6c550ee 100644 --- a/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -1,9 +1,9 @@ # How to Tell People Things They Don't Want to Hear -‚ ‚È‚½‚Í‚µ‚΂µ‚ÎAlX‚É•s‰õŠ´‚ð—^‚¦‚邿‚¤‚È‚±‚Æ‚ð“`‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ª‰½‚ç‚©‚Ì——R‚Å‚±‚ê‚ð‚µ‚Ä‚¢‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B–â‘è‚ɂ‚¢‚ĉ½‚à‚Å‚«‚È‚¢ê‡‚Å‚àA‚Å‚«‚邾‚¯‘‚­‚»‚ê‚ç‚ð“`‚¦‚Ä‚¢‚é‚Ì‚ÅA”Þ‚ç‚Í\•ª‚Èî•ñ‚𓾂ç‚ê‚Ü‚·B +���Ȃ��͂��΂��ÎA�l�X�ɕs�������^�����悤�Ȃ��Ƃ��`�����K�v�������܂��B���Ȃ������炩�̗��R�ł��������Ă��邱�Ƃ��Y���Ȃ��ł��������B�����ɂ‚��ĉ����ł��Ȃ��ê‡ï¿½Å‚��A�ł��邾���������������`���Ă����̂ÅA�ނ��Í\���È����𓾂����܂��B -’N‚©‚É–â‘è‚ð“`‚¦‚éŗǂ̕û–@‚ÍA“¯Žž‚ɉðŒˆô‚ð’ñަ‚·‚邱‚Ƃł·B‘æ“ñ‚ÌÅ‘P‚Ì•û–@‚ÍA–â‘è‚Ì•‚¯‚ðŽØ‚è‚Ĕނç‚ɃAƒs[ƒ‹‚·‚邱‚Ƃł·BM‚¶‚ç‚ê‚È‚¢ŠëŒ¯‚ª‚ ‚éꇂÍA‚ ‚È‚½‚ÌŽå’£‚ÌŽxŽ‚ðW‚ß‚é‚ׂ«‚Å‚·B +�N���ɖ������`�����ŗǂ̕��@�ÍA�����ɉ��������ñަ‚��邱�Ƃł��B�����ÌÅ‘P�̕��@�ÍA�����Ì������؂��Ĕނ��ɃA�s�[�����邱�Ƃł��B�M�������Ȃ��댯�������ê‡ï¿½ÍA���Ȃ��̎咣�̎x�����W�߂��ׂ��ł��B -‚ ‚È‚½‚ªŒ¾‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢Å‚à•s–ù‰õ‚ňê”Ê“I‚È‚±‚Ƃ̈ê‚‚ÍA”ނ̃XƒPƒWƒ…[ƒ‹‚ªŠÔˆá‚Á‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·B—ÇS“I‚ȃvƒƒOƒ‰ƒ}[‚ÍA‚±‚ê‚ðŒ¾‚¤‚̂͌™‚Å‚·‚ªA‚Å‚«‚邾‚¯‘‚­Œ¾‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB—Bˆê‚̃AƒNƒVƒ‡ƒ“‚ª’N‚ɂłà’m‚点‚邱‚Ƃł ‚Á‚Ä‚àAƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªŠŠ‚Á‚½‚Æ‚«‚ɃAƒNƒVƒ‡ƒ“‚ð‰„Šú‚·‚邿‚è‚àˆ«‚¢‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚ðs‚¤‚É‚ÍA•¨—??“I‚ɂłȂ­‚Ä‚àA­‚È‚­‚Æ‚à¸_“I‚ɂ̓`[ƒ€‚Æ‚µ‚Äs‚¤•û‚ª—Ç‚¢‚Å‚·B‚ ‚È‚½‚ª—§‚Á‚Ä‚¢‚éꊂƂ»‚ê‚ɂ‚¢‚ĉ½‚ª‚Å‚«‚é‚©‚Ì—¼•û‚Å‚ ‚È‚½‚̃`[ƒ€‚Ì“ü—Í‚ð–]‚Þ‚Å‚µ‚傤Bƒ`[ƒ€‚Í‚ ‚È‚½‚ɉe‹¿‚ð—^‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB +���Ȃ��������Ȃ����΂Ȃ��Ȃ��ł��s�����ň��ʓI�Ȃ��Ƃ̈��‚ÍA�ނ̃X�P�W���[�����Ԉ����Ă��Ȃ����΂Ȃ��Ȃ��Ƃ������Ƃł��B�ÇS�I�ȃv���O���}�[�ÍA�����������̂͌��ł����A�ł��邾�����������Ȃ����΂Ȃ��܂����B�B���̃A�N�V�������N�ɂł��m�点�邱�Ƃł����Ă��A�}�C���X�g�[�����������Ƃ��ɃA�N�V���������������������������Ƃ͂����܂����B�������s���ɂÍA����??�I�ɂłȂ��Ă��A���Ȃ��Ƃ����_�I�ɂ̓`�[���Ƃ��Äs�������ǂ��ł��B���Ȃ��������Ă����êŠï¿½Æ‚����ɂ‚��ĉ����ł��邩�̗����ł��Ȃ��̃`�[���̓��͂��]�ނł��傤�B�`�[���͂��Ȃ��ɉe�����^���Ȃ����΂Ȃ��܂����B -Next [How to Deal with Managerial Myths](10-How to Deal with Managerial Myths.md) +Next [How to Deal with Managerial Myths](10-How%20to%20Deal%20with%20Managerial%20Myths.md) diff --git a/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index c13a7db..e333daa 100644 --- a/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -1,13 +1,13 @@ # How to Deal with Managerial Myths -* myth *‚Æ‚¢‚¤Œ¾—t‚ÍŽž‚ɂ̓tƒBƒNƒVƒ‡ƒ“‚ðˆÓ–¡‚µ‚Ü‚·B‚µ‚©‚µ‚»‚ê‚Í‚æ‚è[‚¢ˆÓ–¡‚ðŽ‚¿‚Ü‚·B‚»‚ê‚͂܂½A‰F’ˆ‚Æl—ނƂ̊֌W‚ðà–¾‚·‚é@‹³“IˆÓ–¡‚Ì•¨Œê‚ðˆÓ–¡‚µ‚Ü‚·Bƒ}ƒl[ƒWƒƒ[‚ÍAƒvƒƒOƒ‰ƒ}[‚Æ‚µ‚ÄŠw‚ñ‚¾‚±‚Æ‚ð–Y‚ê‚ÄA“Á’è‚Ì_˜b‚ðM‚¶‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚Ì_˜b‚ª‹U‚è‚Å‚ ‚邱‚Æ‚ðM‚¶‚³‚¹‚悤‚Æ‚·‚é‚͖̂³—ç‚Å‚ ‚莸”s‚µ‚Ä‚¢‚é‚Å‚µ‚傤B‚»‚Ì‚½‚ßA‚ ‚È‚½‚Í‚±‚ê‚ç‚ÌM”O‚ð_˜b‚Æ‚µ‚Ä”Fޝ‚·‚ׂ«‚Å‚·F +* myth *�Ƃ������t�͎��ɂ̓t�B�N�V�������Ӗ����܂��B�����������͂����[���Ӗ��������܂��B�����͂܂��A�F���Æl�ނƂ̊֌W�����������@���I�Ӗ��̕������Ӗ����܂��B�}�l�[�W���[�ÍA�v���O���}�[�Ƃ��Ċw�ñ‚¾‚��Ƃ��Y���ÄA�����Ì_�b���M�����X���������܂��B�������Ì_�b���U���ł��邱�Ƃ��M�������悤�Ƃ����͖̂����ł��莸�s���Ă����ł��傤�B���̂��ßA���Ȃ��͂������ÌM�O���_�b�Ƃ��ĔF�����ׂ��ł��F -- ‚æ‚葽‚­‚̃hƒLƒ…ƒƒ“ƒg‚ªí‚É—D‚ê‚Ä‚¢‚Ü‚·B i”Þ‚ç‚Í‚»‚ꂪ—~‚µ‚¢‚ªA‚¢‚Â‚Å‚à‚ ‚È‚½‚ª‚»‚ê‚É”ï‚â‚·‚±‚Æ‚ð–]‚ñ‚Å‚¢‚È‚¢Bj -- ƒvƒƒOƒ‰ƒ}‚Í“¯“™‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B iƒvƒƒOƒ‰ƒ}‚ÍŒ…ˆá‚¢‚ɈقȂéj -- ‚»‚ê‚ðƒXƒs[ƒhƒAƒbƒv‚·‚邽‚ß‚ÉAƒŠƒ\[ƒX‚ðŒã”¼‚̃vƒƒWƒFƒNƒg‚ɒljÁ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B iV‚µ‚¢l‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚̃RƒXƒg‚ÍA•‚¯‚É‚È‚é‚æ‚è‚à‚Ù‚Æ‚ñ‚Çí‚ɉÛÅ‚³‚ê‚Ü‚·Bj -- ƒ\ƒtƒgƒEƒFƒAŠJ”­‚ðŠmŽÀ‚ÉŒ©Ï‚à‚邱‚Æ‚ª‰Â”\‚Å‚·B i—˜_“I‚É‚à‰Â”\‚ł͂ ‚è‚Ü‚¹‚ñBj -- ƒvƒƒOƒ‰ƒ}‚̶ŽY«‚ÍAƒR[ƒhs‚̂悤‚È’Pƒ‚ȃƒgƒŠƒbƒN‚ÌŠÏ“_‚©‚瑪’è‚Å‚«‚Ü‚·B i‚à‚µŠÈŒ‰‚³‚ª—͂ł ‚ê‚ÎAƒR[ƒhs‚͈«‚¢A—Ç‚¢‚±‚Ƃł͂ ‚è‚Ü‚¹‚ñBj +- ���葽���̃h�L�������g�����ɗD���Ă��܂��B �i�ނ��͂��ꂪ�~�������A���‚ł����Ȃ��������ɔ��₷���Ƃ��]���ł��Ȃ��B�j +- �v���O���}�͓����ɂ��邱�Ƃ��ł��܂��B �i�v���O���}�͌��Ⴂ�ɈقȂ��j +- �������X�s�[�h�A�b�v���邽�߂ÉA���\�[�X���㔼�̃v���W�F�N�g�ɒlj����邱�Ƃ��ł��܂��B �i�V�����l�Ƃ̃R�~���j�P�[�V�����̃R�X�g�ÍA�����ɂȂ��������قƂ��Ç��ɉÛł����܂��B�j +- �\�t�g�E�F�A�J�����m���Ɍ��ς��邱�Ƃ��”\�ł��B �i���_�I�ɂ��”\�ł͂����܂����B�j +- �v���O���}�Ì��Y���ÍA�R�[�h�s�̂悤�ȒP���ȃ��g���b�N�̊ϓ_���瑪���ł��܂��B �i�����Ȍ������͂ł����ÎA�R�[�h�s�͈����A�ǂ����Ƃł͂����܂����B�j -‹@‰ï‚ª‚ ‚ê‚ÎA‚±‚ê‚ç‚Ì‚±‚Æ‚ðà–¾‚·‚邱‚Ƃ͂ł«‚Ü‚·‚ªA¬Œ÷‚µ‚Ä‚¢‚È‚¢‚ƈ«‚¢‹CŽ‚¿‚ɂȂ炸A‚±‚ê‚ç‚Ì_˜b‚É‘ÎR‚µ‚Ä‚ ‚È‚½‚Ì•]”»‚𑹂Ȃ¤‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚ç‚Ì_˜b‚Ì‚»‚ꂼ‚ê‚ÍA‰½‚ª‹N‚±‚Á‚Ä‚¢‚é‚©‚ðŽÀÛ‚ÉŽx”z‚µ‚Ä‚¢‚éƒ}ƒl[ƒWƒƒ[‚Ìl‚¦‚ð‹­‚ß‚éB^ŽÀ‚ÍAƒ}ƒl[ƒWƒƒ[‚ª”ނ炪—Ç‚¯‚ê‚ΗeˆÕ‚ɂȂèA”ނ炪ˆ«‚¢ê‡‚ɂ͂»‚ê‚ð–W‚°‚邱‚Ƃł·B +�@������ÎA�������̂��Ƃ��������邱�Ƃ͂ł��܂����A�������Ă��Ȃ��ƈ����C�����ɂȂ炸�A�������Ì_�b�ɑÎR���Ă��Ȃ��̕]���𑹂Ȃ����Ƃ͂����܂����B�������Ì_�b�̂��ꂼ���ÍA�����N�����Ă��邩�����ۂɎx�z�������}�l�[�W���[�Ìl�������߂��B�^���ÍA�}�l�[�W���[���ނ炪�ǂ����Ηe�ՂɂȂ��A�ނ炪�����ê‡ï¿½É‚͂������W���邱�Ƃł��B -Next [How to Deal with Organizational Chaos](11-How to Deal with Organizational Chaos.md) \ No newline at end of file +Next [How to Deal with Organizational Chaos](11-How%20to%20Deal%20with%20Organizational%20Chaos.md) \ No newline at end of file diff --git a/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index ae40549..7bc1a7b 100644 --- a/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,9 +1,9 @@ # How to Tell the Hard From the Impossible [//]: # (Version:1.0.1) -“‚¢‚±‚Æ‚ð‚µ‚ÄA•s‰Â”\‚ÆŒ©‚È‚·‚͎̂„‚½‚¿‚ÌŽdŽ–‚Å‚·B‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÌŠÏ“_‚©‚ç‚ÍA’Pƒ‚ȃVƒXƒeƒ€‚©‚笒·‚Å‚«‚È‚¢‚©A„’è‚Å‚«‚È‚¢ê‡‚Í•s‰Â”\‚Å‚·B‚±‚Ì’è‹`‚É‚æ‚Á‚ÄAŒ¤‹†‚ƌĂ΂ê‚é‚à‚͕̂s‰Â”\‚Å‚·B‘å—ʂ̒P‚È‚éŽdŽ–‚͓‚¢‚ªA•K‚¸‚µ‚à•s‰Â”\‚Æ‚¢‚¤‚킯‚ł͂Ȃ¢B +������Ƃ����ÄA�s�”\�ƌ��Ȃ��͎̂������̎d���ł��B�قƂ��ǂÌ��ƃv���O���}�[�̊ϓ_�����ÍA�P���ȃV�X�e�����ç¬ï¿½ï¿½ï¿½Å‚��Ȃ����A�����ł��Ȃ��ê‡ï¿½Í•s�”\�ł��B���̒��`�ɂ����ÄA�����ƌĂ΂������͕̂s�”\�ł��B���ʂ̒P�Ȃ��d���͓�����A�K�������s�”\�Ƃ����킯�ł͂Ȃ��B -‰ÈŠw“I‚ÈŠÏ“_‚âƒ\ƒtƒgƒEƒFƒAHŠw‚ÌŠÏ“_‚©‚ç‚ÍAŽÀۂɂ͕s‰Â”\‚È‚±‚Æ‚ð”ñí‚É‚¤‚Ü‚­‚â‚Á‚Ä‚­‚ê‚é‚©‚à‚µ‚ê‚È‚¢‚Ì‚ÅA‚±‚Ì‹æ•ʂ͖ʔ’‚­‚È‚¢B‚»‚ê‚Í‹N‹Æ‰Æ‚ª’P‚Ȃ颓ï‚Å‚ ‚èA”ނ炪–]‚Þ‚à‚̂̂قƂñ‚ǂ𓾂釗“I‚ȉðŒˆô‚ðŒ©‚Â‚¯‚é‚̂𕂯‚é‚ ‚È‚½‚ÌŽdŽ–‚ɂȂè‚Ü‚·B‰ðŒˆô‚ÍAŽ©M‚ðŽ‚Á‚ăXƒPƒWƒ…[ƒ‹‚³‚êAƒŠƒXƒN‚ª—‰ð‚³‚ê‚Ä‚¢‚éꇂɂ͓‚¢‚Å‚·B +�Ȋw�I�Ȋϓ_���\�t�g�E�F�A�H�w�̊ϓ_�����ÍA���ۂɂ͕s�”\�Ȃ��Ƃ������ɂ��܂������Ă����邩�������Ȃ��̂ÅA���̋��ʂ͖ʔ����Ȃ��B�����͋N�ƉƂ��P�Ȃé¢ï¿½ï¿½ï¿½Å‚����A�ނ炪�]�ނ��̂̂قƂ��ǂ𓾂é‡ï¿½ï¿½ï¿½I�ȉ����������‚����̂������邠�Ȃ��̎d���ɂȂ��܂��B�������ÍA���M�������ăX�P�W���[�������A���X�N���������������ê‡ï¿½É‚͓���ł��B -Å‚à–£—Í“I‚È”¯Œ^‚âF‚ðŒvŽZ‚·‚éƒVƒXƒeƒ€‚È‚ÇA”™‘R‚Æ‚µ‚½—v‹‚ð–ž‚½‚·‚±‚Ƃ͕s‰Â”\‚Å‚·B—vŒ‚ð‚æ‚è‘N–¾‚É‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎAl‚Ì–£—Í“I‚È”¯Œ^‚ÆF‚ðŒvŽZ‚µA‚»‚ê‚ðƒvƒŒƒrƒ…[‚µ‚½‚è•ÏX‚µ‚½‚èAŒ³‚̃Xƒ^ƒCƒ‹‚ÉŠî‚¢‚Čڋq–ž‘«“x‚ð‚‚ß‚ÄA‚½‚­‚³‚ñ‚Ì‚¨‹à‚ð‰Ò‚®ƒVƒXƒeƒ€‚ð\’z‚µ‚Ü‚µ‚傤B¬Œ÷‚Ì‘N–¾‚È’è‹`‚ª‚È‚¢A‚ ‚È‚½‚ͬŒ÷‚µ‚Ü‚¹‚ñB +�ł����͓I�Ȕ��^���F���v�Z�����V�X�e���ȂÇA���R�Ƃ����v���𖞂������Ƃ͕s�”\�ł��B�v���������N���ɂ��邱�Ƃ��ł����ÎA�l�̖��͓I�Ȕ��^�ÆF���v�Z���A�������v���r���[�������ÏX�������A���̃X�^�C���Ɋ��Â��Čڋq�����x�����߂ÄA���������̂������҂��V�X�e�����\�z���܂��傤�B�����̑N���Ȓ��`���Ȃ��A���Ȃ��Í������܂����B -Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) +Next [How to Utilize Embedded Languages](02-How%20to%20Utilize%20Embedded%20Languages.md) diff --git a/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index 87a8901..da87dd4 100644 --- a/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -1,11 +1,11 @@ # How to Utilize Embedded Languages -ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðƒVƒXƒeƒ€‚É‘g‚Ýž‚Þ‚±‚Æ‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͂قƂñ‚ǃGƒƒ`ƒbƒN‚È–£—Í‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚»‚ê‚ÍŽÀs‚Å‚«‚éÅ‚à‘n‘¢“I‚Èsˆ×‚Ì1‚‚ł·B‚»‚ê‚̓VƒXƒeƒ€‚ð”ñí‚É‹­—͂ɂµ‚Ü‚·B”Þ—‚͔ޗ‚ÌÅ‚à‘n‘¢“I‚ȃvƒƒƒeƒEƒX‚̃XƒLƒ‹‚ð”­Šö‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚ê‚Í‚ ‚È‚½‚Ì—Fl‚ɃVƒXƒeƒ€‚ðì‚éB +�v���O���~���O�������V�X�e���ɑg�Ý��ނ��ƂÍA�v���O���}�[�ɂƂ��Ă͂قƂ��ǃG���`�b�N�Ȗ��͂������Ă��܂��B�����͎��s�ł����ł��n���I�Ès�ׂ�1�‚ł��B�����̓V�X�e���������ɋ��͂ɂ��܂��B�Þ��͔Þ��Ìł��n���I�ȃv�����e�E�X�̃X�L���𔭊����邱�Ƃ��ł��܂��B�����͂��Ȃ��̗F�l�ɃV�X�e���������B -¢ŠE’†‚ÌÅ‚‚̃eƒLƒXƒgƒGƒfƒBƒ^‚É‚ÍA‚·‚ׂȾŒê‚ª‘g‚Ýž‚Ü‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍA–Ú“I‚ÌŽ‹’®ŽÒ‚ªŒ¾Œê‚ðK“¾‚Å‚«‚é”͈͂Ŏg—p‚Å‚«‚Ü‚·B‚à‚¿‚ë‚ñAŒ¾Œê‚ÌŽg—p‚ÍAƒeƒLƒXƒgƒGƒfƒBƒ^‚̂悤‚ɃIƒvƒVƒ‡ƒ“‚Ås‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚Ì‚½‚ßAƒCƒjƒVƒAƒ`ƒu‚Í‚»‚ê‚ðŽg—p‚Å‚«A’N‚à‚»‚ê‚ðŽg—p‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB +���E���ÌÅ��̃e�L�X�g�G�f�B�^�ɂÍA���ׂČ��ꂪ�g�Ý��܂��Ă��܂��B�����ÍA�ړI�̎����҂��������K���ł����͈͂Ŏg�p�ł��܂��B���������A�����̎g�p�ÍA�e�L�X�g�G�f�B�^�̂悤�ɃI�v�V�����Ås�����Ƃ��ł��܂��B���̂��ßA�C�j�V�A�`�u�͂������g�p�ł��A�N���������g�p���邱�Ƃ͂ł��܂����B -Ž„‚Æ‘¼‚Ì‘½‚­‚̃vƒƒOƒ‰ƒ}[‚ÍA“ÁŽê–Ú“I‚Ì‘g‚Ýž‚ÝŒ¾Œê‚ð쬂·‚邯‚¢‚¤ã©‚ɊׂÁ‚Ä‚¢‚Ü‚·BŽ„‚Í‚»‚ê‚É“ñ“x—Ž‚¿‚½B‚·‚łɑg‚Ýž‚ÝŒ¾Œê‚É“Á‰»‚µ‚ÄÝŒv‚³‚ꂽ‘½‚­‚ÌŒ¾Œê‚ª‘¶Ý‚µ‚Ü‚·B‚ ‚È‚½‚ÍV‚µ‚¢‚à‚Ì‚ðì‚é‘O‚É“ñ“xl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB +���Ƒ��̑����̃v���O���}�[�ÍA�����ړI�̑g�Ý��݌������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½Æ‚���㩂Ɋׂ��Ă��܂��B���͂����ɓ��x�������B���łɑg�Ý��݌����ɓ������ÄÝŒv���ꂽ�����̌��ꂪ���݂��܂��B���Ȃ��ÍV�������̂������O�ɓ��x�l���Ȃ����΂Ȃ��܂����B -Œ¾Œê‚ð–„‚ßž‚Þ‘O‚ÉŽ©•ªŽ©g‚Éq‚Ë‚é‚ׂ«^‚ÌŽ¿–â‚ÍA‚±‚ê‚ÍŽ„‚Ì’®O‚Ì•¶‰»‚ƈê‚ÉA‚Ü‚½‚Í”½‘΂ɓ­‚­‚̂łµ‚傤‚©H‚ ‚È‚½‚ª’®O‚ðƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚ÉŒÀ’肵‚悤‚ÆŽv‚Á‚½‚çA‚Ç‚¤‚·‚ê‚΂»‚ꂪ–ð‚É—§‚¿‚Ü‚·‚©H‚ ‚È‚½‚̈Ó}‚·‚éƒI[ƒfƒBƒGƒ“ƒX‚ªê‚çƒvƒƒOƒ‰ƒ}‚Å‚ ‚éê‡A”Þ‚ç‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ}ƒCƒ“ƒ^ƒtƒF[ƒXiAPIj‚ðD‚Þ‚Å‚µ‚傤‚©H‚»‚ê‚͂ǂñ‚ÈŒ¾Œê‚Å‚·‚©HƒvƒƒOƒ‰ƒ}[‚ÍA‹·‚­Žg‚í‚ê‚Ä‚¢‚éV‚µ‚¢Œ¾Œê‚ðŠw‚Ô‚±‚Æ‚ð–]‚܂Ȃ¢B”Þ‚ç‚Ì•¶‰»‚Æ—‚݇‚¤‚ÆA‚»‚ê‚ðŠw‚Ԃ̂ɑ½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·•K—v‚Í‚ ‚è‚Ü‚¹‚ñBV‚µ‚¢Œ¾Œê‚ð쬂·‚邱‚Ƃ͊ì‚тł·B‚µ‚©‚µAŽ„‚½‚¿‚Í‚»‚ê‚ðƒ†[ƒU[‚̃j[ƒY‚É–Ó–Ú“I‚É‚·‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ª–{“–‚ÉŒ³‚̃j[ƒY‚ƃAƒCƒfƒA‚ðŽ‚Á‚Ä‚¢‚È‚¢ŒÀ‚èAŠù‘¶‚ÌŒ¾Œê‚ðŽg—p‚µ‚ÄAƒ†[ƒU[‚ªŠù‚ÉŽ‚Á‚Ä‚¢‚éŽg‚¢Šµ‚ꂽ‚à‚Ì‚ðŠˆ—p‚Å‚«‚邿‚¤‚É‚µ‚Ü‚µ‚傤B +�����𖄂ß��ޑO�Ɏ������g�Éq�˂��ׂ��^�̎����ÍA�����͎��̒��O�̕����ƈê�ÉA�܂��͔��΂ɓ����̂ł��傤���H���Ȃ������O���v���O���}�[�ȊO�Ìl�Ɍ��肵�悤�Ǝv�������A�ǂ������΂��ꂪ���ɗ����܂����H���Ȃ��̈Ó}�����I�[�f�B�G���X�������v���O���}�ł����ê‡ï¿½A�ނ��̓A�v���P�[�V�����v���O���}�C���^�t�F�[�X�iAPI�j���D�ނł��傤���H�����͂ǂ��Ȍ����ł����H�v���O���}�[�ÍA�����g���������V�����������w�Ԃ��Ƃ��]�܂Ȃ��B�ނ��̕����Ɨ��Ý����ÆA�������w�Ԃ̂ɑ����̎��Ԃ����₷�K�v�͂����܂����B�V�����������ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚͊��тł��B�������A�������͂��������[�U�[�̃j�[�Y�ɖӖړI�ɂ����ׂ��ł͂����܂����B���Ȃ����{���Ɍ��̃j�[�Y�ƃA�C�f�A�������Ă��Ȃ������A�����̌������g�p���ÄA���[�U�[�����Ɏ����Ă����g�����ꂽ���̂����p�ł����悤�ɂ��܂��傤�B -Next [Choosing Languages](03-Choosing Languages.md) \ No newline at end of file +Next [Choosing Languages](03-Choosing%20Languages.md) \ No newline at end of file diff --git a/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 1c7dcf2..e5efd00 100644 --- a/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -1,15 +1,15 @@ # Choosing Languages -”Þ‚ÌŽdŽ–iƒnƒbƒJ[j‚ðˆ¤‚·‚éŒÇ“ƂȃvƒƒOƒ‰ƒ}[‚ÍAƒ^ƒXƒN‚Ì‚½‚ß‚Ìŗǂ̌¾Œê‚ð‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÍAŽg—p‚·‚錾Œê‚ð‚Ù‚Æ‚ñ‚ǧŒä‚Å‚«‚Ü‚¹‚ñBˆê”Ê“I‚ÉA‚±‚Ì–â‘è‚ÍA‹Zp“I‚ÈŒˆ’è‚ł͂Ȃ­­Ž¡“I‚ÈŒˆ’è‚ð‰º‚µ‚Ä‚¢‚éæ“±“I‚ÈãŽi‚É‚æ‚Á‚ÄŒˆ’肳‚ê‚Ä‚¨‚èA‚µ‚΂µ‚Î’¼Ú‚Ì’mޝ‚ÅA‚ ‚Ü‚èŽó‚¯“ü‚ê‚ç‚ê‚Ä‚¢‚È‚¢ƒc[ƒ‹‚ð’m‚Á‚Ä‚¢‚邯‚«‚Å‚³‚¦AÅ‚‚Å‚·B‘¼‚ÌꇂɂÍAƒ`[ƒ€ŠÔ‚Ì’cŒ‹‚Ì^‚̉¶Œb‚ÍA‚ ‚é’ö“xƒRƒ~ƒ…ƒjƒeƒB‚̑傫‚³‚É‚æ‚Á‚ÄAŒÂl‚Ì‘I‘ðŽˆ‚ð”rœ‚µ‚Ü‚·B‘½‚­‚Ìê‡Aƒ}ƒl[ƒWƒƒ[‚ÍA“Á’è‚ÌŒ¾Œê‚ł̌oŒ±‚ðŽ‚ÂƒvƒƒOƒ‰ƒ}[‚ðŒÙ‚¤•K—v‚ª‚ ‚邱‚ƂɌ¡ˆø‚³‚ê‚Ü‚·BŠÔˆá‚¢‚È‚­A”Þ‚ç‚̓vƒƒWƒFƒNƒg‚âŠé‹Æ‚ɂƂÁ‚ÄÅ‘P‚Ì—˜‰v‚Æ”Fޝ‚µ‚Ä‚¢‚é‚à‚Ì‚ð’ñ‹Ÿ‚µ‚Ä‚¨‚èA‚»‚ê‚ð‘¸d‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µAŽ„‚ÍŒÂl“I‚É‚ÍA‚±‚ꂪ‚ ‚È‚½‚ª‘˜‹ö‚·‚é‰Â”\«‚Ì‚‚¢Å‚à–³‘ʂŌë‚Á‚½‹¤’ʂ̗ûK‚Å‚ ‚邯ŒÂl“I‚ÉM‚¶‚Ä‚¢‚Ü‚·B +�ނ̎d���i�n�b�J�[�j���������ǓƂȃv���O���}�[�ÍA�^�X�N�̂��߂Ìŗǂ̌������I�Ԃ��Ƃ��ł��܂��B�قƂ��ǂÌ��ƃv���O���}�[�ÍA�g�p���錾�����قƂ��Ç����ł��܂����B���ʓI�ÉA���̖����ÍA�Z�p�I�Ȍ����ł͂Ȃ������I�Ȍ����������Ă����擱�I�È��i�ɂ����Č��肳���Ă����A���΂��Β��ڂ̒m���ÅA���܂��󂯓��������Ă��Ȃ��c�[�����m���Ă����Ƃ��ł����A�Å��ł��B���Ìê‡ï¿½É‚ÍA�`�[���Ԃ̒c���Ì^�̉��b�ÍA�������x�R�~���j�e�B�̑傫���ɂ����ÄA�Âl�̑I�������r�����܂��B�����Ìê‡ï¿½A�}�l�[�W���[�ÍA�����̌����ł̌o�������ƒv���O���}�[���ق��K�v�����邱�ƂɌ��������܂��B�ԈႢ�Ȃ��A�ނ��̓v���W�F�N�g�����ƂɂƂ��ÄÅ‘P�̗��v�ƔF�����Ă������̂��ñ‹Ÿ‚������A�����ð‘¸d���Ȃ����΂Ȃ��܂����B�������A���͌Âl�I�ɂÍA���ꂪ���Ȃ������������”\���Ì����ł����ʂŌ��������ʂ̗��K�ł����ƌÂl�I�ÉM���Ă��܂��B -‚à‚¿‚ë‚ñA•¨Ž–‚ÍŒˆ‚µ‚ĈꎟŒ³‚ł͂ ‚è‚Ü‚¹‚ñBƒRƒAŒ¾Œê‚ª‹`–±•t‚¯‚ç‚ê‚Ä‚¢‚Ä‚àA‚ ‚È‚½‚̃Rƒ“ƒgƒ[ƒ‹‚͈̔͂𒴂¦‚Ä‚¢‚Ä‚àAƒc[ƒ‹‚⑼‚̃vƒƒOƒ‰ƒ€‚ð•ʂ̌¾Œê‚Å‘‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢ê‡‚ª‚ ‚è‚Ü‚·BŒ¾Œê‚ª–„‚ßž‚Ü‚ê‚éê‡i‚Ü‚½Aí‚Él—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·jAŒ¾Œê‚Ì‘I‘ð‚̓†[ƒU[‚Ì•¶‰»‚ɑ傫‚­ˆË‘¶‚µ‚Ü‚·BŽdŽ–‚ÉÅ‚à“K‚µ‚½Œ¾Œê‚ðŽg—p‚µ‚ĉïŽÐ‚âƒvƒƒWƒFƒNƒg‚ɃT[ƒrƒX‚ð’ñ‹Ÿ‚µAŽdŽ–‚ð‚æ‚è–Ê”’‚­‚·‚邽‚ß‚ÉA‚±‚ê‚ð—˜—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +���������A�����͌����Ĉꎟ���ł͂����܂����B�R�A���ꂪ�`���t�����������A���Ȃ��̃R���g���[���͈̔͂𒴂��Ă��Ă��A�c�[���⑼�̃v���O�������ʂ̌����Å����Ȃ����΂Ȃ��Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ꂪ���ß��܂����ê‡ï¿½i�܂��A���Él�������K�v�������܂��j�A�����̑I���̓��[�U�[�̕����ɑ傫���ˑ����܂��B�d���Éł��K�����������g�p���ĉ��Ђ��v���W�F�N�g�ɃT�[�r�X���ñ‹Ÿ‚��A�d���������ʔ������邽�߂ÉA�����𗘗p�����K�v�������܂��B -ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ÍAŽ©‘RŒ¾Œê‚ðŠw‚ԂقǓ‚­‚È‚¢‚Æ‚¢‚¤“_‚ÅAŽÀۂɂ͕\‹L–@‚ƌĂ΂ê‚é‚ׂ«‚Å‚·B‰SŽÒ‚âˆê•”‚ÌŠO•”‚Ìl‚É‚ÍV‚µ‚¢Œ¾Œê‚ðŠw‚Ԃ͓̂‚¢ì‹Æ‚Å‚·B‚ ‚È‚½‚̃xƒ‹ƒg‚̉º‚É3‚‚̃xƒ‹ƒg‚ª‚ ‚邯A‚»‚ê‚ÍŽÀÛ‚É—˜—p‰Â”\‚ȃ‰ƒCƒuƒ‰ƒŠ‚ÉŠµ‚ê‚邽‚߂̖â‘è‚ɉ߂¬‚Ü‚¹‚ñB 1‚‚ÍA3‚‚܂½‚Í4‚‚̌¾Œê‚ŃRƒ“ƒ|[ƒlƒ“ƒg‚ª¬—‚µ‚Ä‚¢‚邿‚¤‚ȑ傫‚ȃVƒXƒeƒ€‚ðl‚¦‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚»‚̂悤‚ȃVƒXƒeƒ€‚ÍA‘½‚­‚Ìê‡A1‚‚̌¾ŒêƒVƒXƒeƒ€‚æ‚è‚à‚¢‚­‚‚©‚Ì“_‚Å‚æ‚è‹­—͂ł ‚邯Žå’£‚µ‚Ä‚¢‚Ü‚·B +�v���O���~���O�����ÍA���R�������w�ԂقǓ���Ȃ��Ƃ����_�ÅA���ۂɂ͕\�L�@�ƌĂ΂����ׂ��ł��B���S�҂��ꕔ�̊O���Ìl�ɂÍV�����������w�Ԃ͓̂�����Ƃł��B���Ȃ��̃x���g�̉���3�‚̃x���g�������ÆA�����͎��ۂɗ��p�”\�ȃ��C�u�����Ɋ����邽�߂̖����ɉ߂��܂����B 1�‚ÍA3�‚܂���4�‚̌����ŃR���|�[�l���g���������Ă����悤�ȑ傫�ȃV�X�e�����l�����X���������܂��B���̂悤�ȃV�X�e���ÍA�����Ìê‡ï¿½A1�‚̌����V�X�e�������������‚��̓_�ł��苭�͂ł����Ǝ咣���Ă��܂��B -- ˆÙ‚È‚é•\‹L–@‚Å‹Lq‚³‚ê‚Ä‚¢‚éƒRƒ“ƒ|[ƒlƒ“ƒgŠÔ‚É‚ÍA•K‘R“I‚É‘aŒ‹‡‚ª‘¶Ý‚µ‚Ü‚·i‚½‚¾‚µA‚«‚ê‚¢‚ȃCƒ“ƒ^ƒtƒF[ƒX‚ł͂Ȃ¢‚©‚à‚µ‚ê‚Ü‚¹‚ñjB -- ŠeƒRƒ“ƒ|[ƒlƒ“ƒg‚ðŒÂ•ʂɑ‚«’¼‚·‚±‚Æ‚ÅAV‚µ‚¢Œ¾Œê/ƒvƒ‰ƒbƒgƒtƒH[ƒ€‚ÉŠÈ’P‚Éi‰»‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -- 1‚‚̌¾Œê‚ªƒVƒXƒeƒ€‘S‘̂ɓK‚µ‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·Bƒ‚ƒWƒ…[ƒ‹‚É•¡”‚ÌŒ¾Œê‚ðŽg—p‚·‚邱‚Æ‚ÅA“K؂ȃc[ƒ‹‚ð‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B +- �قȂ��\�L�@�ŋL�q���������R���|�[�l���g�ԂɂÍA�K�R�I�ɑa���������݂��܂��i�������A���ꂢ�ȃC���^�t�F�[�X�ł͂Ȃ����������܂����j�B +- �e�R���|�[�l���g���•ʂÉ����������ƂÅA�V��������/�v���b�g�t�H�[���ɊȒP�Éi�����邱�Ƃ��ł��܂��B +- 1�‚̌��ꂪ�V�X�e���S�̂ɓK���Ă��Ȃ��”\���������܂��B���W���[���ɕ����̌������g�p���邱�ƂÅA�K�؂ȃc�[�����I�Ԃ��Ƃ��ł��܂��B -‚±‚ê‚ç‚̉e‹¿‚̈ꕔ‚ÍS—Šw“I‚È‚à‚̂ɉ߂¬‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBS—Šw‚Íd—v‚Å‚·BŒ‹‹Ç‚̂Ƃ±‚ëAŒ¾Œêê§Žå‹`‚Ì”ï—p‚Í‚»‚ꂪ’ñ‹Ÿ‚·‚é—˜“_‚æ‚è‚àd—v‚Å‚·B +�������̉e���̈ꕔ�ÍS���w�I�Ȃ��̂ɉ߂��Ȃ����������܂����B�S���w�Íd�v�ł��B���ǂ̂Ƃ����A�����ê§ï¿½ï¿½ï¿½`�̔��p�͂��ꂪ�ñ‹Ÿ‚��闘�_�������d�v�ł��B -Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) +Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) diff --git a/jp/README.md b/jp/README.md index eec0ba9..780a49e 100644 --- a/jp/README.md +++ b/jp/README.md @@ -6,94 +6,94 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -##‚Í‚¶‚ß‚É -—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂȂ邱‚Ƃ͓‚­A‚‹M‚Å‚·Bƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ÌŽÀŽ¿“I‚ȃrƒWƒ‡ƒ“‚ðŽÀŒ»‚·‚éÅ‚à“‚¢•”•ª‚ÍA“¯—»‚âŒÚ‹q‚ðˆµ‚¤‚±‚Ƃł·BƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ€‚ð‘‚­‚±‚Æ‚Íd—v‚Å‚ ‚èA—D‚ꂽ’m«‚ƃXƒLƒ‹‚ð•K—v‚Æ‚µ‚Ü‚·B‚µ‚©‚µAŽÀÛ‚ÉŽq‹Ÿ‚Ì—V‚тł ‚é‚Ì‚ÍA—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ªAŒÚ‹q‚Æ•”•ª“I‚ÉÓ”C‚ª‚ ‚é–³”‚Ì“¯—»‚Ì—¼•û‚Ì‚½‚߂ɬŒ÷‚·‚éƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðì‚邽‚߂ɕK—v‚È‚±‚Ƃł·B‚±‚̃GƒbƒZƒC‚Å‚ÍA21΂̂Ƃ«‚É’N‚©‚ªŽ„‚Éà–¾‚µ‚½‚©‚Á‚½‚±‚Æ‚ð‰Â”\‚ÈŒÀ‚èŠÈŒ‰‚ɂ܂Ƃ߂悤‚Æ‚µ‚Ä‚¢‚Ü‚·B +##�͂��߂� +�ǂ��v���O���}�ɂȂ邱�Ƃ͓���A���M�ł��B�\�t�g�E�F�A�v���W�F�N�g�̎����I�ȃr�W���������������ł���������ÍA�������ڋq���������Ƃł��B�R���s���[�^�v���O�������������ƂÍd�v�ł����A�D�ꂽ�m���ƃX�L�����K�v�Ƃ��܂��B�������A���ۂɎq���̗V�тł����̂ÍA�ǂ��v���O���}���A�ڋq�ƕ����I�ÉÓ”C�����閳���̓����̗����̂��߂É��������\�t�g�E�F�A�V�X�e�������邽�߂ɕK�v�Ȃ��Ƃł��B���̃G�b�Z�C�łÍA21�΂̂Ƃ��ɒN�������É����������������Ƃ��”\�Ȍ����Ȍ��ɂ܂Ƃ߂悤�Ƃ��Ă��܂��B -‚±‚ê‚Í”ñí‚ÉŽåŠÏ“I‚È‚à‚̂ł ‚èA‚µ‚½‚ª‚Á‚ÄA‚±‚̘_•¶‚ÍŒÂl“I‚ÅA‘½­‚̈ӌ©‚ð‚à‚Á‚ĉ^–½‚¯‚ç‚ê‚Ü‚·BŽ„‚̓vƒƒOƒ‰ƒ}‚ªŽ©•ª‚ÌŽdŽ–‚Å’¼–Ê‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‰Â”\«‚ª‚‚¢–â‘è‚ÉŽ©•ªŽ©g‚ðŒÀ’肵‚Ä‚¢‚Ü‚·B‚±‚ê‚ç‚Ì–â‘è‚Ì‘½‚­‚Æ‚»‚̉ðŒˆô‚Ì‘½‚­‚ÍlŠÔ‚Ìó‘Ô‚É”ñí‚Ɉê”Ê“I‚È‚à‚̂ł ‚èA‚¨‚»‚ç‚­Ž„‚Íà“¾—Í‚ª‚ ‚邿‚¤‚ÉŒ©‚¦‚Ü‚·B‚»‚ê‚É‚à‚©‚©‚í‚炸AŽ„‚Í‚±‚̃GƒbƒZƒC‚ª–𗧂‚±‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B +�����͔����Ɏ��ϓI�Ȃ��̂ł����A���������ÄA���̘_���͌Âl�I�ÅA�����̈ӌ��������ĉ^���Â������܂��B���̓v���O���}�������̎d���Œ��ʂ��Ȃ����΂Ȃ��Ȃ��”\�������������Ɏ������g�����肵�Ă��܂��B�������̖����̑����Ƃ��̉������̑����Íl�ԂÌ��Ԃɔ����Ɉ��ʓI�Ȃ��̂ł����A�����炭���Í����͂������悤�Ɍ����܂��B�����ɂ��������炸�A���͂��̃G�b�Z�C���𗧂‚��Ƃ������Ă��܂��B -ƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚̓R[ƒX‚Å‹³‚¦‚ç‚ê‚Ü‚·B—D‚ꂽ–{FPragmatic Programmer [Prag99]ACode Complete [CodeC93]ARapid Development [RDev96]AExtreme Programming Explained [XP99]‚Í‚·‚ׂăRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Æ—D‚ꂽƒvƒƒOƒ‰ƒ}[‚Å‚ ‚邯‚¢‚¤‘å‚«‚È–â‘è‚ð‹³‚¦‚Ä‚¢‚Ü‚·Bƒ|[ƒ‹EƒOƒ‰ƒnƒ€iPGSitej‚ƃGƒŠƒbƒNEƒŒƒCƒ‚ƒ“ƒh[ƒnƒbƒJ[]‚̃GƒbƒZƒC‚ÍA‚±‚Ì‹LŽ–‚Ì‘O‚ÉA‚Ü‚½‚Í‚±‚Ì‹LŽ–‚ƂƂà‚ɓǂނׂ«‚Å‚·B‚±‚̃GƒbƒZƒC‚ÍAŽÐ‰ï–â‘è‚ð‹­’²‚µA•K—v‚ȃXƒLƒ‹‘S‘Ì‚ð•“I‚É—v–ñ‚·‚邱‚Ƃɂæ‚Á‚ÄA‚»‚ê‚ç‚Ì—D‚ꂽì•i‚Ƃ͈قȂè‚Ü‚·B +�R���s���[�^�v���O���~���O�̓R�[�X�ŋ��������܂��B�D�ꂽ�{�FPragmatic Programmer [Prag99]�ACode Complete [CodeC93]�ARapid Development [RDev96]�AExtreme Programming Explained [XP99]�͂��ׂăR���s���[�^�v���O���~���O�ƗD�ꂽ�v���O���}�[�ł����Ƃ����傫�Ȗ����������Ă��܂��B�|�[���E�O���n���iPGSite�j�ƃG���b�N�E���C�����h[�n�b�J�[]�̃G�b�Z�C�ÍA���̋L���̑O�ÉA�܂��͂��̋L���ƂƂ��ɓǂނׂ��ł��B���̃G�b�Z�C�ÍA�Љ��������������A�K�v�ȃX�L���S�̂���I�ɗv�ñ‚·‚邱�Ƃɂ����ÄA�������̗D�ꂽ���i�Ƃ͈قȂ��܂��B -‚±‚̃GƒbƒZƒC‚Å‚ÍAƒ{ƒX‚Æ‚¢‚¤Œ¾—t‚ÍA‚ ‚È‚½‚ª‚·‚éƒvƒƒWƒFƒNƒg‚ð’ñ‹Ÿ‚·‚él‚ðŽw‚·‚̂Ɏg—p‚³‚ê‚Ü‚·BŽ„‚̓rƒWƒlƒXA‰ïŽÐA•”‘°‚Æ‚¢‚¤Œ¾—t‚𓯋`Œê‚Æ‚µ‚ÄŽg‚Á‚Ä‚¢‚Ü‚·‚ªAƒrƒWƒlƒX‚Í‚¨‹à‚ð•ø‚­‚±‚Æ‚ðˆÃަ‚µ‚Ü‚·‚ªA‰ïŽÐ‚ÍŒ»‘ã‚ÌEê‚ðˆÃަ‚µA•”‘°‚͈ê”Ê“I‚É‚ ‚È‚½‚ª’‰½S‚𕪂©‚¿‡‚¤lX‚Å‚·B +���̃G�b�Z�C�łÍA�{�X�Ƃ������t�ÍA���Ȃ��������v���W�F�N�g���ñ‹Ÿ‚����l���w���̂Ɏg�p�����܂��B���̓r�W�l�X�A���ÐA�����Ƃ������t�𓯋`���Ƃ��Ďg���Ă��܂����A�r�W�l�X�͂������������Ƃ��Î����܂����A���Ђ͌����ÌE���������A�����͈��ʓI�ɂ��Ȃ��������S�𕪂��������l�X�ł��B -•”‘°‚ւ悤‚±‚»B +�����ւ悤�����B ## Contents 1. [Beginner](1-Beginner) - Personal Skills - - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - Team Skills - - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) 2. [Intermediate](2-Intermediate) - Personal Skills - - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) - Team Skills - - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) 3. [Advanced](3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) 4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) diff --git a/jp/SUMMARY.md b/jp/SUMMARY.md index 552702e..d049bd5 100644 --- a/jp/SUMMARY.md +++ b/jp/SUMMARY.md @@ -2,79 +2,79 @@ [//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How to Find Out Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How to Document Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How to Unit Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) * [Intermediate](2-Intermediate/README.md) * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn to Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How to analyze data.md) + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How to Grow Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) * [Advanced](3-Advanced/README.md) * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md index 26756e0..f17b3e4 100644 --- a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md +++ b/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) 调试(Debug)是æˆä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸ä¼šè°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ -ç†æƒ³ä¸»ä¹‰è€…认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿ï¼Œæ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿ï¼Œä»–ä»¬ä¸æ˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如 GNU ) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果ä¸èƒ½çœ‹é€ä»£ç çš„具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ +ç†æƒ³ä¸»ä¹‰è€…认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿ï¼Œæ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿ï¼Œä»–ä»¬ä¸æ˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如%20GNU%20) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果ä¸èƒ½çœ‹é€ä»£ç çš„具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ 调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ã€‚æ›´å¸¸è§çš„æ˜¯ï¼Œä½ çš„程åºå‡ºçŽ°äº†ä¸€ä¸ªé”™è¯¯ï¼Œå½“ä½ æ£€æŸ¥ä½ å†™çš„ä»£ç çš„æ—¶å€™ï¼Œå´ä¸çŸ¥é“这个错误是怎么å‘生的。ä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 @@ -19,4 +19,4 @@ 当调试需è¦ä¿®æ”¹ä»£ç çš„æ—¶å€™ï¼Œä¸€äº›åˆå­¦è€…会感到害怕。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - 就是因为许多人在一开始é¢å¯¹è¿™ç§ææƒ§çš„的时候表现的太脆弱,我们因此失去了很多本å¯ä»¥å˜æˆä¼˜ç§€ç¨‹åºå‘˜çš„人。 -Next [å¦‚ä½•é€šè¿‡åˆ†ç¦»é—®é¢˜ç©ºé—´æ¥ Debug](02-How to Debug by Splitting the Problem Space.md) +Next [å¦‚ä½•é€šè¿‡åˆ†ç¦»é—®é¢˜ç©ºé—´æ¥ Debug](02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md index 6688a9e..55ed659 100644 --- a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md +++ b/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md @@ -12,4 +12,4 @@ 一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 -Next [如何移除错误](03-How to Remove an Error.md) +Next [如何移除错误](03-How%20to%20Remove%20an%20Error.md) diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md index 01692d9..aed5d01 100644 --- a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md @@ -6,4 +6,4 @@ 有时候,å¯èƒ½å®žé™…上有几个 bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义 bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 -Next [如何使用日志调试](04-How to Debug Using a Log.md) +Next [如何使用日志调试](04-How%20to%20Debug%20Using%20a%20Log.md) diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md index b10baaf..1a127df 100644 --- a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md +++ b/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md @@ -10,4 +10,4 @@ 如果你有一个永久的日志,printling 现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 -Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How to Understand Performance Problems.md) +Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How%20to%20Understand%20Performance%20Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md index a89ca97..01869cf 100644 --- a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md @@ -8,4 +8,4 @@ 竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 -Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How to Fix Performance Problems.md) +Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How%20to%20Fix%20Performance%20Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md index a9ef90c..0604b85 100644 --- a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md +++ b/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md @@ -10,4 +10,4 @@ 你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的 boss 这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ -Next [如何优化循环](07-How to Optimize Loops.md) +Next [如何优化循环](07-How%20to%20Optimize%20Loops.md) diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md index 2cf3825..f44ee0e 100644 --- a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md +++ b/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md @@ -12,4 +12,4 @@ 这些æ“作的具体代价å–决于你的具体系统。在一些系统中,编译器和硬件会为你åšä¸€äº›äº‹æƒ…ã€‚ä½†å¿…é¡»æ¸…æ¥šï¼Œæœ‰æ•ˆçš„ä»£ç æ¯”需è¦åœ¨ç‰¹æ®Šå¹³å°ä¸‹ç†è§£çš„代ç è¦å¥½ã€‚ -Next [如何处ç†I/O开销](08-How to Deal with IO Expense.md) +Next [如何处ç†I/O开销](08-How%20to%20Deal%20with%20IO%20Expense.md) diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md index 7d60d95..89b60d6 100644 --- a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md +++ b/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md @@ -10,4 +10,4 @@ å¦ä¸€ç§æœ‰æ—¶èƒ½å¤Ÿç”¨æ¥ä¼˜åŒ–本地引用的技术是让计算更接近数æ®ã€‚例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 -Next [如何管ç†å†…å­˜](09-How to Manage Memory.md) +Next [如何管ç†å†…å­˜](09-How%20to%20Manage%20Memory.md) diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md index fe5e320..c06a9ea 100644 --- a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md @@ -12,4 +12,4 @@ æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no delete)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 -Next [如何处ç†å¶çŽ°çš„ Bug](10-How to Deal with Intermittent Bugs.md) +Next [如何处ç†å¶çŽ°çš„ Bug](10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md index 192cc89..46d466e 100644 --- a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md +++ b/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md @@ -14,4 +14,4 @@ 这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是 N 的平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。正å¼ç”±äºŽè¿™äº›æ–‡æœ¬é€šå¸¸éƒ½ä¼šå‡ºçŽ°ï¼Œæ‰€ä»¥æˆ‘ä»¬æ‰å¯ä»¥é©¬ä¸Šå‘现这个 bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 -Next [如何学习设计技能](11-How to Learn Design Skills.md) +Next [如何学习设计技能](11-How%20to%20Learn%20Design%20Skills.md) diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md index 4544985..09dd07c 100644 --- a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md +++ b/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md @@ -6,4 +6,4 @@ å‘展出你自己的风格是自然而有用的,但记ä½ï¼Œè®¾è®¡æ˜¯ä¸€ç§è‰ºæœ¯ï¼Œè€Œä¸æ˜¯ä¸€ç§æŠ€æœ¯ã€‚人们写的关于这个主题的书都有一ç§ä½¿å¾—å®ƒå¥½åƒæ˜¯æŠ€æœ¯çš„æ—¢å®šçš„兴趣。ä¸è¦æ­¦æ–­å¯¹å¾…特定的设计风格。 -Next [如何进行实验](12-How to Conduct Experiments.md) +Next [如何进行实验](12-How%20to%20Conduct%20Experiments.md) diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md index 0bfe1d5..f97984e 100644 --- a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md +++ b/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md @@ -19,4 +19,4 @@ 第二,你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验尽é‡åŽ»æä¾›æœ€å¤šçš„ä¿¡æ¯ã€‚但ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šè®©å®žéªŒä¿æŒç®€å•å˜çš„å›°éš¾ - 你必须通过ç»éªŒæ¥æå‡è¿™ç§æƒè¡¡çš„能力。 -Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why Estimation is Important.md) +Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why%20Estimation%20is%20Important.md) diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md index 3ff334e..185341a 100644 --- a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md @@ -11,4 +11,4 @@ 这个常è§çš„解读问题需è¦ä½ ä¸Žä½ çš„ boss å’Œå®¢æˆ·æ˜Žç¡®åœ°è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡å¯¹ä½ æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ -Next [如何估计编程时间](02-How to Estimate Programming Time.md) +Next [如何估计编程时间](02-How%20to%20Estimate%20Programming%20Time.md) diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md index bb45aa2..b4eb532 100644 --- a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md +++ b/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md @@ -18,4 +18,4 @@ 如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 -Next [如何å‘现信æ¯](03-How to Find Out Information.md) +Next [如何å‘现信æ¯](03-How%20to%20Find%20Out%20Information.md) diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md index ff79f8a..4b33e0d 100644 --- a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md +++ b/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md @@ -16,4 +16,4 @@ 如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且åšäº†æ‰€æœ‰è¯¥åšçš„å‡†å¤‡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒåŒ…括好的和å的,但你ä»å¯èƒ½çŠ¹è±«ä¸å†³ã€‚你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 -Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How to Utilize People as Information Sources.md) +Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md index 90589e5..15066f5 100644 --- a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md +++ b/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md @@ -12,4 +12,4 @@ 如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但å´è®©æˆ‘通过这么å°çš„付出就对公å¸çš„é”€å”®é˜Ÿä¼æœ‰äº†æ·±åˆ»çš„å°è±¡ã€‚ -Next [如何优雅地写文档](05-How to Document Wisely.md) +Next [如何优雅地写文档](05-How%20to%20Document%20Wisely.md) diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md index 012e11a..61aabd8 100644 --- a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md +++ b/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md @@ -17,4 +17,4 @@ - 为读者考虑,把你ç贵的时间花在让她更加容易阅读的事情上,并且 - 永远ä¸è¦ä½¿ç”¨è¿™æ ·çš„å‡½æ•°åæ¯”如 `foo`,`bar`, 或 `doIt`! -Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How to Work with Poor Code.md) +Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How%20to%20Work%20with%20Poor%20Code.md) diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md index c4376f5..c2e6a87 100644 --- a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md +++ b/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md @@ -8,4 +8,4 @@ 铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡æ‰€å¸¦æ¥çš„好处。特别的,你å¯ä»¥å°è¯•去隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 -Next [如何使用æºä»£ç æŽ§åˆ¶](07-How to Use Source Code Control.md) +Next [如何使用æºä»£ç æŽ§åˆ¶](07-How%20to%20Use%20Source%20Code%20Control.md) diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md index 22bcf3b..4abe360 100644 --- a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md +++ b/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md @@ -6,4 +6,4 @@ 使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。因æäº¤é”™è¯¯çš„代ç è€Œé™ä½Žä½ é˜Ÿå‹çš„å¼€å‘速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ -Next [如何进行å•元测试](08-How to Unit Test.md) +Next [如何进行å•元测试](08-How%20to%20Unit%20Test.md) diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md index 0cbf76f..f61a789 100644 --- a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md +++ b/zh/1-Beginner/Team-Skills/08-How to Unit Test.md @@ -6,4 +6,4 @@ æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ -Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take Breaks when Stumped.md) +Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take%20Breaks%20when%20Stumped.md) diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index f28ddb8..a40b983 100644 --- a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) 没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ -Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How to Recognize When to Go Home.md) +Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How%20to%20Recognize%20When%20to%20Go%20Home.md) diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md index 17b60b6..54130ff 100644 --- a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md +++ b/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md @@ -12,4 +12,4 @@ 因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 -Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How to Deal with Difficult People.md) +Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How%20to%20Deal%20with%20Difficult%20People.md) diff --git a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md index ce15d98..58f5677 100644 --- a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md +++ b/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md @@ -10,4 +10,4 @@ > è®°ä½ï¼Œä¸€ä¸ªå¥½çš„设计会被糟糕的代ç å®žçŽ°å¼¹å›žã€‚å¦‚æžœå¥½çš„æŽ¥å£å’ŒæŠ½è±¡åœ¨ä»£ç ä¸­åˆ°å¤„存在,最åŽçš„é‡å†™ä¼šæ›´åŠ ç—›è‹¦ã€‚å¦‚æžœå†™éš¾ä»¥ä¿®å¤çš„æ¸…晰代ç å¾ˆå›°éš¾ï¼Œè€ƒè™‘是什么与核心设计冲çªçš„东西导致了这个问题。 -Next [如何管ç†è½¯ä»¶ä¾èµ–](02-How to Manage Software System Dependence.md) +Next [如何管ç†è½¯ä»¶ä¾èµ–](02-How%20to%20Manage%20Software%20System%20Dependence.md) diff --git a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md index 9a4fc7e..c16d8ae 100644 --- a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md +++ b/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md @@ -10,4 +10,4 @@ 拥有组件æºä»£ç å¯ä»¥æŠŠé£Žé™©é™åˆ°1/4.有了æºä»£ç ï¼Œä½ å¯ä»¥æ›´å®¹æ˜“地评估它,调试它,找到é¿å…踩å‘çš„æ–¹æ³•ï¼Œå¹¶ä¸”ä½¿å¾—ä¿®å¤æ›´å®¹æ˜“。如果你进行修å¤ï¼Œä½ å¿…须把修å¤çš„内容æäº¤ç»™ç»„件的拥有者,并且让修改åˆå¹¶åˆ°å®˜æ–¹å‘布版中,å¦åˆ™ä½ å°†ä¸é€‚地必须维护一个éžå®˜æ–¹ç‰ˆæœ¬ã€‚ -Next [如何判断软件是å¦å¤ªä¸æˆç†Ÿäº†](03-How to Decide if Software is Too Immature.md) +Next [如何判断软件是å¦å¤ªä¸æˆç†Ÿäº†](03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) diff --git a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md index fb54694..a517da6 100644 --- a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md +++ b/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md @@ -15,4 +15,4 @@ 对这些标准的一点考虑论è¯äº†è‰¯å¥½æž„建的自由软件和开æºè½¯ä»¶åœ¨å‡å°ä¼ä¸šå®¶é£Žé™©ä¸Šçš„巨大价值 -Next [如何åšä¸€ä¸ªè´­ä¹°æˆ–构建决定](04-How to Make a Buy vs Build Decision.md) +Next [如何åšä¸€ä¸ªè´­ä¹°æˆ–构建决定](04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) diff --git a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md index f23b4b0..60e6bd5 100644 --- a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md +++ b/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md @@ -13,4 +13,4 @@ 在考虑了这些问题åŽï¼Œä½ å¯èƒ½åº”å½“å‡†å¤‡ä¸¤ä¸ªå·¥ç¨‹è®¡åˆ’è‰æ¡ˆï¼Œä¸€ä¸ªç»™è´­ä¹°ï¼Œä¸€ä¸ªç»™æž„建。这会强迫你考虑集æˆä»£ä»·ã€‚ä½ ä¹Ÿåº”å½“è€ƒè™‘ä¸¤ç§æŽªæ–½çš„é•¿æœŸç»´æŠ¤ä»£ä»·ã€‚ä¸ºäº†è¯„ä¼°é›†æˆä»£ä»·ï¼Œä½ å¿…须在购买软件å‰å¯¹å®ƒåšä¸€ä¸ªå½»åº•的评估。如果你ä¸èƒ½è¯„估好它,你å¯ä»¥å‡è®¾è´­ä¹°å®ƒä¼šæœ‰ä¸€ä¸ªä¸å¯é¢„料的风险,你应该以此决定是å¦è´­ä¹°ç‰¹å®šçš„产å“ã€‚å¦‚æžœè€ƒè™‘åŽæœ‰å‡ ä¸ªè´­ä¹°å†³å®šï¼Œéœ€è¦èŠ±ä¸€äº›ç²¾åŠ›åŽ»è¯„ä¼°æ¯ä¸ªå†³å®šã€‚ -Next [如何专业地æˆé•¿](05-How to Grow Professionally.md) +Next [如何专业地æˆé•¿](05-How%20to%20Grow%20Professionally.md) diff --git a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md index d55dd17..3794647 100644 --- a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md +++ b/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md @@ -8,4 +8,4 @@ 计划学习新技能的方å¼ï¼ŒåŒ…括çç¢Žçš„æŠ€æœ¯ç±»åž‹ï¼Œæ¯”å¦‚å­¦ä¹ ä¸€ä¸ªæ–°çš„è½¯ä»¶ç³»ç»Ÿï¼Œå’Œå›°éš¾çš„ç¤¾äº¤ç±»åž‹ï¼Œåƒæ¼‚亮的写作,把它们集æˆåˆ°ä½ çš„工作中。 -Next [如何评估é¢è¯•者](06-How to Evaluate Interviewees.md) +Next [如何评估é¢è¯•者](06-How%20to%20Evaluate%20Interviewees.md) diff --git a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md index e3ed0b0..72382a7 100644 --- a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md +++ b/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md @@ -12,4 +12,4 @@ 最åŽï¼Œé¢è¯•ä¹Ÿæ˜¯ä¸€ä¸ªé”€å”®çš„è¿‡ç¨‹ã€‚ä½ åº”è¯¥æŠŠä½ çš„å…¬å¸æˆ–工程销售给候选人。然而,你是在与程åºå‘˜è°ˆè¯ï¼Œæ‰€ä»¥ä¸è¦å°è¯•改å˜äº‹å®žã€‚从å的事物开始讲起,最åŽä»¥å¥½çš„事物作为强有力的结æŸã€‚ -Next [怎么决定什么时候使用奇妙的计算机科学](07-How to Know When to Apply Fancy Computer Science.md) +Next [怎么决定什么时候使用奇妙的计算机科学](07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) diff --git a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md index a52a043..4117bd6 100644 --- a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md +++ b/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md @@ -12,4 +12,4 @@ 如果一个充分独立算法使用了些许奇妙的å¯ä»¥å‡å°‘ç¡¬ä»¶æ¶ˆè€—æˆ–å¢žåŠ æ•´ä¸ªç³»ç»Ÿçš„ä¸¤å€æ€§èƒ½è¡¨çŽ°çš„ç®—æ³•ï¼Œä¸è€ƒè™‘它å¯èƒ½æ˜¯æœ‰ç½ªçš„ã€‚äº‰è®ºè¿™æ ·ä¸€ä¸ªæ–¹æ³•çš„ä¸€ä¸ªå…³é”®æ˜¯ï¼Œè¯æ˜Žé£Žé™©ç¡®å®žæ˜¯ç›¸å½“的低,因为目标技术å¯èƒ½è¢«å……分研究过了,唯一的è¯é¢˜æ˜¯é›†æˆçš„风险。在这里一个程åºå‘˜çš„ç»éªŒå’Œè¯„估能够真的ååŒå¥‡å¦™çš„算法让集æˆå˜å¾—容易。 -Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How to Talk to Non-Engineers.md) +Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How%20to%20Talk%20to%20Non-Engineers.md) diff --git a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index 55dae5b..f118e15 100644 --- a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -11,4 +11,4 @@ 最åŽï¼Œå¯èƒ½çš„è¯ï¼Œä¼°é‡ä¸ªäººæ¿€åŠ±çš„ä¸œè¥¿å¯¹ä½ å·¥ä½œçš„å½±å“ã€‚ä¾‹å¦‚ï¼Œä¿®å¤ bug æ—¶ï¼Œæ•°ä¸€æ•°æˆ‘å®Œå…¨ä¸æ„Ÿå…´è¶£çš„ bug 的数目,因为这和ä»ç„¶å­˜åœ¨çš„ bug æ•°ç›®æ˜¯ç‹¬ç«‹çš„ï¼Œå¹¶ä¸”è¿™ä¹Ÿæ˜¯å½±å“æˆ‘对公å¸çš„顾客的增值的最å°çš„å¯èƒ½æ–¹å¼ã€‚把æ¯ä¸ª bug 和一个高兴的顾客关è”èµ·æ¥ï¼Œ*是*对我个人的激励。 -Next [如何被广泛信任](02-How to be Widely Trusted.md) +Next [如何被广泛信任](02-How%20to%20be%20Widely%20Trusted.md) diff --git a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index 5af3121..e38e9de 100644 --- a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -4,4 +4,4 @@ ä¸è¦ä¸æ‡‚装懂。与队å‹ä»¥å¤–的人一起时,你必须清除地区分“当下在我脑å­é‡Œä¸æ‡‚的东西â€ä»¥åŠâ€œæˆ‘æ›¾ç»æ²¡æœ‰è®¤è¯†åˆ°çš„东西â€ã€‚ -Next [如何在时间和空间æƒè¡¡](03-How to Tradeoff Time vs Space.md) +Next [如何在时间和空间æƒè¡¡](03-How%20to%20Tradeoff%20Time%20vs%20Space.md) diff --git a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md index 329d863..95109e6 100644 --- a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md +++ b/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md @@ -12,4 +12,4 @@ 现代计算机内存越æ¥è¶Šä¾¿å®œï¼Œå› ä¸ºä¸åƒå¤„ç†å™¨æ—¶é—´ï¼Œä½ åœ¨è¾¾åˆ°è¾¹ç•Œå‰ä½ ä¸èƒ½çœ‹è§å®ƒï¼Œä½†è¿™ç§å¤±è´¥æ˜¯ç¾é𾿀§çš„。使用内存也有éšè—的代价,比如你影å“了其他需è¦è¢«ä¿ç•™çš„程åºï¼Œä»¥åŠä½ åˆ†é…和释放内存的时间。在你想è¦èŠ±æ›´å¤šç©ºé—´åŽ»æ¢å–速度之å‰ï¼Œè¯·ä»”细考虑这一点。 -Next [如何进行压力测试](04-How to Stress Test.md) +Next [如何进行压力测试](04-How%20to%20Stress%20Test.md) diff --git a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md index f15462c..40eedf4 100644 --- a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md +++ b/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md @@ -14,4 +14,4 @@ [1] "æ’žå“" -Next [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](05-How to Balance Brevity and Abstraction.md) +Next [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) diff --git a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md index 6f14a01..e152ddd 100644 --- a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md +++ b/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md @@ -6,4 +6,4 @@ å¯ç§»æ¤æ€§ä¹Ÿæœ‰ç±»ä¼¼çš„é—®é¢˜ã€‚ä»£ç æ˜¯å¦åº”当å¯ç§»æ¤åˆ°ä¸åŒçš„电脑,编译器,软件系统或平å°ï¼Ÿè¿˜æ˜¯ç®€å•地传输?我认为,ä¸å¯ç§»æ¤ï¼ŒçŸ­è€Œç®€å•ä¼ è¾“çš„ä»£ç æ¯”长而å¯ç§»æ¤çš„代ç è¦å¥½ã€‚把ä¸å¯ç§»æ¤ä»£ç é™åˆ¶åœ¨ç‰¹å®šçš„领域是一个想对轻æ¾è€Œä¸”无疑是好的主æ„。比如一个使用了特定 DBMS 的数æ®åº“查询的类。 -Next [如何学习新技能](06-How to Learn New Skills.md) +Next [如何学习新技能](06-How%20to%20Learn%20New%20Skills.md) diff --git a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md index e8e58e5..109c398 100644 --- a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md +++ b/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md @@ -10,4 +10,4 @@ 如果你领导团队,需è¦çŸ¥é“他们是怎么学习的,并且通过给他们安排适é‡çš„和他们感兴趣的技能的工程æ¥é”»ç‚¼ä»–们。ä¸è¦å¿˜è®°ç¨‹åºå‘˜æœ€é‡è¦çš„æŠ€èƒ½ä¸æ˜¯æŠ€æœ¯ã€‚让你的团队æˆå‘˜æœ‰ä¸€ä¸ªæœºä¼šåŽ»çŽ©ï¼Œé”»ç‚¼å‹‡æ°”ï¼Œè¯šå®žï¼Œä»¥åŠäº¤æµã€‚ -Next [学会打字](07-Learn to Type.md) +Next [学会打字](07-Learn%20to%20Type.md) diff --git a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md index 4432db0..e95f186 100644 --- a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md +++ b/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„è´£ä»»æ„Ÿæ˜¯ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当 Michael Tiemann 在 MCC 的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³æ˜¯å¦‚此的急促以至于难以分辨。 -Next [如何åšé›†æˆæµ‹è¯•](08-How to Do Integration Testing.md) +Next [如何åšé›†æˆæµ‹è¯•](08-How%20to%20Do%20Integration%20Testing.md) diff --git a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md index e384fea..1f5cfd1 100644 --- a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md +++ b/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md @@ -4,4 +4,4 @@ ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯å¿…须通过显å¼é›†æˆæ¥è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,请仔细评估。 -Next [交æµè¯­è¨€](09-Communication Languages.md) +Next [交æµè¯­è¨€](09-Communication%20Languages.md) diff --git a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md index 01d290e..17ed157 100644 --- a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md +++ b/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md @@ -8,4 +8,4 @@ XML æ˜¯è®¾è®¡æ–°æ ‡å‡†çš„æ ‡å‡†ã€‚è¿™ä¸æ˜¯ä¸€ä¸ªæ•°æ®é—´äº¤æ¢çš„问题的解 SQL 是一ç§éžå¸¸æœ‰åŠ›è€Œä¸°å¯Œçš„æ•°æ®æŸ¥è¯¢å’Œæ“作语言,而éžä¸€ç§ç¼–程语言。它有许多ç§ç±»ï¼Œå…¸åž‹åœ°ä¾èµ–于产å“,但这没有标准核心那么é‡è¦ã€‚SQL 是关系数æ®åº“çš„*巧舌弗兰å¡*。你å¯èƒ½å¯ä»¥ä¹Ÿå¯èƒ½ä¸å¯ä»¥åœ¨ä»»ä½•领域从对关系数æ®åº“çš„ç†è§£ä¸­å—益,但你必须对它们和 SQL 的语法和å«ä¹‰æœ‰åŸºæœ¬çš„ç†è§£ã€‚ -Next [é‡åž‹å·¥å…·](10-Heavy Tools.md) +Next [é‡åž‹å·¥å…·](10-Heavy%20Tools.md) diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md index b93c9ce..f819058 100644 --- a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md +++ b/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md @@ -11,4 +11,4 @@ - XML è§£æžå™¨ï¼› - 电å­è¡¨æ ¼ã€‚ -Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How to analyze data.md) +Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How%20to%20analyze%20data.md) diff --git a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md index 89944b1..492aed4 100644 --- a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md +++ b/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md @@ -14,4 +14,4 @@ 让我给你看å¦ä¸€ä¸ªä¾‹å­ï¼Œåªæ˜¯ä¸€äº›æ€æƒ³ç²®é£Ÿï¼Œè®©æˆ‘们å‡è®¾ä½ çš„任务是找到字典里超过三ä½çš„åŒå­—异构è¯ï¼ˆä¸€ä¸ªå¼‚æž„è¯å¿…é¡»åœ¨åŒæ ·çš„字典里有å¦ä¸€ä¸ªè¯ï¼‰ã€‚如果你把这当åšä¸€ä¸ªè®¡ç®—任务,你将会结æŸäºŽæ— å°½çš„,å°è¯•找出æ¯ä¸ªå•è¯çš„æ‰€æœ‰ç»„åˆï¼Œç„¶åŽæ‹¿å®ƒè·Ÿåˆ—表里的所有其他å•è¯æ¯”较,这样一个无尽的努力中。然而,如果你分æžäº†æ‰‹å¤´çš„æ•°æ®ï¼Œä½ ä¼šæ„识到,æ¯ä¸ªå•è¯å¯èƒ½è¢«ä¸€ä¸ªåŒ…å«è¿™ä¸ªè¯æœ¬èº«ä»¥åŠç”¨å®ƒçš„å­—æ¯ä½œä¸º ID çš„æŽ’åºæ•°ç»„的记录所代表,这个蛮力算法å¯èƒ½éœ€è¦è¿è¡Œå‡ å¤©ï¼Œè€Œå°çš„é‚£ä¸ªç®—æ³•åªæ˜¯ä¸€ä»¶å‡ ç§’的事。下次é¢å¯¹ä¸€ä¸ªæ£˜æ‰‹çš„问题时,记ä½è¿™ä¸ªä¾‹å­ã€‚ -Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How to Manage Development Time.md) +Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How%20to%20Manage%20Development%20Time.md) diff --git a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md index 807b4f0..3da3b72 100644 --- a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md +++ b/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md @@ -8,4 +8,4 @@ ç¡®ä¿ä½ çš„计划包括了:内部团队会议,写代ç ï¼Œæ–‡æ¡£ï¼Œè§„åˆ’å‘¨æœŸæ´»åŠ¨ï¼Œé›†æˆæµ‹è¯•,处ç†å¤–部关系,疾病,休å‡ï¼Œå·²æœ‰å·¥ç¨‹ç»´æŠ¤ï¼Œè¿˜æœ‰å¼€å‘环境维护。工程计划å¯ä»¥ä½œä¸ºä¸€ç§ä¸ºå±€å¤–人或你的 boss 准备的关于你或你的团队正在åšçš„äº‹æƒ…çš„è§†å›¾ã€‚å› ä¸ºå¦‚æ­¤ï¼Œæ‰€ä»¥å®ƒåº”è¯¥æ˜¯çŸ­ä¸”åŠæ—¶æ›´æ–°çš„。 -Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How to Manage Third-Party Software Risks.md) +Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) diff --git a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md index 01af7ea..2031e28 100644 --- a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md +++ b/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md @@ -8,4 +8,4 @@ ç†è§£å·²æœ‰çš„为æŸä¸ªç‰¹æ®Šç›®çš„的第三方软件的适用性是éžå¸¸è§ä»è§æ™ºçš„东西。这是éžå¸¸å®¢è§‚的,并且通常ä½åœ¨ä¸“家心里。如果你å‘现了那些专家,你å¯ä»¥èŠ‚çœå¾ˆå¤šæ—¶é—´ã€‚很多时候,一个工程会如此完全地ä¾èµ–于第三方软件,以至于如果集æˆå¤±è´¥äº†ï¼Œå·¥ç¨‹å°±å¤±è´¥äº†ã€‚åƒæ—¶é—´è¡¨é‡Œå†™çš„é‚£æ ·æ¸…æ™°åœ°è¡¨è¾¾äº†å±æœºã€‚å¦‚æžœå±æœºä¸èƒ½è¢«å°½æ—©æ¶ˆé™¤ï¼Œè¯•ç€è®¢ä¸€ä¸ªä¸ºæ„外准备的计划,比如å¯ç”¨çš„第二方案,或者自己写下功能点的能力。永远ä¸è¦è®©æ—¶é—´è¡¨ä¾èµ–于蒸汽。 -Next [如何管ç†å’¨è¯¢å¸ˆ](03-How to Manage Consultants.md) +Next [如何管ç†å’¨è¯¢å¸ˆ](03-How%20to%20Manage%20Consultants.md) diff --git a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index b69af54..89016dd 100644 --- a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -6,4 +6,4 @@ 如果咨询师è¦å†™ä»£ç ï¼Œä½ å¿…须在你使用它们å‰ä»”细 review。有ç€å¤§æ®µå¸¦é£Žé™©è€Œæ²¡æœ‰è¢« review 的代ç ï¼Œä¼šè®©ä½ å®Œæˆä¸äº†å·¥ç¨‹ã€‚事实上这对所有的团队æˆå‘˜éƒ½æ˜¯æˆç«‹çš„,但你通常有更多与你接近的团队æˆå‘˜çš„知识。 -Next [如何适é‡äº¤æµ](04-How to Communicate the Right Amount.md) +Next [如何适é‡äº¤æµ](04-How%20to%20Communicate%20the%20Right%20Amount.md) diff --git a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md index 2ca42d1..fd52f57 100644 --- a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md +++ b/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md @@ -4,4 +4,4 @@ éžæ­£å¼äº¤æµå€¼å¾—åšä»»ä½•事情去鼓励。更多有用的沟通工作在åŒäº‹é—´çš„åˆé¥­å¯ä»¥è¿›è¡Œï¼Œè€Œéžå…¶ä»–çš„æ—¶é—´ã€‚è®¸å¤šå…¬å¸æ²¡æœ‰æ„è¯†åˆ°æˆ–è€…ä¸æ”¯æŒè¿™ä¸€ç‚¹ï¼Œè¿™æ˜¯ä¸€ç§é—憾。 -Next [如何直言异议以åŠå¦‚何é¿å…](05-How to Disagree Honestly and Get Away with It.md) +Next [如何直言异议以åŠå¦‚何é¿å…](05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) diff --git a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md index 1d1c7e3..489538d 100644 --- a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md +++ b/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md @@ -8,4 +8,4 @@ ä¸ç®¡å†³è®®æ˜¯å¦è¢«æŽ¨ç¿»ï¼Œä½ å¿…须记ä½ä½ æ°¸è¿œä¸èƒ½è¯´å‡ºâ€œæˆ‘çš„è¯æ’‚这了,我早就这样告诉你了â€è¿™æ ·çš„è¯ï¼Œå› ä¸ºè¿™ä¸ªå†³å®šå·²ç»å¾—到了充分探讨。 -Next [判断 - 如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´é—´æƒè¡¡](../Judgment/01-How to Tradeoff Quality Against Development Time.md) +Next [判断 - 如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´é—´æƒè¡¡](../Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md index d8cc903..4e5f87a 100644 --- a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md +++ b/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md @@ -8,4 +8,4 @@ 必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其专业行为的一ç§è¡¨çŽ°ã€‚ç¨‹åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构建了一套æµç¨‹ï¼Œæˆ‘希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ -Next [如何ç†è§£ç”¨æˆ·](02-How to Understand the User.md) +Next [如何ç†è§£ç”¨æˆ·](02-How%20to%20Understand%20the%20User.md) diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md index b6199b5..9314a2e 100644 --- a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md +++ b/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md @@ -14,4 +14,4 @@ Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ 我相信,åˆä¼™äººå’Œå’¨è¯¢å¸ˆè®©å®¢æˆ·è¯´å‡ºä»–们内心真正想è¦çš„东西有巨大的困难。如果你想æˆä¸ºä¸€ä¸ªå’¨è¯¢å¸ˆï¼Œå»ºè®®ä½ åŸºäºŽç”¨æˆ·æ¸…晰的头脑以åŠä»–们的钱包æ¥é€‰æ‹©å®¢æˆ·ã€‚ -Next [如何得到晋å‡](03-How to Get a Promotion.md) +Next [如何得到晋å‡](03-How%20to%20Get%20a%20Promotion.md) diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md index 9c5692f..474b69c 100644 --- a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md +++ b/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md @@ -10,4 +10,4 @@ 大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和 boss 地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 -Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How to Develop Talent.md) +Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How%20to%20Develop%20Talent.md) diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md index 6a18689..4a50e3b 100644 --- a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md +++ b/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md @@ -20,4 +20,4 @@ Nietschze 夸大了他所说的: ä½ å¯ä»¥ç»å¸¸ç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 -Next [如何选择工作的内容](02-How to Choose What to Work On.md) +Next [如何选择工作的内容](02-How%20to%20Choose%20What%20to%20Work%20On.md) diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md index c0d2e45..028c109 100644 --- a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md +++ b/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) 你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 -Next [如何让你队å‹çš„价值最大化](03-How to Get the Most From Your Teammates.md) +Next [如何让你队å‹çš„价值最大化](03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md index 2820e22..4ad2984 100644 --- a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md +++ b/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md @@ -12,4 +12,4 @@ ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ -Next [如何划分问题](04-How to Divide Problems Up.md) +Next [如何划分问题](04-How%20to%20Divide%20Problems%20Up.md) diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md index f935ebb..f52bdd5 100644 --- a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md +++ b/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md @@ -6,4 +6,4 @@ 因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–们的弱项或者学习新技能的能力。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 -Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How to Handle Boring Tasks.md) +Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How%20to%20Handle%20Boring%20Tasks.md) diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md index 1137ec6..bceadbb 100644 --- a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md +++ b/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md @@ -4,4 +4,4 @@ 如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ -Next [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How to Gather Support for a Project.md) +Next [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How%20to%20Gather%20Support%20for%20a%20Project.md) diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md index 1d3d544..144a40e 100644 --- a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md +++ b/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你所创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的观点所带æ¥çš„价值。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 -Next [如何å‘展一个系统](07-How to Grow a System.md) +Next [如何å‘展一个系统](07-How%20to%20Grow%20a%20System.md) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md index d8c2521..9afc989 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md @@ -20,4 +20,4 @@ 对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ -Next [如何有效地沟通](08-How to Communicate Well.md) +Next [如何有效地沟通](08-How%20to%20Communicate%20Well.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md index 4d24c6a..c9471f1 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md @@ -8,4 +8,4 @@ æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个 demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了精力,没有人会因此看低你。 -Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How to Tell People Things They Don't Want to Hear.md) +Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md index 381064f..93ca0bb 100644 --- a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md +++ b/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md @@ -6,4 +6,4 @@ 一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯” deadline 抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ -Next [如何处ç†ç®¡ç†ç¥žè¯](10-How to Deal with Managerial Myths.md) +Next [如何处ç†ç®¡ç†ç¥žè¯](10-How%20to%20Deal%20with%20Managerial%20Myths.md) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md index 4bed408..9017cf0 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md @@ -9,4 +9,4 @@ 如果有机会,你å¯ä»¥è¯•ç€è§£é‡Šè¿™äº›ä¸œè¥¿ï¼Œä½†å¦‚果你没有æˆåŠŸï¼Œä¸è¦è§‰å¾—悲伤,ä¸è¦å¥½æ–—地å对这些神è¯ä»¥è‡´æŸå®³äº†ä½ çš„声望。æ¯ä¸ªè¿™æ ·çš„神è¯å¢žå¼ºäº†ç®¡ç†è€…关于他们有一些对正在进行的事情的实际控制的想法。真相是,如果管ç†è€…是好的,他们会帮助你,如果他们是å的,他们会妨ç¢ä½ ã€‚ -Next [如何处ç†ç»„织混乱](11-How to Deal with Organizational Chaos.md) +Next [如何处ç†ç»„织混乱](11-How%20to%20Deal%20with%20Organizational%20Chaos.md) diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index 67e56f1..a8a665a 100644 --- a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -6,4 +6,4 @@ ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有关于æˆåŠŸçš„æ¸…æ™°å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ -Next [如何使用嵌入型语言](02-How to Utilize Embedded Languages.md) +Next [如何使用嵌入型语言](02-How%20to%20Utilize%20Embedded%20Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index 4a04aa8..c01d3ea 100644 --- a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -8,4 +8,4 @@ 使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢 API å—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ç§å·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ -Next [选择语言](03-Choosing Languages.md) +Next [选择语言](03-Choosing%20Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 39347a9..7df952d 100644 --- a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -12,4 +12,4 @@ 这些效应å¯èƒ½æœ‰äº›åªæ˜¯å¿ƒç†ä¸Šçš„,但心ç†ä¸Šçš„东西也很é‡è¦ã€‚最åŽè¦è¯´çš„æ˜¯ï¼Œè¯­è¨€æš´æ”¿çš„代价超过了它能æä¾›çš„æ‰€æœ‰å¥½å¤„。 -Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) +Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index 0a98fb0..b473ef4 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -7,79 +7,79 @@ 1. [入门](1-Beginner/README.md) - 个人技能 - - [学会 Debug](1-Beginner/Personal-Skills/01-Learn To Debug.md) - - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md) - - [如何移除一个错误](1-Beginner/Personal-Skills/03-How to Remove an Error.md) - - [如何用使用日志调试](1-Beginner/Personal-Skills/04-How to Debug Using a Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md) - - [如何解决性能问题](1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md) - - [如何优化循环](1-Beginner/Personal-Skills/07-How to Optimize Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md) - - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How to Manage Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md) - - [如何学习设计技能](1-Beginner/Personal-Skills/11-How to Learn Design Skills.md) - - [如何进行实验](1-Beginner/Personal-Skills/12-How to Conduct Experiments.md) + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) + - [如何用使用日志调试](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) - 团队技能 - - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why Estimation is Important.md) - - [如何预估编程时间](1-Beginner/Team-Skills/02-How to Estimate Programming Time.md) - - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How to Find Out Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md) - - [如何优雅地写文档](1-Beginner/Team-Skills/05-How to Document Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How to Work with Poor Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How to Use Source Code Control.md) - - [如何进行å•元测试](1-Beginner/Team-Skills/08-How to Unit Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take Breaks when Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How to Deal with Difficult People.md) + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) 2. [进阶](2-Intermediate/README.md) - 个人技能 - - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How to Stay Motivated.md) - - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md) - - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md) - - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How to Stress Test.md) - - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md) - - [如何学习新技能](2-Intermediate/Personal-Skills/06-How to Learn New Skills.md) - - [学会打字](2-Intermediate/Personal-Skills/07-Learn to Type.md) - - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md) - - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication Languages.md) - - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How to analyze data.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How to Manage Development Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md) - - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How to Manage Consultants.md) - - [如何适度交æµ](2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md) - - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md) + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) - 评判 - - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How to Manage Software System Dependence.md) - - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md) - - [如何决定购买还是构建](2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md) - - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How to Grow Professionally.md) - - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How to Evaluate Interviewees.md) - - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md) + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) + - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) 3. [高级](3-Advanced/README.md) - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md) - - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md) - - [选择语言](3-Advanced/Technical-Judgment/03-Choosing Languages.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) - 机智地妥å - - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md) - - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How to Understand the User.md) - - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md) + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How to Develop Talent.md) - - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md) - - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md) - - [如何划分问题](3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md) - - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md) - - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How to Grow a System.md) - - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How to Communicate Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md) + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) + - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) From 9256589fa7a83b5d6372c10027007c26ff676c60 Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:02:14 +0300 Subject: [PATCH 113/149] Link wasn't working --- en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md index 24f1405..b747fe0 100644 --- a/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md +++ b/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. -Next [How to Recognize When to Go Home](10-How to Recognize When to Go Home.md) \ No newline at end of file +Next [How to Recognize When to Go Home](10-How%20to%20Recognize%20When%20to%20Go%20Home.md) From 294b1dd7f3432c6d70f783aad6c5a253a310cbe7 Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:14:10 +0300 Subject: [PATCH 114/149] Update 01-How to Stay Motivated.md --- .../Personal-Skills/01-How to Stay Motivated.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md index edfce76..5203f5e 100644 --- a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md +++ b/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md @@ -1,14 +1,14 @@ # How to Stay Motivated [//]: # (Version:1.0.0) -It is a wonderful and surprising fact that programmers are highly motivated by the desire to create artifacts that are beautiful, useful, or nifty. This desire is not unique to programmers nor universal but it is so strong and common among programmers that it separates them from others in other roles. +It is a wonderful and surprising fact that programmers are highly motivated by the desire to create artifacts that are beautiful, useful or nifty. This desire is not unique to programmers nor universal but it is so strong and common among programmers that it separates them from others in other roles. -This has practical and important consequences. If programmers are asked to do something that is not beautiful, useful, or nifty, they will have low morale. There's a lot of money to be made doing ugly, stupid, and boring stuff; but in the end, fun will make the most money for the company. +This has practical and important consequences. If programmers are asked to do something that is not beautiful, useful or nifty, they will have low morale. There's a lot of money to be made doing ugly, stupid, and boring stuff; but in the end, fun will make the most money for the company. -Obviously, there are entire industries organized around motivational techniques some of which apply here. The things that are specific to programming that I can identify are: +Obviously, there are entire industries organized around motivational techniques, some of which apply here. The things that are specific to programming that I can identify are: - Use the best language for the job. -- Look for opportunities to apply new techniques, languages, and technologies. -- Try to either learn or teach something, however small, in each project. +- Look for opportunities to apply new techniques, languages and technologies. +- Try to either learn or teach something, no matter how small, in each project. Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and it also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. From 3abc2a5c29aaf1fa52fef83c830faec5fd911af0 Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:15:18 +0300 Subject: [PATCH 115/149] Update 02-How to be Widely Trusted.md --- .../Personal-Skills/02-How to be Widely Trusted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md index ea17652..a47f551 100644 --- a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md +++ b/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md @@ -1,6 +1,6 @@ # How to be Widely Trusted [//]: # (Version:1.0.0) -To be trusted you must be trustworthy. You must also be visible. If no one knows about you, no trust will be invested in you. With those close to you, such as your teammates, this should not be an issue. You establish trust by being responsive and informative to those outside your department or team. Occasionally someone will abuse this trust, and ask for unreasonable favours. Don't be afraid of this, just explain what you would have to give up doing to perform the favour. +To be trusted you must be trustworthy. You must also be visible. If no one knows about you, no trust will be invested in you. With those close to you, such as your teammates, this should not be an issue. You establish trust by being responsive and informative to those outside your department or team. Occasionally, someone will abuse this trust and ask for unreasonable favours. Don't be afraid of this, just explain what you would have to give up doing to perform the favour. Don't pretend to know something that you don't. With people that are not teammates, you may have to make a clear distinction between 'not knowing right off the top of my head' and 'not being able to figure it out, ever.' From ff783bb1d3134e8bf69c87e4dd0f9caf10fab028 Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:43:38 +0300 Subject: [PATCH 116/149] Update 01-How to Tell the Hard From the Impossible.md --- .../01-How to Tell the Hard From the Impossible.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index 0c8ec8e..590b36f 100644 --- a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -1,8 +1,8 @@ # How to Tell the Hard From the Impossible [//]: # (Version:1.0.1) -It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. +It is our job to do the hard and discern the impossible. From the point of view of most working programmers, something is impossible if either it cannot be grown from a simple system or it cannot be estimated. By this definition, what is called research is impossible. A large volume of mere work is hard, but not necessarily impossible. -The distinction is not facetious because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering point of view. It then becomes your job to help the entrepreneur find a reasonable solution which is merely hard and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. +The distinction is not facetious, because you may very well be asked to do what is practically impossible, either from a scientific point of view or a software engineering one. It then becomes your job to help the entrepreneur find a reasonable solution, which is merely hard, and gets most of what they wanted. A solution is merely hard when it can be confidently scheduled and the risks are understood. It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is no crisp definition of success, you will not succeed. From 2cbd5a4323149a585a8a2e5bcd8ee01c12224c3d Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:44:18 +0300 Subject: [PATCH 117/149] Update 01-How to Tell the Hard From the Impossible.md link wasn't working --- .../01-How to Tell the Hard From the Impossible.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md index 590b36f..46e43cc 100644 --- a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md +++ b/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md @@ -6,4 +6,4 @@ The distinction is not facetious, because you may very well be asked to do what It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is no crisp definition of success, you will not succeed. -Next [How to Utilize Embedded Languages](02-How to Utilize Embedded Languages.md) +Next [How to Utilize Embedded Languages](02-How%20to%20Utilize%20Embedded%20Languages.md) From 12ad780d4c1c2b690b862bb20a62cc7dcb6e5f11 Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:45:01 +0300 Subject: [PATCH 118/149] Update 02-How to Utilize Embedded Languages.md link wasn't working again --- .../Technical-Judgment/02-How to Utilize Embedded Languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md index dc1d8ac..f6138ac 100644 --- a/en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md +++ b/en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md @@ -8,4 +8,4 @@ I and many other programmers have fallen into the trap of creating special purpo The real question to ask oneself before embedding a language is: Does this work with or against the culture of my audience? If you intended audience is exclusively non-programmers, how will it help? If your intended audience is exclusively programmers, would they prefer an applications programmers interface (API)? And what language will it be? Programmers don't want to learn a new language that is narrowly used; but if it meshes with their culture they will not have to spend much time learning it. It is a joy to create a new language. But we should not let that blind us to the needs of the user. Unless you have some truly original needs and ideas, why not use an existing language so that you can leverage the familiarity users already have with it? -Next [Choosing Languages](03-Choosing Languages.md) \ No newline at end of file +Next [Choosing Languages](03-Choosing%20Languages.md) From 57b8cbfc1d41db218d4992b025cf25a9c1cd328f Mon Sep 17 00:00:00 2001 From: Karina Kozarova Date: Tue, 11 Apr 2017 12:46:00 +0300 Subject: [PATCH 119/149] Update 03-Choosing Languages.md another link update --- en/3-Advanced/Technical-Judgment/03-Choosing Languages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md index 50dee07..743efb3 100644 --- a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md +++ b/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md @@ -12,4 +12,4 @@ Programming languages should really be called notations in that learning one is Some of these effects may only be psychological; but psychology matters. In the end, the costs of language tyranny outweigh any advantage that it provides. -Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How to Fight Schedule Pressure.md) +Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) From 1f9a8e70ab6e73f8eb32a8b59d4b4ba3066f340b Mon Sep 17 00:00:00 2001 From: Rakshith Rao Date: Mon, 24 Apr 2017 13:54:45 +0530 Subject: [PATCH 120/149] Removed duplicate --- en/GLOSSARY.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/en/GLOSSARY.md b/en/GLOSSARY.md index 283b316..9e50838 100644 --- a/en/GLOSSARY.md +++ b/en/GLOSSARY.md @@ -46,10 +46,6 @@ A group of people organized for making money. A group of people organized for making money. -### tribe - -A group of people you share cultural affinity and loyalty with. - ### scroll blindness The effect of being unable to find information you need because it is buried in too much other, less interesting information. From a45e579ffc5145c8555953021b42ca8b779d1aaa Mon Sep 17 00:00:00 2001 From: Jaime Date: Fri, 23 Jun 2017 08:07:38 -0700 Subject: [PATCH 121/149] Fix "How to Grow Professionally" link Removed an extraneous "z" --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 736517e..33553a8 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Welcome to the tribe. - [How to Manage Software System Dependence](en/2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - [How to Decide if Software is Too Immature](en/2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - [How to Make a Buy vs. Build Decision](en/2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How%20to%20Grow%20zProfessionally.md) + - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) From 91ee8863f368834ead12a028de5f863d8a9873c0 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Sun, 9 Jul 2017 20:05:20 +0100 Subject: [PATCH 122/149] Added Japanese to LANGS.md --- LANGS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LANGS.md b/LANGS.md index 6335876..e5f1c5e 100644 --- a/LANGS.md +++ b/LANGS.md @@ -1,3 +1,3 @@ -* [English](en/) +* [English](en/) * [Chinese](zh/) - [//]: # (Version:1.0.0) \ No newline at end of file +* [Japanese](jp/) From 820900faf613cf45b41f8287e879ff26fc721846 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Fri, 14 Jul 2017 09:53:02 +0100 Subject: [PATCH 123/149] Replaced spaces in filenames with dashes --- .../{01-Learn To Debug.md => 01-Learn-To-Debug.md} | 0 ...Space.md => 02-How-to-Debug-by-Splitting-the-Problem-Space.md} | 0 ...{03-How to Remove an Error.md => 03-How-to-Remove-an-Error.md} | 0 ...How to Debug Using a Log.md => 04-How-to-Debug-Using-a-Log.md} | 0 ...e Problems.md => 05-How-to-Understand-Performance-Problems.md} | 0 ...formance Problems.md => 06-How-to-Fix-Performance-Problems.md} | 0 .../{07-How to Optimize Loops.md => 07-How-to-Optimize-Loops.md} | 0 ... Deal with IO Expense.md => 08-How-to-Deal-with-IO-Expense.md} | 0 .../{09-How to Manage Memory.md => 09-How-to-Manage-Memory.md} | 0 ...ermittent Bugs.md => 10-How-to-Deal-with-Intermittent-Bugs.md} | 0 ...to Learn Design Skills.md => 11-How-to-Learn-Design-Skills.md} | 0 ...to Conduct Experiments.md => 12-How-to-Conduct-Experiments.md} | 0 ...timation is Important.md => 01-Why-Estimation-is-Important.md} | 0 ...Programming Time.md => 02-How-to-Estimate-Programming-Time.md} | 0 ... Find Out Information.md => 03-How-to-Find-Out-Information.md} | 0 ...rces.md => 04-How-to-Utilize-People-as-Information-Sources.md} | 0 ...{05-How to Document Wisely.md => 05-How-to-Document-Wisely.md} | 0 ...to Work with Poor Code.md => 06-How-to-Work-with-Poor-Code.md} | 0 ...ource Code Control.md => 07-How-to-Use-Source-Code-Control.md} | 0 .../{08-How to Unit Test.md => 08-How-to-Unit-Test.md} | 0 ...Take Breaks when Stumped.md => 09-Take-Breaks-when-Stumped.md} | 0 ... When to Go Home.md => 10-How-to-Recognize-When-to-Go-Home.md} | 0 ...ifficult People.md => 11-How-to-Deal-with-Difficult-People.md} | 0 ....md => 01-How-to-Tradeoff-Quality-Against-Development-Time.md} | 0 ...pendence.md => 02-How-to-Manage-Software-System-Dependence.md} | 0 ...mmature.md => 03-How-to-Decide-if-Software-is-Too-Immature.md} | 0 ...uild Decision.md => 04-How-to-Make-a-Buy-vs-Build-Decision.md} | 0 ...to Grow Professionally.md => 05-How-to-Grow-Professionally.md} | 0 ...valuate Interviewees.md => 06-How-to-Evaluate-Interviewees.md} | 0 ....md => 07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md} | 0 ...alk to Non-Engineers.md => 08-How-to-Talk-to-Non-Engineers.md} | 0 .../{01-How to Stay Motivated.md => 01-How-to-Stay-Motivated.md} | 0 ...How to be Widely Trusted.md => 02-How-to-be-Widely-Trusted.md} | 0 ...deoff Time vs Space.md => 03-How-to-Tradeoff-Time-vs-Space.md} | 0 .../{04-How to Stress Test.md => 04-How-to-Stress-Test.md} | 0 ...bstraction.md => 05-How-to-Balance-Brevity-and-Abstraction.md} | 0 ...6-How to Learn New Skills.md => 06-How-to-Learn-New-Skills.md} | 0 .../Personal-Skills/{07-Learn to Type.md => 07-Learn-to-Type.md} | 0 ...Integration Testing.md => 08-How-to-Do-Integration-Testing.md} | 0 ...9-Communication Languages.md => 09-Communication-Languages.md} | 0 .../Personal-Skills/{10-Heavy Tools.md => 10-Heavy-Tools.md} | 0 .../{11-How to analyze data.md => 11-How-to-analyze-data.md} | 0 ...e Development Time.md => 01-How-to-Manage-Development-Time.md} | 0 ...re Risks.md => 02-How-to-Manage-Third-Party-Software-Risks.md} | 0 ...w to Manage Consultants.md => 03-How-to-Manage-Consultants.md} | 0 ... Right Amount.md => 04-How-to-Communicate-the-Right-Amount.md} | 0 ... It.md => 05-How-to-Disagree-Honestly-and-Get-Away-with-It.md} | 0 ... Schedule Pressure.md => 01-How-to-Fight-Schedule-Pressure.md} | 0 ...to Understand the User.md => 02-How-to-Understand-the-User.md} | 0 ...{03-How to Get a Promotion.md => 03-How-to-Get-a-Promotion.md} | 0 .../{01-How to Develop Talent.md => 01-How-to-Develop-Talent.md} | 0 ...ose What to Work On.md => 02-How-to-Choose-What-to-Work-On.md} | 0 ...Teammates.md => 03-How-to-Get-the-Most-From-Your-Teammates.md} | 0 ...w to Divide Problems Up.md => 04-How-to-Divide-Problems-Up.md} | 0 ...to Handle Boring Tasks.md => 05-How-to-Handle-Boring-Tasks.md} | 0 ...for a Project.md => 06-How-to-Gather-Support-for-a-Project.md} | 0 .../{07-How to Grow a System.md => 07-How-to-Grow-a-System.md} | 0 ...8-How to Communicate Well.md => 08-How-to-Communicate-Well.md} | 0 ...md => 09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md} | 0 ...anagerial Myths.md => 10-How-to-Deal-with-Managerial-Myths.md} | 0 ...ional Chaos.md => 11-How-to-Deal-with-Organizational-Chaos.md} | 0 ...possible.md => 01-How-to-Tell-the-Hard-From-the-Impossible.md} | 0 ...edded Languages.md => 02-How-to-Utilize-Embedded-Languages.md} | 0 .../{03-Choosing Languages.md => 03-Choosing-Languages.md} | 0 .../{01-Learn To Debug.md => 01-Learn-To-Debug.md} | 0 ...Space.md => 02-How-to-Debug-by-Splitting-the-Problem-Space.md} | 0 ...{03-How to Remove an Error.md => 03-How-to-Remove-an-Error.md} | 0 ...How to Debug Using a Log.md => 04-How-to-Debug-Using-a-Log.md} | 0 ...e Problems.md => 05-How-to-Understand-Performance-Problems.md} | 0 ...formance Problems.md => 06-How-to-Fix-Performance-Problems.md} | 0 .../{07-How to Optimize Loops.md => 07-How-to-Optimize-Loops.md} | 0 ... Deal with IO Expense.md => 08-How-to-Deal-with-IO-Expense.md} | 0 .../{09-How to Manage Memory.md => 09-How-to-Manage-Memory.md} | 0 ...ermittent Bugs.md => 10-How-to-Deal-with-Intermittent-Bugs.md} | 0 ...to Learn Design Skills.md => 11-How-to-Learn-Design-Skills.md} | 0 ...to Conduct Experiments.md => 12-How-to-Conduct-Experiments.md} | 0 ...timation is Important.md => 01-Why-Estimation-is-Important.md} | 0 ...Programming Time.md => 02-How-to-Estimate-Programming-Time.md} | 0 ... Find Out Information.md => 03-How-to-Find-Out-Information.md} | 0 ...rces.md => 04-How-to-Utilize-People-as-Information-Sources.md} | 0 ...{05-How to Document Wisely.md => 05-How-to-Document-Wisely.md} | 0 ...to Work with Poor Code.md => 06-How-to-Work-with-Poor-Code.md} | 0 ...ource Code Control.md => 07-How-to-Use-Source-Code-Control.md} | 0 .../{08-How to Unit Test.md => 08-How-to-Unit-Test.md} | 0 ...Take Breaks when Stumped.md => 09-Take-Breaks-when-Stumped.md} | 0 ... When to Go Home.md => 10-How-to-Recognize-When-to-Go-Home.md} | 0 ...ifficult People.md => 11-How-to-Deal-with-Difficult-People.md} | 0 ....md => 01-How-to-Tradeoff-Quality-Against-Development-Time.md} | 0 ...pendence.md => 02-How-to-Manage-Software-System-Dependence.md} | 0 ...mmature.md => 03-How-to-Decide-if-Software-is-Too-Immature.md} | 0 ...uild Decision.md => 04-How-to-Make-a-Buy-vs-Build-Decision.md} | 0 ...to Grow Professionally.md => 05-How-to-Grow-Professionally.md} | 0 ...valuate Interviewees.md => 06-How-to-Evaluate-Interviewees.md} | 0 ....md => 07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md} | 0 ...alk to Non-Engineers.md => 08-How-to-Talk-to-Non-Engineers.md} | 0 .../{01-How to Stay Motivated.md => 01-How-to-Stay-Motivated.md} | 0 ...How to be Widely Trusted.md => 02-How-to-be-Widely-Trusted.md} | 0 ...deoff Time vs Space.md => 03-How-to-Tradeoff-Time-vs-Space.md} | 0 .../{04-How to Stress Test.md => 04-How-to-Stress-Test.md} | 0 ...bstraction.md => 05-How-to-Balance-Brevity-and-Abstraction.md} | 0 ...6-How to Learn New Skills.md => 06-How-to-Learn-New-Skills.md} | 0 .../Personal-Skills/{07-Learn to Type.md => 07-Learn-to-Type.md} | 0 ...Integration Testing.md => 08-How-to-Do-Integration-Testing.md} | 0 ...9-Communication Languages.md => 09-Communication-Languages.md} | 0 .../Personal-Skills/{10-Heavy Tools.md => 10-Heavy-Tools.md} | 0 .../{11-How to analyze data.md => 11-How-to-analyze-data.md} | 0 ...e Development Time.md => 01-How-to-Manage-Development-Time.md} | 0 ...re Risks.md => 02-How-to-Manage-Third-Party-Software-Risks.md} | 0 ...w to Manage Consultants.md => 03-How-to-Manage-Consultants.md} | 0 ... Right Amount.md => 04-How-to-Communicate-the-Right-Amount.md} | 0 ... It.md => 05-How-to-Disagree-Honestly-and-Get-Away-with-It.md} | 0 ... Schedule Pressure.md => 01-How-to-Fight-Schedule-Pressure.md} | 0 ...to Understand the User.md => 02-How-to-Understand-the-User.md} | 0 ...{03-How to Get a Promotion.md => 03-How-to-Get-a-Promotion.md} | 0 .../{01-How to Develop Talent.md => 01-How-to-Develop-Talent.md} | 0 ...ose What to Work On.md => 02-How-to-Choose-What-to-Work-On.md} | 0 ...Teammates.md => 03-How-to-Get-the-Most-From-Your-Teammates.md} | 0 ...w to Divide Problems Up.md => 04-How-to-Divide-Problems-Up.md} | 0 ...to Handle Boring Tasks.md => 05-How-to-Handle-Boring-Tasks.md} | 0 ...for a Project.md => 06-How-to-Gather-Support-for-a-Project.md} | 0 .../{07-How to Grow a System.md => 07-How-to-Grow-a-System.md} | 0 ...8-How to Communicate Well.md => 08-How-to-Communicate-Well.md} | 0 ...md => 09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md} | 0 ...anagerial Myths.md => 10-How-to-Deal-with-Managerial-Myths.md} | 0 ...ional Chaos.md => 11-How-to-Deal-with-Organizational-Chaos.md} | 0 ...possible.md => 01-How-to-Tell-the-Hard-From-the-Impossible.md} | 0 ...edded Languages.md => 02-How-to-Utilize-Embedded-Languages.md} | 0 .../{03-Choosing Languages.md => 03-Choosing-Languages.md} | 0 .../{01-Learn To Debug.md => 01-Learn-To-Debug.md} | 0 ...Space.md => 02-How-to-Debug-by-Splitting-the-Problem-Space.md} | 0 ...{03-How to Remove an Error.md => 03-How-to-Remove-an-Error.md} | 0 ...How to Debug Using a Log.md => 04-How-to-Debug-Using-a-Log.md} | 0 ...e Problems.md => 05-How-to-Understand-Performance-Problems.md} | 0 ...formance Problems.md => 06-How-to-Fix-Performance-Problems.md} | 0 .../{07-How to Optimize Loops.md => 07-How-to-Optimize-Loops.md} | 0 ... Deal with IO Expense.md => 08-How-to-Deal-with-IO-Expense.md} | 0 .../{09-How to Manage Memory.md => 09-How-to-Manage-Memory.md} | 0 ...ermittent Bugs.md => 10-How-to-Deal-with-Intermittent-Bugs.md} | 0 ...to Learn Design Skills.md => 11-How-to-Learn-Design-Skills.md} | 0 ...to Conduct Experiments.md => 12-How-to-Conduct-Experiments.md} | 0 ...timation is Important.md => 01-Why-Estimation-is-Important.md} | 0 ...Programming Time.md => 02-How-to-Estimate-Programming-Time.md} | 0 ... Find Out Information.md => 03-How-to-Find-Out-Information.md} | 0 ...rces.md => 04-How-to-Utilize-People-as-Information-Sources.md} | 0 ...{05-How to Document Wisely.md => 05-How-to-Document-Wisely.md} | 0 ...to Work with Poor Code.md => 06-How-to-Work-with-Poor-Code.md} | 0 ...ource Code Control.md => 07-How-to-Use-Source-Code-Control.md} | 0 .../{08-How to Unit Test.md => 08-How-to-Unit-Test.md} | 0 ...Take Breaks when Stumped.md => 09-Take-Breaks-when-Stumped.md} | 0 ... When to Go Home.md => 10-How-to-Recognize-When-to-Go-Home.md} | 0 ...ifficult People.md => 11-How-to-Deal-with-Difficult-People.md} | 0 ....md => 01-How-to-Tradeoff-Quality-Against-Development-Time.md} | 0 ...pendence.md => 02-How-to-Manage-Software-System-Dependence.md} | 0 ...mmature.md => 03-How-to-Decide-if-Software-is-Too-Immature.md} | 0 ...uild Decision.md => 04-How-to-Make-a-Buy-vs-Build-Decision.md} | 0 ...to Grow Professionally.md => 05-How-to-Grow-Professionally.md} | 0 ...valuate Interviewees.md => 06-How-to-Evaluate-Interviewees.md} | 0 ....md => 07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md} | 0 ...alk to Non-Engineers.md => 08-How-to-Talk-to-Non-Engineers.md} | 0 .../{01-How to Stay Motivated.md => 01-How-to-Stay-Motivated.md} | 0 ...How to be Widely Trusted.md => 02-How-to-be-Widely-Trusted.md} | 0 ...deoff Time vs Space.md => 03-How-to-Tradeoff-Time-vs-Space.md} | 0 .../{04-How to Stress Test.md => 04-How-to-Stress-Test.md} | 0 ...bstraction.md => 05-How-to-Balance-Brevity-and-Abstraction.md} | 0 ...6-How to Learn New Skills.md => 06-How-to-Learn-New-Skills.md} | 0 .../Personal-Skills/{07-Learn to Type.md => 07-Learn-to-Type.md} | 0 ...Integration Testing.md => 08-How-to-Do-Integration-Testing.md} | 0 ...9-Communication Languages.md => 09-Communication-Languages.md} | 0 .../Personal-Skills/{10-Heavy Tools.md => 10-Heavy-Tools.md} | 0 .../{11-How to analyze data.md => 11-How-to-analyze-data.md} | 0 ...e Development Time.md => 01-How-to-Manage-Development-Time.md} | 0 ...re Risks.md => 02-How-to-Manage-Third-Party-Software-Risks.md} | 0 ...w to Manage Consultants.md => 03-How-to-Manage-Consultants.md} | 0 ... Right Amount.md => 04-How-to-Communicate-the-Right-Amount.md} | 0 ... It.md => 05-How-to-Disagree-Honestly-and-Get-Away-with-It.md} | 0 ... Schedule Pressure.md => 01-How-to-Fight-Schedule-Pressure.md} | 0 ...to Understand the User.md => 02-How-to-Understand-the-User.md} | 0 ...{03-How to Get a Promotion.md => 03-How-to-Get-a-Promotion.md} | 0 .../{01-How to Develop Talent.md => 01-How-to-Develop-Talent.md} | 0 ...ose What to Work On.md => 02-How-to-Choose-What-to-Work-On.md} | 0 ...Teammates.md => 03-How-to-Get-the-Most-From-Your-Teammates.md} | 0 ...w to Divide Problems Up.md => 04-How-to-Divide-Problems-Up.md} | 0 ...to Handle Boring Tasks.md => 05-How-to-Handle-Boring-Tasks.md} | 0 ...for a Project.md => 06-How-to-Gather-Support-for-a-Project.md} | 0 .../{07-How to Grow a System.md => 07-How-to-Grow-a-System.md} | 0 ...8-How to Communicate Well.md => 08-How-to-Communicate-Well.md} | 0 ...md => 09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md} | 0 ...anagerial Myths.md => 10-How-to-Deal-with-Managerial-Myths.md} | 0 ...ional Chaos.md => 11-How-to-Deal-with-Organizational-Chaos.md} | 0 ...possible.md => 01-How-to-Tell-the-Hard-From-the-Impossible.md} | 0 ...edded Languages.md => 02-How-to-Utilize-Embedded-Languages.md} | 0 .../{03-Choosing Languages.md => 03-Choosing-Languages.md} | 0 192 files changed, 0 insertions(+), 0 deletions(-) rename en/1-Beginner/Personal-Skills/{01-Learn To Debug.md => 01-Learn-To-Debug.md} (100%) rename en/1-Beginner/Personal-Skills/{02-How to Debug by Splitting the Problem Space.md => 02-How-to-Debug-by-Splitting-the-Problem-Space.md} (100%) rename en/1-Beginner/Personal-Skills/{03-How to Remove an Error.md => 03-How-to-Remove-an-Error.md} (100%) rename en/1-Beginner/Personal-Skills/{04-How to Debug Using a Log.md => 04-How-to-Debug-Using-a-Log.md} (100%) rename en/1-Beginner/Personal-Skills/{05-How to Understand Performance Problems.md => 05-How-to-Understand-Performance-Problems.md} (100%) rename en/1-Beginner/Personal-Skills/{06-How to Fix Performance Problems.md => 06-How-to-Fix-Performance-Problems.md} (100%) rename en/1-Beginner/Personal-Skills/{07-How to Optimize Loops.md => 07-How-to-Optimize-Loops.md} (100%) rename en/1-Beginner/Personal-Skills/{08-How to Deal with IO Expense.md => 08-How-to-Deal-with-IO-Expense.md} (100%) rename en/1-Beginner/Personal-Skills/{09-How to Manage Memory.md => 09-How-to-Manage-Memory.md} (100%) rename en/1-Beginner/Personal-Skills/{10-How to Deal with Intermittent Bugs.md => 10-How-to-Deal-with-Intermittent-Bugs.md} (100%) rename en/1-Beginner/Personal-Skills/{11-How to Learn Design Skills.md => 11-How-to-Learn-Design-Skills.md} (100%) rename en/1-Beginner/Personal-Skills/{12-How to Conduct Experiments.md => 12-How-to-Conduct-Experiments.md} (100%) rename en/1-Beginner/Team-Skills/{01-Why Estimation is Important.md => 01-Why-Estimation-is-Important.md} (100%) rename en/1-Beginner/Team-Skills/{02-How to Estimate Programming Time.md => 02-How-to-Estimate-Programming-Time.md} (100%) rename en/1-Beginner/Team-Skills/{03-How to Find Out Information.md => 03-How-to-Find-Out-Information.md} (100%) rename en/1-Beginner/Team-Skills/{04-How to Utilize People as Information Sources.md => 04-How-to-Utilize-People-as-Information-Sources.md} (100%) rename en/1-Beginner/Team-Skills/{05-How to Document Wisely.md => 05-How-to-Document-Wisely.md} (100%) rename en/1-Beginner/Team-Skills/{06-How to Work with Poor Code.md => 06-How-to-Work-with-Poor-Code.md} (100%) rename en/1-Beginner/Team-Skills/{07-How to Use Source Code Control.md => 07-How-to-Use-Source-Code-Control.md} (100%) rename en/1-Beginner/Team-Skills/{08-How to Unit Test.md => 08-How-to-Unit-Test.md} (100%) rename en/1-Beginner/Team-Skills/{09-Take Breaks when Stumped.md => 09-Take-Breaks-when-Stumped.md} (100%) rename en/1-Beginner/Team-Skills/{10-How to Recognize When to Go Home.md => 10-How-to-Recognize-When-to-Go-Home.md} (100%) rename en/1-Beginner/Team-Skills/{11-How to Deal with Difficult People.md => 11-How-to-Deal-with-Difficult-People.md} (100%) rename en/2-Intermediate/Judgment/{01-How to Tradeoff Quality Against Development Time.md => 01-How-to-Tradeoff-Quality-Against-Development-Time.md} (100%) rename en/2-Intermediate/Judgment/{02-How to Manage Software System Dependence.md => 02-How-to-Manage-Software-System-Dependence.md} (100%) rename en/2-Intermediate/Judgment/{03-How to Decide if Software is Too Immature.md => 03-How-to-Decide-if-Software-is-Too-Immature.md} (100%) rename en/2-Intermediate/Judgment/{04-How to Make a Buy vs Build Decision.md => 04-How-to-Make-a-Buy-vs-Build-Decision.md} (100%) rename en/2-Intermediate/Judgment/{05-How to Grow Professionally.md => 05-How-to-Grow-Professionally.md} (100%) rename en/2-Intermediate/Judgment/{06-How to Evaluate Interviewees.md => 06-How-to-Evaluate-Interviewees.md} (100%) rename en/2-Intermediate/Judgment/{07-How to Know When to Apply Fancy Computer Science.md => 07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md} (100%) rename en/2-Intermediate/Judgment/{08-How to Talk to Non-Engineers.md => 08-How-to-Talk-to-Non-Engineers.md} (100%) rename en/2-Intermediate/Personal-Skills/{01-How to Stay Motivated.md => 01-How-to-Stay-Motivated.md} (100%) rename en/2-Intermediate/Personal-Skills/{02-How to be Widely Trusted.md => 02-How-to-be-Widely-Trusted.md} (100%) rename en/2-Intermediate/Personal-Skills/{03-How to Tradeoff Time vs Space.md => 03-How-to-Tradeoff-Time-vs-Space.md} (100%) rename en/2-Intermediate/Personal-Skills/{04-How to Stress Test.md => 04-How-to-Stress-Test.md} (100%) rename en/2-Intermediate/Personal-Skills/{05-How to Balance Brevity and Abstraction.md => 05-How-to-Balance-Brevity-and-Abstraction.md} (100%) rename en/2-Intermediate/Personal-Skills/{06-How to Learn New Skills.md => 06-How-to-Learn-New-Skills.md} (100%) rename en/2-Intermediate/Personal-Skills/{07-Learn to Type.md => 07-Learn-to-Type.md} (100%) rename en/2-Intermediate/Personal-Skills/{08-How to Do Integration Testing.md => 08-How-to-Do-Integration-Testing.md} (100%) rename en/2-Intermediate/Personal-Skills/{09-Communication Languages.md => 09-Communication-Languages.md} (100%) rename en/2-Intermediate/Personal-Skills/{10-Heavy Tools.md => 10-Heavy-Tools.md} (100%) rename en/2-Intermediate/Personal-Skills/{11-How to analyze data.md => 11-How-to-analyze-data.md} (100%) rename en/2-Intermediate/Team-Skills/{01-How to Manage Development Time.md => 01-How-to-Manage-Development-Time.md} (100%) rename en/2-Intermediate/Team-Skills/{02-How to Manage Third-Party Software Risks.md => 02-How-to-Manage-Third-Party-Software-Risks.md} (100%) rename en/2-Intermediate/Team-Skills/{03-How to Manage Consultants.md => 03-How-to-Manage-Consultants.md} (100%) rename en/2-Intermediate/Team-Skills/{04-How to Communicate the Right Amount.md => 04-How-to-Communicate-the-Right-Amount.md} (100%) rename en/2-Intermediate/Team-Skills/{05-How to Disagree Honestly and Get Away with It.md => 05-How-to-Disagree-Honestly-and-Get-Away-with-It.md} (100%) rename en/3-Advanced/Compromising-Wisely/{01-How to Fight Schedule Pressure.md => 01-How-to-Fight-Schedule-Pressure.md} (100%) rename en/3-Advanced/Compromising-Wisely/{02-How to Understand the User.md => 02-How-to-Understand-the-User.md} (100%) rename en/3-Advanced/Compromising-Wisely/{03-How to Get a Promotion.md => 03-How-to-Get-a-Promotion.md} (100%) rename en/3-Advanced/Serving-Your-Team/{01-How to Develop Talent.md => 01-How-to-Develop-Talent.md} (100%) rename en/3-Advanced/Serving-Your-Team/{02-How to Choose What to Work On.md => 02-How-to-Choose-What-to-Work-On.md} (100%) rename en/3-Advanced/Serving-Your-Team/{03-How to Get the Most From Your Teammates.md => 03-How-to-Get-the-Most-From-Your-Teammates.md} (100%) rename en/3-Advanced/Serving-Your-Team/{04-How to Divide Problems Up.md => 04-How-to-Divide-Problems-Up.md} (100%) rename en/3-Advanced/Serving-Your-Team/{05-How to Handle Boring Tasks.md => 05-How-to-Handle-Boring-Tasks.md} (100%) rename en/3-Advanced/Serving-Your-Team/{06-How to Gather Support for a Project.md => 06-How-to-Gather-Support-for-a-Project.md} (100%) rename en/3-Advanced/Serving-Your-Team/{07-How to Grow a System.md => 07-How-to-Grow-a-System.md} (100%) rename en/3-Advanced/Serving-Your-Team/{08-How to Communicate Well.md => 08-How-to-Communicate-Well.md} (100%) rename en/3-Advanced/Serving-Your-Team/{09-How to Tell People Things They Don't Want to Hear.md => 09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md} (100%) rename en/3-Advanced/Serving-Your-Team/{10-How to Deal with Managerial Myths.md => 10-How-to-Deal-with-Managerial-Myths.md} (100%) rename en/3-Advanced/Serving-Your-Team/{11-How to Deal with Organizational Chaos.md => 11-How-to-Deal-with-Organizational-Chaos.md} (100%) rename en/3-Advanced/Technical-Judgment/{01-How to Tell the Hard From the Impossible.md => 01-How-to-Tell-the-Hard-From-the-Impossible.md} (100%) rename en/3-Advanced/Technical-Judgment/{02-How to Utilize Embedded Languages.md => 02-How-to-Utilize-Embedded-Languages.md} (100%) rename en/3-Advanced/Technical-Judgment/{03-Choosing Languages.md => 03-Choosing-Languages.md} (100%) rename jp/1-Beginner/Personal-Skills/{01-Learn To Debug.md => 01-Learn-To-Debug.md} (100%) rename jp/1-Beginner/Personal-Skills/{02-How to Debug by Splitting the Problem Space.md => 02-How-to-Debug-by-Splitting-the-Problem-Space.md} (100%) rename jp/1-Beginner/Personal-Skills/{03-How to Remove an Error.md => 03-How-to-Remove-an-Error.md} (100%) rename jp/1-Beginner/Personal-Skills/{04-How to Debug Using a Log.md => 04-How-to-Debug-Using-a-Log.md} (100%) rename jp/1-Beginner/Personal-Skills/{05-How to Understand Performance Problems.md => 05-How-to-Understand-Performance-Problems.md} (100%) rename jp/1-Beginner/Personal-Skills/{06-How to Fix Performance Problems.md => 06-How-to-Fix-Performance-Problems.md} (100%) rename jp/1-Beginner/Personal-Skills/{07-How to Optimize Loops.md => 07-How-to-Optimize-Loops.md} (100%) rename jp/1-Beginner/Personal-Skills/{08-How to Deal with IO Expense.md => 08-How-to-Deal-with-IO-Expense.md} (100%) rename jp/1-Beginner/Personal-Skills/{09-How to Manage Memory.md => 09-How-to-Manage-Memory.md} (100%) rename jp/1-Beginner/Personal-Skills/{10-How to Deal with Intermittent Bugs.md => 10-How-to-Deal-with-Intermittent-Bugs.md} (100%) rename jp/1-Beginner/Personal-Skills/{11-How to Learn Design Skills.md => 11-How-to-Learn-Design-Skills.md} (100%) rename jp/1-Beginner/Personal-Skills/{12-How to Conduct Experiments.md => 12-How-to-Conduct-Experiments.md} (100%) rename jp/1-Beginner/Team-Skills/{01-Why Estimation is Important.md => 01-Why-Estimation-is-Important.md} (100%) rename jp/1-Beginner/Team-Skills/{02-How to Estimate Programming Time.md => 02-How-to-Estimate-Programming-Time.md} (100%) rename jp/1-Beginner/Team-Skills/{03-How to Find Out Information.md => 03-How-to-Find-Out-Information.md} (100%) rename jp/1-Beginner/Team-Skills/{04-How to Utilize People as Information Sources.md => 04-How-to-Utilize-People-as-Information-Sources.md} (100%) rename jp/1-Beginner/Team-Skills/{05-How to Document Wisely.md => 05-How-to-Document-Wisely.md} (100%) rename jp/1-Beginner/Team-Skills/{06-How to Work with Poor Code.md => 06-How-to-Work-with-Poor-Code.md} (100%) rename jp/1-Beginner/Team-Skills/{07-How to Use Source Code Control.md => 07-How-to-Use-Source-Code-Control.md} (100%) rename jp/1-Beginner/Team-Skills/{08-How to Unit Test.md => 08-How-to-Unit-Test.md} (100%) rename jp/1-Beginner/Team-Skills/{09-Take Breaks when Stumped.md => 09-Take-Breaks-when-Stumped.md} (100%) rename jp/1-Beginner/Team-Skills/{10-How to Recognize When to Go Home.md => 10-How-to-Recognize-When-to-Go-Home.md} (100%) rename jp/1-Beginner/Team-Skills/{11-How to Deal with Difficult People.md => 11-How-to-Deal-with-Difficult-People.md} (100%) rename jp/2-Intermediate/Judgment/{01-How to Tradeoff Quality Against Development Time.md => 01-How-to-Tradeoff-Quality-Against-Development-Time.md} (100%) rename jp/2-Intermediate/Judgment/{02-How to Manage Software System Dependence.md => 02-How-to-Manage-Software-System-Dependence.md} (100%) rename jp/2-Intermediate/Judgment/{03-How to Decide if Software is Too Immature.md => 03-How-to-Decide-if-Software-is-Too-Immature.md} (100%) rename jp/2-Intermediate/Judgment/{04-How to Make a Buy vs Build Decision.md => 04-How-to-Make-a-Buy-vs-Build-Decision.md} (100%) rename jp/2-Intermediate/Judgment/{05-How to Grow Professionally.md => 05-How-to-Grow-Professionally.md} (100%) rename jp/2-Intermediate/Judgment/{06-How to Evaluate Interviewees.md => 06-How-to-Evaluate-Interviewees.md} (100%) rename jp/2-Intermediate/Judgment/{07-How to Know When to Apply Fancy Computer Science.md => 07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md} (100%) rename jp/2-Intermediate/Judgment/{08-How to Talk to Non-Engineers.md => 08-How-to-Talk-to-Non-Engineers.md} (100%) rename jp/2-Intermediate/Personal-Skills/{01-How to Stay Motivated.md => 01-How-to-Stay-Motivated.md} (100%) rename jp/2-Intermediate/Personal-Skills/{02-How to be Widely Trusted.md => 02-How-to-be-Widely-Trusted.md} (100%) rename jp/2-Intermediate/Personal-Skills/{03-How to Tradeoff Time vs Space.md => 03-How-to-Tradeoff-Time-vs-Space.md} (100%) rename jp/2-Intermediate/Personal-Skills/{04-How to Stress Test.md => 04-How-to-Stress-Test.md} (100%) rename jp/2-Intermediate/Personal-Skills/{05-How to Balance Brevity and Abstraction.md => 05-How-to-Balance-Brevity-and-Abstraction.md} (100%) rename jp/2-Intermediate/Personal-Skills/{06-How to Learn New Skills.md => 06-How-to-Learn-New-Skills.md} (100%) rename jp/2-Intermediate/Personal-Skills/{07-Learn to Type.md => 07-Learn-to-Type.md} (100%) rename jp/2-Intermediate/Personal-Skills/{08-How to Do Integration Testing.md => 08-How-to-Do-Integration-Testing.md} (100%) rename jp/2-Intermediate/Personal-Skills/{09-Communication Languages.md => 09-Communication-Languages.md} (100%) rename jp/2-Intermediate/Personal-Skills/{10-Heavy Tools.md => 10-Heavy-Tools.md} (100%) rename jp/2-Intermediate/Personal-Skills/{11-How to analyze data.md => 11-How-to-analyze-data.md} (100%) rename jp/2-Intermediate/Team-Skills/{01-How to Manage Development Time.md => 01-How-to-Manage-Development-Time.md} (100%) rename jp/2-Intermediate/Team-Skills/{02-How to Manage Third-Party Software Risks.md => 02-How-to-Manage-Third-Party-Software-Risks.md} (100%) rename jp/2-Intermediate/Team-Skills/{03-How to Manage Consultants.md => 03-How-to-Manage-Consultants.md} (100%) rename jp/2-Intermediate/Team-Skills/{04-How to Communicate the Right Amount.md => 04-How-to-Communicate-the-Right-Amount.md} (100%) rename jp/2-Intermediate/Team-Skills/{05-How to Disagree Honestly and Get Away with It.md => 05-How-to-Disagree-Honestly-and-Get-Away-with-It.md} (100%) rename jp/3-Advanced/Compromising-Wisely/{01-How to Fight Schedule Pressure.md => 01-How-to-Fight-Schedule-Pressure.md} (100%) rename jp/3-Advanced/Compromising-Wisely/{02-How to Understand the User.md => 02-How-to-Understand-the-User.md} (100%) rename jp/3-Advanced/Compromising-Wisely/{03-How to Get a Promotion.md => 03-How-to-Get-a-Promotion.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{01-How to Develop Talent.md => 01-How-to-Develop-Talent.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{02-How to Choose What to Work On.md => 02-How-to-Choose-What-to-Work-On.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{03-How to Get the Most From Your Teammates.md => 03-How-to-Get-the-Most-From-Your-Teammates.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{04-How to Divide Problems Up.md => 04-How-to-Divide-Problems-Up.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{05-How to Handle Boring Tasks.md => 05-How-to-Handle-Boring-Tasks.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{06-How to Gather Support for a Project.md => 06-How-to-Gather-Support-for-a-Project.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{07-How to Grow a System.md => 07-How-to-Grow-a-System.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{08-How to Communicate Well.md => 08-How-to-Communicate-Well.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{09-How to Tell People Things They Don't Want to Hear.md => 09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{10-How to Deal with Managerial Myths.md => 10-How-to-Deal-with-Managerial-Myths.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{11-How to Deal with Organizational Chaos.md => 11-How-to-Deal-with-Organizational-Chaos.md} (100%) rename jp/3-Advanced/Technical-Judgment/{01-How to Tell the Hard From the Impossible.md => 01-How-to-Tell-the-Hard-From-the-Impossible.md} (100%) rename jp/3-Advanced/Technical-Judgment/{02-How to Utilize Embedded Languages.md => 02-How-to-Utilize-Embedded-Languages.md} (100%) rename jp/3-Advanced/Technical-Judgment/{03-Choosing Languages.md => 03-Choosing-Languages.md} (100%) rename zh/1-Beginner/Personal-Skills/{01-Learn To Debug.md => 01-Learn-To-Debug.md} (100%) rename zh/1-Beginner/Personal-Skills/{02-How to Debug by Splitting the Problem Space.md => 02-How-to-Debug-by-Splitting-the-Problem-Space.md} (100%) rename zh/1-Beginner/Personal-Skills/{03-How to Remove an Error.md => 03-How-to-Remove-an-Error.md} (100%) rename zh/1-Beginner/Personal-Skills/{04-How to Debug Using a Log.md => 04-How-to-Debug-Using-a-Log.md} (100%) rename zh/1-Beginner/Personal-Skills/{05-How to Understand Performance Problems.md => 05-How-to-Understand-Performance-Problems.md} (100%) rename zh/1-Beginner/Personal-Skills/{06-How to Fix Performance Problems.md => 06-How-to-Fix-Performance-Problems.md} (100%) rename zh/1-Beginner/Personal-Skills/{07-How to Optimize Loops.md => 07-How-to-Optimize-Loops.md} (100%) rename zh/1-Beginner/Personal-Skills/{08-How to Deal with IO Expense.md => 08-How-to-Deal-with-IO-Expense.md} (100%) rename zh/1-Beginner/Personal-Skills/{09-How to Manage Memory.md => 09-How-to-Manage-Memory.md} (100%) rename zh/1-Beginner/Personal-Skills/{10-How to Deal with Intermittent Bugs.md => 10-How-to-Deal-with-Intermittent-Bugs.md} (100%) rename zh/1-Beginner/Personal-Skills/{11-How to Learn Design Skills.md => 11-How-to-Learn-Design-Skills.md} (100%) rename zh/1-Beginner/Personal-Skills/{12-How to Conduct Experiments.md => 12-How-to-Conduct-Experiments.md} (100%) rename zh/1-Beginner/Team-Skills/{01-Why Estimation is Important.md => 01-Why-Estimation-is-Important.md} (100%) rename zh/1-Beginner/Team-Skills/{02-How to Estimate Programming Time.md => 02-How-to-Estimate-Programming-Time.md} (100%) rename zh/1-Beginner/Team-Skills/{03-How to Find Out Information.md => 03-How-to-Find-Out-Information.md} (100%) rename zh/1-Beginner/Team-Skills/{04-How to Utilize People as Information Sources.md => 04-How-to-Utilize-People-as-Information-Sources.md} (100%) rename zh/1-Beginner/Team-Skills/{05-How to Document Wisely.md => 05-How-to-Document-Wisely.md} (100%) rename zh/1-Beginner/Team-Skills/{06-How to Work with Poor Code.md => 06-How-to-Work-with-Poor-Code.md} (100%) rename zh/1-Beginner/Team-Skills/{07-How to Use Source Code Control.md => 07-How-to-Use-Source-Code-Control.md} (100%) rename zh/1-Beginner/Team-Skills/{08-How to Unit Test.md => 08-How-to-Unit-Test.md} (100%) rename zh/1-Beginner/Team-Skills/{09-Take Breaks when Stumped.md => 09-Take-Breaks-when-Stumped.md} (100%) rename zh/1-Beginner/Team-Skills/{10-How to Recognize When to Go Home.md => 10-How-to-Recognize-When-to-Go-Home.md} (100%) rename zh/1-Beginner/Team-Skills/{11-How to Deal with Difficult People.md => 11-How-to-Deal-with-Difficult-People.md} (100%) rename zh/2-Intermediate/Judgment/{01-How to Tradeoff Quality Against Development Time.md => 01-How-to-Tradeoff-Quality-Against-Development-Time.md} (100%) rename zh/2-Intermediate/Judgment/{02-How to Manage Software System Dependence.md => 02-How-to-Manage-Software-System-Dependence.md} (100%) rename zh/2-Intermediate/Judgment/{03-How to Decide if Software is Too Immature.md => 03-How-to-Decide-if-Software-is-Too-Immature.md} (100%) rename zh/2-Intermediate/Judgment/{04-How to Make a Buy vs Build Decision.md => 04-How-to-Make-a-Buy-vs-Build-Decision.md} (100%) rename zh/2-Intermediate/Judgment/{05-How to Grow Professionally.md => 05-How-to-Grow-Professionally.md} (100%) rename zh/2-Intermediate/Judgment/{06-How to Evaluate Interviewees.md => 06-How-to-Evaluate-Interviewees.md} (100%) rename zh/2-Intermediate/Judgment/{07-How to Know When to Apply Fancy Computer Science.md => 07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md} (100%) rename zh/2-Intermediate/Judgment/{08-How to Talk to Non-Engineers.md => 08-How-to-Talk-to-Non-Engineers.md} (100%) rename zh/2-Intermediate/Personal-Skills/{01-How to Stay Motivated.md => 01-How-to-Stay-Motivated.md} (100%) rename zh/2-Intermediate/Personal-Skills/{02-How to be Widely Trusted.md => 02-How-to-be-Widely-Trusted.md} (100%) rename zh/2-Intermediate/Personal-Skills/{03-How to Tradeoff Time vs Space.md => 03-How-to-Tradeoff-Time-vs-Space.md} (100%) rename zh/2-Intermediate/Personal-Skills/{04-How to Stress Test.md => 04-How-to-Stress-Test.md} (100%) rename zh/2-Intermediate/Personal-Skills/{05-How to Balance Brevity and Abstraction.md => 05-How-to-Balance-Brevity-and-Abstraction.md} (100%) rename zh/2-Intermediate/Personal-Skills/{06-How to Learn New Skills.md => 06-How-to-Learn-New-Skills.md} (100%) rename zh/2-Intermediate/Personal-Skills/{07-Learn to Type.md => 07-Learn-to-Type.md} (100%) rename zh/2-Intermediate/Personal-Skills/{08-How to Do Integration Testing.md => 08-How-to-Do-Integration-Testing.md} (100%) rename zh/2-Intermediate/Personal-Skills/{09-Communication Languages.md => 09-Communication-Languages.md} (100%) rename zh/2-Intermediate/Personal-Skills/{10-Heavy Tools.md => 10-Heavy-Tools.md} (100%) rename zh/2-Intermediate/Personal-Skills/{11-How to analyze data.md => 11-How-to-analyze-data.md} (100%) rename zh/2-Intermediate/Team-Skills/{01-How to Manage Development Time.md => 01-How-to-Manage-Development-Time.md} (100%) rename zh/2-Intermediate/Team-Skills/{02-How to Manage Third-Party Software Risks.md => 02-How-to-Manage-Third-Party-Software-Risks.md} (100%) rename zh/2-Intermediate/Team-Skills/{03-How to Manage Consultants.md => 03-How-to-Manage-Consultants.md} (100%) rename zh/2-Intermediate/Team-Skills/{04-How to Communicate the Right Amount.md => 04-How-to-Communicate-the-Right-Amount.md} (100%) rename zh/2-Intermediate/Team-Skills/{05-How to Disagree Honestly and Get Away with It.md => 05-How-to-Disagree-Honestly-and-Get-Away-with-It.md} (100%) rename zh/3-Advanced/Compromising-Wisely/{01-How to Fight Schedule Pressure.md => 01-How-to-Fight-Schedule-Pressure.md} (100%) rename zh/3-Advanced/Compromising-Wisely/{02-How to Understand the User.md => 02-How-to-Understand-the-User.md} (100%) rename zh/3-Advanced/Compromising-Wisely/{03-How to Get a Promotion.md => 03-How-to-Get-a-Promotion.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{01-How to Develop Talent.md => 01-How-to-Develop-Talent.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{02-How to Choose What to Work On.md => 02-How-to-Choose-What-to-Work-On.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{03-How to Get the Most From Your Teammates.md => 03-How-to-Get-the-Most-From-Your-Teammates.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{04-How to Divide Problems Up.md => 04-How-to-Divide-Problems-Up.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{05-How to Handle Boring Tasks.md => 05-How-to-Handle-Boring-Tasks.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{06-How to Gather Support for a Project.md => 06-How-to-Gather-Support-for-a-Project.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{07-How to Grow a System.md => 07-How-to-Grow-a-System.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{08-How to Communicate Well.md => 08-How-to-Communicate-Well.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{09-How to Tell People Things They Don't Want to Hear.md => 09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{10-How to Deal with Managerial Myths.md => 10-How-to-Deal-with-Managerial-Myths.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{11-How to Deal with Organizational Chaos.md => 11-How-to-Deal-with-Organizational-Chaos.md} (100%) rename zh/3-Advanced/Technical-Judgment/{01-How to Tell the Hard From the Impossible.md => 01-How-to-Tell-the-Hard-From-the-Impossible.md} (100%) rename zh/3-Advanced/Technical-Judgment/{02-How to Utilize Embedded Languages.md => 02-How-to-Utilize-Embedded-Languages.md} (100%) rename zh/3-Advanced/Technical-Judgment/{03-Choosing Languages.md => 03-Choosing-Languages.md} (100%) diff --git a/en/1-Beginner/Personal-Skills/01-Learn To Debug.md b/en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md similarity index 100% rename from en/1-Beginner/Personal-Skills/01-Learn To Debug.md rename to en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md diff --git a/en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md similarity index 100% rename from en/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md rename to en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md diff --git a/en/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md similarity index 100% rename from en/1-Beginner/Personal-Skills/03-How to Remove an Error.md rename to en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md diff --git a/en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md similarity index 100% rename from en/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md rename to en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md diff --git a/en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md similarity index 100% rename from en/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md rename to en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md diff --git a/en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md similarity index 100% rename from en/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md rename to en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md diff --git a/en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md similarity index 100% rename from en/1-Beginner/Personal-Skills/07-How to Optimize Loops.md rename to en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md diff --git a/en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md similarity index 100% rename from en/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md rename to en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md diff --git a/en/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md similarity index 100% rename from en/1-Beginner/Personal-Skills/09-How to Manage Memory.md rename to en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md diff --git a/en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md similarity index 100% rename from en/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md rename to en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md diff --git a/en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md similarity index 100% rename from en/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md rename to en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md diff --git a/en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md similarity index 100% rename from en/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md rename to en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md diff --git a/en/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md similarity index 100% rename from en/1-Beginner/Team-Skills/01-Why Estimation is Important.md rename to en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md diff --git a/en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md similarity index 100% rename from en/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md rename to en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md diff --git a/en/1-Beginner/Team-Skills/03-How to Find Out Information.md b/en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md similarity index 100% rename from en/1-Beginner/Team-Skills/03-How to Find Out Information.md rename to en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md diff --git a/en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md similarity index 100% rename from en/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md rename to en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md diff --git a/en/1-Beginner/Team-Skills/05-How to Document Wisely.md b/en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md similarity index 100% rename from en/1-Beginner/Team-Skills/05-How to Document Wisely.md rename to en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md diff --git a/en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md similarity index 100% rename from en/1-Beginner/Team-Skills/06-How to Work with Poor Code.md rename to en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md diff --git a/en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md similarity index 100% rename from en/1-Beginner/Team-Skills/07-How to Use Source Code Control.md rename to en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md diff --git a/en/1-Beginner/Team-Skills/08-How to Unit Test.md b/en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md similarity index 100% rename from en/1-Beginner/Team-Skills/08-How to Unit Test.md rename to en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md diff --git a/en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md similarity index 100% rename from en/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md rename to en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md diff --git a/en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md similarity index 100% rename from en/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md rename to en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md diff --git a/en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/en/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md similarity index 100% rename from en/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md rename to en/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md diff --git a/en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md similarity index 100% rename from en/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md rename to en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md diff --git a/en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md similarity index 100% rename from en/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md rename to en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md diff --git a/en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md similarity index 100% rename from en/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md rename to en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md diff --git a/en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md similarity index 100% rename from en/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md rename to en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md diff --git a/en/2-Intermediate/Judgment/05-How to Grow Professionally.md b/en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md similarity index 100% rename from en/2-Intermediate/Judgment/05-How to Grow Professionally.md rename to en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md diff --git a/en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md similarity index 100% rename from en/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md rename to en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md diff --git a/en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md similarity index 100% rename from en/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md rename to en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md diff --git a/en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/en/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md similarity index 100% rename from en/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md rename to en/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md diff --git a/en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md rename to en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md diff --git a/en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md rename to en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md diff --git a/en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md rename to en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md diff --git a/en/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/04-How to Stress Test.md rename to en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md diff --git a/en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md rename to en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md diff --git a/en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md rename to en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md diff --git a/en/2-Intermediate/Personal-Skills/07-Learn to Type.md b/en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/07-Learn to Type.md rename to en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md diff --git a/en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md rename to en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md diff --git a/en/2-Intermediate/Personal-Skills/09-Communication Languages.md b/en/2-Intermediate/Personal-Skills/09-Communication-Languages.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/09-Communication Languages.md rename to en/2-Intermediate/Personal-Skills/09-Communication-Languages.md diff --git a/en/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/10-Heavy Tools.md rename to en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md diff --git a/en/2-Intermediate/Personal-Skills/11-How to analyze data.md b/en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md similarity index 100% rename from en/2-Intermediate/Personal-Skills/11-How to analyze data.md rename to en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md diff --git a/en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md similarity index 100% rename from en/2-Intermediate/Team-Skills/01-How to Manage Development Time.md rename to en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md diff --git a/en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md similarity index 100% rename from en/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md rename to en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md similarity index 100% rename from en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md rename to en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md diff --git a/en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md similarity index 100% rename from en/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md rename to en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md diff --git a/en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md similarity index 100% rename from en/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md rename to en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md diff --git a/en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md similarity index 100% rename from en/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md rename to en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md diff --git a/en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md similarity index 100% rename from en/3-Advanced/Compromising-Wisely/02-How to Understand the User.md rename to en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md diff --git a/en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md similarity index 100% rename from en/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md rename to en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md diff --git a/en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md rename to en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md diff --git a/en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md rename to en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md diff --git a/en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md rename to en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md diff --git a/en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md rename to en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md diff --git a/en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md rename to en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md diff --git a/en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md rename to en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md diff --git a/en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/07-How to Grow a System.md rename to en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md diff --git a/en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md rename to en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md diff --git a/en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md rename to en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md diff --git a/en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md rename to en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md diff --git a/en/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/en/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md rename to en/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md diff --git a/en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md similarity index 100% rename from en/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md rename to en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md diff --git a/en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md similarity index 100% rename from en/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md rename to en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md diff --git a/en/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md similarity index 100% rename from en/3-Advanced/Technical-Judgment/03-Choosing Languages.md rename to en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md diff --git a/jp/1-Beginner/Personal-Skills/01-Learn To Debug.md b/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/01-Learn To Debug.md rename to jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md diff --git a/jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/jp/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md rename to jp/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md diff --git a/jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/03-How to Remove an Error.md rename to jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md diff --git a/jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md rename to jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md diff --git a/jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md rename to jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md diff --git a/jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md rename to jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md diff --git a/jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/07-How to Optimize Loops.md rename to jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md diff --git a/jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md rename to jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md diff --git a/jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/09-How to Manage Memory.md rename to jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md diff --git a/jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md rename to jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md diff --git a/jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md rename to jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md diff --git a/jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md similarity index 100% rename from jp/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md rename to jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md diff --git a/jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md similarity index 100% rename from jp/1-Beginner/Team-Skills/01-Why Estimation is Important.md rename to jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md diff --git a/jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md similarity index 100% rename from jp/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md rename to jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md diff --git a/jp/1-Beginner/Team-Skills/03-How to Find Out Information.md b/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md similarity index 100% rename from jp/1-Beginner/Team-Skills/03-How to Find Out Information.md rename to jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md diff --git a/jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md similarity index 100% rename from jp/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md rename to jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md diff --git a/jp/1-Beginner/Team-Skills/05-How to Document Wisely.md b/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md similarity index 100% rename from jp/1-Beginner/Team-Skills/05-How to Document Wisely.md rename to jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md diff --git a/jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md similarity index 100% rename from jp/1-Beginner/Team-Skills/06-How to Work with Poor Code.md rename to jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md diff --git a/jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md similarity index 100% rename from jp/1-Beginner/Team-Skills/07-How to Use Source Code Control.md rename to jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md diff --git a/jp/1-Beginner/Team-Skills/08-How to Unit Test.md b/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md similarity index 100% rename from jp/1-Beginner/Team-Skills/08-How to Unit Test.md rename to jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md diff --git a/jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md similarity index 100% rename from jp/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md rename to jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md diff --git a/jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md similarity index 100% rename from jp/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md rename to jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md diff --git a/jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md similarity index 100% rename from jp/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md rename to jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md diff --git a/jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md similarity index 100% rename from jp/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md rename to jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md diff --git a/jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md similarity index 100% rename from jp/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md rename to jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md diff --git a/jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md similarity index 100% rename from jp/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md rename to jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md diff --git a/jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md similarity index 100% rename from jp/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md rename to jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md diff --git a/jp/2-Intermediate/Judgment/05-How to Grow Professionally.md b/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md similarity index 100% rename from jp/2-Intermediate/Judgment/05-How to Grow Professionally.md rename to jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md diff --git a/jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md similarity index 100% rename from jp/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md rename to jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md diff --git a/jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md similarity index 100% rename from jp/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md rename to jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md diff --git a/jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md similarity index 100% rename from jp/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md rename to jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md diff --git a/jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md rename to jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md diff --git a/jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md rename to jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md diff --git a/jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md rename to jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md diff --git a/jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/04-How to Stress Test.md rename to jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md diff --git a/jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md rename to jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md diff --git a/jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md rename to jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md diff --git a/jp/2-Intermediate/Personal-Skills/07-Learn to Type.md b/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/07-Learn to Type.md rename to jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md diff --git a/jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md rename to jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md diff --git a/jp/2-Intermediate/Personal-Skills/09-Communication Languages.md b/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/09-Communication Languages.md rename to jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md diff --git a/jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/10-Heavy Tools.md rename to jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md diff --git a/jp/2-Intermediate/Personal-Skills/11-How to analyze data.md b/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md similarity index 100% rename from jp/2-Intermediate/Personal-Skills/11-How to analyze data.md rename to jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md diff --git a/jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md similarity index 100% rename from jp/2-Intermediate/Team-Skills/01-How to Manage Development Time.md rename to jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md diff --git a/jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md similarity index 100% rename from jp/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md rename to jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md diff --git a/jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md similarity index 100% rename from jp/2-Intermediate/Team-Skills/03-How to Manage Consultants.md rename to jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md diff --git a/jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md similarity index 100% rename from jp/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md rename to jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md diff --git a/jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md similarity index 100% rename from jp/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md rename to jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md diff --git a/jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md similarity index 100% rename from jp/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md rename to jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md diff --git a/jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md similarity index 100% rename from jp/3-Advanced/Compromising-Wisely/02-How to Understand the User.md rename to jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md diff --git a/jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md similarity index 100% rename from jp/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md rename to jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md diff --git a/jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md rename to jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md diff --git a/jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md rename to jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md diff --git a/jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md rename to jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md diff --git a/jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md rename to jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md diff --git a/jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md rename to jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md diff --git a/jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md rename to jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md diff --git a/jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/07-How to Grow a System.md rename to jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md diff --git a/jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md rename to jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md diff --git a/jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md rename to jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md diff --git a/jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md rename to jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md diff --git a/jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md rename to jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md diff --git a/jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md similarity index 100% rename from jp/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md rename to jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md diff --git a/jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md similarity index 100% rename from jp/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md rename to jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md diff --git a/jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md similarity index 100% rename from jp/3-Advanced/Technical-Judgment/03-Choosing Languages.md rename to jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md diff --git a/zh/1-Beginner/Personal-Skills/01-Learn To Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn-To-Debug.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/01-Learn To Debug.md rename to zh/1-Beginner/Personal-Skills/01-Learn-To-Debug.md diff --git a/zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md b/zh/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/02-How to Debug by Splitting the Problem Space.md rename to zh/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md diff --git a/zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md b/zh/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/03-How to Remove an Error.md rename to zh/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md diff --git a/zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md b/zh/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/04-How to Debug Using a Log.md rename to zh/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md diff --git a/zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md b/zh/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/05-How to Understand Performance Problems.md rename to zh/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md diff --git a/zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md b/zh/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/06-How to Fix Performance Problems.md rename to zh/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md diff --git a/zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md b/zh/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/07-How to Optimize Loops.md rename to zh/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md diff --git a/zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md b/zh/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/08-How to Deal with IO Expense.md rename to zh/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md diff --git a/zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md b/zh/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/09-How to Manage Memory.md rename to zh/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md diff --git a/zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md b/zh/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/10-How to Deal with Intermittent Bugs.md rename to zh/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md diff --git a/zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md b/zh/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/11-How to Learn Design Skills.md rename to zh/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md diff --git a/zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md b/zh/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md similarity index 100% rename from zh/1-Beginner/Personal-Skills/12-How to Conduct Experiments.md rename to zh/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md diff --git a/zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md b/zh/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md similarity index 100% rename from zh/1-Beginner/Team-Skills/01-Why Estimation is Important.md rename to zh/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md diff --git a/zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md b/zh/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md similarity index 100% rename from zh/1-Beginner/Team-Skills/02-How to Estimate Programming Time.md rename to zh/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md diff --git a/zh/1-Beginner/Team-Skills/03-How to Find Out Information.md b/zh/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md similarity index 100% rename from zh/1-Beginner/Team-Skills/03-How to Find Out Information.md rename to zh/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md diff --git a/zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md b/zh/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md similarity index 100% rename from zh/1-Beginner/Team-Skills/04-How to Utilize People as Information Sources.md rename to zh/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md diff --git a/zh/1-Beginner/Team-Skills/05-How to Document Wisely.md b/zh/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md similarity index 100% rename from zh/1-Beginner/Team-Skills/05-How to Document Wisely.md rename to zh/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md diff --git a/zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md b/zh/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md similarity index 100% rename from zh/1-Beginner/Team-Skills/06-How to Work with Poor Code.md rename to zh/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md diff --git a/zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md b/zh/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md similarity index 100% rename from zh/1-Beginner/Team-Skills/07-How to Use Source Code Control.md rename to zh/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md diff --git a/zh/1-Beginner/Team-Skills/08-How to Unit Test.md b/zh/1-Beginner/Team-Skills/08-How-to-Unit-Test.md similarity index 100% rename from zh/1-Beginner/Team-Skills/08-How to Unit Test.md rename to zh/1-Beginner/Team-Skills/08-How-to-Unit-Test.md diff --git a/zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md b/zh/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md similarity index 100% rename from zh/1-Beginner/Team-Skills/09-Take Breaks when Stumped.md rename to zh/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md diff --git a/zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md b/zh/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md similarity index 100% rename from zh/1-Beginner/Team-Skills/10-How to Recognize When to Go Home.md rename to zh/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md diff --git a/zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md b/zh/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md similarity index 100% rename from zh/1-Beginner/Team-Skills/11-How to Deal with Difficult People.md rename to zh/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md diff --git a/zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md b/zh/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md similarity index 100% rename from zh/2-Intermediate/Judgment/01-How to Tradeoff Quality Against Development Time.md rename to zh/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md diff --git a/zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md b/zh/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md similarity index 100% rename from zh/2-Intermediate/Judgment/02-How to Manage Software System Dependence.md rename to zh/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md diff --git a/zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md b/zh/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md similarity index 100% rename from zh/2-Intermediate/Judgment/03-How to Decide if Software is Too Immature.md rename to zh/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md diff --git a/zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md b/zh/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md similarity index 100% rename from zh/2-Intermediate/Judgment/04-How to Make a Buy vs Build Decision.md rename to zh/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md diff --git a/zh/2-Intermediate/Judgment/05-How to Grow Professionally.md b/zh/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md similarity index 100% rename from zh/2-Intermediate/Judgment/05-How to Grow Professionally.md rename to zh/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md diff --git a/zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md b/zh/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md similarity index 100% rename from zh/2-Intermediate/Judgment/06-How to Evaluate Interviewees.md rename to zh/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md diff --git a/zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md b/zh/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md similarity index 100% rename from zh/2-Intermediate/Judgment/07-How to Know When to Apply Fancy Computer Science.md rename to zh/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md diff --git a/zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md b/zh/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md similarity index 100% rename from zh/2-Intermediate/Judgment/08-How to Talk to Non-Engineers.md rename to zh/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md diff --git a/zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md b/zh/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/01-How to Stay Motivated.md rename to zh/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md diff --git a/zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md b/zh/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/02-How to be Widely Trusted.md rename to zh/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md diff --git a/zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md b/zh/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/03-How to Tradeoff Time vs Space.md rename to zh/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md diff --git a/zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md b/zh/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/04-How to Stress Test.md rename to zh/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md diff --git a/zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md b/zh/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/05-How to Balance Brevity and Abstraction.md rename to zh/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md diff --git a/zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md b/zh/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/06-How to Learn New Skills.md rename to zh/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md diff --git a/zh/2-Intermediate/Personal-Skills/07-Learn to Type.md b/zh/2-Intermediate/Personal-Skills/07-Learn-to-Type.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/07-Learn to Type.md rename to zh/2-Intermediate/Personal-Skills/07-Learn-to-Type.md diff --git a/zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md b/zh/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/08-How to Do Integration Testing.md rename to zh/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md diff --git a/zh/2-Intermediate/Personal-Skills/09-Communication Languages.md b/zh/2-Intermediate/Personal-Skills/09-Communication-Languages.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/09-Communication Languages.md rename to zh/2-Intermediate/Personal-Skills/09-Communication-Languages.md diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy-Tools.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/10-Heavy Tools.md rename to zh/2-Intermediate/Personal-Skills/10-Heavy-Tools.md diff --git a/zh/2-Intermediate/Personal-Skills/11-How to analyze data.md b/zh/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md similarity index 100% rename from zh/2-Intermediate/Personal-Skills/11-How to analyze data.md rename to zh/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md diff --git a/zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md b/zh/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md similarity index 100% rename from zh/2-Intermediate/Team-Skills/01-How to Manage Development Time.md rename to zh/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md diff --git a/zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md b/zh/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md similarity index 100% rename from zh/2-Intermediate/Team-Skills/02-How to Manage Third-Party Software Risks.md rename to zh/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md diff --git a/zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/zh/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md similarity index 100% rename from zh/2-Intermediate/Team-Skills/03-How to Manage Consultants.md rename to zh/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md diff --git a/zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md b/zh/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md similarity index 100% rename from zh/2-Intermediate/Team-Skills/04-How to Communicate the Right Amount.md rename to zh/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md diff --git a/zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md b/zh/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md similarity index 100% rename from zh/2-Intermediate/Team-Skills/05-How to Disagree Honestly and Get Away with It.md rename to zh/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md diff --git a/zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md similarity index 100% rename from zh/3-Advanced/Compromising-Wisely/01-How to Fight Schedule Pressure.md rename to zh/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md diff --git a/zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md b/zh/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md similarity index 100% rename from zh/3-Advanced/Compromising-Wisely/02-How to Understand the User.md rename to zh/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md diff --git a/zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md similarity index 100% rename from zh/3-Advanced/Compromising-Wisely/03-How to Get a Promotion.md rename to zh/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md diff --git a/zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/01-How to Develop Talent.md rename to zh/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md diff --git a/zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md b/zh/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/02-How to Choose What to Work On.md rename to zh/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md diff --git a/zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/03-How to Get the Most From Your Teammates.md rename to zh/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md diff --git a/zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md b/zh/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/04-How to Divide Problems Up.md rename to zh/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md diff --git a/zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/05-How to Handle Boring Tasks.md rename to zh/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md diff --git a/zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md b/zh/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/06-How to Gather Support for a Project.md rename to zh/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md diff --git a/zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md b/zh/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/07-How to Grow a System.md rename to zh/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md diff --git a/zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md b/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/08-How to Communicate Well.md rename to zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md diff --git a/zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/09-How to Tell People Things They Don't Want to Hear.md rename to zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md diff --git a/zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/10-How to Deal with Managerial Myths.md rename to zh/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md diff --git a/zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md b/zh/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/11-How to Deal with Organizational Chaos.md rename to zh/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md diff --git a/zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md similarity index 100% rename from zh/3-Advanced/Technical-Judgment/01-How to Tell the Hard From the Impossible.md rename to zh/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md diff --git a/zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md b/zh/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md similarity index 100% rename from zh/3-Advanced/Technical-Judgment/02-How to Utilize Embedded Languages.md rename to zh/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing-Languages.md similarity index 100% rename from zh/3-Advanced/Technical-Judgment/03-Choosing Languages.md rename to zh/3-Advanced/Technical-Judgment/03-Choosing-Languages.md From b536d9ef0897d5326d8ed6a8910e1d3ec147b952 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Fri, 14 Jul 2017 09:58:00 +0100 Subject: [PATCH 124/149] Updated links to use dashes instead of spaces --- README.md | 128 +++++++++--------- .../Personal-Skills/01-Learn-To-Debug.md | 2 +- ...to-Debug-by-Splitting-the-Problem-Space.md | 2 +- .../03-How-to-Remove-an-Error.md | 2 +- .../04-How-to-Debug-Using-a-Log.md | 2 +- ...-How-to-Understand-Performance-Problems.md | 2 +- .../06-How-to-Fix-Performance-Problems.md | 2 +- .../07-How-to-Optimize-Loops.md | 2 +- .../08-How-to-Deal-with-IO-Expense.md | 2 +- .../09-How-to-Manage-Memory.md | 2 +- .../10-How-to-Deal-with-Intermittent-Bugs.md | 2 +- .../11-How-to-Learn-Design-Skills.md | 2 +- .../12-How-to-Conduct-Experiments.md | 2 +- en/1-Beginner/README.md | 46 +++---- .../01-Why-Estimation-is-Important.md | 2 +- .../02-How-to-Estimate-Programming-Time.md | 2 +- .../03-How-to-Find-Out-Information.md | 2 +- ...o-Utilize-People-as-Information-Sources.md | 2 +- .../Team-Skills/05-How-to-Document-Wisely.md | 2 +- .../06-How-to-Work-with-Poor-Code.md | 2 +- .../07-How-to-Use-Source-Code-Control.md | 2 +- .../Team-Skills/08-How-to-Unit-Test.md | 2 +- .../09-Take-Breaks-when-Stumped.md | 2 +- .../10-How-to-Recognize-When-to-Go-Home.md | 2 +- ...adeoff-Quality-Against-Development-Time.md | 2 +- ...ow-to-Manage-Software-System-Dependence.md | 2 +- ...w-to-Decide-if-Software-is-Too-Immature.md | 2 +- .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 2 +- .../Judgment/05-How-to-Grow-Professionally.md | 2 +- .../06-How-to-Evaluate-Interviewees.md | 2 +- ...ow-When-to-Apply-Fancy-Computer-Science.md | 2 +- .../01-How-to-Stay-Motivated.md | 2 +- .../02-How-to-be-Widely-Trusted.md | 2 +- .../03-How-to-Tradeoff-Time-vs-Space.md | 2 +- .../Personal-Skills/04-How-to-Stress-Test.md | 2 +- ...-How-to-Balance-Brevity-and-Abstraction.md | 2 +- .../06-How-to-Learn-New-Skills.md | 2 +- .../Personal-Skills/07-Learn-to-Type.md | 2 +- .../08-How-to-Do-Integration-Testing.md | 2 +- .../09-Communication-Languages.md | 2 +- .../Personal-Skills/10-Heavy-Tools.md | 2 +- .../Personal-Skills/11-How-to-analyze-data.md | 2 +- en/2-Intermediate/README.md | 48 +++---- .../01-How-to-Manage-Development-Time.md | 2 +- ...ow-to-Manage-Third-Party-Software-Risks.md | 2 +- .../03-How-to-Manage-Consultants.md | 2 +- .../04-How-to-Communicate-the-Right-Amount.md | 2 +- ...-Disagree-Honestly-and-Get-Away-with-It.md | 2 +- .../01-How-to-Fight-Schedule-Pressure.md | 2 +- .../02-How-to-Understand-the-User.md | 2 +- .../03-How-to-Get-a-Promotion.md | 2 +- en/3-Advanced/README.md | 34 ++--- .../01-How-to-Develop-Talent.md | 2 +- .../02-How-to-Choose-What-to-Work-On.md | 2 +- ...How-to-Get-the-Most-From-Your-Teammates.md | 2 +- .../04-How-to-Divide-Problems-Up.md | 2 +- .../05-How-to-Handle-Boring-Tasks.md | 2 +- .../06-How-to-Gather-Support-for-a-Project.md | 2 +- .../07-How-to-Grow-a-System.md | 2 +- .../08-How-to-Communicate-Well.md | 2 +- ...l-People-Things-They-Don't-Want-to-Hear.md | 2 +- .../10-How-to-Deal-with-Managerial-Myths.md | 2 +- ...ow-to-Tell-the-Hard-From-the-Impossible.md | 2 +- .../02-How-to-Utilize-Embedded-Languages.md | 2 +- .../03-Choosing-Languages.md | 2 +- en/README.md | 128 +++++++++--------- en/SUMMARY.md | 128 +++++++++--------- .../Personal-Skills/01-Learn-To-Debug.md | 2 +- ...to-Debug-by-Splitting-the-Problem-Space.md | 2 +- .../03-How-to-Remove-an-Error.md | 2 +- .../04-How-to-Debug-Using-a-Log.md | 2 +- ...-How-to-Understand-Performance-Problems.md | 2 +- .../06-How-to-Fix-Performance-Problems.md | 2 +- .../07-How-to-Optimize-Loops.md | 2 +- .../08-How-to-Deal-with-IO-Expense.md | 2 +- .../09-How-to-Manage-Memory.md | 2 +- .../10-How-to-Deal-with-Intermittent-Bugs.md | 2 +- .../11-How-to-Learn-Design-Skills.md | 2 +- .../12-How-to-Conduct-Experiments.md | 2 +- jp/1-Beginner/README.md | 46 +++---- .../01-Why-Estimation-is-Important.md | 2 +- .../02-How-to-Estimate-Programming-Time.md | 2 +- .../03-How-to-Find-Out-Information.md | 2 +- ...o-Utilize-People-as-Information-Sources.md | 2 +- .../Team-Skills/05-How-to-Document-Wisely.md | 2 +- .../06-How-to-Work-with-Poor-Code.md | 2 +- .../07-How-to-Use-Source-Code-Control.md | 2 +- .../Team-Skills/08-How-to-Unit-Test.md | 2 +- .../09-Take-Breaks-when-Stumped.md | 2 +- .../10-How-to-Recognize-When-to-Go-Home.md | 2 +- .../11-How-to-Deal-with-Difficult-People.md | 12 +- ...adeoff-Quality-Against-Development-Time.md | 2 +- ...ow-to-Manage-Software-System-Dependence.md | 2 +- ...w-to-Decide-if-Software-is-Too-Immature.md | 2 +- .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 2 +- .../Judgment/05-How-to-Grow-Professionally.md | 2 +- .../06-How-to-Evaluate-Interviewees.md | 2 +- ...ow-When-to-Apply-Fancy-Computer-Science.md | 2 +- .../08-How-to-Talk-to-Non-Engineers.md | 16 +-- .../01-How-to-Stay-Motivated.md | 2 +- .../02-How-to-be-Widely-Trusted.md | 2 +- .../03-How-to-Tradeoff-Time-vs-Space.md | 2 +- .../Personal-Skills/04-How-to-Stress-Test.md | 2 +- ...-How-to-Balance-Brevity-and-Abstraction.md | 2 +- .../06-How-to-Learn-New-Skills.md | 2 +- .../Personal-Skills/07-Learn-to-Type.md | 2 +- .../08-How-to-Do-Integration-Testing.md | 2 +- .../09-Communication-Languages.md | 2 +- .../Personal-Skills/10-Heavy-Tools.md | 2 +- .../Personal-Skills/11-How-to-analyze-data.md | 2 +- jp/2-Intermediate/README.md | 48 +++---- .../01-How-to-Manage-Development-Time.md | 2 +- ...ow-to-Manage-Third-Party-Software-Risks.md | 2 +- .../03-How-to-Manage-Consultants.md | 2 +- .../04-How-to-Communicate-the-Right-Amount.md | 2 +- ...-Disagree-Honestly-and-Get-Away-with-It.md | 2 +- .../01-How-to-Fight-Schedule-Pressure.md | 2 +- .../02-How-to-Understand-the-User.md | 2 +- .../03-How-to-Get-a-Promotion.md | 2 +- jp/3-Advanced/README.md | 34 ++--- .../01-How-to-Develop-Talent.md | 2 +- .../02-How-to-Choose-What-to-Work-On.md | 2 +- ...How-to-Get-the-Most-From-Your-Teammates.md | 2 +- .../04-How-to-Divide-Problems-Up.md | 2 +- .../05-How-to-Handle-Boring-Tasks.md | 2 +- .../06-How-to-Gather-Support-for-a-Project.md | 2 +- .../07-How-to-Grow-a-System.md | 2 +- .../08-How-to-Communicate-Well.md | 2 +- ...l-People-Things-They-Don't-Want-to-Hear.md | 2 +- .../10-How-to-Deal-with-Managerial-Myths.md | 2 +- ...1-How-to-Deal-with-Organizational-Chaos.md | 8 +- ...ow-to-Tell-the-Hard-From-the-Impossible.md | 2 +- .../02-How-to-Utilize-Embedded-Languages.md | 2 +- .../03-Choosing-Languages.md | 2 +- jp/README.md | 128 +++++++++--------- jp/SUMMARY.md | 128 +++++++++--------- .../Personal-Skills/01-Learn-To-Debug.md | 4 +- ...to-Debug-by-Splitting-the-Problem-Space.md | 2 +- .../03-How-to-Remove-an-Error.md | 2 +- .../04-How-to-Debug-Using-a-Log.md | 2 +- ...-How-to-Understand-Performance-Problems.md | 2 +- .../06-How-to-Fix-Performance-Problems.md | 2 +- .../07-How-to-Optimize-Loops.md | 2 +- .../08-How-to-Deal-with-IO-Expense.md | 2 +- .../09-How-to-Manage-Memory.md | 2 +- .../10-How-to-Deal-with-Intermittent-Bugs.md | 2 +- .../11-How-to-Learn-Design-Skills.md | 2 +- .../12-How-to-Conduct-Experiments.md | 2 +- zh/1-Beginner/README.md | 46 +++---- .../01-Why-Estimation-is-Important.md | 2 +- .../02-How-to-Estimate-Programming-Time.md | 2 +- .../03-How-to-Find-Out-Information.md | 2 +- ...o-Utilize-People-as-Information-Sources.md | 2 +- .../Team-Skills/05-How-to-Document-Wisely.md | 2 +- .../06-How-to-Work-with-Poor-Code.md | 2 +- .../07-How-to-Use-Source-Code-Control.md | 2 +- .../Team-Skills/08-How-to-Unit-Test.md | 2 +- .../09-Take-Breaks-when-Stumped.md | 2 +- .../10-How-to-Recognize-When-to-Go-Home.md | 2 +- ...adeoff-Quality-Against-Development-Time.md | 2 +- ...ow-to-Manage-Software-System-Dependence.md | 2 +- ...w-to-Decide-if-Software-is-Too-Immature.md | 2 +- .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 2 +- .../Judgment/05-How-to-Grow-Professionally.md | 2 +- .../06-How-to-Evaluate-Interviewees.md | 2 +- ...ow-When-to-Apply-Fancy-Computer-Science.md | 2 +- .../01-How-to-Stay-Motivated.md | 2 +- .../02-How-to-be-Widely-Trusted.md | 2 +- .../03-How-to-Tradeoff-Time-vs-Space.md | 2 +- .../Personal-Skills/04-How-to-Stress-Test.md | 2 +- ...-How-to-Balance-Brevity-and-Abstraction.md | 2 +- .../06-How-to-Learn-New-Skills.md | 2 +- .../Personal-Skills/07-Learn-to-Type.md | 2 +- .../08-How-to-Do-Integration-Testing.md | 2 +- .../09-Communication-Languages.md | 2 +- .../Personal-Skills/10-Heavy-Tools.md | 2 +- .../Personal-Skills/11-How-to-analyze-data.md | 2 +- zh/2-Intermediate/README.md | 48 +++---- .../01-How-to-Manage-Development-Time.md | 2 +- ...ow-to-Manage-Third-Party-Software-Risks.md | 2 +- .../03-How-to-Manage-Consultants.md | 2 +- .../04-How-to-Communicate-the-Right-Amount.md | 2 +- ...-Disagree-Honestly-and-Get-Away-with-It.md | 2 +- .../01-How-to-Fight-Schedule-Pressure.md | 2 +- .../02-How-to-Understand-the-User.md | 2 +- .../03-How-to-Get-a-Promotion.md | 2 +- zh/3-Advanced/README.md | 34 ++--- .../01-How-to-Develop-Talent.md | 2 +- .../02-How-to-Choose-What-to-Work-On.md | 2 +- ...How-to-Get-the-Most-From-Your-Teammates.md | 2 +- .../04-How-to-Divide-Problems-Up.md | 2 +- .../05-How-to-Handle-Boring-Tasks.md | 2 +- .../06-How-to-Gather-Support-for-a-Project.md | 2 +- .../07-How-to-Grow-a-System.md | 2 +- .../08-How-to-Communicate-Well.md | 2 +- ...l-People-Things-They-Don't-Want-to-Hear.md | 2 +- .../10-How-to-Deal-with-Managerial-Myths.md | 2 +- ...ow-to-Tell-the-Hard-From-the-Impossible.md | 2 +- .../02-How-to-Utilize-Embedded-Languages.md | 2 +- .../03-Choosing-Languages.md | 2 +- zh/README.md | 128 +++++++++--------- zh/SUMMARY.md | 128 +++++++++--------- 202 files changed, 842 insertions(+), 842 deletions(-) diff --git a/README.md b/README.md index 33553a8..a3f617b 100644 --- a/README.md +++ b/README.md @@ -27,79 +27,79 @@ Welcome to the tribe. 1. [Beginner](en/1-Beginner) - Personal Skills - - [Learn to Debug](en/1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - - [How to Debug by Splitting the Problem Space](en/1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [How to Remove an Error](en/1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [How to Debug Using a Log](en/1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [How to Understand Performance Problems](en/1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [How to Fix Performance Problems](en/1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [How to Optimize Loops](en/1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [How to Deal with I/O Expense](en/1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [How to Manage Memory](en/1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [How to Deal with Intermittent Bugs](en/1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [How to Learn Design Skills](en/1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [How to Conduct Experiments](en/1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [Learn to Debug](en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [How to Debug by Splitting the Problem Space](en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [How to Remove an Error](en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [How to Debug Using a Log](en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [How to Understand Performance Problems](en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [How to Fix Performance Problems](en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [How to Optimize Loops](en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [How to Deal with I/O Expense](en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [How to Manage Memory](en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [How to Deal with Intermittent Bugs](en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [How to Learn Design Skills](en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [How to Conduct Experiments](en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - Team Skills - - [Why Estimation is Important](en/1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [How to Estimate Programming Time](en/1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [How to Find Out Information](en/1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [How to Utilize People as Information Sources](en/1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [How to Document Wisely](en/1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - - [How to Work with Poor Code](en/1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [How to Use Source Code Control](en/1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [How to Unit Test](en/1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - - [Take Breaks when Stumped](en/1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [How to Recognize When to Go Home](en/1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [How to Deal with Difficult People](en/1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [Why Estimation is Important](en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [How to Estimate Programming Time](en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [How to Find Out Information](en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [How to Utilize People as Information Sources](en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [How to Document Wisely](en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [How to Work with Poor Code](en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [How to Use Source Code Control](en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [How to Unit Test](en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [Take Breaks when Stumped](en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [How to Recognize When to Go Home](en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [How to Deal with Difficult People](en/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) 2. [Intermediate](en/2-Intermediate) - Personal Skills - - [How to Stay Motivated](en/2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [How to be Widely Trusted](en/2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [How to Tradeoff Time vs. Space](en/2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [How to Stress Test](en/2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - - [How to Balance Brevity and Abstraction](en/2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [How to Learn New Skills](en/2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [Learn to Type](en/2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - - [How to Do Integration Testing](en/2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [Communication Languages](en/2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - - [Heavy Tools](en/2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - - [How to analyze data](en/2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + - [How to Stay Motivated](en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [How to be Widely Trusted](en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [How to Tradeoff Time vs. Space](en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [How to Stress Test](en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [How to Balance Brevity and Abstraction](en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [How to Learn New Skills](en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Learn to Type](en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [How to Do Integration Testing](en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Communication Languages](en/2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [Heavy Tools](en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [How to analyze data](en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - Team Skills - - [How to Manage Development Time](en/2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [How to Manage Third-Party Software Risks](en/2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [How to Manage Consultants](en/2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [How to Communicate the Right Amount](en/2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [How to Disagree Honestly and Get Away with It](en/2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [How to Manage Development Time](en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [How to Manage Third-Party Software Risks](en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [How to Manage Consultants](en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [How to Communicate the Right Amount](en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [How to Disagree Honestly and Get Away with It](en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](en/2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [How to Manage Software System Dependence](en/2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [How to Decide if Software is Too Immature](en/2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [How to Make a Buy vs. Build Decision](en/2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [How to Manage Software System Dependence](en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [How to Decide if Software is Too Immature](en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [How to Make a Buy vs. Build Decision](en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [How to Grow Professionally](en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [Advanced](en/3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [How to Utilize Embedded Languages](en/3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [Choosing Languages](en/3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](en/3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [How to Understand the User](en/3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [How to Get a Promotion](en/3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [How to Fight Schedule Pressure](en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - Serving Your Team - - [How to Develop Talent](en/3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [How to Choose What to Work On](en/3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [How to Get the Most From Your Team-mates](en/3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [How to Divide Problems Up](en/3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [How to Handle Boring Tasks](en/3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [How to Gather Support for a Project](en/3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [How to Grow a System](en/3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [How to Communicate Well](en/3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [How to Deal with Managerial Myths](en/3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [How to Deal with Organizational Chaos](en/3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [How to Develop Talent](en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Deal with Managerial Myths](en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](en/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](en/GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](en/5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](en/6-History.md) diff --git a/en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index 67a4119..8cb8976 100644 --- a/en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/en/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -18,4 +18,4 @@ Debugging tools are wonderful when they are stable and available, but printlinin Some beginners fear debugging when it requires modifying code. This is understandable - it is a little like exploratory surgery. But you have to learn to poke at the code and make it jump; you have to learn to experiment on it and understand that nothing that you temporarily do to it will make it worse. If you feel this fear, seek out a mentor - we lose a lot of good programmers at the delicate onset of their learning to this fear. -Next [How to Debug by Splitting the Problem Space](02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) +Next [How to Debug by Splitting the Problem Space](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md index 03a18d6..9af47f3 100644 --- a/en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md +++ b/en/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -12,4 +12,4 @@ To a true beginner, the space of all possible errors looks like every line in th Once you have evenly subdivided the space of all that can go wrong, you must try to decide in which space the error lies. In the simple case where the mystery is: ‘Which single unknown line makes my program crash?’, you can ask yourself: ‘Is the unknown line executed before or after this line that I judge to be executed in the middle of the running program?’ Usually you will not be so lucky as to know that the error exists in a single line, or even a single block. Often the mystery will be more like: ‘Either there is a pointer in that graph that points to the wrong node, or my algorithm that adds up the variables in that graph doesn't work.’ In that case you may have to write a small program to check that the pointers in the graph are all correct in order to decide which part of the subdivided mystery can be eliminated. -Next [How to Remove an Error](03-How%20to%20Remove%20an%20Error.md) +Next [How to Remove an Error](03-How-to-Remove-an-Error.md) diff --git a/en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index 89a6b64..cf286c0 100644 --- a/en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/en/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -6,4 +6,4 @@ In fixing a bug, you want to make the smallest change that fixes the bug. You ma Sometimes, there are really several bugs that look like one. It is up to you to define the bugs and fix them one at a time. Sometimes it is unclear what the program should do or what the original author intended. In this case, you must exercise your experience and judgment and assign your own meaning to the code. Decide what it should do, and comment it or clarify it in some way and then make the code conform to your meaning. This is an intermediate or advanced skill that is sometimes harder than writing the original function in the first place, but the real world is often messy. You may have to fix a system you cannot rewrite. -Next [How to Debug Using a Log](04-How%20to%20Debug%20Using%20a%20Log.md) \ No newline at end of file +Next [How to Debug Using a Log](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 2a2e776..8263ea7 100644 --- a/en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/en/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -10,4 +10,4 @@ The amount to output into the log is always a compromise between information and If you have a permanent log, printlining can now be done in terms of the log records, and some of the debugging statements will probably be permanently added to the logging system. -Next [How to Understand Performance Problems](05-How%20to%20Understand%20Performance%20Problems.md) +Next [How to Understand Performance Problems](05-How-to-Understand-Performance-Problems.md) diff --git a/en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index f29616f..7a5160f 100644 --- a/en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/en/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -8,4 +8,4 @@ There are many dimensions to the performance of a computer system, and many reso Contention for shared resources that are synchronized can cause deadlock and starvation. Deadlock is the inability to proceed because of improper synchronization or resource demands. Starvation is the failure to schedule a component properly. If it can be at all anticipated, it is best to have a way of measuring this contention from the start of your project. Even if this contention does not occur, it is very helpful to be able to assert that with confidence. -Next [How to Fix Performance Problems](06-How%20to%20Fix%20Performance%20Problems.md) +Next [How to Fix Performance Problems](06-How-to-Fix-Performance-Problems.md) diff --git a/en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index 9d5ef6e..7d07f20 100644 --- a/en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/en/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -10,4 +10,4 @@ Often, the bottlenecks in performance will be an example of counting cows by cou What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down. You can continue making small improvements or you can seriously redesign a system or a subsystem. (This is a great opportunity to use your skills as a good programmer, not only in the new design but also in convincing your boss that this is a good idea.) However, before you argue for the redesign of a subsystem, you should ask yourself whether or not your proposal will make it five to ten time better. -Next [How to Optimize Loops](07-How%20to%20Optimize%20Loops.md) +Next [How to Optimize Loops](07-How-to-Optimize-Loops.md) diff --git a/en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md index 41d289d..c3d0078 100644 --- a/en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md +++ b/en/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -12,4 +12,4 @@ Sometimes you'll encounter loops, or recursive functions, that take a long time The cost of each of these operations depends on your specific system. On some systems compilers and hardware do these things for you. Clear, efficient code is better than code that requires an understanding of a particular platform. -Next [How to Deal with I/O Expense](08-How%20to%20Deal%20with%20IO%20Expense.md) +Next [How to Deal with I/O Expense](08-How-to-Deal-with-IO-Expense.md) diff --git a/en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md index 2ea5d66..3a5c127 100644 --- a/en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md +++ b/en/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -10,4 +10,4 @@ Representations can often be improved by a factor of two or three from their fir A third technique that is sometimes possible is to improve the locality of reference by pushing the computation closer to the data. For instance, if you are reading some data from a database and computing something simple from it, such as a summation, try to get the database server to do it for you. This is highly dependent on the kind of system you're working with, but you should explore it. -Next [How to Manage Memory](09-How%20to%20Manage%20Memory.md) \ No newline at end of file +Next [How to Manage Memory](09-How-to-Manage-Memory.md) \ No newline at end of file diff --git a/en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md index fd2ecbb..7734f72 100644 --- a/en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md +++ b/en/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -12,4 +12,4 @@ An important case occurs when you can define an upper bound on the number of obj Sometimes you have to explicitly free allocated space so it can be reallocated rather than rely on garbage collection. Then you must apply careful intelligence to each chunk of allocated memory and design a way for it to be deallocated at the appropriate time. The method may differ for each kind of object you create. You must make sure that every execution of a memory allocating operation is matched by a memory deallocating operation eventually. This is so difficult that programmers often simply implement a rudimentary form of garbage collection, such as reference counting, to do this for them. -Next [How to Deal with Intermittent Bugs](10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) +Next [How to Deal with Intermittent Bugs](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index 82c4741..10fc692 100644 --- a/en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/en/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -14,4 +14,4 @@ This illustrates some risk associated with third-party software. We were using a The program performed well except on some long and unusual kinds of texts. On these texts, the code was quadratic or worse. This means that the processing time was proportional to the square of the length of the text. Had these texts occurred commonly, we would have found the bug right away. If they had never occurred at all, we would never have had a problem. As it happens, it took us weeks to finally understand and resolve the problem. -Next [How to Learn Design Skills](11-How%20to%20Learn%20Design%20Skills.md) +Next [How to Learn Design Skills](11-How-to-Learn-Design-Skills.md) diff --git a/en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md index b70fd2f..3ed45bc 100644 --- a/en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md +++ b/en/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -6,4 +6,4 @@ Then you must do it yourself. Start with a small project. When you are finally d It is natural and helpful to develop your own style, but remember that design is an art, not a science. People who write books on the subject have a vested interest in making it seem scientific. Don't become dogmatic about particular design styles. -Next [How to Conduct Experiments](12-How%20to%20Conduct%20Experiments.md) +Next [How to Conduct Experiments](12-How-to-Conduct-Experiments.md) diff --git a/en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index 23d9b0e..1358296 100644 --- a/en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/en/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -20,4 +20,4 @@ First, try to be very clear about your hypothesis, or the assertion that you are You will often find yourself having to design a series of experiments, each of which is based on the knowledge gained from the last experiment. Therefore, you should design your experiments to provide the most information possible. Unfortunately, this is in tension with keeping each experiment simple - you will have to develop this judgement through experience. -Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why%20Estimation%20is%20Important.md) +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/en/1-Beginner/README.md b/en/1-Beginner/README.md index 22bbed7..d07cad2 100644 --- a/en/1-Beginner/README.md +++ b/en/1-Beginner/README.md @@ -1,27 +1,27 @@ # 1. Beginner [//]: # (Version:1.0.0) - Personal Skills - - [Learn to Debug](Personal-Skills/01-Learn%20To%20Debug.md) - - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [How to Remove an Error](Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [How to Debug Using a Log](Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [How to Understand Performance Problems](Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [How to Fix Performance Problems](Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [How to Optimize Loops](Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [How to Deal with I/O Expense](Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [How to Manage Memory](Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [How to Deal with Intermittent Bugs](Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [How to Learn Design Skills](Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [How to Conduct Experiments](Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [Learn to Debug](Personal-Skills/01-Learn-To-Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [How to Remove an Error](Personal-Skills/03-How-to-Remove-an-Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How-to-Optimize-Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [How to Manage Memory](Personal-Skills/09-How-to-Manage-Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How-to-Conduct-Experiments.md) - Team Skills - - [Why Estimation is Important](Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [How to Estimate Programming Time](Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [How to Find Out Information](Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [How to Utilize People as Information Sources](Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [How to Document Wisely](Team-Skills/05-How%20to%20Document%20Wisely.md) - - [How to Work with Poor Code](Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [How to Use Source Code Control](Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [How to Unit Test](Team-Skills/08-How%20to%20Unit%20Test.md) - - [Take Breaks when Stumped](Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [How to Recognize When to Go Home](Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [How to Deal with Difficult People](Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [Why Estimation is Important](Team-Skills/01-Why-Estimation-is-Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [How to Find Out Information](Team-Skills/03-How-to-Find-Out-Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [How to Document Wisely](Team-Skills/05-How-to-Document-Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [How to Use Source Code Control](Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [How to Unit Test](Team-Skills/08-How-to-Unit-Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take-Breaks-when-Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [How to Deal with Difficult People](Team-Skills/11-How-to-Deal-with-Difficult-People.md) diff --git a/en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md index f503a31..b24dfec 100644 --- a/en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md +++ b/en/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -12,4 +12,4 @@ really means: This common interpretation problem requires that you explicitly discuss what the estimate means with your boss or customer as if they were a simpleton. Restate your assumptions, no matter how obvious they seem to you. -Next [How to Estimate Programming Time](02-How%20to%20Estimate%20Programming%20Time.md) +Next [How to Estimate Programming Time](02-How-to-Estimate-Programming-Time.md) diff --git a/en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md index 111851f..f1385ad 100644 --- a/en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md +++ b/en/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -18,4 +18,4 @@ If there are big risks that cannot be evaluated, it is your duty to state so for If you can convince your company to use *Extreme Programming*, you will only have to estimate relatively small things, and this is both more fun and more productive. -Next [How to Find Out Information](03-How%20to%20Find%20Out%20Information.md) +Next [How to Find Out Information](03-How-to-Find-Out-Information.md) diff --git a/en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md index 2113109..07de694 100644 --- a/en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md +++ b/en/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -16,4 +16,4 @@ If you want to know *how likely it is* that a faster algorithm for a particular If you want to make a *personal decision that only you can make* like whether or not you should start a business, try putting into writing a list of arguments for and against the idea. If that fails, consider divination. Suppose you have studied the idea from all angles, have done all your homework, and worked out all the consequences and pros and cons in your mind, and yet still remain indecisive. You now must follow your heart and tell your brain to shut up. The multitude of available divination techniques are very useful for determining your own semi-conscious desires, as they each present a complete ambiguous and random pattern that your own subconscious will assign meaning to. -Next [How to Utilize People as Information Sources](04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) +Next [How to Utilize People as Information Sources](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index a267f9d..0de2a3f 100644 --- a/en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/en/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -12,4 +12,4 @@ A strange example of this is the summer intern. A summer intern in a highly tech You should ask people for a little bit of their wisdom and judgement whenever you honestly believe they have something to say. This flatters them and you will learn something and teach them something. A good programmer does not often need the advice of a Vice President of Sales, but if you ever do, you be sure to ask for it. I once asked to listen in on a few sales calls to better understand the job of our sales staff. This took no more than 30 minutes but I think that small effort made an impression on the sales force. -Next [How to Document Wisely](05-How%20to%20Document%20Wisely.md) \ No newline at end of file +Next [How to Document Wisely](05-How-to-Document-Wisely.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index acf2815..5a7fcad 100644 --- a/en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/en/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -17,4 +17,4 @@ This does not make it easier on the responsible programmer. How does one write s - Thinking about the reader and spending some of your precious time to make it easier on her; and - Not ever using a function name like `foo`,`bar`, or `doIt`! -Next [How to Work with Poor Code](06-How%20to%20Work%20with%20Poor%20Code.md) \ No newline at end of file +Next [How to Work with Poor Code](06-How-to-Work-with-Poor-Code.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md index a171a5f..ff6f5b0 100644 --- a/en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md +++ b/en/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -8,4 +8,4 @@ In any estimate that you make for work against code you didn't write, the qualit It is important to remember that abstraction and encapsulation, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. -Next [How to Use Source Code Control](07-How%20to%20Use%20Source%20Code%20Control.md) \ No newline at end of file +Next [How to Use Source Code Control](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md index 3f59359..e116dbf 100644 --- a/en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md +++ b/en/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -6,4 +6,4 @@ I was late to appreciate the benefits of source code control systems but now I w A good technique for using a source code control system is to stay within a few days of being up-to-date at all time. Code that can't be finished in a few days is checked in, but in a way that it is inactive and will not be called, and therefore not create any problems for anybody else. Committing a mistake that slows down your team-mates is a serious error; it is often taboo. -Next [How to Unit Test](08-How%20to%20Unit%20Test.md) +Next [How to Unit Test](08-How-to-Unit-Test.md) diff --git a/en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md index 21b1415..d1c8dae 100644 --- a/en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md +++ b/en/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -6,4 +6,4 @@ Use assertion checking and test drivers whenever possible. This not only catches The Extreme Programming developers are writing extensively on unit testing effectively; I can do no better than to recommend their writings. -Next [Take Breaks when Stumped](09-Take%20Breaks%20when%20Stumped.md) \ No newline at end of file +Next [Take Breaks when Stumped](09-Take-Breaks-when-Stumped.md) \ No newline at end of file diff --git a/en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md index b747fe0..274c682 100644 --- a/en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md +++ b/en/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) When stumped, take a break. I sometimes meditate for 15 minutes when stumped and the problem magically unravels when I come back to it. A night's sleep sometimes does the same thing on a larger scale. It's possible that temporarily switching to any other activity may work. -Next [How to Recognize When to Go Home](10-How%20to%20Recognize%20When%20to%20Go%20Home.md) +Next [How to Recognize When to Go Home](10-How-to-Recognize-When-to-Go-Home.md) diff --git a/en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index 9114768..da276e6 100644 --- a/en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/en/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -13,4 +13,4 @@ Most programmers are good programmers, and good programmers want to get a lot do Since I have children, I try to spend evenings with them sometimes. The rhythm that works best for me is to work a very long day, sleep in the office or near the office (I have a long commute from home to work) then go home early enough the next day to spend time with my children before they go to bed. I am not comfortable with this, but it is the best compromise I have been able to work out. Go home if you have a contagious disease. You should go home if you are thinking suicidal thoughts. You should take a break or go home if you think homicidal thoughts for more than a few seconds. You should send someone home if they show serious mental malfunctioning or signs of mental illness beyond mild depression. If you are tempted to be dishonest or deceptive in a way that you normally are not due to fatigue, you should take a break. Don't use cocaine or amphetamines to combat fatigue. Don't abuse caffeine. -Next [How to Deal with Difficult People](11-How%20to%20Deal%20with%20Difficult%20People.md) +Next [How to Deal with Difficult People](11-How-to-Deal-with-Difficult-People.md) diff --git a/en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md index b46ac3f..87f168d 100644 --- a/en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md +++ b/en/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -10,4 +10,4 @@ NinjaProgrammer at Slashdot sent in this gem: > Remember that a good design will be resilient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this. -Next [How to Manage Software Dependence](02-How%20to%20Manage%20Software%20System%20Dependence.md) +Next [How to Manage Software Dependence](02-How-to-Manage-Software-System-Dependence.md) diff --git a/en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index eea11f9..bfe31fc 100644 --- a/en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/en/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -10,4 +10,4 @@ It is always best to encapsulate the component in some way so that it is isolate Having the source code for a component decreases the risk by a factor of four. With source code, you can evaluate it easier, debug it easier, find workarounds easier, and make fixes easier. If you make fixes, you should give them to the owner of the component and get the fixes incorporated into an official release; otherwise you will uncomfortably have to maintain an unofficial version. -Next [How to Decide if Software is Too Immature](03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) +Next [How to Decide if Software is Too Immature](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md index 40d953a..dca19f3 100644 --- a/en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md +++ b/en/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -15,4 +15,4 @@ Using software other people wrote is one of the most effective ways to quickly b A little consideration of these criteria demonstrates the great value of well-established free software and open-source software in reducing risk to the entrepreneur. -Next [How to Make a Buy vs. Build Decision](04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) \ No newline at end of file +Next [How to Make a Buy vs. Build Decision](04-How-to-Make-a-Buy-vs-Build-Decision.md) \ No newline at end of file diff --git a/en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index fc5283a..73c35c0 100644 --- a/en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/en/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -13,4 +13,4 @@ You should think twice before building something that is big enough to serve as After considering these questions, you should perhaps prepare two draft project plans, one for building and one for buying. This will force you to consider the integration costs. You should also consider the long term maintenance costs of both solutions. To estimate the integration costs, you will have to do a thorough evaluation of the software before you buy it. If you can't evaluate it, you will assume an unreasonable risk in buying it and you should decide against buying that particular product. If there are several buy decisions under consideration, some energy will have to be spent evaluating each. -Next [How to Grow Professionally](05-How%20to%20Grow%20Professionally.md) +Next [How to Grow Professionally](05-How-to-Grow-Professionally.md) diff --git a/en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index 24d1e28..1694e84 100644 --- a/en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/en/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -8,4 +8,4 @@ Evaluate yourself. If you want to become a better programmer, ask someone you ad Plan ways to learn new skills, both the trivial technical kind, like learning a new software system, and the hard social kind, like writing well, by integrating them into your work. -Next [How to Evaluate Interviewees](06-How%20to%20Evaluate%20Interviewees.md) \ No newline at end of file +Next [How to Evaluate Interviewees](06-How-to-Evaluate-Interviewees.md) \ No newline at end of file diff --git a/en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md index f7c9990..43933f4 100644 --- a/en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md +++ b/en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -12,4 +12,4 @@ A reader has had good luck using a ‘take-home’ test for interviewees. This h Finally, interviewing is also a process of selling. You should be selling your company or project to the candidate. However, you are talking to a programmer, so don't try to colour the truth. Start off with the bad stuff, then finish strong with the good stuff. -Next [How to Know When to Apply Fancy Computer Science](07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) +Next [How to Know When to Apply Fancy Computer Science](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md index 863ec85..4c9df66 100644 --- a/en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md +++ b/en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -12,4 +12,4 @@ The three most important considerations for the potential computer science techn If a well-isolated algorithm that uses a slightly fancy algorithm can decrease hardware cost or increase performance by a factor of two across an entire system, then it would be criminal not to consider it. One of the keys to arguing for such an approach is to show that the risk is really quite low, since the proposed technology has probably been well studied, the only issue is the risk of integration. Here a programmer's experience and judgement can truly synergize with the fancy technology to make integration easy. -Next [How to Talk to Non-Engineers](08-How%20to%20Talk%20to%20Non-Engineers.md) \ No newline at end of file +Next [How to Talk to Non-Engineers](08-How-to-Talk-to-Non-Engineers.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md index 5203f5e..0e30198 100644 --- a/en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md +++ b/en/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -12,4 +12,4 @@ Obviously, there are entire industries organized around motivational techniques, Finally, if possible, measure the impact of your work in terms of something that will be personally motivating. For example, when fixing bugs, counting the number of bugs that I have fixed is not at all motivational to me, because it is independent of the number that may still exist, and it also affects the total value I'm adding to my company's customers in only the smallest possible way. Relating each bug to a happy customer, however, *is* personally motivating to me. -Next [How to be Widely Trusted](02-How%20to%20be%20Widely%20Trusted.md) +Next [How to be Widely Trusted](02-How-to-be-Widely-Trusted.md) diff --git a/en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md index a47f551..2ffa3c6 100644 --- a/en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md +++ b/en/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -4,4 +4,4 @@ To be trusted you must be trustworthy. You must also be visible. If no one knows Don't pretend to know something that you don't. With people that are not teammates, you may have to make a clear distinction between 'not knowing right off the top of my head' and 'not being able to figure it out, ever.' -Next [How to Tradeoff Time vs. Space](03-How%20to%20Tradeoff%20Time%20vs%20Space.md) +Next [How to Tradeoff Time vs. Space](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md index 22b31fc..59add49 100644 --- a/en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md +++ b/en/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -12,4 +12,4 @@ Improving the space/time trade-off can often change one or the other dramaticall Memory on modern computers appears cheap, because unlike processor time, you can't see it being used until you hit the wall; but then failure is catastrophic. There are also other hidden costs to using memory, such as your effect on other programs that must be resident, and the time to allocate and deallocate it. Consider this carefully before you trade away space to gain speed. -Next [How to Stress Test](04-How%20to%20Stress%20Test.md) +Next [How to Stress Test](04-How-to-Stress-Test.md) diff --git a/en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md index 2d0a97f..32f3b79 100644 --- a/en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md +++ b/en/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -14,4 +14,4 @@ Knowing where the wall is is essential not only to moving the wall, but also to [1] "to hit" -Next [How to Balance Brevity and Abstraction](05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) \ No newline at end of file +Next [How to Balance Brevity and Abstraction](05-How-to-Balance-Brevity-and-Abstraction.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index 78b443c..0d8fd0e 100644 --- a/en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/en/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -6,4 +6,4 @@ There is a certain dogma associated with useful techniques such as *information Portability poses a similar problem. Should code be portable to a different computer, compiler, software system or platform, or simply easily ported? I think a non-portable, short-and-easily-ported piece of code is better than a long portable one. It is relatively easy and certainly a good idea to confine non-portable code to designated areas, such as a class that makes database queries that are specific to a given DBMS. -Next [How to Learn New Skills](06-How%20to%20Learn%20New%20Skills.md) +Next [How to Learn New Skills](06-How-to-Learn-New-Skills.md) diff --git a/en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md index 39376e4..5fb0846 100644 --- a/en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md +++ b/en/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -10,4 +10,4 @@ Try to get your boss to let you have formal training, but understand that it is If you lead people, understand how they learn and assist them by assigning them projects that are the right size and that exercise skills they are interested in. Don't forget that the most important skills for a programmer are not the technical ones. Give your people a chance to play and practice courage, honesty, and communication. -Next [Learn to Type](07-Learn%20to%20Type.md) +Next [Learn to Type](07-Learn-to-Type.md) diff --git a/en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md index 9be7d5d..0861bc4 100644 --- a/en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md +++ b/en/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) Learn to touch-type. This is an intermediate skill because writing code is so hard that the speed at which you can type is irrelevant and can't put much of a dent in the time it takes to write code, no matter how good you are. However, by the time you are an intermediate programmer you will probably spend a lot of time writing natural language to your colleagues and others. This is a fun test of your commitment; it takes dedicated time that is not much fun to learn something like that. Legend has it that when Michael Tiemann was at MCC people would stand outside his door to listen to the hum generated by his keystrokes which were so rapid as to be indistinguishable. -Next [How to Do Integration Testing](08-How%20to%20Do%20Integration%20Testing.md) \ No newline at end of file +Next [How to Do Integration Testing](08-How-to-Do-Integration-Testing.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md index 6309f6d..c8f4e0a 100644 --- a/en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md +++ b/en/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -4,4 +4,4 @@ Integration testing is the testing of the integration of various components that Ideally you should organize a project so that there is not a phase at the end where integration must explicitly take place. It is far better to gradually integrate things as they are completed over the course of the project. If it is unavoidable estimate it carefully. -Next [Communication Languages](09-Communication%20Languages.md) \ No newline at end of file +Next [Communication Languages](09-Communication-Languages.md) \ No newline at end of file diff --git a/en/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/en/2-Intermediate/Personal-Skills/09-Communication-Languages.md index 052d4a6..5da26f9 100644 --- a/en/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/en/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -8,4 +8,4 @@ XML is a standard for defining new standards. It is not a solution to data inter SQL is a very powerful and rich data query and manipulation language that is not quite a programming language. It has many variations, typically quite product-dependent, which are less important than the standardized core. SQL is the *lingua franca* of relational databases. You may or may not work in any field that can benefit from an understanding of relational databases, but you should have a basic understanding of them and the syntax and meaning of SQL. -Next [Heavy Tools](10-Heavy%20Tools.md) +Next [Heavy Tools](10-Heavy-Tools.md) diff --git a/en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index c319056..63ca51d 100644 --- a/en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/en/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -11,4 +11,4 @@ To my mind right now some of the best heavy tools are: - XML parsers, and - Spreadsheets. -Next [How to analyze data](11-How%20to%20analyze%20data.md) +Next [How to analyze data](11-How-to-analyze-data.md) diff --git a/en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index 71b7930..31a514f 100644 --- a/en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/en/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -8,4 +8,4 @@ No matter at which stage you start looking at it, data is the main concern of a Therefore, since algorithms don't spin their wheels in a vacuum, you need to analyze both the data that somebody else has identified for you and the data that is necessary to write down your code. A trivial example will make the matter clearer. You are implementing a search routine for a library. According to your specifications, the user can select books by a combination of genre, author, title, publisher, printing year, and number of pages. The ultimate goal of your routine is to produce a legal SQL statement to search the back-end database. Based on these requirements, you have several choices: check each control in turn, using a "switch" statement, or several "if" ones; make an array of data controls, checking each element to see if it is set; create (or use) an abstract control object from which to inherit all your specific controls, and connect them to an event-driven engine. If your requirements include also tuning up the query performance, by making sure that the items are checked in a specific order, you may consider using a tree of components to build your SQL statement. As you can see, the choice of the algorithm depends on the data you decide to use, or to create. Such decisions can make all the difference between an efficient algorithm and a disastrous one. However, efficiency is not the only concern. You may use a dozen named variables in your code and make it as efficient as it can ever be. But such a piece of code might not be easily maintainable. Perhaps choosing an appropriate container for your variables could keep the same speed and in addition allow your colleagues to understand the code better when they look at it next year. Furthermore, choosing a well defined data structure may allow them to extend the functionality of your code without rewriting it. In the long run, your choices of data determines how long your code will survive after you are finished with it. Let me give you another example, just some more food for thought. Let's suppose that your task is to find all the words in a dictionary with more than three anagrams, where an anagram must be another word in the same dictionary. If you think of it as a computational task, you will end up with an endless effort, trying to work out all the combinations of each word and then comparing it to the other words in the list. However, if you analyze the data at hand, you'll realize that each word may be represented by a record containing the word itself and a sorted array of its letters as ID. Armed with such knowledge, finding anagrams means just sorting the list on the additional field and picking up the ones that share the same ID. The brute force algorithm may take several days to run, while the smart one is just a matter of a few seconds. Remember this example the next time you are facing an intractable problem. -Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How%20to%20Manage%20Development%20Time.md) \ No newline at end of file +Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How-to-Manage-Development-Time.md) \ No newline at end of file diff --git a/en/2-Intermediate/README.md b/en/2-Intermediate/README.md index 851df65..75294f7 100644 --- a/en/2-Intermediate/README.md +++ b/en/2-Intermediate/README.md @@ -1,29 +1,29 @@ # 2. Intermediate [//]: # (Version:1.0.0) - Personal Skills - - [How to Stay Motivated](Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [How to be Widely Trusted](Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [How to Tradeoff Time vs. Space](Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [How to Stress Test](Personal-Skills/04-How%20to%20Stress%20Test.md) - - [How to Balance Brevity and Abstraction](Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [How to Learn New Skills](Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [Learn to Type](Personal-Skills/07-Learn%20to%20Type.md) - - [How to Do Integration Testing](Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [Communication Languages](Personal-Skills/09-Communication%20Languages.md) - - [Heavy Tools](Personal-Skills/10-Heavy%20Tools.md) - - [How to analyze data](Personal-Skills/11-How%20to%20analyze%20data.md) + - [How to Stay Motivated](Personal-Skills/01-How-to-Stay-Motivated.md) + - [How to be Widely Trusted](Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [How to Tradeoff Time vs. Space](Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [How to Stress Test](Personal-Skills/04-How-to-Stress-Test.md) + - [How to Balance Brevity and Abstraction](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [How to Learn New Skills](Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Learn to Type](Personal-Skills/07-Learn-to-Type.md) + - [How to Do Integration Testing](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Communication Languages](Personal-Skills/09-Communication-Languages.md) + - [Heavy Tools](Personal-Skills/10-Heavy-Tools.md) + - [How to analyze data](Personal-Skills/11-How-to-analyze-data.md) - Team Skills - - [How to Manage Development Time](Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [How to Manage Third-Party Software Risks](Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [How to Manage Consultants](Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [How to Communicate the Right Amount](Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [How to Manage Development Time](Team-Skills/01-How-to-Manage-Development-Time.md) + - [How to Manage Third-Party Software Risks](Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [How to Manage Consultants](Team-Skills/03-How-to-Manage-Consultants.md) + - [How to Communicate the Right Amount](Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [How to Manage Software System Dependence](Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [How to Decide if Software is Too Immature](Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [How to Make a Buy vs. Build Decision](Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [How to Grow Professionally](Judgment/05-How%20to%20Grow%20zProfessionally.md) - - [How to Evaluate Interviewees](Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [How to Talk to Non-Engineers](Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [How to Manage Software System Dependence](Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [How to Decide if Software is Too Immature](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [How to Make a Buy vs. Build Decision](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [How to Grow Professionally](Judgment/05-How-to-Grow-zProfessionally.md) + - [How to Evaluate Interviewees](Judgment/06-How-to-Evaluate-Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [How to Talk to Non-Engineers](Judgment/08-How-to-Talk-to-Non-Engineers.md) diff --git a/en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index bd83b38..ac55232 100644 --- a/en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/en/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -8,4 +8,4 @@ If you miss a milestone, you should take immediate action such as informing your Make sure your plan includes time for: internal team meetings, demos, documentation, scheduled periodic activities, integration testing, dealing with outsiders, sickness, vacations, maintenance of existing products, and maintenance of the development environment. The project plan can serve as a way to give outsiders or your boss a view into what you or your team is doing. For this reason it should be short and up-to-date. -Next [How to Manage Third-Party Software Risks](02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) +Next [How to Manage Third-Party Software Risks](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index e2c77c8..378b0fd 100644 --- a/en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/en/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -8,4 +8,4 @@ If third-party software is not vapour, it is still risky, but at least it is a r Understanding the suitability of existing third party software for a particular purpose is very tribal knowledge. It is very subjective and generally resides in experts. You can save a lot of time if you can find those experts. Often times a project will depend on a third-party software system so completely that if the integration fails the project will fail. Express risks like that clearly in writing in the schedule. Try to have a contingency plan, such as another system that can be used or the ability to write the functionality yourself if the risk can't be removed early. Never let a schedule depend on vapour. -Next [How to Manage Consultants](03-How%20to%20Manage%20Consultants.md) \ No newline at end of file +Next [How to Manage Consultants](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md index bcff407..9101498 100644 --- a/en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -6,4 +6,4 @@ However, they usually cannot become part of the team in the same sense that regu If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the a project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. -Next [How to Communicate the Right Amount](04-How%20to%20Communicate%20the%20Right%20Amount.md) \ No newline at end of file +Next [How to Communicate the Right Amount](04-How-to-Communicate-the-Right-Amount.md) \ No newline at end of file diff --git a/en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md index 0d524d9..f09c809 100644 --- a/en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md +++ b/en/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -4,4 +4,4 @@ Carefully consider the cost of a meeting; it costs *its duration multiplied by t Everything possible should be done to encourage informal communication. More useful work is done during lunches with colleagues than during any other time. It is a shame that more companies do not recognize nor support this fact. -Next [How to Disagree Honestly and Get Away with It](05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) +Next [How to Disagree Honestly and Get Away with It](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md index 2f6d836..f639011 100644 --- a/en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md +++ b/en/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -8,4 +8,4 @@ Usually, this is not a problem. In some stressful circumstances and with some pe Whether the decision is reversed or not, you must remember that you will never be able to say ‘I told you so!’ since the alternate decision was fully explored. -Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) +Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md index 8dc938e..5cc8b7a 100644 --- a/en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md +++ b/en/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -8,4 +8,4 @@ The key to fighting schedule pressure is simply to turn it into time-to-market p The key insight that the estimate must make plain is that labour is an almost incompressible fluid. You can't pack more into a span of time anymore than you can pack more water into a container over and above that container's volume. In a sense, a programmer should never say ‘no’, but rather to say ‘What will you give up to get that thing you want?’ The effect of producing clear estimates will be to increase the respect for programmers. This is how other professionals behave. Programmers' hard work will be visible. Setting an unrealistic schedule will also be painfully obvious to everyone. Programmers cannot be hoodwinked. It is disrespectful and demoralizing to ask them to do something unrealistic. Extreme Programming amplifies this and builds a process around it; I hope that every reader will be lucky enough to use it. -Next [How to Understand the User](02-How%20to%20Understand%20the%20User.md) \ No newline at end of file +Next [How to Understand the User](02-How-to-Understand-the-User.md) \ No newline at end of file diff --git a/en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index ff466f1..62e4950 100644 --- a/en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/en/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -14,4 +14,4 @@ Guy Kawasaki [Rules] has emphasized the importance of *watching* what your users I believe contractors and consultants often have tremendous problems getting their clients to clarify in their own minds what they really want. If you intend to be a consultant, I suggest you choose your clients based on their clear-headedness as well as their pocketbooks. -Next [How to Get a Promotion](03-How%20to%20Get%20a%20Promotion.md) \ No newline at end of file +Next [How to Get a Promotion](03-How-to-Get-a-Promotion.md) \ No newline at end of file diff --git a/en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index 9a2cf54..b0cfbf6 100644 --- a/en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/en/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -10,4 +10,4 @@ If you feel like you are past due for a promotion, talk to your boss about it. A Most programmers probably have an exaggerated sense of their relative abilities in some ways---after all, we can't all be in the top 10%! However, I have seen some people who were seriously unappreciated. One cannot expect everyone's evaluation to perfectly match reality at all times, but I think people are generally moderately fair, with one caveat: you cannot be appreciated without visibility into your work. Sometimes, due to happenstance or personal habits, someone will not be noticed much. Working from home a lot or being geographically separated from your team and boss makes this especially difficult. -Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How%20to%20Develop%20Talent.md) +Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/en/3-Advanced/README.md b/en/3-Advanced/README.md index de5d52a..c1fcbe8 100644 --- a/en/3-Advanced/README.md +++ b/en/3-Advanced/README.md @@ -1,22 +1,22 @@ # 3. Advanced [//]: # (Version:1.0.0) - Technological Judgment - - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [How to Utilize Embedded Languages](Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [Choosing Languages](Technical-Judgment/03-Choosing%20Languages.md) + - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](Technical-Judgment/03-Choosing-Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [How to Understand the User](Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [How to Get a Promotion](Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [How to Fight Schedule Pressure](Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](Compromising-Wisely/03-How-to-Get-a-Promotion.md) - Serving Your Team - - [How to Develop Talent](Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [How to Choose What to Work On](Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [How to Divide Problems Up](Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [How to Handle Boring Tasks](Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [How to Gather Support for a Project](Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [How to Grow a System](Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [How to Communicate Well](Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [How to Deal with Managerial Myths](Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [How to Develop Talent](Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Deal with Managerial Myths](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index 30f983a..c95aa23 100644 --- a/en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/en/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -20,4 +20,4 @@ It is an odd fact that is not reflected in salaries that a good programmer is mo You can often give the stronger team members challenging, but carefully delineated, tasks. -Next [How to Choose What to Work On](02-How%20to%20Choose%20What%20to%20Work%20On.md) \ No newline at end of file +Next [How to Choose What to Work On](02-How-to-Choose-What-to-Work-On.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md index ae0d9c0..2b5cd41 100644 --- a/en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md +++ b/en/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -2,4 +2,4 @@ You balance your personal needs against the needs of the team in choosing what aspect of a project to work on. You should do what you are best at, but try to find a way to stretch yourself not by taking on more work but by exercising a new skill. Leadership and communication skills are more important than technical skills. If you are very strong, take on the hardest or riskiest task, and do it as early as possible in the project to decrease risk. -Next [How to Get the Most From Your Team-mates](03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) \ No newline at end of file +Next [How to Get the Most From Your Team-mates](03-How-to-Get-the-Most-From-Your-Teammates.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md index aac68e0..1f7edaa 100644 --- a/en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md +++ b/en/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -12,4 +12,4 @@ Ask your team, both as a group and individually, what they think would create te Praise frequently rather than lavishly. Especially praise those who disagree with you when they are praiseworthy. Praise in public and criticize in private; with one exception: sometimes growth or the correction of a fault can't be praised without drawing embarrassing attention to the original fault, so that growth should be praised in private. -Next [How to Divide Problems Up](04-How%20to%20Divide%20Problems%20Up.md) \ No newline at end of file +Next [How to Divide Problems Up](04-How-to-Divide-Problems-Up.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md index c3444c7..b8d3ef5 100644 --- a/en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md +++ b/en/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -6,4 +6,4 @@ Just as a composer considers the timbre of the instrument that will play a part There is a certain danger in this given that people will become bored as they build upon their strengths and never improve their weaknesses or learn new skills. However, specialization is a very useful productivity tool when not overused. -Next [How to Handle Boring Tasks](05-How%20to%20Handle%20Boring%20Tasks.md) \ No newline at end of file +Next [How to Handle Boring Tasks](05-How-to-Handle-Boring-Tasks.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md index a1a565c..a302dd5 100644 --- a/en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md +++ b/en/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -4,4 +4,4 @@ Sometimes it is not possible to avoid boring tasks that are critical to the succ If all else fails, apologize to those who have to do the boring task, but under no circumstances allow them to do it alone. At a minimum assign a team of two to do the work and promote healthy teamwork to get the task done. -Next [How to Gather Support for a Project](06-How%20to%20Gather%20Support%20for%20a%20Project.md) \ No newline at end of file +Next [How to Gather Support for a Project](06-How-to-Gather-Support-for-a-Project.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md index 6dc3a50..b5710ca 100644 --- a/en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md +++ b/en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -2,4 +2,4 @@ To gather support for a project, create and communicate a vision that demonstrates real value to the organization as a whole. Attempt to let others share in your vision creation. This gives them a reason to support you and gives you the benefit of their ideas. Individually recruit key supporters for your project. Wherever possible, show, don't tell. If possible, construct a prototype or a mock-up to demonstrate your ideas. A prototype is always powerful but in software it is far superior to any written description. -Next [How to Grow a System](07-How%20to%20Grow%20a%20System.md) \ No newline at end of file +Next [How to Grow a System](07-How-to-Grow-a-System.md) \ No newline at end of file diff --git a/en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md index 4d309ed..0f71189 100644 --- a/en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md +++ b/en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -20,4 +20,4 @@ A reader, Rob Hafernik, sent in this comment on this section that I can do no be To which one can only reply *Fiat lux*! -Next [How to Communicate Well](08-How%20to%20Communicate%20Well.md) +Next [How to Communicate Well](08-How-to-Communicate-Well.md) diff --git a/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index 9b88fe1..e90a818 100644 --- a/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -8,4 +8,4 @@ The programmer brings order out of chaos. One interesting way to do this is to i I haven't mastered communicating well, but what I'm currently trying is what I think of as a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. -Next [How to Tell People Things They Don't Want to Hear](09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) diff --git a/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md index c630982..3d294df 100644 --- a/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md +++ b/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md @@ -6,4 +6,4 @@ The best way to tell someone about a problem is to offer a solution at the same One of the most unpleasant and common things you will have to say is, ‘The schedule will have to slip.’ The conscientious programmer hates to say this, but must say it as early as possible. There is nothing worse than postponing action when a milestone slips, even if the only action is to inform everyone. In doing this, it is better to do it as a team, at least in spirit, if not physically. You will want your team's input on both where you stand and what can be done about it, and the team will have to face the consequences with you. -Next [How to Deal with Managerial Myths](10-How%20to%20Deal%20with%20Managerial%20Myths.md) +Next [How to Deal with Managerial Myths](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md index 8665c09..8288078 100644 --- a/en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md +++ b/en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -10,4 +10,4 @@ The word *myth* sometimes means fiction. But it has a deeper connotation. It als If you have an opportunity, you can try to explain these things, but don't feel bad if you have no success and don't damage your reputation by confronting these myths belligerently. Each of these myths reinforces the manager's idea that they have some actual control over what is going on. The truth is that managers facilitate if they are good, and impede if they are bad. -Next [How to Deal with Organizational Chaos](11-How%20to%20Deal%20with%20Organizational%20Chaos.md) \ No newline at end of file +Next [How to Deal with Organizational Chaos](11-How-to-Deal-with-Organizational-Chaos.md) \ No newline at end of file diff --git a/en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md index 46e43cc..9429114 100644 --- a/en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md +++ b/en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -6,4 +6,4 @@ The distinction is not facetious, because you may very well be asked to do what It is impossible to satisfy a vague requirement, such as ‘Build a system that will compute the most attractive hair style and colour for any person.’ If the requirement can be made more crisp, it will often become merely hard, such as ‘Build a system to compute an attractive hair style and colour for a person, allow them to preview it and make changes, and have the customer satisfaction based on the original styling be so great that we make a lot of money.’ If there is no crisp definition of success, you will not succeed. -Next [How to Utilize Embedded Languages](02-How%20to%20Utilize%20Embedded%20Languages.md) +Next [How to Utilize Embedded Languages](02-How-to-Utilize-Embedded-Languages.md) diff --git a/en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index f6138ac..3900d86 100644 --- a/en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/en/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -8,4 +8,4 @@ I and many other programmers have fallen into the trap of creating special purpo The real question to ask oneself before embedding a language is: Does this work with or against the culture of my audience? If you intended audience is exclusively non-programmers, how will it help? If your intended audience is exclusively programmers, would they prefer an applications programmers interface (API)? And what language will it be? Programmers don't want to learn a new language that is narrowly used; but if it meshes with their culture they will not have to spend much time learning it. It is a joy to create a new language. But we should not let that blind us to the needs of the user. Unless you have some truly original needs and ideas, why not use an existing language so that you can leverage the familiarity users already have with it? -Next [Choosing Languages](03-Choosing%20Languages.md) +Next [Choosing Languages](03-Choosing-Languages.md) diff --git a/en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md index 743efb3..73ec051 100644 --- a/en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md +++ b/en/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -12,4 +12,4 @@ Programming languages should really be called notations in that learning one is Some of these effects may only be psychological; but psychology matters. In the end, the costs of language tyranny outweigh any advantage that it provides. -Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) +Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/en/README.md b/en/README.md index 0d021ac..e85d448 100644 --- a/en/README.md +++ b/en/README.md @@ -21,79 +21,79 @@ Welcome to the tribe. 1. [Beginner](1-Beginner) - Personal Skills - - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - Team Skills - - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) 2. [Intermediate](2-Intermediate) - Personal Skills - - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - - [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - Team Skills - - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [Advanced](3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) diff --git a/en/SUMMARY.md b/en/SUMMARY.md index d049bd5..891aca3 100644 --- a/en/SUMMARY.md +++ b/en/SUMMARY.md @@ -2,79 +2,79 @@ [//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) * [Intermediate](2-Intermediate/README.md) * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) * [Advanced](3-Advanced/README.md) * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) diff --git a/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index 44da946..fe508d3 100644 --- a/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -18,4 +18,4 @@ �����‚��Ì��S�҂ÍA�R�[�h���ÏX�����K�v�������Ƃ��Ƀf�o�b�O�������Ă��܂��B�����͗����ł��� - �����͒T���I���p�̂悤�Ȃ��̂ł��B�������A���Ȃ��̓R�[�h���˂��h���ăW�����v�����邱�Ƃ��w�΂Ȃ����΂Ȃ��܂����B���Ȃ��͂����������ÄA���Ȃ����ꎞ�I�És�����Ƃ͂������������������͉̂����Ȃ����Ƃð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��w�΂Ȃ����΂Ȃ��܂����B���̋��|���������ê‡ï¿½ÍA�����^�[���T�����������B���̋��|�ւ̕q���Ȏn�܂��ÅA�����̗D�ꂽ�v���O���}�[�������܂��B -Next [How to Debug by Splitting the Problem Space](02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) +Next [How to Debug by Splitting the Problem Space](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/jp/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/jp/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md index e2c91f5..cb561dd 100644 --- a/jp/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md +++ b/jp/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -11,4 +11,4 @@ 真ã®åˆå¿ƒè€…ã«ã¨ã£ã¦ã€è€ƒãˆã‚‰ã‚Œã‚‹ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ã®é ˜åŸŸã¯ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰å†…ã®ã™ã¹ã¦ã®è¡Œã®ã‚ˆã†ã«è¦‹ãˆã¾ã™ã€‚実行ã•れãŸè¡Œã®ã‚¹ãƒšãƒ¼ã‚¹ã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã€ãƒ¡ãƒ¢ãƒªç®¡ç†ã€å¤–部コードã¨ã®ã‚„りã¨ã‚Šã€å±é™ºãªã‚³ãƒ¼ãƒ‰ãªã©ã€ãƒ—ログラムã®ä»–ã®æ¬¡å…ƒã‚’見るãŸã‚ã«å¾Œã§é–‹ç™ºã™ã‚‹ãƒ“ジョンã¯ã‚りã¾ã›ã‚“。å˜ç´”ãªã‚³ãƒ¼ãƒ‰ã§ã™ã€‚経験豊富ãªãƒ—ログラマーã«ã¨ã£ã¦ã€ã“れらã®ä»–ã®æ¬¡å…ƒã¯ã€é–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã™ã¹ã¦ã®äº‹æŸ„ã®ä¸å®Œå…¨ã ãŒéžå¸¸ã«æœ‰ç”¨ãªç²¾ç¥žãƒ¢ãƒ‡ãƒ«ã‚’å½¢æˆã™ã‚‹ã€‚ãã®ç²¾ç¥žãƒ¢ãƒ‡ãƒ«ã‚’æŒã¤ã“ã¨ã¯ã€è¬Žã®çœŸã‚“中を効果的ã«è¦‹ã¤ã‘ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ é–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ã®ã‚る領域をå‡ç­‰ã«ç´°åˆ†ã—ãŸã‚‰ã€ã‚¨ãƒ©ãƒ¼ãŒã©ã®é ˜åŸŸã«ã‚ã‚‹ã‹ã‚’判断ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ç§ã®ãƒ—ログラムãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å˜ä¸€ã®ä¸æ˜Žãªè¡Œã¯ã©ã‚Œã§ã™ã‹ï¼Ÿå˜ç´”ãªã‚±ãƒ¼ã‚¹ã§ã¯ã€è‡ªåˆ†ãŒå®Ÿè¡Œã—ã¦ã„るプログラムã®é€”中ã§å®Ÿè¡Œã•れるã¨åˆ¤æ–­ã—ãŸè¡Œã®å‰ã¾ãŸã¯å¾Œã«æœªçŸ¥ã®è¡ŒãŒå®Ÿè¡Œã•れã¦ã„ã¾ã™ã‹ï¼Ÿ '通常ã€ã‚¨ãƒ©ãƒ¼ãŒå˜ä¸€ã®è¡Œã«å­˜åœ¨ã™ã‚‹ã‹ã€å˜ä¸€ã®ãƒ–ロックã§ã‚ã‚‹ã‹ã‚’知るã“ã¨ã¯å¤§å¤‰å¹¸é‹ãªã“ã¨ã§ã¯ã‚りã¾ã›ã‚“。ã—ã°ã—ã°ã€ãƒŸã‚¹ãƒ†ãƒªãƒ¼ã¯ã€ã€Œé–“é•ã£ãŸãƒŽãƒ¼ãƒ‰ã‚’指ã—示ã™ãƒã‚¤ãƒ³ã‚¿ãŒãã®ã‚°ãƒ©ãƒ•ã«ã‚ã‚‹ã‹ã€ã¾ãŸã¯ãã®ã‚°ãƒ©ãƒ•内ã®å¤‰æ•°ã‚’加算ã™ã‚‹ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒæ©Ÿèƒ½ã—ã¾ã›ã‚“ã€ã¨ã„ã†å ´åˆãŒã‚りã¾ã™ã€‚ãã®å ´åˆã¯ã€åˆ†å‰²ã•れãŸè¬Žã®ã©ã®éƒ¨åˆ†ã‚’除去ã§ãã‚‹ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€ã‚°ãƒ©ãƒ•内ã®ãƒã‚¤ãƒ³ã‚¿ãŒã™ã¹ã¦æ­£ã—ã„ã“ã¨ã‚’確èªã™ã‚‹å°ã•ãªãƒ—ログラム。 -Next [How to Remove an Error](03-How%20to%20Remove%20an%20Error.md) +Next [How to Remove an Error](03-How-to-Remove-an-Error.md) diff --git a/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index fa2717d..a5eb073 100644 --- a/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -6,4 +6,4 @@ ���ɂÍA���ۂɂ�1�‚̂悤�Ɍ����邢���‚��̃o�O�������܂��B�o�O�����`���Ĉ��x�ÉC�������̂͂��Ȃ������ł��B���X�A�v���O�������������ׂ����A�܂��͌��̒��҂��Ó}�������̂��s���ł����B���Ìê‡ï¿½A���Ȃ��͎����̌o���Ɣ��f���s���A�R�[�h�Ɏ����̈Ӗ������蓖�Ă��K�v�������܂��B�������ׂ��������肵�A�R�����g�������A���炩�̕��@�ł����𖾊m�ɂ����肵�ÄA�R�[�h�����Ȃ��̈Ӗ��ɓK�������܂��B�����ÍA�Å��ÌêŠï¿½ÉŒï¿½ï¿½ÌŠÖ����������������ɂ͓�������܂��Í㋉�̃X�L���ł����A���ۂÌ��E�͂��΂��Ζʓ|�ł��B�����������ł��Ȃ��V�X�e�����C�������K�v�����邩�������܂����B -Next [How to Debug Using a Log](04-How%20to%20Debug%20Using%20a%20Log.md) \ No newline at end of file +Next [How to Debug Using a Log](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 996b0ce..9f4b74a 100644 --- a/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -9,4 +9,4 @@ ���O�Éo�͂����ʂÍA�����ƊȌ����̊Ԃ̑Ë��_�ł��B���ñ‚ª‘��������ƃ��O�������ɂȂ��A*�X�N���[���u���C���h*���������A�K�v�È��������‚��邱�Ƃ�����Ȃ��܂��B���ñ‚ªï¿½ï¿½È‚����A�K�v�È��ñ‚ªŠÜ‚܂��Ă��Ȃ��”\���������܂��B���̂��ßA�o�͂��\���”\�ɂ��邱�Ƃ͔����ɕ֗��ł��B�Ê��A���O���̊e���R�[�h�ÍA�\�[�X�R�[�h���̈ʒu�A���s�”\�Èê‡ï¿½Í‚��������s�����X���b�h�A���s�Ì��m�Ȏ����A�����ш��ʓI�ÉA�Ï��̒l�A�f�[�^�I�u�W�F�N�g�Ì��Ȃǂ��܂܂��܂��B�������̃��O�X�e�[�g�����g�ÍA�\�[�X�R�[�h�S�̂ɂ킽���ÄA���Ɏ��v�@�\�_���댯�ȃR�[�h�̎����ɎU�݂��Ă��܂��B�e�X�e�[�g�����g�Ƀ��x�������蓖�Ă邱�Ƃ��ł��A�V�X�e�������݂��̃��x�����o�͂����悤�Éݒ肳���Ă����ê‡ï¿½É‚̂݃��R�[�h���o�͂��܂��B�\�z�����������ɑÎ����邽�߂ÉA���O�X�e�[�g�����g���݌v�����K�v�������܂��B�p�t�H�[�}���X�𑪒肷���K�v�����\�����܂��B �i���I�ȃ��O�������ê‡ï¿½ÍA���O���R�[�h�Ɋւ��Ĉ������C�������s�ł����悤�ɂȂ��A�ꕔ�̃f�o�b�O�������M���O�V�X�e���ɉi�v�ɒlj��������”\���������܂��B -Next [How to Understand Performance Problems](05-How%20to%20Understand%20Performance%20Problems.md) +Next [How to Understand Performance Problems](05-How-to-Understand-Performance-Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index fd94180..9e9ca82 100644 --- a/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -8,4 +8,4 @@ ���������ꂽ���L���\�[�X�̋����ÍA�f�b�h���b�N�ƋQ���������N�����”\���������܂��B�f�b�h���b�N�ÍA�s�K�؂ȓ����⃊�\�[�X�v���̂��߂É����ł��Ȃ����Ƃł��B�Q���ƂÍA�R���|�[�l���g���K�؂ɃX�P�W���[�����邱�Ƃł͂����܂����B���ꂪ���ׂĊ��҂ł����ê‡ï¿½ÍA�v���W�F�N�g�̊J�n�����炱�̋����𑪒肷�����@�����邱�Ƃ��őP�ł��B���̋������N�����Ȃ��Ă��A���������M�������ĕ\���ł��邱�Ƃ͔����ɗL�p�ł��B -Next [How to Fix Performance Problems](06-How%20to%20Fix%20Performance%20Problems.md) +Next [How to Fix Performance Problems](06-How-to-Fix-Performance-Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index e066233..fb1c93f 100644 --- a/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -9,4 +9,4 @@ �����Ìê‡ï¿½A�p�t�H�[�}���X�̃{�g���l�b�N�ÍA���ð”‚����������ÉA���ð”‚��A4�Ŋ��邱�Ƃɂ����ċ��ð”‚������ɂȂ��܂��B���Ƃ��ÎA�����[�V���i���f�[�^�x�[�X�V�X�e���ɓK�؂ȃC���f�b�N�X���t���邱�Ƃ��ł����A�����̌������s���ÆA���Ȃ��Ƃ�20�{�x���Ȃ��Ȃǂ̃G���[���������܂����B���̗��Ƃ��ĂÍA�������[�v�ŕs�K�v��I / O�����s���A�s�v�ȃf�o�b�O�����c�������A�s�K�v�ȃ��������蓖�ÄA���Ƀp�t�H�[�}���X�Ɋւ��ĕ����������Ă��Ȃ����C�u�����₻�̑��̃T�u�V�X�e�����g�p���邱�Ƃ����������܂��B���̎��̉��P�͎��X�u���|���̉ʎ��v�ƌĂ΂��A�����‚��̗��_���ñ‹Ÿ‚��邽�߂ɊȒP�ɑI�Ԃ��Ƃ��ł��܂��B �Ԃ牺�����Ă����ʕ��������Ȃ��Ȃ��Ă����A���Ȃ��͉������܂����H���ÄA���Ȃ��͂����Æï¿½ï¿½És�����Ƃ��ł����A�܂��͖؂��`���b�v�����B�����ȉ��P�𑱂��邱�Ƃ��A�V�X�e�����T�u�V�X�e�����^���ÉÄÝŒv���邱�Ƃ��ł��܂��B �i�����ÍA�V�����݌v�����łȂ��A���i�ɂ��ꂪ�ǂ��l���ł��邱�Ƃ��[���������ǂ��v���O���}�[�Ƃ��Ă̂��Ȃ��̃X�L�����g�p�������D�̋@���ł��B�j�������A�T�u�V�X�e���ÌÄÝŒv�ɂ‚��Ę_�����O�ÉA���Ȃ��̒��Ă�������5?10�{�ǂ����邩�ǂ����ɂ������炸�A -Next [How to Optimize Loops](07-How%20to%20Optimize%20Loops.md) +Next [How to Optimize Loops](07-How-to-Optimize-Loops.md) diff --git a/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md index 9fb72aa..913b64f 100644 --- a/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md +++ b/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -11,4 +11,4 @@ - �C���f�b�N�X���Čv�Z�����̂ł͂Ȃ��A�|�C���^���ړ������B �������̊e�����̃R�X�g�ÍA�����̃V�X�e���ɂ����ĈقȂ��܂��B�����‚��̃V�X�e���łÍA�R���p�C���ƃn�[�h�E�F�A���������̂��Ƃ��s���܂��B���m�����I�ȃR�[�h�ÍA�����̃v���b�g�t�H�[���̗������K�v�Ƃ����R�[�h�������D���Ă��܂��B -Next [How to Deal with I/O Expense](08-How%20to%20Deal%20with%20IO%20Expense.md) +Next [How to Deal with I/O Expense](08-How-to-Deal-with-IO-Expense.md) diff --git a/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md index 31b812b..9294a98 100644 --- a/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md +++ b/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -10,4 +10,4 @@ I / O�����P�����ɂÍA�L���b�V���O�ƕ\� ���ɂ͉”\�ȑ�3�̋Z�@�ÍA�v�Z���f�[�^�ɋ߂Â��邱�Ƃɂ����ĎQ�Ƃ̋Ç��������P���邱�Ƃł����B���Ƃ��ÎA�f�[�^�x�[�X���炢���‚��̃f�[�^���ǂÝ��ÝA�W�v�Ȃǂ̒P���Ȃ��̂��v�Z�����ê‡ï¿½ÍA�f�[�^�x�[�X�T�[�o�[�Ŏ擾���Ă��������B�����͂��Ȃ������Ƃ��Ă����V�X�e���̎��ނɑ傫���ˑ����܂����A�����𒲂ׂ��K�v�������܂��B -Next [How to Manage Memory](09-How%20to%20Manage%20Memory.md) \ No newline at end of file +Next [How to Manage Memory](09-How-to-Manage-Memory.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md index 23c6c6c..c8a1674 100644 --- a/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md +++ b/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -12,4 +12,4 @@ �K�x�[�W�R���N�V�����ɗ����̂ł͂Ȃ��A���蓖�Ă��ꂽ�X�y�[�X�𖾎��I�ɉ��������K�v�������ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ÉA���蓖�Ă��ꂽ�������̊e�`�����N�ÉT�d�ȃC���e���W�F���X���K�p���A�K�؂ȃ^�C�~���O�Ŋ��蓖�Ă������������@���݌v�����K�v�������܂��B���\�b�h�ÍA�ì¬ï¿½ï¿½ï¿½ï¿½ï¿½I�u�W�F�N�g�̎��ނ��ƂɈقȂ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���������蓖�đ����̂��ׂĂ̎��s���A���������蓖�ĉ��������ɂ����ÄÅI�I�Ɉ��v���邱�Ƃ��m�F�����K�v�������܂��B�����͔����ɓ���̂ÅA�v���O���}�͎Q�ƃJ�E���g�Ȃǂ̊��{�I�Ȍ`���̃K�[�x�W�R���N�V�������������邾���Åς݂܂��B -Next [How to Deal with Intermittent Bugs](10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) +Next [How to Deal with Intermittent Bugs](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index 62dfaac..36ad68e 100644 --- a/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -14,4 +14,4 @@ ���̃v���O�����ÍA�����Ē��������ނ̃e�L�X�g�������ÄA���܂��������B�������̕��͂łÍA�R�[�h�͓ñŽŸ“I�ł��������A���������肵�܂��B�����ÍA�������Ԃ��e�L�X�g�̒�����2���ɔ��Ⴗ�邱�Ƃ��Ӗ����܂��B�������̃e�L�X�g�����ʓI�ɔ������Ă����ê‡ï¿½ÍA�����Ƀo�O�𔭌������͂��ł��B�ނ炪�܂������N���������Ƃ��Ȃ����ÎA�������͌����Ė����������܂����ł����B���ꂪ�N�����ÆA�ÅI�I�ɖ����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚Å‚É��T�Ԃ������܂����B -Next [How to Learn Design Skills](11-How%20to%20Learn%20Design%20Skills.md) +Next [How to Learn Design Skills](11-How-to-Learn-Design-Skills.md) diff --git a/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md index 10ef977..5635c12 100644 --- a/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md +++ b/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -6,4 +6,4 @@ �����̃X�^�C�����J�������͎̂��R�Ŗ𗧂��܂����A�f�U�C���͉Ȋw�ł͂Ȃ��|�p�ł��邱�Ƃ��Y���Ȃ��ł��������B �팱�҂ɖ{�������l�ÍA�������Ȋw�I�Ɍ����邱�ƂɊÖS�������܂��B �����̃f�U�C���X�^�C���ɂ‚��ēƒf�ɂ͂Ȃ��Ȃ��ł��������B -Next [How to Conduct Experiments](12-How%20to%20Conduct%20Experiments.md) +Next [How to Conduct Experiments](12-How-to-Conduct-Experiments.md) diff --git a/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index 9796242..5e0da0f 100644 --- a/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -20,4 +20,4 @@ ���A�̎������݌v���Ȃ����΂Ȃ��Ȃ����Ƃ��悭�����܂��B���ꂼ���̎����ÍŌ��̎����œ����ꂽ�m���Ɋ��Â��Ă��܂��B���������ÄA�”\�Ȍ��葽���Ì������ñ‹Ÿ‚����悤�Ɏ������݌v�����K�v�������܂��B�c�O�Ȃ����A�����͊e�������ȒP�ɂ��邱�Ƃɋْ����Ă��܂��B�o�����ʂ��Ă��̔��f�𔭓W�������K�v�������܂��B -Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why%20Estimation%20is%20Important.md) +Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/jp/1-Beginner/README.md b/jp/1-Beginner/README.md index 22bbed7..d07cad2 100644 --- a/jp/1-Beginner/README.md +++ b/jp/1-Beginner/README.md @@ -1,27 +1,27 @@ # 1. Beginner [//]: # (Version:1.0.0) - Personal Skills - - [Learn to Debug](Personal-Skills/01-Learn%20To%20Debug.md) - - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [How to Remove an Error](Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [How to Debug Using a Log](Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [How to Understand Performance Problems](Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [How to Fix Performance Problems](Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [How to Optimize Loops](Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [How to Deal with I/O Expense](Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [How to Manage Memory](Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [How to Deal with Intermittent Bugs](Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [How to Learn Design Skills](Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [How to Conduct Experiments](Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [Learn to Debug](Personal-Skills/01-Learn-To-Debug.md) + - [How to Debug by Splitting the Problem Space](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [How to Remove an Error](Personal-Skills/03-How-to-Remove-an-Error.md) + - [How to Debug Using a Log](Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [How to Understand Performance Problems](Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [How to Fix Performance Problems](Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [How to Optimize Loops](Personal-Skills/07-How-to-Optimize-Loops.md) + - [How to Deal with I/O Expense](Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [How to Manage Memory](Personal-Skills/09-How-to-Manage-Memory.md) + - [How to Deal with Intermittent Bugs](Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [How to Learn Design Skills](Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [How to Conduct Experiments](Personal-Skills/12-How-to-Conduct-Experiments.md) - Team Skills - - [Why Estimation is Important](Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [How to Estimate Programming Time](Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [How to Find Out Information](Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [How to Utilize People as Information Sources](Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [How to Document Wisely](Team-Skills/05-How%20to%20Document%20Wisely.md) - - [How to Work with Poor Code](Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [How to Use Source Code Control](Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [How to Unit Test](Team-Skills/08-How%20to%20Unit%20Test.md) - - [Take Breaks when Stumped](Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [How to Recognize When to Go Home](Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [How to Deal with Difficult People](Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [Why Estimation is Important](Team-Skills/01-Why-Estimation-is-Important.md) + - [How to Estimate Programming Time](Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [How to Find Out Information](Team-Skills/03-How-to-Find-Out-Information.md) + - [How to Utilize People as Information Sources](Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [How to Document Wisely](Team-Skills/05-How-to-Document-Wisely.md) + - [How to Work with Poor Code](Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [How to Use Source Code Control](Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [How to Unit Test](Team-Skills/08-How-to-Unit-Test.md) + - [Take Breaks when Stumped](Team-Skills/09-Take-Breaks-when-Stumped.md) + - [How to Recognize When to Go Home](Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [How to Deal with Difficult People](Team-Skills/11-How-to-Deal-with-Difficult-People.md) diff --git a/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md index 1a11cee..1edbada 100644 --- a/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md +++ b/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -12,4 +12,4 @@ ���̈��ʓI�ȉ��߂̖����łÍA���i���ڋq�ƌ��ς��肪�����Ӗ������̂����A�V���v�g���̂悤�ɖ����I�ɋc�_�����K�v�������܂��B�ނ炪���Ȃ��ɂǂ̂悤�Ɍ����邩�ɂ������炸�A���Ȃ��̑O�����Äl�����������B -Next [How to Estimate Programming Time](02-How%20to%20Estimate%20Programming%20Time.md) +Next [How to Estimate Programming Time](02-How-to-Estimate-Programming-Time.md) diff --git a/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md index d8c444f..1205359 100644 --- a/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md +++ b/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -18,4 +18,4 @@ * Extreme Programming *���g�p�����悤�ɉ��Ђɔ[�������邱�Ƃ��ł����ÎA���r�I�����Ȃ��̂����ς��邾���ł悭�A�����͂����Ɗy�������Y�I�ł��B -Next [How to Find Out Information](03-How%20to%20Find%20Out%20Information.md) +Next [How to Find Out Information](03-How-to-Find-Out-Information.md) diff --git a/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md index 7123c8a..ab26976 100644 --- a/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md +++ b/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -16,4 +16,4 @@ ���Ȃ����r�W�l�X���n�߂Ȃ����΂Ȃ��Ȃ����ǂ��������Ȃ��������l���邱�Ƃ��ł����悤��*�Âl�I�Ȍ������������̂ł����ÎA���̃A�C�f�B�A�ɑ΂����c�_�̃��X�g�������Ă݂Ă��������B���ꂪ���s�����ÎA�肢���l�����������B���ׂĂ̊p�x�����A�C�f�A���w�ÑA���Ȃ��Ìh�������ׂÄI���ÄA���Ȃ��ÌS�̒��ł��ׂĂ̌��ʂƒ����ƒZ�������èœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A�ˑR�Ƃ��ĞB���Ȃ܂܂ł����Ƃ��܂��B���Ȃ��Í����Ȃ��ÌS�É]���ÄA���Ȃ��̔]�ɖق��悤�Ɍ����Ȃ����΂Ȃ��܂����B���p�”\�È肢�̋Z�@�̑����ÍA���Ȃ��Ì��݈ӎ����Ӗ������蓖�Ă銮�S�Ȃ����܂��Ń����_���ȃp�^�[�����ñަ‚����̂ÅA�����̔��ӎ��I�ȗ~�]�𔻒f�����̂ɔ����ɖ𗧂��܂��B -Next [How to Utilize People as Information Sources](04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) +Next [How to Utilize People as Information Sources](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index bcd5851..d185087 100644 --- a/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -12,4 +12,4 @@ ���Ȃ��ÍA�����Ɍ����������Ƃ������ÆM�����Ƃ��͂��‚ł��A�l�X�ɔނ��̒m�b�Ɣ��f�͂̂ق��Ì������q�˂��ׂ��ł��B�����͔ނ��𕽂炰�A���Ȃ��͉������w�ÑA�������������ł��傤�B�ǂ��v���O���}�[�ÍA�Z�[���X�S���o�C�X�v���W�f���g�Ì������K�v�Ƃ��Ȃ����Ƃ͂悭�����܂����A�����܂łÉs�������Ƃ������ÎA���������߂Ă��������B���͉c�ƒS���҂̎d���������悭�������邽�߂ÉA�����‚��̃Z�[���X�R�[���𕷂��Ă݂邱�Ƃ����x���߂܂����B������30�����v���܂����ł������A���Í��K�͂ȓw�͂��̔����Ɉ��ۂ��^�����Ǝv���܂��B -Next [How to Document Wisely](05-How%20to%20Document%20Wisely.md) \ No newline at end of file +Next [How to Document Wisely](05-How-to-Document-Wisely.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index 1dc9ebb..6acb51f 100644 --- a/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -17,4 +17,4 @@ - �ǎ҂̂��Ƃ��l���ÄA�Þ��������Ɗy�ɂ����M�d�Ȏ��Ԃ����₵�Ă��������B������ - `foo`�A` bar`�A `doIt`�̂悤�ȊÖ������g�p���邱�Ƃ͂����܂����I -Next [How to Work with Poor Code](06-How%20to%20Work%20with%20Poor%20Code.md) \ No newline at end of file +Next [How to Work with Poor Code](06-How-to-Work-with-Poor-Code.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md index 2dd8e59..eb0f2af 100644 --- a/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md +++ b/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -7,4 +7,4 @@ ���Ȃ��������Ă��Ȃ��R�[�h�ɑ΂������Ƃ̂��߂̂��Ȃ��Ì����łÍA���̃R�[�h�̕i���ÍA������unk-unks�̃��X�N�ɑ΂��邠�Ȃ��̔F���ɉe�����^�����͂��ł��B �v���O���}�Ìł��D�ꂽ�c�[���̂�����2�‚ł��钊�ۉ��ƃJ�v�Z�����ÍA���ɖ����ȃR�[�h�ɓK�p�”\�ł��邱�Ƃ��o���Ă������Ƃ��d�v�ł��B�傫�ȃR�[�h�u���b�N���ÄÝŒv���邱�Ƃ͂ł��Ȃ����������܂��ñ‚ªA���钊�ۉ��ʂ��lj����邱�Ƃ��ł����ÎA�ǂ��f�U�C���̃����b�g�𓾂邱�Ƃ��ł��܂��B���ÉA�•ʂÉÄÝŒv���邱�Ƃ��ł����悤�ÉA���Ɉ������i�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��ł��܂��B -Next [How to Use Source Code Control](07-How%20to%20Use%20Source%20Code%20Control.md) \ No newline at end of file +Next [How to Use Source Code Control](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md index 49fc4de..56a8f2b 100644 --- a/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md +++ b/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -6,4 +6,4 @@ �\�[�X�R�[�h�Ǘ��V�X�e�����g�p���邽�߂̗ǂ��e�N�j�b�N�ÍA���ÉÅV�Ì��ԂɂȂ��Ă��ç”���ȓ��ɑØÝ‚��邱�Ƃł��B�����ÅI���ł��Ȃ��R�[�h�̓`�F�b�N�C�������Ă��܂����A���A�N�e�B�u�ŌĂÑo�����邱�Ƃ͂Ȃ����ßA���Ìl�ɂ͖����Í����܂����B���Ȃ��̃`�[�����C�g�������������ԈႢ���Ƃ����ƂÍd���ȃG���[�ł��B�����͂��΂��΃^�u�[�ł��B -Next [How to Unit Test](08-How%20to%20Unit%20Test.md) +Next [How to Unit Test](08-How-to-Unit-Test.md) diff --git a/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md index 68883d0..d6dbd5d 100644 --- a/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md +++ b/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -6,4 +6,4 @@ �G�N�X�g���[���E�v���O���~���O�̊J���҂ÍA���j�b�g�E�e�X�g�����ʓI�Ɏ��s���Ă��܂��B ���͔ނ��̕��͂ð„‘E�������������܂��������Ƃ͂ł��܂����B -Next [Take Breaks when Stumped](09-Take%20Breaks%20when%20Stumped.md) \ No newline at end of file +Next [Take Breaks when Stumped](09-Take-Breaks-when-Stumped.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md index d434b4e..12bdad5 100644 --- a/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md +++ b/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) �������Ƃ��ÍA�x�e�����������B �������Ƃ��Ɏ��͎��ɂ�15�����ґz���A���������ɖ߂����Ƃ��ɖ����͖��@�̂悤�ɉ����B ���Ì����͎��ɂ͓����悤�ɑ傫���Ȃ��B �ꎞ�I�ɑ��̃A�N�e�B�r�e�Bï¿½ÉØ‚��ւ��邱�Ƃ��ł��܂��B -Next [How to Recognize When to Go Home](10-How%20to%20Recognize%20When%20to%20Go%20Home.md) \ No newline at end of file +Next [How to Recognize When to Go Home](10-How-to-Recognize-When-to-Go-Home.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index 88ea70f..44a23f8 100644 --- a/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -13,4 +13,4 @@ ���͎q���������̂ÅA���X�ނ��ƈê�ɖ����߂����Ă��܂��B���ɂƂ��Äł����ʓI�ȃ��Y���ÍA�����ɒ����������߂������Ƃł��B�I�t�B�X���I�t�B�X�߂��ÅQ�邱�Ƃ��ł��܂��i���͒ʋ΂����ʋ΂܂Œʋ΂��Ă��܂��j�B�Q���B���͂����Ɋ����Ă��܂��ñ‚ªA�����͎��������ł����őP�̑Ë��Ăł��B�`���a�Ìê‡ï¿½Í‰Æ‚É‹A���B���Ȃ������E�v�l���l���Ă����Ȃ��A���Ȃ��͉ƂɋA���ׂ��ł��B�E�l�̎v�l�ð”•b�È��l�����ÆA�x�e���ƂɋA���ׂ��ł��B�d�x�Ì��_�Ù��A�y�x�̂��•a�ȊO�Ì��_�����̒����������ê‡ï¿½ÍA�N�����Ƃɔh�������������B���Ȃ����Ê��͔����̌����ł͂Ȃ����@�ŕs�����܂��͋\�ԂɗU�f���ꂽ�ê‡ï¿½ÍA�x�e�������K�v�������܂��B���J�ɑÎR���邽�߂ɃR�J�C���܂��̓A���t�F�^�~�����g�p���Ȃ��ł��������B�J�t�F�C���ð——p���Ȃ��ł��������B -Next [How to Deal with Difficult People](11-How%20to%20Deal%20with%20Difficult%20People.md) +Next [How to Deal with Difficult People](11-How-to-Deal-with-Difficult-People.md) diff --git a/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md index 4bf81ab..e58a9e6 100644 --- a/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md +++ b/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -1,15 +1,15 @@ # How to Deal with Difficult People [//]: # (Version:1.0.0) -‚¨‚»‚ç‚­A“‚¢l‚½‚¿‚ɑΈ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Å‚µ‚傤B‚ ‚È‚½Ž©g‚à“‚¢l‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚ª“¯—»‚⌠ˆÐŽÒ‚Æ‘½‚­‚ÌŠ‹“¡‚ð‚µ‚Ä‚¢‚邿‚¤‚Èl‚ÌꇂÍA‚±‚ꂪˆÓ–¡‚·‚铯—§«‚ð‘娂ɂµ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ‚ªA‚ ‚È‚½‚Ì’m«‚⌴‘¥‚ð‹]µ‚É‚·‚邱‚ƂȂ­A +�����炭�A����l�����ɑÎ����Ȃ���΂Ȃ�Ȃ��ł��傤�B���Ȃ����g�����l�������܂���B���Ȃ��������⌠�Ў҂Ƒ����̊�������Ă���悤�Èl�Ìê‡ï¿½ÍA���ꂪ�Ӗ�����Ɨ������؂ɂ��Ȃ���΂Ȃ�܂��ñ‚ªA���Ȃ��̒m���⌴����]���ɂ��邱�ƂȂ��A -‚±‚ê‚ÍA‚±‚̂悤‚È‚±‚Æ‚ðŒoŒ±‚µ‚Ä‚¨‚炸AˆÈ‘O‚Ìl¶ŒoŒ±‚ªEê‚Å–ð‚É—§‚½‚È‚¢s“®ƒpƒ^[ƒ“‚ð‹³‚¦‚Ä‚­‚ꂽƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚ÍA”ñí‚Ɏז‚‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B“‚¢l‚Í‚µ‚΂µ‚Έӌ©‚Ì•sˆê’v‚ÉŠµ‚ê‚Ä‚¨‚èA‘¼ŽÒ‚æ‚è‚à‘˦‚·‚éŽÐ‰ï“Iˆ³—͂̉e‹¿‚ðŽó‚¯‚É‚­‚¢BŒ®‚Í“K؂ɑ¸d‚·‚邱‚Ƃł·B‚±‚ê‚ÍA‚ ‚È‚½‚ª–]‚Þ‚æ‚è‚͂邩‚É‘½‚­A‚µ‚©‚µ”ނ炪–]‚Þ‚Ù‚Ç‘½‚­‚Í‚ ‚è‚Ü‚¹‚ñB +����ÍA���̂悤�Ȃ��Ƃ�o�����Ă��炸�A�ȑO�Ìl���o�����E��Ŗ�ɗ����Ȃ��s���p�^�[��������Ă��ꂽ�v���O���}�[�ɂƂ��ĂÍA���Ɏז��ɂȂ邱�Ƃ�����܂��B����l�͂��΂��Έӌ��̕s��v�Ɋ���Ă���A���҂���Ë�����Љ�I���͂̉e����󂯂ɂ����B���͓K�؂ɑ��d���邱�Ƃł��B����ÍA���Ȃ����]�ނ��͂邩�ɑ����A�������ނ炪�]�ނقǑ����͂���܂���B -ƒvƒƒOƒ‰ƒ}[‚̓`[ƒ€‚Æ‚µ‚Ĉê‚É“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB•sˆê’v‚ª¶‚¶‚½‚Æ‚«A‚»‚ê‚͉½‚Æ‚©‰ðŒˆ‚³‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢A‚»‚ê‚Í’·‚¢ŠÔ‹–°‚è‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢B“‚¢l‚Í‚µ‚΂µ‚Δñí‚ÉŒ«–¾‚ÅA‰½‚©”ñí‚É—L—p‚È‚±‚Æ‚ª‚ ‚è‚Ü‚·B“‚¢l‚ª‚»‚Ìl‚É‚æ‚Á‚Ĉø‚«‹N‚±‚³‚ê‚é•ÎŒ©‚È‚­’®‚¢‚Ä—‰ð‚·‚邱‚Æ‚ªd—v‚Å‚·BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽ¸”s‚ÍA‚µ‚΂µ‚Εsˆê’v‚̪‹’‚Å‚·‚ªAŽž‚ɂ͑傫‚È”E‘ςŎæ‚蜂­‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð—Á‚µ‚­S‚Ì‚±‚à‚Á‚½‚à‚̂ɕۂ¿A‚æ‚è‘å‚«‚È‘ˆ‚¢‚ª‹N‚±‚é‰Â”\«‚Ì‚ ‚é‰a‚ðŽó‚¯“ü‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B—‰ð‚µ‚悤‚Æ‚·‚釗“I‚ÈŠúŠÔ‚ÌŒãAŒˆ’è‚ð‰º‚·B +�v���O���}�[�̓`�[���Ƃ��Ĉê�ɓ����Ȃ���΂Ȃ�܂���B�s��v���������Ƃ��A����͉��Ƃ��������Ȃ���΂Ȃ�Ȃ��A����͒����ԋ����肷�邱�Ƃ��ł��Ȃ��B����l�͂��΂��Δ��Ɍ����ÅA�������ɗL�p�Ȃ��Ƃ�����܂��B����l�����Ìl�ɂ���Ĉ����N�������Ό��Ȃ������ė�����邱�Ƃ��d�v�ł��B�R�~���j�P�[�V�����̎��s�ÍA���΂��Εs��v�Ì����ł����A���ɂ͑傫�ȔE�ςŎ�èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��ł��܂��B���̃R�~���j�P�[�V������������S�̂��������̂ɕۂ��A���傫�ȑ������N����”\���̂���a��󂯓���Ȃ��ł��������B������悤�Ƃ��é‡ï¿½ï¿½ï¿½I�Ȋ��Ԃ̌�A���������B -‚¢‚¶‚ß‚ÁŽq‚ª‚ ‚È‚½‚É“¯ˆÓ‚µ‚È‚¢‰½‚©‚ð‚·‚é‚æ‚¤‚É‹­§‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ªƒŠ[ƒ_[‚Å‚ ‚ê‚ÎA‚ ‚È‚½‚ªˆê”Ô—Ç‚¢‚ÆŽv‚¤‚±‚Æ‚ð‚µ‚Ä‚­‚¾‚³‚¢BŒÂl“I‚È——R‚ÅŒˆ’f‚ð‰º‚³‚È‚¢‚ÅAŒˆ’è——R‚ðà–¾‚·‚途õ‚ð‚µ‚Ä‚­‚¾‚³‚¢B“‚¢l‚ƃ`[ƒ€ƒƒCƒg‚ð‚µ‚Ä‚¢‚éꇂÍAƒŠ[ƒ_[‚ÌŒˆ’è‚ÉŒÂl“I‚ȉe‹¿‚ð—^‚¦‚È‚¢‚Å‚­‚¾‚³‚¢B‚»‚ꂪ‚ ‚È‚½‚Ì“¹‚ðs‚­‚±‚Æ‚ª‚È‚¢‚È‚ç‚ÎA‚»‚ê‚͂܂Á‚½‚­S‚ð‚±‚ß‚Ä‘¼‚Ì‚â‚è•û‚Å‚·B +�����߂��q�����Ȃ��ɓ��ӂ��Ȃ����������悤�ɋ������Ȃ��ł��������B���Ȃ������[�_�[�ł���ÎA���Ȃ�����ԗǂ��Ǝv�����Ƃ���Ă��������B�Âl�I�ȗ��R���f������Ȃ��ÅA���è—�R�������é€ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ä‚��������B����l�ƃ`�[�����C�g�������ê‡ï¿½ÍA���[�_�[�̌���ɌÂl�I�ȉe����^���Ȃ��ł��������B���ꂪ���Ȃ��̓���s�����Ƃ��Ȃ��Ȃ�ÎA����͂܂������S����߂đ��̂����ł��B -“‚¢l‚͕ω»‚µA‰ü‘P‚·‚éBŽ„‚ÍŽ©•ª‚Ì–Ú‚Å‚»‚ê‚ðŒ©‚Ü‚µ‚½‚ªA‚»‚ê‚Í”ñí‚ɂ܂ê‚Å‚·B‚µ‚©‚µA’N‚àˆêŽž“I‚È•‚‚«’¾‚Ý‚ª‚ ‚è‚Ü‚·B +����l�͕ω����A���P����B���͎����̖ڂł������܂������A����͔��ɂ܂�ł��B�������A�N��ꎞ�I�ȕ������݂�����܂��B -‚·‚ׂẴvƒƒOƒ‰ƒ}[A“Á‚ÉŽw“±ŽÒ‚ª’¼–Ê‚µ‚Ä‚¢‚é‰Û‘è‚Ì1‚‚ÍA¢“ï‚Èl•¨‚ðŠ®‘S‚É]Ž–‚³‚¹‚邱‚Ƃł·B”Þ‚ç‚ÍŽdŽ–‚ðƒAƒqƒ‹‚É‚·‚éŒXŒü‚ª‚ ‚èA‘¼‚Ì‚à‚Ì‚æ‚è‚àŽó“®“I‚É’ïR‚·‚éŒXŒü‚ª‚ ‚è‚Ü‚·B. +���ׂẴv���O���}�[�A���Ɏw���҂����ʂ��Ă���ۑ��1�‚ÍA����Èl������S�É]�������邱�Ƃł��B�ނ�͎d����A�q���ɂ���X��������A���̂�̂���󓮓I�ɒ�R����X��������܂��B. Next [Intermediate skills](../../2-Intermediate) diff --git a/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md index d0ab4d0..e1851c0 100644 --- a/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md +++ b/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -10,4 +10,4 @@ Slashdot��NinjaProgrammer�����̕��΂𑗂����F >�D�ꂽ�݌v�ÍA�n���ȃR�[�h�����ɑ΂��ĉñ•œ‚��邱�Ƃ��Y���Ȃ��ł��������B�R�[�h�S�̂ŗÇD�ȃC���^�t�F�[�X�ƒ��ۊT�O�����݂����ê‡ï¿½A�ÅI�I�È��������͂͂邩�ɖ��ɂɂȂ��܂��B�C����������m�ȃR�[�h�������̂�����ê‡ï¿½ÍA�����������N���������R�A�f�U�C���ɉ��������Ȃ̂����������Ă��������B -Next [How to Manage Software Dependence](02-How%20to%20Manage%20Software%20System%20Dependence.md) +Next [How to Manage Software Dependence](02-How-to-Manage-Software-System-Dependence.md) diff --git a/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index 45baf89..6076eec 100644 --- a/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -10,4 +10,4 @@ �R���|�[�l���g�̃\�[�X�R�[�h�����‚��ƂÍA���X�N��4�{�Ɍ��������܂��B�\�[�X�R�[�h���g�p�����ÆA�����ȒP�ɕ]�����A�ȒP�Ƀf�o�b�O���A�����������‚��₷���Ȃ��A�C�����ȒP�És�����Ƃ��ł��܂��B�C���v���O�������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ê‡ï¿½ÍA�R���|�[�l���g�Ì��L�҂ÉC���v���O�������n���A�C���v���O���������������[�X�ɑg�Ý��ޕK�v�������܂��B�����ȊO�Ìê‡ï¿½ÍA�������̃o�[�W�������ێ������K�v�������܂��B -Next [How to Decide if Software is Too Immature](03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) +Next [How to Decide if Software is Too Immature](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md index 017b779..c3a5419 100644 --- a/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md +++ b/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -15,4 +15,4 @@ �������̊î€ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½l�������ÎA�N�ƉƂ̃��X�N���팸���邽�߂Ì\���Ɋm�����ꂽ�t���[�\�t�g�E�F�A�ƃI�[�v���\�[�X�\�t�g�E�F�A�̑傫�ȉ��l���ؖ������܂��B -Next [How to Make a Buy vs. Build Decision](04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) \ No newline at end of file +Next [How to Make a Buy vs. Build Decision](04-How-to-Make-a-Buy-vs-Build-Decision.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index 8a381f2..598babd 100644 --- a/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -13,4 +13,4 @@ �������̎����������������A�����炭���z�p�Æw���p��2�‚̃v���W�F�N�g�v�������������K�v�������܂��B�����ɂ����A�����R�X�g���l�������K�v�������܂��B�܂��A�����̃\�����[�V�����̒����I�ȃ����e�i���X�R�X�g���l�������K�v�������܂��B�����R�X�g�����ς����ɂÍA�\�t�g�E�F�A���w�������O�Ɋ��S�ȕ]�����s���K�v�������܂��B���Ȃ����������]�����邱�Ƃ��ł��Ȃ��ê‡ï¿½A���Ȃ��͂������w�������ۂɕs�����ȃ��X�N���z�肵�A���̓����Ì��i���w�����邱�Ƃ����肷���K�v�������܂��B�l�����Ìw�����肪�����‚������ê‡ï¿½A���ꂼ�����]�����邽�߂ɂ����‚��̃G�l���M�[�����₷�K�v�������܂��B -Next [How to Grow Professionally](05-How%20to%20Grow%20Professionally.md) +Next [How to Grow Professionally](05-How-to-Grow-Professionally.md) diff --git a/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index 23cea99..f64e9dc 100644 --- a/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -8,4 +8,4 @@ �V�����\�t�g�E�F�A�V�X�e�����w�Ԃ��Ƃ̂悤�ÈA���ׂȋZ�p�I�Ȃ��̂ł��A���Ȃ��̎d���ɂ������ð“����邱�Ƃɂ����ÄA���܂������悤�ȃn�[�h�ȎЉ��I�Ȃ��̂ł��A�V�����X�L�����w�ԕ��@���v�悷���B -Next [How to Evaluate Interviewees](06-How%20to%20Evaluate%20Interviewees.md) \ No newline at end of file +Next [How to Evaluate Interviewees](06-How-to-Evaluate-Interviewees.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md index 6e17415..7710641 100644 --- a/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md +++ b/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -12,4 +12,4 @@ ���ÉA�C���^�r���[�͔̔��̃v���Z�X�ł������܂��B�����҂ɂ��Ȃ��̉��Ђ��v���W�F�N�g�𔄂��Ă����͂��ł��B�������A���Ȃ��̓v���O���}�Ƙb���Ă����̂ÅA�^�����F�Â����悤�Ƃ��Ȃ��ł��������B�������̂����n�߂ÄA���ɗǂ����̂ŋ����d�グ�Ă��������B -Next [How to Know When to Apply Fancy Computer Science](07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) +Next [How to Know When to Apply Fancy Computer Science](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md index b6bdbb0..366e482 100644 --- a/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md +++ b/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -12,4 +12,4 @@ �킸���ɕ��G�ȃA���S���Y�����g�p�����Ǘ������A���S���Y���łÍA�V�X�e���S�̂Ńn�[�h�E�F�A�̃R�X�g���팸�������A�p�t�H�[�}���X��2�{�É��߂邱�Ƃ��ł����ÎA�ÆßŽÒ‚͂������l�����Ȃ����ƂɂȂ��܂��B���̂悤�ȃA�v���[�`���咣���錮��1�‚ÍA���Ă��ꂽ�Z�p�������炭�\���Ɍ��������Ă����̂ÅA���X�N�����ۂɂ͂��Ȃ��Ⴂ���Ƃ��������Ƃł��B�B���̖����͓����̃��X�N�ł��B�����Ńv���O���}�̌o���Ɣ��f�ÍA�������e�Ղɂ��邽�߂̔h���ȋZ�p�Ƒ������ʂ������܂��B -Next [How to Talk to Non-Engineers](08-How%20to%20Talk%20to%20Non-Engineers.md) \ No newline at end of file +Next [How to Talk to Non-Engineers](08-How-to-Talk-to-Non-Engineers.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md index 54921d7..9c9ed4b 100644 --- a/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md +++ b/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -1,19 +1,19 @@ # How to Talk to Non-Engineers [//]: # (Version:1.0.0) -“Á‚ɃGƒ“ƒWƒjƒA‚âƒvƒƒOƒ‰ƒ}[‚ÍAˆê”Ê“I‚È•¶‰»‚É‚æ‚Á‚ÄA‘¼‚ÌlX‚Æ‚ÍˆÙ‚È‚é‚Æˆê”ʂɔF‚ß‚ç‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍA‘¼‚ÌlX‚ªŽ„‚½‚¿‚ƈقȂ邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚ÍAƒGƒ“ƒWƒjƒAˆÈŠO‚Ìl‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚Æ‚é‚Æ‚«‚ɂ͗¯ˆÓ‚·‚鉿’l‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚Íí‚ÉŠÏ‹q‚ð—‰ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B +���ɃG���W�j�A��v���O���}�[�ÍA��ʓI�ȕ����ɂ���ÄA���Ìl�X�Ƃ͈قȂ�ƈ�ʂɔF�߂��Ă��܂��B����ÍA���Ìl�X���������ƈقȂ邱�Ƃ�Ӗ����܂��B����ÍA�G���W�j�A�ȊO�Ìl�ƃR�~���j�P�[�V������Ƃ�Ƃ��ɂ͗��ӂ��鉿�l������܂��B���Ȃ��Í�Ɋϋq�ð—‰ï¿½ï¿½ï¿½ï¿½K�v������܂��B -ƒmƒ“ƒGƒ“ƒWƒjƒA‚̓Xƒ}[ƒg‚Å‚·‚ªAŽ„‚½‚¿‚̂悤‚É‹Zp“I‚È‚±‚Æ‚ð쬂·‚邱‚Ƃɪ‚´‚µ‚½‚à‚̂ł͂ ‚è‚Ü‚¹‚ñBŽ„‚½‚¿‚Í•¨Ž–‚ðì‚éB”Þ‚ç‚Í•¨Ž–‚𔄂èA•¨Ž–‚ðˆµ‚¢A•¨Ž–‚𔂦‚½‚èŠÇ—‚µ‚½‚肵‚Ü‚·‚ªA•¨Ž–‚ðì‚éê–副‚ł͂ ‚è‚Ü‚¹‚ñBƒGƒ“ƒWƒjƒA‚̂悤‚Ƀ`[ƒ€‚ňê‚ÉŽdŽ–‚ð‚·‚é‚̂͂ ‚Ü‚è—Ç‚­‚ ‚è‚Ü‚¹‚ñi—áŠO‚Í‚ ‚è‚Ü‚¹‚ñjB”Þ‚ç‚̃\[ƒVƒƒƒ‹ƒXƒLƒ‹‚͈ê”Ê‚ÉAƒ`[ƒ€ˆÈŠO‚̊‹«‚̃Gƒ“ƒWƒjƒA‚Æ“¯‚¶‚©‚»‚êˆÈã‚Å‚·‚ªAe–§‚ÈA³Šm‚ȃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽí—Þ‚ÆŽ„‚½‚¿‚ªs‚¤ŽdŽ–‚ÌTd‚Èוª‰»B +�m���G���W�j�A�̓X�}�[�g�ł����A�������̂悤�ɋZ�p�I�Ȃ��Ƃ�ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚É���������̂ł͂���܂���B�������͕�������B�ނ�͕����𔄂�A����������A�����ð”‚�����Ǘ������肵�܂����A����������Ƃł͂���܂���B�G���W�j�A�̂悤�Ƀ`�[���ňê�Ɏd�������̂͂��܂�ǂ�����܂���i��O�͂���܂���j�B�ނ�̃\�[�V�����X�L���͈�ʂÉA�`�[���ȊO�̊‹��̃G���W�j�A�Ɠ���������È�ł����A�e���ÈA���m�ȃR�~���j�P�[�V�����̎�ނƎ��������s���d���ÌT�d�Èו����B -ƒGƒ“ƒWƒjƒAˆÈŠO‚Ìl‚Í‚ ‚Ü‚è‚É‚àŠì‚ñ‚Å‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚µA‚ ‚È‚½‚É‹º‚©‚³‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBŽ„‚½‚¿‚Æ“¯‚¶‚悤‚ÉA”Þ‚ç‚Í–{“–‚É‚ ‚È‚½‚ðŠì‚΂¹‚邱‚Æ‚ðˆÓ–¡‚·‚é‚à‚̂łàA‚ ‚È‚½‚Ì‚±‚Ƃ𭂵•|‚ª‚Á‚Ä‚¢‚é‚̂ł͂Ȃ­AŒ¾—t‚Ì”wŒã‚É—§‚‚±‚Æ‚à‚ ‚è‚Ü‚¹‚ñB +�G���W�j�A�ȊO�Ìl�͂��܂�ɂ���ł��邩�����܂��ñ‚µA���Ȃ��ɋ�������邩�����܂���B�������Ɠ����悤�ÉA�ނ�͖{���ɂ��Ȃ����΂��邱�Ƃ�Ӗ������̂ł�A���Ȃ��̂��Ƃ�����|�����Ă���̂ł͂Ȃ��A���t�̔w��ɗ��‚��Ƃ����܂���B -ƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚Í‹Zp“I‚È‚±‚Æ‚ð—‰ð‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA‹Zp“I‚È”»’f‚Å‚³‚¦Ž„‚½‚¿‚ɂƂÁ‚Ä‚³‚¦“‚¢‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB”Þ‚ç‚̓eƒNƒmƒƒW[‚ÌŽd‘g‚Ý‚ð—‰ð‚µ‚Ä‚¢‚Ü‚·‚ªA‚È‚º“Á’è‚̃Aƒvƒ[ƒ`‚ª3ƒ–ŒŽ‚©‚©‚é‚Ì‚©A‚»‚µ‚Ä‚à‚¤1‚‚Í3“ú‚©‚©‚é‚Ì‚©—‰ð‚Å‚«‚Ü‚¹‚ñB iŒ‹‹Ç‚̂Ƃ±‚ëAƒvƒƒOƒ‰ƒ}[‚Í‚±‚ÌŽí‚ÌŒ©Ï‚à‚è‚É‚à‹ÁˆÙ“I‚È‚±‚Æ‚ª‚ ‚è‚Ü‚·Bj‚±‚ê‚ÍA‚»‚ê‚ç‚Æ‘ŠæŒø‰Ê‚ð”­Šö‚·‚éâD‚Ì‹@‰ï‚Å‚·B +�v���O���}�[�ȊO�Ìl�͋Z�p�I�Ȃ��Ƃð—‰ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��܂����A�Z�p�I�Ȕ��f�ł����������ɂƂ��Ă���������Ƃ͂���܂���B�ނ�̓e�N�m���W�[�̎d�g�݂ð—‰ï¿½ï¿½ï¿½Ä‚��܂����A�Ȃ�����̃A�v���[�`��3����������̂��A�������1�‚�3��������̂�����ł��܂���B �i���ǂ̂Ƃ���A�v���O���}�[�͂��̎�̌��ς��ɂ���ٓI�Ȃ��Ƃ�����܂��B�j����ÍA�����Ƒ�����ʂ𔭊������D�̋@��ł��B -‚ ‚È‚½‚̃`[ƒ€‚Ƙb‚ð‚·‚é‚Æ‚«‚É‚ÍAŽvl‚¹‚¸‚ÉAˆê”Ê“I‚È‹Zp‚â“Á‚É‚ ‚È‚½‚Ì»•i‚ÉŠÖ‚·‚鑽‚­‚ÌŒoŒ±‚ð‹¤—L‚·‚邽‚ßA’Zk‚³‚ꂽŒ¾—t‚ðŽg—p‚µ‚ÄŒø‰Ê“I‚Å‚·B‚±‚Ì‘¬‹L‚ðA“Á‚É‚ ‚È‚½Ž©g‚̃`[ƒ€‚̃ƒ“ƒo[‚ª‚¢‚邯‚«‚ÉA‚»‚ÌŒoŒ±‚ð‹¤—L‚µ‚Ä‚¢‚È‚¢l‚ɂ͎g—p‚µ‚È‚¢‚悤‚É‚·‚é‚É‚ÍA‘½­‚Ì“w—Í‚ª•K—v‚Å‚·B‚±‚̃{ƒLƒƒƒuƒ‰ƒŠ[‚ÍA‚ ‚È‚½‚Æ‚»‚ê‚ð‹¤—L‚µ‚È‚¢l‚Ƃ̊Ԃɕǂðì‚èA‚³‚ç‚Ɉ«‚¢‚±‚Æ‚ÉAŽ©•ª‚ÌŽžŠÔ‚𖳑ʂɂµ‚Ü‚·B +���Ȃ��̃`�[���Ƙb�����Ƃ��ɂÍA�v�l�����ÉA��ʓI�ȋZ�p����ɂ��Ȃ��Ì��i�Ɋւ��鑽���̌o������L���邽�ßA�Z�k���ꂽ���t��g�p���Č��ʓI�ł��B���̑��L��A���ɂ��Ȃ����g�̃`�[���̃����o�[������Ƃ��ÉA���̌o������L���Ă��Ȃ��l�ɂ͎g�p���Ȃ��悤�ɂ���ɂÍA�����̓w�͂��K�v�ł��B���̃{�L���u�����[�ÍA���Ȃ��Ƃ������L���Ȃ��l�Ƃ̊Ԃɕǂ���A����Ɉ������ƂÉA�����̎��Ԃ𖳑ʂɂ��܂��B -ƒ`[ƒ€‚Å‚ÍAŠî–{“I‚È‘O’ñ‚Æ–Ú•W‚ð•p”É‚ÉÄ‹Lq‚·‚é•K—v‚͂Ȃ­A‚Ù‚Æ‚ñ‚ǂ̉ï˜b‚ÍÚׂÉÅ“_‚𓖂ĂĂ¢‚Ü‚·B•”ŠOŽÒ‚Ìê‡A‚»‚ê‚Í‹t‚ɂȂè‚Ü‚·B”Þ‚ç‚Í‚ ‚È‚½‚ª“–‘R‚Ì‚±‚Æ‚ð—‰ð‚µ‚Ä‚¢‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ç‚ð“–‘RŽó‚¯Žæ‚èA‚»‚ê‚ç‚ðŒJ‚è•Ô‚³‚È‚¢‚Ì‚ÅA–{“–‚ɑ傫‚ÈŒë‰ð‚ª‚ ‚邯‚«‚É‚¨ŒÝ‚¢‚ð—‰ð‚·‚邯‚¢‚¤ŠO•”ŽÒ‚Ìl‚¦‚ðŽ‚Á‚ÄA‰ï˜b‚ðŽc‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚È‚½‚ÍA‚±‚ÌŒë‚Á‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŒ©‚Â‚¯‚邽‚ß‚ÉAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŒë‚Á‚ÄTd‚ÉŒ©‚Ä‚¢‚邯‘z’肵‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª—‰ð‚µ‚Ä‚¢‚邱‚Æ‚ðŠm”F‚·‚邽‚߂ɂ ‚È‚½‚ªŒ¾‚Á‚Ä‚¢‚邱‚Æ‚ð—v–ñ‚µ‚½‚茾‚¢Š·‚¦‚½‚è‚·‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B•p”ɂɉ‹@‰ï‚ª‚ ‚éꇂÍAŒø‰Ê“I‚ɃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŽæ‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðq‚˂鎞ŠÔ‚ð­‚µ”ï‚₵‚Ä‚­‚¾‚³‚¢BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚É–â‘肪‚ ‚éꇂÍAŽ©•ª‚ÌŠµs‚ð•Ï‚¦‚Ä‚©‚çAŽ©•ª‚É•s–ž‚ð•å‚点‚Ä‚­‚¾‚³‚¢B +�`�[���łÍA��{�I�ȑO��ƖڕW��p�ɂÉÄ‹L�q����K�v�͂Ȃ��A�قƂ�ǂ̉�b�ÍÚׂÉÅ“_�𓖂ĂĂ��܂��B���O�҂Ìê‡ï¿½A����͋t�ɂȂ�܂��B�ނ�͂��Ȃ������R�̂��Ƃð—‰ï¿½ï¿½ï¿½Ä‚��Ȃ��������܂���B���Ȃ��͂����𓖑R�󂯎��A������J��Ԃ��Ȃ��̂ÅA�{���ɑ傫�Ȍ�������Ƃ��ɂ��݂��ð—‰ï¿½ï¿½ï¿½ï¿½Æ‚����O���҂Ìl��������ÄA��b��c�����Ƃ��ł��܂��B���Ȃ��ÍA���̌�����R�~���j�P�[�V��������‚��邽�߂ÉA�R�~���j�P�[�V���������ÄT�d�Ɍ��Ă���Ƒz�肵�Ă��������B���Ȃ���������Ă��邱�Ƃ�m�F���邽�߂ɂ��Ȃ��������Ă��邱�Ƃ�v�ñ‚µ‚��茾���������肷��悤�ɂ��Ă��������B�p�ɂɉ�@�����ê‡ï¿½ÍA���ʓI�ɃR�~���j�P�[�V���������Ă��邩�ǂ�����q�˂鎞�Ԃ������₵�Ă��������B�R�~���j�P�[�V�����ɖ�肪����ê‡ï¿½ÍA�����̊��s��ς��Ă���A�����ɕs�����点�Ă��������B -Ž„‚Í”ñƒGƒ“ƒWƒjƒA‚Ƃ̎dŽ–‚ª‘åD‚«‚Å‚·B‚»‚ê‚ÍŠw‚ÑA‹³‚¦‚é‘å‚«‚È‹@‰ï‚ð’ñ‹Ÿ‚µ‚Ü‚·B‚ ‚È‚½‚ÍAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì–¾Šm‚³‚ÌŠÏ“_‚©‚çA‚µ‚΂µ‚Ηá‚ð‹“‚°‚邱‚Æ‚ª‚Å‚«‚Ü‚·BƒGƒ“ƒWƒjƒA‚ÍA¬—‚©‚ç’˜‚ðˆø‚«o‚·‚±‚ÆA¬—‚©‚ç‚Í‚Á‚«‚肳‚¹‚邱‚ÆA‚»‚µ‚Ä‚±‚̂悤‚È”ñ‹ZpŽÒ‚ÍŽ„‚½‚¿‚ɂ‚¢‚ÄŒP—û‚ðŽó‚¯‚Ä‚¢‚Ü‚·BŽ„‚½‚¿‚Í‹Zp“I‚È”»’f‚ð‰º‚µA’Êí‚̓rƒWƒlƒXã‚Ì–â‘è‚ð—‰ð‚·‚邱‚Æ‚ª‚Å‚«‚邽‚ßA–â‘è‚ðŠÈ’P‚É‰ðŒˆ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +���͔�G���W�j�A�Ƃ̎d������D���ł��B����͊w�ÑA������傫�ȋ@���ñ‹Ÿ‚��܂��B���Ȃ��ÍA�R�~���j�P�[�V�����̖��m���̊ϓ_����A���΂��Η������邱�Ƃ��ł��܂��B�G���W�j�A�ÍA�������ç’��������o�����ÆA��������͂����肳���邱�ÆA�����Ă��̂悤�Ȕ�Z�p�҂͎������ɂ‚��ČP����󂯂Ă��܂��B�������͋Z�p�I�Ȕ��f������A�Ê�̓r�W�l�X��̖��ð—‰ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��邽�ßA����ȒP�ɉ�����邱�Ƃ��ł��܂��B -‚µ‚΂µ‚΋ZpŽÒˆÈŠO‚Ìl‚½‚¿‚ÍA‚ ‚È‚½‚Ì‹Zp“I”»’f‚ÆŠO•”ŽÒ‚ÌŒ©‰ð‚ð‘Šæ‚³‚¹‚邱‚Ƃɂæ‚Á‚Ä‚µ‚©Œ©‚¦‚È‚¢A‚æ‚è—Ç‚¢‘S‘Ì“I‚ȉðŒˆô‚ª‘¶Ý‚·‚邯‚«‚ÉA—D‚µ‚³‚©‚瓦‚ê‚â‚·‚­‚µ‚ij‚µ‚¢‚±‚Æ‚ð‚µ‚½‚¢‚Æ‚¢‚¤Šó–]‚ðŠÈ’P‚É‚·‚éƒ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð’ñˆÄ‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·BŽ„‚ÍŒÂl“I‚ɂ͋ɒ[‚ȃvƒƒOƒ‰ƒ~ƒ“ƒO‚ªD‚«‚Å‚·B‚È‚º‚È‚çA‚±‚Ì”ñŒø—¦«‚ɑΈ‚·‚é‚©‚ç‚Å‚·BŒ©Ï‚à‚è‚ð‘f‘‚­ƒAƒCƒfƒA‚ÉŒ‹‚Ñ•t‚¯‚邱‚Æ‚ÅAƒRƒXƒg‚Æ—˜‰v‚Ìŗǂ̑g‚݇‚킹‚Å‚ ‚éƒAƒCƒfƒA‚ðŠÈ’P‚ÉŒ©‚‚¯‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +���΂��΋Z�p�҈ȊO�Ìl�����ÍA���Ȃ��̋Z�p�I���f�ƊOï¿½ï¿½ï¿½Ò‚ÌŒï¿½ï¿½ï¿½ð‘Šæ‚³ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ɂ���Ă��������Ȃ��A���ǂ��S�̓I�ȉ���ô‚ª‘��݂���Ƃ��ÉA�D�������瓦��₷�����Ä��������Ƃ�������Ƃ�����]��ȒP�ɂ���\�����[�V�������Ă��邱�Ƃ�����܂��B���͌Âl�I�ɂ͋ɒ[�ȃv���O���~���O���D���ł��B�Ȃ��Ȃ�A���̔�������ɑÎ����邩��ł��B����f�����A�C�f�A�Ɍ��ѕt���邱�ƂÅA�R�X�g�Ɨ��v�Ìŗǂ̑g�Ý��킹�ł���A�C�f�A��ȒP�Ɍ��‚��邱�Ƃ��ł��܂��B Next [Advanced skills](../../3-Advanced) diff --git a/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md index dc60bcd..23ade4e 100644 --- a/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md +++ b/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -12,4 +12,4 @@ ���ÉA�”\�ł����ÎA�����̎d���̉e�����A�Âl�I�ɓ��@�t�����������̂Ƃ��đ��肵�܂��B���Ƃ��ÎA�o�O���C�������Ƃ��A�����C�������o�O�Ì����J�E���g���邱�ƂÍA���ꂪ�܂����݂��邩�������Ȃ����Ƃ͖��֌W�ł����A���̉��Љ”\�Ȍ��è¬ï¿½ï¿½ï¿½È•��@�ł��q�l�ɒñ‹Ÿ‚��܂��B�������A���ꂼ���̃o�O���K���Ȍڋq�Ɍ��ѕt���邱�ƂÍA���̌Âl�I�ȓ��@�ł��B -Next [How to be Widely Trusted](02-How%20to%20be%20Widely%20Trusted.md) +Next [How to be Widely Trusted](02-How-to-be-Widely-Trusted.md) diff --git a/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md index cee6d25..50410b2 100644 --- a/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md +++ b/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -4,4 +4,4 @@ ���Ȃ������Ȃ����Ƃ��m���Ă����ӂ������Ȃ��ł��������B �`�[�����[�g�ł͂Ȃ��l�����ɂÍA�u���̓��Ìォ���E�ɕ������Ȃ��v�Æu���������߂邱�Ƃ��ł��Ȃ��v�Ƃ̖��m�ȋ��ʂ����Ȃ����΂Ȃ��Ȃ����������܂����B -Next [How to Tradeoff Time vs. Space](03-How%20to%20Tradeoff%20Time%20vs%20Space.md) +Next [How to Tradeoff Time vs. Space](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md index ab22183..0d6a593 100644 --- a/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md +++ b/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -12,4 +12,4 @@ �����̃R���s���[�^�̃������ÍA�v���Z�b�T���ԂƂ͈قȂ��A�ǂÉՓ˂����܂Ŏg�p�����Ă��Ȃ����ßA�����Ɍ����܂��B���s�͉��œI�ł��B�풓���Ȃ����΂Ȃ��Ȃ����̃v���O�����ւ̉e�����A���蓖�Ă⊄�蓖�Ă��������鎞�ԂȂÇA���������g�p���邽�߂̉B���ꂽ�R�X�g�������܂��B�X�s�[�h���グ�邽�߂ɃX�y�[�X�����èœï¿½ï¿½ï¿½O�ÉA�������T�d�Ɍ������Ă��������B -Next [How to Stress Test](04-How%20to%20Stress%20Test.md) +Next [How to Stress Test](04-How-to-Stress-Test.md) diff --git a/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md index 2506458..c206a69 100644 --- a/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md +++ b/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -14,4 +14,4 @@ [1] "to hit" -Next [How to Balance Brevity and Abstraction](05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) \ No newline at end of file +Next [How to Balance Brevity and Abstraction](05-How-to-Balance-Brevity-and-Abstraction.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index 504b787..91db8e6 100644 --- a/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -6,4 +6,4 @@ �ÚA���ɂ����l�̖��肪�����܂��B�R�[�h���ʂ̃R���s���[�^�A�R���p�C���A�\�t�g�E�F�A�V�X�e���A�܂��̓v���b�g�t�H�[���ɈÚA���邩�A�ȒP�ɈÚA�����K�v�������܂����H�|�[�^�u���ł͂Ȃ��A�Z���ĊȒP�ɈÚA�ł����R�[�h�ÍA�����ÚA�”\�ȃR�[�h�������D���Ă����Ǝv���܂��B������DBMS�ɌŗL�̃f�[�^�x�[�X�N�G�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½N���X�ȂÇA�|�[�^�u���łȂ��R�[�h���w�肳�ꂽ�̈��Ɍ��肷�邱�Ƃ͔��r�I�ȒP�ł����A�m���ɗǂ��l���ł��B -Next [How to Learn New Skills](06-How%20to%20Learn%20New%20Skills.md) +Next [How to Learn New Skills](06-How-to-Learn-New-Skills.md) diff --git a/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md index 430fec0..056b704 100644 --- a/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md +++ b/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -10,4 +10,4 @@ ���Ȃ����l�𓱂��ê‡ï¿½A�ނ炪�����������Ă����K�؂ȋK�͂̃v���W�F�N�g�����蓖�Ă邱�Ƃɂ����ÄA�ނ炪�ǂ̂悤�Ɋw�ÑA�������邩�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½B�v���O���}�[�ɂƂ��Äł��d�v�ȃX�L���͋Z�p�I�Ȃ��̂ł͂Ȃ����Ƃ��Y���Ȃ��ł��������B���Ȃ��Ìl�X�ÉA�E�C�A�������A�R�~���j�P�[�V����������K�����@�����^���܂��傤�B -Next [Learn to Type](07-Learn%20to%20Type.md) +Next [Learn to Type](07-Learn-to-Type.md) diff --git a/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md index f08319d..21a71cf 100644 --- a/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md +++ b/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) �^�b�`�^�C�v���w�ÔB �����͒����̃X�L���ł��B�R�[�h���������Ƃ͔����ɓ���A���͂��鑬�x�����֌W�ÅA�R�[�h�Ì������Ɏ��Ԃ��������Ȃ��悤�ɂ��邱�Ƃ��ł��܂��B �������A���ԃv���O���}�[�ł����ÎA�����炭���Ȃ��̓����⑼�l�Ɏ��R�����������̂ɑ����̎��Ԃ����₷�ł��傤�B �����͂��Ȃ��̃R�~�b�g�����g�̊y�����e�X�g�ł��B ���̂悤�Ȃ��Ƃ��w�Ԃ̂͂��܂��ʔ����Ȃ����p�̎��Ԃ��������܂��B �`���ɂ����ÎAMichael Tiemann��MCC�ɂ����Ƃ��A�l�ÍA�ނ̃L�[�X�g���[�N�ɂ����Ä������ꂽ�n�����𕷂����߂Ƀh�A�̊O�ɗ��‚��ƂɂȂ��܂����B -Next [How to Do Integration Testing](08-How%20to%20Do%20Integration%20Testing.md) \ No newline at end of file +Next [How to Do Integration Testing](08-How-to-Do-Integration-Testing.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md index bf09379..bf43010 100644 --- a/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md +++ b/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -4,4 +4,4 @@ ���z�I�ɂÍA�����𖾎��I�És���K�v�������t�F�[�Y���ÅI�i�K�ɂȂ��悤�Ƀv���W�F�N�g���Ò������̂����z�I�ł��B �v���W�F�N�g�̉ߒ��Ŋ����������̂��i�K�I�ɓ������������͂邩�ɗD���Ă��܂��B ���ނ𓾂Ȃ��ê‡ï¿½Í’��Ó[�����ς����Ă��������B -Next [Communication Languages](09-Communication%20Languages.md) \ No newline at end of file +Next [Communication Languages](09-Communication-Languages.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md index 3163ec5..1d160b5 100644 --- a/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -8,4 +8,4 @@ XML�ÍV�����W�������`���邽�߂̕W���ł SQL�ÍA�v���O���~���O�����ł͂Ȃ������ɋ��͂ŖL�x�ȃf�[�^�N�G�������ё��쌾���ł��B�W�������ꂽ�R�A�������d�v�ł͂Ȃ��A�����̃o���G�[�V�����i�Ê��Í��i�ˑ��j�������܂��B SQL�ÍA�����[�V���i���f�[�^�x�[�X��* lingua franca *�ł��B�����[�V���i���E�f�[�^�x�[�X�̗����̉��b���󂯂��”\���̂��镪���Å��Ƃ����ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÎA���Ƃ��Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚����ASQL�Ì\���ƈӖ��ɂ‚��Ă͊��{�I�ɗ������Ă����K�v�������܂��B -Next [Heavy Tools](10-Heavy%20Tools.md) +Next [Heavy Tools](10-Heavy-Tools.md) diff --git a/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index 6d68e82..aaad24f 100644 --- a/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -11,4 +11,4 @@ - XML�p�[�T�[�A - �X�v���b�h�V�[�g�B -Next [How to analyze data](11-How%20to%20analyze%20data.md) +Next [How to analyze data](11-How-to-analyze-data.md) diff --git a/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index 960a748..a9a8c63 100644 --- a/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -8,4 +8,4 @@ ���������ÄA�A���S���Y���Í^���Ŏԗւ����]�����Ȃ��̂ÅA���l�����Ȃ��̂��߂ɓ��肵���f�[�^�ƃR�[�h���������߂��̂ɕK�v�ȃf�[�^�̗����ð•ªÍ‚����K�v�������܂��B�ȒP�ȗ��łÍA���肪���薾�m�ɂȂ��܂��B���C�u�����̌������[�`�����������Ă��܂��B���Ȃ��̎d�l�ɂ����ÆA���[�U�[�̓W�������A���ÒA�^�C�g���A�o�ŎÐA�����N�A�y�[�W���̑g�Ý��킹�Å��Ђ��I���ł��܂��B���[�`���ÌÅI�I�ȖڕW�ÍA�o�b�N�G���h�E�f�[�^�x�[�X���������邽�߂Ì�����SQL���ð¶ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ł��B�������̗v���Ɋ��Â��ÄA�����‚��̑I�����������܂��B�uswitch�v�X�e�[�g�����g�A�܂��͕����Ìuif�v�X�e�[�g�����g���g�p���ÄA�e�R���g���[�������ԂɃ`�F�b�N���܂��B�f�[�^�R���g���[���̔z�����ì¬ï¿½ï¿½ï¿½A�e�v�f���ݒ肳���Ă��邩�ǂ����`�F�b�N���܂��B���ׂĂ̓����̃R���g���[�����p�����钊�ۃR���g���[���I�u�W�F�N�g���ì¬ï¿½i�܂��͎g�p�j���A���������C�x���g�h���u���G���W���Éڑ����܂��B�v���ɓ����Ì����Å��ڂ��`�F�b�N�����Ă��邱�Ƃ��m�F���ÄA�N�G���̃p�t�H�[�}���X���`���[�j���O���邱�Ƃ��K�v�Èê‡ï¿½ÍA�R���|�[�l���g�̃c���[���g�p����SQL�����ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��������邱�Ƃ��ł��܂��B�����̂Ƃ����A�A���S���Y���̑I���ÍA�g�p�����A�܂��Íì¬ï¿½ï¿½ï¿½ï¿½ï¿½f�[�^�ɂ����ĈقȂ��܂��B���̂悤�Ȍ����ÍA�����I�ȃA���S���Y���ƔߎS�ȃA���S���Y���Ƃ̊Ԃ̂��ׂĂ̈Ⴂ�ð¶‚��������”\���������B�������A�������������O�����ł͂����܂����B���Ȃ��ÍA���Ȃ��̃R�[�h�ɖ��O�t���̕Ï���12�Žg�p���A�����܂łǂ��������I�ɂ��邱�Ƃ��ł��܂��B�������A���̂悤�ȃR�[�h�͊ȒP�ɕێ��ł��Ȃ����������܂����B�����炭�A�Ï��̓K�؂ȃR���e�i���I�����邱�Ƃœ����X�s�[�h���ۂ‚��Ƃ��ł��A�����ÉA���N�ɂÍA�������R�[�h�������悭�����ł����悤�ɂȂ��܂��B�����ÉA���m�ɒ��`���ꂽ�f�[�^�\�����I�����邱�ƂÅA�R�[�h�Ì����������s�킸�ɃR�[�h�̋@�\���g�����邱�Ƃ��ł��܂��B�����I�ɂÍA�f�[�^�̑I���ɂ����ÄA�R�[�h�ÌI�����ɃR�[�h�������������Ԃ����܂��܂��B�������‚̗��������Ă݂܂��傤�B�v�l�̂��߂ÌH�ו��͂������������܂��B�A�i�O�����������������̕ʂ̒P���łȂ����΂Ȃ��Ȃ��A3�ˆÈ��̃A�i�O���������Ž����̂��ׂĂ̒P�������‚��邱�Ƃ����Ȃ��̎d���ł����Ƃ��܂��傤�B�������v�Z�̎d���Æl�����Ȃ��ÎA���Ȃ��͖����̓w�͂ÉI�����A�e�P���̂��ׂĂ̑g�Ý��킹�������ÄA���������X�g�̑��̒P���Ɣ��r���悤�Ƃ��܂��B�������A�茳�̃f�[�^�ð•ªÍ‚����ÆA�P�ꂻ�̂��̂Ƃ��̕����̃\�[�g���ꂽ�z����ID�Ƃ��Ċ܂ރ��R�[�h�Ŋe�P�����\�����Ƃ��ł��܂��B���̂悤�Ȓm�����g�ɂ‚��ÄA�A�i�O���������‚��邱�ƂÍA�lj��̃t�B�[���h���X�g���\�[�g���A����ID�����L�������̂��I�Ԃ��Ƃ��Ӗ����܂��B�u���[�g�t�H�[�X�A���S���Y���ÍA���s�É��������邱�Ƃ������܂����A�X�}�[�g�ȃA���S���Y���͂ق��Ì��b�ł��B��������ɒ��ʂ��Ă��邱�̗����o���������������B -Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How%20to%20Manage%20Development%20Time.md) +Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How-to-Manage-Development-Time.md) diff --git a/jp/2-Intermediate/README.md b/jp/2-Intermediate/README.md index 851df65..75294f7 100644 --- a/jp/2-Intermediate/README.md +++ b/jp/2-Intermediate/README.md @@ -1,29 +1,29 @@ # 2. Intermediate [//]: # (Version:1.0.0) - Personal Skills - - [How to Stay Motivated](Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [How to be Widely Trusted](Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [How to Tradeoff Time vs. Space](Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [How to Stress Test](Personal-Skills/04-How%20to%20Stress%20Test.md) - - [How to Balance Brevity and Abstraction](Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [How to Learn New Skills](Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [Learn to Type](Personal-Skills/07-Learn%20to%20Type.md) - - [How to Do Integration Testing](Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [Communication Languages](Personal-Skills/09-Communication%20Languages.md) - - [Heavy Tools](Personal-Skills/10-Heavy%20Tools.md) - - [How to analyze data](Personal-Skills/11-How%20to%20analyze%20data.md) + - [How to Stay Motivated](Personal-Skills/01-How-to-Stay-Motivated.md) + - [How to be Widely Trusted](Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [How to Tradeoff Time vs. Space](Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [How to Stress Test](Personal-Skills/04-How-to-Stress-Test.md) + - [How to Balance Brevity and Abstraction](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [How to Learn New Skills](Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Learn to Type](Personal-Skills/07-Learn-to-Type.md) + - [How to Do Integration Testing](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Communication Languages](Personal-Skills/09-Communication-Languages.md) + - [Heavy Tools](Personal-Skills/10-Heavy-Tools.md) + - [How to analyze data](Personal-Skills/11-How-to-analyze-data.md) - Team Skills - - [How to Manage Development Time](Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [How to Manage Third-Party Software Risks](Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [How to Manage Consultants](Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [How to Communicate the Right Amount](Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [How to Manage Development Time](Team-Skills/01-How-to-Manage-Development-Time.md) + - [How to Manage Third-Party Software Risks](Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [How to Manage Consultants](Team-Skills/03-How-to-Manage-Consultants.md) + - [How to Communicate the Right Amount](Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [How to Disagree Honestly and Get Away with It](Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [How to Manage Software System Dependence](Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [How to Decide if Software is Too Immature](Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [How to Make a Buy vs. Build Decision](Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [How to Grow Professionally](Judgment/05-How%20to%20Grow%20zProfessionally.md) - - [How to Evaluate Interviewees](Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [How to Talk to Non-Engineers](Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [How to Manage Software System Dependence](Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [How to Decide if Software is Too Immature](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [How to Make a Buy vs. Build Decision](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [How to Grow Professionally](Judgment/05-How-to-Grow-zProfessionally.md) + - [How to Evaluate Interviewees](Judgment/06-How-to-Evaluate-Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [How to Talk to Non-Engineers](Judgment/08-How-to-Talk-to-Non-Engineers.md) diff --git a/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index bed0a32..a9215ea 100644 --- a/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -8,4 +8,4 @@ �����`�[���~�[�e�B���O�A�f���A�������A�\�肳�ꂽ�����I�Ȋ����A�����e�X�g�A�O���҂Ƃ̑Î��A�a�C�A�x�ÉA�������i�̃����e�i���X�A�J���‹��̃����e�i���X�ȂÇA�v���Ɏ��Ԃ��܂܂��Ă��邱�Ƃ��m�F�����������B�v���W�F�N�g�v���ÍA���Ȃ��₠�Ȃ��̃`�[���������Ă��邱�Ƃ��O���҂����i�Ɍ��������@�Ƃ��Ė𗧂��܂��B���̂��ßA�Z���ԂÅÅV�̂��̂ɂ����K�v�������܂��B -Next [How to Manage Third-Party Software Risks](02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) +Next [How to Manage Third-Party Software Risks](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index 5d6ba67..ba849cd 100644 --- a/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -8,4 +8,4 @@ �����̖ړI�̂��߂̊����̃T�[�h�p�[�e�B�\�t�g�E�F�A�̓K�����ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ÍA�����ɕ����I�Ȓm���ł��B�����͔����Ɏ��ϓI�ÅA���ʂÉ����Ƃɋ��Z���Ă��܂��B�������Ì����Ƃ����‚��邱�Ƃ��ł����ÎA�����̎��Ԃ��ߖ��ł��܂��B�����Ìê‡ï¿½A�v���W�F�N�g�̓T�[�h�p�[�e�B�̃\�t�g�E�F�A�V�X�e���Ɉˑ����邽�ßA���������s�����ƃv���W�F�N�g�͎��s���܂��B���̂悤�ȃ��X�N���X�P�W���[���Å��ʂŖ��m�ɕ\�������������B���X�N�ð‘Šï¿½ï¿½É����ł��Ȃ��ê‡ï¿½ÍA�g�p�”\�ȕʂ̃V�X�e�����@�\�������Åì¬ï¿½ï¿½ï¿½ï¿½ï¿½È‚ÇA�ً}���Ή��v���𗧂ĂĂ��������B�X�P�W���[���Í��C�Ɉˑ����Ȃ��悤�ɂ��Ă��������B -Next [How to Manage Consultants](03-How%20to%20Manage%20Consultants.md) \ No newline at end of file +Next [How to Manage Consultants](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md index 01c983b..bc39125 100644 --- a/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md +++ b/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -6,4 +6,4 @@ �R���T���^���g���R�[�h�������‚����Ȃ��A�������T�d�Ɍ������Ȃ����΂Ȃ��܂����B���r���[�����Ă��Ȃ��傫�ȃR�[�h�u���b�N�̃��X�N�𔺂��v���W�F�N�g�ÌŌ��ɂ͓��B�ł��܂����B�����͎��ۂɂ͂��ׂẴ`�[�������o�[�ɓ��Ă͂܂��܂����A�Ê��͂��Ȃ��ɋ߂��`�[�������o�[�̒m���������܂��B -Next [How to Communicate the Right Amount](04-How%20to%20Communicate%20the%20Right%20Amount.md) \ No newline at end of file +Next [How to Communicate the Right Amount](04-How-to-Communicate-the-Right-Amount.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md index c4dba8a..636febc 100644 --- a/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md +++ b/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -4,4 +4,4 @@ �������̃R�~���j�P�[�V�����ð‘£i���邽�߂ɂÍA�”\�Ȍ����̂��Ƃ��s�����Ȃ����΂Ȃ��Ȃ��B �����֗��È��ƂÍA���̎��Ԃ����������Ƃ̃����`���És�����܂��B �����̊��Ƃ����̎������F���������T�|�[�g���Ă��Ȃ����Ƃ͎c�O�ł��B -Next [How to Disagree Honestly and Get Away with It](05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) +Next [How to Disagree Honestly and Get Away with It](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md index 14c9013..afe61b8 100644 --- a/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md +++ b/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -8,4 +8,4 @@ �ӎv���肪�t�]���Ă��邩�ǂ����ɂ������炸�A���֌��肪���S�ɒ������ꂽ�̂ÅA���Ȃ��Íu���Ȃ��ɂ����������v�ƌ������Ƃ͌����Ăł��Ȃ����Ƃ��Y���Ȃ��ł��������B -Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) +Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md index e9dee43..e2627c9 100644 --- a/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md +++ b/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -8,4 +8,4 @@ ���ς��肪�����ɂ��Ȃ����΂Ȃ��Ȃ��d�v�ȓ��@�ÍA�J���͂قڔñˆ³k���̉t�̂ł����Ƃ������Ƃł��B�R���e�i�̗e�ψÈ��̃R���e�i�ɂ����Ƒ����Ì��������邱�Ƃ��ł��܂��B�����Ӗ��łÍA�v���O���}�[�Íu���Îv�ƌ����Ă͂����܂��ñ‚ªA�u�X�q�͂��Ȃ����]�ނ��Ƃ����߂��ł��傤���H�v�Ƃ������m�Ȍ��ς������o���̂ÍA�v���O���}�[�ɂƂ��Ă̌h�ӂ����߂邱�ƂɂȂ��܂��B�����͑��Ì����ƂÌs���ł��B�v���O���}�[�̘J�͂��������ł��傤�B�ñŒ»Žï¿½ï¿½I�ȃX�P�W���[�����ݒ肷�邱�ƂÍA�N�ɂƂ��Ă��Ɋ����邱�Ƃł��B�v���O���}�͂��ñ‚´‚肷�邱�Ƃ͂ł��܂����B�ނ��ɔñŒ»Žï¿½ï¿½I�Ȃ��Ƃ������͖̂����Ȃ��Ƃł��B Extreme Programming�͂����ð‘•����A���̎����Ƀv���Z�X���\�z���܂��B���ÍA���ׂĂ̓ǎ҂��������g�p�����̂É\���ȂقÇK�^�ɂȂ邱�Ƃ������Ă��܂��B -Next [How to Understand the User](02-How%20to%20Understand%20the%20User.md) \ No newline at end of file +Next [How to Understand the User](02-How-to-Understand-the-User.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index 4652ebf..7d09c19 100644 --- a/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -14,4 +14,4 @@ Guy Kawasaki [Rules]�ÍA���[�U�[���������Ƃɉ� ���Í����Ǝ҂��R���T���^���g���A���΂��Δނ炪�{���ɖ]�ނ��̂������ÌS�̒��Ŗ��m�ɂ����悤�Ɍڋq�ɑi�����傫�Ȗ����������Ă����ÆM���Ă��܂��B���Ȃ����R���T���^���g�ɂȂ낤�Ǝv���Ă����Ȃ��A���͂��Ȃ��̃N���C�A���g���A�ނ��̖��m�ȓ��̒������łȂ��A�ނ��̎蒠�Ɋ��Â��đI�Ԃ��Ƃ������߂��܂��B -Next [How to Get a Promotion](03-How%20to%20Get%20a%20Promotion.md) \ No newline at end of file +Next [How to Get a Promotion](03-How-to-Get-a-Promotion.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index 83edf95..efa22ad 100644 --- a/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -10,4 +10,4 @@ �قƂ��ǂ̃v���O���}�ÍA�����炭���炩�̌`�ő��ΓI�Ȕ\�͂̌֒����ꂽ���o�������Ă����ł��傤�B���ǂ̂Ƃ����A���ׂĂ��g�b�v10���ɓ����킯�ł͂����܂����I�������A���Í^���ɕ]�������Ă��Ȃ��l�X�����Ă��܂����B�݂��Ȃ̕]�������Ɍ����Ɋ��S�Ƀ}�b�`�����Ƃ͎v���Ă��܂��ñ‚ªA���Íl�X���T���ēK�x�Ɍ����ł����Æl���Ă��܂��B���Ȃ��̎d���ɖڂ������邱�ƂȂ��]�����邱�Ƃ͂ł��܂����B�Ƃ��ɂÍA���R���Âl�I�ÈK���̂��߂ÉA�N���ɋC�t�����Ȃ����Ƃ������܂��B����瑽���̎d�����������A�`�[�������i�����n���I�ɗ����Ă����ÆA�����͓��É����ɂȂ��܂��B -Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How%20to%20Develop%20Talent.md) +Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/jp/3-Advanced/README.md b/jp/3-Advanced/README.md index de5d52a..c1fcbe8 100644 --- a/jp/3-Advanced/README.md +++ b/jp/3-Advanced/README.md @@ -1,22 +1,22 @@ # 3. Advanced [//]: # (Version:1.0.0) - Technological Judgment - - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [How to Utilize Embedded Languages](Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [Choosing Languages](Technical-Judgment/03-Choosing%20Languages.md) + - [How to Tell the Hard From the Impossible](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](Technical-Judgment/03-Choosing-Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [How to Understand the User](Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [How to Get a Promotion](Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [How to Fight Schedule Pressure](Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](Compromising-Wisely/03-How-to-Get-a-Promotion.md) - Serving Your Team - - [How to Develop Talent](Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [How to Choose What to Work On](Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [How to Divide Problems Up](Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [How to Handle Boring Tasks](Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [How to Gather Support for a Project](Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [How to Grow a System](Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [How to Communicate Well](Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [How to Deal with Managerial Myths](Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [How to Develop Talent](Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Deal with Managerial Myths](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index b9fde68..4b9fd1a 100644 --- a/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -20,4 +20,4 @@ Nietschze�͔ނ�[Stronger]�ƌ������Ƃ��Ɍ֒����� ���Ȃ��͂��΂��ÎA���苭���`�[�������o�[�ɒ����I�ł����A���Ó[���`���ꂽ�^�X�N���^���邱�Ƃ��ł��܂��B -Next [How to Choose What to Work On](02-How%20to%20Choose%20What%20to%20Work%20On.md) \ No newline at end of file +Next [How to Choose What to Work On](02-How-to-Choose-What-to-Work-On.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md index 4d047b3..5fce749 100644 --- a/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md +++ b/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -2,4 +2,4 @@ �����̃j�[�Y�ƃ`�[���̃j�[�Y�Ƃ̃o�����X�������ÄA�ǂ̂悤�ȑ��ʂ̃v���W�F�N�g�����Ƃ��邩���I�����܂��B ���Ȃ��͎��������ÔD���Ȃ��Ƃ����Ȃ����΂Ȃ��܂��ñ‚ªA���葽���̎d���������̂ł͂Ȃ��A�V�����X�L�����s�g���������g���L�΂����@�����‚��悤�Ƃ��܂��B ���[�_�[�V�b�v�ƃR�~���j�P�[�V�����X�L���͋Z�p�X�L���������d�v�ł��B ���Ȃ��������ɋ������ÎA�v���W�F�N�g�łÍA���X�N�����炷���߂ÉA�ł��邾�������A�ł������ÈA�܂��̓��X�N�Ì����^�X�N�����s�����������B -Next [How to Get the Most From Your Team-mates](03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) \ No newline at end of file +Next [How to Get the Most From Your Team-mates](03-How-to-Get-the-Most-From-Your-Teammates.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md index 401ba30..6d0a7bf 100644 --- a/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md +++ b/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -12,4 +12,4 @@ �ґ��ł͂Ȃ��p�ɂÉÜŽ^�����������B���ɂ��Ȃ����܎^�����鎞�ɂ��Ȃ��ɓ��ӂ��Ȃ��l���܎^���܂��B���Ɏ^�����A���I�ɔᔻ�����B 1�‚̗��O�������ÄF���ɂÍ����⎸�s�Ì����͌��̌��ׂɒp�����������ӂ��������ƂȂ��܎^���邱�Ƃ��ł��Ȃ��̂ÅA�����̓v���C�x�[�g�ÅÜŽ^�������ׂ��ł��B -Next [How to Divide Problems Up](04-How%20to%20Divide%20Problems%20Up.md) \ No newline at end of file +Next [How to Divide Problems Up](04-How-to-Divide-Problems-Up.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md index 9761a94..ab4caee 100644 --- a/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md +++ b/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -6,4 +6,4 @@ �����ÍA�l�X�������̋��݂��\�z���A���_�����P�������A�V�����X�L�����w�ñ‚¾‚肵�đދ������悤�ɂȂ��Ƃ����A�������x�̊댯�������܂��B�������A���å«ï¿½ÍA�ߓx�Ɏg�p�����Ȃ��ê‡ï¿½É‚͔����ɗL�p�È��Y���c�[���ł��B -Next [How to Handle Boring Tasks](05-How%20to%20Handle%20Boring%20Tasks.md) \ No newline at end of file +Next [How to Handle Boring Tasks](05-How-to-Handle-Boring-Tasks.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md index 68476b7..c2dd72b 100644 --- a/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md +++ b/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -4,4 +4,4 @@ ���̂��ׂĂ����s�����ê‡ï¿½ÍA�ދ��È��Ƃ����Ȃ����΂Ȃ��Ȃ��l�ɂ͎Ó߂��܂����A�����Ĉ��l�Ås�����Ƃ͂ł��܂����B �Œ��ł�2�l�̃`�[�������蓖�ĂÄA���Ƃ��s���A���S�ȃ`�[�����[�N�ð‘£i���ă^�X�N�����������܂��B -Next [How to Gather Support for a Project](06-How%20to%20Gather%20Support%20for%20a%20Project.md) \ No newline at end of file +Next [How to Gather Support for a Project](06-How-to-Gather-Support-for-a-Project.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md index 72b88b1..fbf089e 100644 --- a/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md +++ b/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -2,4 +2,4 @@ �v���W�F�N�g�̃T�|�[�g���W�߂��ɂÍA�g�D�S�̂É^�̉��l�������r�W�������ì¬ï¿½ï¿½ï¿½Ä“`���܂��B ���Ȃ��̃r�W�����ì¬ï¿½É‘��Ìl���������L���悤�Ƃ����B �����͔ނ��ɂ��Ȃ����T�|�[�g���é—�R���^���A���Ȃ��̃A�C�f�A�̉��b���^���܂��B �v���W�F�N�g�̎��v�T�|�[�^�[���•ʂɕ��W���܂��B �”\�Ȍ����A�������������B �”\�ł����ÎA�����i�⃂�b�N�A�b�v�������ăA�C�f�A�𔭊������Ă��������B �v���g�^�C�v�Í��ɋ��͂ł����A�\�t�g�E�F�A�łÍ����������͂邩�ɗD���Ă��܂��B -Next [How to Grow a System](07-How%20to%20Grow%20a%20System.md) \ No newline at end of file +Next [How to Grow a System](07-How-to-Grow-a-System.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md index 3d6ce4e..2b17aaa 100644 --- a/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md +++ b/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -20,4 +20,4 @@ �ǂ����ɕÔM���邱�Ƃ��ł��܂����H* Fiat lux *�I -Next [How to Communicate Well](08-How%20to%20Communicate%20Well.md) +Next [How to Communicate Well](08-How-to-Communicate-Well.md) diff --git a/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index 9e44503..ee7ede6 100644 --- a/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -8,4 +8,4 @@ ���͂��܂��R�~���j�P�[�V�������}�X�^�[�ł��܂����ł������A�������ݎ����g���ł����̂ÍA����4�‚̃A�v���[�`���Ƃ��Ă����Ǝv���܂��B�����̃A�C�f�A�������É����������A���͌����Řb���A���Íi���ۂ̎��ɂ��d�q�I�ɂ��j�f���������ÄA���̃v���Z�X���h�������J���Ԃ��B���͂��̎��̓���R�~���j�P�[�V�����łÍA���x�����������\���Éh�������Ȃ��Ǝv���܂��B���Ȃ��̃A�C�f�A�������Ɏ󂯓��������Ȃ��Ȃ��A���Ȃ��͗��_���Ă͂����܂����B�ނ��Ì����ɃG�l���M�[�𓊓������ê‡ï¿½A�N�����Ȃ��̂��߂ɂ������n�ゾ�Ƃ͎v���Ȃ��ł��傤�B -Next [How to Tell People Things They Don't Want to Hear](09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) diff --git a/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md index 6c550ee..9ce4532 100644 --- a/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md +++ b/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md @@ -6,4 +6,4 @@ ���Ȃ��������Ȃ����΂Ȃ��Ȃ��ł��s�����ň��ʓI�Ȃ��Ƃ̈��‚ÍA�ނ̃X�P�W���[�����Ԉ����Ă��Ȃ����΂Ȃ��Ȃ��Ƃ������Ƃł��B�ÇS�I�ȃv���O���}�[�ÍA�����������̂͌��ł����A�ł��邾�����������Ȃ����΂Ȃ��܂����B�B���̃A�N�V�������N�ɂł��m�点�邱�Ƃł����Ă��A�}�C���X�g�[�����������Ƃ��ɃA�N�V���������������������������Ƃ͂����܂����B�������s���ɂÍA����??�I�ɂłȂ��Ă��A���Ȃ��Ƃ����_�I�ɂ̓`�[���Ƃ��Äs�������ǂ��ł��B���Ȃ��������Ă����êŠï¿½Æ‚����ɂ‚��ĉ����ł��邩�̗����ł��Ȃ��̃`�[���̓��͂��]�ނł��傤�B�`�[���͂��Ȃ��ɉe�����^���Ȃ����΂Ȃ��܂����B -Next [How to Deal with Managerial Myths](10-How%20to%20Deal%20with%20Managerial%20Myths.md) +Next [How to Deal with Managerial Myths](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md index e333daa..5eae1b0 100644 --- a/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md +++ b/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -10,4 +10,4 @@ �@������ÎA�������̂��Ƃ��������邱�Ƃ͂ł��܂����A�������Ă��Ȃ��ƈ����C�����ɂȂ炸�A�������Ì_�b�ɑÎR���Ă��Ȃ��̕]���𑹂Ȃ����Ƃ͂����܂����B�������Ì_�b�̂��ꂼ���ÍA�����N�����Ă��邩�����ۂɎx�z�������}�l�[�W���[�Ìl�������߂��B�^���ÍA�}�l�[�W���[���ނ炪�ǂ����Ηe�ՂɂȂ��A�ނ炪�����ê‡ï¿½É‚͂������W���邱�Ƃł��B -Next [How to Deal with Organizational Chaos](11-How%20to%20Deal%20with%20Organizational%20Chaos.md) \ No newline at end of file +Next [How to Deal with Organizational Chaos](11-How-to-Deal-with-Organizational-Chaos.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md index 5f6967b..47c458e 100644 --- a/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md +++ b/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -1,11 +1,11 @@ # How to Deal with Organizational Chaos -ƒŒƒCƒIƒtAƒoƒCƒAƒEƒgAiposA”­‰ÎAV‚µ‚¢Ì—p‚Ȃǂ̂悤‚ÈA‘gD“I¬—‚Ì’Z‚¢ŠúŠÔ‚ª‚µ‚΂µ‚΂ ‚è‚Ü‚·B‚±‚ê‚ç‚ÍŠF‚ɂƂÁ‚Ä•sˆÀ‚Å‚·‚ªAŒÂl“I‚ÈŽ©‘¸S‚ª—§Ø‚³‚ê‚Ä‚¢‚é‚̂ł͂Ȃ­A”\—Í‚ÅÝ—§‚³‚ꂽƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͂¨‚»‚ç‚­­‚µ•sˆÀ‚Å‚·B‘gD‚̬—‚ÍAƒvƒƒOƒ‰ƒ}‚ɂƂÁ‚Ä–‚–@‚̗͂𔭊ö‚·‚éâD‚Ì‹@‰ï‚Å‚·B‚»‚ê‚Í[‚¢•”‘°‚̔閧‚Å‚ ‚邽‚ßA‚±‚ê‚ðÅŒã‚ɕۑ¶‚µ‚Ü‚µ‚½B‚ ‚È‚½‚ªƒvƒƒOƒ‰ƒ}[‚łȂ¯‚ê‚ÎA¡“Ç‚ñ‚Å‚¨‚¢‚Ä‚­‚¾‚³‚¢B +���C�I�t�A�o�C�A�E�g�Aipos�A���ÎA�V�����̗p�Ȃǂ̂悤�ÈA�g�D�I�����̒Z�����Ԃ����΂��΂���܂��B�����͊F�ɂƂ��ĕs���ł����A�Âl�I�Ȏ����S�����؂���Ă���̂ł͂Ȃ��A�\�͂Åݗ����ꂽ�v���O���}�[�ɂƂ��Ă͂����炭�����s���ł��B�g�D�Ì����ÍA�v���O���}�ɂƂ��Ė��@�̗͂𔭊������D�̋@��ł��B����Í[�������̔閧�ł��邽�ßA�����Ō�ɕۑ����܂����B���Ȃ����v���O���}�[�łȂ���ÎA���ǂ�ł����Ă��������B ->ƒGƒ“ƒWƒjƒA‚Í‘n‘¢—͂Ǝ‘±—Í‚ðŽ‚Á‚Ä‚¢‚Ü‚·B +>�G���W�j�A�͑n���͂Ǝ����͂�����Ă��܂��B -ƒmƒ“ƒGƒ“ƒWƒjƒA‚͈ê”ʂ̃\ƒtƒgƒEƒFƒA‰ïŽÐ‚Å‚ÍAƒGƒ“ƒWƒjƒA‚ªˆê”Ê“I‚É»•i‚ð”Ì”„‚µ‚½‚èAƒrƒWƒlƒX‚ðŒø‰Ê“I‚ÉŠÇ—‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚ßAƒGƒ“ƒWƒjƒA‚È‚µ‚ʼn½‚à쬂µ‚Ĉێ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚±‚Ì”\—Í‚ÍAˆêŽž“I‚È‘gD‘›—‚ÉŠÖ˜A‚·‚é‚Ù‚Æ‚ñ‚Ç‚·‚ׂĂ̖â‘è‚ɑ΂µ‚Ä—§Ø‚·‚é‚à‚̂ł·B‚ ‚È‚½‚ª‚»‚ê‚ðŽ‚Á‚Ä‚¢‚邯‚«A¬—‚ðŠ®‘S‚É–³Ž‹‚µ‚ÄA‰½‚à‹N‚±‚Á‚Ä‚¢‚È‚¢‚©‚̂悤‚É‘±‚¯‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚Í‚à‚¿‚ë‚ñA‰ðŒÙ‚³‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚à‚µ‹N‚±‚ê‚ÎA‚¨‚»‚ç‚­–‚—͂̂½‚ß‚ÉV‚µ‚¢ŽdŽ–‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B‚æ‚èˆê”Ê“I‚É‚ÍA–‚–@‚Ì—Í‚ðŽ‚Á‚Ä‚¢‚È‚¢ƒXƒgƒŒƒX‚Ì‘½‚¢l‚ª‚ ‚È‚½‚Ì—§•û‘̂ɓü‚Á‚ÄA‚ ‚È‚½‚ɉ½‚©‚΂©‚°‚½‚±‚Æ‚ðŒ¾‚¤‚悤‚ɂȂè‚Ü‚·B‚ ‚È‚½‚ª–{“–‚É‚»‚ꂪ”nŽ­‚¾‚ÆŠmM‚µ‚Ä‚¢‚é‚È‚ç‚ÎA”ނ炪‹Ž‚é‚܂Ŕ÷΂ñ‚Åèõ‚­‚Ì‚ªˆê”Ô‚Å‚·B +�m���G���W�j�A�͈�ʂ̃\�t�g�E�F�A��ЂłÍA�G���W�j�A����ʓI�É��i��̔�������A�r�W�l�X����ʓI�ɊǗ����邱�Ƃ��ł��Ȃ����ßA�G���W�j�A�Ȃ��ʼn���ì¬ï¿½ï¿½ï¿½ÄˆÛŽï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚͂ł��܂���B���̔\�͂ÍA�ꎞ�I�ȑg�D�����Ɋ֘A����قƂ�ǂ��ׂĂ̖��ɑ΂��ė��؂����̂ł��B���Ȃ������������Ă���Ƃ��A��������S�ɖ������ÄA����N�����Ă��Ȃ����̂悤�ɑ�����ׂ��ł��B���Ȃ��͂�����A��ق���邩�����܂��ñ‚ªA����N����ÎA�����炭���͂̂��߂ÉV�����d���𓾂邱�Ƃ��ł��܂��B����ʓI�ɂÍA���@�̗͂�����Ă��Ȃ��X�g���X�̑����l�����Ȃ��̗����̂ɓ����ÄA���Ȃ��ɉ����΂��������Ƃ�����悤�ɂȂ�܂��B���Ȃ����{���ɂ��ꂪ�n�����Ɗm�M���Ă���Ȃ�ÎA�ނ炪����܂Ŕ��΂�������̂���Ԃł��B -‚ ‚È‚½‚ªƒŠ[ƒ_[‚Å‚ ‚ê‚ÎA“¯‚¶‚±‚Ƃ𑼂Ìl‚ª˜b‚·‚±‚Ƃ𖳎‹‚·‚邿‚¤‚ÉlX‚É“`‚¦‚Ü‚·B‚±‚Ìs“®‘[’u‚ÍAŒÂl“I‚É‚ÍÅ‚‚Ì‚à‚̂ł ‚èA‚ ‚È‚½‚̉ïŽÐ‚âƒvƒƒWƒFƒNƒg‚ÉÅ“K‚Å‚·B +���Ȃ������[�_�[�ł���ÎA�������Ƃ𑼂Ìl���b�����Ƃ𖳎�����悤�Él�X�ɓ`���܂��B���Ìs���[�u�ÍA�Âl�I�ɂÍÅ��̂�̂ł���A���Ȃ��̉�Ђ�v���W�F�N�g�ÉÅ“K�ł��B Next [Glossary](../../GLOSSARY.md) diff --git a/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md index 7bc1a7b..ec0d645 100644 --- a/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md +++ b/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -6,4 +6,4 @@ �ł����͓I�Ȕ��^���F���v�Z�����V�X�e���ȂÇA���R�Ƃ����v���𖞂������Ƃ͕s�”\�ł��B�v���������N���ɂ��邱�Ƃ��ł����ÎA�l�̖��͓I�Ȕ��^�ÆF���v�Z���A�������v���r���[�������ÏX�������A���̃X�^�C���Ɋ��Â��Čڋq�����x�����߂ÄA���������̂������҂��V�X�e�����\�z���܂��傤�B�����̑N���Ȓ��`���Ȃ��A���Ȃ��Í������܂����B -Next [How to Utilize Embedded Languages](02-How%20to%20Utilize%20Embedded%20Languages.md) +Next [How to Utilize Embedded Languages](02-How-to-Utilize-Embedded-Languages.md) diff --git a/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index da87dd4..99ef99c 100644 --- a/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -8,4 +8,4 @@ �����𖄂ß��ޑO�Ɏ������g�Éq�˂��ׂ��^�̎����ÍA�����͎��̒��O�̕����ƈê�ÉA�܂��͔��΂ɓ����̂ł��傤���H���Ȃ������O���v���O���}�[�ȊO�Ìl�Ɍ��肵�悤�Ǝv�������A�ǂ������΂��ꂪ���ɗ����܂����H���Ȃ��̈Ó}�����I�[�f�B�G���X�������v���O���}�ł����ê‡ï¿½A�ނ��̓A�v���P�[�V�����v���O���}�C���^�t�F�[�X�iAPI�j���D�ނł��傤���H�����͂ǂ��Ȍ����ł����H�v���O���}�[�ÍA�����g���������V�����������w�Ԃ��Ƃ��]�܂Ȃ��B�ނ��̕����Ɨ��Ý����ÆA�������w�Ԃ̂ɑ����̎��Ԃ����₷�K�v�͂����܂����B�V�����������ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚͊��тł��B�������A�������͂��������[�U�[�̃j�[�Y�ɖӖړI�ɂ����ׂ��ł͂����܂����B���Ȃ����{���Ɍ��̃j�[�Y�ƃA�C�f�A�������Ă��Ȃ������A�����̌������g�p���ÄA���[�U�[�����Ɏ����Ă����g�����ꂽ���̂����p�ł����悤�ɂ��܂��傤�B -Next [Choosing Languages](03-Choosing%20Languages.md) \ No newline at end of file +Next [Choosing Languages](03-Choosing-Languages.md) \ No newline at end of file diff --git a/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md index e5efd00..e26a6bf 100644 --- a/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md +++ b/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -12,4 +12,4 @@ �������̉e���̈ꕔ�ÍS���w�I�Ȃ��̂ɉ߂��Ȃ����������܂����B�S���w�Íd�v�ł��B���ǂ̂Ƃ����A�����ê§ï¿½ï¿½ï¿½`�̔��p�͂��ꂪ�ñ‹Ÿ‚��闘�_�������d�v�ł��B -Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) +Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/jp/README.md b/jp/README.md index 780a49e..65b803b 100644 --- a/jp/README.md +++ b/jp/README.md @@ -21,79 +21,79 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens 1. [Beginner](1-Beginner) - Personal Skills - - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - Team Skills - - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) 2. [Intermediate](2-Intermediate) - Personal Skills - - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - - [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + - [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - Team Skills - - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - Judgment - - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [Advanced](3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) diff --git a/jp/SUMMARY.md b/jp/SUMMARY.md index d049bd5..891aca3 100644 --- a/jp/SUMMARY.md +++ b/jp/SUMMARY.md @@ -2,79 +2,79 @@ [//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) * [Intermediate](2-Intermediate/README.md) * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) * [Advanced](3-Advanced/README.md) * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) diff --git a/zh/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/zh/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index f17b3e4..a118b46 100644 --- a/zh/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/zh/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) 调试(Debug)是æˆä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„基石。调试这个è¯ç¬¬ä¸€ä¸ªå«ä¹‰å³æ˜¯ç§»é™¤é”™è¯¯ï¼Œä½†çœŸæ­£æœ‰æ„义的å«ä¹‰æ˜¯ï¼Œé€šè¿‡æ£€æŸ¥æ¥è§‚察程åºçš„è¿è¡Œã€‚一个ä¸ä¼šè°ƒè¯•的程åºå‘˜ç­‰åŒäºŽçžŽå­ã€‚ -ç†æƒ³ä¸»ä¹‰è€…认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿ï¼Œæ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿ï¼Œä»–ä»¬ä¸æ˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如%20GNU%20) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果ä¸èƒ½çœ‹é€ä»£ç çš„具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ +ç†æƒ³ä¸»ä¹‰è€…认为设计ã€åˆ†æžã€å¤æ‚çš„ç†è®ºæˆ–å…¶ä»–ä¸œè¥¿ï¼Œæ˜¯æ›´åŸºæœ¬çš„ä¸œè¥¿ï¼Œä»–ä»¬ä¸æ˜¯çŽ°å®žçš„ç¨‹åºå‘˜ã€‚现实的程åºå‘˜ä¸ä¼šæ´»åœ¨ç†æƒ³çš„世界里。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦ä¸Žåœ¨ä½ å‘¨å›´çš„主è¦è½¯ä»¶å…¬å¸æˆ–组织 (比如-GNU-) 的代ç ï¼Œå’Œä½ åŒäº‹å†™çš„ä»£ç æ‰“交é“。这里é¢å¤§éƒ¨åˆ†çš„代ç ä»¥åŠå®ƒä»¬çš„æ–‡æ¡£æ˜¯ä¸å®Œç¾Žçš„。如果ä¸èƒ½çœ‹é€ä»£ç çš„具体执行过程,最轻微的颠簸都会把你永远地抛出去。通常这ç§å¯è§æ€§åªèƒ½ä»Žå®žéªŒèŽ·å¾—ï¼Œä¹Ÿå°±æ˜¯ï¼Œè°ƒè¯•ã€‚ 调试是一件与程åºè¿è¡Œç›¸å…³çš„事情,而éžä¸Žç¨‹åºæœ¬èº«ç›¸å…³ã€‚你从主è¦çš„软件公å¸è´­ä¹°ä¸€äº›äº§å“,你通常ä¸ä¼šçœ‹åˆ°ï¼ˆäº§å“背åŽçš„ï¼‰ç¨‹åºæœ¬èº«ã€‚但代ç ä¸éµå¾ªæ–‡æ¡£çš„æƒ…å†µï¼ˆè®©ä½ æ•´å°æœºå™¨å´©æŽ‰æ˜¯ä¸€ä¸ªå¸¸è§åˆç‰¹æ®Šçš„例å­ï¼‰æˆ–者文档没有说明的情况ä»ç„¶ä¼šå‡ºçŽ°ã€‚æ›´å¸¸è§çš„æ˜¯ï¼Œä½ çš„程åºå‡ºçŽ°äº†ä¸€ä¸ªé”™è¯¯ï¼Œå½“ä½ æ£€æŸ¥ä½ å†™çš„ä»£ç çš„æ—¶å€™ï¼Œå´ä¸çŸ¥é“这个错误是怎么å‘生的。ä¸å¯é¿å…的,这æ„味ç€ä½ åšçš„一些å‡è®¾å¹¶ä¸å¯¹ï¼Œæˆ–者一些你没有预料到的情况å‘生了。有时候,神奇的修改æºä»£ç çš„æŠ€å·§å¯èƒ½ä¼šç”Ÿæ•ˆã€‚当它无效时,你必须调试了。 @@ -19,4 +19,4 @@ 当调试需è¦ä¿®æ”¹ä»£ç çš„æ—¶å€™ï¼Œä¸€äº›åˆå­¦è€…会感到害怕。这是å¯ä»¥ç†è§£çš„ï¼Œè¿™æœ‰ç‚¹åƒæŽ¢ç´¢åž‹å¤–ç§‘æ‰‹æœ¯ã€‚ä½†ä½ éœ€è¦å­¦ä¼šæ‰“破代ç ï¼Œè®©å®ƒè·³èµ·æ¥ï¼Œä½ éœ€è¦å­¦ä¼šåœ¨å®ƒä¸Šé¢åšå®žéªŒï¼Œå¹¶ä¸”需è¦çŸ¥é“你临时对它åšçš„任何事情都ä¸ä¼šä½¿å®ƒå˜å¾—更糟。如果你感å—åˆ°äº†è¿™ä»½ææƒ§ï¼Œæ‰¾ä¸€ä½å¯¼å¸ˆ - 就是因为许多人在一开始é¢å¯¹è¿™ç§ææƒ§çš„的时候表现的太脆弱,我们因此失去了很多本å¯ä»¥å˜æˆä¼˜ç§€ç¨‹åºå‘˜çš„人。 -Next [å¦‚ä½•é€šè¿‡åˆ†ç¦»é—®é¢˜ç©ºé—´æ¥ Debug](02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) +Next [å¦‚ä½•é€šè¿‡åˆ†ç¦»é—®é¢˜ç©ºé—´æ¥ Debug](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/zh/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/zh/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md index 55ed659..fd1da41 100644 --- a/zh/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md +++ b/zh/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -12,4 +12,4 @@ 一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 -Next [如何移除错误](03-How%20to%20Remove%20an%20Error.md) +Next [如何移除错误](03-How-to-Remove-an-Error.md) diff --git a/zh/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/zh/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index aed5d01..34a55c8 100644 --- a/zh/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/zh/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -6,4 +6,4 @@ 有时候,å¯èƒ½å®žé™…上有几个 bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义 bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 -Next [如何使用日志调试](04-How%20to%20Debug%20Using%20a%20Log.md) +Next [如何使用日志调试](04-How-to-Debug-Using-a-Log.md) diff --git a/zh/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/zh/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 1a127df..ac1dddc 100644 --- a/zh/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/zh/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -10,4 +10,4 @@ 如果你有一个永久的日志,printling 现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 -Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How%20to%20Understand%20Performance%20Problems.md) +Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How-to-Understand-Performance-Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/zh/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index 01869cf..8c0bf70 100644 --- a/zh/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/zh/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -8,4 +8,4 @@ 竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 -Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How%20to%20Fix%20Performance%20Problems.md) +Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How-to-Fix-Performance-Problems.md) diff --git a/zh/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/zh/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index 0604b85..69e3f37 100644 --- a/zh/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/zh/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -10,4 +10,4 @@ 你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的 boss 这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ -Next [如何优化循环](07-How%20to%20Optimize%20Loops.md) +Next [如何优化循环](07-How-to-Optimize-Loops.md) diff --git a/zh/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/zh/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md index f44ee0e..4059d6d 100644 --- a/zh/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md +++ b/zh/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -12,4 +12,4 @@ 这些æ“作的具体代价å–决于你的具体系统。在一些系统中,编译器和硬件会为你åšä¸€äº›äº‹æƒ…ã€‚ä½†å¿…é¡»æ¸…æ¥šï¼Œæœ‰æ•ˆçš„ä»£ç æ¯”需è¦åœ¨ç‰¹æ®Šå¹³å°ä¸‹ç†è§£çš„代ç è¦å¥½ã€‚ -Next [如何处ç†I/O开销](08-How%20to%20Deal%20with%20IO%20Expense.md) +Next [如何处ç†I/O开销](08-How-to-Deal-with-IO-Expense.md) diff --git a/zh/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/zh/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md index 89b60d6..1c3e712 100644 --- a/zh/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md +++ b/zh/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -10,4 +10,4 @@ å¦ä¸€ç§æœ‰æ—¶èƒ½å¤Ÿç”¨æ¥ä¼˜åŒ–本地引用的技术是让计算更接近数æ®ã€‚例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 -Next [如何管ç†å†…å­˜](09-How%20to%20Manage%20Memory.md) +Next [如何管ç†å†…å­˜](09-How-to-Manage-Memory.md) diff --git a/zh/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/zh/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md index c06a9ea..969f265 100644 --- a/zh/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md +++ b/zh/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -12,4 +12,4 @@ æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no delete)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 -Next [如何处ç†å¶çŽ°çš„ Bug](10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) +Next [如何处ç†å¶çŽ°çš„ Bug](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/zh/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/zh/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index 46d466e..3fb5f8a 100644 --- a/zh/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/zh/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -14,4 +14,4 @@ 这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是 N 的平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。正å¼ç”±äºŽè¿™äº›æ–‡æœ¬é€šå¸¸éƒ½ä¼šå‡ºçŽ°ï¼Œæ‰€ä»¥æˆ‘ä»¬æ‰å¯ä»¥é©¬ä¸Šå‘现这个 bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 -Next [如何学习设计技能](11-How%20to%20Learn%20Design%20Skills.md) +Next [如何学习设计技能](11-How-to-Learn-Design-Skills.md) diff --git a/zh/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/zh/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md index 09dd07c..8f6498d 100644 --- a/zh/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md +++ b/zh/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -6,4 +6,4 @@ å‘展出你自己的风格是自然而有用的,但记ä½ï¼Œè®¾è®¡æ˜¯ä¸€ç§è‰ºæœ¯ï¼Œè€Œä¸æ˜¯ä¸€ç§æŠ€æœ¯ã€‚人们写的关于这个主题的书都有一ç§ä½¿å¾—å®ƒå¥½åƒæ˜¯æŠ€æœ¯çš„æ—¢å®šçš„兴趣。ä¸è¦æ­¦æ–­å¯¹å¾…特定的设计风格。 -Next [如何进行实验](12-How%20to%20Conduct%20Experiments.md) +Next [如何进行实验](12-How-to-Conduct-Experiments.md) diff --git a/zh/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/zh/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index f97984e..c9fedec 100644 --- a/zh/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/zh/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -19,4 +19,4 @@ 第二,你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验尽é‡åŽ»æä¾›æœ€å¤šçš„ä¿¡æ¯ã€‚但ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šè®©å®žéªŒä¿æŒç®€å•å˜çš„å›°éš¾ - 你必须通过ç»éªŒæ¥æå‡è¿™ç§æƒè¡¡çš„能力。 -Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why%20Estimation%20is%20Important.md) +Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/zh/1-Beginner/README.md b/zh/1-Beginner/README.md index 1033674..d5dc54c 100644 --- a/zh/1-Beginner/README.md +++ b/zh/1-Beginner/README.md @@ -1,27 +1,27 @@ # 1. 入门 [//]: # (Version:1.0.0) - 个人技能 - - [学会 Debug](Personal-Skills/01-Learn%20To%20Debug.md) - - [如何通过分割问题 Debug](Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [如何移除一个错误](Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [如何使用日志调试](Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [如何解决性能问题](Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [如何优化循环](Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [如何管ç†å†…å­˜](Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [如何学习设计技能](Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [如何进行实验](Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [学会 Debug](Personal-Skills/01-Learn-To-Debug.md) + - [如何通过分割问题 Debug](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [如何移除一个错误](Personal-Skills/03-How-to-Remove-an-Error.md) + - [如何使用日志调试](Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [如何解决性能问题](Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [如何优化循环](Personal-Skills/07-How-to-Optimize-Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [如何管ç†å†…å­˜](Personal-Skills/09-How-to-Manage-Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [如何学习设计技能](Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [如何进行实验](Personal-Skills/12-How-to-Conduct-Experiments.md) - 团队技能 - - [为什么预估很é‡è¦](Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [如何预估编程时间](Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [如何优雅地写文档](Team-Skills/05-How%20to%20Document%20Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [如何进行å•元测试](Team-Skills/08-How%20to%20Unit%20Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [为什么预估很é‡è¦](Team-Skills/01-Why-Estimation-is-Important.md) + - [如何预估编程时间](Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How-to-Find-Out-Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [如何优雅地写文档](Team-Skills/05-How-to-Document-Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [如何进行å•元测试](Team-Skills/08-How-to-Unit-Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take-Breaks-when-Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How-to-Deal-with-Difficult-People.md) diff --git a/zh/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/zh/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md index 185341a..e3cdb96 100644 --- a/zh/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md +++ b/zh/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -11,4 +11,4 @@ 这个常è§çš„解读问题需è¦ä½ ä¸Žä½ çš„ boss å’Œå®¢æˆ·æ˜Žç¡®åœ°è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡å¯¹ä½ æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ -Next [如何估计编程时间](02-How%20to%20Estimate%20Programming%20Time.md) +Next [如何估计编程时间](02-How-to-Estimate-Programming-Time.md) diff --git a/zh/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/zh/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md index b4eb532..a2764bf 100644 --- a/zh/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md +++ b/zh/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -18,4 +18,4 @@ 如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 -Next [如何å‘现信æ¯](03-How%20to%20Find%20Out%20Information.md) +Next [如何å‘现信æ¯](03-How-to-Find-Out-Information.md) diff --git a/zh/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/zh/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md index 4b33e0d..b9613fa 100644 --- a/zh/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md +++ b/zh/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -16,4 +16,4 @@ 如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且åšäº†æ‰€æœ‰è¯¥åšçš„å‡†å¤‡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒåŒ…括好的和å的,但你ä»å¯èƒ½çŠ¹è±«ä¸å†³ã€‚你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 -Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) +Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/zh/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/zh/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index 15066f5..73723cb 100644 --- a/zh/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/zh/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -12,4 +12,4 @@ 如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但å´è®©æˆ‘通过这么å°çš„付出就对公å¸çš„é”€å”®é˜Ÿä¼æœ‰äº†æ·±åˆ»çš„å°è±¡ã€‚ -Next [如何优雅地写文档](05-How%20to%20Document%20Wisely.md) +Next [如何优雅地写文档](05-How-to-Document-Wisely.md) diff --git a/zh/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/zh/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index 61aabd8..caccfbc 100644 --- a/zh/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/zh/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -17,4 +17,4 @@ - 为读者考虑,把你ç贵的时间花在让她更加容易阅读的事情上,并且 - 永远ä¸è¦ä½¿ç”¨è¿™æ ·çš„å‡½æ•°åæ¯”如 `foo`,`bar`, 或 `doIt`! -Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How%20to%20Work%20with%20Poor%20Code.md) +Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How-to-Work-with-Poor-Code.md) diff --git a/zh/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/zh/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md index c2e6a87..a7ecd95 100644 --- a/zh/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md +++ b/zh/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -8,4 +8,4 @@ 铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡æ‰€å¸¦æ¥çš„好处。特别的,你å¯ä»¥å°è¯•去隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 -Next [如何使用æºä»£ç æŽ§åˆ¶](07-How%20to%20Use%20Source%20Code%20Control.md) +Next [如何使用æºä»£ç æŽ§åˆ¶](07-How-to-Use-Source-Code-Control.md) diff --git a/zh/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/zh/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md index 4abe360..0d923ba 100644 --- a/zh/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md +++ b/zh/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -6,4 +6,4 @@ 使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。因æäº¤é”™è¯¯çš„代ç è€Œé™ä½Žä½ é˜Ÿå‹çš„å¼€å‘速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ -Next [如何进行å•元测试](08-How%20to%20Unit%20Test.md) +Next [如何进行å•元测试](08-How-to-Unit-Test.md) diff --git a/zh/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/zh/1-Beginner/Team-Skills/08-How-to-Unit-Test.md index f61a789..54c105a 100644 --- a/zh/1-Beginner/Team-Skills/08-How-to-Unit-Test.md +++ b/zh/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -6,4 +6,4 @@ æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ -Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take%20Breaks%20when%20Stumped.md) +Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take-Breaks-when-Stumped.md) diff --git a/zh/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/zh/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md index a40b983..c79ff59 100644 --- a/zh/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md +++ b/zh/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) 没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ -Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How%20to%20Recognize%20When%20to%20Go%20Home.md) +Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How-to-Recognize-When-to-Go-Home.md) diff --git a/zh/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/zh/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index 54130ff..0845f8e 100644 --- a/zh/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/zh/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -12,4 +12,4 @@ 因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 -Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How%20to%20Deal%20with%20Difficult%20People.md) +Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How-to-Deal-with-Difficult-People.md) diff --git a/zh/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/zh/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md index 58f5677..315f40f 100644 --- a/zh/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md +++ b/zh/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -10,4 +10,4 @@ > è®°ä½ï¼Œä¸€ä¸ªå¥½çš„设计会被糟糕的代ç å®žçŽ°å¼¹å›žã€‚å¦‚æžœå¥½çš„æŽ¥å£å’ŒæŠ½è±¡åœ¨ä»£ç ä¸­åˆ°å¤„存在,最åŽçš„é‡å†™ä¼šæ›´åŠ ç—›è‹¦ã€‚å¦‚æžœå†™éš¾ä»¥ä¿®å¤çš„æ¸…晰代ç å¾ˆå›°éš¾ï¼Œè€ƒè™‘是什么与核心设计冲çªçš„东西导致了这个问题。 -Next [如何管ç†è½¯ä»¶ä¾èµ–](02-How%20to%20Manage%20Software%20System%20Dependence.md) +Next [如何管ç†è½¯ä»¶ä¾èµ–](02-How-to-Manage-Software-System-Dependence.md) diff --git a/zh/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/zh/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index c16d8ae..635f956 100644 --- a/zh/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/zh/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -10,4 +10,4 @@ 拥有组件æºä»£ç å¯ä»¥æŠŠé£Žé™©é™åˆ°1/4.有了æºä»£ç ï¼Œä½ å¯ä»¥æ›´å®¹æ˜“地评估它,调试它,找到é¿å…踩å‘çš„æ–¹æ³•ï¼Œå¹¶ä¸”ä½¿å¾—ä¿®å¤æ›´å®¹æ˜“。如果你进行修å¤ï¼Œä½ å¿…须把修å¤çš„内容æäº¤ç»™ç»„件的拥有者,并且让修改åˆå¹¶åˆ°å®˜æ–¹å‘布版中,å¦åˆ™ä½ å°†ä¸é€‚地必须维护一个éžå®˜æ–¹ç‰ˆæœ¬ã€‚ -Next [如何判断软件是å¦å¤ªä¸æˆç†Ÿäº†](03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) +Next [如何判断软件是å¦å¤ªä¸æˆç†Ÿäº†](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/zh/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/zh/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md index a517da6..09e7170 100644 --- a/zh/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md +++ b/zh/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -15,4 +15,4 @@ 对这些标准的一点考虑论è¯äº†è‰¯å¥½æž„建的自由软件和开æºè½¯ä»¶åœ¨å‡å°ä¼ä¸šå®¶é£Žé™©ä¸Šçš„巨大价值 -Next [如何åšä¸€ä¸ªè´­ä¹°æˆ–构建决定](04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) +Next [如何åšä¸€ä¸ªè´­ä¹°æˆ–构建决定](04-How-to-Make-a-Buy-vs-Build-Decision.md) diff --git a/zh/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/zh/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index 60e6bd5..764e06f 100644 --- a/zh/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/zh/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -13,4 +13,4 @@ 在考虑了这些问题åŽï¼Œä½ å¯èƒ½åº”å½“å‡†å¤‡ä¸¤ä¸ªå·¥ç¨‹è®¡åˆ’è‰æ¡ˆï¼Œä¸€ä¸ªç»™è´­ä¹°ï¼Œä¸€ä¸ªç»™æž„建。这会强迫你考虑集æˆä»£ä»·ã€‚ä½ ä¹Ÿåº”å½“è€ƒè™‘ä¸¤ç§æŽªæ–½çš„é•¿æœŸç»´æŠ¤ä»£ä»·ã€‚ä¸ºäº†è¯„ä¼°é›†æˆä»£ä»·ï¼Œä½ å¿…须在购买软件å‰å¯¹å®ƒåšä¸€ä¸ªå½»åº•的评估。如果你ä¸èƒ½è¯„估好它,你å¯ä»¥å‡è®¾è´­ä¹°å®ƒä¼šæœ‰ä¸€ä¸ªä¸å¯é¢„料的风险,你应该以此决定是å¦è´­ä¹°ç‰¹å®šçš„产å“ã€‚å¦‚æžœè€ƒè™‘åŽæœ‰å‡ ä¸ªè´­ä¹°å†³å®šï¼Œéœ€è¦èŠ±ä¸€äº›ç²¾åŠ›åŽ»è¯„ä¼°æ¯ä¸ªå†³å®šã€‚ -Next [如何专业地æˆé•¿](05-How%20to%20Grow%20Professionally.md) +Next [如何专业地æˆé•¿](05-How-to-Grow-Professionally.md) diff --git a/zh/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/zh/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index 3794647..779f1de 100644 --- a/zh/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/zh/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -8,4 +8,4 @@ 计划学习新技能的方å¼ï¼ŒåŒ…括çç¢Žçš„æŠ€æœ¯ç±»åž‹ï¼Œæ¯”å¦‚å­¦ä¹ ä¸€ä¸ªæ–°çš„è½¯ä»¶ç³»ç»Ÿï¼Œå’Œå›°éš¾çš„ç¤¾äº¤ç±»åž‹ï¼Œåƒæ¼‚亮的写作,把它们集æˆåˆ°ä½ çš„工作中。 -Next [如何评估é¢è¯•者](06-How%20to%20Evaluate%20Interviewees.md) +Next [如何评估é¢è¯•者](06-How-to-Evaluate-Interviewees.md) diff --git a/zh/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/zh/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md index 72382a7..743bb37 100644 --- a/zh/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md +++ b/zh/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -12,4 +12,4 @@ 最åŽï¼Œé¢è¯•ä¹Ÿæ˜¯ä¸€ä¸ªé”€å”®çš„è¿‡ç¨‹ã€‚ä½ åº”è¯¥æŠŠä½ çš„å…¬å¸æˆ–工程销售给候选人。然而,你是在与程åºå‘˜è°ˆè¯ï¼Œæ‰€ä»¥ä¸è¦å°è¯•改å˜äº‹å®žã€‚从å的事物开始讲起,最åŽä»¥å¥½çš„事物作为强有力的结æŸã€‚ -Next [怎么决定什么时候使用奇妙的计算机科学](07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) +Next [怎么决定什么时候使用奇妙的计算机科学](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/zh/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/zh/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md index 4117bd6..92e2e94 100644 --- a/zh/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md +++ b/zh/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -12,4 +12,4 @@ 如果一个充分独立算法使用了些许奇妙的å¯ä»¥å‡å°‘ç¡¬ä»¶æ¶ˆè€—æˆ–å¢žåŠ æ•´ä¸ªç³»ç»Ÿçš„ä¸¤å€æ€§èƒ½è¡¨çŽ°çš„ç®—æ³•ï¼Œä¸è€ƒè™‘它å¯èƒ½æ˜¯æœ‰ç½ªçš„ã€‚äº‰è®ºè¿™æ ·ä¸€ä¸ªæ–¹æ³•çš„ä¸€ä¸ªå…³é”®æ˜¯ï¼Œè¯æ˜Žé£Žé™©ç¡®å®žæ˜¯ç›¸å½“的低,因为目标技术å¯èƒ½è¢«å……分研究过了,唯一的è¯é¢˜æ˜¯é›†æˆçš„风险。在这里一个程åºå‘˜çš„ç»éªŒå’Œè¯„估能够真的ååŒå¥‡å¦™çš„算法让集æˆå˜å¾—容易。 -Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How%20to%20Talk%20to%20Non-Engineers.md) +Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How-to-Talk-to-Non-Engineers.md) diff --git a/zh/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/zh/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md index f118e15..827ee3a 100644 --- a/zh/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md +++ b/zh/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -11,4 +11,4 @@ 最åŽï¼Œå¯èƒ½çš„è¯ï¼Œä¼°é‡ä¸ªäººæ¿€åŠ±çš„ä¸œè¥¿å¯¹ä½ å·¥ä½œçš„å½±å“ã€‚ä¾‹å¦‚ï¼Œä¿®å¤ bug æ—¶ï¼Œæ•°ä¸€æ•°æˆ‘å®Œå…¨ä¸æ„Ÿå…´è¶£çš„ bug 的数目,因为这和ä»ç„¶å­˜åœ¨çš„ bug æ•°ç›®æ˜¯ç‹¬ç«‹çš„ï¼Œå¹¶ä¸”è¿™ä¹Ÿæ˜¯å½±å“æˆ‘对公å¸çš„顾客的增值的最å°çš„å¯èƒ½æ–¹å¼ã€‚把æ¯ä¸ª bug 和一个高兴的顾客关è”èµ·æ¥ï¼Œ*是*对我个人的激励。 -Next [如何被广泛信任](02-How%20to%20be%20Widely%20Trusted.md) +Next [如何被广泛信任](02-How-to-be-Widely-Trusted.md) diff --git a/zh/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/zh/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md index e38e9de..14b5240 100644 --- a/zh/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md +++ b/zh/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -4,4 +4,4 @@ ä¸è¦ä¸æ‡‚装懂。与队å‹ä»¥å¤–的人一起时,你必须清除地区分“当下在我脑å­é‡Œä¸æ‡‚的东西â€ä»¥åŠâ€œæˆ‘æ›¾ç»æ²¡æœ‰è®¤è¯†åˆ°çš„东西â€ã€‚ -Next [如何在时间和空间æƒè¡¡](03-How%20to%20Tradeoff%20Time%20vs%20Space.md) +Next [如何在时间和空间æƒè¡¡](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/zh/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/zh/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md index 95109e6..6b309ed 100644 --- a/zh/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md +++ b/zh/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -12,4 +12,4 @@ 现代计算机内存越æ¥è¶Šä¾¿å®œï¼Œå› ä¸ºä¸åƒå¤„ç†å™¨æ—¶é—´ï¼Œä½ åœ¨è¾¾åˆ°è¾¹ç•Œå‰ä½ ä¸èƒ½çœ‹è§å®ƒï¼Œä½†è¿™ç§å¤±è´¥æ˜¯ç¾é𾿀§çš„。使用内存也有éšè—的代价,比如你影å“了其他需è¦è¢«ä¿ç•™çš„程åºï¼Œä»¥åŠä½ åˆ†é…和释放内存的时间。在你想è¦èŠ±æ›´å¤šç©ºé—´åŽ»æ¢å–速度之å‰ï¼Œè¯·ä»”细考虑这一点。 -Next [如何进行压力测试](04-How%20to%20Stress%20Test.md) +Next [如何进行压力测试](04-How-to-Stress-Test.md) diff --git a/zh/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/zh/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md index 40eedf4..888861a 100644 --- a/zh/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md +++ b/zh/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -14,4 +14,4 @@ [1] "æ’žå“" -Next [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) +Next [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](05-How-to-Balance-Brevity-and-Abstraction.md) diff --git a/zh/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/zh/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index e152ddd..183c6e6 100644 --- a/zh/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/zh/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -6,4 +6,4 @@ å¯ç§»æ¤æ€§ä¹Ÿæœ‰ç±»ä¼¼çš„é—®é¢˜ã€‚ä»£ç æ˜¯å¦åº”当å¯ç§»æ¤åˆ°ä¸åŒçš„电脑,编译器,软件系统或平å°ï¼Ÿè¿˜æ˜¯ç®€å•地传输?我认为,ä¸å¯ç§»æ¤ï¼ŒçŸ­è€Œç®€å•ä¼ è¾“çš„ä»£ç æ¯”长而å¯ç§»æ¤çš„代ç è¦å¥½ã€‚把ä¸å¯ç§»æ¤ä»£ç é™åˆ¶åœ¨ç‰¹å®šçš„领域是一个想对轻æ¾è€Œä¸”无疑是好的主æ„。比如一个使用了特定 DBMS 的数æ®åº“查询的类。 -Next [如何学习新技能](06-How%20to%20Learn%20New%20Skills.md) +Next [如何学习新技能](06-How-to-Learn-New-Skills.md) diff --git a/zh/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/zh/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md index 109c398..b81efbc 100644 --- a/zh/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md +++ b/zh/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -10,4 +10,4 @@ 如果你领导团队,需è¦çŸ¥é“他们是怎么学习的,并且通过给他们安排适é‡çš„和他们感兴趣的技能的工程æ¥é”»ç‚¼ä»–们。ä¸è¦å¿˜è®°ç¨‹åºå‘˜æœ€é‡è¦çš„æŠ€èƒ½ä¸æ˜¯æŠ€æœ¯ã€‚让你的团队æˆå‘˜æœ‰ä¸€ä¸ªæœºä¼šåŽ»çŽ©ï¼Œé”»ç‚¼å‹‡æ°”ï¼Œè¯šå®žï¼Œä»¥åŠäº¤æµã€‚ -Next [学会打字](07-Learn%20to%20Type.md) +Next [学会打字](07-Learn-to-Type.md) diff --git a/zh/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/zh/2-Intermediate/Personal-Skills/07-Learn-to-Type.md index e95f186..d5e032a 100644 --- a/zh/2-Intermediate/Personal-Skills/07-Learn-to-Type.md +++ b/zh/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„è´£ä»»æ„Ÿæ˜¯ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当 Michael Tiemann 在 MCC 的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³æ˜¯å¦‚此的急促以至于难以分辨。 -Next [如何åšé›†æˆæµ‹è¯•](08-How%20to%20Do%20Integration%20Testing.md) +Next [如何åšé›†æˆæµ‹è¯•](08-How-to-Do-Integration-Testing.md) diff --git a/zh/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/zh/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md index 1f5cfd1..b12a93d 100644 --- a/zh/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md +++ b/zh/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -4,4 +4,4 @@ ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯å¿…须通过显å¼é›†æˆæ¥è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,请仔细评估。 -Next [交æµè¯­è¨€](09-Communication%20Languages.md) +Next [交æµè¯­è¨€](09-Communication-Languages.md) diff --git a/zh/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/zh/2-Intermediate/Personal-Skills/09-Communication-Languages.md index 17ed157..e442315 100644 --- a/zh/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/zh/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -8,4 +8,4 @@ XML æ˜¯è®¾è®¡æ–°æ ‡å‡†çš„æ ‡å‡†ã€‚è¿™ä¸æ˜¯ä¸€ä¸ªæ•°æ®é—´äº¤æ¢çš„问题的解 SQL 是一ç§éžå¸¸æœ‰åŠ›è€Œä¸°å¯Œçš„æ•°æ®æŸ¥è¯¢å’Œæ“作语言,而éžä¸€ç§ç¼–程语言。它有许多ç§ç±»ï¼Œå…¸åž‹åœ°ä¾èµ–于产å“,但这没有标准核心那么é‡è¦ã€‚SQL 是关系数æ®åº“çš„*巧舌弗兰å¡*。你å¯èƒ½å¯ä»¥ä¹Ÿå¯èƒ½ä¸å¯ä»¥åœ¨ä»»ä½•领域从对关系数æ®åº“çš„ç†è§£ä¸­å—益,但你必须对它们和 SQL 的语法和å«ä¹‰æœ‰åŸºæœ¬çš„ç†è§£ã€‚ -Next [é‡åž‹å·¥å…·](10-Heavy%20Tools.md) +Next [é‡åž‹å·¥å…·](10-Heavy-Tools.md) diff --git a/zh/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/zh/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index f819058..3843661 100644 --- a/zh/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/zh/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -11,4 +11,4 @@ - XML è§£æžå™¨ï¼› - 电å­è¡¨æ ¼ã€‚ -Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How%20to%20analyze%20data.md) +Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How-to-analyze-data.md) diff --git a/zh/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/zh/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index 492aed4..2f970d8 100644 --- a/zh/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/zh/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -14,4 +14,4 @@ 让我给你看å¦ä¸€ä¸ªä¾‹å­ï¼Œåªæ˜¯ä¸€äº›æ€æƒ³ç²®é£Ÿï¼Œè®©æˆ‘们å‡è®¾ä½ çš„任务是找到字典里超过三ä½çš„åŒå­—异构è¯ï¼ˆä¸€ä¸ªå¼‚æž„è¯å¿…é¡»åœ¨åŒæ ·çš„字典里有å¦ä¸€ä¸ªè¯ï¼‰ã€‚如果你把这当åšä¸€ä¸ªè®¡ç®—任务,你将会结æŸäºŽæ— å°½çš„,å°è¯•找出æ¯ä¸ªå•è¯çš„æ‰€æœ‰ç»„åˆï¼Œç„¶åŽæ‹¿å®ƒè·Ÿåˆ—表里的所有其他å•è¯æ¯”较,这样一个无尽的努力中。然而,如果你分æžäº†æ‰‹å¤´çš„æ•°æ®ï¼Œä½ ä¼šæ„识到,æ¯ä¸ªå•è¯å¯èƒ½è¢«ä¸€ä¸ªåŒ…å«è¿™ä¸ªè¯æœ¬èº«ä»¥åŠç”¨å®ƒçš„å­—æ¯ä½œä¸º ID çš„æŽ’åºæ•°ç»„的记录所代表,这个蛮力算法å¯èƒ½éœ€è¦è¿è¡Œå‡ å¤©ï¼Œè€Œå°çš„é‚£ä¸ªç®—æ³•åªæ˜¯ä¸€ä»¶å‡ ç§’的事。下次é¢å¯¹ä¸€ä¸ªæ£˜æ‰‹çš„问题时,记ä½è¿™ä¸ªä¾‹å­ã€‚ -Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How%20to%20Manage%20Development%20Time.md) +Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How-to-Manage-Development-Time.md) diff --git a/zh/2-Intermediate/README.md b/zh/2-Intermediate/README.md index 36b0dee..32ad0d6 100644 --- a/zh/2-Intermediate/README.md +++ b/zh/2-Intermediate/README.md @@ -1,29 +1,29 @@ # 2. 进阶 [//]: # (Version:1.0.0) - 个人技能 - - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [在时间和空间之间该如何æƒè¡¡](Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [如何进行压力测试](Personal-Skills/04-How%20to%20Stress%20Test.md) - - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [如何学习新技能](Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [学会打字](Personal-Skills/07-Learn%20to%20Type.md) - - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [交æµè¯­è¨€](Personal-Skills/09-Communication%20Languages.md) - - [é‡åž‹å·¥å…·](Personal-Skills/10-Heavy%20Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](Personal-Skills/11-How%20to%20analyze%20data.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How-to-Stay-Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [如何进行压力测试](Personal-Skills/04-How-to-Stress-Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [如何学习新技能](Personal-Skills/06-How-to-Learn-New-Skills.md) + - [学会打字](Personal-Skills/07-Learn-to-Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [交æµè¯­è¨€](Personal-Skills/09-Communication-Languages.md) + - [é‡åž‹å·¥å…·](Personal-Skills/10-Heavy-Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](Personal-Skills/11-How-to-analyze-data.md) - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [如何管ç†å’¨è¯¢](Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [如何适度交æµ](Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [如何直言异议以åŠå¦‚何é¿å…](Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [如何管ç†å¼€å‘æ—¶é—´](Team-Skills/01-How-to-Manage-Development-Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [如何管ç†å’¨è¯¢](Team-Skills/03-How-to-Manage-Consultants.md) + - [如何适度交æµ](Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - 评判 - - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [如何决定购买还是构建](Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [如何专业地æˆé•¿](Judgment/05-How%20to%20Grow%20Professionally.md) - - [如何评估é¢è¯•者](Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [如何决定什么时候使用奇妙的计算机科学](Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [如何决定购买还是构建](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [如何专业地æˆé•¿](Judgment/05-How-to-Grow-Professionally.md) + - [如何评估é¢è¯•者](Judgment/06-How-to-Evaluate-Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How-to-Talk-to-Non-Engineers.md) diff --git a/zh/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/zh/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index 3da3b72..66d67d9 100644 --- a/zh/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/zh/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -8,4 +8,4 @@ ç¡®ä¿ä½ çš„计划包括了:内部团队会议,写代ç ï¼Œæ–‡æ¡£ï¼Œè§„åˆ’å‘¨æœŸæ´»åŠ¨ï¼Œé›†æˆæµ‹è¯•,处ç†å¤–部关系,疾病,休å‡ï¼Œå·²æœ‰å·¥ç¨‹ç»´æŠ¤ï¼Œè¿˜æœ‰å¼€å‘环境维护。工程计划å¯ä»¥ä½œä¸ºä¸€ç§ä¸ºå±€å¤–人或你的 boss 准备的关于你或你的团队正在åšçš„äº‹æƒ…çš„è§†å›¾ã€‚å› ä¸ºå¦‚æ­¤ï¼Œæ‰€ä»¥å®ƒåº”è¯¥æ˜¯çŸ­ä¸”åŠæ—¶æ›´æ–°çš„。 -Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) +Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/zh/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/zh/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index 2031e28..2518db2 100644 --- a/zh/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/zh/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -8,4 +8,4 @@ ç†è§£å·²æœ‰çš„为æŸä¸ªç‰¹æ®Šç›®çš„的第三方软件的适用性是éžå¸¸è§ä»è§æ™ºçš„东西。这是éžå¸¸å®¢è§‚的,并且通常ä½åœ¨ä¸“家心里。如果你å‘现了那些专家,你å¯ä»¥èŠ‚çœå¾ˆå¤šæ—¶é—´ã€‚很多时候,一个工程会如此完全地ä¾èµ–于第三方软件,以至于如果集æˆå¤±è´¥äº†ï¼Œå·¥ç¨‹å°±å¤±è´¥äº†ã€‚åƒæ—¶é—´è¡¨é‡Œå†™çš„é‚£æ ·æ¸…æ™°åœ°è¡¨è¾¾äº†å±æœºã€‚å¦‚æžœå±æœºä¸èƒ½è¢«å°½æ—©æ¶ˆé™¤ï¼Œè¯•ç€è®¢ä¸€ä¸ªä¸ºæ„外准备的计划,比如å¯ç”¨çš„第二方案,或者自己写下功能点的能力。永远ä¸è¦è®©æ—¶é—´è¡¨ä¾èµ–于蒸汽。 -Next [如何管ç†å’¨è¯¢å¸ˆ](03-How%20to%20Manage%20Consultants.md) +Next [如何管ç†å’¨è¯¢å¸ˆ](03-How-to-Manage-Consultants.md) diff --git a/zh/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/zh/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md index 89016dd..bd58e19 100644 --- a/zh/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md +++ b/zh/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -6,4 +6,4 @@ 如果咨询师è¦å†™ä»£ç ï¼Œä½ å¿…须在你使用它们å‰ä»”细 review。有ç€å¤§æ®µå¸¦é£Žé™©è€Œæ²¡æœ‰è¢« review 的代ç ï¼Œä¼šè®©ä½ å®Œæˆä¸äº†å·¥ç¨‹ã€‚事实上这对所有的团队æˆå‘˜éƒ½æ˜¯æˆç«‹çš„,但你通常有更多与你接近的团队æˆå‘˜çš„知识。 -Next [如何适é‡äº¤æµ](04-How%20to%20Communicate%20the%20Right%20Amount.md) +Next [如何适é‡äº¤æµ](04-How-to-Communicate-the-Right-Amount.md) diff --git a/zh/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/zh/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md index fd52f57..9141eed 100644 --- a/zh/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md +++ b/zh/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -4,4 +4,4 @@ éžæ­£å¼äº¤æµå€¼å¾—åšä»»ä½•事情去鼓励。更多有用的沟通工作在åŒäº‹é—´çš„åˆé¥­å¯ä»¥è¿›è¡Œï¼Œè€Œéžå…¶ä»–çš„æ—¶é—´ã€‚è®¸å¤šå…¬å¸æ²¡æœ‰æ„è¯†åˆ°æˆ–è€…ä¸æ”¯æŒè¿™ä¸€ç‚¹ï¼Œè¿™æ˜¯ä¸€ç§é—憾。 -Next [如何直言异议以åŠå¦‚何é¿å…](05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) +Next [如何直言异议以åŠå¦‚何é¿å…](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/zh/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/zh/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md index 489538d..11a2e85 100644 --- a/zh/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md +++ b/zh/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -8,4 +8,4 @@ ä¸ç®¡å†³è®®æ˜¯å¦è¢«æŽ¨ç¿»ï¼Œä½ å¿…须记ä½ä½ æ°¸è¿œä¸èƒ½è¯´å‡ºâ€œæˆ‘çš„è¯æ’‚这了,我早就这样告诉你了â€è¿™æ ·çš„è¯ï¼Œå› ä¸ºè¿™ä¸ªå†³å®šå·²ç»å¾—到了充分探讨。 -Next [判断 - 如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´é—´æƒè¡¡](../Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) +Next [判断 - 如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´é—´æƒè¡¡](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/zh/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/zh/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md index 4e5f87a..6fe2a41 100644 --- a/zh/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md +++ b/zh/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -8,4 +8,4 @@ 必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其专业行为的一ç§è¡¨çŽ°ã€‚ç¨‹åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构建了一套æµç¨‹ï¼Œæˆ‘希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ -Next [如何ç†è§£ç”¨æˆ·](02-How%20to%20Understand%20the%20User.md) +Next [如何ç†è§£ç”¨æˆ·](02-How-to-Understand-the-User.md) diff --git a/zh/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/zh/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index 9314a2e..d2c7b33 100644 --- a/zh/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/zh/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -14,4 +14,4 @@ Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ 我相信,åˆä¼™äººå’Œå’¨è¯¢å¸ˆè®©å®¢æˆ·è¯´å‡ºä»–们内心真正想è¦çš„东西有巨大的困难。如果你想æˆä¸ºä¸€ä¸ªå’¨è¯¢å¸ˆï¼Œå»ºè®®ä½ åŸºäºŽç”¨æˆ·æ¸…晰的头脑以åŠä»–们的钱包æ¥é€‰æ‹©å®¢æˆ·ã€‚ -Next [如何得到晋å‡](03-How%20to%20Get%20a%20Promotion.md) +Next [如何得到晋å‡](03-How-to-Get-a-Promotion.md) diff --git a/zh/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/zh/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index 474b69c..5c73172 100644 --- a/zh/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/zh/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -10,4 +10,4 @@ 大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和 boss 地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 -Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How%20to%20Develop%20Talent.md) +Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index 4eb98e4..f807863 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -1,22 +1,22 @@ # 3. 高级 [//]: # (Version:1.0.0) - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [如何使用嵌入型语言](Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [选择语言](Technical-Judgment/03-Choosing%20Languages.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型语言](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [选择语言](Technical-Judgment/03-Choosing-Languages.md) - 机智地妥å - - [如何与时间压力作斗争](Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [如何获得晋å‡](Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [如何与时间压力作斗争](Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何获得晋å‡](Compromising-Wisely/03-How-to-Get-a-Promotion.md) - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [如何选择工作内容](Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [如何让你队å‹çš„价值最大化](Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [如何划分问题](Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [如何å‘展一个系统](Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [如何有效地沟通](Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [如何å‘展æ‰èƒ½](Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何选择工作内容](Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何让你队å‹çš„价值最大化](Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何划分问题](Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何å‘展一个系统](Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地沟通](Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/zh/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index 4a50e3b..0812f3a 100644 --- a/zh/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/zh/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -20,4 +20,4 @@ Nietschze 夸大了他所说的: ä½ å¯ä»¥ç»å¸¸ç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 -Next [如何选择工作的内容](02-How%20to%20Choose%20What%20to%20Work%20On.md) +Next [如何选择工作的内容](02-How-to-Choose-What-to-Work-On.md) diff --git a/zh/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/zh/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md index 028c109..0fa3e6e 100644 --- a/zh/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md +++ b/zh/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) 你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 -Next [如何让你队å‹çš„价值最大化](03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) +Next [如何让你队å‹çš„价值最大化](03-How-to-Get-the-Most-From-Your-Teammates.md) diff --git a/zh/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/zh/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md index 4ad2984..848b62f 100644 --- a/zh/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md +++ b/zh/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -12,4 +12,4 @@ ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ -Next [如何划分问题](04-How%20to%20Divide%20Problems%20Up.md) +Next [如何划分问题](04-How-to-Divide-Problems-Up.md) diff --git a/zh/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/zh/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md index f52bdd5..86f6ed4 100644 --- a/zh/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md +++ b/zh/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -6,4 +6,4 @@ 因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–们的弱项或者学习新技能的能力。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 -Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How%20to%20Handle%20Boring%20Tasks.md) +Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How-to-Handle-Boring-Tasks.md) diff --git a/zh/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/zh/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md index bceadbb..bde52fd 100644 --- a/zh/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md +++ b/zh/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -4,4 +4,4 @@ 如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ -Next [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How%20to%20Gather%20Support%20for%20a%20Project.md) +Next [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How-to-Gather-Support-for-a-Project.md) diff --git a/zh/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/zh/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md index 144a40e..adc8cac 100644 --- a/zh/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md +++ b/zh/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -2,4 +2,4 @@ [//]: # (Version:1.0.0) è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你所创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的观点所带æ¥çš„价值。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 -Next [如何å‘展一个系统](07-How%20to%20Grow%20a%20System.md) +Next [如何å‘展一个系统](07-How-to-Grow-a-System.md) diff --git a/zh/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/zh/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md index 9afc989..c6e06b1 100644 --- a/zh/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md +++ b/zh/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -20,4 +20,4 @@ 对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ -Next [如何有效地沟通](08-How%20to%20Communicate%20Well.md) +Next [如何有效地沟通](08-How-to-Communicate-Well.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index c9471f1..7c1c315 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -8,4 +8,4 @@ æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个 demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了精力,没有人会因此看低你。 -Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) +Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md index 93ca0bb..fa4f1b7 100644 --- a/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md +++ b/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md @@ -6,4 +6,4 @@ 一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯” deadline 抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ -Next [如何处ç†ç®¡ç†ç¥žè¯](10-How%20to%20Deal%20with%20Managerial%20Myths.md) +Next [如何处ç†ç®¡ç†ç¥žè¯](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/zh/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/zh/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md index 9017cf0..3d18a0e 100644 --- a/zh/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md +++ b/zh/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -9,4 +9,4 @@ 如果有机会,你å¯ä»¥è¯•ç€è§£é‡Šè¿™äº›ä¸œè¥¿ï¼Œä½†å¦‚果你没有æˆåŠŸï¼Œä¸è¦è§‰å¾—悲伤,ä¸è¦å¥½æ–—地å对这些神è¯ä»¥è‡´æŸå®³äº†ä½ çš„声望。æ¯ä¸ªè¿™æ ·çš„神è¯å¢žå¼ºäº†ç®¡ç†è€…关于他们有一些对正在进行的事情的实际控制的想法。真相是,如果管ç†è€…是好的,他们会帮助你,如果他们是å的,他们会妨ç¢ä½ ã€‚ -Next [如何处ç†ç»„织混乱](11-How%20to%20Deal%20with%20Organizational%20Chaos.md) +Next [如何处ç†ç»„织混乱](11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/zh/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/zh/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md index a8a665a..494edab 100644 --- a/zh/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md +++ b/zh/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -6,4 +6,4 @@ ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有关于æˆåŠŸçš„æ¸…æ™°å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ -Next [如何使用嵌入型语言](02-How%20to%20Utilize%20Embedded%20Languages.md) +Next [如何使用嵌入型语言](02-How-to-Utilize-Embedded-Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/zh/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index c01d3ea..8f7f7b8 100644 --- a/zh/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/zh/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -8,4 +8,4 @@ 使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢 API å—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ç§å·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ -Next [选择语言](03-Choosing%20Languages.md) +Next [选择语言](03-Choosing-Languages.md) diff --git a/zh/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/zh/3-Advanced/Technical-Judgment/03-Choosing-Languages.md index 7df952d..09cc157 100644 --- a/zh/3-Advanced/Technical-Judgment/03-Choosing-Languages.md +++ b/zh/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -12,4 +12,4 @@ 这些效应å¯èƒ½æœ‰äº›åªæ˜¯å¿ƒç†ä¸Šçš„,但心ç†ä¸Šçš„东西也很é‡è¦ã€‚最åŽè¦è¯´çš„æ˜¯ï¼Œè¯­è¨€æš´æ”¿çš„代价超过了它能æä¾›çš„æ‰€æœ‰å¥½å¤„。 -Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) +Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/zh/README.md b/zh/README.md index e27c6ea..0241e3b 100644 --- a/zh/README.md +++ b/zh/README.md @@ -30,79 +30,79 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens 1. [入门](1-Beginner) - 个人技能 - - [学会 Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [如何移除一个错误](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [如何使用日志调试](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [如何解决性能问题](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [如何优化循环](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [如何学习设计技能](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [如何进行实验](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [如何使用日志调试](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - 团队技能 - - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [如何预估编程时间](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [如何优雅地写文档](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [如何进行å•元测试](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) 2. [进阶](2-Intermediate) - 个人技能 - - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [如何学习新技能](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [学会打字](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [如何适度交æµ](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - 评判 - - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [如何决定购买还是构建](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [高级](3-Advanced) - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [选择语言](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - 机智地妥å - - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [如何划分问题](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index b473ef4..1406561 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -7,79 +7,79 @@ 1. [入门](1-Beginner/README.md) - 个人技能 - - [学会 Debug](1-Beginner/Personal-Skills/01-Learn%20To%20Debug.md) - - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How%20to%20Debug%20by%20Splitting%20the%20Problem%20Space.md) - - [如何移除一个错误](1-Beginner/Personal-Skills/03-How%20to%20Remove%20an%20Error.md) - - [如何用使用日志调试](1-Beginner/Personal-Skills/04-How%20to%20Debug%20Using%20a%20Log.md) - - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How%20to%20Understand%20Performance%20Problems.md) - - [如何解决性能问题](1-Beginner/Personal-Skills/06-How%20to%20Fix%20Performance%20Problems.md) - - [如何优化循环](1-Beginner/Personal-Skills/07-How%20to%20Optimize%20Loops.md) - - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How%20to%20Deal%20with%20IO%20Expense.md) - - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How%20to%20Manage%20Memory.md) - - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How%20to%20Deal%20with%20Intermittent%20Bugs.md) - - [如何学习设计技能](1-Beginner/Personal-Skills/11-How%20to%20Learn%20Design%20Skills.md) - - [如何进行实验](1-Beginner/Personal-Skills/12-How%20to%20Conduct%20Experiments.md) + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [如何用使用日志调试](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - 团队技能 - - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why%20Estimation%20is%20Important.md) - - [如何预估编程时间](1-Beginner/Team-Skills/02-How%20to%20Estimate%20Programming%20Time.md) - - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How%20to%20Find%20Out%20Information.md) - - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How%20to%20Utilize%20People%20as%20Information%20Sources.md) - - [如何优雅地写文档](1-Beginner/Team-Skills/05-How%20to%20Document%20Wisely.md) - - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How%20to%20Work%20with%20Poor%20Code.md) - - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How%20to%20Use%20Source%20Code%20Control.md) - - [如何进行å•元测试](1-Beginner/Team-Skills/08-How%20to%20Unit%20Test.md) - - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take%20Breaks%20when%20Stumped.md) - - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How%20to%20Recognize%20When%20to%20Go%20Home.md) - - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How%20to%20Deal%20with%20Difficult%20People.md) + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) 2. [进阶](2-Intermediate/README.md) - 个人技能 - - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How%20to%20Stay%20Motivated.md) - - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How%20to%20be%20Widely%20Trusted.md) - - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How%20to%20Tradeoff%20Time%20vs%20Space.md) - - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How%20to%20Stress%20Test.md) - - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How%20to%20Balance%20Brevity%20and%20Abstraction.md) - - [如何学习新技能](2-Intermediate/Personal-Skills/06-How%20to%20Learn%20New%20Skills.md) - - [学会打字](2-Intermediate/Personal-Skills/07-Learn%20to%20Type.md) - - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How%20to%20Do%20Integration%20Testing.md) - - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication%20Languages.md) - - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy%20Tools.md) - - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How%20to%20analyze%20data.md) + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - 团队技能 - - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How%20to%20Manage%20Development%20Time.md) - - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How%20to%20Manage%20Third-Party%20Software%20Risks.md) - - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How%20to%20Manage%20Consultants.md) - - [如何适度交æµ](2-Intermediate/Team-Skills/04-How%20to%20Communicate%20the%20Right%20Amount.md) - - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How%20to%20Disagree%20Honestly%20and%20Get%20Away%20with%20It.md) + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - 评判 - - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How%20to%20Tradeoff%20Quality%20Against%20Development%20Time.md) - - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How%20to%20Manage%20Software%20System%20Dependence.md) - - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How%20to%20Decide%20if%20Software%20is%20Too%20Immature.md) - - [如何决定购买还是构建](2-Intermediate/Judgment/04-How%20to%20Make%20a%20Buy%20vs%20Build%20Decision.md) - - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How%20to%20Grow%20Professionally.md) - - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How%20to%20Evaluate%20Interviewees.md) - - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How%20to%20Know%20When%20to%20Apply%20Fancy%20Computer%20Science.md) - - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How%20to%20Talk%20to%20Non-Engineers.md) + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [如何评判一个软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [高级](3-Advanced/README.md) - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How%20to%20Tell%20the%20Hard%20From%20the%20Impossible.md) - - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How%20to%20Utilize%20Embedded%20Languages.md) - - [选择语言](3-Advanced/Technical-Judgment/03-Choosing%20Languages.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - 机智地妥å - - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How%20to%20Fight%20Schedule%20Pressure.md) - - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How%20to%20Understand%20the%20User.md) - - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How%20to%20Get%20a%20Promotion.md) + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How%20to%20Develop%20Talent.md) - - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How%20to%20Choose%20What%20to%20Work%20On.md) - - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How%20to%20Get%20the%20Most%20From%20Your%20Teammates.md) - - [如何划分问题](3-Advanced/Serving-Your-Team/04-How%20to%20Divide%20Problems%20Up.md) - - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How%20to%20Handle%20Boring%20Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How%20to%20Gather%20Support%20for%20a%20Project.md) - - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How%20to%20Grow%20a%20System.md) - - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How%20to%20Communicate%20Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How%20to%20Tell%20People%20Things%20They%20Don't%20Want%20to%20Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How%20to%20Deal%20with%20Managerial%20Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How%20to%20Deal%20with%20Organizational%20Chaos.md) + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) From 7fef2afc1e2335c59039bd6f8906824160cdf716 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Mon, 17 Jul 2017 21:29:03 +0100 Subject: [PATCH 125/149] Fixed apostraphe in link to 'How to Tell People Things They Don't Want to Hear' --- README.md | 2 +- en/3-Advanced/README.md | 2 +- en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md | 2 +- ...d => 09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md} | 0 en/README.md | 2 +- en/SUMMARY.md | 2 +- jp/3-Advanced/README.md | 2 +- jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md | 2 +- ...d => 09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md} | 0 jp/README.md | 2 +- jp/SUMMARY.md | 2 +- zh/3-Advanced/README.md | 2 +- zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md | 2 +- ...d => 09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md} | 0 zh/README.md | 2 +- zh/SUMMARY.md | 2 +- 16 files changed, 13 insertions(+), 13 deletions(-) rename en/3-Advanced/Serving-Your-Team/{09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md => 09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md} (100%) rename jp/3-Advanced/Serving-Your-Team/{09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md => 09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md} (100%) rename zh/3-Advanced/Serving-Your-Team/{09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md => 09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md} (100%) diff --git a/README.md b/README.md index a3f617b..99c3a19 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ Welcome to the tribe. - [How to Gather Support for a Project](en/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [How to Grow a System](en/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - [How to Communicate Well](en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Tell People Things They Don't Want to Hear](en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [How to Deal with Managerial Myths](en/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [How to Deal with Organizational Chaos](en/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](en/GLOSSARY.md) diff --git a/en/3-Advanced/README.md b/en/3-Advanced/README.md index c1fcbe8..85d0b2e 100644 --- a/en/3-Advanced/README.md +++ b/en/3-Advanced/README.md @@ -17,6 +17,6 @@ - [How to Gather Support for a Project](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [How to Grow a System](Serving-Your-Team/07-How-to-Grow-a-System.md) - [How to Communicate Well](Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [How to Deal with Managerial Myths](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index e90a818..29e5fa9 100644 --- a/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/en/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -8,4 +8,4 @@ The programmer brings order out of chaos. One interesting way to do this is to i I haven't mastered communicating well, but what I'm currently trying is what I think of as a four-pronged approach: After I have my ideas in order and am fully prepared, I try to speak verbally, hand people a white-paper (on real paper, as well as electronically) show them a demo, and then patiently repeat this process. I think a lot of times we are not patient enough in this kind of difficult communication. You should not be disheartened if your ideas are not immediately accepted. If you have invested energy in their preparation, no one will think poorly of you for it. -Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md similarity index 100% rename from en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md rename to en/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md diff --git a/en/README.md b/en/README.md index e85d448..f9e116d 100644 --- a/en/README.md +++ b/en/README.md @@ -91,7 +91,7 @@ Welcome to the tribe. - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](GLOSSARY.md) diff --git a/en/SUMMARY.md b/en/SUMMARY.md index 891aca3..b910ffe 100644 --- a/en/SUMMARY.md +++ b/en/SUMMARY.md @@ -72,7 +72,7 @@ * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) diff --git a/jp/3-Advanced/README.md b/jp/3-Advanced/README.md index c1fcbe8..85d0b2e 100644 --- a/jp/3-Advanced/README.md +++ b/jp/3-Advanced/README.md @@ -17,6 +17,6 @@ - [How to Gather Support for a Project](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [How to Grow a System](Serving-Your-Team/07-How-to-Grow-a-System.md) - [How to Communicate Well](Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Tell People Things They Don't Want to Hear](Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [How to Deal with Managerial Myths](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [How to Deal with Organizational Chaos](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index ee7ede6..527af5c 100644 --- a/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -8,4 +8,4 @@ ���͂��܂��R�~���j�P�[�V�������}�X�^�[�ł��܂����ł������A�������ݎ����g���ł����̂ÍA����4�‚̃A�v���[�`���Ƃ��Ă����Ǝv���܂��B�����̃A�C�f�A�������É����������A���͌����Řb���A���Íi���ۂ̎��ɂ��d�q�I�ɂ��j�f���������ÄA���̃v���Z�X���h�������J���Ԃ��B���͂��̎��̓���R�~���j�P�[�V�����łÍA���x�����������\���Éh�������Ȃ��Ǝv���܂��B���Ȃ��̃A�C�f�A�������Ɏ󂯓��������Ȃ��Ȃ��A���Ȃ��͗��_���Ă͂����܂����B�ނ��Ì����ɃG�l���M�[�𓊓������ê‡ï¿½A�N�����Ȃ��̂��߂ɂ������n�ゾ�Ƃ͎v���Ȃ��ł��傤�B -Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md similarity index 100% rename from jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md rename to jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md diff --git a/jp/README.md b/jp/README.md index 65b803b..c241f0e 100644 --- a/jp/README.md +++ b/jp/README.md @@ -91,7 +91,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](GLOSSARY.md) diff --git a/jp/SUMMARY.md b/jp/SUMMARY.md index 891aca3..b910ffe 100644 --- a/jp/SUMMARY.md +++ b/jp/SUMMARY.md @@ -72,7 +72,7 @@ * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) diff --git a/zh/3-Advanced/README.md b/zh/3-Advanced/README.md index f807863..bc276e8 100644 --- a/zh/3-Advanced/README.md +++ b/zh/3-Advanced/README.md @@ -17,6 +17,6 @@ - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [如何å‘展一个系统](Serving-Your-Team/07-How-to-Grow-a-System.md) - [如何有效地沟通](Serving-Your-Team/08-How-to-Communicate-Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index 7c1c315..08d6c6c 100644 --- a/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/zh/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -8,4 +8,4 @@ æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个 demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了精力,没有人会因此看低你。 -Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) +Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md similarity index 100% rename from zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md rename to zh/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md diff --git a/zh/README.md b/zh/README.md index 0241e3b..70e34cb 100644 --- a/zh/README.md +++ b/zh/README.md @@ -100,7 +100,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index 1406561..61bd7d7 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -77,7 +77,7 @@ - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) From 4194c74d67590c31e7b3098b40615556a1376ada Mon Sep 17 00:00:00 2001 From: aizak-vare Date: Sun, 17 Sep 2017 03:04:07 +0900 Subject: [PATCH 126/149] fixed missing Japanese characters --- .gitignore | 2 ++ .../Personal-Skills/01-Learn-To-Debug.md | 20 ++++++++-------- .../03-How-to-Remove-an-Error.md | 6 ++--- .../04-How-to-Debug-Using-a-Log.md | 12 +++++----- ...-How-to-Understand-Performance-Problems.md | 8 +++---- .../06-How-to-Fix-Performance-Problems.md | 10 ++++---- .../07-How-to-Optimize-Loops.md | 18 +++++++------- .../08-How-to-Deal-with-IO-Expense.md | 10 ++++---- .../09-How-to-Manage-Memory.md | 12 +++++----- .../10-How-to-Deal-with-Intermittent-Bugs.md | 14 +++++------ .../11-How-to-Learn-Design-Skills.md | 6 ++--- .../12-How-to-Conduct-Experiments.md | 24 +++++++++---------- .../01-Why-Estimation-is-Important.md | 12 +++++----- .../02-How-to-Estimate-Programming-Time.md | 18 +++++++------- .../03-How-to-Find-Out-Information.md | 16 ++++++------- ...o-Utilize-People-as-Information-Sources.md | 12 +++++----- .../Team-Skills/05-How-to-Document-Wisely.md | 22 ++++++++--------- .../06-How-to-Work-with-Poor-Code.md | 8 +++---- .../07-How-to-Use-Source-Code-Control.md | 6 ++--- .../Team-Skills/08-How-to-Unit-Test.md | 6 ++--- .../09-Take-Breaks-when-Stumped.md | 2 +- .../10-How-to-Recognize-When-to-Go-Home.md | 16 ++++++------- .../11-How-to-Deal-with-Difficult-People.md | 12 +++++----- ...adeoff-Quality-Against-Development-Time.md | 10 ++++---- ...ow-to-Manage-Software-System-Dependence.md | 12 +++++----- ...w-to-Decide-if-Software-is-Too-Immature.md | 24 +++++++++---------- .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 18 +++++++------- .../Judgment/05-How-to-Grow-Professionally.md | 8 +++---- .../06-How-to-Evaluate-Interviewees.md | 12 +++++----- ...ow-When-to-Apply-Fancy-Computer-Science.md | 14 +++++------ .../08-How-to-Talk-to-Non-Engineers.md | 16 ++++++------- .../01-How-to-Stay-Motivated.md | 14 +++++------ .../02-How-to-be-Widely-Trusted.md | 4 ++-- .../03-How-to-Tradeoff-Time-vs-Space.md | 12 +++++----- .../Personal-Skills/04-How-to-Stress-Test.md | 10 ++++---- ...-How-to-Balance-Brevity-and-Abstraction.md | 6 ++--- .../06-How-to-Learn-New-Skills.md | 10 ++++---- .../Personal-Skills/07-Learn-to-Type.md | 2 +- .../08-How-to-Do-Integration-Testing.md | 4 ++-- .../09-Communication-Languages.md | 8 +++---- .../Personal-Skills/10-Heavy-Tools.md | 16 ++++++------- .../Personal-Skills/11-How-to-analyze-data.md | 8 +++---- .../01-How-to-Manage-Development-Time.md | 8 +++---- ...ow-to-Manage-Third-Party-Software-Risks.md | 8 +++---- .../03-How-to-Manage-Consultants.md | 6 ++--- .../04-How-to-Communicate-the-Right-Amount.md | 4 ++-- ...-Disagree-Honestly-and-Get-Away-with-It.md | 8 +++---- .../01-How-to-Fight-Schedule-Pressure.md | 8 +++---- .../02-How-to-Understand-the-User.md | 16 ++++++------- .../03-How-to-Get-a-Promotion.md | 10 ++++---- .../01-How-to-Develop-Talent.md | 20 ++++++++-------- .../02-How-to-Choose-What-to-Work-On.md | 2 +- ...How-to-Get-the-Most-From-Your-Teammates.md | 12 +++++----- .../04-How-to-Divide-Problems-Up.md | 6 ++--- .../05-How-to-Handle-Boring-Tasks.md | 4 ++-- .../06-How-to-Gather-Support-for-a-Project.md | 2 +- .../07-How-to-Grow-a-System.md | 20 ++++++++-------- .../08-How-to-Communicate-Well.md | 10 ++++---- ...l-People-Things-They-Don't-Want-to-Hear.md | 9 +++++++ .../10-How-to-Deal-with-Managerial-Myths.md | 14 +++++------ ...1-How-to-Deal-with-Organizational-Chaos.md | 8 +++---- ...ow-to-Tell-the-Hard-From-the-Impossible.md | 6 ++--- .../02-How-to-Utilize-Embedded-Languages.md | 8 +++---- .../03-Choosing-Languages.md | 14 +++++------ jp/README.md | 12 +++++----- 65 files changed, 353 insertions(+), 342 deletions(-) create mode 100644 jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md diff --git a/.gitignore b/.gitignore index 4cb12d8..5f3f7ef 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ _book *.epub *.mobi *.pdf +/.vs/HowToBeAProgrammer/v15/.suo +/.vs/slnx.sqlite diff --git a/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index fe508d3..867820e 100644 --- a/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/jp/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -1,21 +1,21 @@ # Learn to Debug [//]: # (Version:1.0.0) -�f�o�b�O�̓v���O���}�ɂȂ邽�߂̊��b�ł��B���� "debug"�ÌÅ��̈Ӗ��̓G���[�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚ł����A���ۂÉd�v�ȈӖ��ÍA�v���O�����̎��s�𒲂ׂĒ��ׂ邱�Ƃł��B���ʓI�Ƀf�o�b�O�ł��Ȃ��v���O���}�[�͖ڂ������܂����B +ƒfƒoƒbƒO‚̓vƒƒOƒ‰ƒ}‚ɂȂ邽‚߂̊î‘b‚Å‚·B“®ŽŒ "debug"‚Ìʼn‚̈Ӗ¡‚̓Gƒ‰[‚ðŽæ‚èœ‚­‚±‚Ƃł·‚ªAŽÀÛ‚Éd—v‚ȈӖ¡‚ÍAƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚𒲂ׂDz‚ׂ邱‚Ƃł·BŒø‰Ê“I‚ɃfƒoƒbƒO‚Å‚«‚È‚¢ƒvƒƒOƒ‰ƒ}[‚Í–Ú‚ªŒ©‚¦‚Ü‚¹‚ñB -���z���`�ÒA�݌v�A���ÍA���G���̗��_�Ȃǂ��f�o�b�O���������{�I���Æl�����l�ÍA�v���O���}�[�𓭂����Ă��܂����B�����v���O���}�[�͗��z�I�È��E�ÉZ���ł��܂����B���Ȃ��������ł����Ă��A�����\�t�g�E�F�A���ÐAGNU�̂悤�ȑg�D�A�����т��Ȃ��̓����ɂ����Ä����ꂽ�R�[�h�Ɉ͂܂��Ă��Ȃ����΂Ȃ��܂����B���̃R�[�h�̂قƂ��ǂ͕s���S�ł����A�s���S�ɕ����������Ă��܂��B���̃R�[�h�̎��s�����������@�\���Ȃ����ÎA�킸���ȃo���v�͂��Ȃ����i���ɓ����̂Ă܂��B�����Ìê‡ï¿½A���̉Ž����͎����i�f�o�b�O�j�ɂ����Ă̂ݓ������܂��B +—‘zŽå‹`ŽÒAÝŒvA•ªÍA•¡ŽG‚³‚Ì—˜_‚ȂǂªƒfƒoƒbƒO‚æ‚è‚àŠî–{“I‚¾‚Æl‚¦‚él‚ÍAƒvƒƒOƒ‰ƒ}[‚ð“­‚©‚¹‚Ä‚¢‚Ü‚¹‚ñB“­‚­ƒvƒƒOƒ‰ƒ}[‚Í—‘z“I‚È¢ŠE‚ÉZ‚ñ‚Å‚¢‚Ü‚¹‚ñB‚ ‚È‚½‚ªŠ®àø‚Å‚ ‚Á‚Ä‚àA‘åŽèƒ\ƒtƒgƒEƒFƒA‰ïŽÐAGNU‚̂悤‚È‘gDA‚¨‚æ‚Ñ‚ ‚È‚½‚Ì“¯—»‚É‚æ‚Á‚Ä‘‚©‚ꂽƒR[ƒh‚Ɉ͂܂ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃R[ƒh‚̂قƂñ‚ǂ͕sŠ®‘S‚Å‚ ‚èA•sŠ®‘S‚É•¶‘‰»‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚̃R[ƒh‚ÌŽÀs‚ð‰ÂŽ‹‰»‚·‚é‹@”\‚ª‚È‚¯‚ê‚ÎA‚킸‚©‚ȃoƒ“ƒv‚Í‚ ‚È‚½‚ð‰i‰“‚ɓЂ°ŽÌ‚Ă܂·B‘½‚­‚Ìê‡A‚±‚̉Ž‹«‚ÍŽÀŒ±iƒfƒoƒbƒOj‚É‚æ‚Á‚Ă̂ݓ¾‚ç‚ê‚Ü‚·B -�f�o�b�O�ÍA�v���O�������̂��̂ł͂Ȃ��A�v���O�����̎��s�Ɋւ������̂ł��B���Ȃ��������\�t�g�E�F�A���Ђ��牽�����w�������ê‡ï¿½A�Ê��͂��̃v���O���������邱�Ƃ͂ł��܂����B�������A�R�[�h���h�L�������g�É������Ă��Ȃ��êŠï¿½i�}�V���S�̂��N���b�V�������邱�Ƃ͈��ʓI�ős���ȗ��ł��j���h�L�������e�[�V�������~���[�g���������êŠï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B�������ʓI�ɂÍA�G���[���ì¬ï¿½ï¿½ï¿½A�������ñ‚¾ƒR�[�h�𒲂×A�G���[���ǂ̂悤�ɔ��������”\���������̂�??�킩���܂����B�K�R�I�ÉA�����͂��Ȃ��������Ă����Ƃ����O�ñ‚ª‚��Ȃè³ï¿½ï¿½ï¿½ï¿½ï¿½È‚����ÆA���邢�͂��Ȃ����\�����Ă��Ȃ����Ԃ������������Ƃ��Ӗ����܂��B���ɂÍA�\�[�X�R�[�h�𒭂߂Ă��閂�@�����܂����삷�邱�Ƃ������܂��B�����łȂ��ê‡ï¿½ÍA�f�o�b�O�����K�v�������܂��B +ƒfƒoƒbƒO‚ÍAƒvƒƒOƒ‰ƒ€‚»‚Ì‚à‚̂ł͂Ȃ­AƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ÉŠÖ‚·‚é‚à‚̂ł·B‚ ‚È‚½‚ª‘åŽèƒ\ƒtƒgƒEƒFƒA‰ïŽÐ‚©‚牽‚©‚ðw“ü‚µ‚½ê‡A’Êí‚Í‚»‚̃vƒƒOƒ‰ƒ€‚ðŒ©‚é‚±‚Ƃ͂ł«‚Ü‚¹‚ñB‚µ‚©‚µAƒR[ƒh‚ªƒhƒLƒ…ƒƒ“ƒg‚É€‹’‚µ‚Ä‚¢‚È‚¢êŠiƒ}ƒVƒ“‘S‘Ì‚ðƒNƒ‰ƒbƒVƒ…‚³‚¹‚邱‚Ƃ͈ê”Ê“I‚Å‘s‘å‚È—á‚Å‚·j‚âƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ªƒ~ƒ…[ƒg‚³‚ê‚Ä‚¢‚éꊂª”­¶‚µ‚Ü‚·B‚æ‚èˆê”Ê“I‚É‚ÍAƒGƒ‰[‚ð쬂µA‘‚«ž‚ñ‚¾ƒR[ƒh‚𒲂×AƒGƒ‰[‚ª‚ǂ̂悤‚É”­¶‚·‚é‰Â”\«‚ª‚ ‚é‚Ì‚©??‚í‚©‚è‚Ü‚¹‚ñB•K‘R“I‚ÉA‚±‚ê‚Í‚ ‚È‚½‚ªì‚Á‚Ä‚¢‚邯‚¢‚¤‘O’ñ‚ª‚©‚Ȃ賂µ‚­‚È‚¢‚±‚ÆA‚ ‚é‚¢‚Í‚ ‚È‚½‚ª—\Šú‚µ‚Ä‚¢‚È‚¢ó‘Ô‚ª”­¶‚µ‚½‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·BŽž‚É‚ÍAƒ\[ƒXƒR[ƒh‚𒭂߂Ă¢‚é–‚–@‚ª‚¤‚Ü‚­“®ì‚·‚邱‚Æ‚à‚ ‚è‚Ü‚·B‚»‚¤‚łȂ¢ê‡‚ÍAƒfƒoƒbƒO‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�v���O�����̎��s���Ž��������ɂÍA�R�[�h�����s���Ă��̃R�[�h���ώ@�ł����K�v�������܂��B���ʂɕ\�������������ÌA�܂���2�‚̃C�x���g�Ԃ̒x���̂悤�ÉA���ꂪ�ڂɌ����邱�Ƃ������܂��B�����Ìê‡ï¿½A�R�[�h���̂����‚��̕Ï��Ì��ÔA���ۂɎ��s���������R�[�h�Ìs�A�܂��͕��G�ȃf�[�^�\���ɂ킽���ē����̃A�T�[�V�������ێ������Ă��邩�ǂ����ȂÇA�ڂɌ����Ȃ����̂��܂܂��܂��B�������̉B���ꂽ���͖̂��炩�ɂ����Ȃ����΂Ȃ��܂����B +ƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ð‰ÂŽ‹‰»‚·‚é‚É‚ÍAƒR[ƒh‚ðŽÀs‚µ‚Ä‚»‚̃R[ƒh‚ðŠÏŽ@‚Å‚«‚é•K—v‚ª‚ ‚è‚Ü‚·B‰æ–ʂɕ\ަ‚³‚ê‚Ä‚¢‚é‚à‚ÌA‚Ü‚½‚Í2‚‚̃Cƒxƒ“ƒgŠÔ‚Ì’x‰„‚̂悤‚ÉA‚±‚ꂪ–Ú‚ÉŒ©‚¦‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‘½‚­‚Ìê‡AƒR[ƒh“à‚Ì‚¢‚­‚‚©‚̕ϔ‚Ìó‘ÔAŽÀÛ‚ÉŽÀs‚³‚ê‚Ä‚¢‚éƒR[ƒh‚ÌsA‚Ü‚½‚Í•¡ŽG‚ȃf[ƒ^\‘¢‚ɂ킽‚Á‚Ä“Á’è‚̃AƒT[ƒVƒ‡ƒ“‚ª•ÛŽ‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚È‚ÇA–Ú‚ÉŒ©‚¦‚È‚¢‚à‚Ì‚ªŠÜ‚Ü‚ê‚Ü‚·B‚±‚ê‚ç‚̉B‚³‚ꂽ‚à‚͖̂¾‚ç‚©‚É‚³‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -���s�v���O������ "nnards"�𒲂ׂ����ʓI�ȕ��@�ÍA���̂悤�ɕ��ނł��܂��B +ŽÀsƒvƒƒOƒ‰ƒ€‚Ì "nnards"‚𒲂ׂéˆê”Ê“I‚È•û–@‚ÍAŽŸ‚̂悤‚É•ª—Þ‚Å‚«‚Ü‚·B -- �f�o�b�O�c�[�����g�p���ÄA -- Printlining - �v���O�������ꎞ�I�ɕÏX���܂��B�Ê��A�������o�͂����s���lj����܂��B -- ���M���O - �v���O�����̎��s�ɉi���I�ȃE�B���h�E�����O�̌`�Åì¬ï¿½ï¿½ï¿½Ü‚��B +- ƒfƒoƒbƒOƒc[ƒ‹‚ðŽg—p‚µ‚ÄA +- Printlining - ƒvƒƒOƒ‰ƒ€‚ðˆêŽž“I‚É•ÏX‚µ‚Ü‚·B’ÊíAî•ñ‚ðo—Í‚·‚és‚ð’ljÁ‚µ‚Ü‚·B +- ƒƒMƒ“ƒO - ƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚ɉi‘±“I‚ȃEƒBƒ“ƒhƒE‚ðƒƒO‚ÌŒ`‚Å쬂µ‚Ü‚·B -�f�o�b�M���O�c�[���ÍA���肵�ė��p�”\�Èê‡ï¿½Í‘f���炵���ł����A�������C�e�B���O�ƃ��M���O�͂����Éd�v�ł��B�f�o�b�O�c�[���͌����J���ɒx�����Ƃ邱�Ƃ��������ßA���‚ł����p�ł��Ȃ��”\���������܂��B�����ÉA�f�o�b�O�c�[���������Ƀv���O�����̎��s���@���ÏX�����”\�������邽�ßA�K���������ۓI�ł͂Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ÉA�傫�ȃf�[�^�\���ɑ΂����A�T�[�V�����̃`�F�b�N�A�R�[�h�̋L�q�A�v���O�����̎��s�̕ÏX�ȂÇA�����‚��̎��ނ̃f�o�b�O�������܂��B�f�o�b�O�c�[�������肵�Ă����Ƃ��Ƀf�o�b�O�c�[�����g�p�������@���m���Ă������Ƃ͗ǂ����Ƃł����A����2�‚̕��@���g�p�ł��邱�Ƃ��d�v�ł��B +ƒfƒoƒbƒMƒ“ƒOƒc[ƒ‹‚ÍAˆÀ’肵‚Ä—˜—p‰Â”\‚Èꇂ͑f°‚炵‚¢‚Å‚·‚ªAˆóüƒ‰ƒCƒeƒBƒ“ƒO‚ƃƒMƒ“ƒO‚Í‚³‚ç‚Éd—v‚Å‚·BƒfƒoƒbƒOƒc[ƒ‹‚ÍŒ¾ŒêŠJ”­‚É’x‚ê‚ð‚Æ‚é‚±‚Æ‚ª‘½‚¢‚½‚ßA‚¢‚Â‚Å‚à—˜—p‚Å‚«‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B‚³‚ç‚ÉAƒfƒoƒbƒOƒc[ƒ‹‚ª”÷–­‚ɃvƒƒOƒ‰ƒ€‚ÌŽÀs•û–@‚ð•ÏX‚·‚é‰Â”\«‚ª‚ ‚邽‚ßA•K‚¸‚µ‚àŽÀÛ“I‚ł͂Ȃ¢ê‡‚ª‚ ‚è‚Ü‚·BÅŒã‚ÉA‘å‚«‚ȃf[ƒ^\‘¢‚ɑ΂·‚éƒAƒT[ƒVƒ‡ƒ“‚̃`ƒFƒbƒNAƒR[ƒh‚Ì‹LqAƒvƒƒOƒ‰ƒ€‚ÌŽÀs‚Ì•ÏX‚È‚ÇA‚¢‚­‚‚©‚ÌŽí—ނ̃fƒoƒbƒO‚ª‚ ‚è‚Ü‚·BƒfƒoƒbƒOƒc[ƒ‹‚ªˆÀ’肵‚Ä‚¢‚邯‚«‚ɃfƒoƒbƒOƒc[ƒ‹‚ðŽg—p‚·‚é•û–@‚ð’m‚Á‚Ä‚¨‚­‚±‚Ƃ͗ǂ¢‚±‚Ƃł·‚ªA‘¼‚Ì2‚‚̕û–@‚ðŽg—p‚Å‚«‚邱‚Æ‚ªd—v‚Å‚·B -�����‚��Ì��S�҂ÍA�R�[�h���ÏX�����K�v�������Ƃ��Ƀf�o�b�O�������Ă��܂��B�����͗����ł��� - �����͒T���I���p�̂悤�Ȃ��̂ł��B�������A���Ȃ��̓R�[�h���˂��h���ăW�����v�����邱�Ƃ��w�΂Ȃ����΂Ȃ��܂����B���Ȃ��͂����������ÄA���Ȃ����ꎞ�I�És�����Ƃ͂������������������͉̂����Ȃ����Ƃð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��w�΂Ȃ����΂Ȃ��܂����B���̋��|���������ê‡ï¿½ÍA�����^�[���T�����������B���̋��|�ւ̕q���Ȏn�܂��ÅA�����̗D�ꂽ�v���O���}�[�������܂��B +‚¢‚­‚‚©‚̉SŽÒ‚ÍAƒR[ƒh‚ð•ÏX‚·‚é•K—v‚ª‚ ‚邯‚«‚ɃfƒoƒbƒO‚ð‹°‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚Í—‰ð‚Å‚«‚é - ‚»‚ê‚Í’Tõ“IŽèp‚̂悤‚È‚à‚̂ł·B‚µ‚©‚µA‚ ‚È‚½‚̓R[ƒh‚ð“Ë‚«Žh‚µ‚ăWƒƒƒ“ƒv‚³‚¹‚邱‚Æ‚ðŠw‚΂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ðŽŽ‚µ‚ÄA‚ ‚È‚½‚ªˆêŽž“I‚És‚¤‚±‚Ƃ͂»‚ê‚ðˆ«‰»‚³‚¹‚é‚à‚͉̂½‚à‚È‚¢‚±‚Æ‚ð—‰ð‚·‚邱‚Æ‚ðŠw‚΂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚Ì‹°•|‚ðŠ´‚¶‚éꇂÍAƒƒ“ƒ^[‚ð’T‚µ‚Ä‚­‚¾‚³‚¢B‚±‚Ì‹°•|‚Ö‚Ì•qŠ´‚ÈŽn‚Ü‚è‚ÅA‘½‚­‚Ì—D‚ꂽƒvƒƒOƒ‰ƒ}[‚ðŽ¸‚¢‚Ü‚·B Next [How to Debug by Splitting the Problem Space](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index a5eb073..7e353dc 100644 --- a/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/jp/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -1,9 +1,9 @@ # How to Remove an Error [//]: # (Version:1.0.0) -���͈Ó}�I�Ƀv���O�����̎��s���G���[���C�������s�ׂ��璲�ׂ��Ƃ����s�ׂ𕪂����B���������A�f�o�b�O�̓o�O�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��Ӗ����܂��B���z�I�ɂÍA�R�[�h�����S�ɗ������A�G���[�����S�ɕ\�������A�C���������@�������u�n�n�I�v�Ìu�Ԃɓ��B���܂��B�������A���Ȃ��̃v���O�����łÍA�Ž����̂Ȃ����������ꂽ�V�X�e�����g�p���邱�Ƃ��������ßA�K�����������ł����Ƃ͌����܂����B���̃P�[�X�łÍA�R�[�h�����G�ł��邽�ßA���������S�ł͂����܂����B +Ž„‚͈Ó}“I‚ɃvƒƒOƒ‰ƒ€‚ÌŽÀs‚ðƒGƒ‰[‚ðC³‚·‚ésˆ×‚©‚ç’²‚ׂ邯‚¢‚¤sˆ×‚𕪂¯‚½B‚à‚¿‚ë‚ñAƒfƒoƒbƒO‚̓oƒO‚ðŽæ‚èœ‚­‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B—‘z“I‚É‚ÍAƒR[ƒh‚ðŠ®‘S‚É—‰ð‚µAƒGƒ‰[‚ªŠ®‘S‚É•\ަ‚³‚êAC³‚·‚é•û–@‚ðŽ¦‚·uƒnƒnIv‚ÌuŠÔ‚É“ž’B‚µ‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚Å‚ÍA‰ÂŽ‹«‚̂Ȃ¢•¶‘‰»‚³‚ꂽƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‘½‚¢‚½‚ßA•K‚¸‚µ‚à‚»‚¤‚Å‚ ‚邯‚ÍŒÀ‚è‚Ü‚¹‚ñB‘¼‚̃P[ƒX‚Å‚ÍAƒR[ƒh‚ª•¡ŽG‚Å‚ ‚邽‚ßA—‰ð‚ªŠ®‘S‚ł͂ ‚è‚Ü‚¹‚ñB -�o�O���C�������ɂÍA�o�O���C�������Å����̕ÏX�����������Æl���Ă��܂��B���Ȃ��͉��P���K�v�ȑ��̂��̂����邩�������܂����B�����ɂ��������C�����Ȃ��ł��������B���x�Ɉ��‚̂��ÆA�������‚̎����ς����Ȋw�I���@���̗p���悤�Ƃ����B���̂��߂Ìŗǂ̃v���Z�X�ÍA�o�O���ȒP�É����A�C���v���O�������K�p�������v���O���������s���A�o�O�����݂��Ȃ��Ȃ������Ƃ��m�F���邱�Ƃł��B���������A���ɂ͕����Ìs���ÏX�����K�v�����邩�������܂��ñ‚ªA�o�O���C�����邽�߂ɊT�O�I��1�‚̃A�g�~�b�N�ȕÏX���K�p�����K�v�������܂��B +ƒoƒO‚ðC³‚·‚é‚É‚ÍAƒoƒO‚ðC³‚·‚éŬŒÀ‚Ì•ÏX‚ð‰Á‚¦‚½‚¢‚Æl‚¦‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚͉ü‘P‚ª•K—v‚È‘¼‚Ì‚à‚Ì‚ðŒ©‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB“¯Žž‚É‚»‚ê‚ç‚ðC³‚µ‚È‚¢‚Å‚­‚¾‚³‚¢Bˆê“x‚Ɉê‚‚̂±‚ÆA‚½‚¾ˆê‚‚̎–‚ð•Ï‚¦‚é‰ÈŠw“I•û–@‚ðÌ—p‚µ‚悤‚Æ‚·‚éB‚±‚Ì‚½‚ß‚Ìŗǂ̃vƒƒZƒX‚ÍAƒoƒO‚ðŠÈ’P‚ÉÄŒ»‚µAC³ƒvƒƒOƒ‰ƒ€‚ð“K—p‚µ‚Ä‚©‚çƒvƒƒOƒ‰ƒ€‚ðÄŽÀs‚µAƒoƒO‚ª‘¶Ý‚µ‚È‚­‚È‚Á‚½‚±‚Æ‚ðŠm”F‚·‚邱‚Ƃł·B‚à‚¿‚ë‚ñAŽž‚ɂ͕¡”‚Ìs‚ð•ÏX‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒoƒO‚ðC³‚·‚邽‚߂ɊT”O“I‚É1‚‚̃Aƒgƒ~ƒbƒN‚È•ÏX‚ð“K—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -���ɂÍA���ۂɂ�1�‚̂悤�Ɍ����邢���‚��̃o�O�������܂��B�o�O�����`���Ĉ��x�ÉC�������̂͂��Ȃ������ł��B���X�A�v���O�������������ׂ����A�܂��͌��̒��҂��Ó}�������̂��s���ł����B���Ìê‡ï¿½A���Ȃ��͎����̌o���Ɣ��f���s���A�R�[�h�Ɏ����̈Ӗ������蓖�Ă��K�v�������܂��B�������ׂ��������肵�A�R�����g�������A���炩�̕��@�ł����𖾊m�ɂ����肵�ÄA�R�[�h�����Ȃ��̈Ӗ��ɓK�������܂��B�����ÍA�Å��ÌêŠï¿½ÉŒï¿½ï¿½ÌŠÖ����������������ɂ͓�������܂��Í㋉�̃X�L���ł����A���ۂÌ��E�͂��΂��Ζʓ|�ł��B�����������ł��Ȃ��V�X�e�����C�������K�v�����邩�������܂����B +Žž‚É‚ÍAŽÀÛ‚É‚Í1‚‚̂悤‚ÉŒ©‚¦‚é‚¢‚­‚‚©‚̃oƒO‚ª‚ ‚è‚Ü‚·BƒoƒO‚ð’è‹`‚µ‚Ĉê“x‚ÉC³‚·‚é‚̂͂ ‚È‚½ŽŸ‘æ‚Å‚·BŽžXAƒvƒƒOƒ‰ƒ€‚ª‰½‚ð‚·‚×‚«‚©A‚Ü‚½‚ÍŒ³‚Ì’˜ŽÒ‚ªˆÓ}‚µ‚½‚à‚Ì‚ª•s–¾‚Å‚ ‚éB‚±‚Ìê‡A‚ ‚È‚½‚ÍŽ©•ª‚ÌŒoŒ±‚Æ”»’f‚ðs‚¢AƒR[ƒh‚ÉŽ©•ª‚̈Ӗ¡‚ðŠ„‚è“–‚Ä‚é•K—v‚ª‚ ‚è‚Ü‚·B‰½‚ð‚·‚×‚«‚©‚ðŒˆ’è‚µAƒRƒƒ“ƒg‚µ‚½‚èA‰½‚ç‚©‚Ì•û–@‚Å‚»‚ê‚𖾊m‚É‚µ‚½‚肵‚ÄAƒR[ƒh‚ð‚ ‚È‚½‚̈Ӗ¡‚É“K‡‚³‚¹‚Ü‚·B‚±‚ê‚ÍAʼn‚ÌꊂɌ³‚ÌŠÖ”‚ð‘‚­‚æ‚è‚àŽž‚ɂ͓‚¢’†‹‰‚Ü‚½‚Í㋉‚̃XƒLƒ‹‚Å‚·‚ªAŽÀÛ‚Ì¢ŠE‚Í‚µ‚΂µ‚Ζʓ|‚Å‚·B‘‚«Š·‚¦‚ª‚Å‚«‚È‚¢ƒVƒXƒeƒ€‚ðC³‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB Next [How to Debug Using a Log](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 9f4b74a..e02f3e4 100644 --- a/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/jp/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -1,12 +1,12 @@ # How to Debug Using a Log [//]: # (Version:1.0.0) -*���M���O*�ÍA���O�ƌĂ΂������A�̗L�v�ȃ��R�[�h�ð¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½æ‚¤ï¿½ÉƒV�X�e�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½@�ł��B * Printlining *�͒P���ÈA�Ê��͈ꎞ�I�ȃ��O�ð¶ï¿½ï¿½ï¿½ï¿½Ä‚��܂��B�v���O���~���O�̒m�����������Ă��邽�ßA���Î��S�҂̓��O�ð—‰ï¿½ï¿½ï¿½ï¿½ÄŽg�p�����K�v�������܂��B�V�X�e���݌v�҂ÍA�V�X�e���̕��G���̂��߃��O�ð—‰ï¿½ï¿½ï¿½ï¿½ÄŽg�p�����K�v�������܂��B���O�ɂ����Ēñ‹Ÿ‚����������̗ʂÍA�v���O���������s�����Ă����Ԃ͗��z�I�É\���”\�łȂ����΂Ȃ��܂����B���ʂÉA���O�ɂ�3�‚̊��{�I�ȗ��_�������܂��B +*ƒƒMƒ“ƒO*‚ÍAƒƒO‚ƌĂ΂ê‚éˆê˜A‚Ì—L‰v‚ȃŒƒR[ƒh‚𶬂·‚邿‚¤‚ɃVƒXƒeƒ€‚ð쬂·‚é•û–@‚Å‚·B * Printlining *‚Í’Pƒ‚ÈA’Êí‚͈ꎞ“I‚ȃƒO‚𶬂µ‚Ä‚¢‚Ü‚·BƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì’mޝ‚ªŒÀ‚ç‚ê‚Ä‚¢‚邽‚ßAâ‘ΉSŽÒ‚̓ƒO‚ð—‰ð‚µ‚ÄŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒVƒXƒeƒ€ÝŒvŽÒ‚ÍAƒVƒXƒeƒ€‚Ì•¡ŽG‚³‚Ì‚½‚߃ƒO‚ð—‰ð‚µ‚ÄŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒƒO‚É‚æ‚Á‚Ä’ñ‹Ÿ‚³‚ê‚éî•ñ‚Ì—Ê‚ÍAƒvƒƒOƒ‰ƒ€‚ªŽÀs‚³‚ê‚Ä‚¢‚éŠÔ‚Í—‘z“I‚É\¬‰Â”\‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñBˆê”Ê‚ÉAƒƒO‚É‚Í3‚‚̊î–{“I‚È—˜“_‚ª‚ ‚è‚Ü‚·B -- ���O�ÍA�Č������̂�����o�O�i�v���_�N�V�����‹��Ŕ����������̂ÌA�e�X�g�‹��łÍČ��ł��Ȃ��o�O�ȂÇj�Ɋւ����L�p�È������ñ‹Ÿ‚��܂��B -- ���O�ÍA�X�e�[�g�����g�Ԃ̎��Ԃ̌o�߂ȂÇA�p�t�H�[�}���X�Ɋ֘A���é“�v�����уf�[�^���ñ‹Ÿ‚ł��܂��B -- �\���”\�Èê‡ï¿½A���O�͈��ʓI�È������L���v�`�����ÄA�����̖������������邽�߂����ɃR�[�h���C��������/�܂��Íăf�v���C���邱�ƂȂ��A�\�����Ȃ������̖������f�o�b�O���邱�Ƃ��ł��܂��B +- ƒƒO‚ÍAÄŒ»‚·‚é‚Ì‚ª“‚¢ƒoƒOiƒvƒƒ_ƒNƒVƒ‡ƒ“ŠÂ‹«‚Å”­¶‚·‚é‚à‚Ì‚ÌAƒeƒXƒgŠÂ‹«‚Å‚ÍÄŒ»‚Å‚«‚È‚¢ƒoƒO‚È‚Çj‚ÉŠÖ‚·‚é—L—p‚Èî•ñ‚ð’ñ‹Ÿ‚µ‚Ü‚·B +- ƒƒO‚ÍAƒXƒe[ƒgƒƒ“ƒgŠÔ‚ÌŽžŠÔ‚ÌŒo‰ß‚È‚ÇAƒpƒtƒH[ƒ}ƒ“ƒX‚ÉŠÖ˜A‚·‚铌v‚¨‚æ‚уf[ƒ^‚ð’ñ‹Ÿ‚Å‚«‚Ü‚·B +- \¬‰Â”\‚Èê‡AƒƒO‚͈ê”Ê“I‚Èî•ñ‚ðƒLƒƒƒvƒ`ƒƒ‚µ‚ÄA“Á’è‚Ì–â‘è‚ðˆ—‚·‚邽‚ß‚¾‚¯‚ɃR[ƒh‚ðC³‚¨‚æ‚Ñ/‚Ü‚½‚ÍăfƒvƒƒC‚·‚邱‚ƂȂ­A—\Šú‚µ‚È‚¢“Á’è‚Ì–â‘è‚ðƒfƒoƒbƒO‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -���O�Éo�͂����ʂÍA�����ƊȌ����̊Ԃ̑Ë��_�ł��B���ñ‚ª‘��������ƃ��O�������ɂȂ��A*�X�N���[���u���C���h*���������A�K�v�È��������‚��邱�Ƃ�����Ȃ��܂��B���ñ‚ªï¿½ï¿½È‚����A�K�v�È��ñ‚ªŠÜ‚܂��Ă��Ȃ��”\���������܂��B���̂��ßA�o�͂��\���”\�ɂ��邱�Ƃ͔����ɕ֗��ł��B�Ê��A���O���̊e���R�[�h�ÍA�\�[�X�R�[�h���̈ʒu�A���s�”\�Èê‡ï¿½Í‚��������s�����X���b�h�A���s�Ì��m�Ȏ����A�����ш��ʓI�ÉA�Ï��̒l�A�f�[�^�I�u�W�F�N�g�Ì��Ȃǂ��܂܂��܂��B�������̃��O�X�e�[�g�����g�ÍA�\�[�X�R�[�h�S�̂ɂ킽���ÄA���Ɏ��v�@�\�_���댯�ȃR�[�h�̎����ɎU�݂��Ă��܂��B�e�X�e�[�g�����g�Ƀ��x�������蓖�Ă邱�Ƃ��ł��A�V�X�e�������݂��̃��x�����o�͂����悤�Éݒ肳���Ă����ê‡ï¿½É‚̂݃��R�[�h���o�͂��܂��B�\�z�����������ɑÎ����邽�߂ÉA���O�X�e�[�g�����g���݌v�����K�v�������܂��B�p�t�H�[�}���X�𑪒肷���K�v�����\�����܂��B +ƒƒO‚Éo—Í‚·‚é—Ê‚ÍAî•ñ‚ÆŠÈŒ‰‚³‚̊Ԃ̑˦“_‚Å‚·Bî•ñ‚ª‘½‚·‚¬‚邯ƒƒO‚ª‚‰¿‚ɂȂèA*ƒXƒNƒ[ƒ‹ƒuƒ‰ƒCƒ“ƒh*‚ª”­¶‚µA•K—v‚Èî•ñ‚ðŒ©‚Â‚¯‚邱‚Æ‚ª“‚­‚È‚è‚Ü‚·Bî•ñ‚ª­‚È‚·‚¬A•K—v‚Èî•ñ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·B‚±‚Ì‚½‚ßAo—Í‚ð\¬‰Â”\‚É‚·‚邱‚Ƃ͔ñí‚ɕ֗˜‚Å‚·B’ÊíAƒƒO“à‚ÌŠeƒŒƒR[ƒh‚ÍAƒ\[ƒXƒR[ƒh“à‚̈ʒuAŽÀs‰Â”\‚Èꇂ͂»‚ê‚ðŽÀs‚µ‚½ƒXƒŒƒbƒhAŽÀs‚̳Šm‚ÈŽžA‚¨‚æ‚шê”Ê“I‚ÉA•Ï”‚Ì’lAƒf[ƒ^ƒIƒuƒWƒFƒNƒg‚Ì”‚ȂǂªŠÜ‚Ü‚ê‚Ü‚·B‚±‚ê‚ç‚̃ƒOƒXƒe[ƒgƒƒ“ƒg‚ÍAƒ\[ƒXƒR[ƒh‘S‘̂ɂ킽‚Á‚ÄA“Á‚ÉŽå—v‹@”\“_‚âŠëŒ¯‚ȃR[ƒh‚ÌŽü‚è‚ÉŽUÝ‚µ‚Ä‚¢‚Ü‚·BŠeƒXƒe[ƒgƒƒ“ƒg‚ɃŒƒxƒ‹‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«AƒVƒXƒeƒ€‚ªŒ»Ý‚»‚̃Œƒxƒ‹‚ðo—Í‚·‚邿‚¤‚Éݒ肳‚ê‚Ä‚¢‚éꇂɂ̂݃ŒƒR[ƒh‚ðo—Í‚µ‚Ü‚·B—\‘z‚³‚ê‚é–â‘è‚ɑΈ‚·‚邽‚ß‚ÉAƒƒOƒXƒe[ƒgƒƒ“ƒg‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒpƒtƒH[ƒ}ƒ“ƒX‚𑪒肷‚é•K—v«‚ð—\Šú‚µ‚Ü‚·B -�i���I�ȃ��O�������ê‡ï¿½ÍA���O���R�[�h�Ɋւ��Ĉ������C�������s�ł����悤�ɂȂ��A�ꕔ�̃f�o�b�O�������M���O�V�X�e���ɉi�v�ɒlj��������”\���������܂��B +‰i‘±“I‚ȃƒO‚ª‚ ‚éꇂÍAƒƒOƒŒƒR[ƒh‚ÉŠÖ‚µ‚Ĉóüƒ‰ƒCƒ“‚ðŽÀs‚Å‚«‚邿‚¤‚ɂȂèAˆê•”‚̃fƒoƒbƒO•¶‚ªƒƒMƒ“ƒOƒVƒXƒeƒ€‚ɉi‹v‚ɒljÁ‚³‚ê‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B Next [How to Understand Performance Problems](05-How-to-Understand-Performance-Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index 9e9ca82..156ff77 100644 --- a/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/jp/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -1,11 +1,11 @@ # How to Understand Performance Problems [//]: # (Version:1.0.0) -���s���̃V�X�e���̃p�t�H�[�}���X�ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ÍA�f�o�b�O���w�K�����̂Ɠ������R�������������܂����B���Ȃ����������R�[�h�̃R�X�g�����S�É��m�ɗ������Ă��Ă��A���Ȃ��̃R�[�h�ÍA���Ȃ����قƂ��Ç����ł��Ȃ����Ž��ł��鑼�̃\�t�g�E�F�A�V�X�e�����ĂÑo���ł��傤�B�������A���ۂɂÍA�p�t�H�[�}���X�̖����͈��ʓI�Ƀf�o�b�O�����������قȂ��A�����ȒP�ł��B +ŽÀs’†‚̃VƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ð—‰ð‚·‚邱‚Æ‚ÍAƒfƒoƒbƒO‚ðŠwK‚·‚é‚̂Ɠ¯‚¶——R‚©‚ç”ð‚¯‚ç‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚ª‘‚¢‚½ƒR[ƒh‚̃RƒXƒg‚ðŠ®‘S‚ɳŠm‚É—‰ð‚µ‚Ä‚¢‚Ä‚àA‚ ‚È‚½‚̃R[ƒh‚ÍA‚ ‚È‚½‚ª‚Ù‚Æ‚ñ‚ǧŒä‚Å‚«‚È‚¢‚©‰ÂŽ‹‚Å‚ ‚鑼‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðŒÄ‚Ño‚·‚Å‚µ‚傤B‚µ‚©‚µAŽÀÛ‚É‚ÍAƒpƒtƒH[ƒ}ƒ“ƒX‚Ì–â‘è‚͈ê”Ê“I‚ɃfƒoƒbƒO‚æ‚è‚à­‚µˆÙ‚È‚èA­‚µŠÈ’P‚Å‚·B -���Ȃ��₠�Ȃ��̌ڋq���A�V�X�e�����T�u�V�X�e���̑��x���x�������Æl���Ă����Ƃ��܂��B�������悤�Ƃ����O�ÉA�Ȃ����ꂪ�x���̂��Ì��_���f�����\�z�����K�v�������܂��B�������s���ɂÍA�v���t�@�C�����O�c�[���܂��͓K�؂ȃ��O���g�p���ÄA���Ԃ₻�̑��̃��\�[�X�����ۂɔ��₳���Ă����êŠï¿½ï¿½ï¿½ï¿½ï¿½è‚µï¿½Ü‚��B���̎��Ԃ�90�����R�[�h��10���ɔ��₳�����Ƃ����L���Ȍ��t�������܂��B���͂����Ƀp�t�H�[�}���X�̖����ɑ΂������o�͔��p�iI / O�j�Ìd�v�����lj����܂��B�����Ìê‡ï¿½A�قƂ��ǂÌê‡ï¿½AI / O�͂����Ӗ��Ŕ��₳���܂��B������I / O�ƃR�[�h�Ì�����10�������‚��邱�ƂÍA���Ȃ��̃����^�����f�����\�z���邽�߂̑������ł��B +‚ ‚È‚½‚â‚ ‚È‚½‚̌ڋq‚ªAƒVƒXƒeƒ€‚âƒTƒuƒVƒXƒeƒ€‚Ì‘¬“x‚ª’x‚·‚¬‚邯l‚¦‚Ä‚¢‚邯‚µ‚Ü‚·B‘¬‚­‚µ‚悤‚Æ‚·‚é‘O‚ÉA‚È‚º‚»‚ꂪ’x‚¢‚Ì‚©‚̸_ƒ‚ƒfƒ‹‚ð\’z‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ðs‚¤‚É‚ÍAƒvƒƒtƒ@ƒCƒŠƒ“ƒOƒc[ƒ‹‚Ü‚½‚Í“K؂ȃƒO‚ðŽg—p‚µ‚ÄAŽžŠÔ‚â‚»‚Ì‘¼‚ÌƒŠƒ\[ƒX‚ªŽÀÛ‚É”ï‚₳‚ê‚Ä‚¢‚éꊂð“Á’肵‚Ü‚·B‚»‚ÌŽžŠÔ‚Ì90“‚ªƒR[ƒh‚Ì10“‚É”ï‚₳‚ê‚邯‚¢‚¤—L–¼‚ÈŒ¾—t‚ª‚ ‚è‚Ü‚·BŽ„‚Í‚»‚ê‚ɃpƒtƒH[ƒ}ƒ“ƒX‚Ì–â‘è‚ɑ΂·‚é“üo—Í”ï—piI / Oj‚Ìd—v«‚ð’ljÁ‚µ‚Ü‚·B‘½‚­‚Ìê‡A‚Ù‚Æ‚ñ‚Ç‚Ìê‡AI / O‚Í‚ ‚éˆÓ–¡‚Å”ï‚₳‚ê‚Ü‚·B‚‰¿‚ÈI / O‚ƃR[ƒh‚Ì‚‰¿‚È10“‚ðŒ©‚Â‚¯‚邱‚Æ‚ÍA‚ ‚È‚½‚̃ƒ“ƒ^ƒ‹ƒ‚ƒfƒ‹‚ð\’z‚·‚邽‚߂̑æˆê•à‚Å‚·B -�R���s���[�^�V�X�e���Ì��\�ɂ͑����̎����������A�����̃��\�[�X��������܂��B���肷���Å��̃��\�[�X�ÍA* wall-clock time *�ł��B�����ÍA�v�Z�ɕK�v�È��v���Ԃł��B���M���O*�E�H�[���N���b�N����*�ÍA���̃v���t�@�C�����O�����p�I�łȂ��󋵂ŋN�����\���s�”\�È󋵂ɂ‚��Ēʒm�ł��邽�ßA���Éd�v�ł��B�������A�����͕K�������摜�S�̂��\���Ƃ͌����Ȃ��B�ê‡ï¿½É‚����ĂÍ������Ԃ��������܂����A���ۂÉ������Ȃ����΂Ȃ��Ȃ��R���s���[�e�B���O�‹��łÍA�����ɑ����̃v���Z�b�T�b����������̂͂����Ɨǂ��ł��傤�B���l�ÉA�������[�A�l�b�g���[�N�шæ•�A�f�[�^�x�[�X�܂��͑��̃T�[�o�[�ւ̃A�N�Z�X�ÍA�ÅI�I�Ƀv���Z�b�T�b�������͂邩�É����ɂȂ��”\���������܂��B +ƒRƒ“ƒsƒ…[ƒ^ƒVƒXƒeƒ€‚Ì«”\‚ɂ͑½‚­‚ÌŽŸŒ³‚ª‚ ‚èA‘½‚­‚ÌƒŠƒ\[ƒX‚ªÁ”‚ê‚Ü‚·B‘ª’è‚·‚éʼn‚ÌƒŠƒ\[ƒX‚ÍA* wall-clock time *‚Å‚·B‚±‚ê‚ÍAŒvŽZ‚É•K—v‚ȇŒvŽžŠÔ‚Å‚·BƒƒMƒ“ƒO*ƒEƒH[ƒ‹ƒNƒƒbƒNŽžŠÔ*‚ÍA‘¼‚̃vƒƒtƒ@ƒCƒŠƒ“ƒO‚ªŽÀ—p“I‚łȂ¢ó‹µ‚Å‹N‚±‚é—\‘ª•s‰Â”\‚È󋵂ɂ‚¢‚Ä’Ê’m‚Å‚«‚邽‚ßA“Á‚Éd—v‚Å‚·B‚µ‚©‚µA‚±‚ê‚Í•K‚¸‚µ‚à‰æ‘œ‘S‘Ì‚ð•\‚·‚Ƃ͌À‚ç‚È‚¢Bꇂɂæ‚Á‚Ăͭ‚µŽžŠÔ‚ª‚©‚©‚è‚Ü‚·‚ªAŽÀۂɈ—‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ƒRƒ“ƒsƒ…[ƒeƒBƒ“ƒOŠÂ‹«‚Å‚ÍA”ñí‚É‘½‚­‚̃vƒƒZƒbƒT•b‚ðÁ”ï‚·‚é‚à‚̂͂¸‚Á‚Æ—Ç‚¢‚Å‚µ‚傤B“¯—l‚ÉAƒƒ‚ƒŠ[Aƒlƒbƒgƒ[ƒN‘шæ•Aƒf[ƒ^ƒx[ƒX‚Ü‚½‚Í‘¼‚̃T[ƒo[‚ւ̃AƒNƒZƒX‚ÍAÅI“I‚ɃvƒƒZƒbƒT•b‚æ‚è‚à‚͂邩‚É‚‰¿‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·B -���������ꂽ���L���\�[�X�̋����ÍA�f�b�h���b�N�ƋQ���������N�����”\���������܂��B�f�b�h���b�N�ÍA�s�K�؂ȓ����⃊�\�[�X�v���̂��߂É����ł��Ȃ����Ƃł��B�Q���ƂÍA�R���|�[�l���g���K�؂ɃX�P�W���[�����邱�Ƃł͂����܂����B���ꂪ���ׂĊ��҂ł����ê‡ï¿½ÍA�v���W�F�N�g�̊J�n�����炱�̋����𑪒肷�����@�����邱�Ƃ��őP�ł��B���̋������N�����Ȃ��Ă��A���������M�������ĕ\���ł��邱�Ƃ͔����ɗL�p�ł��B +“¯Šú‰»‚³‚ꂽ‹¤—LƒŠƒ\[ƒX‚Ì‹£‡‚ÍAƒfƒbƒhƒƒbƒN‚Æ‹Q‰ì‚ðˆø‚«‹N‚±‚·‰Â”\«‚ª‚ ‚è‚Ü‚·BƒfƒbƒhƒƒbƒN‚ÍA•s“K؂ȓ¯Šú‚⃊ƒ\[ƒX—v‹‚Ì‚½‚߂Ɉ—‚Å‚«‚È‚¢‚±‚Ƃł·B‹Q‰ì‚Æ‚ÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚ð“K؂ɃXƒPƒWƒ…[ƒ‹‚·‚邱‚Ƃł͂ ‚è‚Ü‚¹‚ñB‚»‚ꂪ‚·‚ׂĊú‘Ò‚Å‚«‚éꇂÍAƒvƒƒWƒFƒNƒg‚ÌŠJŽnŽž‚©‚炱‚Ì‹£‡‚𑪒肷‚é•û–@‚ª‚ ‚邱‚Æ‚ªÅ‘P‚Å‚·B‚±‚Ì‹£‡‚ª‹N‚±‚ç‚È‚­‚Ä‚àA‚»‚ê‚ðŽ©M‚ð‚à‚Á‚Ä•\–¾‚Å‚«‚邱‚Ƃ͔ñí‚É—L—p‚Å‚·B Next [How to Fix Performance Problems](06-How-to-Fix-Performance-Problems.md) diff --git a/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index fb1c93f..a648693 100644 --- a/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/jp/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -1,12 +1,12 @@ # How to Fix Performance Problems [//]: # (Version:1.0.0) -�قƂ��ǂ̃\�t�g�E�F�A�v���W�F�N�g�ÍA�Å��Ƀ����[�X���ꂽ�Ƃ�������10?100�{�̑��x�Ŕ��r�I�ȒP�Éì¬ï¿½Å‚��܂��B�s�꓊���܂ł̎��Ԃ𔗂����钆�ÅA�P�����Âv���É��Ƃ��s���\�����[�V�������I�����邱�ƂÍA�����Ō��ʓI�ł����A���̃\�����[�V�������������I�ł͂����܂����B�������A�p�t�H�[�}���X�̓��[�U�r���e�B�̈ꕔ�ł����A���΂��ÎÅI�I�ɂ͂����T�d�Ɍ��������K�v�������܂��B +‚Ù‚Æ‚ñ‚ǂ̃\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ÍAʼn‚ÉƒŠƒŠ[ƒX‚³‚ꂽ‚Æ‚«‚æ‚è‚à10?100”{‚Ì‘¬“x‚Å”äŠr“IŠÈ’P‚É쬂ł«‚Ü‚·BŽs꓊“ü‚܂ł̎žŠÔ‚ð”—‚ç‚ê‚é’†‚ÅA’Pƒ‚©‚Âv‘¬‚Éì‹Æ‚ðs‚¤ƒ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð‘I‘ð‚·‚é‚±‚Æ‚ÍAŒ«–¾‚ÅŒø‰Ê“I‚Å‚·‚ªA‘¼‚̃\ƒŠƒ…[ƒVƒ‡ƒ“‚æ‚èŒø—¦“I‚ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAƒpƒtƒH[ƒ}ƒ“ƒX‚̓†[ƒUƒrƒŠƒeƒB‚̈ꕔ‚Å‚ ‚èA‚µ‚΂µ‚ÎÅI“I‚ɂ͂æ‚èTd‚ÉŒŸ“¢‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�����ɕ��G�ȃV�X�e���̃p�t�H�[�}���X�����コ���邽�߂̌��ÍA�{�g���l�b�N*�⃊�\�[�X�̑啔������������êŠï¿½ï¿½ï¿½ï¿½ï¿½Â‚����̂É\���ɕ��͂��邱�Ƃł��B�v�Z���Ԃ̂킸��1�������߂��Ö��ÌÅ“K���ɂ͂��܂��Ӗ��������܂����B�o�����Ƃ��ÄA�V�X�e�����V�X�e���Ìd�v�ȕ��������Ȃ��Ƃ�2�{���������Ǝv���Ȃ������A�����������O�ÉT�d�Él�����K�v�������܂��B�Ê킱�����s�����@�������܂��B�ÏX�ɕK�v�ȃe�X�g�ƕiï¿½ï¿½ï¿½ÛØ‚Ì“w�͂��������Ă��������B���ꂼ���̕ÏX�ɂ����ăe�X�g�̕��S���������܂��̂ÅA�����‚��̑傫�ȕÏX�������������͂邩�ɗD���Ă��܂��B +”ñí‚É•¡ŽG‚ȃVƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ðŒüコ‚¹‚邽‚߂̌®‚ÍAƒ{ƒgƒ‹ƒlƒbƒN*‚⃊ƒ\[ƒX‚̑啔•ª‚ªÁ”‚ê‚éêŠ‚ðŒ©‚Â‚¯‚é‚Ì‚É\•ª‚É•ªÍ‚·‚邱‚Ƃł·BŒvŽZŽžŠÔ‚̂킸‚©1“‚ðè‚ß‚éŠÖ”‚ÌÅ“K‰»‚ɂ͂ ‚Ü‚èˆÓ–¡‚ª‚ ‚è‚Ü‚¹‚ñBŒoŒ±‘¥‚Æ‚µ‚ÄAƒVƒXƒeƒ€‚âƒVƒXƒeƒ€‚Ìd—v‚È•”•ª‚ð­‚È‚­‚Æ‚à2”{‘¬‚­‚·‚邯Žv‚í‚È‚¢ŒÀ‚èA‰½‚©‚ð‚·‚é‘O‚ÉTd‚Él‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B’Ê킱‚ê‚ðs‚¤•û–@‚ª‚ ‚è‚Ü‚·B•ÏX‚É•K—v‚ȃeƒXƒg‚Æ•iŽ¿•ÛØ‚Ì“w—Í‚ðŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B‚»‚ꂼ‚ê‚Ì•ÏX‚É‚æ‚Á‚ăeƒXƒg‚Ì•‰’S‚ª‚©‚©‚è‚Ü‚·‚Ì‚ÅA‚¢‚­‚‚©‚̑傫‚È•ÏX‚ð‰Á‚¦‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B -������2�{�ɉ��P�������ÍA�V�X�e���̒��Ŏ��É����ȃ{�g���l�b�N�𔭌����邽�߂É��Ȃ��Ƃ��Äl���A�ĕ��͂����K�v�������܂��B +‰½‚©‚ð2”{‚ɉü‘P‚µ‚½Œã‚ÍAƒVƒXƒeƒ€‚Ì’†‚ÅŽŸ‚É‚‰¿‚ȃ{ƒgƒ‹ƒlƒbƒN‚ð”­Œ©‚·‚邽‚߂ɭ‚È‚­‚Æ‚àÄl‚µAÄ•ªÍ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�����Ìê‡ï¿½A�p�t�H�[�}���X�̃{�g���l�b�N�ÍA���ð”‚����������ÉA���ð”‚��A4�Ŋ��邱�Ƃɂ����ċ��ð”‚������ɂȂ��܂��B���Ƃ��ÎA�����[�V���i���f�[�^�x�[�X�V�X�e���ɓK�؂ȃC���f�b�N�X���t���邱�Ƃ��ł����A�����̌������s���ÆA���Ȃ��Ƃ�20�{�x���Ȃ��Ȃǂ̃G���[���������܂����B���̗��Ƃ��ĂÍA�������[�v�ŕs�K�v��I / O�����s���A�s�v�ȃf�o�b�O�����c�������A�s�K�v�ȃ��������蓖�ÄA���Ƀp�t�H�[�}���X�Ɋւ��ĕ����������Ă��Ȃ����C�u�����₻�̑��̃T�u�V�X�e�����g�p���邱�Ƃ����������܂��B���̎��̉��P�͎��X�u���|���̉ʎ��v�ƌĂ΂��A�����‚��̗��_���ñ‹Ÿ‚��邽�߂ɊȒP�ɑI�Ԃ��Ƃ��ł��܂��B +‘½‚­‚Ìê‡AƒpƒtƒH[ƒ}ƒ“ƒX‚̃{ƒgƒ‹ƒlƒbƒN‚ÍA“ª‚𔂦‚é‘ã‚í‚è‚ÉA‘«‚𔂦A4‚ÅŠ„‚邱‚Ƃɂæ‚Á‚Ä‹‚𔂦‚é—á‚ɂȂè‚Ü‚·B‚½‚Æ‚¦‚ÎAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒXƒVƒXƒeƒ€‚É“K؂ȃCƒ“ƒfƒbƒNƒX‚ð•t‚¯‚邱‚Æ‚ª‚Å‚«‚¸A‘½‚­‚ÌŒŸõ‚ðs‚¤‚ÆA­‚È‚­‚Æ‚à20”{’x‚­‚È‚é‚Ȃǂ̃Gƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B‘¼‚Ì—á‚Æ‚µ‚Ä‚ÍA“à•”ƒ‹[ƒv‚Å•s•K—v‚ÈI / O‚ðŽÀs‚µA•s—v‚ȃfƒoƒbƒO•¶‚ðŽc‚µ‚½‚èA•s•K—v‚ȃƒ‚ƒŠŠ„‚è“–‚ÄA“Á‚ɃpƒtƒH[ƒ}ƒ“ƒX‚ÉŠÖ‚µ‚Ä•¶‘‰»‚³‚ê‚Ä‚¢‚È‚¢ƒ‰ƒCƒuƒ‰ƒŠ‚â‚»‚Ì‘¼‚̃TƒuƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‹“‚°‚ç‚ê‚Ü‚·B‚±‚ÌŽí‚̉ü‘P‚ÍŽžXu’áŠ|‚¯‚̉ʎÀv‚ƌĂ΂êA‚¢‚­‚‚©‚Ì—˜“_‚ð’ñ‹Ÿ‚·‚邽‚߂ɊȒP‚É‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B -�Ԃ牺�����Ă����ʕ��������Ȃ��Ȃ��Ă����A���Ȃ��͉������܂����H���ÄA���Ȃ��͂����Æï¿½ï¿½És�����Ƃ��ł����A�܂��͖؂��`���b�v�����B�����ȉ��P�𑱂��邱�Ƃ��A�V�X�e�����T�u�V�X�e�����^���ÉÄÝŒv���邱�Ƃ��ł��܂��B �i�����ÍA�V�����݌v�����łȂ��A���i�ɂ��ꂪ�ǂ��l���ł��邱�Ƃ��[���������ǂ��v���O���}�[�Ƃ��Ă̂��Ȃ��̃X�L�����g�p�������D�̋@���ł��B�j�������A�T�u�V�X�e���ÌÄÝŒv�ɂ‚��Ę_�����O�ÉA���Ȃ��̒��Ă�������5?10�{�ǂ����邩�ǂ����ɂ������炸�A +‚Ԃ牺‚ª‚Á‚Ä‚¢‚é‰Ê•¨‚ª‘«‚è‚È‚­‚È‚Á‚Ä‚©‚çA‚ ‚È‚½‚͉½‚ð‚µ‚Ü‚·‚©H‚³‚ÄA‚ ‚È‚½‚Í‚à‚Á‚Æã‚És‚­‚±‚Æ‚ª‚Å‚«‚éA‚Ü‚½‚Í–Ø‚ðƒ`ƒ‡ƒbƒv‚·‚éB¬‚³‚ȉü‘P‚𑱂¯‚邱‚Æ‚àAƒVƒXƒeƒ€‚âƒTƒuƒVƒXƒeƒ€‚ð^Œ•‚ÉÄÝŒv‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B i‚±‚ê‚ÍAV‚µ‚¢ÝŒv‚¾‚¯‚łȂ­AãŽi‚É‚±‚ꂪ—Ç‚¢l‚¦‚Å‚ ‚邱‚Æ‚ð”[“¾‚³‚¹‚é—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Æ‚µ‚Ă̂ ‚È‚½‚̃XƒLƒ‹‚ðŽg—p‚·‚éâD‚Ì‹@‰ï‚Å‚·Bj‚µ‚©‚µAƒTƒuƒVƒXƒeƒ€‚ÌÄÝŒv‚ɂ‚¢‚Ę_‚¶‚é‘O‚ÉA‚ ‚È‚½‚Ì’ñˆÄ‚ª‚»‚ê‚ð5?10”{—Ç‚­‚·‚é‚©‚Ç‚¤‚©‚É‚©‚©‚í‚炸A Next [How to Optimize Loops](07-How-to-Optimize-Loops.md) diff --git a/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md index 913b64f..d748fff 100644 --- a/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md +++ b/jp/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -1,14 +1,14 @@ # How to Optimize Loops [//]: # (Version:1.0.0) -���ɂÍA���s�Ɏ��Ԃ��������A���i�̃{�g���l�b�N�ƂȂ郋�[�v���ċA�Ö����������邱�Ƃ������܂��B���[�v���������������O�ÉA���S�Éíœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½@�����邩�ǂ������������ÄA���������₵�Ă��������B�ʂ̃A���S���Y���������܂����H���ɉ������v�Z���Ȃ��炻�����v�Z�ł��܂����H�����ô‚ªŒï¿½ï¿½Â‚����Ȃ��ê‡ï¿½ÍA���[�v���œK�����邱�Ƃ��ł��܂��B�����͊ȒP�ł��B���𓮂����B���ǂ̂Ƃ����A�����ɂ͓Ƒn�������łȂ��A�e���ނ̒Âq�ƕ\���̔��p�̗������K�v�ƂȂ��܂��B�����ɂ����‚��̒��Ă������܂��F +Žž‚É‚ÍAŽÀs‚ÉŽžŠÔ‚ª‚©‚©‚èA»•i‚̃{ƒgƒ‹ƒlƒbƒN‚ƂȂ郋[ƒv‚âÄ‹AŠÖ”‚ª”­¶‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·Bƒ‹[ƒv‚ð­‚µ‘‚­‚·‚é‘O‚ÉAŠ®‘S‚É휂·‚é•û–@‚ª‚ ‚é‚©‚Ç‚¤‚©‚ðŒŸ“¢‚µ‚ÄA”•ª‚ð”ï‚₵‚Ä‚­‚¾‚³‚¢B•ʂ̃Aƒ‹ƒSƒŠƒYƒ€‚ª‚â‚è‚Ü‚·‚©H‘¼‚ɉ½‚©‚ðŒvŽZ‚µ‚È‚ª‚ç‚»‚ê‚ðŒvŽZ‚Å‚«‚Ü‚·‚©H‰ñ”ðô‚ªŒ©‚‚©‚ç‚È‚¢ê‡‚ÍAƒ‹[ƒv‚ðÅ“K‰»‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍŠÈ’P‚Å‚·B•¨‚ð“®‚©‚·BŒ‹‹Ç‚̂Ƃ±‚ëA‚±‚ê‚ɂ͓Ƒn«‚¾‚¯‚łȂ­AŠeŽí—Þ‚Ì’Âq‚Æ•\Œ»‚Ì”ï—p‚Ì—‰ð‚à•K—v‚ƂȂè‚Ü‚·B‚±‚±‚É‚¢‚­‚‚©‚Ì’ñˆÄ‚ª‚ ‚è‚Ü‚·F -- ���������_���Z���íœï¿½ï¿½ï¿½Ü‚��B -- �V�����������u���b�N���s�K�v�Ɋ��蓖�ĂȂ��ł��������B -- �è”���ê�É܂肽���݂܂��B -- I / O���o�b�t�@�Ɉړ������B -- ���ô‚µ‚Ȃ��ł��������B -- �����Ȍ^�L���X�g�����Ȃ��ł��������B -- �C���f�b�N�X���Čv�Z�����̂ł͂Ȃ��A�|�C���^���ړ������B +- •‚“®¬”“_‰‰ŽZ‚ð휂µ‚Ü‚·B +- V‚µ‚¢ƒƒ‚ƒŠƒuƒƒbƒN‚ð•s•K—v‚ÉŠ„‚è“–‚ĂȂ¢‚Å‚­‚¾‚³‚¢B +- ’蔂ðˆê‚É܂肽‚½‚݂܂·B +- I / O‚ðƒoƒbƒtƒ@‚Ɉړ®‚·‚éB +- •ª—ô‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +- ‚‰¿‚ÈŒ^ƒLƒƒƒXƒg‚ð‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B +- ƒCƒ“ƒfƒbƒNƒX‚ðÄŒvŽZ‚·‚é‚̂ł͂Ȃ­Aƒ|ƒCƒ“ƒ^‚ðˆÚ“®‚·‚éB -�������̊e�����̃R�X�g�ÍA�����̃V�X�e���ɂ����ĈقȂ��܂��B�����‚��̃V�X�e���łÍA�R���p�C���ƃn�[�h�E�F�A���������̂��Ƃ��s���܂��B���m�����I�ȃR�[�h�ÍA�����̃v���b�g�t�H�[���̗������K�v�Ƃ����R�[�h�������D���Ă��܂��B +‚±‚ê‚ç‚ÌŠe‘€ì‚̃RƒXƒg‚ÍA“Á’è‚̃VƒXƒeƒ€‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚¢‚­‚‚©‚̃VƒXƒeƒ€‚Å‚ÍAƒRƒ“ƒpƒCƒ‰‚ƃn[ƒhƒEƒFƒA‚ª‚±‚ê‚ç‚Ì‚±‚Æ‚ðs‚¢‚Ü‚·B–¾Šm‚ÅŒø—¦“I‚ȃR[ƒh‚ÍA“Á’è‚̃vƒ‰ƒbƒgƒtƒH[ƒ€‚Ì—‰ð‚ð•K—v‚Æ‚·‚éƒR[ƒh‚æ‚è‚à—D‚ê‚Ä‚¢‚Ü‚·B Next [How to Deal with I/O Expense](08-How-to-Deal-with-IO-Expense.md) diff --git a/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md index 9294a98..f23ee8c 100644 --- a/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md +++ b/jp/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -1,13 +1,13 @@ # How to Deal with I/O Expense [//]: # (Version:1.0.0) -�����̖����ɑ΂��ÄA�v���Z�b�T�̓n�[�h�E�F�A�f�o�C�X�Ƃ̒ÊM�R�X�g�ɔ��ׂÄ����ł��B���̃R�X�g�ÍA�Ê���I / O�ÆÈ—������A�l�b�g���[�N�R�X�g�A�f�B�X�NI / O�A�f�[�^�x�[�X�N�G���A�t�@�C��I / O�A�����уv���Z�b�T�ɂ��܂��ßڂ��Ȃ��n�[�h�E�F�A�̎g�p�Ȃǂ��܂܂��܂��B���������ÄA�����ȃV�X�e�����\�z���邱�ƂÍA���΂��΂����‚��̂��‚����[�v�ŃR�[�h�����P���邱�ÆA�܂��̓A���S���Y�������P���邱�Ƃ�����I / O�����P���邱�Ƃ̖����ł��B +‘½‚­‚Ì–â‘è‚ɑ΂µ‚ÄAƒvƒƒZƒbƒT‚̓n[ƒhƒEƒFƒAƒfƒoƒCƒX‚Ƃ̒ÊMƒRƒXƒg‚É”ä‚ׂĂ‘¬‚Å‚·B‚±‚̃RƒXƒg‚ÍA’Êí‚ÍI / O‚ÆÈ—ª‚³‚êAƒlƒbƒgƒ[ƒNƒRƒXƒgAƒfƒBƒXƒNI / OAƒf[ƒ^ƒx[ƒXƒNƒGƒŠAƒtƒ@ƒCƒ‹I / OA‚¨‚æ‚уvƒƒZƒbƒT‚É‚ ‚Ü‚è‹ßÚ‚µ‚È‚¢ƒn[ƒhƒEƒFƒA‚ÌŽg—p‚ȂǂªŠÜ‚Ü‚ê‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‚‘¬‚ȃVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ÍA‚µ‚΂µ‚΂¢‚­‚‚©‚Ì‚«‚‚¢ƒ‹[ƒv‚ŃR[ƒh‚ð‰ü‘P‚·‚邱‚ÆA‚Ü‚½‚̓Aƒ‹ƒSƒŠƒYƒ€‚ð‰ü‘P‚·‚邱‚Æ‚æ‚è‚àI / O‚ð‰ü‘P‚·‚邱‚Ƃ̖â‘è‚Å‚·B -I / O�����P�����ɂÍA�L���b�V���O�ƕ\����2�‚̔����Ɋ��{�I�ȃe�N�j�b�N�������܂��B�L���b�V���O�ÍA���̒l�̃R�s�[�����[�J���Ɋi�[���邱�Ƃ�I / O���������Äi���ʓI�ɂ͉��炩�̒��ۓI�Ȓl�̓ǂݎ������������j�A�l���擾���邽�߂�I / O�͎��s�����܂����B�L���b�V���O�̑����̌��ÍA�ǂ̃f�[�^���}�X�^�[�ł����A�ǂ̃f�[�^���R�s�[�ł��邩�𖾊m�ɂ��邱�Ƃł��B�}�X�^�[���Ԃ�1�‚����ł��B�L���b�V���O�ÍA�R�s�[���u���Ƀ}�X�^�[�ւ̕ÏX�𔽉f�ł��Ȃ����Ƃ������Ƃ����댯���������炵�܂��B +I / O‚ð‰ü‘P‚·‚é‚É‚ÍAƒLƒƒƒbƒVƒ“ƒO‚Æ•\Œ»‚Ì2‚‚̔ñí‚ÉŠî–{“I‚ȃeƒNƒjƒbƒN‚ª‚ ‚è‚Ü‚·BƒLƒƒƒbƒVƒ“ƒO‚ÍA‚»‚Ì’l‚̃Rƒs[‚ðƒ[ƒJƒ‹‚ÉŠi”[‚·‚邱‚Æ‚ÅI / O‚ð‰ñ”ð‚µ‚Äiˆê”Ê“I‚ɂ͉½‚ç‚©‚Ì’ŠÛ“I‚È’l‚̓ǂݎæ‚è‚ð”ð‚¯‚éjA’l‚ðŽæ“¾‚·‚邽‚ß‚ÉI / O‚ÍŽÀs‚³‚ê‚Ü‚¹‚ñBƒLƒƒƒbƒVƒ“ƒO‚Ì‘æˆê‚ÌŒ®‚ÍA‚ǂ̃f[ƒ^‚ªƒ}ƒXƒ^[‚Å‚ ‚èA‚ǂ̃f[ƒ^‚ªƒRƒs[‚Å‚ ‚é‚©‚𖾊m‚É‚·‚邱‚Ƃł·Bƒ}ƒXƒ^[ŠúŠÔ‚Í1‚‚¾‚¯‚Å‚·BƒLƒƒƒbƒVƒ“ƒO‚ÍAƒRƒs[‚ªuŽž‚Ƀ}ƒXƒ^[‚Ö‚Ì•ÏX‚𔽉f‚Å‚«‚È‚¢‚±‚Æ‚ª‚ ‚邯‚¢‚¤ŠëŒ¯«‚ð‚à‚½‚炵‚Ü‚·B -�\���ÍA�f�[�^�����������I�ɕ\�����邱�Ƃɂ�����I / O�����������A�v���[�`�ł��B�����ÍA�l�Ԃ̉“Ç����”����ȂÇA���̗v���Ƌْ����Ă��邱�Ƃ��悭�����܂��B +•\Œ»‚ÍAƒf[ƒ^‚ð‚æ‚èŒø—¦“I‚É•\Œ»‚·‚邱‚Ƃɂæ‚Á‚ÄI / O‚ðˆÀ‚­‚·‚éƒAƒvƒ[ƒ`‚Å‚·B‚±‚ê‚ÍAlŠÔ‚̉“ǫ‚â‰Â”À«‚È‚ÇA‘¼‚Ì—v‹‚Ƌْ£‚µ‚Ä‚¢‚邱‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B -�\���ÍA�Å��̎�������2?3�{�ɉ��P�����邱�Ƃ������܂��B�������s�����߂̋Z�p�ɂÍA�l�Ԃ��ǂ߂����̂̑������Ƀo�C�i���\�����g�p���邱�ÆA�����V���{�����G���R�[�h�����K�v���Ȃ��悤�ɃV���{���̎����ð‘—M���邱�ÆA�����ċɒ[�Ƀn�t�}���������̂悤�Ȃ��Ƃ��܂܂��܂��B +•\Œ»‚ÍAʼn‚ÌŽÀ‘•‚©‚ç2?3”{‚ɉü‘P‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ðs‚¤‚½‚߂̋Zp‚É‚ÍAlŠÔ‚ª“ǂ߂é‚à‚̂̑ã‚í‚è‚ɃoƒCƒiƒŠ•\Œ»‚ðŽg—p‚·‚邱‚ÆA’·‚¢ƒVƒ“ƒ{ƒ‹‚ðƒGƒ“ƒR[ƒh‚·‚é•K—v‚ª‚È‚¢‚悤‚ɃVƒ“ƒ{ƒ‹‚ÌŽ«‘‚ð‘—M‚·‚邱‚ÆA‚»‚µ‚ċɒ[‚Ƀnƒtƒ}ƒ“•„†‰»‚̂悤‚È‚±‚Æ‚ªŠÜ‚Ü‚ê‚Ü‚·B -���ɂ͉”\�ȑ�3�̋Z�@�ÍA�v�Z���f�[�^�ɋ߂Â��邱�Ƃɂ����ĎQ�Ƃ̋Ç��������P���邱�Ƃł����B���Ƃ��ÎA�f�[�^�x�[�X���炢���‚��̃f�[�^���ǂÝ��ÝA�W�v�Ȃǂ̒P���Ȃ��̂��v�Z�����ê‡ï¿½ÍA�f�[�^�x�[�X�T�[�o�[�Ŏ擾���Ă��������B�����͂��Ȃ������Ƃ��Ă����V�X�e���̎��ނɑ傫���ˑ����܂����A�����𒲂ׂ��K�v�������܂��B +Žž‚ɂ͉”\‚È‘æ3‚Ì‹Z–@‚ÍAŒvŽZ‚ðƒf[ƒ^‚ɋ߂¯‚邱‚Ƃɂæ‚Á‚ÄŽQƂ̋NJ«‚ð‰ü‘P‚·‚邱‚Ƃł ‚éB‚½‚Æ‚¦‚ÎAƒf[ƒ^ƒx[ƒX‚©‚ç‚¢‚­‚‚©‚̃f[ƒ^‚ð“ǂݞ‚ÝAWŒv‚Ȃǂ̒Pƒ‚È‚à‚Ì‚ðŒvŽZ‚·‚éꇂÍAƒf[ƒ^ƒx[ƒXƒT[ƒo[‚Ŏ擾‚µ‚Ä‚­‚¾‚³‚¢B‚±‚ê‚Í‚ ‚È‚½‚ªì‹Æ‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚ÌŽí—ނɑ傫‚­ˆË‘¶‚µ‚Ü‚·‚ªA‚»‚ê‚𒲂ׂé•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Manage Memory](09-How-to-Manage-Memory.md) \ No newline at end of file diff --git a/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md index c8a1674..9ed4634 100644 --- a/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md +++ b/jp/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -1,15 +1,15 @@ # How to Manage Memory [//]: # (Version:1.0.0) -�������ÍA���Ȃ����g���ʂ����Ă͂Ȃ��Ȃ��M�d�ȃ��\�[�X�ł��B���΂炭�����𖳎����邱�Ƃ͂ł��܂����A�ÅI�I�ɂ̓������̊Ǘ����@�����肷���K�v�������܂��B +ƒƒ‚ƒŠ‚ÍA‚ ‚È‚½‚ªŽg‚¢‰Ê‚½‚µ‚Ă͂Ȃç‚È‚¢‹Md‚ÈƒŠƒ\[ƒX‚Å‚·B‚µ‚΂炭‚»‚ê‚𖳎‹‚·‚邱‚Ƃ͂ł«‚Ü‚·‚ªAÅI“I‚ɂ̓ƒ‚ƒŠ‚ÌŠÇ—•û–@‚ðŒˆ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�P���̃T�u���[�`���͈̔͂𒴂��Ď��������K�v�������̈��ÍA���΂���* heap allocated *�ƌĂ΂��܂��B�������̃`�����N�͖��ɗ����Ȃ��̂ÅA�������y���Ă��Ȃ��Ƃ���*�S�~*�ł��B���Ȃ����g�p�������V�X�e���ɂ����ĂÍA�����������݂ɂȂ��Ă��܂��Ƃ��ÉA�����Ŗ����I�Ƀ������̊��蓖�Ă����������K�v�����邩�������܂����B�����p�ɂ�*�K�x�[�W�R���N�^*���ñ‹Ÿ‚����V�X�e�����g�p���邱�Ƃ��ł��܂��B�K�x�[�W�R���N�^�̓S�~�ɋC���ÄA�v���O���}���v�������A�N�V�����Ȃ��ɃX�y�[�X���������܂��B�K�x�[�W�R���N�V�����͑f���炵���ł��F�G���[�����炵�A�R�[�h�̊Ȍ����ƊȌ������������܂��B�”\�ł����Ύg�p�����������B +’Pˆê‚̃Tƒuƒ‹[ƒ`ƒ“‚͈̔͂𒴂¦‚ÄŽ‘±‚·‚é•K—v‚ª‚ ‚é—̈æ‚ÍA‚µ‚΂µ‚Î* heap allocated *‚ƌĂ΂ê‚Ü‚·Bƒƒ‚ƒŠ‚̃`ƒƒƒ“ƒN‚Í–ð‚É—§‚½‚È‚¢‚Ì‚ÅA‰½‚àŒ¾‹y‚µ‚Ä‚¢‚È‚¢‚Æ‚«‚Í*ƒSƒ~*‚Å‚·B‚ ‚È‚½‚ªŽg—p‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚É‚æ‚Á‚Ä‚ÍAƒƒ‚ƒŠ‚ª‚²‚݂ɂȂÁ‚Ä‚µ‚Ü‚¤‚Æ‚«‚ÉAŽ©•ª‚Å–¾Ž¦“I‚Ƀƒ‚ƒŠ‚ÌŠ„‚è“–‚Ä‚ð‰ðœ‚·‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚æ‚è•p”É‚É*ƒKƒx[ƒWƒRƒŒƒNƒ^*‚ð’ñ‹Ÿ‚·‚éƒVƒXƒeƒ€‚ðŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BƒKƒx[ƒWƒRƒŒƒNƒ^‚̓Sƒ~‚É‹C‚¢‚ÄAƒvƒƒOƒ‰ƒ}‚ª—v‹‚·‚éƒAƒNƒVƒ‡ƒ“‚È‚µ‚ɃXƒy[ƒX‚ð‰ð•ú‚µ‚Ü‚·BƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚Í‘f°‚炵‚¢‚Å‚·FƒGƒ‰[‚ðŒ¸‚ç‚µAƒR[ƒh‚ÌŠÈŒ‰‚³‚ÆŠÈŒ‰‚³‚ðˆÀ‚­‚µ‚Ü‚·B‰Â”\‚Å‚ ‚ê‚ÎŽg—p‚µ‚Ä‚­‚¾‚³‚¢B -�������A�K�x�[�W�R���N�V�����ł����Ă��A���ׂẴ��������S�~�ł����ς��ɂ��邱�Ƃ��ł��܂��B�ÓT�I�ȊԈႢ�ÍA�n�b�V���e�[�u�����L���b�V���Ƃ��Ďg�p���A�n�b�V���e�[�u�����̎Q�Ƃ��íœï¿½ï¿½ï¿½é‚±ï¿½Æ‚��Y���Ă��܂��܂��B�Q�Ƃ��c���Ă����̂ÅA�w���Îۂ͎��W�ł��Ȃ����̂ÌA���ɗ����Ȃ��B������*���������[�N*�ƌĂ΂��܂��B���������[�N�ð‘Šï¿½ï¿½ÉŒï¿½ï¿½Â‚��ÄC�������K�v�������܂��B�����ԉғ����Ă����V�X�e���łÍA�e�X�g�������[���g���ʂ������邱�Ƃ͂����܂��ñ‚ªA���[�U�[�͎g���ʂ������܂��B +‚µ‚©‚µAƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚Å‚ ‚Á‚Ä‚àA‚·‚ׂẴƒ‚ƒŠ‚ðƒSƒ~‚Å‚¢‚Á‚Ï‚¢‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŒÃ“T“I‚ȊԈႢ‚ÍAƒnƒbƒVƒ…ƒe[ƒuƒ‹‚ðƒLƒƒƒbƒVƒ…‚Æ‚µ‚ÄŽg—p‚µAƒnƒbƒVƒ…ƒe[ƒuƒ‹“à‚ÌŽQÆ‚ð휂·‚邱‚Æ‚ð–Y‚ê‚Ä‚µ‚Ü‚¢‚Ü‚·BŽQÆ‚ªŽc‚Á‚Ä‚¢‚é‚Ì‚ÅAŽwަ‘ÎÛ‚ÍŽûW‚Å‚«‚È‚¢‚à‚Ì‚ÌA–ð‚É—§‚½‚È‚¢B‚±‚ê‚Í*ƒƒ‚ƒŠƒŠ[ƒN*‚ƌĂ΂ê‚Ü‚·Bƒƒ‚ƒŠƒŠ[ƒN‚ð‘Šú‚ÉŒ©‚‚¯‚ÄC³‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B’·ŽžŠÔ‰Ò“®‚µ‚Ä‚¢‚éƒVƒXƒeƒ€‚Å‚ÍAƒeƒXƒg‚Ńƒ‚ƒŠ[‚ªŽg‚¢‰Ê‚½‚³‚ê‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñ‚ªAƒ†[ƒU[‚ÍŽg‚¢‰Ê‚½‚³‚ê‚Ü‚·B -�V�����I�u�W�F�N�g�Ìì¬ï¿½ÍA�ǂ̃V�X�e���ł��K�x�É����ł��B�������A�T�u���[�`���̃��[�J���Ï��ɒ��ڊ��蓖�Ă��ꂽ�������ÍA�Ê��A�����������������j�������ɊȒP�Ȃ̂ÅA�����ł��B�s�v�ȃI�u�W�F�N�g�Ìì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½K�v�������܂��B +V‚µ‚¢ƒIƒuƒWƒFƒNƒg‚Ì쬂ÍA‚ǂ̃VƒXƒeƒ€‚Å‚à“K“x‚É‚‰¿‚Å‚·B‚µ‚©‚µAƒTƒuƒ‹[ƒ`ƒ“‚̃[ƒJƒ‹•Ï”‚É’¼ÚŠ„‚è“–‚Ä‚ç‚ꂽƒƒ‚ƒŠ‚ÍA’ÊíA‚»‚ê‚ð‰ð•ú‚·‚é•ûj‚ª”ñí‚ÉŠÈ’P‚Ȃ̂ÅAˆÀ‰¿‚Å‚·B•s—v‚ȃIƒuƒWƒFƒNƒg‚Ì쬂ð”ð‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·B -�d�v�ȃP�[�X�ÍA���x�ɕK�v�ȃI�u�W�F�N�g���Ì��������`�ł����Ƃ��ł��B�������̃I�u�W�F�N�g�����ׂē����ʂ̃����������߂��ê‡ï¿½ÍA�����������ׂĕێ����邽�߂ÉA�P���̃������u���b�N�܂��̓o�b�t�@�����蓖�Ă邱�Ƃ��ł��܂��B�K�v�ȃI�u�W�F�N�g�ÍA���̃o�b�t�@���Åݒ肳�ꂽ���]�p�^�[���Ŋ��蓖�Ă������������邱�Ƃ������܂��B���������ÄA�����O�o�b�t�@�ƌĂ΂��邱�Ƃ������܂��B�����͒Ê��A�q�[�v���蓖�Ă����������ł��B +d—v‚ȃP[ƒX‚ÍAˆê“x‚É•K—v‚ȃIƒuƒWƒFƒNƒg”‚ÌãŒÀ‚ð’è‹`‚Å‚«‚邯‚«‚Å‚·B‚±‚ê‚ç‚̃IƒuƒWƒFƒNƒg‚ª‚·‚ׂ睂¶—ʂ̃ƒ‚ƒŠ‚ðè‚ß‚éꇂÍA‚»‚ê‚ç‚ð‚·‚×‚Ä•ÛŽ‚·‚邽‚ß‚ÉA’Pˆê‚̃ƒ‚ƒŠƒuƒƒbƒN‚Ü‚½‚̓oƒbƒtƒ@‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚Ü‚·B•K—v‚ȃIƒuƒWƒFƒNƒg‚ÍA‚±‚̃oƒbƒtƒ@“à‚Åݒ肳‚ꂽ‰ñ“]ƒpƒ^[ƒ“‚ÅŠ„‚è“–‚Ä‚ç‚ê‰ð•ú‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚µ‚½‚ª‚Á‚ÄAƒŠƒ“ƒOƒoƒbƒtƒ@‚ƌĂ΂ê‚邱‚Æ‚à‚ ‚è‚Ü‚·B‚±‚ê‚Í’ÊíAƒq[ƒvŠ„‚è“–‚Ä‚æ‚è‚à‚‘¬‚Å‚·B -�K�x�[�W�R���N�V�����ɗ����̂ł͂Ȃ��A���蓖�Ă��ꂽ�X�y�[�X�𖾎��I�ɉ��������K�v�������ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ÉA���蓖�Ă��ꂽ�������̊e�`�����N�ÉT�d�ȃC���e���W�F���X���K�p���A�K�؂ȃ^�C�~���O�Ŋ��蓖�Ă������������@���݌v�����K�v�������܂��B���\�b�h�ÍA�ì¬ï¿½ï¿½ï¿½ï¿½ï¿½I�u�W�F�N�g�̎��ނ��ƂɈقȂ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���������蓖�đ����̂��ׂĂ̎��s���A���������蓖�ĉ��������ɂ����ÄÅI�I�Ɉ��v���邱�Ƃ��m�F�����K�v�������܂��B�����͔����ɓ���̂ÅA�v���O���}�͎Q�ƃJ�E���g�Ȃǂ̊��{�I�Ȍ`���̃K�[�x�W�R���N�V�������������邾���Åς݂܂��B +ƒKƒx[ƒWƒRƒŒƒNƒVƒ‡ƒ“‚É—Š‚é‚̂ł͂Ȃ­AŠ„‚è“–‚Ä‚ç‚ꂽƒXƒy[ƒX‚𖾎¦“I‚ɉð•ú‚·‚é•K—v‚ª‚ ‚éꇂª‚ ‚è‚Ü‚·BŽŸ‚ÉAŠ„‚è“–‚Ä‚ç‚ꂽƒƒ‚ƒŠ‚ÌŠeƒ`ƒƒƒ“ƒN‚ÉTd‚ȃCƒ“ƒeƒŠƒWƒFƒ“ƒX‚ð“K—p‚µA“K؂ȃ^ƒCƒ~ƒ“ƒO‚ÅŠ„‚è“–‚Ä‚ð‰ðœ‚·‚é•û–@‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·Bƒƒ\ƒbƒh‚ÍA쬂·‚éƒIƒuƒWƒFƒNƒg‚ÌŽí—Þ‚²‚ƂɈقȂéꇂª‚ ‚è‚Ü‚·Bƒƒ‚ƒŠŠ„‚è“–‚Ä‘€ì‚Ì‚·‚ׂĂ̎Às‚ªAƒƒ‚ƒŠŠ„‚è“–‚ĉ𜑀ì‚É‚æ‚Á‚ÄÅI“I‚Ɉê’v‚·‚邱‚Æ‚ðŠm”F‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚Í”ñí‚ɓ‚¢‚Ì‚ÅAƒvƒƒOƒ‰ƒ}‚ÍŽQƃJƒEƒ“ƒg‚Ȃǂ̊î–{“I‚ÈŒ`Ž®‚̃K[ƒxƒWƒRƒŒƒNƒVƒ‡ƒ“‚ðŽÀ‘•‚·‚邾‚¯‚Åς݂܂·B Next [How to Deal with Intermittent Bugs](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index 36ad68e..7f95338 100644 --- a/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/jp/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -1,17 +1,17 @@ # How to Deal with Intermittent Bugs [//]: # (Version:1.0.0) -�f���I�ȃo�O�ÍA50�t�B�[�g�̕s�Ž��̓d�Ԃ����O�F���̎��ނ̃o�O�̂��Ƃ��ł��B���̈����͔����ɂ܂��ł����A�ώ@�����͓̂���ł����A���΂��΂����𖳎����邱�Ƃ͂ł��܂����B���Ȃ������������‚��邱�Ƃ��ł��Ȃ��̂ÅA�f�o�b�O���邱�Ƃ͂ł��܂����B +’f‘±“I‚ȃoƒO‚ÍA50ƒtƒB[ƒg‚Ì•s‰ÂŽ‹‚Ì“dŽÔ‚©‚çŠO‰F’ˆ‚ÌŽí—ނ̃oƒO‚Ì‚¢‚Æ‚±‚Å‚·B‚±‚̈«–²‚Í”ñí‚ɂ܂ê‚Å‚ ‚èAŠÏŽ@‚·‚é‚͓̂‚¢‚Å‚·‚ªA‚µ‚΂µ‚΂»‚ê‚𖳎‹‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚ª‚»‚ê‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Ì‚ÅAƒfƒoƒbƒO‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -�f���I�ȃo�O�ÍA8���Ԍ��ɂ͋^���������n�߂܂����A���̂��ׂẴ��W�b�N�Ɠ����@���É]���Ȃ����΂Ȃ��܂����B���ꂪ����̂ÍA���ꂪ���m�Ì������ł̂݋N�����Ƃ������Ƃł��B�o�O�����������󋵂��L�^���ÄA�o���c�L���{���ɉ��ł��邩�ð„‘��ł����悤�ɂ��Ă��������B�����̓f�[�^�l�Ɋ֘A���Ă����”\���������܂��B�Ⴆ�ÎA���C�I�~���O*���l�Ƃ��ē��͂����ê‡ï¿½É‚̂ݔ������܂��B���ꂪ�ϓ����̌����łȂ��ê‡ï¿½A���̋^�f�͕��s�����s�K�؂ɓ����������K�v�������܂��B +’f‘±“I‚ȃoƒO‚ÍA8ŽžŠÔŒã‚ɂ͋^–â‚ðŽ‚¿Žn‚߂܂·‚ªA‘¼‚Ì‚·‚ׂẴƒWƒbƒN‚Æ“¯‚¶–@‘¥‚É]‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ꂪ“‚¢‚Ì‚ÍA‚»‚ꂪ–¢’m‚ÌðŒ‰º‚ł̂݋N‚±‚邯‚¢‚¤‚±‚Ƃł·BƒoƒO‚ª”­¶‚·‚é󋵂ð‹L˜^‚µ‚ÄAƒoƒ‰ƒcƒL‚ª–{“–‚ɉ½‚Å‚ ‚é‚©‚ð„‘ª‚Å‚«‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢BðŒ‚̓f[ƒ^’l‚ÉŠÖ˜A‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B—Ⴆ‚ÎAƒƒCƒIƒ~ƒ“ƒO*‚ð’l‚Æ‚µ‚Ä“ü—Í‚·‚éꇂɂ̂ݔ­¶‚µ‚Ü‚·B‚»‚ꂪ•Ï“®«‚ÌŒ´ˆö‚łȂ¢ê‡AŽŸ‚Ì‹^˜f‚Í•Às«‚ª•s“K؂ɓ¯Šú‚³‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·B -�o�O�ð§Œä‚³ï¿½ê‚½ï¿½ï¿½ï¿½@�ÅČ����悤�Ƃ��Ă݂Ă��������B�������Č��ł��Ȃ��ê‡ï¿½ÍA���M���O�V�X�e�����\�z���邱�ƂŃg���b�v���ݒ肵�܂��B�K�v�Èê‡ï¿½Í“��ʂȃ��O�V�X�e�����ì¬ï¿½ï¿½ï¿½A���ۂɔ��������Ƃ��ɕK�v�Ǝv���������̂����O�ɋL�^�ł��܂��B�o�O�����Ȃ��̋C�܂����ł͂Ȃ��A�v���_�N�V�����ł̂݋N�����Ȃ��ÎA�����͒����v���Z�X���������܂����B���O���瓾�������q���g�͉��������ñ‹Ÿ‚��Ȃ����������܂��ñ‚ªA���O�����P�����̂É\���È������ñ‹Ÿ‚��邩�������܂����B���ǂ��ꂽ���M���O�V�X�e���ÍA���Y�ɓ��������܂łɒ������Ԃ������邱�Ƃ������܂��B���̌��A�o�O���Ĕ����Ă��葽���Ì����𓾂��̂��҂��Ȃ����΂Ȃ��܂����B���̃T�C�N���͂��΂炭�̊ԑ������Ƃ��ł��܂��B +ƒoƒO‚ð§Œä‚³‚ꂽ•û–@‚ÅÄŒ»‚µ‚悤‚Æ‚µ‚Ă݂Ă­‚¾‚³‚¢B‚»‚ê‚ðÄŒ»‚Å‚«‚È‚¢ê‡‚ÍAƒƒMƒ“ƒOƒVƒXƒeƒ€‚ð\’z‚·‚邱‚ƂŃgƒ‰ƒbƒv‚ðݒ肵‚Ü‚·B•K—v‚Èꇂ͓Á•ʂȃƒOƒVƒXƒeƒ€‚ð쬂µAŽÀÛ‚É”­¶‚µ‚½‚Æ‚«‚É•K—v‚ÆŽv‚í‚ê‚é‚à‚Ì‚ðƒƒO‚É‹L˜^‚Å‚«‚Ü‚·BƒoƒO‚ª‚ ‚È‚½‚Ì‹C‚Ü‚®‚ê‚ł͂Ȃ­Aƒvƒƒ_ƒNƒVƒ‡ƒ“‚ł̂݋N‚±‚é‚È‚ç‚ÎA‚±‚ê‚Í’·‚¢ƒvƒƒZƒX‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒƒO‚©‚瓾‚ç‚ê‚éƒqƒ“ƒg‚͉ðŒˆô‚ð’ñ‹Ÿ‚µ‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒƒO‚ð‰ü‘P‚·‚é‚Ì‚É\•ª‚Èî•ñ‚ð’ñ‹Ÿ‚·‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‰ü—Ç‚³‚ꂽƒƒMƒ“ƒOƒVƒXƒeƒ€‚ÍA¶ŽY‚ɓГü‚·‚é‚܂łɒ·‚¢ŽžŠÔ‚ª‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ÌŒãAƒoƒO‚ªÄ”­‚µ‚Ä‚æ‚葽‚­‚Ìî•ñ‚𓾂é‚Ì‚ð‘Ò‚½‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃TƒCƒNƒ‹‚Í‚µ‚΂炭‚ÌŠÔ‘±‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B -�������܂łÉì¬ï¿½ï¿½ï¿½ï¿½ï¿½Î‚������f���I�ȃo�O�ÍA�N���X�v���W�F�N�g�̂��߂̊Ö��^�v���O���~���O�����̃}���`�X���b�h�����ł��B���͋@�\�v���O�����Ì��m�ȕ��s�]���������ÉT�d�Ɋm�ۂ��A�g�p�”\�Ȃ��ׂĂ�CPU�i���Ìê‡ï¿½ï¿½8�Âj���L���Ɋ��p���܂����B�K�x�[�W�R���N�^�̓������Y���Ă��܂����B�V�X�e���ÍA�����ڗ��‚��Ƃ��Ԉ����Ă��܂��O�ÉA���΂��Ύ����n�߂��d�����I���点���A�������Ԃ����s���邱�Ƃ��ł��܂��B���̊ԈႢ�����ɋN�����O�ÉA�����n�[�h�E�F�A�ɋ^���������n�߂����Ƃ��F�߂Ēp���������B +Ž„‚ª¡‚܂łÉ쬂µ‚½‚΂©‚°‚½’f‘±“I‚ȃoƒO‚ÍAƒNƒ‰ƒXƒvƒƒWƒFƒNƒg‚Ì‚½‚߂̊֔Œ^ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚̃}ƒ‹ƒ`ƒXƒŒƒbƒhŽÀ‘•‚Å‚·BŽ„‚Í‹@”\ƒvƒƒOƒ‰ƒ€‚̳Šm‚È•Às•]‰¿‚ð”ñí‚ÉTd‚ÉŠm•Û‚µAŽg—p‰Â”\‚È‚·‚ׂĂÌCPUi‚±‚ÌꇂÍ8ŒÂj‚ð—LŒø‚ÉŠˆ—p‚µ‚Ü‚µ‚½BƒKƒx[ƒWƒRƒŒƒNƒ^‚Ì“¯Šú‚ð–Y‚ê‚Ä‚µ‚Ü‚Á‚½BƒVƒXƒeƒ€‚ÍA‰½‚©–Ú—§‚‚±‚Æ‚ªŠÔˆá‚Á‚Ä‚µ‚Ü‚¤‘O‚ÉA‚µ‚΂µ‚ÎŽ„‚ªŽn‚ß‚½ŽdŽ–‚ðI‚í‚点‚éA’·‚¢ŽžŠÔ‚ðŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŽ„‚̊ԈႢ‚ªŽ„‚É‹N‚±‚é‘O‚ÉAŽ„‚ªƒn[ƒhƒEƒFƒA‚É‹^–â‚ðŽ‚¿Žn‚ß‚½‚±‚Æ‚ð”F‚߂Ēp‚¸‚©‚µ‚¢B -�E���łÍÅ‹ßA�Ԍ��I�ȃo�O�������A���T�ԂŌ��‚��܂����B�������ÍAApacheâ„uWeb�T�[�o�[�̔w���ɂ���Javaâ„u�}���`�X���b�h�A�v���P�[�V�����T�[�o�[�������Ă��܂��B�����ȃy�[�W�^�[�����ێ����邽�߂ÉA�������̓y�[�W�߂����X���b�h�Ƃ͈قȂ�4�‚̕ÊX�̃X���b�h�Ì����ȃZ�b�g�ł��ׂĂ�I / O�����s���܂��B���X�A�������ÍA���炩�ÉA�������̋L�^���������ɉ����Ԃ��`���邱�Ƃ��ł��������A�����L�p�Ȃ��Ƃ����߂����邱�ƂɂȂ��܂��B��������4�‚̃X���b�h�������Ă����̂ÅA4�‚��ׂĂ��X�^�b�N���Ă��Ȃ������A�����͂��ꎩ�̋����Ȗ����ł͂����܂����ł����B�������̃X���b�h�ɂ����ċ��ɂ��ꂽ�L���[�ÍA���ׂĂ̎g�p�”\�ȃ����������΂₭���߂ÄA�T�[�o�[���N���b�V�������܂��B���̂��Ƃð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚�1�T�Ԃقǂ������܂������A�����������A�������邩�A�X���b�h���������Ă����̂��͂܂��������܂����ł����B +Eê‚Å‚ÍÅ‹ßAŠÔŒ‡“I‚ȃoƒO‚ª‚ ‚èA”TŠÔ‚ÅŒ©‚‚¯‚Ü‚µ‚½BŽ„‚½‚¿‚ÍAApacheâ„uWebƒT[ƒo[‚Ì”wŒã‚É‚ ‚éJavaâ„uƒ}ƒ‹ƒ`ƒXƒŒƒbƒhƒAƒvƒŠƒP[ƒVƒ‡ƒ“ƒT[ƒo[‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚‘¬‚ȃy[ƒWƒ^[ƒ“‚ðˆÛŽ‚·‚邽‚ß‚ÉAŽ„‚½‚¿‚̓y[ƒW‚ß‚­‚èƒXƒŒƒbƒh‚Ƃ͈قȂé4‚‚̕ÊX‚̃XƒŒƒbƒh‚̬‚³‚ȃZƒbƒg‚Å‚·‚ׂĂÌI / O‚ðŽÀs‚µ‚Ü‚·BŽžXA‚±‚ê‚ç‚ÍA–¾‚ç‚©‚ÉAŽ„‚½‚¿‚Ì‹L˜^‚ªŽ„‚½‚¿‚ɉ½ŽžŠÔ‚à“`‚¦‚邱‚Æ‚ª‚Å‚«‚½ŒÀ‚èA‰½‚©—L—p‚È‚±‚Æ‚ð‚â‚ß‚³‚¹‚邱‚ƂɂȂè‚Ü‚·BŽ„‚½‚¿‚Í4‚‚̃XƒŒƒbƒh‚ðŽ‚Á‚Ä‚¢‚½‚Ì‚ÅA4‚‚·‚ׂĂªƒXƒ^ƒbƒN‚µ‚Ä‚¢‚È‚¢ŒÀ‚èA‚±‚ê‚Í‚»‚ꎩ‘Ì‹‘å‚È–â‘è‚ł͂ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½B‚±‚ê‚ç‚̃XƒŒƒbƒh‚É‚æ‚Á‚Ä‹ó‚É‚³‚ꂽƒLƒ…[‚ÍA‚·‚ׂĂ̎g—p‰Â”\‚ȃƒ‚ƒŠ‚ð‚·‚Î‚â‚­–„‚ß‚ÄAƒT[ƒo[‚ðƒNƒ‰ƒbƒVƒ…‚³‚¹‚Ü‚·B‚±‚Ì‚±‚Æ‚ð—‰ð‚·‚é‚Ì‚É1TŠÔ‚Ù‚Ç‚©‚©‚è‚Ü‚µ‚½‚ªA‰½‚ªŒ´ˆö‚©A”­¶‚·‚é‚©AƒXƒŒƒbƒh‚ª‰½‚ð‚µ‚Ä‚¢‚é‚Ì‚©‚͂܂¾•ª‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B -�����ÍA�T�[�h�p�[�e�B�̃\�t�g�E�F�A�Ɋ֘A���郊�X�N�������Ă��܂��B�e�L�X�g����HTML�^�O���íœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½C�Z���X�R�[�h���g�p���Ă��܂����B�������̓\�[�X�R�[�h�������Ă��܂������A�������̓T�[�o�[�̃��O�𗧂Ă��܂ÅA�T�d�Ɍ������Ă��܂����ł����B�������ÍÅI�I�ÉA�����̂��郉�C�Z���X�R�[�h�ɓd�q���[���X���b�h���l�܂��Ă��邱�ƂɋC�t���܂����B +‚±‚ê‚ÍAƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ÉŠÖ˜A‚·‚郊ƒXƒN‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·BƒeƒLƒXƒg‚©‚çHTMLƒ^ƒO‚ð휂µ‚½ƒ‰ƒCƒZƒ“ƒXƒR[ƒh‚ðŽg—p‚µ‚Ä‚¢‚Ü‚µ‚½BŽ„‚½‚¿‚̓\[ƒXƒR[ƒh‚ðŽ‚Á‚Ä‚¢‚Ü‚µ‚½‚ªAŽ„‚½‚¿‚̓T[ƒo[‚̃ƒO‚ð—§‚Ä‚é‚Ü‚ÅATd‚ÉŒ¤‹†‚µ‚Ä‚¢‚Ü‚¹‚ñ‚Å‚µ‚½BŽ„‚½‚¿‚ÍÅI“I‚ÉA–â‘è‚Ì‚ ‚郉ƒCƒZƒ“ƒXƒR[ƒh‚É“dŽqƒ[ƒ‹ƒXƒŒƒbƒh‚ª‹l‚Ü‚Á‚Ä‚¢‚邱‚ƂɋC•t‚«‚Ü‚µ‚½B -���̃v���O�����ÍA�����Ē��������ނ̃e�L�X�g�������ÄA���܂��������B�������̕��͂łÍA�R�[�h�͓ñŽŸ“I�ł��������A���������肵�܂��B�����ÍA�������Ԃ��e�L�X�g�̒�����2���ɔ��Ⴗ�邱�Ƃ��Ӗ����܂��B�������̃e�L�X�g�����ʓI�ɔ������Ă����ê‡ï¿½ÍA�����Ƀo�O�𔭌������͂��ł��B�ނ炪�܂������N���������Ƃ��Ȃ����ÎA�������͌����Ė����������܂����ł����B���ꂪ�N�����ÆA�ÅI�I�ɖ����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚Å‚É��T�Ԃ������܂����B +‚±‚̃vƒƒOƒ‰ƒ€‚ÍA’·‚­‚Ä’¿‚µ‚¢Ží—ނ̃eƒLƒXƒg‚𜂢‚ÄA‚¤‚Ü‚­‚¢‚Á‚½B‚±‚ê‚ç‚Ì•¶Í‚Å‚ÍAƒR[ƒh‚Í“ñŽŸ“I‚Å‚ ‚Á‚½‚èAˆ«‚©‚Á‚½‚肵‚Ü‚·B‚±‚ê‚ÍAˆ—ŽžŠÔ‚ªƒeƒLƒXƒg‚Ì’·‚³‚Ì2æ‚É”ä—á‚·‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚ç‚̃eƒLƒXƒg‚ªˆê”Ê“I‚É”­¶‚µ‚Ä‚¢‚½ê‡‚ÍA‚·‚®‚ɃoƒO‚ð”­Œ©‚µ‚½‚Í‚¸‚Å‚·B”ނ炪‚Ü‚Á‚½‚­‹N‚±‚Á‚½‚±‚Æ‚ª‚È‚¯‚ê‚ÎAŽ„‚½‚¿‚ÍŒˆ‚µ‚Ä–â‘è‚ð•ø‚¦‚Ü‚¹‚ñ‚Å‚µ‚½B‚»‚ꂪ‹N‚±‚邯AÅI“I‚É–â‘è‚ð—‰ð‚µ‰ðŒˆ‚·‚é‚܂łɔTŠÔ‚©‚©‚è‚Ü‚µ‚½B Next [How to Learn Design Skills](11-How-to-Learn-Design-Skills.md) diff --git a/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md index 5635c12..2e2fe29 100644 --- a/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md +++ b/jp/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -1,9 +1,9 @@ # How to Learn Design Skills [//]: # (Version:1.0.0) -�\�t�g�E�F�A���݌v�������@���w�ԂɂÍA�݌v���ɕ����I�ɑ��݂��邱�Ƃɂ����ă����^�[�Ìs�����������܂��B ���ÉA�悭�����ꂽ�\�t�g�E�F�A�𒲂ׂ܂��B ���̌��A�ÅV�ÌÝŒv�Z�p�Ɋւ��é‘�Ђ��ǂނ��Ƃ��ł��܂��B +ƒ\ƒtƒgƒEƒFƒA‚ðÝŒv‚·‚é•û–@‚ðŠw‚Ô‚É‚ÍAÝŒvŽž‚É•¨—“I‚É‘¶Ý‚·‚邱‚Ƃɂæ‚Á‚ăƒ“ƒ^[‚Ìs“®‚ðŒ¤‹†‚µ‚Ü‚·B ŽŸ‚ÉA‚æ‚­‘‚©‚ꂽƒ\ƒtƒgƒEƒFƒA‚𒲂ׂ܂·B ‚»‚ÌŒãAÅV‚ÌÝŒv‹Zp‚ÉŠÖ‚·‚é‘Ђð“ǂނ±‚Æ‚ª‚Å‚«‚Ü‚·B -���ꂩ���A���Ȃ��͂����������ł����K�v�������܂��B �����ȃv���W�F�N�g�����n�߂܂��傤�B �ÅI�I�Ɋ����������A�f�U�C�������s�������A�����������A���̔��z�����ǂ̂悤�ɕ��ò‚µ‚������l�����������B ���̌��A���Ìl�Ƌ��͂��ÄA�����傫�ȃv���W�F�N�g�Éi���ł��������B �f�U�C���ÍA�l�������܂łɉ��N�������锻�f�̖����ł��B �X�}�[�g�ȃv���O���}�[�ÍA2�����Å\���Ɋ��b���w�ÑA�����������P���邱�Ƃ��ł��܂��B +‚»‚ê‚©‚çA‚ ‚È‚½‚Í‚»‚ê‚ðŽ©•ª‚Å‚â‚é•K—v‚ª‚ ‚è‚Ü‚·B ¬‚³‚ȃvƒƒWƒFƒNƒg‚©‚çŽn‚߂܂µ‚傤B ÅI“I‚ÉŠ®—¹‚µ‚½‚çAƒfƒUƒCƒ“‚ªŽ¸”s‚µ‚½‚©A¬Œ÷‚µ‚½‚©AŒ³‚Ì”­‘z‚©‚ç‚ǂ̂悤‚É•ªŠò‚µ‚½‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B ‚»‚ÌŒãA‘¼‚Ìl‚Æ‹¦—Í‚µ‚ÄA‚æ‚è‘å‚«‚ȃvƒƒWƒFƒNƒg‚Éi‚ñ‚Å‚­‚¾‚³‚¢B ƒfƒUƒCƒ“‚ÍAŠl“¾‚·‚é‚܂łɉ½”N‚à‚©‚©‚é”»’f‚Ì–â‘è‚Å‚·B ƒXƒ}[ƒg‚ȃvƒƒOƒ‰ƒ}[‚ÍA2ƒ–ŒŽ‚Å\•ª‚ÉŠî‘b‚ðŠw‚ÑA‚»‚±‚©‚ç‰ü‘P‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -�����̃X�^�C�����J�������͎̂��R�Ŗ𗧂��܂����A�f�U�C���͉Ȋw�ł͂Ȃ��|�p�ł��邱�Ƃ��Y���Ȃ��ł��������B �팱�҂ɖ{�������l�ÍA�������Ȋw�I�Ɍ����邱�ƂɊÖS�������܂��B �����̃f�U�C���X�^�C���ɂ‚��ēƒf�ɂ͂Ȃ��Ȃ��ł��������B +Ž©•ª‚̃Xƒ^ƒCƒ‹‚ðŠJ”­‚·‚é‚͎̂©‘R‚Å–ð—§‚¿‚Ü‚·‚ªAƒfƒUƒCƒ“‚͉Ȋw‚ł͂Ȃ­Œ|p‚Å‚ ‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B ”팱ŽÒ‚É–{‚ð‘‚­l‚ÍA‚»‚ê‚ð‰ÈŠw“I‚ÉŒ©‚¹‚邱‚ƂɊÖS‚ª‚ ‚è‚Ü‚·B “Á’è‚̃fƒUƒCƒ“ƒXƒ^ƒCƒ‹‚ɂ‚¢‚ēƒf‚ɂ͂Ȃç‚È‚¢‚Å‚­‚¾‚³‚¢B Next [How to Conduct Experiments](12-How-to-Conduct-Experiments.md) diff --git a/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index 5e0da0f..372fa02 100644 --- a/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/jp/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -1,23 +1,23 @@ # How to Conduct Experiments [//]: # (Version:1.0.0) -�x���Ĉ̑���Edsger Dijkstra�ÍA�R���s���[�^�T�C�G���X�͎����I�ȉȊw�ł͂Ȃ�[ExpCS]�ł����A�d�q�v�Z�@�Ɉˑ����Ȃ����Ƃ��Y�قÉ������܂����B�ނ͂�����1960�N��[�i�C�t]�ƌĂ��ł��܂��B +’x‚­‚Ĉ̑å‚ÈEdsger Dijkstra‚ÍAƒRƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‚ÍŽÀŒ±“I‚ȉȊw‚ł͂Ȃ­[ExpCS]‚Å‚ ‚èA“dŽqŒvŽZ‹@‚Ɉˑ¶‚µ‚È‚¢‚±‚Æ‚ð—Y•Ù‚Éà–¾‚µ‚Ü‚µ‚½B”Þ‚Í‚»‚ê‚ð1960”N‘ã[ƒiƒCƒt]‚ƌĂñ‚Å‚¢‚Ü‚·B -> ...���@���N�������F���̃g�s�b�N�ÍA���ۂɂ͎��p�Ƃ��Ď��p�Ȋw���w�Ԃ悤�Ȃ��̂ł����A�R���s���[�e�B���O�T�C�G���X�Íl�ԂÌS�ɂ��������Ɩ��ß��܂��Ă����A�}�V���Ƃ��̎��Ӌ@���ɂ‚��ÄB +> ...Šë‹@‚ª‹N‚±‚Á‚½F‚»‚̃gƒsƒbƒN‚ÍAŽÀۂɂ͎èp‚Æ‚µ‚ÄŽèp‰ÈŠw‚ðŠw‚Ԃ悤‚È‚à‚̂ł ‚èAƒRƒ“ƒsƒ…[ƒeƒBƒ“ƒOƒTƒCƒGƒ“ƒX‚ÍlŠÔ‚ÌS‚É‚µ‚Á‚©‚è‚Æ–„‚ßž‚Ü‚ê‚Ä‚¢‚½Aƒ}ƒVƒ“‚Æ‚»‚ÌŽü•Ó‹@Ší‚ɂ‚¢‚ÄB -�v���O���~���O�͎����I�ȉȊw�ł����ׂ��ł͂����܂��ñ‚ªA�قƂ��ǂÌ��ƃv���O���}�[�ÍA�_�C�N�X�g�����v�Z�Ȋw�ɂ����ĈӖ��������̂Ɋ֗^�����ґ��������Ă��܂����B�������͎����̕����œ����Ȃ����΂Ȃ��܂����B�����w�҂̂��ׂĂ������ł͂Ȃ��悤�ÉA�������͎����̕����œ����Ȃ����΂Ȃ��܂����B������30�N�������Ȃ��És�����Ƃ��ł����ÎA�����̓R���s���[�^�T�C�G���X�̈̑��È��ʂƂȂ��ł��傤�B +ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÍŽÀŒ±“I‚ȉȊw‚Å‚ ‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÍAƒ_ƒCƒNƒXƒgƒ‰‚ªŒvŽZ‰ÈŠw‚É‚æ‚Á‚ĈӖ¡‚·‚é‚à‚̂Ɋ֗^‚·‚éæÒ‘ò‚ðŽ‚Á‚Ä‚¢‚Ü‚¹‚ñBŽ„‚½‚¿‚ÍŽÀŒ±‚Ì•ª–ì‚Å“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB•¨—ŠwŽÒ‚Ì‚·‚ׂĂª‚»‚¤‚ł͂Ȃ¢‚悤‚ÉAŽ„‚½‚¿‚ÍŽÀŒ±‚Ì•ª–ì‚Å“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB¡‚©‚ç30”N‚ðŽÀŒ±‚È‚µ‚És‚¤‚±‚Æ‚ª‚Å‚«‚ê‚ÎA‚»‚ê‚̓Rƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‚̈̑å‚Ȭ‰Ê‚ƂȂé‚Å‚µ‚傤B -���s�����K�v�̂��������̎��ނ͎��̂Ƃ����ł��B +ŽÀs‚·‚é•K—v‚Ì‚ ‚éŽÀŒ±‚ÌŽí—Þ‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·B -- �����̗Ⴊ�����V�X�e�����e�X�g���ÄA�����炪�h�L�������e�[�V�����É������Ă��邱�Ƃ����؂������A�h�L�������e�[�V�������Ȃ��ê‡ï¿½Ì‰ï¿½ï¿½ï¿½ï¿½ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A -- �����ȃR�[�h�̕ÏX���e�X�g���ÄA���ۂɃo�O���C���������ǂ������m�F���A -- ���\�����̕s���S�Ȓm���̂��߂�2�‚̈قȂ��������ŃV�X�e���Ì��\�𑪒肷���B -- �f�[�^�Ì��������`�F�b�N�����B -- �����ÈA�܂��͓���o�O�̉��������������é“�v�����W�����B +- ­”‚̗Ⴊ‚ ‚éƒVƒXƒeƒ€‚ðƒeƒXƒg‚µ‚ÄA‚»‚ê‚炪ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚É€‹’‚µ‚Ä‚¢‚邱‚Æ‚ðŒŸØ‚µ‚½‚èAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ª‚È‚¢ê‡‚̉ž“š‚ð—‰ð‚µ‚½‚èA +- ¬‚³‚ȃR[ƒh‚Ì•ÏX‚ðƒeƒXƒg‚µ‚ÄAŽÀۂɃoƒO‚ðC³‚µ‚½‚©‚Ç‚¤‚©‚ðŠm”F‚µA +- «”\“Á«‚Ì•sŠ®‘S‚È’mޝ‚Ì‚½‚ß‚É2‚‚̈قȂéðŒ‰º‚ŃVƒXƒeƒ€‚Ì«”\‚𑪒肷‚éB +- ƒf[ƒ^‚Ì®‡«‚ðƒ`ƒFƒbƒN‚·‚éB +- ¢“ï‚ÈA‚Ü‚½‚͓‚¢ƒoƒO‚̉ðŒˆô‚ðŽ¦´‚·‚铌v‚ðŽûW‚·‚éB -���͂��̃G�b�Z�C�ł͎����̃f�U�C���������ł����Ƃ͎v���Ȃ��B���Ȃ��͕׋����A���K���Ȃ����΂Ȃ��܂����B�������A����2�r�b�g�̃A�h�o�C�X���ñ‹Ÿ‚��邱�Ƃ��ł��܂��B +Ž„‚Í‚±‚̃GƒbƒZƒC‚ł͎ÀŒ±‚̃fƒUƒCƒ“‚ðà–¾‚Å‚«‚邯‚ÍŽv‚í‚È‚¢B‚ ‚È‚½‚͕׋­‚µA—ûK‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µAŽ„‚Í2ƒrƒbƒg‚̃AƒhƒoƒCƒX‚ð’ñ‹Ÿ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -�܂��A���Ȃ��̉����A�܂��͂��Ȃ����e�X�g���悤�Ƃ��Ă����咣�ɂ‚��ÄA�����ɖ��m�ɂ����悤�ɂ��Ă��������B�܂��A���Ɏ������������Ă����A�܂��͑��Ìl�Ɠ����Ă����Ǝv�������ê‡ï¿½ÍA�������������߂��̂ɖ𗧂��܂��B +‚Ü‚¸A‚ ‚È‚½‚̉¼àA‚Ü‚½‚Í‚ ‚È‚½‚ªƒeƒXƒg‚µ‚悤‚Æ‚µ‚Ä‚¢‚éŽå’£‚ɂ‚¢‚ÄA”ñí‚É–¾Šm‚É‚·‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½A“Á‚ÉŽ©•ª‚ª¬—‚µ‚Ä‚¢‚éA‚Ü‚½‚Í‘¼‚Ìl‚Æ“­‚¢‚Ä‚¢‚邯Žv‚í‚ê‚éꇂÍA‰¼à‚ð‘‚«—¯‚ß‚é‚̂ɖ𗧂¿‚Ü‚·B -���A�̎������݌v���Ȃ����΂Ȃ��Ȃ����Ƃ��悭�����܂��B���ꂼ���̎����ÍŌ��̎����œ����ꂽ�m���Ɋ��Â��Ă��܂��B���������ÄA�”\�Ȍ��葽���Ì������ñ‹Ÿ‚����悤�Ɏ������݌v�����K�v�������܂��B�c�O�Ȃ����A�����͊e�������ȒP�ɂ��邱�Ƃɋْ����Ă��܂��B�o�����ʂ��Ă��̔��f�𔭓W�������K�v�������܂��B +ˆê˜A‚ÌŽÀŒ±‚ðÝŒv‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B‚»‚ꂼ‚ê‚ÌŽÀŒ±‚ÍÅŒã‚ÌŽÀŒ±‚Å“¾‚ç‚ꂽ’mޝ‚ÉŠî‚¢‚Ä‚¢‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‰Â”\‚ÈŒÀ‚葽‚­‚Ìî•ñ‚ð’ñ‹Ÿ‚·‚邿‚¤‚ÉŽÀŒ±‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŽc”O‚È‚ª‚çA‚±‚ê‚ÍŠeŽÀŒ±‚ðŠÈ’P‚É‚·‚邱‚Ƃɋْ£‚µ‚Ä‚¢‚Ü‚·BŒoŒ±‚ð’Ê‚µ‚Ä‚±‚Ì”»’f‚ð”­“W‚³‚¹‚é•K—v‚ª‚ ‚è‚Ü‚·B Next [Team Skills - Why Estimation is Important](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md index 1edbada..83fb792 100644 --- a/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md +++ b/jp/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -1,15 +1,15 @@ # Why Estimation is Important [//]: # (Version:1.0.0) -�ł��邾���������p�̃\�t�g�E�F�A�V�X�e�����ғ��������ɂÍA�J���̌v�悾���łȂ��A�h�L�������e�[�V�����A�����A�}�[�P�e�B���O���v�悷���K�v�������܂��B���ƃv���W�F�N�g�łÍA�̔��Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½K�v�ł��B�J�����Ԃ��\�����邱�Ƃ��ł��Ȃ��ê‡ï¿½A�����������ʓI�Ɍv�悷�邱�Ƃ͕s�”\�ł��B +‚Å‚«‚邾‚¯‘‚­Œ»—p‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ð‰Ò“­‚³‚¹‚é‚É‚ÍAŠJ”­‚ÌŒv‰æ‚¾‚¯‚łȂ­AƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“A“±“üAƒ}[ƒPƒeƒBƒ“ƒO‚àŒv‰æ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B¤‹ÆƒvƒƒWƒFƒNƒg‚Å‚ÍA”Ì”„‚Æà–±‚à•K—v‚Å‚·BŠJ”­ŽžŠÔ‚ð—\‘ª‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ê‡A‚±‚ê‚ç‚ðŒø‰Ê“I‚ÉŒv‰æ‚·‚邱‚Ƃ͕s‰Â”\‚Å‚·B -�ÇD�È����͗\���”\�����ñ‹Ÿ‚����B�}�l�[�W���[�������������Ă��܂��B���_�I�ɂ����ۓI�ɂ��A�\�t�g�E�F�A�̊J���ɂǂꂭ�炢�̎��Ԃ������邩�ð³Šm�ɗ\�����邱�Ƃ͕s�”\�ł����Ƃ��������ÍA���΂��Όo�c�҂ɂƂ��Ď������܂��B�������͂��̕s�”\�Ȃ��Ƃ����‚������悤�ɋ��߂����Ă����A�����ɂ����ɒ��ʂ��Ȃ����΂Ȃ��܂����B�������A���Ì��Ƃ̕s�”\�����F�߂Ȃ����ƂÍ����ł����A�K�v�ɉ����Ä��������������B�����l�ɂ‚��Č������R�~���j�P�[�V�����̗]�n���������ñ‚ ‚��܂��B�l�X�͊��킭�͕��͂������悤�Ɏv�����X���������܂��B +—ÇD‚È„’è‚Í—\‘ª‰Â”\«‚ð’ñ‹Ÿ‚·‚éBƒ}ƒl[ƒWƒƒ[‚à‚»‚ê‚ðˆ¤‚µ‚Ä‚¢‚Ü‚·B—˜_“I‚É‚àŽÀÛ“I‚É‚àAƒ\ƒtƒgƒEƒFƒA‚ÌŠJ”­‚ɂǂꂭ‚ç‚¢‚ÌŽžŠÔ‚ª‚©‚©‚é‚©‚ð³Šm‚É—\‘ª‚·‚邱‚Ƃ͕s‰Â”\‚Å‚ ‚邯‚¢‚¤Ž–ŽÀ‚ÍA‚µ‚΂µ‚ÎŒo‰cŽÒ‚ɂƂÁ‚ÄŽ¸‚í‚ê‚Ü‚·BŽ„‚½‚¿‚Í‚±‚Ì•s‰Â”\‚È‚±‚Æ‚ð‚¢‚Â‚à‚·‚邿‚¤‚É‹‚ß‚ç‚ê‚Ä‚¨‚èA³’¼‚É‚»‚ê‚É’¼–Ê‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µA‚±‚Ìì‹Æ‚Ì•s‰Â”\«‚ð”F‚߂Ȃ¢‚±‚Ƃͳ’¼‚Å‚ ‚èA•K—v‚ɉž‚¶‚Äà–¾‚µ‚Ä‚­‚¾‚³‚¢B„’è’l‚ɂ‚¢‚ÄŒë‚Á‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—]’n‚ª‚½‚­‚³‚ñ‚ ‚è‚Ü‚·BlX‚ÍŠè‚í‚­‚Í•¶Í‚ª‹Á‚­‚悤‚ÉŽv‚¦‚éŒXŒü‚ª‚ ‚è‚Ü‚·B ->���ÍA���������{���ɖ����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÎA5�T�ԂŖ�50���̊m���ŒB�����邱�Ƃ��ł����Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��i���̊ԂɒN�����������Y�܂��Ȃ����Îj�B +>Ž„‚ÍA‚à‚µŽ„‚ª–{“–‚É–â‘è‚ð—‰ð‚·‚ê‚ÎA5TŠÔ‚Å–ñ50“‚ÌŠm—¦‚Å’B¬‚·‚邱‚Æ‚ª‚Å‚«‚邯„‘ª‚µ‚Ü‚·i‚»‚ÌŠÔ‚É’N‚àŽ„‚½‚¿‚ð”Y‚Ü‚³‚È‚¯‚ê‚ÎjB -�{���ɈӖ������F +–{“–‚ɈӖ¡‚·‚éF ->���Í�����5�T�Ԍ��ɂ��ׂĂ̂��Ƃ����邱�Ƃ��ñ‘©‚��܂��B +>Ž„‚Í¡‚©‚ç5TŠÔŒã‚É‚·‚ׂĂ̂±‚Æ‚ð‚â‚邱‚Æ‚ð–ñ‘©‚µ‚Ü‚·B -���̈��ʓI�ȉ��߂̖����łÍA���i���ڋq�ƌ��ς��肪�����Ӗ������̂����A�V���v�g���̂悤�ɖ����I�ɋc�_�����K�v�������܂��B�ނ炪���Ȃ��ɂǂ̂悤�Ɍ����邩�ɂ������炸�A���Ȃ��̑O�����Äl�����������B +‚±‚̈ê”Ê“I‚ȉðŽß‚Ì–â‘è‚Å‚ÍAãŽi‚âŒÚ‹q‚ÆŒ©Ï‚à‚肪‰½‚ðˆÓ–¡‚·‚é‚Ì‚©‚ðAƒVƒ“ƒvƒgƒ“‚̂悤‚É–¾Ž¦“I‚É‹c˜_‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B”ނ炪‚ ‚È‚½‚ɂǂ̂悤‚ÉŒ©‚¦‚é‚©‚É‚©‚©‚í‚炸A‚ ‚È‚½‚Ì‘O’ñ‚ðÄl‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Estimate Programming Time](02-How-to-Estimate-Programming-Time.md) diff --git a/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md index 1205359..9637832 100644 --- a/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md +++ b/jp/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -1,21 +1,21 @@ # How to Estimate Programming Time [//]: # (Version:1.0.0) -���ς����ɂ͗��K���K�v�ł��B�����͂܂��J�����K�v�Ƃ����B�����͔����ɑ����̘J�͂��������̂ÅA���ɑ傫�Ȃ��̂����ς����悤�ɋ��߂��ꂽ�ê‡ï¿½É‚ÍA���ς����ɂ����鎞�Ԃ����ς��邱�Ƃ������߂��܂��B +Œ©Ï‚à‚è‚ɂ͗ûK‚ª•K—v‚Å‚·B‚»‚ê‚͂܂½˜J“­‚ð•K—v‚Æ‚·‚éB‚»‚ê‚Í”ñí‚É‘½‚­‚̘J—Í‚ª‚©‚©‚é‚Ì‚ÅA“Á‚ɑ傫‚È‚à‚Ì‚ðŒ©Ï‚à‚邿‚¤‚É‹‚ß‚ç‚ꂽꇂɂÍAŒ©Ï‚à‚è‚É‚©‚©‚鎞ŠÔ‚ðŒ©Ï‚à‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B -�����傫�����̂̌��ς������ñ‹Ÿ‚����悤�ɗ��܂ꂽ�Ƃ��A�ł������Ȃ��Ƃ̓X�g�[�����邱�Ƃł��B�قƂ��ǂ̃G���W�j�A�͔M���I�ł����A�M�]���Ă��܂��B�X�g�[�������ÆA�X�g�[�������s�����������܂��B�������A�����ł̌��ς����ÍA�����炭���m�Å����ł͂����܂����B +‰½‚©‘å‚«‚¢‚à‚̂̌©Ï‚à‚è‚ð’ñ‹Ÿ‚·‚邿‚¤‚É—Š‚Ü‚ê‚½‚Æ‚«Ał೒¼‚È‚±‚Ƃ̓Xƒg[ƒ‹‚·‚邱‚Ƃł·B‚Ù‚Æ‚ñ‚ǂ̃Gƒ“ƒWƒjƒA‚Í”M‹¶“I‚Å‚ ‚èA”M–]‚µ‚Ä‚¢‚Ü‚·BƒXƒg[ƒ‹‚·‚邯AƒXƒg[ƒ‹‚µ‚Ä‚à•s‰õŠ´‚ðŠ´‚¶‚Ü‚·B‚µ‚©‚µAŒ»ê‚ł̌©Ï‚à‚è‚ÍA‚¨‚»‚ç‚­³Šm‚ų’¼‚ł͂ ‚è‚Ü‚¹‚ñB -���~���ÍA�^�X�N�̎��s�⎎�����������邱�Ƃ��ł��܂��B�����I���͂������ÎA�����Í����l�ð¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Å‚����m�ȕ��@�ł����A���ۂÌi���������炷�B +’âŽ~’†‚ÍAƒ^ƒXƒN‚ÌŽÀs‚⎎ì‚ðŒŸ“¢‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B­Ž¡“Iˆ³—Í‚ª‹–‚¹‚ÎA‚±‚ê‚Í„’è’l‚𶬂·‚éłೊm‚È•û–@‚Å‚ ‚èAŽÀÛ‚Ìi•à‚ð‚à‚½‚ç‚·B -���炩�̒����̂��߂Ɏ��Ԃ��Ƃ邱�Ƃ��ł��Ȃ��Ƃ��ÍA�Å��Ɍ��ς�����??�Ӗ��������ɖ��m�ɂ����K�v�������܂��B���̈Ӗ������ʂł̌��ς�����??�Å��ÆÅŒï¿½ï¿½Ì•����ɖ߂��Ă��������B�e�^�X�N��1���ȉ��ɂȂ��܂ÅA�^�X�N�����X�É����ȃT�u�^�X�N�É\���������邱�Ƃɂ����ÄA���ʂɂ��錩�ς������������܂��B���z�I�ɂ͒������ő��ł����B�ł��d�v�Ȃ��Ƃ͉����c���Ȃ����Ƃł��B�Ⴆ�ÎA�h�L�������e�[�V�����A�e�X�g�A�v���̎��ÔA���̃O���[�v�Ƃ̃R�~���j�P�[�V�����̎��ÔA�����ыx�Ɏ��Ԃ͂��ׂĔ����Éd�v�ł��B���Ȃ����i�b�N���w�b�h�����������̈ꕔ�����₵�Ă����ê‡ï¿½ÍA�����̂��߂ÌL���\�����������ς����ɓ����܂��B�����ɂ����A���Ȃ��Ì��i�͂��Ȃ��̎��Ԃ��Å����ɗ}���邱�Ƃ��ł����悤�ɂȂ��A�����Ɏ��Ԃ������邱�Ƃ������܂��B +‰½‚ç‚©‚Ì’²¸‚Ì‚½‚߂ɎžŠÔ‚ð‚Æ‚é‚±‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚«‚ÍAʼn‚ÉŒ©Ï‚à‚è‚Ì??ˆÓ–¡‚ð”ñí‚É–¾Šm‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚̈Ӗ¡‚ð‘–ʂł̌©Ï‚à‚è‚Ì??ʼn‚ÆÅŒã‚Ì•”•ª‚É–ß‚µ‚Ä‚­‚¾‚³‚¢BŠeƒ^ƒXƒN‚ª1“úˆÈ‰º‚ɂȂé‚Ü‚ÅAƒ^ƒXƒN‚ð™X‚ɬ‚³‚ȃTƒuƒ^ƒXƒN‚É\¬‰ðœ‚·‚邱‚Ƃɂæ‚Á‚ÄA‘–ʂɂæ‚錩ςà‚è‚ð€”õ‚µ‚Ü‚·B—‘z“I‚ɂ͒·‚³‚ªÅ‘å‚Å‚ ‚éBÅ‚àd—v‚È‚±‚Ƃ͉½‚àŽc‚³‚È‚¢‚±‚Ƃł·B—Ⴆ‚ÎAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“AƒeƒXƒgAŒv‰æ‚ÌŽžŠÔA‘¼‚̃Oƒ‹[ƒv‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽžŠÔA‚¨‚æ‚Ñ‹x‰ÉŽžŠÔ‚Í‚·‚ׂĔñí‚Éd—v‚Å‚·B‚ ‚È‚½‚ªƒiƒbƒNƒ‹ƒwƒbƒh‚ðˆµ‚¤–ˆ“ú‚̈ꕔ‚ð”ï‚₵‚Ä‚¢‚éꇂÍA‚»‚ê‚Ì‚½‚ß‚ÌL\žî•ñ‚ðŒ©Ï‚à‚è‚É“ü‚ê‚Ü‚·B‚±‚ê‚É‚æ‚èA‚ ‚È‚½‚ÌãŽi‚Í‚ ‚È‚½‚ÌŽžŠÔ‚ðŬŒÀ‚É—}‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚ɂȂèA‚³‚ç‚ÉŽžŠÔ‚ª‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B -���͈Öق̂����É����l�𖄂ß��ޗD�ꂽ�G���W�j�A���m���Ă��܂����A�������Ȃ��Ƃ����߂��܂��B�p�b�f�B���O�̌��ʂ�1�‚ÍA���Ȃ��ÌM�����͊����Ă����”\�������邱�Ƃł��B�Ⴆ�ÎA�G���W�j�A�ÍA�{����1���������Ǝv���d���̂��߂�3���Ԃ����ς��邩�������܂����B�G���W�j�A�ÍA2���Ԃ����ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A2���ԑ��̗L�p�ȃv���W�F�N�g�Ɏ����|���낤�ƌv�悵�Ă��邩�������܂����B�������A���Ì��Ƃ�1���Ŋ����������Ƃ����o�����i���̂悤�ɔ��������ê‡ï¿½j�A�����݂܂��͉ߑ��]���̊O�ς����܂����B���Ȃ������ۂɂ����Ă��邱�Ƃ��K�؂ɉŽ������������͂邩�ɗD���Ă��܂��B�h�L�������e�[�V�������R�[�f�B���O��2�{�̎��Ԃ��v���A���ς��肪�����ł����Ƃ����ÎA�������}�l�[�W���[�Ɍ������悤�ɂ��邱�Ƃő傫�ȗ��_���������܂��B +Ž„‚͈Öق̂¤‚¿‚É„’è’l‚ð–„‚ßž‚Þ—D‚ꂽƒGƒ“ƒWƒjƒA‚ð’m‚Á‚Ä‚¢‚Ü‚·‚ªA‚»‚¤‚µ‚È‚¢‚Æ‚¨Š©‚ß‚µ‚Ü‚·BƒpƒbƒfƒBƒ“ƒO‚ÌŒ‹‰Ê‚Ì1‚‚ÍA‚ ‚È‚½‚ÌM—Š‚ªŒÍЉ‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚邱‚Ƃł·B—Ⴆ‚ÎAƒGƒ“ƒWƒjƒA‚ÍA–{“–‚É1“ú‚©‚©‚邯Žv‚¤ŽdŽ–‚Ì‚½‚ß‚É3“úŠÔ‚ðŒ©Ï‚à‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒGƒ“ƒWƒjƒA‚ÍA2“úŠÔ‚»‚ê‚ð•¶‘‰»‚µ‚½‚èA2“úŠÔ‘¼‚Ì—L—p‚ȃvƒƒWƒFƒNƒg‚ÉŽæ‚èŠ|‚©‚낤‚ÆŒv‰æ‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚µ‚©‚µA‚»‚Ìì‹Æ‚ª1“ú‚ÅŠ®—¹‚µ‚½‚±‚Æ‚ªŒŸo‚³‚êi‚»‚̂悤‚É”»–¾‚µ‚½ê‡jA‚½‚é‚݂܂½‚͉ߑå•]‰¿‚ÌŠOŠÏ‚ª¶‚Ü‚ê‚éB‚ ‚È‚½‚ªŽÀÛ‚É‚â‚Á‚Ä‚¢‚邱‚Æ‚ð“K؂ɉŽ‹‰»‚·‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·BƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ªƒR[ƒfƒBƒ“ƒO‚Ì2”{‚ÌŽžŠÔ‚ð—v‚µAŒ©Ï‚à‚肪‚»‚¤‚Å‚ ‚邯‚·‚ê‚ÎA‚±‚ê‚ðƒ}ƒl[ƒWƒƒ[‚ÉŒ©‚¦‚邿‚¤‚É‚·‚邱‚Ƃő傫‚È—˜“_‚ª“¾‚ç‚ê‚Ü‚·B -�������ɖ����I�Ƀp�b�h�B���Ȃ��̃A�v���[�`�����܂������Ȃ��ê‡ï¿½A�^�X�N�ɂ͂����炭1���������܂����A10���������Ă����܂��܂����B�����łȂ��ê‡ï¿½ÍA���Ȃ��Ƃ��A�m���̌��ς����ɂ����ĕ��ϓI�Éd�ݕt�������܂��B���ʂ��Č��ς��������蓖�Ă邱�Ƃ��ł��郊�X�N�v���ÍA�X�P�W���[���ɓ����K�v�������܂��B����1�T�Ԃ�1�l���a�C�ɂȂ邱�Ƃ͂܂������܂����B�������A�����̃G���W�j�A�����������K�͂ȃv���W�F�N�g�ɂ͕a�C�������܂��B���l�ɋx�ɂ̎��ÔB�����ÄA�S�ГI�ȌP���Z�~�i�[���`�����������m���ÍH���ꂪ�����ł����ê‡ï¿½ÍA�������\���܂��B���������A���m�̖��m���A�܂���* unk-unks *�������܂��B���`�ɂ���Unk-unks�͌•ʂɌ��ς��邱�Ƃ͂ł��܂����B���ׂĂ�unk-unks�̃O���[�o���ÈL���\���������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A���i�ɘA�����鑼�̕��@�ł����������������肷�邱�Ƃ��ł��܂��B�������A���Ȃ��Ì��i�ɔނ炪���݂��Ă��邱�Ƃ��Y���邱�Ƃ͂ł��܂����B�����ÄAunk-unks���l�������Ă��Ȃ��ƌ��ς��肪�\���ɂȂ��̂ÍA���ϊȒP�ł��B +‘ã‚í‚è‚É–¾Ž¦“I‚ɃpƒbƒhB‚ ‚È‚½‚̃Aƒvƒ[ƒ`‚ª‚¤‚Ü‚­‚¢‚©‚È‚¢ê‡Aƒ^ƒXƒN‚ɂ͂¨‚»‚ç‚­1“ú‚©‚©‚è‚Ü‚·‚ªA10“ú‚©‚©‚Á‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB‚»‚¤‚łȂ¢ê‡‚ÍA­‚È‚­‚Æ‚àAŠm—¦‚ÌŒ©Ï‚à‚è‚É‚æ‚Á‚Ä•½‹Ï“I‚Éd‚Ý•t‚¯‚³‚ê‚Ü‚·Bޝ•Ê‚µ‚ÄŒ©Ï‚à‚è‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚郊ƒXƒN—vˆö‚ÍAƒXƒPƒWƒ…[ƒ‹‚É“ü‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚é1TŠÔ‚É1l‚ª•a‹C‚ɂȂ邱‚Ƃ͂܂¸‚ ‚è‚Ü‚¹‚ñB‚µ‚©‚µA‘½‚­‚̃Gƒ“ƒWƒjƒA‚ð•ø‚¦‚é‘å‹K–͂ȃvƒƒWƒFƒNƒg‚ɂ͕a‹C‚ª‚ ‚è‚Ü‚·B“¯—l‚É‹x‰É‚ÌŽžŠÔB‚»‚µ‚ÄA‘SŽÐ“I‚ÈŒP—ûƒZƒ~ƒi[‚ª‹`–±‰»‚³‚ê‚éŠm—¦‚ÍH‚»‚ꂪ„‘ª‚Å‚«‚éꇂÍA‚»‚ê‚ð“\‚è‚Ü‚·B‚à‚¿‚ë‚ñA–¢’m‚Ì–¢’m”A‚Ü‚½‚Í* unk-unks *‚ª‚ ‚è‚Ü‚·B’è‹`‚É‚æ‚éUnk-unks‚͌•ʂɌ©Ï‚à‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚·‚ׂĂÌunk-unks‚̃Oƒ[ƒoƒ‹‚ÈL\žî•ñ‚ð쬂µ‚½‚èAãŽi‚ɘA—‚·‚鑼‚Ì•û–@‚Å‚»‚ê‚ç‚ðˆ—‚µ‚½‚è‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚ÌãŽi‚ɔނ炪‘¶Ý‚µ‚Ä‚¢‚邱‚Æ‚ð–Y‚ê‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚»‚µ‚ÄAunk-unks‚ªl—¶‚³‚ê‚Ä‚¢‚È‚¢‚ÆŒ©Ï‚à‚肪—\’è‚ɂȂé‚Ì‚ÍA‘å•ÏŠÈ’P‚Å‚·B -�`�[���‹��łÍA���Ƃ��s���l�Ɍ��ς������������悤�ɂ��Ă��������B�܂��A�`�[���S�̂Ō��ς�����??�R���Z���T�X�𓾂悤�Ƃ����K�v�������܂��B�l�X�͋Z�p�A�o���A�����A�������M�̓x�������傫���قȂ��܂��B���͂ȃv���O���}�[���������g�ð„’肵�A�ア�v���O���}�[�����Ì����l���ێ����Ă����Ƃ��ɂÍA�J���~�e�B���������܂��B�S�̂̃`�[�������ς����Ƀ��C�����ƂÉ��ӂ����Ƃ����s�ׂÍA�`�[���̗����𖾊m�ɂ��A���\�[�X�Ì��p�I�ÈĊ��蓖�Ă̋@�����”\�ɂ����i�Ⴆ�ÎA�����ア�`�[�������o�[�������苭���`�[���ɕ��S���ڂ��ȂÇj�B +ƒ`[ƒ€ŠÂ‹«‚Å‚ÍAì‹Æ‚ðs‚¤l‚ÉŒ©Ï‚à‚è‚ð‚³‚¹‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½Aƒ`[ƒ€‘S‘̂Ō©Ï‚à‚è‚Ì??ƒRƒ“ƒZƒ“ƒTƒX‚𓾂悤‚Æ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BlX‚Í‹ZpAŒoŒ±A€”õA‚»‚µ‚ÄŽ©M‚Ì“x‡‚¢‚ª‘å‚«‚­ˆÙ‚È‚è‚Ü‚·B‹­—͂ȃvƒƒOƒ‰ƒ}[‚ªŽ©•ªŽ©g‚ð„’肵AŽã‚¢ƒvƒƒOƒ‰ƒ}[‚ª‚±‚Ì„’è’l‚ð•ÛŽ‚µ‚Ä‚¢‚邯‚«‚É‚ÍAƒJƒ‰ƒ~ƒeƒB‚ª”­¶‚µ‚Ü‚·B‘S‘̂̃`[ƒ€‚ªŒ©Ï‚à‚è‚Ƀ‰ƒCƒ“‚²‚ƂɇˆÓ‚·‚邯‚¢‚¤sˆ×‚ÍAƒ`[ƒ€‚Ì—‰ð‚𖾊m‚É‚µAƒŠƒ\[ƒX‚Ìíp“I‚ÈÄŠ„‚è“–‚Ă̋@‰ï‚ð‰Â”\‚É‚·‚éi—Ⴆ‚ÎA‚æ‚èŽã‚¢ƒ`[ƒ€ƒƒ“ƒo[‚©‚ç‚æ‚è‹­‚¢ƒ`[ƒ€‚É•‰’S‚ðˆÚ‚·‚È‚ÇjB -�]�����邱�Ƃ��ł��Ȃ��傫�ȃ��X�N�������ê‡ï¿½ÍA���Ȃ��̃}�l�[�W���[���R�~�b�g���Ă��Ȃ��قNj��͂Éq�×A���X�N�����������ƒp�����������̂ɂȂ邱�Ƃ͂��Ȃ��̋`���ł��B���̂悤�Èê‡ï¿½É‚ÍA�K�v�Ȃ��Ƃ������ÎA���X�N�����炷���߂És�����邱�Ƃ������Ă��܂��B +•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‘å‚«‚ÈƒŠƒXƒN‚ª‚ ‚éꇂÍA‚ ‚È‚½‚̃}ƒl[ƒWƒƒ[‚ªƒRƒ~ƒbƒg‚µ‚Ä‚¢‚È‚¢‚Ù‚Ç‹­—Í‚Éq‚×AƒŠƒXƒN‚ª”­¶‚·‚邯’p‚¸‚©‚µ‚¢‚à‚̂ɂȂ邱‚Ƃ͂ ‚È‚½‚Ì‹`–±‚Å‚·B‚»‚̂悤‚ÈꇂɂÍA•K—v‚È‚±‚Æ‚ª‚ ‚ê‚ÎAƒŠƒXƒN‚ðŒ¸‚ç‚·‚½‚ß‚És‚í‚ê‚邱‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B -* Extreme Programming *���g�p�����悤�ɉ��Ђɔ[�������邱�Ƃ��ł����ÎA���r�I�����Ȃ��̂����ς��邾���ł悭�A�����͂����Ɗy�������Y�I�ł��B +* Extreme Programming *‚ðŽg—p‚·‚邿‚¤‚ɉïŽÐ‚É”[“¾‚³‚¹‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA”äŠr“I¬‚³‚È‚à‚Ì‚ðŒ©Ï‚à‚邾‚¯‚ł悭A‚±‚ê‚Í‚à‚Á‚ÆŠy‚µ‚­¶ŽY“I‚Å‚·B Next [How to Find Out Information](03-How-to-Find-Out-Information.md) diff --git a/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md index ab26976..b072fcb 100644 --- a/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md +++ b/jp/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -1,19 +1,19 @@ # How to Find Out Information [//]: # (Version:1.0.0) -���Ȃ����m���K�v�̂��é«ï¿½ï¿½ï¿½ÍA���Ȃ������������‚������@�����肵�܂��B +‚ ‚È‚½‚ª’m‚é•K—v‚Ì‚ ‚髎¿‚ÍA‚ ‚È‚½‚ª‚»‚ê‚ðŒ©‚Â‚¯‚é•û–@‚ðŒˆ’è‚µ‚Ü‚·B -�\�t�g�E�F�A���i�ÌÅV�̃p�b�`���x���ȂÇA�q�ϓI�ŊȒP�ȋ��̓I�Ȃ��̂Ɋւ�������*���K�v�Èê‡ï¿½ÍA�C���^�[�l�b�g�������������A�f�B�X�J�b�V�����O���[�v�ɓ��e�����肵�ÄA�����Ìl�ɒ��J�Ɏ��₵�Ă��������B�C���^�[�l�b�g���ňӌ������ϓI�ȉ��߂̂����ꂩ���@���Ă������̂͌������Ȃ��ł��������B�h���u���Æ^���̔䗦���������܂��B +ƒ\ƒtƒgƒEƒFƒA»•i‚ÌÅV‚̃pƒbƒ`ƒŒƒxƒ‹‚È‚ÇA‹qŠÏ“I‚ÅŠÈ’P‚È‹ï‘Ì“I‚È‚à‚̂Ɋւ·‚éî•ñ*‚ª•K—v‚ÈꇂÍAƒCƒ“ƒ^[ƒlƒbƒg‚ðŒŸõ‚µ‚½‚èAƒfƒBƒXƒJƒbƒVƒ‡ƒ“ƒOƒ‹[ƒv‚É“Še‚µ‚½‚肵‚ÄA‘½‚­‚Ìl‚É’š”J‚ÉŽ¿–₵‚Ä‚­‚¾‚³‚¢BƒCƒ“ƒ^[ƒlƒbƒgã‚ňӌ©‚âŽåŠÏ“I‚ȉðŽß‚Ì‚¢‚¸‚ê‚©‚ð’@‚¢‚Ä‚¢‚é‚à‚̂͌Ÿõ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢BƒhƒŠƒuƒ“‚Æ^ŽÀ‚̔䗦‚ª‚‚·‚¬‚Ü‚·B -���Ȃ����������ϓI�Ȃ��̂Ɋւ������ʓI�Ȓm��*�l�X�������ɂ‚��Äl���������j���m�肽���Ȃ��A�}���Ùi�{���ۊǂ����Ă��镨���I�����j�És���܂��B���Ƃ��ÎA���w�₫�̂����_���ɂ‚��Ċw�ԂɂÍA�}���قÉs���܂��B +‚ ‚È‚½‚ª‰½‚©ŽåŠÏ“I‚È‚à‚̂Ɋւ·‚éˆê”Ê“I‚È’mޝ*lX‚ª‚»‚ê‚ɂ‚¢‚Äl‚¦‚Ä‚«‚½—ðŽj‚ð’m‚肽‚¢‚È‚çA}‘ŠÙi–{‚ª•ÛŠÇ‚³‚ê‚Ä‚¢‚镨—“IŒš•¨j‚És‚«‚Ü‚·B‚½‚Æ‚¦‚ÎA”Šw‚â‚«‚Ì‚±‚â_”é‚ɂ‚¢‚ÄŠw‚Ô‚É‚ÍA}‘ŠÙ‚És‚«‚Ü‚·B -���Ȃ����m�������K�v������*�ȒP�Ȃ��Ƃł͂Ȃ��������������@* 2�‚܂���3�‚Ì��Ђ��擾���A���������ǂ��ł��������B���Ȃ��ÍA�C���^�[�l�b�g�����\�t�g�E�F�A�p�b�P�[�W���C���X�g�[�������ȂÇA�ȒP�Ȃ��Ƃ��������@���w�Ԃ��������܂����B�ǂ��v���O���~���O�e�N�j�b�N�̂悤�Èd�v�Ȃ��Ƃ��w�Ԃ��Ƃ����ł��܂����A�\���b�h�u�b�N�̓K�؂ȕ������ǂނ̂ɗv�������������ʂ̌����ƕ��בւ��A���ʂ̌����̌@���o���ɂ����Ƒ����̎��Ԃ����₷���Ƃ��ł��܂��B +‚ ‚È‚½‚ª’m‚Á‚Ä‚¢‚é•K—v‚ª‚ ‚é*ŠÈ’P‚È‚±‚Ƃł͂Ȃ¢‰½‚©‚ð‚·‚é•û–@* 2‚‚܂½‚Í3‚Â‚Ì‘Ð‚ðŽæ“¾‚µA‚»‚ê‚ç‚ð“Ç‚ñ‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ÍAƒCƒ“ƒ^[ƒlƒbƒg‚©‚çƒ\ƒtƒgƒEƒFƒAƒpƒbƒP[ƒW‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚È‚ÇAŠÈ’P‚È‚±‚Æ‚ð‚·‚é•û–@‚ðŠw‚Ô‚©‚à‚µ‚ê‚Ü‚¹‚ñB—Ç‚¢ƒvƒƒOƒ‰ƒ~ƒ“ƒOƒeƒNƒjƒbƒN‚̂悤‚Èd—v‚È‚±‚Æ‚ðŠw‚Ô‚±‚Æ‚³‚¦‚Å‚«‚Ü‚·‚ªAƒ\ƒŠƒbƒhƒuƒbƒN‚Ì“K؂ȕ”•ª‚ð“ǂނ̂ɗv‚·‚邿‚è‚àŒ‹‰Ê‚ÌŒŸõ‚Æ•À‚בւ¦AŒ‹‰Ê‚ÌŒ ŒÀ‚ÌŒ@‚èo‚µ‚É‚à‚Á‚Æ‘½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B -*���ɒN���m�肽���Ȃ����ñ‚ª•K�v�Èê‡*���Ƃ��ÎA���̃\�t�g�E�F�A�������ȃf�[�^�Z�b�g�ÌV�������i�ł��邱�Ƃ��m�������ê‡ï¿½A�C���^�[�l�b�g�ƃ��C�u���������������K�v�������܂��B�������̃I�v�V���������S�Ɏg���s�����ꂽ���A�������m�F���邽�߂Ɏ������݌v���邱�Ƃ��ł��܂��B +*‘¼‚É’N‚à’m‚肽‚­‚È‚¢î•ñ‚ª•K—v‚Èê‡*‚½‚Æ‚¦‚ÎA‚±‚̃\ƒtƒgƒEƒFƒA‚ª‹‘å‚ȃf[ƒ^ƒZƒbƒg‚ÌV‚µ‚¢ì•i‚Å‚ ‚邱‚Æ‚ð’m‚Á‚Ä‚¢‚éê‡AƒCƒ“ƒ^[ƒlƒbƒg‚ƃ‰ƒCƒuƒ‰ƒŠ‚ðŒŸõ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚̃IƒvƒVƒ‡ƒ“‚ªŠ®‘S‚ÉŽg‚¢s‚­‚³‚ꂽŒãA‚»‚ê‚ðŠm”F‚·‚邽‚߂ɎÀŒ±‚ðÝŒv‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -�Ɠ��È󋵂��l�������ӌ��≿�l���f���K�v�Èê‡ï¿½ÍA�����Ƃɑ��k�����������B���Ƃ��ÎALISP�ÉÅV�̃f�[�^�x�[�X�Ǘ��V�X�e�����\�z���邱�Ƃ��ǂ����ǂ������m�肽���ê‡ï¿½ÍALISP�Ì����Ƃƃf�[�^�x�[�X�Ì����Ƃɑ��k�����K�v�������܂��B +“Æ“Á‚È󋵂ðl—¶‚µ‚½ˆÓŒ©‚≿’l”»’f‚ª•K—v‚ÈꇂÍAê–副‚ɑВk‚µ‚Ä‚­‚¾‚³‚¢B‚½‚Æ‚¦‚ÎALISP‚ÉÅV‚̃f[ƒ^ƒx[ƒXŠÇ—ƒVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ª—Ç‚¢‚©‚Ç‚¤‚©‚ð’m‚肽‚¢ê‡‚ÍALISP‚Ìê–副‚ƃf[ƒ^ƒx[ƒX‚Ìê–副‚ɑВk‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -*�܂����J�����Ă��Ȃ������̃A�v���P�[�V�����p�̂��è‚���ȃA���S���Y�������݂����”\�������邱�Ƃ��m�肽���ê‡ï¿½ÍA���̃t�B�[���h�œ����Ă����l�Ƙb���܂��傤�B +*‚Ü‚¾ŒöŠJ‚³‚ê‚Ä‚¢‚È‚¢“Á’è‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“—p‚Ì‚æ‚è‚‘¬‚ȃAƒ‹ƒSƒŠƒYƒ€‚ª‘¶Ý‚·‚é‰Â”\«‚ª‚ ‚邱‚Æ‚ð’m‚肽‚¢ê‡‚ÍA‚»‚̃tƒB[ƒ‹ƒh‚Å“­‚¢‚Ä‚¢‚él‚Ƙb‚µ‚Ü‚µ‚傤B -���Ȃ����r�W�l�X���n�߂Ȃ����΂Ȃ��Ȃ����ǂ��������Ȃ��������l���邱�Ƃ��ł����悤��*�Âl�I�Ȍ������������̂ł����ÎA���̃A�C�f�B�A�ɑ΂����c�_�̃��X�g�������Ă݂Ă��������B���ꂪ���s�����ÎA�肢���l�����������B���ׂĂ̊p�x�����A�C�f�A���w�ÑA���Ȃ��Ìh�������ׂÄI���ÄA���Ȃ��ÌS�̒��ł��ׂĂ̌��ʂƒ����ƒZ�������èœï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A�ˑR�Ƃ��ĞB���Ȃ܂܂ł����Ƃ��܂��B���Ȃ��Í����Ȃ��ÌS�É]���ÄA���Ȃ��̔]�ɖق��悤�Ɍ����Ȃ����΂Ȃ��܂����B���p�”\�È肢�̋Z�@�̑����ÍA���Ȃ��Ì��݈ӎ����Ӗ������蓖�Ă銮�S�Ȃ����܂��Ń����_���ȃp�^�[�����ñަ‚����̂ÅA�����̔��ӎ��I�ȗ~�]�𔻒f�����̂ɔ����ɖ𗧂��܂��B +‚ ‚È‚½‚ªƒrƒWƒlƒX‚ðŽn‚߂Ȃ¯‚ê‚΂Ȃç‚È‚¢‚©‚Ç‚¤‚©‚ð‚ ‚È‚½‚¾‚¯‚ªl‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚É*ŒÂl“I‚ÈŒˆ’è‚ð‚µ‚½‚¢‚̂ł ‚ê‚ÎA‚»‚̃AƒCƒfƒBƒA‚ɑ΂·‚é‹c˜_‚ÌƒŠƒXƒg‚ð‘‚¢‚Ă݂Ă­‚¾‚³‚¢B‚»‚ê‚ªŽ¸”s‚·‚ê‚ÎAè‚¢‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚·‚ׂĂ̊p“x‚©‚çƒAƒCƒfƒA‚ðŠw‚ÑA‚ ‚È‚½‚Ìh‘è‚ð‚·‚×‚ÄI‚¦‚ÄA‚ ‚È‚½‚ÌS‚Ì’†‚Å‚·‚ׂĂ̌‹‰Ê‚Æ’·Š‚Æ’ZŠ‚ðŽæ‚èœ‚¢‚½‚ªAˆË‘R‚Æ‚µ‚ÄžB–†‚Ȃ܂܂ł¢‚邯‚µ‚Ü‚·B‚ ‚È‚½‚Í¡‚ ‚È‚½‚ÌS‚É]‚Á‚ÄA‚ ‚È‚½‚Ì”]‚É–Ù‚é‚æ‚¤‚ÉŒ¾‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB—˜—p‰Â”\‚Èè‚¢‚Ì‹Z–@‚Ì‘½‚­‚ÍA‚ ‚È‚½‚Ìö݈ӎ¯‚ªˆÓ–¡‚ðŠ„‚è“–‚Ă銮‘S‚È‚ ‚¢‚Ü‚¢‚щƒ“ƒ_ƒ€‚ȃpƒ^[ƒ“‚ð’ñަ‚·‚é‚Ì‚ÅAŽ©•ª‚Ì”¼ˆÓޝ“I‚È—~–]‚ð”»’f‚·‚é‚̂ɔñí‚É–ð—§‚¿‚Ü‚·B Next [How to Utilize People as Information Sources](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index d185087..a4b6254 100644 --- a/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/jp/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -1,15 +1,15 @@ # How to Utilize People as Information Sources [//]: # (Version:1.0.0) -���ׂĂÌl�̎��Ԃð‘¸d���A�����̎��Ԃƃo�����X���������������B�N���Ɏ��₷�邱�ƂÍA�������󂯎��邾���ł͂����܂����B���Ìl�͂��Ȃ��̑��݂��y�����ÅA�����̎����𕷂����Ƃɂ����ÄA���Ȃ��ɂ‚��Ċw�т܂��B���Ìl�ɂ‚��ē����悤�Ɋw�ÑA���Ȃ������߂铚�����m�邱�Ƃ��ł��܂��B�����ÍA���Ȃ��̎����������͂邩�Éd�v�ł��B +‚·‚ׂĂÌl‚ÌŽžŠÔ‚ð‘¸d‚µAŽ©•ª‚ÌŽžŠÔ‚ƃoƒ‰ƒ“ƒX‚ðŽæ‚Á‚Ä‚­‚¾‚³‚¢B’N‚©‚ÉŽ¿–â‚·‚邱‚Æ‚ÍA“š‚¦‚ðŽó‚¯Žæ‚邾‚¯‚ł͂ ‚è‚Ü‚¹‚ñB‚»‚Ìl‚Í‚ ‚È‚½‚Ì‘¶Ý‚ðŠy‚µ‚ñ‚ÅA“Á’è‚ÌŽ¿–â‚ð•·‚­‚±‚Ƃɂæ‚Á‚ÄA‚ ‚È‚½‚ɂ‚¢‚ÄŠw‚т܂·B‚»‚Ìl‚ɂ‚¢‚Ä“¯‚¶‚悤‚ÉŠw‚ÑA‚ ‚È‚½‚ª‹‚߂铚‚¦‚ð’m‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍA‚ ‚È‚½‚ÌŽ¿–â‚æ‚è‚à‚͂邩‚Éd—v‚Å‚·B -�������A�����̉��l�͂��Ȃ����������s���قnj������܂��B���Ȃ��ÍA���ǂ̂Ƃ����A�l�������Ă����ł��M�d�È��i�A���Ȃ킿���̎��Ԃ��g���Ă��܂��B�R�~���j�P�[�V�����̗��_�ÍA�R�X�g�Ɣ��r���Äd�������K�v�������܂��B�����ÉA�������������̃R�X�g�Ɨ��_�ÍA�l�ɂ����ĈقȂ��܂��B���ÍA100�l�̊���������5���������̑g�D�̊e�l�Ƙb���K�v�������Ƌ����M�������A���̎��Ԃ̖�5���ɂȂ��܂��B�������A1000�l�Ì]�ƈ��������ê‡ï¿½A10�������������”\���������A5�������������”\���������܂��B�g�D���̊e�l�Ƙb�����ԂÍA���̖����i�E�ʈÈ��j�ɂ����ĈقȂ��܂��B���Ȃ��Ì��i�É��i�Ƙb�������ׂ��ł����A���i�Ì��i�É����b�����������B�����͕s�����������܂��ñ‚ªA���͂��Ȃ������i�É������ÂA�����A�����b�����`���������ÆM���Ă��܂��B +‚µ‚©‚µA‚±‚ê‚̉¿’l‚Í‚ ‚È‚½‚ª‚»‚ê‚ðs‚¤‚Ù‚ÇŒ¸­‚µ‚Ü‚·B‚ ‚È‚½‚ÍAŒ‹‹Ç‚̂Ƃ±‚ëAl‚ªŽ‚Á‚Ä‚¢‚éÅ‚à‹Md‚Ȥ•iA‚·‚Ȃ킿‚»‚ÌŽžŠÔ‚ðŽg‚Á‚Ä‚¢‚Ü‚·BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—˜“_‚ÍAƒRƒXƒg‚Æ”äŠr‚µ‚ÄdŽ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚³‚ç‚ÉA“¾‚ç‚ê‚é“Á’è‚̃RƒXƒg‚Æ—˜“_‚ÍAl‚É‚æ‚Á‚ĈقȂè‚Ü‚·BŽ„‚ÍA100l‚ÌŠ²•”‚ª–ˆŒŽ5•ª‚ðŽ©•ª‚Ì‘gD‚ÌŠel‚Ƙb‚·•K—v‚ª‚ ‚邯‹­‚­M‚¶‚Ä‚¨‚èA‚»‚ÌŽžŠÔ‚Ì–ñ5“‚ɂȂè‚Ü‚·B‚µ‚©‚µA1000l‚Ì]‹Æˆõ‚ª‚¢‚éê‡A10•ª‚ª‘½‚·‚¬‚é‰Â”\«‚ª‚ ‚èA5•ª‚ª‘½‚·‚¬‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‘gD“à‚ÌŠel‚Ƙb‚·ŽžŠÔ‚ÍA‚»‚Ì–ðŠ„iEˆÊˆÈãj‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚ ‚È‚½‚ÌãŽi‚ÉãŽi‚Ƙb‚µ‡‚¤‚ׂ«‚Å‚·‚ªAãŽi‚ÌãŽi‚É­‚µ˜b‚µ‚Ä‚­‚¾‚³‚¢B‚»‚ê‚Í•s‰õ‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAŽ„‚Í‚ ‚È‚½‚ªãŽi‚É­‚µ‚¸‚ÂA–ˆŒŽA‰½‚ð˜b‚µ‚Ä‚à‹`–±‚ª‚ ‚邯M‚¶‚Ä‚¢‚Ü‚·B -���{�I�ȃ��[���ÍA�N�������Ȃ��Ƙb�����Ƃ��痘�v�𓾂邱�Ƃł����A�ނ炪���Ȃ��ɘb�����Ƃ������قÇA�ނ炪�h�����闘�v�Í��Ȃ��Ƃ������Ƃł��B�ނ��ɂ��̉��b���ñ‹Ÿ‚��A�ނ��Ƃ̃R�~���j�P�[�V�����̗��v�𓾂邽�߂ÉA���Ȃ��̎d���ÍA���₳�ꂽ���ԂƂ̃o�����X�ŗ��v���ۂ‚��Ƃł��B +Šî–{“I‚ȃ‹[ƒ‹‚ÍA’N‚à‚ª‚ ‚È‚½‚Ƙb‚·‚±‚Æ‚©‚ç—˜‰v‚𓾂邱‚Ƃł ‚èA”ނ炪‚ ‚È‚½‚ɘb‚·‚±‚Æ‚ª‘½‚¢‚Ù‚ÇA”ނ炪”h¶‚·‚é—˜‰v‚Í­‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·B”Þ‚ç‚É‚±‚̉¶Œb‚ð’ñ‹Ÿ‚µA”Þ‚ç‚Æ‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì—˜‰v‚𓾂邽‚ß‚ÉA‚ ‚È‚½‚ÌŽdŽ–‚ÍA”ï‚₳‚ê‚½ŽžŠÔ‚Ƃ̃oƒ‰ƒ“ƒX‚Å—˜‰v‚ð•ۂ‚±‚Ƃł·B -�����̎��Ԃð‘¸d���邱�Ƃ��d�v�ł��B�N���Ƙb���Ȃ��A���Ƃ������Ɏ��Ԃ��������Ƃ��Ă��A���Ԃ��å•�Éß–ñ‚·‚��ł��傤�B���Ȃ��̎��Ԃ����Ȃ��̂��̂������M�d�Ȃ��̂��Ǝv���Ȃ������A�������s���ׂ��ł��B +Ž©•ª‚ÌŽžŠÔ‚ð‘¸d‚·‚邱‚Æ‚ªd—v‚Å‚·B’N‚©‚Ƙb‚·‚È‚çA‚½‚Æ‚¦‚»‚ê‚ÉŽžŠÔ‚ª‚©‚©‚邯‚µ‚Ä‚àAŽžŠÔ‚ð‘å•‚Éß–ñ‚·‚é‚Å‚µ‚傤B‚ ‚È‚½‚ÌŽžŠÔ‚ª‚ ‚È‚½‚Ì‚à‚Ì‚æ‚è‚à‹Md‚È‚à‚Ì‚¾‚ÆŽv‚í‚È‚¢ŒÀ‚èA‚»‚ê‚ðs‚¤‚ׂ«‚Å‚·B -�����̊�ȗ��͉ẴC���^�[���ł��B���x�ɋZ�p�I�ȗ����̉Ċ��C���^�[���ÍA���܂è¬ï¿½Ê‚��グ�邱�Ƃ͊��҂ł��܂����B�ނ��͂����ɂ����N�����n���ÉP�����邱�Ƃ��\�z�����܂��B�����łȂ������͗e�F�����܂����H�ꂵ�ñ‚¾l�ÍA�C���^�[�������d�v�ȉ������󂯂Ă����̂ÅB�ނ��Í����֎������@���𓾂��B�����炭�A�V�����A�C�f�A�𕷂��`�����X�������܂��B�ނ��͈قȂ鎋�_���畨���������@���𓾂��B�ނ��͂܂��A�C���^�[�������W���悤�Ƃ��Ă��邩�������܂��ñ‚ªA�����łȂ��ê‡ï¿½Å‚��A�����ׂ����Ƃ��������ñ‚ ‚��܂��B +‚±‚ê‚ÌŠï–­‚È—á‚͉ẴCƒ“ƒ^[ƒ“‚Å‚·B‚“x‚É‹Zp“I‚È—§ê‚̉ĊúƒCƒ“ƒ^[ƒ“‚ÍA‚ ‚܂謉ʂðã‚°‚邱‚Ƃ͊ú‘Ò‚Å‚«‚Ü‚¹‚ñB”Þ‚ç‚Í‚»‚±‚É‚¢‚é’N‚à‚ª’n–‚ÉP‚í‚ê‚邱‚Æ‚ª—\‘z‚³‚ê‚Ü‚·B‚»‚ê‚łȂº‚±‚ê‚Í—e”F‚³‚ê‚Ü‚·‚©H‹ê‚µ‚ñ‚¾l‚ÍAƒCƒ“ƒ^[ƒ“‚©‚çd—v‚ȉ½‚©‚ðŽó‚¯‚Ä‚¢‚é‚Ì‚ÅB”Þ‚ç‚Í­‚µŒÖަ‚·‚é‹@‰ï‚𓾂éB‚¨‚»‚ç‚­AV‚µ‚¢ƒAƒCƒfƒA‚ð•·‚­ƒ`ƒƒƒ“ƒX‚ª‚ ‚è‚Ü‚·B”Þ‚ç‚͈قȂ鎋“_‚©‚ç•¨Ž–‚ðŒ©‚é‹@‰ï‚𓾂éB”Þ‚ç‚͂܂½AƒCƒ“ƒ^[ƒ“‚ð•åW‚µ‚悤‚Æ‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚»‚¤‚łȂ¢ê‡‚Å‚àA“¾‚é‚ׂ«‚±‚Æ‚ª‚½‚­‚³‚ñ‚ ‚è‚Ü‚·B -���Ȃ��ÍA�����Ɍ����������Ƃ������ÆM�����Ƃ��͂��‚ł��A�l�X�ɔނ��̒m�b�Ɣ��f�͂̂ق��Ì������q�˂��ׂ��ł��B�����͔ނ��𕽂炰�A���Ȃ��͉������w�ÑA�������������ł��傤�B�ǂ��v���O���}�[�ÍA�Z�[���X�S���o�C�X�v���W�f���g�Ì������K�v�Ƃ��Ȃ����Ƃ͂悭�����܂����A�����܂łÉs�������Ƃ������ÎA���������߂Ă��������B���͉c�ƒS���҂̎d���������悭�������邽�߂ÉA�����‚��̃Z�[���X�R�[���𕷂��Ă݂邱�Ƃ����x���߂܂����B������30�����v���܂����ł������A���Í��K�͂ȓw�͂��̔����Ɉ��ۂ��^�����Ǝv���܂��B +‚ ‚È‚½‚ÍA³’¼‚ÉŒ¾‚¢‚½‚¢‚±‚Æ‚ª‚ ‚邯M‚¶‚邯‚«‚Í‚¢‚‚łàAlX‚ɔނç‚Ì’mŒb‚Æ”»’f—͂̂قñ‚Ì­‚µ‚ðq‚Ë‚é‚ׂ«‚Å‚·B‚±‚ê‚͔ނç‚𕽂炰A‚ ‚È‚½‚͉½‚©‚ðŠw‚ÑA‰½‚©‚ð‹³‚¦‚é‚Å‚µ‚傤B—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ÍAƒZ[ƒ‹ƒX’S“–ƒoƒCƒXƒvƒŒƒWƒfƒ“ƒg‚Ì•Œ¾‚ð•K—v‚Æ‚µ‚È‚¢‚±‚Ƃ͂悭‚ ‚è‚Ü‚·‚ªA‚±‚ê‚܂łÉs‚Á‚½‚±‚Æ‚ª‚ ‚ê‚ÎA‚»‚ê‚ð‹‚߂Ă­‚¾‚³‚¢BŽ„‚͉c‹Æ’S“–ŽÒ‚ÌŽdŽ–‚ð‚æ‚è‚æ‚­—‰ð‚·‚邽‚ß‚ÉA‚¢‚­‚‚©‚̃Z[ƒ‹ƒXƒR[ƒ‹‚ð•·‚¢‚Ă݂邱‚Æ‚ðˆê“x‹‚߂܂µ‚½B‚±‚ê‚Í30•ª‚ð—v‚µ‚Ü‚¹‚ñ‚Å‚µ‚½‚ªAŽ„‚ͬ‹K–͂ȓw—Í‚ª”Ì”„ˆõ‚ɈóÛ‚ð—^‚¦‚½‚ÆŽv‚¢‚Ü‚·B Next [How to Document Wisely](05-How-to-Document-Wisely.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index 6acb51f..39f36ae 100644 --- a/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/jp/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -1,20 +1,20 @@ # How to Document Wisely [//]: # (Version:1.0.0) -�l���͒Z���ĒN���ǂ܂Ȃ����炢�̂��Ƃ������Ă����B���Ȃ������킲�Ƃ������Ȃ��A�N���������ǂ܂Ȃ��ł��傤�B���������ÄA�����ǂ��h�L�������g���œK�ł��B�}�l�[�W���[�͂����ð—‰ï¿½ï¿½ï¿½ï¿½Ä‚��Ȃ����Ƃ��悭�����܂��B�Ȃ��Ȃ��A�������h�L�������e�[�V�����ł����Ă��A�ނ炪�v���O���}�[�Ɉˑ����Ă��Ȃ��Ƃ����������Z�L�����e�B���o���^���邩���ł��B�N�����{���ɖ��ɗ����Ȃ������������Ă����ƒf���������ê‡ï¿½ÍA�u�͂��v�ƌ����ÄÂ��Ɏd�����T���n�߂��B +l¶‚Í’Z‚­‚Ä’N‚à“ǂ܂Ȃ¢‚­‚ç‚¢‚Ì‚±‚Ƃ𑂢‚Ä‚¢‚éB‚ ‚È‚½‚ª‚½‚킲‚Ƃ𑂭‚È‚çA’N‚à‚»‚ê‚ð“ǂ܂Ȃ¢‚Å‚µ‚傤B‚µ‚½‚ª‚Á‚ÄA­‚µ—Ç‚¢ƒhƒLƒ…ƒƒ“ƒg‚ªÅ“K‚Å‚·Bƒ}ƒl[ƒWƒƒ[‚Í‚±‚ê‚ð—‰ð‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B‚È‚º‚È‚çAŒë‚Á‚½ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚Å‚ ‚Á‚Ä‚àA”ނ炪ƒvƒƒOƒ‰ƒ}[‚Ɉˑ¶‚µ‚Ä‚¢‚È‚¢‚Æ‚¢‚¤Œë‚Á‚½ƒZƒLƒ…ƒŠƒeƒBŠ´Šo‚ð—^‚¦‚é‚©‚ç‚Å‚·B’N‚©‚ª–{“–‚É–ð‚É—§‚½‚È‚¢•¶‘‚ð‘‚¢‚Ä‚¢‚邯’fŒ¾‚µ‚Ä‚¢‚éꇂÍAu‚Í‚¢v‚ÆŒ¾‚Á‚Ä©‚ÉŽdŽ–‚ð’T‚µŽn‚ß‚éB -�h�L�������g�̎��v���ɘa���邽�߂ÉA�K�؂ȃh�L�������g�����ς����ɑg�Ý��ނ̂ɂ����鎞�Ԃð³Šm�Ɍ��ς��邱�ƂÍA�����قnj��ʓI�ł͂����܂����B�^���͊����ē���F�e�X�g�̂悤�ȃh�L�������g�ÍA�R�[�h���J���������������{�����������邱�Ƃ������܂��B +ƒhƒLƒ…ƒƒ“ƒg‚ÌŽù—v‚ðŠÉ˜a‚·‚邽‚ß‚ÉA“K؂ȃhƒLƒ…ƒƒ“ƒg‚ðŒ©Ï‚à‚è‚É‘g‚Ýž‚ނ̂ɂ©‚©‚鎞ŠÔ‚ð³Šm‚ÉŒ©Ï‚à‚邱‚Æ‚ÍA‚»‚ê‚Ù‚ÇŒø‰Ê“I‚ł͂ ‚è‚Ü‚¹‚ñB^ŽÀ‚ÍŠ¦‚­‚ē‚¢FƒeƒXƒg‚̂悤‚ȃhƒLƒ…ƒƒ“ƒg‚ÍAƒR[ƒh‚ðŠJ”­‚·‚邿‚è‚à‰½”{‚à’·‚­‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·B -�ǂ��������������ƂÍA�܂������ÉA�ǂ��������ł��B���͂��Ȃ������M�A�׋��A���K�Ɋւ����{�����‚��邱�Ƃ������߂��܂��B�������A���Ƃ����Ȃ����ڗ��È��Ƃł����Ă��A���Ȃ������������Ȃ����΂Ȃ��Ȃ����t�̕n���Ȗ��߂������Ă��Ă��A�����̃��[���͖{���ɕK�v�Ȃ��̂ł��F�u���Ȃ����ނ��ɂ��Ȃ��̂��Ƃ��������悤�ÉA���l�És���܂��B�N�����Ȃ��Ì��ނ��ǂ��ł����̂��A�������甲���o���K�v�������̂�??�A�ǂ̂悤�ɂ������������邱�Ƃ��ł����̂����l�����������B���������Ȃ��A���Ȃ��͕��ϓI�ȃh�L�������e�[�V�������C�^�[�ł����A�ǂ��v���O���}�[�ɂȂ��ł��傤�B +—Ç‚¢•¶‘‚ð‘‚­‚±‚Æ‚ÍA‚Ü‚¸‘æˆê‚ÉA—Ç‚¢‘‚«•û‚Å‚·BŽ„‚Í‚ ‚È‚½‚ªŽ·•MA•׋­A—ûK‚ÉŠÖ‚·‚é–{‚ðŒ©‚Â‚¯‚邱‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B‚µ‚©‚µA‚½‚Æ‚¦‚ ‚È‚½‚ª”Ú—ò‚Èì‰Æ‚Å‚ ‚Á‚Ä‚àA‚ ‚È‚½‚ª•¶‘‰»‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢Œ¾—t‚Ì•nŽã‚È–½—ß‚ðŽ‚Á‚Ä‚¢‚Ä‚àA‰©‹à‚̃‹[ƒ‹‚Í–{“–‚É•K—v‚È‚à‚̂ł·Fu‚ ‚È‚½‚ª”Þ‚ç‚É‚ ‚È‚½‚Ì‚±‚Æ‚ð‚³‚¹‚邿‚¤‚ÉA‘¼l‚És‚¢‚Ü‚·B’N‚ª‚ ‚È‚½‚Ì‘—Þ‚ð“Ç‚ñ‚Å‚¢‚é‚Ì‚©A‚»‚±‚©‚甲‚¯o‚·•K—v‚ª‚ ‚é‚Ì‚©??A‚ǂ̂悤‚É‚»‚ê‚ç‚ð‹³‚¦‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚»‚¤‚·‚é‚È‚çA‚ ‚È‚½‚Í•½‹Ï“I‚ȃhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“ƒ‰ƒCƒ^[‚Å‚ ‚èA—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ɂȂé‚Å‚µ‚傤B -�v���O���}�[�ȊO�Ìl�����ۂɓǂނ��Ƃ��ł��镶�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚ł͂Ȃ��A���ۂɃR�[�h���̂ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚Ɋւ��ĂÍA�������܂łɒm�������Å��̃v���O���}�[�͕��ՓI�Ȋ����������Ă��܂��F�����̃R�[�h�������ÄA�R�[�h���̂��������Ƃł͂����肳���邱�Ƃ͂ł��܂����B�����ɂÍA2�‚̗��R�������܂��B�܂��A�R�[�h���x���̃h�L�������g���Q�Ƃ����K�v�������l�ÍA�قƂ��ǂÌê‡ï¿½A�R�[�h���ǂ߂��悤�ɂȂ��܂��B�m���ÉA�����Í��S�҂������o���L�x�ȃv���O���}�[�ɂƂ��Ă͊ȒP�ł��B�������A�����Éd�v�Ȃ̂ÍA�������Ȃ����ÎA�R�[�h�ƕ����͖������Ă��Ȃ��Ƃ������Ƃł��B�ň��Ìê‡ï¿½A�\�[�X�R�[�h�͊Ԉ����Ä��������”\���������܂��B���S�É������Ă��Ȃ����ÎA���̕����͂������‚����Ƃ��ł��A�����͉����{���������܂��B +ƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚ªŽÀۂɓǂނ±‚Æ‚ª‚Å‚«‚é•¶‘‚ð쬂·‚é‚̂ł͂Ȃ­AŽÀۂɃR[ƒhŽ©‘̂𕶑‰»‚·‚邱‚ƂɊւµ‚Ä‚ÍAŽ„‚ª¡‚܂łɒm‚Á‚Ä‚¢‚éÅ‚‚̃vƒƒOƒ‰ƒ}[‚Í••Õ“I‚ÈŠ´î‚ðŽ‚Á‚Ä‚¢‚Ü‚·FŽ©–¾‚̃R[ƒh‚ð‘‚¢‚ÄAƒR[ƒhŽ©‘̂𑂭‚±‚Ƃł͂Á‚«‚肳‚¹‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚±‚ê‚É‚ÍA2‚‚̗—R‚ª‚ ‚è‚Ü‚·B‚Ü‚¸AƒR[ƒhƒŒƒxƒ‹‚̃hƒLƒ…ƒƒ“ƒg‚ðŽQÆ‚·‚é•K—v‚ª‚ ‚él‚ÍA‚Ù‚Æ‚ñ‚Ç‚Ìê‡AƒR[ƒh‚ð“Ç‚ß‚é‚æ‚¤‚ɂȂè‚Ü‚·BŠm‚©‚ÉA‚±‚ê‚͉SŽÒ‚æ‚è‚àŒoŒ±–L•x‚ȃvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͊ȒP‚Å‚·B‚µ‚©‚µA‚³‚ç‚Éd—v‚Ȃ̂ÍA•¶‘‚ª‚È‚¯‚ê‚ÎAƒR[ƒh‚Æ•¶‘‚Í–µ‚‚µ‚Ä‚¢‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·Bň«‚Ìê‡Aƒ\[ƒXƒR[ƒh‚ÍŠÔˆá‚Á‚Ĭ—‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·BŠ®‘S‚É‘‚©‚ê‚Ä‚¢‚È‚¯‚ê‚ÎA‚»‚Ì•¶‘‚Í‚¤‚»‚ð‚‚­‚±‚Æ‚ª‚Å‚«A‚»‚ê‚͉½ç”{‚àˆ«‰»‚µ‚Ü‚·B -�����ÍÓ”C�����v���O���}�[�ɂƂ��Ă����ȒP�ɂ͂Ȃ��܂����B�����̃R�[�h���ǂ̂悤�É����̂ł����H�����͂ǂ������Ӗ��ł����H���̈Ӗ��ÍF +‚±‚ê‚ÍÓ”C‚ ‚éƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚æ‚èŠÈ’P‚ɂ͂Ȃè‚Ü‚¹‚ñBŽ©–¾‚̃R[ƒh‚ð‚ǂ̂悤‚É‘‚­‚̂ł·‚©H‚»‚ê‚͂ǂ¤‚¢‚¤ˆÓ–¡‚Å‚·‚©H‚»‚̈Ӗ¡‚ÍF -�N�����������ǂޕK�v�����邱�Ƃ��m�������R�[�h�������B -- �S�[���f�����[�����K�p�����B -- �ʂ̃\�����[�V�������v���ɗ��p�ł����ê‡ï¿½Å‚��A�ȒP�ȃ\�����[�V�������I�������B -- �R�[�h�����lj����é¬ï¿½ï¿½ï¿½ÈÅ“K�����]���ɂ����B -- �ǎ҂̂��Ƃ��l���ÄA�Þ��������Ɗy�ɂ����M�d�Ȏ��Ԃ����₵�Ă��������B������ -- `foo`�A` bar`�A `doIt`�̂悤�ȊÖ������g�p���邱�Ƃ͂����܂����I +’N‚©‚ª‚»‚ê‚ð“ǂޕK—v‚ª‚ ‚邱‚Æ‚ð’m‚Á‚Ä‚¢‚éƒR[ƒh‚ð‘‚­B +- ƒS[ƒ‹ƒfƒ“ƒ‹[ƒ‹‚ð“K—p‚·‚éB +- •ʂ̃\ƒŠƒ…[ƒVƒ‡ƒ“‚ðv‘¬‚É—˜—p‚Å‚«‚éꇂłàAŠÈ’P‚ȃ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð‘I‘ð‚·‚éB +- ƒR[ƒh‚ð“ï“lj»‚·‚鬂³‚ÈÅ“K‰»‚ð‹]µ‚É‚·‚éB +- “ÇŽÒ‚Ì‚±‚Æ‚ðl‚¦‚ÄA”Þ—‚ð‚à‚Á‚ÆŠy‚É‚·‚é‹Md‚ÈŽžŠÔ‚ð”ï‚₵‚Ä‚­‚¾‚³‚¢B‚»‚µ‚Ä +- `foo`A` bar`A `doIt`‚̂悤‚ÈŠÖ”–¼‚ðŽg—p‚·‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñI Next [How to Work with Poor Code](06-How-to-Work-with-Poor-Code.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md index eb0f2af..47e313b 100644 --- a/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md +++ b/jp/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -1,10 +1,10 @@ # How to Work with Poor Code [//]: # (Version:1.0.0) -�N�����������òˆ«‚ȃR�[�h�Å��Ƃ��Ȃ����΂Ȃ��Ȃ����Ƃ͔����Ɉ��ʓI�ł��B�������A���Ȃ����C�𗚂��܂łÍA���܂��ɂ��n���ł͂Ȃ��Ǝv�����������B�ނ��ÍA�X�P�W���[�����͂𖞂������߂ɉ��������΂₭�s�����߂ÉA�ӎ��I�ɗ��܂��Ă��邩�������܂����B�����ɂ������炸�A�s���ĂȃR�[�h�Å��Ƃ����ɂÍA�����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½K�v�������܂��B�����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É‚ÍŠw�K���Ԃ��K�v�ÅA���̎��Ԃ͂ǂ����̃X�P�W���[�������o�Ȃ����΂Ȃ炸�A���Ȃ��͂������咣�����K�v�������܂��B�����ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É‚ÍA�\�[�X�R�[�h���ǂ܂Ȃ����΂Ȃ��܂����B���Ȃ��͂����炭�����������K�v�������܂��B +’N‚©‚ª‘‚¢‚½—òˆ«‚ȃR[ƒh‚Åì‹Æ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Ƃ͔ñí‚Ɉê”Ê“I‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚ªŒC‚ð—š‚­‚܂łÍA‚ ‚Ü‚è‚É‚à•nŽã‚ł͂Ȃ¢‚ÆŽv‚Á‚Ä‚­‚¾‚³‚¢B”Þ‚ç‚ÍAƒXƒPƒWƒ…[ƒ‹ˆ³—͂𖞂½‚·‚½‚߂ɉ½‚©‚ð‚·‚Î‚â‚­s‚¤‚½‚ß‚ÉAˆÓޝ“I‚ɗЂ܂ê‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚»‚ê‚É‚©‚©‚í‚炸A•s–¾—ĂȃR[ƒh‚Åì‹Æ‚·‚é‚É‚ÍA‚»‚ê‚ð—‰ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ð—‰ð‚·‚é‚ɂ͊wKŽžŠÔ‚ª•K—v‚ÅA‚»‚ÌŽžŠÔ‚͂ǂ±‚©‚̃XƒPƒWƒ…[ƒ‹‚©‚ço‚È‚¯‚ê‚΂Ȃ炸A‚ ‚È‚½‚Í‚»‚ê‚ðŽå’£‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ð—‰ð‚·‚é‚É‚ÍAƒ\[ƒXƒR[ƒh‚ð“ǂ܂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚¨‚»‚ç‚­‚»‚ê‚ðŽŽ‚·•K—v‚ª‚ ‚è‚Ü‚·B -�R�[�h�ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½æ‚¤ï¿½Æ‚����ÆA���Ȃ����l�����Ȃ��������������Ȃ��p�x���l�����Ȃ����΂Ȃ��Ȃ��Ȃ��A���ʂƂ��ē������镶�����𗧂‚��������Ȃ��̂ÅA�������g�����ł����Ă��A�����ð•¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚͂������Ԃł��B���������������ÔA�R�[�h�̈ꕔ�܂��͑S�������������ɂ͉����K�v�����l�����������B�����͎��ۂɂ��������������鎞�Ԃ��ߖñ‚·‚��ł��傤���H���Ȃ������������������ÆA���Ȃ��͂����������M���ł����ł��傤���H�����Ř����ɒ��ӂ��Ă��������B���Ȃ������������������ÆA���Ȃ��͑Î����₷���Ȃ��܂����A�������ǂ܂Ȃ����΂Ȃ��Ȃ����Ìl�ɂƂ��Ă͖{���ɊȒP�ł��傤���H���Ȃ������������������Ȃ��A�e�X�g�̕��S�͂������ł����H�������ăe�X�g�����K�v���ÍA���������”\���̂��闘�v�������d�v���낤���H +ƒR[ƒh‚ð•¶‘‰»‚µ‚悤‚Æ‚·‚邯A‚ ‚È‚½‚ªl—¶‚µ‚È‚©‚Á‚½‚©‚à‚µ‚ê‚È‚¢Šp“x‚ðl—¶‚µ‚È‚¯‚ê‚΂Ȃç‚È‚­‚È‚èAŒ‹‰Ê‚Æ‚µ‚Ä“¾‚ç‚ê‚é•¶‘‚ª–𗧂‚©‚à‚µ‚ê‚È‚¢‚Ì‚ÅAŽ©•ªŽ©g‚¾‚¯‚Å‚ ‚Á‚Ä‚àA‚±‚ê‚ð•¶‘‰»‚·‚é‚̂͂¢‚¢ŽžŠÔ‚Å‚·B‚±‚ê‚ð‚â‚Á‚Ä‚¢‚éŠÔAƒR[ƒh‚̈ꕔ‚Ü‚½‚Í‘S•”‚ð‘‚«’¼‚·‚ɂ͉½‚ª•K—v‚©‚ðl‚¦‚Ä‚­‚¾‚³‚¢B‚»‚ê‚ÍŽÀÛ‚É‚»‚ê‚ð‘‚«Š·‚¦‚鎞ŠÔ‚ðß–ñ‚·‚é‚Å‚µ‚傤‚©H‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚ÆA‚ ‚È‚½‚Í‚»‚ê‚ð‚æ‚èM—Ђł«‚é‚Å‚µ‚傤‚©H‚±‚±‚Řü–‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚ÆA‚ ‚È‚½‚͑Έ‚µ‚â‚·‚­‚È‚è‚Ü‚·‚ªA‚»‚ê‚ð“ǂ܂Ȃ¯‚ê‚΂Ȃç‚È‚¢ŽŸ‚Ìl‚ɂƂÁ‚Ă͖{“–‚ÉŠÈ’P‚Å‚µ‚傤‚©H‚ ‚È‚½‚ª‚»‚ê‚ð‘‚«’¼‚·‚È‚çAƒeƒXƒg‚Ì•‰’S‚Í‚¢‚­‚ç‚Å‚·‚©H‚»‚ê‚ðăeƒXƒg‚·‚é•K—v«‚ÍA“¾‚ç‚ê‚é‰Â”\«‚Ì‚ ‚é—˜‰v‚æ‚è‚àd—v‚¾‚낤‚©H -���Ȃ��������Ă��Ȃ��R�[�h�ɑ΂������Ƃ̂��߂̂��Ȃ��Ì����łÍA���̃R�[�h�̕i���ÍA������unk-unks�̃��X�N�ɑ΂��邠�Ȃ��̔F���ɉe�����^�����͂��ł��B +‚ ‚È‚½‚ª‘‚¢‚Ä‚¢‚È‚¢ƒR[ƒh‚ɑ΂·‚éì‹Æ‚Ì‚½‚߂̂ ‚È‚½‚Ì„’è‚Å‚ÍA‚»‚̃R[ƒh‚Ì•iŽ¿‚ÍA–â‘è‚âunk-unks‚ÌƒŠƒXƒN‚ɑ΂·‚é‚ ‚È‚½‚Ì”Fޝ‚ɉe‹¿‚ð—^‚¦‚é‚Í‚¸‚Å‚·B -�v���O���}�Ìł��D�ꂽ�c�[���̂�����2�‚ł��钊�ۉ��ƃJ�v�Z�����ÍA���ɖ����ȃR�[�h�ɓK�p�”\�ł��邱�Ƃ��o���Ă������Ƃ��d�v�ł��B�傫�ȃR�[�h�u���b�N���ÄÝŒv���邱�Ƃ͂ł��Ȃ����������܂��ñ‚ªA���钊�ۉ��ʂ��lj����邱�Ƃ��ł����ÎA�ǂ��f�U�C���̃����b�g�𓾂邱�Ƃ��ł��܂��B���ÉA�•ʂÉÄÝŒv���邱�Ƃ��ł����悤�ÉA���Ɉ������i�����èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��ł��܂��B +ƒvƒƒOƒ‰ƒ}‚ÌÅ‚à—D‚ꂽƒc[ƒ‹‚Ì‚¤‚¿‚Ì2‚‚ł ‚é’ŠÛ‰»‚ƃJƒvƒZƒ‹‰»‚ÍA“Á‚É–ï‰î‚ȃR[ƒh‚É“K—p‰Â”\‚Å‚ ‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚­‚±‚Æ‚ªd—v‚Å‚·B‘å‚«‚ȃR[ƒhƒuƒƒbƒN‚ðÄÝŒv‚·‚邱‚Ƃ͂ł«‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚ ‚é’ŠÛ‰»—Ê‚ð’ljÁ‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA—Ç‚¢ƒfƒUƒCƒ“‚̃ƒŠƒbƒg‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B“Á‚ÉAŒÂ•Ê‚ÉÄÝŒv‚·‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚ÉA“Á‚Ɉ«‚¢•”•i‚ðŽæ‚èœ‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B Next [How to Use Source Code Control](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md index 56a8f2b..275f197 100644 --- a/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md +++ b/jp/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -1,9 +1,9 @@ # How to Use Source Code Control [//]: # (Version:1.0.0) -�\�[�X�R�[�h�Ǘ��V�X�e���i�o�[�W�����Ǘ��V�X�e���Ƃ��Ă΂��܂��j�łÍA�v���W�F�N�g�����ʓI�ɊǗ��ł��܂��B�ނ��͈��l�ɂƂ��ĂƂĂ��L�p�ÅA�O���[�v�ɂ͕K�v�s�Œ��ł��B�R�[�h�������ꂸ�A�ÏX�ɈӖ������蓖�Ă邱�Ƃ��ł����悤�ÉA�قȂ��o�[�W�����̂��ׂĂ̕ÏX���ÇՂ��܂��B���Ȃ����ÏX�����R�[�h�ÍA�`�[���Ƌ��L�������A�܂��̓����[�X�������R�~�b�g���ꂽ�����̃R�[�h�����T�d�ɕۂ������̂ÅA�\�[�X�R�[�h�Ǘ��V�X�e���Ɏ��M�������ăX���[�A�E�F�C�ƃf�o�b�O�R�[�h���ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��܂��B +ƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€iƒo[ƒWƒ‡ƒ“ŠÇ—ƒVƒXƒeƒ€‚Æ‚àŒÄ‚΂ê‚Ü‚·j‚Å‚ÍAƒvƒƒWƒFƒNƒg‚ðŒø‰Ê“I‚ÉŠÇ—‚Å‚«‚Ü‚·B”Þ‚ç‚͈êl‚ɂƂÁ‚ĂƂĂà—L—p‚ÅAƒOƒ‹[ƒv‚ɂ͕K—v•s‰ÂŒ‡‚Å‚·BƒR[ƒh‚ªŽ¸‚í‚ꂸA•ÏX‚ɈӖ¡‚ðŠ„‚è“–‚Ă邱‚Æ‚ª‚Å‚«‚邿‚¤‚ÉAˆÙ‚È‚éƒo[ƒWƒ‡ƒ“‚Ì‚·‚ׂĂ̕ÏX‚ð’ÇÕ‚µ‚Ü‚·B‚ ‚È‚½‚ª•ÏX‚·‚éƒR[ƒh‚ÍAƒ`[ƒ€‚Æ‹¤—L‚³‚ê‚éA‚Ü‚½‚ÍƒŠƒŠ[ƒX‚³‚ê‚éƒRƒ~ƒbƒg‚³‚ꂽŒöŽ®‚̃R[ƒh‚©‚çTd‚ɕۂ½‚ê‚é‚Ì‚ÅAƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚ÉŽ©M‚ðŽ‚Á‚ăXƒ[ƒAƒEƒFƒC‚ƃfƒoƒbƒOƒR[ƒh‚ð쬂·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -���̓\�[�X�R�[�h�Ǘ��V�X�e���̗��_�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚É’x���܂������A����1�l�̃v���W�F�N�g�ł��Ȃ��Ă������Ă��܂����B���ʓI�ɂÍA�����R�[�h�x�[�X�Å��Ƃ����`�[�����K�v�Èê‡ï¿½É•K�v�ł��B�������A�ނ��ɂ͕ʂ̑傫�ȗ��_�������܂��B�R�[�h�ð¬’��������I�[�K�j�b�N�V�X�e���Æl���邱�Ƃ����サ�܂��B�e�ÏX�ÍV�������O�܂��͔Ô��ÌV�������r�W�����Ƃ��ă}�[�N�����邽�ßA�\�t�g�E�F�A�͖ڂɌ������i���I�Ȉ��A�̉��P�Æl�����悤�ɂȂ��܂��B���͂��ꂪ���S�҂ɂƂ��ē��ɕ֗����Ǝv���܂��B +Ž„‚̓\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚Ì—˜“_‚ð—‰ð‚·‚é‚̂ɒx‚ê‚Ü‚µ‚½‚ªA¡‚Í1l‚̃vƒƒWƒFƒNƒg‚Å‚à‚È‚­‚Ăං«‚Ä‚¢‚Ü‚¹‚ñBˆê”Ê“I‚É‚ÍA“¯‚¶ƒR[ƒhƒx[ƒX‚Åì‹Æ‚·‚éƒ`[ƒ€‚ª•K—v‚ÈꇂɕK—v‚Å‚·B‚µ‚©‚µA”Þ‚ç‚ɂ͕ʂ̑傫‚È—˜“_‚ª‚ ‚è‚Ü‚·BƒR[ƒh‚𬒷‚µ‚Ä‚¢‚éƒI[ƒKƒjƒbƒNƒVƒXƒeƒ€‚Æl‚¦‚邱‚Æ‚ð§—サ‚Ü‚·BŠe•ÏX‚ÍV‚µ‚¢–¼‘O‚Ü‚½‚͔Ԇ‚ÌV‚µ‚¢ƒŠƒrƒWƒ‡ƒ“‚Æ‚µ‚ă}[ƒN‚³‚ê‚邽‚ßAƒ\ƒtƒgƒEƒFƒA‚Í–Ú‚ÉŒ©‚¦‚éi•à“I‚Ȉê˜A‚̉ü‘P‚Æl‚¦‚邿‚¤‚ɂȂè‚Ü‚·BŽ„‚Í‚±‚ꂪ‰SŽÒ‚ɂƂÁ‚Ä“Á‚ɕ֗˜‚¾‚ÆŽv‚¢‚Ü‚·B -�\�[�X�R�[�h�Ǘ��V�X�e�����g�p���邽�߂̗ǂ��e�N�j�b�N�ÍA���ÉÅV�Ì��ԂɂȂ��Ă��ç”���ȓ��ɑØÝ‚��邱�Ƃł��B�����ÅI���ł��Ȃ��R�[�h�̓`�F�b�N�C�������Ă��܂����A���A�N�e�B�u�ŌĂÑo�����邱�Ƃ͂Ȃ����ßA���Ìl�ɂ͖����Í����܂����B���Ȃ��̃`�[�����C�g�������������ԈႢ���Ƃ����ƂÍd���ȃG���[�ł��B�����͂��΂��΃^�u�[�ł��B +ƒ\[ƒXƒR[ƒhŠÇ—ƒVƒXƒeƒ€‚ðŽg—p‚·‚邽‚߂̗ǂ¢ƒeƒNƒjƒbƒN‚ÍAí‚ÉÅV‚Ìó‘ԂɂȂÁ‚Ä‚©‚甓úˆÈ“à‚É‘ØÝ‚·‚邱‚Ƃł·B”“ú‚ÅI—¹‚Å‚«‚È‚¢ƒR[ƒh‚̓`ƒFƒbƒNƒCƒ“‚³‚ê‚Ä‚¢‚Ü‚·‚ªA”ñƒAƒNƒeƒBƒu‚ŌĂÑo‚³‚ê‚邱‚Ƃ͂Ȃ¢‚½‚ßA‘¼‚Ìl‚ɂ͖â‘è‚Ͷ‚¶‚Ü‚¹‚ñB‚ ‚È‚½‚̃`[ƒ€ƒƒCƒg‚ðŒ¸‘¬‚³‚¹‚éŠÔˆá‚¢‚ð”Æ‚·‚±‚Æ‚Íd‘å‚ȃGƒ‰[‚Å‚·B‚»‚ê‚Í‚µ‚΂µ‚΃^ƒu[‚Å‚·B Next [How to Unit Test](08-How-to-Unit-Test.md) diff --git a/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md index d6dbd5d..4c11c57 100644 --- a/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md +++ b/jp/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -1,9 +1,9 @@ # How to Unit Test [//]: # (Version:1.0.0) -�P�̃e�X�g�ÍA�������������`�[���ɂ����ăR�[�h�����ꂽ�@�\�̌ÂX�̕������e�X�g���邱�ƂÍA�����Ƃ͈قȂ����̂ł͂Ȃ��A�R�[�f�B���O�̈ꕔ�ł��B �R�[�h�ÌÝŒv�̈ꕔ�ÍA�e�X�g�������@���݌v���邱�Ƃł��B 1�‚̕������ł����Ă��A�e�X�g�v�����������߂��ׂ��ł��B ���ɂ̓e�X�g���ȒP�ɂȂ��F�u�{�^���͌��h�����ǂ��ÌH�v ���ɂ͕��G�ɂȂ��܂��F '���̃}�b�`���O�A���S���Y���Í��m�É������}�b�`���Ԃ��܂������H' +’P‘̃eƒXƒg‚ÍA‚»‚ê‚ð‘‚¢‚½ƒ`[ƒ€‚É‚æ‚Á‚ăR[ƒh‰»‚³‚ꂽ‹@”\‚ÌŒÂX‚Ì•”•ª‚ðƒeƒXƒg‚·‚邱‚Æ‚ÍA‚»‚ê‚Æ‚͈قȂé‚à‚̂ł͂Ȃ­AƒR[ƒfƒBƒ“ƒO‚̈ꕔ‚Å‚·B ƒR[ƒh‚ÌÝŒv‚̈ꕔ‚ÍAƒeƒXƒg‚·‚é•û–@‚ðÝŒv‚·‚邱‚Ƃł·B 1‚‚̕¶‚¾‚¯‚Å‚ ‚Á‚Ä‚àAƒeƒXƒgŒv‰æ‚ð‘‚«—¯‚ß‚é‚ׂ«‚Å‚·B Žž‚ɂ̓eƒXƒg‚ªŠÈ’P‚ɂȂéFuƒ{ƒ^ƒ“‚ÍŒ©‰h‚¦‚ª—Ç‚¢‚ÌHv Žž‚ɂ͕¡ŽG‚ɂȂè‚Ü‚·F '‚±‚̃}ƒbƒ`ƒ“ƒOƒAƒ‹ƒSƒŠƒYƒ€‚ͳŠm‚ɳ‚µ‚¢ƒ}ƒbƒ`‚ð•Ô‚µ‚Ü‚µ‚½‚©H' -�”\�ł����ÎA�A�T�[�V�����`�F�b�N�ƃe�X�g�h���C�o���g�p�����������B �����͑����Ƀo�O���L���b�`���邾���łȂ��A���Ŕ����ɕ֗��ÅA���Ȃ����S�z�����K�v�̂Ȃ��~�X�e���[���r�����܂��B +‰Â”\‚Å‚ ‚ê‚ÎAƒAƒT[ƒVƒ‡ƒ“ƒ`ƒFƒbƒN‚ƃeƒXƒgƒhƒ‰ƒCƒo‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B ‚±‚ê‚Í‘Šú‚ɃoƒO‚ðƒLƒƒƒbƒ`‚·‚邾‚¯‚łȂ­AŒã‚Å”ñí‚ɕ֗˜‚ÅA‚ ‚È‚½‚ªS”z‚·‚é•K—v‚̂Ȃ¢ƒ~ƒXƒeƒŠ[‚ð”rœ‚µ‚Ü‚·B -�G�N�X�g���[���E�v���O���~���O�̊J���҂ÍA���j�b�g�E�e�X�g�����ʓI�Ɏ��s���Ă��܂��B ���͔ނ��̕��͂ð„‘E�������������܂��������Ƃ͂ł��܂����B +ƒGƒNƒXƒgƒŠ[ƒ€EƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÌŠJ”­ŽÒ‚ÍAƒ†ƒjƒbƒgEƒeƒXƒg‚ðŒø‰Ê“I‚ÉŽÀs‚µ‚Ä‚¢‚Ü‚·B Ž„‚͔ނç‚Ì•¶Í‚ð„‘E‚·‚邿‚è‚à‚¤‚Ü‚­‚¢‚­‚±‚Ƃ͂ł«‚Ü‚¹‚ñB Next [Take Breaks when Stumped](09-Take-Breaks-when-Stumped.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md index 12bdad5..bc49204 100644 --- a/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md +++ b/jp/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -1,5 +1,5 @@ # Take Breaks when Stumped [//]: # (Version:1.0.0) -�������Ƃ��ÍA�x�e�����������B �������Ƃ��Ɏ��͎��ɂ�15�����ґz���A���������ɖ߂����Ƃ��ɖ����͖��@�̂悤�ɉ����B ���Ì����͎��ɂ͓����悤�ɑ傫���Ȃ��B �ꎞ�I�ɑ��̃A�N�e�B�r�e�Bï¿½ÉØ‚��ւ��邱�Ƃ��ł��܂��B +¢‚Á‚½‚Æ‚«‚ÍA‹xŒe‚µ‚Ä‚­‚¾‚³‚¢B ¢‚Á‚½‚Æ‚«‚ÉŽ„‚ÍŽž‚É‚Í15•ªŠÔáÒ‘z‚µAŽ„‚ª‚»‚ê‚É–ß‚Á‚½‚Æ‚«‚É–â‘è‚Í–‚–@‚̂悤‚ɉð‚­B –é‚̇–°‚ÍŽž‚ɂ͓¯‚¶‚悤‚ɑ傫‚­‚È‚éB ˆêŽž“I‚É‘¼‚̃AƒNƒeƒBƒrƒeƒB‚ÉØ‚è‘Ö‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B Next [How to Recognize When to Go Home](10-How-to-Recognize-When-to-Go-Home.md) \ No newline at end of file diff --git a/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index 44a23f8..5f8fbfe 100644 --- a/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/jp/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -1,16 +1,16 @@ # How to Recognize When to Go Home [//]: # (Version:1.0.0) -�R���s���[�^�v���O���~���O�ÍA�����ł����銈���ł��B�c�O�Ȃ��ƂÉA�S�g�̌��N�����؂ɂ��镶���ł͂����܂����B�����I/���j�I�ȗ��R�i�Ⴆ�ÎA���ԂɃR���s���[�^���A�����[�h�����K�v���j���A�s�꓊���܂ł̎��Ԃ̈����ƃv���O���}�̕s���̂��߂ÉA�R���s���[�^�v���O���}�͓`���I�ɉߘJ�ł��B���͂��Ȃ��������Ă��邷�ׂĂ̕������M���邱�Ƃ͂ł��Ȃ��Ǝv���Ă��܂����A�T��60���Ԃ����ʓI�ÅA50�͂��Ȃè­ï¿½È‚��Ǝv���܂��B�����ÍA�����������͂邩�ɑ����̂��Ƃ��K�v�ł��邱�Ƃ��Ӗ����܂��B�����͗ǂ��v���O���}�ɂƂ��Äd���Ȗ����ł����A�v���O���}�͎������g�ł͂Ȃ��`�[�����C�g�ł������܂��B���‰ƂɋA���ׂ����A���ɂ͑��Ìl���ƂɋA�邱�Ƃ����������Ƃ����F�������K�v�������܂��B���̖������������邽�߂̌Œ肳�ꂽ���[���͂����܂����B�Ȃ��Ȃ瓯�����R�ÅA���ׂĂÌl�Ԃ��قȂ��Ă��邩���ł��B +ƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÍA•¶‰»‚Å‚à‚ ‚銈“®‚Å‚·BŽc”O‚È‚±‚Æ‚ÉASg‚ÌŒ’N‚ð‘娂ɂ·‚é•¶‰»‚ł͂ ‚è‚Ü‚¹‚ñB•¶‰»“I/—ðŽj“I‚È——Ri—Ⴆ‚ÎA–éŠÔ‚ɃRƒ“ƒsƒ…[ƒ^‚ðƒAƒ“ƒ[ƒh‚·‚é•K—v«j‚âAŽs꓊“ü‚܂ł̎žŠÔ‚̈³”—‚ƃvƒƒOƒ‰ƒ}‚Ì•s‘«‚Ì‚½‚ß‚ÉAƒRƒ“ƒsƒ…[ƒ^ƒvƒƒOƒ‰ƒ}‚Í“`““I‚ɉߘJ‚Å‚·BŽ„‚Í‚ ‚È‚½‚ª•·‚¢‚Ä‚¢‚é‚·‚ׂĂ̕¨Œê‚ðM‚¶‚邱‚Ƃ͂ł«‚È‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·‚ªAT‚É60ŽžŠÔ‚ªˆê”Ê“I‚ÅA50‚Í‚©‚Ȃ譂Ȃ¢‚ÆŽv‚¢‚Ü‚·B‚±‚ê‚ÍA‚»‚ê‚æ‚è‚à‚͂邩‚É‘½‚­‚Ì‚±‚Æ‚ª•K—v‚Å‚ ‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚Í—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂƂÁ‚Äd‘å‚È–â‘è‚Å‚ ‚èAƒvƒƒOƒ‰ƒ}‚ÍŽ©•ªŽ©g‚ł͂Ȃ­ƒ`[ƒ€ƒƒCƒg‚Å‚à‚ ‚è‚Ü‚·B‚¢‚‰ƂɋA‚é‚ׂ«‚©AŽž‚ɂ͑¼‚Ìl‚ª‰Æ‚É‹A‚邱‚Æ‚ðŽ¦´‚·‚邯‚«‚ð”Fޝ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚Ì–â‘è‚ð‰ðŒˆ‚·‚邽‚߂̌Œ肳‚ꂽƒ‹[ƒ‹‚Í‚ ‚è‚Ü‚¹‚ñB‚È‚º‚Ȃ瓯‚¶——R‚ÅA‚·‚ׂĂÌlŠÔ‚ªˆÙ‚È‚Á‚Ä‚¢‚é‚©‚ç‚Å‚·B -1�T�Ԃ�60���Ԃ𒴂����ÆA���͒Z���Ôi��1�T�Ôj�\�����ނ��Ƃ��ł��A���ɂ͎��Ɋ��҂������A���ɂƂ��ē��ʂȓw�͂ł��B���Íl����60���Ԃ̎d�������҂����̂������ł��邩�ǂ����͕������܂����B����40�������ł��邩�ǂ����킩���Ȃ��B�������A���͂��Ȃ��������Ă����]���Ȏ��Ԃ������ł��g���ʂ����Ă����قÇA�d���������ł����Ɗm�M���Ă��܂��B�Âl�I�ɂÍA�����ÍT��60���ԈÈ��ł��B���͌Âl�I�ɂÍA�v���O���}�[���m�[�u�����X�����s���Äd�����S�𕉂��Ȃ����΂Ȃ��Ȃ��Æl���Ă��܂��B�������A�����̓v���O���}�̋`���ł͂����܂����B�߂��������ÍA�v���O���}�[�ÍA�N���̂��߂ɃV���[�����邽�߂ÉA�Ⴆ�Όo�c�҂Ɉ��ۂÂ����}�l�[�W���[�ȂÇA�p�g���C�ɂȂ邱�Ƃ��悭�v�������܂��B�v���O���}�[�͂��΂��΂����ɋꂵ���ł��܂��B�Ȃ��Ȃ��A�ނ��͊����ŗ~�����ƔM�]�����ÄA�������ł͂Ȃ��ƌ����Ă��Ȃ������ł��B�����ɑ΂���4�‚̖h�䂪�����܂��F +1TŠÔ‚É60ŽžŠÔ‚ð’´‚¦‚邯AŽ„‚Í’ZŠúŠÔi–ñ1TŠÔj\‚µž‚Þ‚±‚Æ‚ª‚Å‚«AŽž‚ɂ͎„‚ÉŠú‘Ò‚³‚ê‚éAŽ„‚ɂƂÁ‚Ä“Á•ʂȓw—͂ł·BŽ„‚Íl‚©‚ç60ŽžŠÔ‚ÌŽdŽ–‚ðŠú‘Ò‚·‚é‚Ì‚ªŒö³‚Å‚ ‚é‚©‚Ç‚¤‚©‚Í•ª‚©‚è‚Ü‚¹‚ñBŽ„‚Í40‚ªŒö³‚Å‚ ‚é‚©‚Ç‚¤‚©‚í‚©‚ç‚È‚¢B‚µ‚©‚µAŽ„‚Í‚ ‚È‚½‚ª“­‚¢‚Ä‚¢‚é—]•ª‚ÈŽžŠÔ‚ð­‚µ‚Å‚àŽg‚¢‰Ê‚½‚µ‚Ä‚¢‚é‚Ù‚ÇAŽdŽ–‚ª‹ð‚©‚Å‚ ‚邯ŠmM‚µ‚Ä‚¢‚Ü‚·BŒÂl“I‚É‚ÍA‚»‚ê‚ÍT‚É60ŽžŠÔˆÈã‚Å‚·BŽ„‚ÍŒÂl“I‚É‚ÍAƒvƒƒOƒ‰ƒ}[‚ªƒm[ƒuƒ‹ƒŒƒX‚ðŽÀs‚µ‚Äd‚¢•‰’S‚𕉂í‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æl‚¦‚Ä‚¢‚Ü‚·B‚µ‚©‚µA‚»‚ê‚̓vƒƒOƒ‰ƒ}‚Ì‹`–±‚ł͂ ‚è‚Ü‚¹‚ñB”ß‚µ‚¢Ž–ŽÀ‚ÍAƒvƒƒOƒ‰ƒ}[‚ÍA’N‚©‚Ì‚½‚߂ɃVƒ‡[‚ð‚·‚é‚½‚ß‚ÉA—Ⴆ‚ÎŒo‰cŽÒ‚Ɉóۂ¯‚éƒ}ƒl[ƒWƒƒ[‚È‚ÇAƒpƒgƒŒƒC‚ɂȂ邱‚Æ‚ð‚æ‚­—v‹‚³‚ê‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚Í‚µ‚΂µ‚΂±‚ê‚ɋꂵ‚ñ‚Å‚¢‚Ü‚·B‚È‚º‚È‚çA”Þ‚ç‚ÍŠì‚ñ‚Å—~‚µ‚¢‚Æ”M–]‚µ‚Ä‚¢‚ÄA‚¢‚¢‚¦‚ł͂Ȃ¢‚ÆŒ¾‚Á‚Ä‚¢‚È‚¢‚©‚ç‚Å‚·B‚±‚ê‚ɑ΂µ‚Ä4‚‚̖hŒä‚ª‚ ‚è‚Ü‚·F -- �Г��̑S���ƂȂ��ׂ������Ìl�ƃR�~���j�P�[�V�������Ƃ��ÄA�����N�����Ă����̂��ɂ‚��Čo�c�҂Ɍ������^���邱�Ƃ��Ȃ��悤�ɂ��܂��B -- �h�q�I���–����I�Ɍ��ς����A�X�P�W���[���𗧂Ă邱�Ƃ��w�ÑA�N���X�P�W���[�������ł��邩�A�ǂ��ɗ����Ă����̂����������悤�ɂ����B -- �K�v�ł����΂������A�������`�[���ƌ������Ƃ��w�� -���Ȃ��������K�v�������ÎI�����܂��B +- ŽÐ“à‚Ì‘Sˆõ‚ƂȂé‚ׂ­‘½‚­‚Ìl‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚Æ‚Á‚ÄA‰½‚ª‹N‚±‚Á‚Ä‚¢‚é‚Ì‚©‚ɂ‚¢‚ÄŒo‰cŽÒ‚ÉŒë‰ð‚ð—^‚¦‚邱‚Æ‚ª‚È‚¢‚悤‚É‚µ‚Ü‚·B +- –h‰q“I‚©‚–¾Ž¦“I‚ÉŒ©Ï‚à‚èAƒXƒPƒWƒ…[ƒ‹‚𗧂Ă邱‚Æ‚ðŠw‚ÑA’N‚ªƒXƒPƒWƒ…[ƒ‹‚ª‰½‚Å‚ ‚é‚©A‚Ç‚±‚É—§‚Á‚Ä‚¢‚é‚Ì‚©‚ðŒ©‚¦‚邿‚¤‚É‚·‚éB +- •K—v‚Å‚ ‚ê‚΂¢‚¢‚¦A‚¢‚¢‚¦ƒ`[ƒ€‚ÆŒ¾‚¤‚±‚Æ‚ðŠw‚Ô +‚ ‚È‚½‚ª‚·‚é•K—v‚ª‚ ‚ê‚ÎI—¹‚µ‚Ü‚·B -�قƂ��ǂ̃v���O���}�[�͗ǂ��v���O���}�[�ł����A�ǂ��v���O���}�[�͑����̂��Ƃ��������Ǝv���Ă��܂��B���̂��߂ɂÍA���Ԃ����ʓI�ɊǗ������K�v�������܂��B�����ɒg�����Ȃ��A�����É[���ւ��邱�ƂɊ֘A���ÄA�������x�Ì��_�I�����������܂��B�����̃v���O���}�[�ÍA�E�H�[�~���O�A�b�v���ÄW�����鎞�Ԃ������ēr�؂��邱�Ƃ̂Ȃ����Ԃ������ÎA�ނ炪�ł����ʓI�ł����Ɗ����Ă��܂��B�������A�l�X�͖����Ȃ����΂Ȃ炸�A���̔C���ð‹s���Ȃ����΂Ȃ��Ȃ��B���ꂼ���Ìl�ÍA�l�Ԃ̃��Y���Ǝd���̃��Y���̗����𖞑����������@�����‚����K�v�������܂��B�e�v���O���}�[�ÍA�ł��d�v�ȉ��c�ɂ̂ݎQ�����������̓����\�ñ‚·‚��ȂÇA�����I�È��Ɗ��Ԃ��m�ۂ��邽�߂ɕK�v�È��Ƃ����ׂÄs���K�v�������܂��B +‚Ù‚Æ‚ñ‚ǂ̃vƒƒOƒ‰ƒ}[‚Í—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Å‚ ‚èA—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚Í‘½‚­‚Ì‚±‚Æ‚ð‚µ‚½‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·B‚»‚Ì‚½‚߂ɂÍAŽžŠÔ‚ðŒø‰Ê“I‚ÉŠÇ—‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B–â‘è‚É’g‚©‚­‚È‚èA‚»‚ê‚É[‚­ŠÖ‚í‚邱‚ƂɊ֘A‚µ‚ÄA‚ ‚é’ö“x‚̸_“Iе«‚ª‚ ‚è‚Ü‚·B‘½‚­‚̃vƒƒOƒ‰ƒ}[‚ÍAƒEƒH[ƒ~ƒ“ƒOƒAƒbƒv‚µ‚ÄW’†‚·‚鎞ŠÔ‚ª’·‚­‚Ä“rØ‚ê‚邱‚Ƃ̂Ȃ¢ŽžŠÔ‚ª‚ ‚ê‚ÎA”Þ‚ç‚ªÅ‚àŒø‰Ê“I‚Å‚ ‚邯д‚¶‚Ä‚¢‚Ü‚·B‚µ‚©‚µAlX‚Í–°‚ç‚È‚¯‚ê‚΂Ȃ炸A‘¼‚Ì”C–±‚ð‹s‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢B‚»‚ꂼ‚ê‚Ìl‚ÍAlŠÔ‚ÌƒŠƒYƒ€‚ÆŽdŽ–‚ÌƒŠƒYƒ€‚Ì—¼•û‚ð–ž‘«‚³‚¹‚é•û–@‚ðŒ©‚Â‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·BŠeƒvƒƒOƒ‰ƒ}[‚ÍAÅ‚àd—v‚ȉï‹c‚ɂ̂ݎQ‰Á‚·‚é“Á’è‚Ì“ú‚ð—\–ñ‚·‚é‚È‚ÇAŒø—¦“I‚Èì‹ÆŠúŠÔ‚ðŠm•Û‚·‚邽‚߂ɕK—v‚Èì‹Æ‚ð‚·‚×‚Äs‚¤•K—v‚ª‚ ‚è‚Ü‚·B -���͎q���������̂ÅA���X�ނ��ƈê�ɖ����߂����Ă��܂��B���ɂƂ��Äł����ʓI�ȃ��Y���ÍA�����ɒ����������߂������Ƃł��B�I�t�B�X���I�t�B�X�߂��ÅQ�邱�Ƃ��ł��܂��i���͒ʋ΂����ʋ΂܂Œʋ΂��Ă��܂��j�B�Q���B���͂����Ɋ����Ă��܂��ñ‚ªA�����͎��������ł����őP�̑Ë��Ăł��B�`���a�Ìê‡ï¿½Í‰Æ‚É‹A���B���Ȃ������E�v�l���l���Ă����Ȃ��A���Ȃ��͉ƂɋA���ׂ��ł��B�E�l�̎v�l�ð”•b�È��l�����ÆA�x�e���ƂɋA���ׂ��ł��B�d�x�Ì��_�Ù��A�y�x�̂��•a�ȊO�Ì��_�����̒����������ê‡ï¿½ÍA�N�����Ƃɔh�������������B���Ȃ����Ê��͔����̌����ł͂Ȃ����@�ŕs�����܂��͋\�ԂɗU�f���ꂽ�ê‡ï¿½ÍA�x�e�������K�v�������܂��B���J�ɑÎR���邽�߂ɃR�J�C���܂��̓A���t�F�^�~�����g�p���Ȃ��ł��������B�J�t�F�C���ð——p���Ȃ��ł��������B +Ž„‚ÍŽq‹Ÿ‚ª‚¢‚é‚Ì‚ÅAŽžX”Þ‚ç‚Æˆê‚É–é‚ð‰ß‚²‚µ‚Ä‚¢‚Ü‚·BŽ„‚ɂƂÁ‚ÄÅ‚àŒø‰Ê“I‚ÈƒŠƒYƒ€‚ÍA”ñí‚É’·‚¢ˆê“ú‚ð‰ß‚²‚·‚±‚Ƃł·BƒIƒtƒBƒX‚âƒIƒtƒBƒX‹ß‚­‚ÅQ‚邱‚Æ‚ª‚Å‚«‚Ü‚·iŽ„‚͒ʋ΂©‚ç’ʋ΂܂Œʋ΂µ‚Ä‚¢‚Ü‚·jBQ‚éBŽ„‚Í‚±‚ê‚ÉŠµ‚ê‚Ä‚¢‚Ü‚¹‚ñ‚ªA‚»‚ê‚ÍŽ„‚ª‰ðŒˆ‚Å‚«‚éÅ‘P‚̑˦ˆÄ‚Å‚·B“`õ•a‚Ìꇂ͉ƂɋA‚éB‚ ‚È‚½‚ªŽ©ŽEŽvl‚ðl‚¦‚Ä‚¢‚é‚È‚çA‚ ‚È‚½‚͉ƂɋA‚é‚ׂ«‚Å‚·BŽEl‚ÌŽvl‚ð”•bˆÈãl‚¦‚邯A‹xŒe‚â‰Æ‚É‹A‚é‚ׂ«‚Å‚·Bd“x‚̸_ˆÙíAŒy“x‚Ì‚¤‚•aˆÈŠO‚̸_޾г‚Ì’›Œó‚ðŽ¦‚·ê‡‚ÍA’N‚©‚ð‰Æ‚É”hŒ­‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª’Êí‚Í”æ‚ê‚ÌŒ´ˆö‚ł͂Ȃ¢•û–@‚Å•s³’¼‚Ü‚½‚Í‹\áÔ‚É—U˜f‚³‚ꂽꇂÍA‹xŒe‚ðŽæ‚é•K—v‚ª‚ ‚è‚Ü‚·B”æ˜J‚É‘ÎR‚·‚邽‚߂ɃRƒJƒCƒ“‚Ü‚½‚̓Aƒ“ƒtƒFƒ^ƒ~ƒ“‚ðŽg—p‚µ‚È‚¢‚Å‚­‚¾‚³‚¢BƒJƒtƒFƒCƒ“‚ð——p‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B Next [How to Deal with Difficult People](11-How-to-Deal-with-Difficult-People.md) diff --git a/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md index e58a9e6..4bf81ab 100644 --- a/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md +++ b/jp/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -1,15 +1,15 @@ # How to Deal with Difficult People [//]: # (Version:1.0.0) -�����炭�A����l�����ɑÎ����Ȃ���΂Ȃ�Ȃ��ł��傤�B���Ȃ����g�����l�������܂���B���Ȃ��������⌠�Ў҂Ƒ����̊�������Ă���悤�Èl�Ìê‡ï¿½ÍA���ꂪ�Ӗ�����Ɨ������؂ɂ��Ȃ���΂Ȃ�܂��ñ‚ªA���Ȃ��̒m���⌴����]���ɂ��邱�ƂȂ��A +‚¨‚»‚ç‚­A“‚¢l‚½‚¿‚ɑΈ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Å‚µ‚傤B‚ ‚È‚½Ž©g‚à“‚¢l‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚ª“¯—»‚⌠ˆÐŽÒ‚Æ‘½‚­‚ÌŠ‹“¡‚ð‚µ‚Ä‚¢‚邿‚¤‚Èl‚ÌꇂÍA‚±‚ꂪˆÓ–¡‚·‚铯—§«‚ð‘娂ɂµ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ‚ªA‚ ‚È‚½‚Ì’m«‚⌴‘¥‚ð‹]µ‚É‚·‚邱‚ƂȂ­A -����ÍA���̂悤�Ȃ��Ƃ�o�����Ă��炸�A�ȑO�Ìl���o�����E��Ŗ�ɗ����Ȃ��s���p�^�[��������Ă��ꂽ�v���O���}�[�ɂƂ��ĂÍA���Ɏז��ɂȂ邱�Ƃ�����܂��B����l�͂��΂��Έӌ��̕s��v�Ɋ���Ă���A���҂���Ë�����Љ�I���͂̉e����󂯂ɂ����B���͓K�؂ɑ��d���邱�Ƃł��B����ÍA���Ȃ����]�ނ��͂邩�ɑ����A�������ނ炪�]�ނقǑ����͂���܂���B +‚±‚ê‚ÍA‚±‚̂悤‚È‚±‚Æ‚ðŒoŒ±‚µ‚Ä‚¨‚炸AˆÈ‘O‚Ìl¶ŒoŒ±‚ªEê‚Å–ð‚É—§‚½‚È‚¢s“®ƒpƒ^[ƒ“‚ð‹³‚¦‚Ä‚­‚ꂽƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚ÍA”ñí‚Ɏז‚‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B“‚¢l‚Í‚µ‚΂µ‚Έӌ©‚Ì•sˆê’v‚ÉŠµ‚ê‚Ä‚¨‚èA‘¼ŽÒ‚æ‚è‚à‘˦‚·‚éŽÐ‰ï“Iˆ³—͂̉e‹¿‚ðŽó‚¯‚É‚­‚¢BŒ®‚Í“K؂ɑ¸d‚·‚邱‚Ƃł·B‚±‚ê‚ÍA‚ ‚È‚½‚ª–]‚Þ‚æ‚è‚͂邩‚É‘½‚­A‚µ‚©‚µ”ނ炪–]‚Þ‚Ù‚Ç‘½‚­‚Í‚ ‚è‚Ü‚¹‚ñB -�v���O���}�[�̓`�[���Ƃ��Ĉê�ɓ����Ȃ���΂Ȃ�܂���B�s��v���������Ƃ��A����͉��Ƃ��������Ȃ���΂Ȃ�Ȃ��A����͒����ԋ����肷�邱�Ƃ��ł��Ȃ��B����l�͂��΂��Δ��Ɍ����ÅA�������ɗL�p�Ȃ��Ƃ�����܂��B����l�����Ìl�ɂ���Ĉ����N�������Ό��Ȃ������ė�����邱�Ƃ��d�v�ł��B�R�~���j�P�[�V�����̎��s�ÍA���΂��Εs��v�Ì����ł����A���ɂ͑傫�ȔE�ςŎ�èœï¿½ï¿½ï¿½ï¿½ï¿½Æ‚��ł��܂��B���̃R�~���j�P�[�V������������S�̂��������̂ɕۂ��A���傫�ȑ������N����”\���̂���a��󂯓���Ȃ��ł��������B������悤�Ƃ��é‡ï¿½ï¿½ï¿½I�Ȋ��Ԃ̌�A���������B +ƒvƒƒOƒ‰ƒ}[‚̓`[ƒ€‚Æ‚µ‚Ĉê‚É“­‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB•sˆê’v‚ª¶‚¶‚½‚Æ‚«A‚»‚ê‚͉½‚Æ‚©‰ðŒˆ‚³‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢A‚»‚ê‚Í’·‚¢ŠÔ‹–°‚è‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢B“‚¢l‚Í‚µ‚΂µ‚Δñí‚ÉŒ«–¾‚ÅA‰½‚©”ñí‚É—L—p‚È‚±‚Æ‚ª‚ ‚è‚Ü‚·B“‚¢l‚ª‚»‚Ìl‚É‚æ‚Á‚Ĉø‚«‹N‚±‚³‚ê‚é•ÎŒ©‚È‚­’®‚¢‚Ä—‰ð‚·‚邱‚Æ‚ªd—v‚Å‚·BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽ¸”s‚ÍA‚µ‚΂µ‚Εsˆê’v‚̪‹’‚Å‚·‚ªAŽž‚ɂ͑傫‚È”E‘ςŎæ‚蜂­‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð—Á‚µ‚­S‚Ì‚±‚à‚Á‚½‚à‚̂ɕۂ¿A‚æ‚è‘å‚«‚È‘ˆ‚¢‚ª‹N‚±‚é‰Â”\«‚Ì‚ ‚é‰a‚ðŽó‚¯“ü‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B—‰ð‚µ‚悤‚Æ‚·‚釗“I‚ÈŠúŠÔ‚ÌŒãAŒˆ’è‚ð‰º‚·B -�����߂��q�����Ȃ��ɓ��ӂ��Ȃ����������悤�ɋ������Ȃ��ł��������B���Ȃ������[�_�[�ł���ÎA���Ȃ�����ԗǂ��Ǝv�����Ƃ���Ă��������B�Âl�I�ȗ��R���f������Ȃ��ÅA���è—�R�������é€ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ä‚��������B����l�ƃ`�[�����C�g�������ê‡ï¿½ÍA���[�_�[�̌���ɌÂl�I�ȉe����^���Ȃ��ł��������B���ꂪ���Ȃ��̓���s�����Ƃ��Ȃ��Ȃ�ÎA����͂܂������S����߂đ��̂����ł��B +‚¢‚¶‚ß‚ÁŽq‚ª‚ ‚È‚½‚É“¯ˆÓ‚µ‚È‚¢‰½‚©‚ð‚·‚é‚æ‚¤‚É‹­§‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ªƒŠ[ƒ_[‚Å‚ ‚ê‚ÎA‚ ‚È‚½‚ªˆê”Ô—Ç‚¢‚ÆŽv‚¤‚±‚Æ‚ð‚µ‚Ä‚­‚¾‚³‚¢BŒÂl“I‚È——R‚ÅŒˆ’f‚ð‰º‚³‚È‚¢‚ÅAŒˆ’è——R‚ðà–¾‚·‚途õ‚ð‚µ‚Ä‚­‚¾‚³‚¢B“‚¢l‚ƃ`[ƒ€ƒƒCƒg‚ð‚µ‚Ä‚¢‚éꇂÍAƒŠ[ƒ_[‚ÌŒˆ’è‚ÉŒÂl“I‚ȉe‹¿‚ð—^‚¦‚È‚¢‚Å‚­‚¾‚³‚¢B‚»‚ꂪ‚ ‚È‚½‚Ì“¹‚ðs‚­‚±‚Æ‚ª‚È‚¢‚È‚ç‚ÎA‚»‚ê‚͂܂Á‚½‚­S‚ð‚±‚ß‚Ä‘¼‚Ì‚â‚è•û‚Å‚·B -����l�͕ω����A���P����B���͎����̖ڂł������܂������A����͔��ɂ܂�ł��B�������A�N��ꎞ�I�ȕ������݂�����܂��B +“‚¢l‚͕ω»‚µA‰ü‘P‚·‚éBŽ„‚ÍŽ©•ª‚Ì–Ú‚Å‚»‚ê‚ðŒ©‚Ü‚µ‚½‚ªA‚»‚ê‚Í”ñí‚ɂ܂ê‚Å‚·B‚µ‚©‚µA’N‚àˆêŽž“I‚È•‚‚«’¾‚Ý‚ª‚ ‚è‚Ü‚·B -���ׂẴv���O���}�[�A���Ɏw���҂����ʂ��Ă���ۑ��1�‚ÍA����Èl������S�É]�������邱�Ƃł��B�ނ�͎d����A�q���ɂ���X��������A���̂�̂���󓮓I�ɒ�R����X��������܂��B. +‚·‚ׂẴvƒƒOƒ‰ƒ}[A“Á‚ÉŽw“±ŽÒ‚ª’¼–Ê‚µ‚Ä‚¢‚é‰Û‘è‚Ì1‚‚ÍA¢“ï‚Èl•¨‚ðŠ®‘S‚É]Ž–‚³‚¹‚邱‚Ƃł·B”Þ‚ç‚ÍŽdŽ–‚ðƒAƒqƒ‹‚É‚·‚éŒXŒü‚ª‚ ‚èA‘¼‚Ì‚à‚Ì‚æ‚è‚àŽó“®“I‚É’ïR‚·‚éŒXŒü‚ª‚ ‚è‚Ü‚·B. Next [Intermediate skills](../../2-Intermediate) diff --git a/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md index e1851c0..e218b32 100644 --- a/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md +++ b/jp/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -1,13 +1,13 @@ # How to Tradeoff Quality Against Development Time [//]: # (Version:1.0.0) -�\�t�g�E�F�A�J���ÍA�v���W�F�N�g���s�����Ƃƃv���W�F�N�g�����������邱�Ƃ̊ԂÅ��ɑË��ł��B�������A�G���W�j�A�����O���r�W�l�X�̊��������‚����悤�ȕ��@�Ńv���W�F�N�g�̓W�J���X�s�[�h�A�b�v���邽�߂ÉA�i�����g���[�h�I�t�����悤�ɋ��߂����邱�Ƃ������܂��B���Ƃ��ÎA�\�t�g�E�F�A�G���W�j�A�����O�̊��s���n���ÅA�����e�i���X�̖��肪�������������悤�È��Ƃ������悤�ɋ��߂������ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B +ƒ\ƒtƒgƒEƒFƒAŠJ”­‚ÍAƒvƒƒWƒFƒNƒg‚ªs‚¤‚±‚ƂƃvƒƒWƒFƒNƒg‚ðŠ®—¹‚³‚¹‚邱‚Ƃ̊ԂÅí‚ɑ˦‚Å‚·B‚µ‚©‚µAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚âƒrƒWƒlƒX‚ÌŠ´«‚ð‚‚¯‚邿‚¤‚È•û–@‚ŃvƒƒWƒFƒNƒg‚Ì“WŠJ‚ðƒXƒs[ƒhƒAƒbƒv‚·‚邽‚ß‚ÉA•iŽ¿‚ðƒgƒŒ[ƒhƒIƒt‚·‚邿‚¤‚É‹‚ß‚ç‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎAƒ\ƒtƒgƒEƒFƒAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚ÌŠµs‚ª•nŽã‚ÅAƒƒ“ƒeƒiƒ“ƒX‚Ì–â‘肪‘½‚­”­¶‚·‚邿‚¤‚Èì‹Æ‚ð‚·‚é‚æ‚¤‚É‹‚ß‚ç‚ê‚éꇂª‚ ‚è‚Ü‚·B -���ꂪ�N�����ê‡ï¿½ÍA�܂��`�[���ɒm�点�A�i���ቺ�̃R�X�g�𖾊m�É������邱�Ƃł��B���ǂ̂Ƃ����A���Ȃ��̗����͂��Ȃ��Ì��i�̗��������͂邩�ɗǂ��͂��ł��B�����������Ă����̂��A�����������Ă����̂��𖾊m�ɂ��A���̃T�C�N���Ŏ����ꂽ�n�ʂ��ǂ̂悤�ȃR�X�g�Ŏ����߂��̂ł��傤���B���̒��ÅA�ǂ��v���W�F�N�g�v�悪�ñ‹Ÿ‚����Ž������𗧂‚͂��ł��B�i���̃g���[�h�I�t���iï¿½ï¿½ï¿½ÛØ‚Ì“w�͂ɉe�����y�ڂ��ê‡ï¿½ÍA�������w�E�����������i���i�ƕiï¿½ï¿½ï¿½ÛØ’S���҂̗����Éj�B�i���̃g���[�h�I�t���iï¿½ï¿½ï¿½ÛØŠï¿½ï¿½ÔŒï¿½ï¿½É•ñ‚������o�O�ð‘‚₷�ê‡ï¿½ÍA�������w�E�����������B +‚±‚ꂪ‹N‚«‚½ê‡‚ÍA‚Ü‚¸ƒ`[ƒ€‚É’m‚点A•iŽ¿’ቺ‚̃RƒXƒg‚𖾊m‚Éà–¾‚·‚邱‚Ƃł·BŒ‹‹Ç‚̂Ƃ±‚ëA‚ ‚È‚½‚Ì—‰ð‚Í‚ ‚È‚½‚ÌãŽi‚Ì—‰ð‚æ‚è‚͂邩‚É—Ç‚¢‚Í‚¸‚Å‚·B‰½‚ªŽ¸‚í‚ê‚Ä‚¢‚é‚Ì‚©A‰½‚ª“¾‚ç‚ê‚Ä‚¢‚é‚Ì‚©‚𖾊m‚É‚µAŽŸ‚̃TƒCƒNƒ‹‚ÅŽ¸‚í‚ꂽ’n–Ê‚ð‚ǂ̂悤‚ȃRƒXƒg‚ÅŽæ‚è–ß‚·‚̂łµ‚傤‚©B‚±‚Ì’†‚ÅA—Ç‚¢ƒvƒƒWƒFƒNƒgŒv‰æ‚ª’ñ‹Ÿ‚·‚é‰ÂŽ‹«‚ª–𗧂‚͂¸‚Å‚·B•iŽ¿‚̃gƒŒ[ƒhƒIƒt‚ª•iŽ¿•ÛØ‚Ì“w—͂ɉe‹¿‚ð‹y‚Ú‚·ê‡‚ÍA‚»‚ê‚ðŽw“E‚µ‚Ä‚­‚¾‚³‚¢iãŽi‚Æ•iŽ¿•ÛØ’S“–ŽÒ‚Ì—¼•û‚ÉjB•iŽ¿‚̃gƒŒ[ƒhƒIƒt‚ª•iŽ¿•ÛØŠúŠÔŒã‚É•ñ‚³‚ê‚éƒoƒO‚ð‘‚₷ꇂÍA‚»‚ê‚ðŽw“E‚µ‚Ä‚­‚¾‚³‚¢B -�Þ����܂��咣���Ă����Ȃ��A���̃T�C�N���Å������������P���v�悷�邱�Ƃ��ł��������̃R���|�[�l���g�ɕs���R���𕪗����悤�Ƃ����ׂ��ł��B���������Ȃ��̃`�[���É������A�v���𗧂Ă邱�Ƃ��ł��܂��B +”Þ—‚ª‚Ü‚¾Žå’£‚µ‚Ä‚¢‚é‚È‚çAŽŸ‚̃TƒCƒNƒ‹‚Å‘‚«’¼‚µ‚â‰ü‘P‚ðŒv‰æ‚·‚邱‚Æ‚ª‚Å‚«‚é“Á’è‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚É•sŽ©—R‚³‚𕪗£‚µ‚悤‚Æ‚·‚é‚ׂ«‚Å‚·B‚±‚ê‚ð‚ ‚È‚½‚̃`[ƒ€‚Éà–¾‚µAŒv‰æ‚𗧂Ă邱‚Æ‚ª‚Å‚«‚Ü‚·B -Slashdot��NinjaProgrammer�����̕��΂𑗂����F +Slashdot‚ÌNinjaProgrammer‚ª‚±‚Ì•ó΂𑗂Á‚½F ->�D�ꂽ�݌v�ÍA�n���ȃR�[�h�����ɑ΂��ĉñ•œ‚��邱�Ƃ��Y���Ȃ��ł��������B�R�[�h�S�̂ŗÇD�ȃC���^�t�F�[�X�ƒ��ۊT�O�����݂����ê‡ï¿½A�ÅI�I�È��������͂͂邩�ɖ��ɂɂȂ��܂��B�C����������m�ȃR�[�h�������̂�����ê‡ï¿½ÍA�����������N���������R�A�f�U�C���ɉ��������Ȃ̂����������Ă��������B +>—D‚ꂽ݌v‚ÍA•nŽã‚ȃR[ƒhŽÀ‘•‚ɑ΂µ‚ĉñ•œ‚·‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢BƒR[ƒh‘S‘̂ŗÇD‚ȃCƒ“ƒ^ƒtƒF[ƒX‚Æ’ŠÛŠT”O‚ª‘¶Ý‚·‚éê‡AÅI“I‚È‘‚«Š·‚¦‚͂͂邩‚É–³’ɂɂȂè‚Ü‚·BC³‚ª“‚¢–¾Šm‚ȃR[ƒh‚ð‘‚­‚Ì‚ª“‚¢ê‡‚ÍA‚±‚ê‚ðˆø‚«‹N‚±‚µ‚Ä‚¢‚éƒRƒAƒfƒUƒCƒ“‚ɉ½‚ª–â‘è‚Ȃ̂©‚ðŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Manage Software Dependence](02-How-to-Manage-Software-System-Dependence.md) diff --git a/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index 6076eec..c3ab39a 100644 --- a/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/jp/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -1,13 +1,13 @@ # How to Manage Software System Dependence [//]: # (Version:1.0.0) -�����̃\�t�g�E�F�A�V�X�e���ÍA���Ȃ��̃R���g���[�����ɒ��ڑ��݂��Ȃ����������Ȃ������̃R���|�[�l���g�Ɉˑ������X���������܂��B�����ɂ����A�V�i�W�[�ÆÄ—��p�ɂ��è¶ï¿½Y�������サ�܂��B�������A�e�R���|�[�l���g�ɂ͂����‚��̖��肪�����܂��B +Œ»‘ã‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ÍA‚ ‚È‚½‚̃Rƒ“ƒgƒ[ƒ‹‰º‚É’¼Ú‘¶Ý‚µ‚È‚¢‚©‚à‚µ‚ê‚È‚¢‘½‚­‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚Ɉˑ¶‚·‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É‚æ‚èAƒVƒiƒW[‚ÆÄ—˜—p‚É‚æ‚è¶ŽY«‚ªŒüサ‚Ü‚·B‚µ‚©‚µAŠeƒRƒ“ƒ|[ƒlƒ“ƒg‚ɂ͂¢‚­‚‚©‚Ì–â‘肪‚ ‚è‚Ü‚·B -- �R���|�[�l���g�̃o�O���ǂ̂悤�ÉC�����܂����H -- �R���|�[�l���g�������̃n�[�h�E�F�A�܂��̓\�t�g�E�F�A�V�X�e���É������Ă��܂����H -- �R���|�[�l���g�����S�Ɏ��s�������ǂ����܂����H +- ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃oƒO‚ð‚ǂ̂悤‚ÉC³‚µ‚Ü‚·‚©H +- ƒRƒ“ƒ|[ƒlƒ“ƒg‚ª“Á’è‚̃n[ƒhƒEƒFƒA‚Ü‚½‚̓\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ɧŒÀ‚µ‚Ä‚¢‚Ü‚·‚©H +- ƒRƒ“ƒ|[ƒlƒ“ƒg‚ªŠ®‘S‚ÉŽ¸”s‚µ‚½‚ç‚Ç‚¤‚µ‚Ü‚·‚©H -�R���|�[�l���g�����炩�̕��@�ŃJ�v�Z���������A�R���|�[�l���g�����������A�X���b�v�A�E�g�ł����悤�ɂ��邱�Ƃ����Ƀx�X�g�ł��B�R���|�[�l���g�����S�ɋ@�\���Ȃ��Ɣ��������ê‡ï¿½ÍA�ʂ̃R���|�[�l���g�����ɓ����邱�Ƃ��ł��܂����A�Ǝ��̃R���|�[�l���g���ì¬ï¿½ï¿½ï¿½ï¿½ï¿½K�v�������܂��B�J�v�Z�����͈ÚA���ł͂����܂��ñ‚ªA�ÚA���e�ՂɂȂ��܂����A�����͂قړ����ł��B +ƒRƒ“ƒ|[ƒlƒ“ƒg‚ª‰½‚ç‚©‚Ì•û–@‚ŃJƒvƒZƒ‹‰»‚³‚êAƒRƒ“ƒ|[ƒlƒ“ƒg‚ª•ª—£‚³‚êAƒXƒƒbƒvƒAƒEƒg‚Å‚«‚邿‚¤‚É‚·‚邱‚Æ‚ªí‚ɃxƒXƒg‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg‚ªŠ®‘S‚É‹@”\‚µ‚È‚¢‚Æ”»–¾‚µ‚½ê‡‚ÍA•ʂ̃Rƒ“ƒ|[ƒlƒ“ƒg‚ðŽè‚É“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA“ÆŽ©‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚ð쬂·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒJƒvƒZƒ‹‰»‚͈ÚA«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªAˆÚA‚ª—eˆÕ‚ɂȂè‚Ü‚·‚ªA‚±‚ê‚͂قړ¯‚¶‚Å‚·B -�R���|�[�l���g�̃\�[�X�R�[�h�����‚��ƂÍA���X�N��4�{�Ɍ��������܂��B�\�[�X�R�[�h���g�p�����ÆA�����ȒP�ɕ]�����A�ȒP�Ƀf�o�b�O���A�����������‚��₷���Ȃ��A�C�����ȒP�És�����Ƃ��ł��܂��B�C���v���O�������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ê‡ï¿½ÍA�R���|�[�l���g�Ì��L�҂ÉC���v���O�������n���A�C���v���O���������������[�X�ɑg�Ý��ޕK�v�������܂��B�����ȊO�Ìê‡ï¿½ÍA�������̃o�[�W�������ێ������K�v�������܂��B +ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃\[ƒXƒR[ƒh‚ðŽ‚Â‚±‚Æ‚ÍAƒŠƒXƒN‚ð4”{‚ÉŒ¸­‚³‚¹‚Ü‚·Bƒ\[ƒXƒR[ƒh‚ðŽg—p‚·‚邯A‚æ‚èŠÈ’P‚É•]‰¿‚µAŠÈ’P‚ɃfƒoƒbƒO‚µA‰ñ”ðô‚ðŒ©‚Â‚¯‚â‚·‚­‚È‚èAC³‚ðŠÈ’P‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·BC³ƒvƒƒOƒ‰ƒ€‚ð쬂·‚éꇂÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚ÌŠ—LŽÒ‚ÉC³ƒvƒƒOƒ‰ƒ€‚ð“n‚µAC³ƒvƒƒOƒ‰ƒ€‚ðŒöŽ®ƒŠƒŠ[ƒX‚É‘g‚Ýž‚Þ•K—v‚ª‚ ‚è‚Ü‚·B‚»‚êˆÈŠO‚ÌꇂÍA”ñŒöŽ®‚̃o[ƒWƒ‡ƒ“‚ðˆÛŽ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Decide if Software is Too Immature](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md index c3a5419..59629bb 100644 --- a/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md +++ b/jp/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -1,18 +1,18 @@ # How to Decide if Software is Too Immature [//]: # (Version:1.0.0) -���Ìl���������\�t�g�E�F�A���g�p���邱�ƂÍA���S�ȃV�X�e�����v���É\�z�����ł����ʓI�ȕ��@��1�‚ł��B�����͗��_���ׂ��ł͂����܂��ñ‚ªA�����ɔ������X�N���������Ȃ����΂Ȃ��܂����B�ł��傫�ȃ��X�N��1�‚ÍA�\�t�g�E�F�A���g�p�”\�È��i�É��n�����O�ÉA���΂��΃\�t�g�E�F�A�Ɋ֘A�������A�o�O�ƕs���S�ȓ����̊��Ԃł��B�\�t�g�E�F�A�V�X�e���Ƃ̓��������������O�ÉA���Åì¬ï¿½ï¿½ï¿½ê‚½ï¿½ï¿½ï¿½Ì‚ł��낤�Ƒ��O�҂ɂ����Äì¬ï¿½ï¿½ï¿½ê‚½ï¿½ï¿½ï¿½Ì‚ł��낤�ÆA���ۂɎg�p�����ɂÍ\���É��n���Ă��邩�ǂ������������邱�Ƃ������Éd�v�ł��B�����ł��Ȃ����g�Éq�˂��ׂ�10�̎��₪�����܂��F +‘¼‚Ìl‚ª‘‚¢‚½ƒ\ƒtƒgƒEƒFƒA‚ðŽg—p‚·‚邱‚Æ‚ÍAŒ˜˜S‚ȃVƒXƒeƒ€‚ðv‘¬‚É\’z‚·‚éÅ‚àŒø‰Ê“I‚È•û–@‚Ì1‚‚ł·B‚»‚ê‚Í—Ž’_‚·‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚»‚ê‚É”º‚¤ƒŠƒXƒN‚ðŒŸ“¢‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBÅ‚à‘å‚«‚ÈƒŠƒXƒN‚Ì1‚‚ÍAƒ\ƒtƒgƒEƒFƒA‚ªŽg—p‰Â”\‚È»•i‚ɬn‚·‚é‘O‚ÉA‚µ‚΂µ‚΃\ƒtƒgƒEƒFƒA‚ÉŠÖ˜A‚µ‚Ä‚¢‚éAƒoƒO‚Æ•sŠ®‘S‚È“®ì‚ÌŠúŠÔ‚Å‚·Bƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚Ƃ̓‡‚ðŒŸ“¢‚·‚é‘O‚ÉAŽÐ“à‚Å쬂³‚ꂽ‚à‚̂ł ‚낤‚Æ‘æŽOŽÒ‚É‚æ‚Á‚Ä쬂³‚ꂽ‚à‚̂ł ‚낤‚ÆAŽÀÛ‚ÉŽg—p‚·‚é‚É‚Í\•ª‚ɬn‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŒŸ“¢‚·‚邱‚Æ‚ª”ñí‚Éd—v‚Å‚·B‚±‚±‚Å‚ ‚È‚½Ž©g‚Éq‚Ë‚é‚ׂ«10‚ÌŽ¿–₪‚ ‚è‚Ü‚·F -1.���C�ł����H �i�ñ‘©‚͔����ɖ����n�ł��j�B -2.�\�t�g�E�F�A�Ɋւ����m���̂����A�N�Z�X�”\�Ȗ{�̂������܂����H -3.���Ȃ��ÍÅ��̃��[�U�[�ł����H -4.�p���ɋ����C���Z���e�B�u�͂����܂����H -5.�����e�i���X�ɓw�͂��Ă��܂������H -6.�����͌��݂̃����e�i�̕��󂩂ç¶ï¿½ï¿½ï¿½c�邱�Ƃ��ł��܂����H -7.���Ȃ��Ƃ������̖��t���̑��֕i�������܂����H -���Ȃ��̕��������Ђɂ����͒m�����Ă��܂����H -���Ȃ��̕��������Ђɂ͖]�܂����̂ł����H -10.���Ȃ��������ê‡ï¿½Å‚������Ɏ����g�Þl�X���ق����Ƃ��ł��܂����H +1.ö‹C‚Å‚·‚©H i–ñ‘©‚Í”ñí‚É–¢¬n‚Å‚·jB +2.ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚·‚é’mޝ‚Ì‚ ‚éƒAƒNƒZƒX‰Â”\‚È–{‘Ì‚ª‚ ‚è‚Ü‚·‚©H +3.‚ ‚È‚½‚Íʼn‚̃†[ƒU[‚Å‚·‚©H +4.Œp‘±‚É‹­‚¢ƒCƒ“ƒZƒ“ƒeƒBƒu‚Í‚ ‚è‚Ü‚·‚©H +5.ƒƒ“ƒeƒiƒ“ƒX‚É“w—Í‚µ‚Ä‚¢‚Ü‚µ‚½‚©H +6.‚»‚ê‚ÍŒ»Ý‚̃ƒ“ƒeƒi‚Ì•ö‰ó‚©‚ç¶‚«Žc‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H +7.­‚È‚­‚Æ‚à”¼•ª‚Ì–¡•t‚¯‚Ì‘ã‘Ö•i‚ª‚ ‚è‚Ü‚·‚©H +‚ ‚È‚½‚Ì•”‘°‚â‰ïŽÐ‚É‚»‚ê‚Í’m‚ç‚ê‚Ä‚¢‚Ü‚·‚©H +‚ ‚È‚½‚Ì•”‘°‚â‰ïŽÐ‚ɂ͖]‚Ü‚µ‚¢‚̂ł·‚©H +10.‚ ‚È‚½‚ªˆ«‚¢ê‡‚Å‚à‚»‚ê‚ÉŽæ‚è‘g‚ÞlX‚ðŒÙ‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·‚©H -�������̊î€ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½l�������ÎA�N�ƉƂ̃��X�N���팸���邽�߂Ì\���Ɋm�����ꂽ�t���[�\�t�g�E�F�A�ƃI�[�v���\�[�X�\�t�g�E�F�A�̑傫�ȉ��l���ؖ������܂��B +‚±‚ê‚ç‚̊𭂵l—¶‚·‚ê‚ÎA‹N‹Æ‰Æ‚ÌƒŠƒXƒN‚ð팸‚·‚邽‚ß‚Ì\•ª‚ÉŠm—§‚³‚ꂽƒtƒŠ[ƒ\ƒtƒgƒEƒFƒA‚ƃI[ƒvƒ“ƒ\[ƒXƒ\ƒtƒgƒEƒFƒA‚̑傫‚ȉ¿’l‚ªØ–¾‚³‚ê‚Ü‚·B Next [How to Make a Buy vs. Build Decision](04-How-to-Make-a-Buy-vs-Build-Decision.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index 598babd..f6d15bc 100644 --- a/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/jp/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -1,16 +1,16 @@ # How to Make a Buy vs. Build Decision [//]: # (Version:1.0.0) -�\�t�g�E�F�A���g���ĉ������B�����悤�Ƃ��Ă����N�ƉƂ̊��Ƃ��v���W�F�N�g�ÍA���Éu�w���v�Îu�����v�̌��������Ȃ����΂Ȃ��܂����B���̃t���[�Y�̃^�[���ÍA2�‚̓_�ŕs�K�ł����B�I�[�v���\�[�X�ÆA�K������*�����Ă��Ȃ��t���[�\�t�g�E�F�A�𖳎����Ă����悤���B�����Éd�v�Ȃ̂ÍA�����R�X�g���l�������K�v�����邽�ßA�����Ŏ擾���ē������邩�A�����Å\�z���Č��肷�邩�ð“����邱�Ƃł��B�����ɂÍA�r�W�l�X�A�Ǘ��A�G���W�j�A�����O�É��ʂ����l�ނ��K�v�ł��B +ƒ\ƒtƒgƒEƒFƒA‚ðŽg‚Á‚ĉ½‚©‚ð’B¬‚µ‚悤‚Æ‚µ‚Ä‚¢‚é‹N‹Æ‰Æ‚ÌŠé‹Æ‚âƒvƒƒWƒFƒNƒg‚ÍAí‚Éuw“üv‘ÎuŒˆ’èv‚ÌŒˆ’è‚ð‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃tƒŒ[ƒY‚̃^[ƒ“‚ÍA2‚‚̓_‚Å•sK‚Å‚ ‚éBƒI[ƒvƒ“ƒ\[ƒX‚ÆA•K‚¸‚µ‚à*”ƒ‚Á‚Ä‚¢‚È‚¢ƒtƒŠ[ƒ\ƒtƒgƒEƒFƒA‚𖳎‹‚µ‚Ä‚¢‚邿‚¤‚¾B‚³‚ç‚Éd—v‚Ȃ̂ÍA“‡ƒRƒXƒg‚ðl—¶‚·‚é•K—v‚ª‚ ‚邽‚ßA‚±‚±‚Ŏ擾‚µ‚Ä“‡‚·‚é‚©A‚±‚±‚Å\’z‚µ‚ÄŒˆ’è‚·‚é‚©‚𓇂·‚邱‚Ƃł·B‚±‚ê‚É‚ÍAƒrƒWƒlƒXAŠÇ—AƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚ɸ’Ê‚µ‚½lÞ‚ª•K—v‚Å‚·B -- ���Ȃ��̃j�[�Y�ÍA���ꂪ�݌v���ꂽ���̂Ƃǂꂭ�炢�悭�����Ă��܂����H -- ���Ȃ����w���������̂̂����A�ǂ̕������K�v�ł����H -- �������]�������R�X�g�͂������ł����H -- �����̃R�X�g�͂������ł����H -- �w���͒����I�Ȉێ����ð‘Œï¿½ï¿½ï¿½ï¿½ï¿½ï¿½é‚¾ï¿½ë‚¤ï¿½ï¿½ï¿½H -- �������\�z���邱�ƂÅA���Ȃ����]���ł��Ȃ��r�W�l�X�|�W�V�����ɂ��Ȃ����u�����Ƃ͂ł��܂����H +- ‚ ‚È‚½‚̃j[ƒY‚ÍA‚»‚ꂪ݌v‚³‚ꂽ‚à‚̂Ƃǂꂭ‚ç‚¢‚æ‚­‡‚Á‚Ä‚¢‚Ü‚·‚©H +- ‚ ‚È‚½‚ªw“ü‚·‚é‚à‚̂̂¤‚¿A‚ǂ̕”•ª‚ª•K—v‚Å‚·‚©H +- “‡‚ð•]‰¿‚·‚éƒRƒXƒg‚Í‚¢‚­‚ç‚Å‚·‚©H +- “‡‚̃RƒXƒg‚Í‚¢‚­‚ç‚Å‚·‚©H +- w“ü‚Í’·Šú“I‚Ȉێ”ï‚𑌸‚³‚¹‚邾‚낤‚©H +- ‚»‚ê‚ð\’z‚·‚邱‚Æ‚ÅA‚ ‚È‚½‚ª–]‚ñ‚Å‚¢‚È‚¢ƒrƒWƒlƒXƒ|ƒWƒVƒ‡ƒ“‚É‚ ‚È‚½‚ð’u‚­‚±‚Ƃ͂ł«‚Ü‚·‚©H -���Ȃ��ÍA���̃r�W�l�X�S�̂̊��b�ƂȂ��قǑ傫�Ȃ��̂��\�z�����O�ÉA���x�l���Ȃ����΂Ȃ��܂����B���̂悤�ȃA�C�f�A�ÍA���Ȃ��̃`�[���Év�����邱�Ƃ��������ñ‚ ‚閾�邭�y�ϓI�Èl�X�ɂ����Ē��Ă����邱�Ƃ��悭�����܂��B�ނ��̃A�C�f�A�����͓I�ł����ÎA�r�W�l�X�v�������ÏX���������������܂����B�ӎ����Ȃ��Ă������̃r�W�l�X�������傫�ȃ\�����[�V�����ɓ������Ȃ��ł��������B +‚ ‚È‚½‚ÍA‘¼‚̃rƒWƒlƒX‘S‘̂̊î‘b‚ƂȂé‚قǑ傫‚È‚à‚Ì‚ð\’z‚·‚é‘O‚ÉA“ñ“xl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚̂悤‚ȃAƒCƒfƒA‚ÍA‚ ‚È‚½‚̃`[ƒ€‚ÉvŒ£‚·‚邱‚Æ‚ª‚½‚­‚³‚ñ‚ ‚é–¾‚é‚­ŠyŠÏ“I‚ÈlX‚É‚æ‚Á‚Ä’ñˆÄ‚³‚ê‚邱‚Æ‚ª‚æ‚­‚ ‚è‚Ü‚·B”Þ‚ç‚̃AƒCƒfƒA‚ª–£—Í“I‚Å‚ ‚ê‚ÎAƒrƒWƒlƒXƒvƒ‰ƒ“‚ð•ÏX‚µ‚½‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBˆÓޝ‚ª‚È‚­‚Ä‚àŽ©•ª‚̃rƒWƒlƒX‚æ‚è‚à‘å‚«‚ȃ\ƒŠƒ…[ƒVƒ‡ƒ“‚É“ŠŽ‘‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B -�������̎����������������A�����炭���z�p�Æw���p��2�‚̃v���W�F�N�g�v�������������K�v�������܂��B�����ɂ����A�����R�X�g���l�������K�v�������܂��B�܂��A�����̃\�����[�V�����̒����I�ȃ����e�i���X�R�X�g���l�������K�v�������܂��B�����R�X�g�����ς����ɂÍA�\�t�g�E�F�A���w�������O�Ɋ��S�ȕ]�����s���K�v�������܂��B���Ȃ����������]�����邱�Ƃ��ł��Ȃ��ê‡ï¿½A���Ȃ��͂������w�������ۂɕs�����ȃ��X�N���z�肵�A���̓����Ì��i���w�����邱�Ƃ����肷���K�v�������܂��B�l�����Ìw�����肪�����‚������ê‡ï¿½A���ꂼ�����]�����邽�߂ɂ����‚��̃G�l���M�[�����₷�K�v�������܂��B +‚±‚ê‚ç‚ÌŽ¿–â‚ðŒŸ“¢‚µ‚½ŒãA‚¨‚»‚ç‚­Œš’z—p‚Æw“ü—p‚Ì2‚‚̃vƒƒWƒFƒNƒgŒv‰æˆÄ‚ð€”õ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚É‚æ‚èA“‡ƒRƒXƒg‚ðl—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½A—¼•û‚̃\ƒŠƒ…[ƒVƒ‡ƒ“‚Ì’·Šú“I‚ȃƒ“ƒeƒiƒ“ƒXƒRƒXƒg‚àl—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B“‡ƒRƒXƒg‚ðŒ©Ï‚à‚é‚É‚ÍAƒ\ƒtƒgƒEƒFƒA‚ðw“ü‚·‚é‘O‚ÉŠ®‘S‚È•]‰¿‚ðs‚¤•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ª‚»‚ê‚ð•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ê‡A‚ ‚È‚½‚Í‚»‚ê‚ðw“ü‚·‚éÛ‚É•s‡—‚ÈƒŠƒXƒN‚ð‘z’肵A‚»‚Ì“Á’è‚Ì»•i‚ðw“ü‚·‚邱‚Æ‚ðŒˆ’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·Bl—¶’†‚Ìw“üŒˆ’肪‚¢‚­‚‚©‚ ‚éê‡A‚»‚ꂼ‚ê‚ð•]‰¿‚·‚邽‚߂ɂ¢‚­‚‚©‚̃Gƒlƒ‹ƒM[‚ð”ï‚â‚·•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Grow Professionally](05-How-to-Grow-Professionally.md) diff --git a/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index f64e9dc..a221e2a 100644 --- a/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/jp/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -1,11 +1,11 @@ # How to Grow Professionally [//]: # (Version:1.0.0) -���Ȃ��̌����𒴂����ӔC�𕉂��܂��B ���Ȃ����]�ޖ������ʂ����Ă��������B ���K�͂ȑg�D�Ì����ւÌl�X�Ìv���A�����Ă��Ȃ����Âl�I�ɖ𗧂‚��̂ւ̊��ӂ��\�������������B +‚ ‚È‚½‚ÌŒ ŒÀ‚ð’´‚¦‚½Ó”C‚𕉂¢‚Ü‚·B ‚ ‚È‚½‚ª–]‚Þ–ðŠ„‚ð‰Ê‚½‚µ‚Ä‚­‚¾‚³‚¢B ‘å‹K–͂ȑgD‚̬Œ÷‚Ö‚ÌlX‚ÌvŒ£A‚»‚µ‚Ä‚ ‚È‚½‚ªŒÂl“I‚ɖ𗧂‚à‚̂ւ̊´ŽÓ‚ð•\–¾‚µ‚Ä‚­‚¾‚³‚¢B -���Ȃ����`�[�����[�_�[�ɂȂ肽���Ȃ��A�R���Z���T�X�̌`���𑣂��B �}�l�[�W���[�ɂȂ肽���ê‡ï¿½ÍA�X�P�W���[�����S�������������B ���[�_�[���}�l�[�W���[�ƈê�Ɏd�������Ă����ԂÍA�Ê킱�������K�És�����Ƃ��ł��܂��B�����ɂ����A���[�_�[���}�l�[�W���[�������傫�ÈÓ”C�𕉂����ƂɂȂ��܂��B ���ꂪ�����������Ȃ��A���x�É��������������B +‚ ‚È‚½‚ªƒ`[ƒ€ƒŠ[ƒ_[‚ɂȂ肽‚¢‚È‚çAƒRƒ“ƒZƒ“ƒTƒX‚ÌŒ`¬‚𑣂·B ƒ}ƒl[ƒWƒƒ[‚ɂȂ肽‚¢ê‡‚ÍAƒXƒPƒWƒ…[ƒ‹‚ð’S“–‚µ‚Ä‚­‚¾‚³‚¢B ƒŠ[ƒ_[‚âƒ}ƒl[ƒWƒƒ[‚ƈê‚ÉŽdŽ–‚ð‚µ‚Ä‚¢‚éŠÔ‚ÍA’Ê킱‚ê‚ð‰õ“K‚És‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚É‚æ‚èAƒŠ[ƒ_[‚âƒ}ƒl[ƒWƒƒ[‚ª‚æ‚è‘å‚«‚ÈÓ”C‚𕉂¤‚±‚ƂɂȂè‚Ü‚·B ‚»‚ê‚ªŽŽ‚µ‚·‚¬‚é‚È‚çAˆê“x‚É­‚µ‚µ‚Ä‚­‚¾‚³‚¢B -���Ȃ����g���]�������������B ���Ȃ��������ǂ��v���O���}�ɂȂ肽���Ȃ��A���Ȃ����ǂ̂悤�ɂ������̂悤�ɂȂ邱�Ƃ��ł��邩�܎^�����l�Éq�˂Ȃ����B ���i�ɕ������Ƃ��ł��܂��B���i�ɂ͒m���Ă��܂����A���Ȃ��̃L�����A�ɑ傫�ȉe�����^���܂��B +‚ ‚È‚½Ž©g‚ð•]‰¿‚µ‚Ä‚­‚¾‚³‚¢B ‚ ‚È‚½‚ª‚æ‚è—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ɂȂ肽‚¢‚È‚çA‚ ‚È‚½‚ª‚ǂ̂悤‚É‚»‚ê‚ç‚̂悤‚ɂȂ邱‚Æ‚ª‚Å‚«‚é‚©ÜŽ^‚·‚él‚Éq‚˂Ȃ³‚¢B ãŽi‚É•·‚­‚±‚Æ‚à‚Å‚«‚Ü‚·BãŽi‚ɂ͒m‚Á‚Ä‚¢‚Ü‚·‚ªA‚ ‚È‚½‚̃LƒƒƒŠƒA‚ɑ傫‚ȉe‹¿‚ð—^‚¦‚Ü‚·B -�V�����\�t�g�E�F�A�V�X�e�����w�Ԃ��Ƃ̂悤�ÈA���ׂȋZ�p�I�Ȃ��̂ł��A���Ȃ��̎d���ɂ������ð“����邱�Ƃɂ����ÄA���܂������悤�ȃn�[�h�ȎЉ��I�Ȃ��̂ł��A�V�����X�L�����w�ԕ��@���v�悷���B +V‚µ‚¢ƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ðŠw‚Ô‚±‚Ƃ̂悤‚ÈA±×‚È‹Zp“I‚È‚à‚̂łàA‚ ‚È‚½‚ÌŽdŽ–‚É‚»‚ê‚ç‚𓇂·‚邱‚Ƃɂæ‚Á‚ÄA‚¤‚Ü‚­‘‚­‚悤‚ȃn[ƒh‚ȎЉï“I‚È‚à‚̂łàAV‚µ‚¢ƒXƒLƒ‹‚ðŠw‚Ô•û–@‚ðŒv‰æ‚·‚éB Next [How to Evaluate Interviewees](06-How-to-Evaluate-Interviewees.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md index 7710641..eda4420 100644 --- a/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md +++ b/jp/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -1,15 +1,15 @@ # How to Evaluate Interviewees [//]: # (Version:1.0.0) -���ݓI�È]�ƈ����]�����邱�ƂÍA�����ɂӂ��킵���G�l���M�[���^�������Ă��Ȃ��B���������̂悤�Ȉ����ٗp�͂Ђǂ��ł��B�݂��Ȃ̃G�l���M�[�̂��Ȃ��̕����͕��W�ɔ��₳�����ׂ��ł����A�����͂߂����És�����܂����B +öÝ“I‚È]‹Æˆõ‚ð•]‰¿‚·‚邱‚Æ‚ÍA‚»‚ê‚ɂӂ³‚킵‚¢ƒGƒlƒ‹ƒM[‚ª—^‚¦‚ç‚ê‚Ä‚¢‚È‚¢Bˆ«‚¢Œ‹¥‚̂悤‚Ȉ«‚¢ŒÙ—p‚͂Ђǂ¢‚Å‚·B‚Ý‚ñ‚Ȃ̃Gƒlƒ‹ƒM[‚Ì‚©‚È‚è‚Ì•”•ª‚Í•åW‚É”ï‚₳‚ê‚é‚ׂ«‚Å‚·‚ªA‚±‚ê‚͂߂Á‚½‚És‚í‚ê‚Ü‚¹‚ñB -�C���^�r���[�X�^�C���͂��܂��܂ł��B�����҂̒��ɂ͔����ɃX�g���X���������悤�ÉÝŒv���ꂽ�����Ƃ����܂��B�����̓X�g���X���ł̃L�����N�^�[�̌��ׂ����_�𖾂炩�ɂ��������ɋM�d�ȖړI���ʂ����܂��B�����҂͎������g�Ɣ��ׂăC���^�r���A�[�ɂÍ����ł͂Ȃ��A���ȋ\�Ԃɑ΂����l�Ԃ̔\�͂͋����ׂ����̂ł��B +ƒCƒ“ƒ^ƒrƒ…[ƒXƒ^ƒCƒ‹‚Í‚³‚Ü‚´‚܂ł·BŒó•âŽÒ‚Ì’†‚ɂ͔ñí‚ɃXƒgƒŒƒX‚ðŠ´‚¶‚邿‚¤‚ÉÝŒv‚³‚ꂽ‰–â‰Æ‚à‚¢‚Ü‚·B‚±‚ê‚̓XƒgƒŒƒX‰º‚ł̃Lƒƒƒ‰ƒNƒ^[‚ÌŒ‡Š×‚âŽã“_‚𖾂炩‚É‚·‚é”ñí‚É‹Md‚È–Ú“I‚ð‰Ê‚½‚µ‚Ü‚·BŒó•âŽÒ‚ÍŽ©•ªŽ©g‚Æ”ä‚ׂăCƒ“ƒ^ƒrƒ…ƒA[‚ɂͳ’¼‚ł͂Ȃ­AŽ©ŒÈ‹\áԂɑ΂·‚élŠÔ‚Ì”\—͂͋Á‚­‚ׂ«‚à‚̂ł·B -���Ȃ��Í��Ȃ��Ƃ��A2���Ԃ̋Z�p�X�L���̌��������ɑ����������̂������҂ɗ^�����ׂ��ł��B���K�łÍA�������m���Ă��邱�Ƃ����΂₭�J�o�[���A���E�����}�[�N���邽�߂ɒm���Ȃ����̂��炷�΂₭�����߂����Ƃ��ł��܂��B�Êڎ҂͂����ð‘¸d�����ł��傤�B���ÍA�C���^�r���[�ÅA�����̎��͊��Ƃ��I�ԓ��@��1�‚ł����Æï¿½ï¿½ñ•·‚������Ƃ������܂��B�P�ǂÈl�����ÍA�ނ炪�Ō��ɓ������êŠï¿½ï¿½ï¿½Þ‚炪�s�����w�Z�A�܂��͑��̕s�Œ��ȓ����ł͂Ȃ��A�ނ��̃X�L���̂��߂Ɍق��ꂽ���Ǝv���Ă��܂��B +‚ ‚È‚½‚Í­‚È‚­‚Æ‚àA2ŽžŠÔ‚Ì‹ZpƒXƒLƒ‹‚ÌŒû“ªŽŽŒ±‚ɑГ–‚·‚é‚à‚Ì‚ðŒó•âŽÒ‚É—^‚¦‚é‚ׂ«‚Å‚·B—ûK‚Å‚ÍAŽ©•ª‚ª’m‚Á‚Ä‚¢‚邱‚Æ‚ð‚·‚Î‚â‚­ƒJƒo[‚µA‹«ŠEü‚ðƒ}[ƒN‚·‚邽‚߂ɒm‚ç‚È‚¢‚à‚Ì‚©‚ç‚·‚Î‚â‚­Žæ‚è–ß‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B–ÊÚŽÒ‚Í‚±‚ê‚ð‘¸d‚·‚é‚Å‚µ‚傤BŽ„‚ÍAƒCƒ“ƒ^ƒrƒ…[‚ÅAŽŽŒ±‚ÌŽ¿‚ÍŠé‹Æ‚ð‘I‚Ô“®‹@‚Ì1‚‚ł ‚邯”‰ñ•·‚¢‚½‚±‚Æ‚ª‚ ‚è‚Ü‚·B‘P—Ç‚Èl‚½‚¿‚ÍA”ނ炪Ōã‚É“­‚¢‚½êŠ‚â”ނ炪s‚Á‚½ŠwZA‚Ü‚½‚Í‘¼‚Ì•s‰ÂŒ‡‚È“Á’¥‚ł͂Ȃ­A”Þ‚ç‚̃XƒLƒ‹‚Ì‚½‚߂Ɍقí‚ꂽ‚¢‚ÆŽv‚Á‚Ä‚¢‚Ü‚·B -�������s���ɂ������ĂÍA�������m���Ă����������͂邩�Éd�v�ÈA�w�K�����\�͂��]�������K�v�������܂��B�܂��A�����Èl�����ɂ����ĕ����ꂽ�L�Q�����̗~�����������K�v�������܂��B���Ȃ��̓C���^�r���[�̌��Ńm�[�g�����r���邱�Ƃɂ����Ă������F�����邱�Ƃ��ł��邩�������܂��ñ‚ªA�C���^�r���[�̔M�ł������F�����邱�ƂÍ����ł��B�ÅV�̃v���O���~���O�������������������A�l�X���R�~���j�P�[�V���������Äl�X�Ƃǂ̂��炢���܂������Ă��������d�v�ł��B +‚±‚ê‚ðs‚¤‚É‚ ‚½‚Á‚Ä‚ÍAŽ©•ª‚ª’m‚Á‚Ä‚¢‚邿‚è‚à‚͂邩‚Éd—v‚ÈAŠwK‚·‚é”\—Í‚à•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚Ü‚½A¢“ï‚Èl‚½‚¿‚É‚æ‚Á‚Ä•¥‚í‚ꂽ—LŠQ•¨Ž¿‚Ì—~‹‚ðŠÄŽ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚̓Cƒ“ƒ^ƒrƒ…[‚ÌŒã‚Ńm[ƒg‚ð”äŠr‚·‚邱‚Ƃɂæ‚Á‚Ä‚»‚ê‚ð”Fޝ‚·‚邱‚Æ‚ª‚Å‚«‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒCƒ“ƒ^ƒrƒ…[‚Ì”M‚Å‚»‚ê‚ð”Fޝ‚·‚邱‚Ƃ͢“ï‚Å‚·BÅV‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðã‰ñ‚邿‚è‚àAlX‚ªƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚µ‚ÄlX‚Ƃǂ̂­‚ç‚¢‚¤‚Ü‚­‚â‚Á‚Ä‚¢‚­‚©‚ªd—v‚Å‚·B -�ǎ҂̓C���^�r���[�Îێ҂̂��߂Ƀe�C�N�E�z�[���E�e�X�g���g���ÄK�^���F���Ă��܂��B�����ÍA�������g�����܂��ñަ‚��邱�Ƃ��ł��܂����A���ۂɂ̓R�[�h�����邱�Ƃ��ł��Ȃ��C���^�r���C�[�𖾂炩�ɂ��邱�Ƃ��ł����Ƃ������_�������܂��B���͌Âl�I�ɂ͂��̃e�N�j�b�N�������Ă��܂��ñ‚ªA�����͌����Ȃ悤�ł��B +“ǎ҂̓Cƒ“ƒ^ƒrƒ…[‘ÎÛŽÒ‚Ì‚½‚߂ɃeƒCƒNEƒz[ƒ€EƒeƒXƒg‚ðŽg‚Á‚ÄK‰^‚ð‹F‚Á‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍAŽ©•ªŽ©g‚ð‚¤‚Ü‚­’ñަ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAŽÀۂɂ̓R[ƒh‰»‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢ƒCƒ“ƒ^ƒrƒ…ƒC[‚𖾂炩‚É‚·‚邱‚Æ‚ª‚Å‚«‚邯‚¢‚¤—˜“_‚ª‚ ‚è‚Ü‚·BŽ„‚ÍŒÂl“I‚ɂ͂±‚̃eƒNƒjƒbƒN‚ðŽŽ‚µ‚Ä‚¢‚Ü‚¹‚ñ‚ªA‚»‚ê‚ÍŒ«–¾‚Ȃ悤‚Å‚·B -���ÉA�C���^�r���[�͔̔��̃v���Z�X�ł������܂��B�����҂ɂ��Ȃ��̉��Ђ��v���W�F�N�g�𔄂��Ă����͂��ł��B�������A���Ȃ��̓v���O���}�Ƙb���Ă����̂ÅA�^�����F�Â����悤�Ƃ��Ȃ��ł��������B�������̂����n�߂ÄA���ɗǂ����̂ŋ����d�グ�Ă��������B +ÅŒã‚ÉAƒCƒ“ƒ^ƒrƒ…[‚͔̔„‚̃vƒƒZƒX‚Å‚à‚ ‚è‚Ü‚·BŒó•âŽÒ‚É‚ ‚È‚½‚̉ïŽÐ‚âƒvƒƒWƒFƒNƒg‚𔄂Á‚Ä‚¢‚é‚Í‚¸‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚̓vƒƒOƒ‰ƒ}‚Ƙb‚µ‚Ä‚¢‚é‚Ì‚ÅA^ŽÀ‚ðF‚¯‚µ‚悤‚Æ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢Bˆ«‚¢‚à‚Ì‚©‚çŽn‚ß‚ÄAŽŸ‚É—Ç‚¢‚à‚̂ŋ­‚­Ždã‚°‚Ä‚­‚¾‚³‚¢B Next [How to Know When to Apply Fancy Computer Science](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md index 366e482..a2d6378 100644 --- a/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md +++ b/jp/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -1,15 +1,15 @@ # How to Know When to Apply Fancy Computer Science [//]: # (Version:1.0.0) -�A���S���Y���A�f�[�^�\���A���w�A���̑��̂قƂ��ǂ̃v���O���}���m���Ă��邱�Ƃ͂قƂ��ǂ����܂��ñ‚ªA���܂��g�����Ă��Ȃ����Ƃɂ‚��Ă̒m���������܂��B���ۂɂÍA���̑f���炵�����̂͂��܂��ɂ����G�ň��ʓI�ɂ͕s�v�ł��B�قƂ��ǂ̎��Ԃ��������I�ȃf�[�^�x�[�X�ĂÑo�����s���̂ɔ��₳�ꂽ�Ƃ��ɂÍA�A���S���Y���̉��P�ɂ͉��̈Ӗ��������܂����B�v���O���~���O�̕s�K�ȗʂÍA�V�X�e�������݂��ɘb���������A�����ɒP���ȃf�[�^�\�����g���Ă��΂炵�����[�U�[�C���^�[�t�F�C�X���\�z���邱�Ƃ��ç¬ï¿½ï¿½ï¿½Ü‚��B +ƒAƒ‹ƒSƒŠƒYƒ€Aƒf[ƒ^\‘¢A”ŠwA‚»‚Ì‘¼‚̂قƂñ‚ǂ̃vƒƒOƒ‰ƒ}‚ª’m‚Á‚Ä‚¢‚邱‚Ƃ͂قƂñ‚Ç‚ ‚è‚Ü‚¹‚ñ‚ªA‚ ‚Ü‚èŽg‚í‚ê‚Ä‚¢‚È‚¢‚±‚Ƃɂ‚¢‚Ă̒mޝ‚ª‚ ‚è‚Ü‚·BŽÀÛ‚É‚ÍA‚±‚Ì‘f°‚炵‚¢‚à‚̂͂ ‚Ü‚è‚É‚à•¡ŽG‚ňê”Ê“I‚ɂ͕s—v‚Å‚·B‚Ù‚Æ‚ñ‚ǂ̎žŠÔ‚ª”ñŒø—¦“I‚ȃf[ƒ^ƒx[ƒXŒÄ‚Ño‚µ‚ðs‚¤‚̂ɔï‚₳‚ꂽ‚Æ‚«‚É‚ÍAƒAƒ‹ƒSƒŠƒYƒ€‚̉ü‘P‚ɂ͉½‚̈Ӗ¡‚à‚ ‚è‚Ü‚¹‚ñBƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì•sK‚È—Ê‚ÍAƒVƒXƒeƒ€‚ª‚¨ŒÝ‚¢‚ɘb‚ð‚µ‚½‚èA”ñí‚É’Pƒ‚ȃf[ƒ^\‘¢‚ðŽg‚Á‚Ä‚·‚΂炵‚¢ƒ†[ƒU[ƒCƒ“ƒ^[ƒtƒFƒCƒX‚ð\’z‚·‚邱‚Æ‚©‚笂è‚Ü‚·B -���x�ȋZ�p�͂��“K�؂ȋZ�p�ł����H���Ȃ��ÍA�{���̃A���S���Y���ȊO�̉����𓾂邽�߂ɂ��–{�����ǂ��ׂ��ł����H�������s���̂��֗��Ȃ��Ƃ������܂����A�T�d�ɕ]�������K�v�������܂��B +‚“x‚È‹Zp‚Í‚¢‚“K؂ȋZp‚Å‚·‚©H‚ ‚È‚½‚ÍA–{•¨‚̃Aƒ‹ƒSƒŠƒYƒ€ˆÈŠO‚̉½‚©‚𓾂邽‚߂ɂ¢‚–{‚ð‰ð“Ç‚·‚ׂ«‚Å‚·‚©H‚±‚ê‚ðs‚¤‚Ì‚ª•Ö—˜‚È‚±‚Æ‚à‚ ‚è‚Ü‚·‚ªATd‚É•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -���ݓI�ȃR���s���[�^�T�C�G���X�Z�p��3�‚Ìł��d�v�Èl�������͎��̂Ƃ����ł��B +öÝ“I‚ȃRƒ“ƒsƒ…[ƒ^ƒTƒCƒGƒ“ƒX‹Zp‚Ì3‚‚ÌÅ‚àd—v‚Èl—¶Ž–€‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·B -- ���̃V�X�e���ɑ΂��郊�X�N���Ⴍ�A���G���ƕێ��R�X�g�̑S�̓I�ȑ��������Ȃ��悤�ÉA�\���ɃJ�v�Z���������Ă��܂����H -- ���v�͋��ٓI�ł��i�Ⴆ�ÎA���n�����V�X�e���ł�2�{�A�V�����V�X�e���ł�10�{�j�B -- ���������ʓI�Ƀe�X�g���]�����邱�Ƃ��ł��܂����H +- ‘¼‚̃VƒXƒeƒ€‚ɑ΂·‚郊ƒXƒN‚ª’á‚­A•¡ŽG‚³‚ƕێçƒRƒXƒg‚Ì‘S‘Ì“I‚È‘‰Á‚ª­‚È‚¢‚悤‚ÉA\•ª‚ɃJƒvƒZƒ‹‰»‚³‚ê‚Ä‚¢‚Ü‚·‚©H +- —˜‰v‚Í‹ÁˆÙ“I‚Å‚·i—Ⴆ‚ÎA¬n‚µ‚½ƒVƒXƒeƒ€‚Å‚Í2”{AV‚µ‚¢ƒVƒXƒeƒ€‚Å‚Í10”{jB +- ‚»‚ê‚ðŒø‰Ê“I‚ɃeƒXƒg‚µ•]‰¿‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H -�킸���ɕ��G�ȃA���S���Y�����g�p�����Ǘ������A���S���Y���łÍA�V�X�e���S�̂Ńn�[�h�E�F�A�̃R�X�g���팸�������A�p�t�H�[�}���X��2�{�É��߂邱�Ƃ��ł����ÎA�ÆßŽÒ‚͂������l�����Ȃ����ƂɂȂ��܂��B���̂悤�ȃA�v���[�`���咣���錮��1�‚ÍA���Ă��ꂽ�Z�p�������炭�\���Ɍ��������Ă����̂ÅA���X�N�����ۂɂ͂��Ȃ��Ⴂ���Ƃ��������Ƃł��B�B���̖����͓����̃��X�N�ł��B�����Ńv���O���}�̌o���Ɣ��f�ÍA�������e�Ղɂ��邽�߂̔h���ȋZ�p�Ƒ������ʂ������܂��B +‚킸‚©‚É•¡ŽG‚ȃAƒ‹ƒSƒŠƒYƒ€‚ðŽg—p‚·‚éŒÇ—§‚µ‚½ƒAƒ‹ƒSƒŠƒYƒ€‚Å‚ÍAƒVƒXƒeƒ€‘S‘̂Ńn[ƒhƒEƒFƒA‚̃RƒXƒg‚ð팸‚µ‚½‚èAƒpƒtƒH[ƒ}ƒ“ƒX‚ð2”{‚É‚‚߂邱‚Æ‚ª‚Å‚«‚ê‚ÎA”ÆßŽÒ‚Í‚»‚ê‚ðl—¶‚µ‚È‚¢‚±‚ƂɂȂè‚Ü‚·B‚»‚̂悤‚ȃAƒvƒ[ƒ`‚ðŽå’£‚·‚錮‚Ì1‚‚ÍA’ñˆÄ‚³‚ꂽ‹Zp‚ª‚¨‚»‚ç‚­\•ª‚ÉŒ¤‹†‚³‚ê‚Ä‚¢‚é‚Ì‚ÅAƒŠƒXƒN‚ªŽÀۂɂ͂©‚È‚è’á‚¢‚±‚Æ‚ðŽ¦‚·‚±‚Ƃł·B—Bˆê‚Ì–â‘è‚Í“‡‚ÌƒŠƒXƒN‚Å‚·B‚±‚±‚ŃvƒƒOƒ‰ƒ}‚ÌŒoŒ±‚Æ”»’f‚ÍA“‡‚ð—eˆÕ‚É‚·‚邽‚߂̔hŽè‚È‹Zp‚Æ‘ŠæŒø‰Ê‚ª‚ ‚è‚Ü‚·B Next [How to Talk to Non-Engineers](08-How-to-Talk-to-Non-Engineers.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md index 9c9ed4b..54921d7 100644 --- a/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md +++ b/jp/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -1,19 +1,19 @@ # How to Talk to Non-Engineers [//]: # (Version:1.0.0) -���ɃG���W�j�A��v���O���}�[�ÍA��ʓI�ȕ����ɂ���ÄA���Ìl�X�Ƃ͈قȂ�ƈ�ʂɔF�߂��Ă��܂��B����ÍA���Ìl�X���������ƈقȂ邱�Ƃ�Ӗ����܂��B����ÍA�G���W�j�A�ȊO�Ìl�ƃR�~���j�P�[�V������Ƃ�Ƃ��ɂ͗��ӂ��鉿�l������܂��B���Ȃ��Í�Ɋϋq�ð—‰ï¿½ï¿½ï¿½ï¿½K�v������܂��B +“Á‚ɃGƒ“ƒWƒjƒA‚âƒvƒƒOƒ‰ƒ}[‚ÍAˆê”Ê“I‚È•¶‰»‚É‚æ‚Á‚ÄA‘¼‚ÌlX‚Æ‚ÍˆÙ‚È‚é‚Æˆê”ʂɔF‚ß‚ç‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍA‘¼‚ÌlX‚ªŽ„‚½‚¿‚ƈقȂ邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B‚±‚ê‚ÍAƒGƒ“ƒWƒjƒAˆÈŠO‚Ìl‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚Æ‚é‚Æ‚«‚ɂ͗¯ˆÓ‚·‚鉿’l‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚Íí‚ÉŠÏ‹q‚ð—‰ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�m���G���W�j�A�̓X�}�[�g�ł����A�������̂悤�ɋZ�p�I�Ȃ��Ƃ�ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚É���������̂ł͂���܂���B�������͕�������B�ނ�͕����𔄂�A����������A�����ð”‚�����Ǘ������肵�܂����A����������Ƃł͂���܂���B�G���W�j�A�̂悤�Ƀ`�[���ňê�Ɏd�������̂͂��܂�ǂ�����܂���i��O�͂���܂���j�B�ނ�̃\�[�V�����X�L���͈�ʂÉA�`�[���ȊO�̊‹��̃G���W�j�A�Ɠ���������È�ł����A�e���ÈA���m�ȃR�~���j�P�[�V�����̎�ނƎ��������s���d���ÌT�d�Èו����B +ƒmƒ“ƒGƒ“ƒWƒjƒA‚̓Xƒ}[ƒg‚Å‚·‚ªAŽ„‚½‚¿‚̂悤‚É‹Zp“I‚È‚±‚Æ‚ð쬂·‚邱‚Ƃɪ‚´‚µ‚½‚à‚̂ł͂ ‚è‚Ü‚¹‚ñBŽ„‚½‚¿‚Í•¨Ž–‚ðì‚éB”Þ‚ç‚Í•¨Ž–‚𔄂èA•¨Ž–‚ðˆµ‚¢A•¨Ž–‚𔂦‚½‚èŠÇ—‚µ‚½‚肵‚Ü‚·‚ªA•¨Ž–‚ðì‚éê–副‚ł͂ ‚è‚Ü‚¹‚ñBƒGƒ“ƒWƒjƒA‚̂悤‚Ƀ`[ƒ€‚ňê‚ÉŽdŽ–‚ð‚·‚é‚̂͂ ‚Ü‚è—Ç‚­‚ ‚è‚Ü‚¹‚ñi—áŠO‚Í‚ ‚è‚Ü‚¹‚ñjB”Þ‚ç‚̃\[ƒVƒƒƒ‹ƒXƒLƒ‹‚͈ê”Ê‚ÉAƒ`[ƒ€ˆÈŠO‚̊‹«‚̃Gƒ“ƒWƒjƒA‚Æ“¯‚¶‚©‚»‚êˆÈã‚Å‚·‚ªAe–§‚ÈA³Šm‚ȃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽí—Þ‚ÆŽ„‚½‚¿‚ªs‚¤ŽdŽ–‚ÌTd‚Èוª‰»B -�G���W�j�A�ȊO�Ìl�͂��܂�ɂ���ł��邩�����܂��ñ‚µA���Ȃ��ɋ�������邩�����܂���B�������Ɠ����悤�ÉA�ނ�͖{���ɂ��Ȃ����΂��邱�Ƃ�Ӗ������̂ł�A���Ȃ��̂��Ƃ�����|�����Ă���̂ł͂Ȃ��A���t�̔w��ɗ��‚��Ƃ����܂���B +ƒGƒ“ƒWƒjƒAˆÈŠO‚Ìl‚Í‚ ‚Ü‚è‚É‚àŠì‚ñ‚Å‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚µA‚ ‚È‚½‚É‹º‚©‚³‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBŽ„‚½‚¿‚Æ“¯‚¶‚悤‚ÉA”Þ‚ç‚Í–{“–‚É‚ ‚È‚½‚ðŠì‚΂¹‚邱‚Æ‚ðˆÓ–¡‚·‚é‚à‚̂łàA‚ ‚È‚½‚Ì‚±‚Ƃ𭂵•|‚ª‚Á‚Ä‚¢‚é‚̂ł͂Ȃ­AŒ¾—t‚Ì”wŒã‚É—§‚‚±‚Æ‚à‚ ‚è‚Ü‚¹‚ñB -�v���O���}�[�ȊO�Ìl�͋Z�p�I�Ȃ��Ƃð—‰ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��܂����A�Z�p�I�Ȕ��f�ł����������ɂƂ��Ă���������Ƃ͂���܂���B�ނ�̓e�N�m���W�[�̎d�g�݂ð—‰ï¿½ï¿½ï¿½Ä‚��܂����A�Ȃ�����̃A�v���[�`��3����������̂��A�������1�‚�3��������̂�����ł��܂���B �i���ǂ̂Ƃ���A�v���O���}�[�͂��̎�̌��ς��ɂ���ٓI�Ȃ��Ƃ�����܂��B�j����ÍA�����Ƒ�����ʂ𔭊������D�̋@��ł��B +ƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚Í‹Zp“I‚È‚±‚Æ‚ð—‰ð‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA‹Zp“I‚È”»’f‚Å‚³‚¦Ž„‚½‚¿‚ɂƂÁ‚Ä‚³‚¦“‚¢‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB”Þ‚ç‚̓eƒNƒmƒƒW[‚ÌŽd‘g‚Ý‚ð—‰ð‚µ‚Ä‚¢‚Ü‚·‚ªA‚È‚º“Á’è‚̃Aƒvƒ[ƒ`‚ª3ƒ–ŒŽ‚©‚©‚é‚Ì‚©A‚»‚µ‚Ä‚à‚¤1‚‚Í3“ú‚©‚©‚é‚Ì‚©—‰ð‚Å‚«‚Ü‚¹‚ñB iŒ‹‹Ç‚̂Ƃ±‚ëAƒvƒƒOƒ‰ƒ}[‚Í‚±‚ÌŽí‚ÌŒ©Ï‚à‚è‚É‚à‹ÁˆÙ“I‚È‚±‚Æ‚ª‚ ‚è‚Ü‚·Bj‚±‚ê‚ÍA‚»‚ê‚ç‚Æ‘ŠæŒø‰Ê‚ð”­Šö‚·‚éâD‚Ì‹@‰ï‚Å‚·B -���Ȃ��̃`�[���Ƙb�����Ƃ��ɂÍA�v�l�����ÉA��ʓI�ȋZ�p����ɂ��Ȃ��Ì��i�Ɋւ��鑽���̌o������L���邽�ßA�Z�k���ꂽ���t��g�p���Č��ʓI�ł��B���̑��L��A���ɂ��Ȃ����g�̃`�[���̃����o�[������Ƃ��ÉA���̌o������L���Ă��Ȃ��l�ɂ͎g�p���Ȃ��悤�ɂ���ɂÍA�����̓w�͂��K�v�ł��B���̃{�L���u�����[�ÍA���Ȃ��Ƃ������L���Ȃ��l�Ƃ̊Ԃɕǂ���A����Ɉ������ƂÉA�����̎��Ԃ𖳑ʂɂ��܂��B +‚ ‚È‚½‚̃`[ƒ€‚Ƙb‚ð‚·‚é‚Æ‚«‚É‚ÍAŽvl‚¹‚¸‚ÉAˆê”Ê“I‚È‹Zp‚â“Á‚É‚ ‚È‚½‚Ì»•i‚ÉŠÖ‚·‚鑽‚­‚ÌŒoŒ±‚ð‹¤—L‚·‚邽‚ßA’Zk‚³‚ꂽŒ¾—t‚ðŽg—p‚µ‚ÄŒø‰Ê“I‚Å‚·B‚±‚Ì‘¬‹L‚ðA“Á‚É‚ ‚È‚½Ž©g‚̃`[ƒ€‚̃ƒ“ƒo[‚ª‚¢‚邯‚«‚ÉA‚»‚ÌŒoŒ±‚ð‹¤—L‚µ‚Ä‚¢‚È‚¢l‚ɂ͎g—p‚µ‚È‚¢‚悤‚É‚·‚é‚É‚ÍA‘½­‚Ì“w—Í‚ª•K—v‚Å‚·B‚±‚̃{ƒLƒƒƒuƒ‰ƒŠ[‚ÍA‚ ‚È‚½‚Æ‚»‚ê‚ð‹¤—L‚µ‚È‚¢l‚Ƃ̊Ԃɕǂðì‚èA‚³‚ç‚Ɉ«‚¢‚±‚Æ‚ÉAŽ©•ª‚ÌŽžŠÔ‚𖳑ʂɂµ‚Ü‚·B -�`�[���łÍA��{�I�ȑO��ƖڕW��p�ɂÉÄ‹L�q����K�v�͂Ȃ��A�قƂ�ǂ̉�b�ÍÚׂÉÅ“_�𓖂ĂĂ��܂��B���O�҂Ìê‡ï¿½A����͋t�ɂȂ�܂��B�ނ�͂��Ȃ������R�̂��Ƃð—‰ï¿½ï¿½ï¿½Ä‚��Ȃ��������܂���B���Ȃ��͂����𓖑R�󂯎��A������J��Ԃ��Ȃ��̂ÅA�{���ɑ傫�Ȍ�������Ƃ��ɂ��݂��ð—‰ï¿½ï¿½ï¿½ï¿½Æ‚����O���҂Ìl��������ÄA��b��c�����Ƃ��ł��܂��B���Ȃ��ÍA���̌�����R�~���j�P�[�V��������‚��邽�߂ÉA�R�~���j�P�[�V���������ÄT�d�Ɍ��Ă���Ƒz�肵�Ă��������B���Ȃ���������Ă��邱�Ƃ�m�F���邽�߂ɂ��Ȃ��������Ă��邱�Ƃ�v�ñ‚µ‚��茾���������肷��悤�ɂ��Ă��������B�p�ɂɉ�@�����ê‡ï¿½ÍA���ʓI�ɃR�~���j�P�[�V���������Ă��邩�ǂ�����q�˂鎞�Ԃ������₵�Ă��������B�R�~���j�P�[�V�����ɖ�肪����ê‡ï¿½ÍA�����̊��s��ς��Ă���A�����ɕs�����点�Ă��������B +ƒ`[ƒ€‚Å‚ÍAŠî–{“I‚È‘O’ñ‚Æ–Ú•W‚ð•p”É‚ÉÄ‹Lq‚·‚é•K—v‚͂Ȃ­A‚Ù‚Æ‚ñ‚ǂ̉ï˜b‚ÍÚׂÉÅ“_‚𓖂ĂĂ¢‚Ü‚·B•”ŠOŽÒ‚Ìê‡A‚»‚ê‚Í‹t‚ɂȂè‚Ü‚·B”Þ‚ç‚Í‚ ‚È‚½‚ª“–‘R‚Ì‚±‚Æ‚ð—‰ð‚µ‚Ä‚¢‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ç‚ð“–‘RŽó‚¯Žæ‚èA‚»‚ê‚ç‚ðŒJ‚è•Ô‚³‚È‚¢‚Ì‚ÅA–{“–‚ɑ傫‚ÈŒë‰ð‚ª‚ ‚邯‚«‚É‚¨ŒÝ‚¢‚ð—‰ð‚·‚邯‚¢‚¤ŠO•”ŽÒ‚Ìl‚¦‚ðŽ‚Á‚ÄA‰ï˜b‚ðŽc‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚È‚½‚ÍA‚±‚ÌŒë‚Á‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŒ©‚Â‚¯‚邽‚ß‚ÉAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŒë‚Á‚ÄTd‚ÉŒ©‚Ä‚¢‚邯‘z’肵‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚ª—‰ð‚µ‚Ä‚¢‚邱‚Æ‚ðŠm”F‚·‚邽‚߂ɂ ‚È‚½‚ªŒ¾‚Á‚Ä‚¢‚邱‚Æ‚ð—v–ñ‚µ‚½‚茾‚¢Š·‚¦‚½‚è‚·‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B•p”ɂɉ‹@‰ï‚ª‚ ‚éꇂÍAŒø‰Ê“I‚ɃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŽæ‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðq‚˂鎞ŠÔ‚ð­‚µ”ï‚₵‚Ä‚­‚¾‚³‚¢BƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚É–â‘肪‚ ‚éꇂÍAŽ©•ª‚ÌŠµs‚ð•Ï‚¦‚Ä‚©‚çAŽ©•ª‚É•s–ž‚ð•å‚点‚Ä‚­‚¾‚³‚¢B -���͔�G���W�j�A�Ƃ̎d������D���ł��B����͊w�ÑA������傫�ȋ@���ñ‹Ÿ‚��܂��B���Ȃ��ÍA�R�~���j�P�[�V�����̖��m���̊ϓ_����A���΂��Η������邱�Ƃ��ł��܂��B�G���W�j�A�ÍA�������ç’��������o�����ÆA��������͂����肳���邱�ÆA�����Ă��̂悤�Ȕ�Z�p�҂͎������ɂ‚��ČP����󂯂Ă��܂��B�������͋Z�p�I�Ȕ��f������A�Ê�̓r�W�l�X��̖��ð—‰ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��邽�ßA����ȒP�ɉ�����邱�Ƃ��ł��܂��B +Ž„‚Í”ñƒGƒ“ƒWƒjƒA‚Ƃ̎dŽ–‚ª‘åD‚«‚Å‚·B‚»‚ê‚ÍŠw‚ÑA‹³‚¦‚é‘å‚«‚È‹@‰ï‚ð’ñ‹Ÿ‚µ‚Ü‚·B‚ ‚È‚½‚ÍAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì–¾Šm‚³‚ÌŠÏ“_‚©‚çA‚µ‚΂µ‚Ηá‚ð‹“‚°‚邱‚Æ‚ª‚Å‚«‚Ü‚·BƒGƒ“ƒWƒjƒA‚ÍA¬—‚©‚ç’˜‚ðˆø‚«o‚·‚±‚ÆA¬—‚©‚ç‚Í‚Á‚«‚肳‚¹‚邱‚ÆA‚»‚µ‚Ä‚±‚̂悤‚È”ñ‹ZpŽÒ‚ÍŽ„‚½‚¿‚ɂ‚¢‚ÄŒP—û‚ðŽó‚¯‚Ä‚¢‚Ü‚·BŽ„‚½‚¿‚Í‹Zp“I‚È”»’f‚ð‰º‚µA’Êí‚̓rƒWƒlƒXã‚Ì–â‘è‚ð—‰ð‚·‚邱‚Æ‚ª‚Å‚«‚邽‚ßA–â‘è‚ðŠÈ’P‚É‰ðŒˆ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -���΂��΋Z�p�҈ȊO�Ìl�����ÍA���Ȃ��̋Z�p�I���f�ƊOï¿½ï¿½ï¿½Ò‚ÌŒï¿½ï¿½ï¿½ð‘Šæ‚³ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ɂ���Ă��������Ȃ��A���ǂ��S�̓I�ȉ���ô‚ª‘��݂���Ƃ��ÉA�D�������瓦��₷�����Ä��������Ƃ�������Ƃ�����]��ȒP�ɂ���\�����[�V�������Ă��邱�Ƃ�����܂��B���͌Âl�I�ɂ͋ɒ[�ȃv���O���~���O���D���ł��B�Ȃ��Ȃ�A���̔�������ɑÎ����邩��ł��B����f�����A�C�f�A�Ɍ��ѕt���邱�ƂÅA�R�X�g�Ɨ��v�Ìŗǂ̑g�Ý��킹�ł���A�C�f�A��ȒP�Ɍ��‚��邱�Ƃ��ł��܂��B +‚µ‚΂µ‚΋ZpŽÒˆÈŠO‚Ìl‚½‚¿‚ÍA‚ ‚È‚½‚Ì‹Zp“I”»’f‚ÆŠO•”ŽÒ‚ÌŒ©‰ð‚ð‘Šæ‚³‚¹‚邱‚Ƃɂæ‚Á‚Ä‚µ‚©Œ©‚¦‚È‚¢A‚æ‚è—Ç‚¢‘S‘Ì“I‚ȉðŒˆô‚ª‘¶Ý‚·‚邯‚«‚ÉA—D‚µ‚³‚©‚瓦‚ê‚â‚·‚­‚µ‚ij‚µ‚¢‚±‚Æ‚ð‚µ‚½‚¢‚Æ‚¢‚¤Šó–]‚ðŠÈ’P‚É‚·‚éƒ\ƒŠƒ…[ƒVƒ‡ƒ“‚ð’ñˆÄ‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·BŽ„‚ÍŒÂl“I‚ɂ͋ɒ[‚ȃvƒƒOƒ‰ƒ~ƒ“ƒO‚ªD‚«‚Å‚·B‚È‚º‚È‚çA‚±‚Ì”ñŒø—¦«‚ɑΈ‚·‚é‚©‚ç‚Å‚·BŒ©Ï‚à‚è‚ð‘f‘‚­ƒAƒCƒfƒA‚ÉŒ‹‚Ñ•t‚¯‚邱‚Æ‚ÅAƒRƒXƒg‚Æ—˜‰v‚Ìŗǂ̑g‚݇‚킹‚Å‚ ‚éƒAƒCƒfƒA‚ðŠÈ’P‚ÉŒ©‚‚¯‚邱‚Æ‚ª‚Å‚«‚Ü‚·B Next [Advanced skills](../../3-Advanced) diff --git a/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md index 23ade4e..310d709 100644 --- a/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md +++ b/jp/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -1,15 +1,15 @@ # How to Stay Motivated [//]: # (Version:1.0.0) -�v���O���}�[���A�������A�L�v�ÈA�܂��͋C�̗������l�H�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Æ‚����~���ɂ����Ä����ӗ~�������Ă��邱�ƂÍA�f���炵���A�����ׂ������ł��B���̗v�]�ÍA�v���O���}�[�ɂƂ��Ă����j�o�[�T���ł��Ȃ��A�v���O���}�[�ԂŔ����ɋ������ʂ��Ă��邽�ßA���̖����̃����o�[�Ƃ͕������Ă��܂��B +ƒvƒƒOƒ‰ƒ}[‚ªA”ü‚µ‚­A—L‰v‚ÈA‚Ü‚½‚Í‹C‚Ì—˜‚¢‚½lH•¨‚ð쬂µ‚½‚¢‚Æ‚¢‚¤—~‹‚É‚æ‚Á‚Ä‚‚¢ˆÓ—~‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ÍA‘f°‚炵‚¢A‹Á‚­‚ׂ«Ž–ŽÀ‚Å‚·B‚±‚Ì—v–]‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ä‚àƒ†ƒjƒo[ƒTƒ‹‚Å‚à‚È‚­AƒvƒƒOƒ‰ƒ}[ŠÔ‚Å”ñí‚É‹­‚­‹¤’Ê‚µ‚Ä‚¢‚邽‚ßA‘¼‚Ì–ðŠ„‚Ìƒƒ“ƒo[‚Ƃ͕ª‚©‚ê‚Ä‚¢‚Ü‚·B -�����ɂ͎��p�I���Âd�v�Ȍ��ʂ������܂��B�v���O���}�[���A�������Ȃ��A�L�v�ÈA�܂��͋C�̗��������̂łȂ����Ƃ������悤���߂��ꂽ�ê‡ï¿½A�ނ��͒Ⴂ�m�C�����‚ł��傤�B�X���A�����ÈA�ދ��Ȃ��̂������Ä��邽�߂ɂ��������̂����������܂��B�������A���ǂ̂Ƃ����A�y���݂͉��Ђ̂��߂Éł��������҂��ł��傤�B +‚±‚ê‚ɂ͎À—p“I‚©‚Âd—v‚ÈŒ‹‰Ê‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ªA”ü‚µ‚­‚È‚¢A—L‰v‚ÈA‚Ü‚½‚Í‹C‚Ì—˜‚¢‚½‚à‚̂łȂ¢‚±‚Æ‚ð‚·‚é‚æ‚¤‹‚ß‚ç‚ꂽê‡A”Þ‚ç‚Í’á‚¢Žm‹C‚ðŽ‚Â‚Å‚µ‚傤BX‚¢A‹ð‚©‚ÈA‘Þ‹ü‚È‚à‚Ì‚ð‚â‚Á‚Äì‚邽‚߂ɂ½‚­‚³‚ñ‚Ì‚¨‹à‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µAŒ‹‹Ç‚̂Ƃ±‚ëAŠy‚µ‚݂͉ïŽÐ‚Ì‚½‚ß‚ÉÅ‚à‚¨‹à‚ð‰Ò‚®‚Å‚µ‚傤B -���炩�ÉA�����ɂ͂����‚��̓��@���Z�p���g�Ý��܂ꂽ�ƊE�S�̂������܂��B���������ł����v���O���~���O���L�̎����͎��̂Ƃ����ł��F +–¾‚ç‚©‚ÉA‚±‚±‚ɂ͂¢‚­‚‚©‚Ì“®‹@‚¯‹Zp‚ª‘g‚Ýž‚܂ꂽ‹ÆŠE‘S‘Ì‚ª‚ ‚è‚Ü‚·BŽ„‚ª“Á’è‚Å‚«‚éƒvƒƒOƒ‰ƒ~ƒ“ƒO“Á—L‚ÌŽ–•¿‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·F -- �d���ÉÅ“K�Ȍ������g�p�����������B -- �V�����Z�p�A�����A�Z�p���K�p�����@�����T���܂��B -- ���ꂼ���̃v���W�F�N�g�ÅA���������̂ÌA�������w�ÑA�������悤�ɂ��Ă��������B +- ŽdŽ–‚ÉÅ“K‚ÈŒ¾Œê‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B +- V‚µ‚¢‹ZpAŒ¾ŒêA‹Zp‚ð“K—p‚·‚é‹@‰ï‚ð’T‚µ‚Ü‚·B +- ‚»‚ꂼ‚ê‚̃vƒƒWƒFƒNƒg‚ÅA¬‚³‚¢‚à‚Ì‚ÌA‰½‚©‚ðŠw‚ÑA‹³‚¦‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B -���ÉA�”\�ł����ÎA�����̎d���̉e�����A�Âl�I�ɓ��@�t�����������̂Ƃ��đ��肵�܂��B���Ƃ��ÎA�o�O���C�������Ƃ��A�����C�������o�O�Ì����J�E���g���邱�ƂÍA���ꂪ�܂����݂��邩�������Ȃ����Ƃ͖��֌W�ł����A���̉��Љ”\�Ȍ��è¬ï¿½ï¿½ï¿½È•��@�ł��q�l�ɒñ‹Ÿ‚��܂��B�������A���ꂼ���̃o�O���K���Ȍڋq�Ɍ��ѕt���邱�ƂÍA���̌Âl�I�ȓ��@�ł��B +ÅŒã‚ÉA‰Â”\‚Å‚ ‚ê‚ÎAŽ©•ª‚ÌŽdŽ–‚̉e‹¿‚ðAŒÂl“I‚É“®‹@•t‚¯‚ç‚ê‚é‚à‚̂Ƃµ‚Ä‘ª’肵‚Ü‚·B‚½‚Æ‚¦‚ÎAƒoƒO‚ðC³‚·‚邯‚«AŽ„‚ªC³‚µ‚½ƒoƒO‚Ì”‚ðƒJƒEƒ“ƒg‚·‚邱‚Æ‚ÍA‚»‚ꂪ‚Ü‚¾‘¶Ý‚·‚é‚©‚à‚µ‚ê‚È‚¢”‚Ƃ͖³ŠÖŒW‚Å‚ ‚èAŽ„‚̉ïŽÐ‰Â”\‚ÈŒÀ‚謂³‚È•û–@‚Å‚¨‹q—l‚É’ñ‹Ÿ‚µ‚Ü‚·B‚µ‚©‚µA‚»‚ꂼ‚ê‚̃oƒO‚ðK‚¹‚Ȍڋq‚ÉŒ‹‚Ñ•t‚¯‚邱‚Æ‚ÍAŽ„‚ÌŒÂl“I‚È“®‹@‚Å‚·B Next [How to be Widely Trusted](02-How-to-be-Widely-Trusted.md) diff --git a/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md index 50410b2..4420a02 100644 --- a/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md +++ b/jp/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -1,7 +1,7 @@ # How to be Widely Trusted [//]: # (Version:1.0.0) -���Ȃ����M�������邽�߂ɂÍA�M���ł������̂łȂ����΂Ȃ��܂����B ���Ȃ����������K�v�������܂��B �N�����Ȃ��ɂ‚��Ēm���Ă��Ȃ����ÎA���Ȃ��ɂÍM���͓��������܂����B ���Ȃ��̃`�[�����C�g�̂悤�ÈA���Ȃ��ɋ߂��l�����ÆA�����͖����ł͂����܂����B ���Ȃ��ÍA���Ȃ��̕������`�[���O�Ìl�ɕq���ŗL�v�ł��邱�Ƃɂ����ÄM�����m�����܂��B ���X�A�N�������ÌM�p�ð——p���A�s���ȉ��b�����߂邱�Ƃ������܂��B �����������Ă͂����܂����B�D�ӂð‹s���邽�߂ɂ��Ȃ������Ȃ����΂Ȃ��Ȃ����Ƃ��������Ă��������B +‚ ‚È‚½‚ªM—Š‚³‚ê‚邽‚߂ɂÍAM—Ђł«‚é‚à‚̂łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB ‚ ‚È‚½‚àŒ©‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B ’N‚à‚ ‚È‚½‚ɂ‚¢‚Ä’m‚Á‚Ä‚¢‚È‚¯‚ê‚ÎA‚ ‚È‚½‚É‚ÍM—Š‚Í“ŠŽ‘‚³‚ê‚Ü‚¹‚ñB ‚ ‚È‚½‚̃`[ƒ€ƒƒCƒg‚̂悤‚ÈA‚ ‚È‚½‚ɋ߂¢l‚½‚¿‚ÆA‚±‚ê‚Í–â‘è‚ł͂ ‚è‚Ü‚¹‚ñB ‚ ‚È‚½‚ÍA‚ ‚È‚½‚Ì•”‚âƒ`[ƒ€ŠO‚Ìl‚É•qŠ´‚Å—L‰v‚Å‚ ‚邱‚Ƃɂæ‚Á‚ÄM—Š‚ðŠm—§‚µ‚Ü‚·B ŽžXA’N‚©‚ª‚±‚ÌM—p‚ð——p‚µA•s“–‚ȉ¶Œb‚ð‹‚߂邱‚Æ‚ª‚ ‚è‚Ü‚·B ‚±‚ê‚ð‹°‚ê‚Ă͂¢‚¯‚Ü‚¹‚ñBDˆÓ‚ð‹s‚·‚邽‚߂ɂ ‚È‚½‚ª‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚±‚Æ‚ðà–¾‚µ‚Ä‚­‚¾‚³‚¢B -���Ȃ������Ȃ����Ƃ��m���Ă����ӂ������Ȃ��ł��������B �`�[�����[�g�ł͂Ȃ��l�����ɂÍA�u���̓��Ìォ���E�ɕ������Ȃ��v�Æu���������߂邱�Ƃ��ł��Ȃ��v�Ƃ̖��m�ȋ��ʂ����Ȃ����΂Ȃ��Ȃ����������܂����B +‚ ‚È‚½‚ª‚µ‚È‚¢‚±‚Æ‚ð’m‚Á‚Ä‚¢‚é‚Ó‚è‚ð‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B ƒ`[ƒ€ƒ[ƒg‚ł͂Ȃ¢l‚½‚¿‚É‚ÍAuŽ„‚Ì“ª‚Ìã‚©‚ç‰E‚É•ª‚©‚ç‚È‚¢v‚Æu‚»‚ê‚ðŒˆ‚ß‚é‚±‚Æ‚ª‚Å‚«‚È‚¢v‚Ƃ̖¾Šm‚È‹æ•Ê‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB Next [How to Tradeoff Time vs. Space](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md index 0d6a593..d9e4f4a 100644 --- a/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md +++ b/jp/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -1,15 +1,15 @@ # How to Tradeoff Time vs. Space [//]: # (Version:1.0.0) -���Ȃ��͑��w�És���Ȃ��Ă��ǂ��v���O���}�[�ɂȂ邱�Ƃ��ł��܂����A���{�I�Ȍv�Z���G�����_���m���Ȃ��Ă��A�D�ꂽ���ԃv���O���}�[�ɂȂ邱�Ƃ͂ł��܂����B���Ȃ��� 'big O'�\�L�@���m���K�v�͂����܂��ñ‚ªA���͌Âl�I�ɂÍA '���莞��'�A 'n log n'�� 'n squared'�̈Ⴂ�ð—‰ï¿½ï¿½Å‚��Ȃ����΂Ȃ��Ȃ��Ǝv���܂��B���̒m�����Ȃ��Ă��A���ԂƋ��ԂƂ̃g���[�h�I�t�̎d�����m�邱�Ƃ��ł��邩�������܂��ñ‚ªA�s�݂Ìê‡ï¿½A�����Ƃ̃R�~���j�P�[�V�����̂��߂̊m�ł������Ղ͂����܂����B +‚ ‚È‚½‚Í‘åŠw‚És‚©‚È‚­‚Ä‚à—Ç‚¢ƒvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªAŠî–{“I‚ÈŒvŽZ•¡ŽG«—˜_‚ð’m‚ç‚È‚­‚Ä‚àA—D‚ꂽ’†ŠÔƒvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚Í 'big O'•\‹L–@‚ð’m‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñ‚ªAŽ„‚ÍŒÂl“I‚É‚ÍA 'ˆê’莞ŠÔ'A 'n log n'‚Æ 'n squared'‚̈Ⴂ‚ð—‰ð‚Å‚«‚È‚¯‚ê‚΂Ȃç‚È‚¢‚ÆŽv‚¢‚Ü‚·B‚±‚Ì’mޝ‚ª‚È‚­‚Ä‚àAŽžŠÔ‚Æ‹óŠÔ‚Ƃ̃gƒŒ[ƒhƒIƒt‚ÌŽd•û‚ð’m‚邱‚Æ‚ª‚Å‚«‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA•sÝ‚Ìê‡A“¯—»‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì‚½‚߂̊mŒÅ‚½‚éŠî”Õ‚Í‚ ‚è‚Ü‚¹‚ñB -�A���S���Y���ÌÝŒv�܂��͗����ɂ������ĂÍA���s�ɗv���鎞�Ԃ͓��͂̃T�C�Y�̊Ö��ł��邱�Ƃ������܂��B���ꂪ�^�ł����Ƃ��A�A���S���Y���Ìň�/�\�z/�ŗǃP�[�X�̎��s���ԂÍA�T�C�Y�̑Î��i$ n $�j�ɔ��Ⴗ���� 'n log n'�ƌ������Ƃ��ł��܂��B�\�L�@�����є����@�ÍA�f�[�^�\���ɂ����Ä��߂��������Ԃɂ��K�p���邱�Ƃ��ł����B +ƒAƒ‹ƒSƒŠƒYƒ€‚ÌÝŒv‚Ü‚½‚Í—‰ð‚É‚ ‚½‚Á‚Ä‚ÍAŽÀs‚É—v‚·‚鎞ŠÔ‚Í“ü—͂̃TƒCƒY‚ÌŠÖ”‚Å‚ ‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ꂪ^‚Å‚ ‚邯‚«AƒAƒ‹ƒSƒŠƒYƒ€‚Ìň«/—\‘z/ŗǃP[ƒX‚ÌŽÀsŽžŠÔ‚ÍAƒTƒCƒY‚̑Δi$ n $j‚É”ä—á‚·‚邯 'n log n'‚ÆŒ¾‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B•\‹L–@‚¨‚æ‚Ñ”­º–@‚ÍAƒf[ƒ^\‘¢‚É‚æ‚Á‚Äè‚ß‚ç‚ê‚é‹óŠÔ‚É‚à“K—p‚·‚邱‚Æ‚ª‚Å‚«‚éB -���ɂƂ��ÄA�v�Z�̕��G���̗��_�͔������A�����w�قÇ[���A�����Ä����͉����És���̂ł��I +Ž„‚ɂƂÁ‚ÄAŒvŽZ‚Ì•¡ŽG‚³‚Ì—˜_‚Í”ü‚µ‚­A•¨—Šw‚Ù‚Ç[‚­A‚»‚µ‚Ä­‚µ‚͉“‚­‚És‚­‚̂ł·I -���Ôi�v���Z�b�T�[�E�T�C�N���j�ƃX�y�[�X�i�������[�j�͂��݂��Ƀg���[�h�I�t�ł��܂��B�G���W�j�A�����O�͑Ë��ł����A�����͗ǂ����ł��B�K�������̌n�I�ł͂����܂����B�������A���ʓI�ɂÍA�f�R�[�h�����K�v�������Ƃ��Ɍv�Z���Ԃ��]���ɂ��ÄA���茵���ɃG���R�[�h���邱�ƂŃX�y�[�X���ߖ��ł��܂��B�L���b�V���̈��Ñ����ێ����Ȃ����΂Ȃ��Ȃ����ßA�L���b�V�����邱�ƂŎ��Ԃ��ߖñ‚·‚邱�Ƃ��ł��܂��B�‚܂��A�����̃��[�J���R�s�[���i�[���邽�߂̃X�y�[�X�����₷���Ƃ��ł��܂��B�f�[�^�\�����ł��葽���Ì������ێ����邱�Ƃɂ����ÄA���Ԃ��ߖñ‚·‚邱�Ƃ��ł��܂��B�����͒Ê��A�킸���ȃX�y�[�X�����K�v�Ƃ��܂��ñ‚ªA�A���S���Y�������G�ɂȂ��”\���������܂��B +ŽžŠÔiƒvƒƒZƒbƒT[EƒTƒCƒNƒ‹j‚ƃXƒy[ƒXiƒƒ‚ƒŠ[j‚Í‚¨ŒÝ‚¢‚ɃgƒŒ[ƒhƒIƒt‚Å‚«‚Ü‚·BƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚͑˦‚Å‚ ‚èA‚±‚ê‚Í—Ç‚¢—á‚Å‚·B•K‚¸‚µ‚à‘ÌŒn“I‚ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAˆê”Ê“I‚É‚ÍAƒfƒR[ƒh‚·‚é•K—v‚ª‚ ‚邯‚«‚ÉŒvŽZŽžŠÔ‚ð‹]µ‚É‚µ‚ÄA‚æ‚茵–§‚ɃGƒ“ƒR[ƒh‚·‚邱‚ƂŃXƒy[ƒX‚ðß–ñ‚Å‚«‚Ü‚·BƒLƒƒƒbƒVƒ…‚̈êŠÑ«‚ðˆÛŽ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚½‚ßAƒLƒƒƒbƒVƒ…‚·‚邱‚ƂŎžŠÔ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚‚܂èA‰½‚©‚̃[ƒJƒ‹ƒRƒs[‚ðŠi”[‚·‚邽‚߂̃Xƒy[ƒX‚ð”ï‚â‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·Bƒf[ƒ^\‘¢“à‚Å‚æ‚葽‚­‚Ìî•ñ‚ð•ÛŽ‚·‚邱‚Ƃɂæ‚Á‚ÄAŽžŠÔ‚ðß–ñ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚Í’ÊíA‚킸‚©‚ȃXƒy[ƒX‚µ‚©•K—v‚Æ‚µ‚Ü‚¹‚ñ‚ªAƒAƒ‹ƒSƒŠƒYƒ€‚ª•¡ŽG‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·B -����/���Ԃ̃g���[�h�I�t�����P���邱�ƂÍA���΂��Έ����܂��͑��������I�ɕς��邱�Ƃ��ł����B�������A�����Ɏ����g�ޑO�ÉA���Ȃ������P���Ă������̂��A�{���Éł����P���K�v�Ȃ��̂Ȃ̂��A�������g�Éq�˂Ă��������B�A���S���Y���Å��Ƃ����̂͊y�����ł����A�����ł͂Ȃ����̂����P���邱�ƂŖڗ������Ⴂ�͂Ȃ��A�e�X�g�̕��S�������邱�Ƃ͂����܂����B +‹óŠÔ/ŽžŠÔ‚̃gƒŒ[ƒhƒIƒt‚ð‰ü‘P‚·‚邱‚Æ‚ÍA‚µ‚΂µ‚Έê•û‚Ü‚½‚Í‘¼•û‚ðŒ€“I‚ɕς¦‚邱‚Æ‚ª‚Å‚«‚éB‚µ‚©‚µA‚±‚ê‚ÉŽæ‚è‘g‚Þ‘O‚ÉA‚ ‚È‚½‚ª‰ü‘P‚µ‚Ä‚¢‚é‚à‚Ì‚ªA–{“–‚ÉÅ‚à‰ü‘P‚ª•K—v‚È‚à‚̂Ȃ̂©AŽ©•ªŽ©g‚Éq‚˂Ă­‚¾‚³‚¢BƒAƒ‹ƒSƒŠƒYƒ€‚Åì‹Æ‚·‚é‚̂͊y‚µ‚¢‚Å‚·‚ªA–â‘è‚ł͂Ȃ¢‚à‚Ì‚ð‰ü‘P‚·‚邱‚ƂŖڗ§‚Á‚½ˆá‚¢‚͂Ȃ­AƒeƒXƒg‚Ì•‰’S‚ð‚©‚¯‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñB -�����̃R���s���[�^�̃������ÍA�v���Z�b�T���ԂƂ͈قȂ��A�ǂÉՓ˂����܂Ŏg�p�����Ă��Ȃ����ßA�����Ɍ����܂��B���s�͉��œI�ł��B�풓���Ȃ����΂Ȃ��Ȃ����̃v���O�����ւ̉e�����A���蓖�Ă⊄�蓖�Ă��������鎞�ԂȂÇA���������g�p���邽�߂̉B���ꂽ�R�X�g�������܂��B�X�s�[�h���グ�邽�߂ɃX�y�[�X�����èœï¿½ï¿½ï¿½O�ÉA�������T�d�Ɍ������Ă��������B +Œ»‘ã‚̃Rƒ“ƒsƒ…[ƒ^‚̃ƒ‚ƒŠ‚ÍAƒvƒƒZƒbƒTŽžŠÔ‚Ƃ͈قȂèA•Ç‚ÉÕ“Ë‚·‚é‚܂Ŏg—p‚³‚ê‚Ä‚¢‚È‚¢‚½‚ßAˆÀ‰¿‚ÉŒ©‚¦‚Ü‚·Bޏ”s‚͉ó–Å“I‚Å‚·Bí’“‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‘¼‚̃vƒƒOƒ‰ƒ€‚ւ̉e‹¿‚âAŠ„‚è“–‚Ă⊄‚è“–‚Ä‚ð‰ðœ‚·‚鎞ŠÔ‚È‚ÇAƒƒ‚ƒŠ‚ðŽg—p‚·‚邽‚߂̉B‚³‚ꂽƒRƒXƒg‚à‚ ‚è‚Ü‚·BƒXƒs[ƒh‚ðã‚°‚邽‚߂ɃXƒy[ƒX‚ðŽæ‚èœ‚­‘O‚ÉA‚±‚ê‚ðTd‚ÉŒŸ“¢‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Stress Test](04-How-to-Stress-Test.md) diff --git a/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md index c206a69..561314a 100644 --- a/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md +++ b/jp/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -1,14 +1,14 @@ # How to Stress Test [//]: # (Version:1.0.0) -�X�g���X�e�X�g�͊y�����ł��B�Å��ÍA�X�g���X�e�X�g�̖ړI�ÍA�V�X�e�������ׂ̉��œ��삷�邩�ǂ����𒲂ׂ邱�Ƃł��B���ۂɂÍA�V�X�e�������ׂ̉��œ��삷���͈̂��ʓI�ł����A���ׂ��\���Éd���ê‡ï¿½Í‰ï¿½ï¿½ç‚©ï¿½Ì•��@�œ��삵�܂����B���͂�������*�܂���*�{���L���O* [1] �ɓ��ĂĂ��܂��B�����‚��̗��O�����邩�������܂��ñ‚ªA�قƂ��Ç��Éu�Çv�������܂��B�X�g���X�e�X�g�̖ړI�ÍA�ǂ��ǂ��ɂ��邩���c�����A�ǂ������ɉ����������@�ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ł��B +ƒXƒgƒŒƒXƒeƒXƒg‚ÍŠy‚µ‚¢‚Å‚·Bʼn‚ÍAƒXƒgƒŒƒXƒeƒXƒg‚Ì–Ú“I‚ÍAƒVƒXƒeƒ€‚ª•‰‰×‚̉º‚Å“®ì‚·‚é‚©‚Ç‚¤‚©‚𒲂ׂ邱‚Ƃł·BŽÀÛ‚É‚ÍAƒVƒXƒeƒ€‚ª•‰‰×‚̉º‚Å“®ì‚·‚é‚͈̂ê”Ê“I‚Å‚·‚ªA•‰‰×‚ª\•ª‚Éd‚¢ê‡‚͉½‚ç‚©‚Ì•û–@‚Å“®ì‚µ‚Ü‚¹‚ñBŽ„‚Í‚±‚ê‚ð•Ç*‚Ü‚½‚Í*ƒ{ƒ“ƒLƒ“ƒO* [1] ‚É“–‚ĂĂ¢‚Ü‚·B‚¢‚­‚‚©‚Ì—áŠO‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚Ù‚Æ‚ñ‚Çí‚Éu•Çv‚ª‚ ‚è‚Ü‚·BƒXƒgƒŒƒXƒeƒXƒg‚Ì–Ú“I‚ÍA•Ç‚ª‚Ç‚±‚É‚ ‚é‚©‚ð”cˆ¬‚µA•Ç‚ð‚³‚ç‚ɉ“‚´‚¯‚é•û–@‚ð—‰ð‚·‚邱‚Ƃł·B -�X�g���X�e�X�g�̌v���ÍA���҂����邱�Ƃð³Šm�ɖ��m�ɂ����̂ɖ𗧂‚��Ƃ������̂ÅA�v���W�F�N�g�̑��������ɊJ�������K�v�������܂��B Web�y�[�W�v�����ߎS�Ȏ��s�����������̂�2�b�ł����H 500�l�̓������[�U�[���\���ł����H�����͂��������A�ˑ����Ă��܂����A�v���ɓ������V�X�e�����݌v�����Ƃ��͓������m���K�v�������܂��B�X�g���X�e�X�g�ÍA���p�����\���ɔ����ł����悤�Ƀ��f���������K�v�������܂��B 500�l�̕s�����ŗ\���s�\�Èl�Ԃ��V�X�e�����g���ē����ɊȒP�ɃV�~�����[�g���邱�Ƃ͎��ۂɂ͉”\�ł͂����܂��ñ‚ªA���Ȃ��Ƃ�500�̃V�~�����[�V�������ì¬ï¿½ï¿½ï¿½A�����炪�s���”\���̂��镔�������f�����O���悤�Ƃ��܂��B +ƒXƒgƒŒƒXƒeƒXƒg‚ÌŒv‰æ‚ÍAŠú‘Ò‚³‚ê‚邱‚Æ‚ð³Šm‚É–¾Šm‚É‚·‚é‚̂ɖ𗧂‚±‚Æ‚ª‘½‚¢‚Ì‚ÅAƒvƒƒWƒFƒNƒg‚Ì‘‚¢ŽžŠú‚ÉŠJ”­‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B Webƒy[ƒW—v‹‚ª”ߎS‚ÈŽ¸”s‚©¬Œ÷‚µ‚½‚Ì‚Í2•b‚Å‚·‚©H 500l‚Ì“¯Žžƒ†[ƒU[‚ª\•ª‚Å‚·‚©H‚»‚ê‚Í‚à‚¿‚ë‚ñAˆË‘¶‚µ‚Ä‚¢‚Ü‚·‚ªA—v‹‚É“š‚¦‚éƒVƒXƒeƒ€‚ðÝŒv‚·‚邯‚«‚Í“š‚¦‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·BƒXƒgƒŒƒXƒeƒXƒg‚ÍAŽÀ—p«‚ð\•ª‚É”­Šö‚Å‚«‚邿‚¤‚Ƀ‚ƒfƒ‹‰»‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B 500l‚Ì•sˆÀ’è‚Å—\‘ª•s”\‚ÈlŠÔ‚ðƒVƒXƒeƒ€‚ðŽg‚Á‚Ä“¯Žž‚ÉŠÈ’P‚ɃVƒ~ƒ…ƒŒ[ƒg‚·‚邱‚Ƃ͎Àۂɂ͉”\‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA­‚È‚­‚Æ‚à500‚̃Vƒ~ƒ…ƒŒ[ƒVƒ‡ƒ“‚ð쬂µA‚»‚ê‚炪s‚¤‰Â”\«‚Ì‚ ‚é•”•ª‚ðƒ‚ƒfƒŠƒ“ƒO‚µ‚悤‚Æ‚µ‚Ü‚·B -�X�g���X�e�X�g�łÍA�y���ׂŎn�����A�ǂɓ������܂ÅA���͑��x�����̓T�C�Y�ȂǂÌ��@�ɉ����ăV�X�e�������[�h���܂��B�������A�v���Z�b�T�AI / O�A�l�b�g���[�N�шæ•�A�܂��̓f�[�^�̋����ÍA�ǂ����Ȃ��̃j�[�Y�𖞂����ɂ͋߂������ê‡ï¿½ÍA�{�g���l�b�N�ƂȂ郊�\�[�X�i�Ê��͎x�z�I�Ȃ��Ìj���c�������������B���ÉA�ǂ𓮂������@�����‚��܂��B�E�H�[���𓮂����A�‚܂��V�X�e���������ł����ő啉�ׂð‘‚₷���ƂÍA���ׂ̌y���V�X�e���̃p�t�H�[�}���X���ቺ���������A���ۂɊQ�����”\���������܂��B�Ê��A���ׂ��y���ê‡ï¿½Ìƒp�t�H�[�}���X�ÍA���ׂ��d���ê‡ï¿½Ìƒp�t�H�[�}���X�������d�v�ł��B +ƒXƒgƒŒƒXƒeƒXƒg‚Å‚ÍAŒy•‰‰×‚ÅŽn“®‚µA•ǂɓ–‚½‚é‚Ü‚ÅA“ü—Í‘¬“x‚â“ü—̓TƒCƒY‚Ȃǂ̡–@‚ɉˆ‚Á‚ăVƒXƒeƒ€‚ðƒ[ƒh‚µ‚Ü‚·Bƒƒ‚ƒŠAƒvƒƒZƒbƒTAI / OAƒlƒbƒgƒ[ƒN‘шæ•A‚Ü‚½‚̓f[ƒ^‚Ì‹£‡‚ÍA•Ç‚ª‚ ‚È‚½‚̃j[ƒY‚ð–ž‚½‚·‚ɂ͋߂·‚¬‚éꇂÍAƒ{ƒgƒ‹ƒlƒbƒN‚ƂȂ郊ƒ\[ƒXi’Êí‚ÍŽx”z“I‚È‚à‚Ìj‚ð”cˆ¬‚µ‚Ä‚­‚¾‚³‚¢BŽŸ‚ÉA•ǂ𓮂©‚·•û–@‚ðŒ©‚Â‚¯‚Ü‚·BƒEƒH[ƒ‹‚ð“®‚©‚·A‚‚܂èƒVƒXƒeƒ€‚ªˆ—‚Å‚«‚éő啉‰×‚ð‘‚â‚·‚±‚Æ‚ÍA•‰‰×‚ÌŒy‚¢ƒVƒXƒeƒ€‚̃pƒtƒH[ƒ}ƒ“ƒX‚ð’ቺ‚³‚¹‚½‚èAŽÀÛ‚ÉŠQ‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B’ÊíA•‰‰×‚ªŒy‚¢ê‡‚̃pƒtƒH[ƒ}ƒ“ƒX‚ÍA•‰‰×‚ªd‚¢ê‡‚̃pƒtƒH[ƒ}ƒ“ƒX‚æ‚è‚àd—v‚Å‚·B -���Ȃ��͂����Ì��_�I���f�����\�z���邽�߂ÉA�����‚��̈قȂ鎟�����Ž������Ȃ����΂Ȃ��Ȃ����������܂����B�P���̋Z�p�Å\���ł͂Ȃ��B���Ƃ��ÎA���M���O�łÍA�V�X�e������2�‚̃C�x���g�Ԃ̃E�H�[���N���b�N���Ԃ��悭�m�邱�Ƃ������܂����A�T�d�É\�z���Ȃ������A�������g�p�����f�[�^�\���T�C�Y�̉Ž����͂����܂����B���l�ÉA�ÅV�̃V�X�e���łÍA�����̃R���s���[�^�Ƒ����̃\�t�g�E�F�A�V�X�e�������͂��Ă����”\���������܂��B���ÉA�ǂɓ��������Ƃ��i�‚܂��A���͂̑傫���ɉ����ăp�t�H�[�}���X���ñ’¼ï¿½ï¿½I�ł����j�A�������̑��̃\�t�g�E�F�A�V�X�e���̓{�g���l�b�N�ɂȂ��”\���������܂��B�Q�����Ă��邷�ׂẴ}�V���̃v���Z�b�T���ׂ𑪒肷�邾���ł����Ă��A�������̃V�X�e���̉Ž����͔����ɖ𗧂��܂��B +‚ ‚È‚½‚Í‚»‚ê‚̸_“Iƒ‚ƒfƒ‹‚ð\’z‚·‚邽‚ß‚ÉA‚¢‚­‚‚©‚̈قȂ鎟Œ³‚ð‰ÂŽ‹‰»‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB’Pˆê‚Ì‹Zp‚Å\•ª‚ł͂Ȃ¢B‚½‚Æ‚¦‚ÎAƒƒMƒ“ƒO‚Å‚ÍAƒVƒXƒeƒ€“à‚Ì2‚‚̃Cƒxƒ“ƒgŠÔ‚̃EƒH[ƒ‹ƒNƒƒbƒNŽžŠÔ‚ð‚æ‚­’m‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªATd‚É\’z‚µ‚È‚¢ŒÀ‚èAƒƒ‚ƒŠŽg—p—¦‚âƒf[ƒ^\‘¢ƒTƒCƒY‚̉Ž‹«‚Í‚ ‚è‚Ü‚¹‚ñB“¯—l‚ÉAÅV‚̃VƒXƒeƒ€‚Å‚ÍA‘½‚­‚̃Rƒ“ƒsƒ…[ƒ^‚Æ‘½‚­‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚ª‹¦—Í‚µ‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B“Á‚ÉA•ǂɓ–‚½‚Á‚½‚Æ‚«i‚‚܂èA“ü—͂̑傫‚³‚ɉž‚¶‚ăpƒtƒH[ƒ}ƒ“ƒX‚ª”ñ’¼ü“I‚Å‚ ‚éjA‚±‚ê‚ç‚Ì‘¼‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚̓{ƒgƒ‹ƒlƒbƒN‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·BŽQ‰Á‚µ‚Ä‚¢‚é‚·‚ׂẴ}ƒVƒ“‚̃vƒƒZƒbƒT•‰‰×‚𑪒肷‚邾‚¯‚Å‚ ‚Á‚Ä‚àA‚±‚ê‚ç‚̃VƒXƒeƒ€‚̉Ž‹«‚Í”ñí‚É–ð—§‚¿‚Ü‚·B -�ǂ��ǂ��ɂ��邩���m�邱�ƂÍA�ǂ𓮂��������łȂ��A�\���”\�����ñ‹Ÿ‚��ăr�W�l�X�������I�ɊǗ��ł����悤�ɂ��邽�߂ɂ��s�Œ��ł��B +•Ç‚ª‚Ç‚±‚É‚ ‚é‚©‚ð’m‚邱‚Æ‚ÍA•ǂ𓮂©‚·‚¾‚¯‚łȂ­A—\‘ª‰Â”\«‚ð’ñ‹Ÿ‚µ‚ărƒWƒlƒX‚ðŒø—¦“I‚ÉŠÇ—‚Å‚«‚邿‚¤‚É‚·‚邽‚߂ɂà•s‰ÂŒ‡‚Å‚·B --- diff --git a/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index 91db8e6..f0a6bd6 100644 --- a/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/jp/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -1,9 +1,9 @@ # How to Balance Brevity and Abstraction [//]: # (Version:1.0.0) -���ۉ��̓v���O���~���O�ɂƂ��Äd�v�ł��B���Ȃ��͂ǂ̂悤�ɒ��ۓI�ł����K�v�����邩���T�d�ɑI�������K�v�������܂��B�v���O���}�[�̔M�ӂÍA���΂��Ζ{���ɗL�p�Ȃ��̂��������ۓx�����߂܂��B�������������‚̒����ÍA���ۂɃR�[�h���܂܂Ȃ��N���X���ì¬ï¿½ï¿½ï¿½A���ۓI�Ȃ��̂��ñ‹Ÿ‚����ȊO�͉������Ȃ��N���X���ì¬ï¿½ï¿½ï¿½ï¿½ï¿½ê‡ï¿½Å‚��B�����̖��͂͗����ł��܂����A�R�[�h�̊Ȍ����̉��l�͒��ۉ��̉��l�ɑ΂��đ��肳���Ȃ����΂Ȃ��܂����B���ÜA�M���I�ȗ��z���`�҂��ԈႢ���Ƃ������Ƃ������܂��B�v���W�F�N�g�̊J�n���ɂÍA���ۓI�Ɏv���鑽���̃N���X�����`�����A���������”\���̂��邷�ׂĂ̎��Ԃ����������Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B�v���W�F�N�g���i�s���A���J�����èžï¿½Þ‚ɂ‚��ÄA�R�[�h���̂����G�ɂȂ��܂��B�Ö��{�̂ÍA�K�v�È��ɒ����Ȃ��܂��B���̃N���X�ÍA�������̕��S�ł����A�v���b�V���[���ł͖��������܂��B���ۉ��ɔ��₳�ꂽ�G�l���M�[���A�������Z���ȒP�ɕۂ‚��߂ɔ��₳�ꂽ�Ȃ��A�ÅI�I�Ȍ��ʂ͂����ǂ����̂ɂȂ��܂����B�����͓��@�I�v���O���~���O*�̈��`�Ԃł��B���ÍA[Paul Graham�ɂ���[ 'Succinctness is Power'�ihttp://www.paulgraham.com/power.html�j�̋L�������������߂��܂��B +’ŠÛ‰»‚̓vƒƒOƒ‰ƒ~ƒ“ƒO‚ɂƂÁ‚Äd—v‚Å‚·B‚ ‚È‚½‚͂ǂ̂悤‚É’ŠÛ“I‚Å‚ ‚é•K—v‚ª‚ ‚é‚©‚ðTd‚É‘I‘ð‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚Ì”MˆÓ‚ÍA‚µ‚΂µ‚Ζ{“–‚É—L—p‚È‚à‚Ì‚æ‚è‚à’ŠÛ“x‚ð‚‚߂܂·B‚±‚ê‚ðŽ¦‚·ˆê‚‚̒›Œó‚ÍAŽÀۂɃR[ƒh‚ðŠÜ‚܂Ȃ¢ƒNƒ‰ƒX‚ð쬂µA’ŠÛ“I‚È‚à‚Ì‚ð’ñ‹Ÿ‚·‚éˆÈŠO‚͉½‚à‚µ‚È‚¢ƒNƒ‰ƒX‚ð쬂·‚éꇂł·B‚±‚ê‚Ì–£—͂͗‰ð‚Å‚«‚Ü‚·‚ªAƒR[ƒh‚ÌŠÈŒ‰‚³‚̉¿’l‚Í’ŠÛ‰»‚̉¿’l‚ɑ΂µ‚Ä‘ª’肳‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBŽžÜA”M‹¶“I‚È—‘zŽå‹`ŽÒ‚ªŠÔˆá‚¢‚ð”Æ‚µ‚½‚±‚Æ‚ª‚ ‚è‚Ü‚·BƒvƒƒWƒFƒNƒg‚ÌŠJŽnŽž‚É‚ÍA’ŠÛ“I‚ÉŽv‚¦‚鑽‚­‚̃Nƒ‰ƒX‚ª’è‹`‚³‚êA”­¶‚·‚é‰Â”\«‚Ì‚ ‚é‚·‚ׂĂ̎–‘Ô‚ðˆ—‚·‚邯„‘ª‚µ‚Ü‚·BƒvƒƒWƒFƒNƒg‚ªis‚µA”æ˜J‚ª“ü‚螂ނɂ‚ê‚ÄAƒR[ƒhŽ©‘Ì‚ª—ŽG‚ɂȂè‚Ü‚·BŠÖ”–{‘Ì‚ÍA•K—vˆÈã‚É’·‚­‚È‚è‚Ü‚·B‹ó‚̃Nƒ‰ƒX‚ÍA•¶‘‰»‚Ì•‰’S‚Å‚ ‚èAƒvƒŒƒbƒVƒƒ[‰º‚ł͖³Ž‹‚³‚ê‚Ü‚·B’ŠÛ‰»‚É”ï‚₳‚ꂽƒGƒlƒ‹ƒM[‚ªA•¨Ž–‚ð’Z‚­ŠÈ’P‚ɕۂ‚½‚߂ɔï‚₳‚ꂽ‚È‚çAÅI“I‚ÈŒ‹‰Ê‚Í‚æ‚è—Ç‚¢‚à‚̂ɂȂè‚Ü‚µ‚½B‚±‚ê‚Í“Š‹@“IƒvƒƒOƒ‰ƒ~ƒ“ƒO*‚̈êŒ`‘Ô‚Å‚·BŽ„‚ÍA[Paul Graham‚É‚æ‚é[ 'Succinctness is Power'ihttp://www.paulgraham.com/power.htmlj‚Ì‹LŽ–‚ð‹­‚­‚¨Š©‚ß‚µ‚Ü‚·B -*�����B��*���I�u�W�F�N�g�w���v���O���~���O*�Ȃǂ֗̕��ȃe�N�j�b�N�Ɋ֘A�����h�O�}�������܂��B�������̋Z�p�ÍA1�‚̃R�[�h�ð’ŠÛ“I�Ȃ��̂ɂ��A�ω����\�������B���͌Âl�I�ɂÍA�����̓��@�I�ȃR�[�h�ð¶ï¿½ï¿½ï¿½ï¿½×‚��ł͂Ȃ��Ǝv���܂��B���Ƃ��ÎA�Ï����̂��G�N�X�|�[�Y�����Ȃ��悤�ÉA�~���[�^���ƃA�N�Z�T�̔w���ɂ����I�u�W�F�N�g�Ì����Ï������\���ɂ��ÄA�����ɑ΂��é¬ï¿½ï¿½ï¿½ÈƒC���^�[�t�F�[�X�������󂯓������X�^�C���͗e�F�����Ă��܂��B�����ɂ����A�ĂÑo���R�[�h�ɉe�����^�����ɂ��̕Ï��̎������ÏX���邱�Ƃ��ł��A�����Ɉ��肵��API�����J���Ȃ����΂Ȃ��Ȃ����C�u�������C�^�[�ɂƂ��Ă͂����炭�K�؂ł��B���������ÍA���̃`�[�����R�[�����O�R�[�h�����L���Ă����̂ÅA�ĂÑo�������ȒP�ɃR�[���[�Ɠ����悤�ÉăR�[�f�B���O���邱�Ƃ��ł����̂ÅA�����̗��_�����̌����̃R�X�g���������Ƃ͎v���Ȃ��B 4�‚܂���5�‚̗]���ȃR�[�h�s�ÍA���̓��@�I�ȗ��v�̂��߂Ɏx�������߂Ìd���ãžï¿½Å‚��B +*î•ñ‰B•Á*‚âƒIƒuƒWƒFƒNƒgŽwŒüƒvƒƒOƒ‰ƒ~ƒ“ƒO*‚Ȃǂ֗̕˜‚ȃeƒNƒjƒbƒN‚ÉŠÖ˜A‚µ‚½ƒhƒOƒ}‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚Ì‹Zp‚ÍA1‚‚̃R[ƒh‚ð’ŠÛ“I‚È‚à‚̂ɂµA•ω»‚ð—\Šú‚·‚éBŽ„‚ÍŒÂl“I‚É‚ÍA‘½‚­‚Ì“Š‹@“I‚ȃR[ƒh‚𶬂·‚ׂ«‚ł͂Ȃ¢‚ÆŽv‚¢‚Ü‚·B‚½‚Æ‚¦‚ÎA•Ï”Ž©‘Ì‚ªƒGƒNƒXƒ|[ƒY‚³‚ê‚È‚¢‚悤‚ÉAƒ~ƒ…[ƒ^ƒ‰‚ƃAƒNƒZƒT‚Ì”wŒã‚É‚ ‚éƒIƒuƒWƒFƒNƒg‚Ì®”•Ï”‚ð”ñ•\ަ‚É‚µ‚ÄA‚»‚ê‚ɑ΂·‚鬂³‚ȃCƒ“ƒ^[ƒtƒF[ƒX‚¾‚¯‚ðŽó‚¯“ü‚ê‚éƒXƒ^ƒCƒ‹‚Í—e”F‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚É‚æ‚èAŒÄ‚Ño‚µƒR[ƒh‚ɉe‹¿‚ð—^‚¦‚¸‚É‚»‚̕ϔ‚ÌŽÀ‘•‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«A”ñí‚ɈÀ’肵‚½API‚ðŒöŠJ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ƒ‰ƒCƒuƒ‰ƒŠƒ‰ƒCƒ^[‚ɂƂÁ‚Ă͂¨‚»‚ç‚­“K؂ł·B‚µ‚©‚µŽ„‚ÍAŽ„‚̃`[ƒ€‚ªƒR[ƒŠƒ“ƒOƒR[ƒh‚ðŠ—L‚µ‚Ä‚¢‚é‚Ì‚ÅAŒÄ‚Ño‚µŒ³‚ðŠÈ’P‚ɃR[ƒ‰[‚Æ“¯‚¶‚悤‚ÉăR[ƒfƒBƒ“ƒO‚·‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅA‚±‚ê‚Ì—˜“_‚ª‚»‚ÌŒ¾Œê‚̃RƒXƒg‚ðã‰ñ‚邯‚ÍŽv‚í‚È‚¢B 4‚‚܂½‚Í5‚‚̗]•ª‚ȃR[ƒhs‚ÍA‚±‚Ì“Š‹@“I‚È—˜‰v‚Ì‚½‚߂Ɏx•¥‚¤‚½‚ß‚Ìd‚¢‘㞂ł·B -�ÚA���ɂ����l�̖��肪�����܂��B�R�[�h���ʂ̃R���s���[�^�A�R���p�C���A�\�t�g�E�F�A�V�X�e���A�܂��̓v���b�g�t�H�[���ɈÚA���邩�A�ȒP�ɈÚA�����K�v�������܂����H�|�[�^�u���ł͂Ȃ��A�Z���ĊȒP�ɈÚA�ł����R�[�h�ÍA�����ÚA�”\�ȃR�[�h�������D���Ă����Ǝv���܂��B������DBMS�ɌŗL�̃f�[�^�x�[�X�N�G�����ì¬ï¿½ï¿½ï¿½ï¿½ï¿½N���X�ȂÇA�|�[�^�u���łȂ��R�[�h���w�肳�ꂽ�̈��Ɍ��肷�邱�Ƃ͔��r�I�ȒP�ł����A�m���ɗǂ��l���ł��B +ˆÚA«‚É‚à“¯—l‚Ì–â‘肪‚ ‚è‚Ü‚·BƒR[ƒh‚ð•ʂ̃Rƒ“ƒsƒ…[ƒ^AƒRƒ“ƒpƒCƒ‰Aƒ\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€A‚Ü‚½‚̓vƒ‰ƒbƒgƒtƒH[ƒ€‚ɈÚA‚·‚é‚©AŠÈ’P‚ɈÚA‚·‚é•K—v‚ª‚ ‚è‚Ü‚·‚©Hƒ|[ƒ^ƒuƒ‹‚ł͂Ȃ¢A’Z‚­‚ÄŠÈ’P‚ɈÚA‚Å‚«‚éƒR[ƒh‚ÍA’·‚¢ˆÚA‰Â”\‚ȃR[ƒh‚æ‚è‚à—D‚ê‚Ä‚¢‚邯Žv‚¢‚Ü‚·B“Á’è‚ÌDBMS‚ɌŗL‚̃f[ƒ^ƒx[ƒXƒNƒGƒŠ‚ð쬂·‚éƒNƒ‰ƒX‚È‚ÇAƒ|[ƒ^ƒuƒ‹‚łȂ¢ƒR[ƒh‚ðŽw’肳‚ꂽ—̈æ‚ÉŒÀ’è‚·‚邱‚Ƃ͔äŠr“IŠÈ’P‚Å‚ ‚èAŠm‚©‚É—Ç‚¢l‚¦‚Å‚·B Next [How to Learn New Skills](06-How-to-Learn-New-Skills.md) diff --git a/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md index 056b704..4f75713 100644 --- a/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md +++ b/jp/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -1,13 +1,13 @@ # How to Learn New Skills [//]: # (Version:1.0.0) -�V�����X�L���A���ɔ��Z�p�X�L�����w�Ԃ��ƂÍA���ׂĂÌl�Ìő��̊y���݂ł��B�قƂ��ǂ̊��ƂÍA���ꂪ�v���O���}�[�̃��`�x�[�V�������ǂ̂��炢�������邩�ɂ����ÄA�����ǂ��m�C�𓾂邱�Ƃ��ł��܂��B +V‚µ‚¢ƒXƒLƒ‹A“Á‚É”ñ‹ZpƒXƒLƒ‹‚ðŠw‚Ô‚±‚Æ‚ÍA‚·‚ׂĂÌl‚ÌÅ‘å‚ÌŠy‚µ‚݂ł·B‚Ù‚Æ‚ñ‚Ç‚ÌŠé‹Æ‚ÍA‚±‚ꂪƒvƒƒOƒ‰ƒ}[‚̃‚ƒ`ƒx[ƒVƒ‡ƒ“‚ð‚ǂ̂­‚ç‚¢—‰ð‚·‚é‚©‚É‚æ‚Á‚ÄA‚æ‚è—Ç‚¢Žm‹C‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B -�l�Ԃ͂����Ċw�ÔB�u�b�N���[�f�B���O�ƃN���X���Ƃ͕֗��ł��B�������A���Ȃ��̓v���O���������������Ƃ̂Ȃ��v���O���}�[�𑸌h���邱�Ƃ��ł��܂����H�X�L�����w�Ԃ��߂ɂÍA���̃X�L���𔭊��ł��銰�e�Ȉʒu�Ɏ������g���u���Ȃ����΂Ȃ��܂����B�V�����v���O���~���O�������w�ԂƂ��ÍA�傫�ȃv���W�F�N�g���s���O�É����ȃv���W�F�N�g�����s���Ă݂Ă��������B�\�t�g�E�F�A�v���W�F�N�g���Ǘ��������@���w�ԂƂ��ÍA�܂������Ȃ��̂��Ǘ����Ă��������B +lŠÔ‚Í‚â‚Á‚ÄŠw‚ÔBƒuƒbƒNƒŠ[ƒfƒBƒ“ƒO‚ƃNƒ‰ƒXŽö‹Æ‚͕֗˜‚Å‚·B‚µ‚©‚µA‚ ‚È‚½‚̓vƒƒOƒ‰ƒ€‚ð‘‚¢‚½‚±‚Ƃ̂Ȃ¢ƒvƒƒOƒ‰ƒ}[‚𑸌h‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©HƒXƒLƒ‹‚ðŠw‚Ô‚½‚߂ɂÍA‚»‚̃XƒLƒ‹‚ð”­Šö‚Å‚«‚銰—e‚Ȉʒu‚ÉŽ©•ªŽ©g‚ð’u‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBV‚µ‚¢ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðŠw‚Ô‚Æ‚«‚ÍA‘å‚«‚ȃvƒƒWƒFƒNƒg‚ðs‚¤‘O‚ɬ‚³‚ȃvƒƒWƒFƒNƒg‚ðŽÀs‚µ‚Ă݂Ă­‚¾‚³‚¢Bƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ðŠÇ—‚·‚é•û–@‚ðŠw‚Ô‚Æ‚«‚ÍA‚Ü‚¸¬‚³‚È‚à‚Ì‚ðŠÇ—‚µ‚Ä‚­‚¾‚³‚¢B -�ǂ��w���҂ÍA�����ł��邱�Ƃɑ��������̂ł͂����܂��ñ‚ªA�{�����͂邩�ɗD���Ă��܂��B�ނ��̒m���ƈ��������ÉA���ݓI�ȃ����^�[�����Ȃ��ɒñ‹Ÿ‚��邱�Ƃ͂ł��܂����H�Œ��ł��A�׋����Ď��Ԃ𖳑ʂɂ��Ȃ��悤�É��シ���ׂ��ł��B +—Ç‚¢Žw“±ŽÒ‚ÍAŽ©•ª‚Å‚â‚邱‚Ƃɑã‚í‚é‚à‚̂ł͂ ‚è‚Ü‚¹‚ñ‚ªA–{‚æ‚è‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B”Þ‚ç‚Ì’mޝ‚ƈø‚«Š·‚¦‚ÉAöÝ“I‚ȃƒ“ƒ^[‚ð‚ ‚È‚½‚É’ñ‹Ÿ‚·‚邱‚Ƃ͂ł«‚Ü‚·‚©HÅ’á‚Å‚àA•׋­‚µ‚ÄŽžŠÔ‚𖳑ʂɂµ‚È‚¢‚悤‚ɧ—ã‚·‚é‚ׂ«‚Å‚·B -���Ȃ��Ì��i�É����ȌP���������Ă��炤�悤�ɂ��Ă��������B�������A���Ȃ����w���V�����X�L���ŗV���ł����̂Ɠ������炢�����̎��Ԃ͂����قǗǂ��Ȃ��Ɨ������Ă��܂��B�������A�s���S�È��E�łÍA�����������g���[�j���O�����߂��̂��ȒP�ł��B�����ȃg���[�j���O�̑����ÍA�[�H�����҂��Ă����u�`���ʂ��ÄQ�Ă��邾���ł��B +‚ ‚È‚½‚ÌãŽi‚ɳޮ‚ÈŒP—û‚ð‚³‚¹‚Ä‚à‚炤‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚µ‚©‚µA‚ ‚È‚½‚ªŠw‚Ñ‚½‚¢V‚µ‚¢ƒXƒLƒ‹‚Å—V‚ñ‚Å‚¢‚é‚̂Ɠ¯‚¶‚­‚ç‚¢‘½‚­‚ÌŽžŠÔ‚Í‚»‚ê‚Ù‚Ç—Ç‚­‚È‚¢‚Æ—‰ð‚µ‚Ä‚¢‚Ü‚·B‚µ‚©‚µA•sŠ®‘S‚È¢ŠE‚Å‚ÍA‰‰Œ€‚æ‚è‚àƒgƒŒ[ƒjƒ“ƒO‚ð‹‚ß‚é‚Ì‚ªŠÈ’P‚Å‚·B³Ž®‚ȃgƒŒ[ƒjƒ“ƒO‚Ì‘½‚­‚ÍA—[H‰ï‚ð‘Ò‚Á‚Ä‚¢‚éu‹`‚ð’Ê‚µ‚ÄQ‚Ä‚¢‚邾‚¯‚Å‚·B -���Ȃ����l�𓱂��ê‡ï¿½A�ނ炪�����������Ă����K�؂ȋK�͂̃v���W�F�N�g�����蓖�Ă邱�Ƃɂ����ÄA�ނ炪�ǂ̂悤�Ɋw�ÑA�������邩�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½B�v���O���}�[�ɂƂ��Äł��d�v�ȃX�L���͋Z�p�I�Ȃ��̂ł͂Ȃ����Ƃ��Y���Ȃ��ł��������B���Ȃ��Ìl�X�ÉA�E�C�A�������A�R�~���j�P�[�V����������K�����@�����^���܂��傤�B +‚ ‚È‚½‚ªl‚𓱂­ê‡A”ނ炪‹»–¡‚ðŽ‚Á‚Ä‚¢‚é“K؂ȋK–͂̃vƒƒWƒFƒNƒg‚ðŠ„‚è“–‚Ă邱‚Ƃɂæ‚Á‚ÄA”ނ炪‚ǂ̂悤‚ÉŠw‚ÑA‰‡•‚·‚é‚©‚ð—‰ð‚·‚éBƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚ÄÅ‚àd—v‚ȃXƒLƒ‹‚Í‹Zp“I‚È‚à‚̂ł͂Ȃ¢‚±‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B‚ ‚È‚½‚ÌlX‚ÉA—E‹CA³’¼‚³AƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‚µ‚Ä—ûK‚·‚é‹@‰ï‚ð—^‚¦‚Ü‚µ‚傤B Next [Learn to Type](07-Learn-to-Type.md) diff --git a/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md index 21a71cf..55aa408 100644 --- a/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md +++ b/jp/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -1,5 +1,5 @@ # Learn to Type [//]: # (Version:1.0.0) -�^�b�`�^�C�v���w�ÔB �����͒����̃X�L���ł��B�R�[�h���������Ƃ͔����ɓ���A���͂��鑬�x�����֌W�ÅA�R�[�h�Ì������Ɏ��Ԃ��������Ȃ��悤�ɂ��邱�Ƃ��ł��܂��B �������A���ԃv���O���}�[�ł����ÎA�����炭���Ȃ��̓����⑼�l�Ɏ��R�����������̂ɑ����̎��Ԃ����₷�ł��傤�B �����͂��Ȃ��̃R�~�b�g�����g�̊y�����e�X�g�ł��B ���̂悤�Ȃ��Ƃ��w�Ԃ̂͂��܂��ʔ����Ȃ����p�̎��Ԃ��������܂��B �`���ɂ����ÎAMichael Tiemann��MCC�ɂ����Ƃ��A�l�ÍA�ނ̃L�[�X�g���[�N�ɂ����Ä������ꂽ�n�����𕷂����߂Ƀh�A�̊O�ɗ��‚��ƂɂȂ��܂����B +ƒ^ƒbƒ`ƒ^ƒCƒv‚ðŠw‚ÔB ‚±‚ê‚Í’†‹‰‚̃XƒLƒ‹‚Å‚·BƒR[ƒh‚ð‘‚­‚±‚Ƃ͔ñí‚ɓ‚­A“ü—Í‚·‚鑬“x‚ª–³ŠÖŒW‚ÅAƒR[ƒh‚Ì‘‚«•û‚ÉŽžŠÔ‚ª‚©‚©‚ç‚È‚¢‚悤‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B ‚µ‚©‚µA’†ŠÔƒvƒƒOƒ‰ƒ}[‚Å‚ ‚ê‚ÎA‚¨‚»‚ç‚­‚ ‚È‚½‚Ì“¯—»‚⑼l‚ÉŽ©‘RŒ¾Œê‚ð‘‚­‚̂ɑ½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·‚Å‚µ‚傤B ‚±‚ê‚Í‚ ‚È‚½‚̃Rƒ~ƒbƒgƒƒ“ƒg‚ÌŠy‚µ‚¢ƒeƒXƒg‚Å‚·B ‚»‚̂悤‚È‚±‚Æ‚ðŠw‚Ԃ̂͂ ‚Ü‚è–Ê”’‚­‚È‚¢ê—p‚ÌŽžŠÔ‚ª‚©‚©‚è‚Ü‚·B “`à‚É‚æ‚ê‚ÎAMichael Tiemann‚ªMCC‚É‚¢‚½‚Æ‚«Al‚ÍA”ނ̃L[ƒXƒgƒ[ƒN‚É‚æ‚Á‚ͬ‚³‚ꂽƒnƒ€‰¹‚ð•·‚­‚½‚߂ɃhƒA‚ÌŠO‚É—§‚‚±‚ƂɂȂè‚Ü‚µ‚½B Next [How to Do Integration Testing](08-How-to-Do-Integration-Testing.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md index bf43010..cbaa77a 100644 --- a/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md +++ b/jp/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -1,7 +1,7 @@ # How to Do Integration Testing [//]: # (Version:1.0.0) -�����e�X�g�ÍA�P�̃e�X�g���ꂽ���܂��܂ȃR���|�[�l���g�̓����e�X�g�ł��B �����Í����ł����A�e�X�g�Åo�����B ���Ȃ��̌��ς����Ƃ��Ȃ��̃X�P�W���[���ɂ����̎��Ԃ��܂߂��K�v�������܂��B +“‡ƒeƒXƒg‚ÍA’P‘̃eƒXƒg‚³‚ꂽ‚³‚Ü‚´‚܂ȃRƒ“ƒ|[ƒlƒ“ƒg‚Ì“‡ƒeƒXƒg‚Å‚·B “‡‚Í‚‰¿‚Å‚ ‚èAƒeƒXƒg‚Åo‚Ä‚­‚éB ‚ ‚È‚½‚ÌŒ©Ï‚à‚è‚Æ‚ ‚È‚½‚̃XƒPƒWƒ…[ƒ‹‚É‚±‚ê‚ÌŽžŠÔ‚ðŠÜ‚ß‚é•K—v‚ª‚ ‚è‚Ü‚·B -���z�I�ɂÍA�����𖾎��I�És���K�v�������t�F�[�Y���ÅI�i�K�ɂȂ��悤�Ƀv���W�F�N�g���Ò������̂����z�I�ł��B �v���W�F�N�g�̉ߒ��Ŋ����������̂��i�K�I�ɓ������������͂邩�ɗD���Ă��܂��B ���ނ𓾂Ȃ��ê‡ï¿½Í’��Ó[�����ς����Ă��������B +—‘z“I‚É‚ÍA“‡‚𖾎¦“I‚És‚¤•K—v‚ª‚ ‚éƒtƒF[ƒY‚ªÅI’iŠK‚ɂȂ¢‚悤‚ɃvƒƒWƒFƒNƒg‚ð•Ò¬‚·‚é‚Ì‚ª—‘z“I‚Å‚·B ƒvƒƒWƒFƒNƒg‚̉ߒö‚ÅŠ®¬‚µ‚½‚à‚Ì‚ð’iŠK“I‚É“‡‚·‚é•û‚ª‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B ‚â‚ނ𓾂Ȃ¢ê‡‚Í’ˆÓ[‚­Œ©Ï‚à‚Á‚Ä‚­‚¾‚³‚¢B Next [Communication Languages](09-Communication-Languages.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md index 1d160b5..85557fa 100644 --- a/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/jp/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -1,11 +1,11 @@ # Communication Languages [//]: # (Version:1.0.0) -�v���O���~���O�����ł͂Ȃ��A�ÊM����*�ł����`���I�ɒ��`���ꂽ�\���V�X�e���̂����‚��̌��ꂪ�����܂��B�������ÍA�W�������ʂ����R�~���j�P�[�V�������e�Ղɂ����悤�ɓ��ʂÉÝŒv�����Ă��܂��B 2003�N�ɂÍA�������̒��Åł��d�v�Ȃ̂�UML�AXML�ASQL�ł��B���Ȃ��͂悭�R�~���j�P�[�V�������A���Žg���ׂ��������߂邽�߂ÉA�����炷�ׂĂÉ��ʂ��Ă����K�v�������܂��B +ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ł͂Ȃ­A’ÊMŒ¾Œê*‚Å‚ ‚éŒ`Ž®“I‚É’è‹`‚³‚ꂽ\•¶ƒVƒXƒeƒ€‚Ì‚¢‚­‚‚©‚ÌŒ¾Œê‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚ÍA•W€‰»‚ð’Ê‚¶‚½ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð—eˆÕ‚É‚·‚邿‚¤‚É“Á•Ê‚ÉÝŒv‚³‚ê‚Ä‚¢‚Ü‚·B 2003”N‚É‚ÍA‚±‚ê‚ç‚Ì’†‚ÅÅ‚àd—v‚Ȃ̂ªUMLAXMLASQL‚Å‚·B‚ ‚È‚½‚͂悭ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚µA‚¢‚ÂŽg‚¤‚ׂ«‚©‚ðŒˆ‚ß‚é‚½‚ß‚ÉA‚±‚ê‚ç‚·‚ׂĂɸ’Ê‚µ‚Ä‚¢‚é•K—v‚ª‚ ‚è‚Ü‚·B -UML�ÍA�݌v���L�q�����}�ʂ��ì¬ï¿½ï¿½ï¿½é‚½ï¿½ß‚Ì–L���È����ȃV�X�e���ł��B���̔������ÍA���ꂪ�r�W���A���ł��t�H�[�}���ł������A���҂Ɠǎ҂̗�����UML���m�������ÎA���ʂÌ������`���邱�Ƃ��ł��܂��B���Ȃ��͂����ɂ‚��Ēm���K�v�������܂��B�Ȃ��Ȃ��A���̒��Ńf�U�C�����`�������邱�Ƃ����邩���ł��B�����É����I�Ɍ�����UML�}�ʂ��ì¬ï¿½ï¿½ï¿½é‚½ï¿½ß‚̔����ɗL�p�ȃc�[���������܂��B�����Ìê‡ï¿½AUML�Í����Ȃ��̂ł����A�݌v�}�ʂɂ͂����P����*�{�b�N�X�Ɩ���*�X�^�C�����g�p���Ă��܂��B�������A���ÍAUML�����Ȃ��Ƃ����e�������׋������̂ɂ҂������ł����Ɗm�M���Ă��܂��B +UML‚ÍAÝŒv‚ð‹Lq‚·‚é}–Ê‚ð쬂·‚邽‚߂̖L‚©‚È³Ž®‚ȃVƒXƒeƒ€‚Å‚·B‚»‚Ì”ü‚µ‚³‚ÍA‚»‚ꂪƒrƒWƒ…ƒAƒ‹‚Å‚àƒtƒH[ƒ}ƒ‹‚Å‚à‚ ‚èAìŽÒ‚Ɠǎ҂̗¼•û‚ªUML‚ð’m‚Á‚Ä‚¢‚ê‚ÎA‘å—Ê‚Ìî•ñ‚ð“`‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚È‚½‚Í‚»‚ê‚ɂ‚¢‚Ä’m‚é•K—v‚ª‚ ‚è‚Ü‚·B‚È‚º‚È‚çA‚»‚Ì’†‚ŃfƒUƒCƒ“‚ª“`‚¦‚ç‚ê‚邱‚Æ‚ª‚ ‚é‚©‚ç‚Å‚·B”ñí‚Éê–å“I‚ÉŒ©‚¦‚éUML}–Ê‚ð쬂·‚邽‚߂̔ñí‚É—L—p‚ȃc[ƒ‹‚ª‚ ‚è‚Ü‚·B‘½‚­‚Ìê‡AUML‚Í³Ž®‚È‚à‚̂ł ‚èAÝŒv}–ʂɂ͂æ‚è’Pƒ‚È*ƒ{ƒbƒNƒX‚Æ–îˆó*ƒXƒ^ƒCƒ‹‚ðŽg—p‚µ‚Ä‚¢‚Ü‚·B‚µ‚©‚µAŽ„‚ÍAUML‚ª­‚È‚­‚Æ‚àƒ‰ƒeƒ“Œê‚ð•׋­‚·‚é‚̂ɂ҂Á‚½‚è‚Å‚ ‚邯ŠmM‚µ‚Ä‚¢‚Ü‚·B -XML�ÍV�����W�������`���邽�߂̕W���ł��B�f�[�^�����̖����̉������ł͂����܂��ñ‚ªA�܂��ł��ꂪ���݂��邩�̂悤�ɕ\�������邱�Ƃ������܂��B�ނ����A�f�[�^�����Ìł��ދ��ȕ����̎������A���Ȃ킿�\�������`�V�[�P���X�É\�������A�\���É\�����͂��邱�Ƃ����}���鎩�����ł��B���ۂɕK�v�Ǝv���������̂̂ق��̈ꕔ�ł����ɂ��������炸�A�����‚��̃^�C�v�`�F�b�N�Æï¿½ï¿½ï¿½ï¿½ï¿½ï¿½`�F�b�N�������܂��B +XML‚ÍV‚µ‚¢•W€‚ð’è‹`‚·‚邽‚߂̕W€‚Å‚·Bƒf[ƒ^ŒðŠ·‚Ì–â‘è‚̉ðŒˆô‚ł͂ ‚è‚Ü‚¹‚ñ‚ªA‚Ü‚é‚Å‚»‚ꂪ‘¶Ý‚·‚é‚©‚̂悤‚É•\ަ‚³‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚Þ‚µ‚ëAƒf[ƒ^ŒðŠ·‚ÌÅ‚à‘Þ‹ü‚È•”•ª‚ÌŽ©“®‰»A‚·‚Ȃ킿•\Œ»‚ðüŒ`ƒV[ƒPƒ“ƒX‚É\‘¢‰»‚µA\‘¢‚É\•¶‰ðÍ‚·‚邱‚Æ‚ðŠ½Œ}‚·‚鎩“®‰»‚Å‚·BŽÀÛ‚É•K—v‚ÆŽv‚í‚ê‚é‚à‚̂̂قñ‚̈ꕔ‚Å‚ ‚é‚É‚à‚©‚©‚í‚炸A‚¢‚­‚‚©‚̃^ƒCƒvƒ`ƒFƒbƒN‚Ƴ‚µ‚³ƒ`ƒFƒbƒN‚ª‚ ‚è‚Ü‚·B -SQL�ÍA�v���O���~���O�����ł͂Ȃ������ɋ��͂ŖL�x�ȃf�[�^�N�G�������ё��쌾���ł��B�W�������ꂽ�R�A�������d�v�ł͂Ȃ��A�����̃o���G�[�V�����i�Ê��Í��i�ˑ��j�������܂��B SQL�ÍA�����[�V���i���f�[�^�x�[�X��* lingua franca *�ł��B�����[�V���i���E�f�[�^�x�[�X�̗����̉��b���󂯂��”\���̂��镪���Å��Ƃ����ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÎA���Ƃ��Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚����ASQL�Ì\���ƈӖ��ɂ‚��Ă͊��{�I�ɗ������Ă����K�v�������܂��B +SQL‚ÍAƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ł͂Ȃ¢”ñí‚É‹­—͂ŖL•x‚ȃf[ƒ^ƒNƒGƒŠ‚¨‚æ‚Ñ‘€ìŒ¾Œê‚Å‚·B•W€‰»‚³‚ꂽƒRƒA‚æ‚è‚àd—v‚ł͂Ȃ¢A‘½‚­‚̃oƒŠƒG[ƒVƒ‡ƒ“i’Êí‚Í»•iˆË‘¶j‚ª‚ ‚è‚Ü‚·B SQL‚ÍAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒX‚Ì* lingua franca *‚Å‚·BƒŠƒŒ[ƒVƒ‡ƒiƒ‹Eƒf[ƒ^ƒx[ƒX‚Ì—‰ð‚̉¶Œb‚ðŽó‚¯‚é‰Â”\«‚Ì‚ ‚镪–ì‚Åì‹Æ‚·‚éê‡‚à‚ ‚ê‚ÎAì‹Æ‚µ‚È‚¢ê‡‚à‚ ‚è‚Ü‚·‚ªASQL‚Ì\•¶‚ƈӖ¡‚ɂ‚¢‚Ă͊î–{“I‚É—‰ð‚µ‚Ä‚¨‚­•K—v‚ª‚ ‚è‚Ü‚·B Next [Heavy Tools](10-Heavy-Tools.md) diff --git a/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index aaad24f..0466cf2 100644 --- a/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/jp/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -1,14 +1,14 @@ # Heavy Tools [//]: # (Version:1.0.0) -�������̋Z�p�������i�ނɂ‚��ÄA�\�t�g�E�F�A�Z�p�ÍA�z�����ł��Ȃ����̂����A�����A�V���i�A�W�������ꂽ���i�A�L�����y���������È��i�ɈÚs���Ă��܂��B �������Ìd���H���͑傫�ȕ��ׂ������邱�Ƃ������܂����A�Ј����邱�Ƃ������A�����ɑ傫�ȓ������K�v�Ƃ��܂��B ���ԃv���O���}�[�ÍA���������Ǘ��������@�ÆA�����������Žg�p���ׂ����A�܂��Íl�����ׂ������m���K�v�������܂��B +Ž„‚½‚¿‚Ì‹Zp•¶‰»‚ªi‚ނɂ‚ê‚ÄAƒ\ƒtƒgƒEƒFƒA‹Zp‚ÍA‘z‘œ‚à‚Å‚«‚È‚¢‚à‚Ì‚©‚çAŒ¤‹†AV»•iA•W€‰»‚³‚ꂽ»•iAL‚­•‹y‚µ‚½ˆÀ‰¿‚È»•i‚ɈÚs‚µ‚Ä‚¢‚Ü‚·B ‚±‚ê‚ç‚Ìd‚¢H‹ï‚͑傫‚È•‰‰×‚ð‚©‚¯‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªAˆÐˆ³‚·‚邱‚Æ‚ª‚ ‚èA—‰ð‚ɑ傫‚È“ŠŽ‘‚ð•K—v‚Æ‚µ‚Ü‚·B ’†ŠÔƒvƒƒOƒ‰ƒ}[‚ÍA‚»‚ê‚ç‚ðŠÇ—‚·‚é•û–@‚ÆA‚»‚ê‚ç‚ð‚¢‚ÂŽg—p‚·‚ׂ«‚©A‚Ü‚½‚Íl—¶‚·‚ׂ«‚©‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·B -�����ÌS�ɂÍA�ł��d���c�[���̂����‚��������܂��F +¡Ž„‚ÌS‚É‚ÍAÅ‚àd‚¢ƒc[ƒ‹‚Ì‚¢‚­‚‚©‚ª‚ ‚è‚Ü‚·F -- �����[�V���i���f�[�^�x�[�X�A -- �S�������G���W���A -- ���w���C�u�����[�A -- OpenGL�A -- XML�p�[�T�[�A -- �X�v���b�h�V�[�g�B +- ƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒXA +- ‘S•¶ŒŸõƒGƒ“ƒWƒ“A +- ”Šwƒ‰ƒCƒuƒ‰ƒŠ[A +- OpenGLA +- XMLƒp[ƒT[A +- ƒXƒvƒŒƒbƒhƒV[ƒgB Next [How to analyze data](11-How-to-analyze-data.md) diff --git a/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index a9a8c63..f6f4b2f 100644 --- a/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/jp/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -1,11 +1,11 @@ # How to analyze data [//]: # (Version:1.0.0) -�f�[�^���͂ÍA�\�t�g�E�F�A�J���Ì����i�K�̃v���Z�X�ÅA�r�W�l�X�A�N�e�B�r�e�B�𒲂×A�������\�t�g�E�F�A�A�v���P�[�V�����ɕϊ����邽�߂̗v�������‚��o���v���Z�X�ł��B�����Í����Ȓ��`�ł����A�f�[�^���͂̓V�X�e���A�i���X�g�ɔC���Ă����ׂ��s���ł����ÆM���邩�������܂��ñ‚ªA�v���O���}�[�͒N�����݌v�������̂��R�[�f�B���O���邱�ƂÉÅ“_�𓖂Ă��ׂ��ł��B�����Ƀ\�t�g�E�F�A�G���W�j�A�����O�̃p���_�C���É]���ÎA���������������܂����B�o���L�x�ȃv���O���}�[���f�U�C�i�[�ɂȂ��A�s���f�U�C�i�[���r�W�l�X�A�i���X�g�ɂȂ��A���ׂẴf�[�^�v���ɂ‚��Äl���邱�Ƃ��ł��A���m�ȃ^�X�N�����s���邱�Ƃ��ł��܂��B�����ÍA�f�[�^�����ׂẴv���O���~���O�����̒��j�ƂȂ邽�ßA���S�ɂÍ��m�ł͂����܂����B���Ȃ��̃v���O�����ʼn������Ă��A���Ȃ��͈ړ����Ă��邩�A�f�[�^���ÏX���Ă��܂��B�r�W�l�X�A�i���X�g�̓j�[�Y���������K�͂ɕ��͂��Ă��܂��B�\�t�g�E�F�A�f�U�C�i�[�ÍA���̂悤�ȋK�͂������Éi�èžï¿½ï¿½ï¿½ÅA���肪���Ȃ��̊��Ì��ɒ����ÆA�I���ȃA���S���Y�����K�p���Ċ����̃f�[�^���ړ����邾���ł��B +ƒf[ƒ^•ªÍ‚ÍAƒ\ƒtƒgƒEƒFƒAŠJ”­‚̉Šú’iŠK‚̃vƒƒZƒX‚ÅAƒrƒWƒlƒXƒAƒNƒeƒBƒrƒeƒB‚𒲂×A‚»‚ê‚ðƒ\ƒtƒgƒEƒFƒAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ɕϊ·‚·‚邽‚߂̗vŒ‚ðŒ©‚Â‚¯o‚·ƒvƒƒZƒX‚Å‚·B‚±‚ê‚Í³Ž®‚È’è‹`‚Å‚ ‚èAƒf[ƒ^•ªÍ‚̓VƒXƒeƒ€ƒAƒiƒŠƒXƒg‚É”C‚¹‚Ä‚¨‚­‚ׂ«s“®‚Å‚ ‚邯M‚¶‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒvƒƒOƒ‰ƒ}[‚Í’N‚©‚ªÝŒv‚µ‚½‚à‚Ì‚ðƒR[ƒfƒBƒ“ƒO‚·‚邱‚Æ‚ÉÅ“_‚ð“–‚Ä‚é‚ׂ«‚Å‚·BŒµ–§‚Ƀ\ƒtƒgƒEƒFƒAƒGƒ“ƒWƒjƒAƒŠƒ“ƒO‚̃pƒ‰ƒ_ƒCƒ€‚É]‚¦‚ÎA³‚µ‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBŒoŒ±–L•x‚ȃvƒƒOƒ‰ƒ}[‚ªƒfƒUƒCƒi[‚ɂȂèA‰s‚¢ƒfƒUƒCƒi[‚ªƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚ɂȂèA‚·‚ׂẴf[ƒ^—vŒ‚ɂ‚¢‚Äl‚¦‚邱‚Æ‚ª‚Å‚«A–¾Šm‚ȃ^ƒXƒN‚ðŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ÍAƒf[ƒ^‚ª‚·‚ׂẴvƒƒOƒ‰ƒ~ƒ“ƒOŠˆ“®‚Ì’†Šj‚ƂȂ邽‚ßAŠ®‘S‚ɂͳŠm‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚ʼn½‚ð‚µ‚Ä‚àA‚ ‚È‚½‚͈ړ®‚µ‚Ä‚¢‚é‚©Aƒf[ƒ^‚ð•ÏX‚µ‚Ä‚¢‚Ü‚·BƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚̓j[ƒY‚ð‚æ‚è‘å‹K–͂ɕªÍ‚µ‚Ä‚¢‚Ü‚·Bƒ\ƒtƒgƒEƒFƒAƒfƒUƒCƒi[‚ÍA‚±‚̂悤‚È‹K–Í‚ð‚³‚ç‚Éi‚èž‚ñ‚ÅA–â‘肪‚ ‚È‚½‚ÌŠ÷‚Ìã‚É’…‚­‚ÆAI–­‚ȃAƒ‹ƒSƒŠƒYƒ€‚ð“K—p‚µ‚ÄŠù‘¶‚̃f[ƒ^‚ðˆÚ“®‚·‚邾‚¯‚Å‚·B -�����ł͂����܂����B +‚»‚¤‚ł͂ ‚è‚Ü‚¹‚ñB -�ǂ̒i�K�Ō��Ă��A�f�[�^�͂��܂��݌v���ꂽ�A�v���P�[�V�����̎��ȊÖS���ł��B�r�W�l�X�A�i���X�g���ڋq�̗v�������ǂ̂悤�ɗv�����擾���Ă��邩���ڂ��������ÎA�f�[�^�����{�I�Ȗ������ʂ������Ƃ��킩���܂��B�A�i���X�g�͂��������f�[�^�t���[�_�C�A�O�������ì¬ï¿½ï¿½ï¿½A���ׂẴf�[�^�\�[�X�����ʂ����A�����t���[���`�������܂��B�ǂ̃f�[�^���V�X�e���̈ꕔ�ɂ��邩�𖾊m�ɂ������ÅA�f�[�^�x�[�X�֌W�A�f�[�^�����v���g�R���A�����уt�@�C���`���̊ϓ_�����A�݌v�҂̓f�[�^�\�[�X�ð®Œ`���ăv���O���}�ɓn�������������܂��B�������A�v���Z�X�͂܂��I�����Ă��܂����B���̓O�ꂵ���f�[�^�����v���Z�X�̌��ł����Ă��i�v���O���}�j�A�”\�Ȍ����ŗǂ̕��@�Ńf�[�^�ð•ªÍ‚����K�v�����邩���ł��B���Ȃ��̎d���ÌÅI�s�ÍA�����‚��̌����̕��ł���Niklaus Wirth�̒��j���b�Z�[�W�ł��B "�A���S���Y��+�f�[�^�\��=�v���O����"�P�ƂŃA���S���Y���𗧂Ă邱�Ƃ͌����Ă����܂����B���ׂẴA���S���Y���ÍA���Ȃ��Ƃ�1�‚̃f�[�^�ɑ΂��ĉ������s�����ƂɂȂ��Ă��܂��B +‚ǂ̒iŠK‚ÅŒ©‚Ä‚àAƒf[ƒ^‚Í‚¤‚Ü‚­ÝŒv‚³‚ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŽå‚ÈŠÖSŽ–‚Å‚·BƒrƒWƒlƒXƒAƒiƒŠƒXƒg‚ªŒÚ‹q‚Ì—v‹‚©‚ç‚ǂ̂悤‚É—vŒ‚ðŽæ“¾‚µ‚Ä‚¢‚é‚©‚ðÚ‚µ‚­Œ©‚ê‚ÎAƒf[ƒ^‚ªŠî–{“I‚È–ðŠ„‚ð‰Ê‚½‚·‚±‚Æ‚ª‚í‚©‚è‚Ü‚·BƒAƒiƒŠƒXƒg‚Í‚¢‚í‚ä‚éƒf[ƒ^ƒtƒ[ƒ_ƒCƒAƒOƒ‰ƒ€‚ð쬂µA‚·‚ׂẴf[ƒ^ƒ\[ƒX‚ªŽ¯•Ê‚³‚êAî•ñƒtƒ[‚ªŒ`¬‚³‚ê‚Ü‚·B‚ǂ̃f[ƒ^‚ðƒVƒXƒeƒ€‚̈ꕔ‚É‚·‚é‚©‚𖾊m‚É‚µ‚½ã‚ÅAƒf[ƒ^ƒx[ƒXŠÖŒWAƒf[ƒ^ŒðŠ·ƒvƒƒgƒRƒ‹A‚¨‚æ‚уtƒ@ƒCƒ‹Œ`Ž®‚ÌŠÏ“_‚©‚çAÝŒvŽÒ‚̓f[ƒ^ƒ\[ƒX‚ð®Œ`‚µ‚ăvƒƒOƒ‰ƒ}‚É“n‚·€”õ‚ª®‚¢‚Ü‚·B‚µ‚©‚µAƒvƒƒZƒX‚͂܂¾I‚í‚Á‚Ä‚¢‚Ü‚¹‚ñB‚±‚Ì“O’ꂵ‚½ƒf[ƒ^ô—ûƒvƒƒZƒX‚ÌŒã‚Å‚ ‚Á‚Ä‚àiƒvƒƒOƒ‰ƒ}jA‰Â”\‚ÈŒÀ‚èŗǂ̕û–@‚Ńf[ƒ^‚ð•ªÍ‚·‚é•K—v‚ª‚ ‚é‚©‚ç‚Å‚·B‚ ‚È‚½‚ÌŽdŽ–‚ÌÅIs‚ÍA‚¢‚­‚‚©‚ÌŒ¾Œê‚Ì•ƒ‚Å‚ ‚éNiklaus Wirth‚Ì’†ŠjƒƒbƒZ[ƒW‚Å‚·B "ƒAƒ‹ƒSƒŠƒYƒ€+ƒf[ƒ^\‘¢=ƒvƒƒOƒ‰ƒ€"’P“ƂŃAƒ‹ƒSƒŠƒYƒ€‚𗧂Ă邱‚Ƃ͌ˆ‚µ‚Ä‚ ‚è‚Ü‚¹‚ñB‚·‚ׂẴAƒ‹ƒSƒŠƒYƒ€‚ÍA­‚È‚­‚Æ‚à1‚‚̃f[ƒ^‚ɑ΂µ‚ĉ½‚©‚ðs‚¤‚±‚ƂɂȂÁ‚Ä‚¢‚Ü‚·B -���������ÄA�A���S���Y���Í^���Ŏԗւ����]�����Ȃ��̂ÅA���l�����Ȃ��̂��߂ɓ��肵���f�[�^�ƃR�[�h���������߂��̂ɕK�v�ȃf�[�^�̗����ð•ªÍ‚����K�v�������܂��B�ȒP�ȗ��łÍA���肪���薾�m�ɂȂ��܂��B���C�u�����̌������[�`�����������Ă��܂��B���Ȃ��̎d�l�ɂ����ÆA���[�U�[�̓W�������A���ÒA�^�C�g���A�o�ŎÐA�����N�A�y�[�W���̑g�Ý��킹�Å��Ђ��I���ł��܂��B���[�`���ÌÅI�I�ȖڕW�ÍA�o�b�N�G���h�E�f�[�^�x�[�X���������邽�߂Ì�����SQL���ð¶ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ł��B�������̗v���Ɋ��Â��ÄA�����‚��̑I�����������܂��B�uswitch�v�X�e�[�g�����g�A�܂��͕����Ìuif�v�X�e�[�g�����g���g�p���ÄA�e�R���g���[�������ԂɃ`�F�b�N���܂��B�f�[�^�R���g���[���̔z�����ì¬ï¿½ï¿½ï¿½A�e�v�f���ݒ肳���Ă��邩�ǂ����`�F�b�N���܂��B���ׂĂ̓����̃R���g���[�����p�����钊�ۃR���g���[���I�u�W�F�N�g���ì¬ï¿½i�܂��͎g�p�j���A���������C�x���g�h���u���G���W���Éڑ����܂��B�v���ɓ����Ì����Å��ڂ��`�F�b�N�����Ă��邱�Ƃ��m�F���ÄA�N�G���̃p�t�H�[�}���X���`���[�j���O���邱�Ƃ��K�v�Èê‡ï¿½ÍA�R���|�[�l���g�̃c���[���g�p����SQL�����ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��������邱�Ƃ��ł��܂��B�����̂Ƃ����A�A���S���Y���̑I���ÍA�g�p�����A�܂��Íì¬ï¿½ï¿½ï¿½ï¿½ï¿½f�[�^�ɂ����ĈقȂ��܂��B���̂悤�Ȍ����ÍA�����I�ȃA���S���Y���ƔߎS�ȃA���S���Y���Ƃ̊Ԃ̂��ׂĂ̈Ⴂ�ð¶‚��������”\���������B�������A�������������O�����ł͂����܂����B���Ȃ��ÍA���Ȃ��̃R�[�h�ɖ��O�t���̕Ï���12�Žg�p���A�����܂łǂ��������I�ɂ��邱�Ƃ��ł��܂��B�������A���̂悤�ȃR�[�h�͊ȒP�ɕێ��ł��Ȃ����������܂����B�����炭�A�Ï��̓K�؂ȃR���e�i���I�����邱�Ƃœ����X�s�[�h���ۂ‚��Ƃ��ł��A�����ÉA���N�ɂÍA�������R�[�h�������悭�����ł����悤�ɂȂ��܂��B�����ÉA���m�ɒ��`���ꂽ�f�[�^�\�����I�����邱�ƂÅA�R�[�h�Ì����������s�킸�ɃR�[�h�̋@�\���g�����邱�Ƃ��ł��܂��B�����I�ɂÍA�f�[�^�̑I���ɂ����ÄA�R�[�h�ÌI�����ɃR�[�h�������������Ԃ����܂��܂��B�������‚̗��������Ă݂܂��傤�B�v�l�̂��߂ÌH�ו��͂������������܂��B�A�i�O�����������������̕ʂ̒P���łȂ����΂Ȃ��Ȃ��A3�ˆÈ��̃A�i�O���������Ž����̂��ׂĂ̒P�������‚��邱�Ƃ����Ȃ��̎d���ł����Ƃ��܂��傤�B�������v�Z�̎d���Æl�����Ȃ��ÎA���Ȃ��͖����̓w�͂ÉI�����A�e�P���̂��ׂĂ̑g�Ý��킹�������ÄA���������X�g�̑��̒P���Ɣ��r���悤�Ƃ��܂��B�������A�茳�̃f�[�^�ð•ªÍ‚����ÆA�P�ꂻ�̂��̂Ƃ��̕����̃\�[�g���ꂽ�z����ID�Ƃ��Ċ܂ރ��R�[�h�Ŋe�P�����\�����Ƃ��ł��܂��B���̂悤�Ȓm�����g�ɂ‚��ÄA�A�i�O���������‚��邱�ƂÍA�lj��̃t�B�[���h���X�g���\�[�g���A����ID�����L�������̂��I�Ԃ��Ƃ��Ӗ����܂��B�u���[�g�t�H�[�X�A���S���Y���ÍA���s�É��������邱�Ƃ������܂����A�X�}�[�g�ȃA���S���Y���͂ق��Ì��b�ł��B��������ɒ��ʂ��Ă��邱�̗����o���������������B +‚µ‚½‚ª‚Á‚ÄAƒAƒ‹ƒSƒŠƒYƒ€‚Í^‹ó‚ÅŽÔ—Ö‚ð‰ñ“]‚³‚¹‚È‚¢‚Ì‚ÅA‘¼l‚ª‚ ‚È‚½‚Ì‚½‚߂ɓÁ’肵‚½ƒf[ƒ^‚ƃR[ƒh‚ð‘‚«—¯‚ß‚é‚̂ɕK—v‚ȃf[ƒ^‚Ì—¼•û‚ð•ªÍ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŠÈ’P‚È—á‚Å‚ÍA–â‘肪‚æ‚è–¾Šm‚ɂȂè‚Ü‚·Bƒ‰ƒCƒuƒ‰ƒŠ‚ÌŒŸõƒ‹[ƒ`ƒ“‚ðŽÀ‘•‚µ‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ÌŽd—l‚É‚æ‚邯Aƒ†[ƒU[‚̓Wƒƒƒ“ƒ‹A’˜ŽÒAƒ^ƒCƒgƒ‹Ao”ÅŽÐAˆóü”NAƒy[ƒW”‚Ì‘g‚݇‚킹‚őЂð‘I‘ð‚Å‚«‚Ü‚·Bƒ‹[ƒ`ƒ“‚ÌÅI“I‚È–Ú•W‚ÍAƒoƒbƒNƒGƒ“ƒhEƒf[ƒ^ƒx[ƒX‚ðŒŸõ‚·‚邽‚߂̳“–‚ÈSQL•¶‚𶬂·‚邱‚Ƃł·B‚±‚ê‚ç‚Ì—vŒ‚ÉŠî‚¢‚ÄA‚¢‚­‚‚©‚Ì‘I‘ðŽˆ‚ª‚ ‚è‚Ü‚·BuswitchvƒXƒe[ƒgƒƒ“ƒgA‚Ü‚½‚Í•¡”‚ÌuifvƒXƒe[ƒgƒƒ“ƒg‚ðŽg—p‚µ‚ÄAŠeƒRƒ“ƒgƒ[ƒ‹‚ð‡”ԂɃ`ƒFƒbƒN‚µ‚Ü‚·Bƒf[ƒ^ƒRƒ“ƒgƒ[ƒ‹‚Ì”z—ñ‚ð쬂µAŠe—v‘f‚ªÝ’肳‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN‚µ‚Ü‚·B‚·‚ׂĂ̓Á’è‚̃Rƒ“ƒgƒ[ƒ‹‚ðŒp³‚·‚é’ŠÛƒRƒ“ƒgƒ[ƒ‹ƒIƒuƒWƒFƒNƒg‚ðì¬i‚Ü‚½‚ÍŽg—pj‚µA‚»‚ê‚ç‚ðƒCƒxƒ“ƒgƒhƒŠƒuƒ“ƒGƒ“ƒWƒ“‚ÉÚ‘±‚µ‚Ü‚·B—vŒ‚É“Á’è‚̇˜‚Å€–Ú‚ªƒ`ƒFƒbƒN‚³‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚ÄAƒNƒGƒŠ‚̃pƒtƒH[ƒ}ƒ“ƒX‚ðƒ`ƒ…[ƒjƒ“ƒO‚·‚邱‚Æ‚à•K—v‚ÈꇂÍAƒRƒ“ƒ|[ƒlƒ“ƒg‚̃cƒŠ[‚ðŽg—p‚µ‚ÄSQL•¶‚ð쬂·‚邱‚Æ‚ðŒŸ“¢‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚²——‚̂Ƃ¨‚èAƒAƒ‹ƒSƒŠƒYƒ€‚Ì‘I‘ð‚ÍAŽg—p‚·‚éA‚Ü‚½‚Í쬂·‚éƒf[ƒ^‚É‚æ‚Á‚ĈقȂè‚Ü‚·B‚±‚̂悤‚ÈŒˆ’è‚ÍAŒø—¦“I‚ȃAƒ‹ƒSƒŠƒYƒ€‚ƔߎS‚ȃAƒ‹ƒSƒŠƒYƒ€‚Ƃ̊Ԃ̂·‚ׂĂ̈Ⴂ‚ð¶‚¶‚³‚¹‚é‰Â”\«‚ª‚ ‚éB‚µ‚©‚µAŒø—¦‚¾‚¯‚ªŒœ”OŽ–€‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ÍA‚ ‚È‚½‚̃R[ƒh‚É–¼‘O•t‚«‚̕ϔ‚ð12ŒÂŽg—p‚µA‚±‚ê‚܂łǂ¨‚èŒø—¦“I‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚µ‚©‚µA‚»‚̂悤‚ȃR[ƒh‚ÍŠÈ’P‚ɕێç‚Å‚«‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¨‚»‚ç‚­A•Ï”‚Ì“K؂ȃRƒ“ƒeƒi‚ð‘I‘ð‚·‚é‚±‚Ƃœ¯‚¶ƒXƒs[ƒh‚ð•ۂ‚±‚Æ‚ª‚Å‚«A‚³‚ç‚ÉA—ˆ”N‚É‚ÍA“¯—»‚ªƒR[ƒh‚ð‚æ‚è‚æ‚­—‰ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚·B‚³‚ç‚ÉA–¾Šm‚É’è‹`‚³‚ꂽƒf[ƒ^\‘¢‚ð‘I‘ð‚·‚é‚±‚Æ‚ÅAƒR[ƒh‚Ì‘‚«Š·‚¦‚ðs‚킸‚ɃR[ƒh‚Ì‹@”\‚ðŠg’£‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B’·Šú“I‚É‚ÍAƒf[ƒ^‚Ì‘I‘ð‚É‚æ‚Á‚ÄAƒR[ƒh‚ÌI—¹Œã‚ɃR[ƒh‚ª‘¶‘±‚·‚éŠúŠÔ‚ªŒˆ‚Ü‚è‚Ü‚·B‚à‚¤ˆê‚‚̗á‚ð‹“‚°‚Ă݂܂µ‚傤BŽvl‚Ì‚½‚ß‚ÌH‚ו¨‚Í‚à‚¤­‚µ‚ ‚è‚Ü‚·BƒAƒiƒOƒ‰ƒ€‚ª“¯‚¶Ž«‘“à‚̕ʂ̒PŒê‚łȂ¯‚ê‚΂Ȃç‚È‚¢A3‚ˆÈã‚̃AƒiƒOƒ‰ƒ€‚ðŽ‚ÂŽ«‘‚Ì‚·‚ׂĂ̒PŒê‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚ ‚È‚½‚ÌŽdŽ–‚Å‚ ‚邯‚µ‚Ü‚µ‚傤B‚»‚ê‚ðŒvŽZ‚ÌŽdŽ–‚Æl‚¦‚é‚È‚ç‚ÎA‚ ‚È‚½‚Í–³ŒÀ‚Ì“w—Í‚ÉI‚í‚èAŠe’PŒê‚Ì‚·‚ׂĂ̑g‚݇‚킹‚ðŽŽ‚µ‚ÄA‚»‚ê‚ðƒŠƒXƒg‚Ì‘¼‚Ì’PŒê‚Æ”äŠr‚µ‚悤‚Æ‚µ‚Ü‚·B‚µ‚©‚µAŽèŒ³‚̃f[ƒ^‚ð•ªÍ‚·‚邯A’PŒê‚»‚Ì‚à‚̂Ƃ»‚Ì•¶Žš‚̃\[ƒg‚³‚ꂽ”z—ñ‚ðID‚Æ‚µ‚Ċ܂ރŒƒR[ƒh‚ÅŠe’PŒê‚ð•\‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚̂悤‚È’mޝ‚ðg‚ɂ‚¯‚ÄAƒAƒiƒOƒ‰ƒ€‚ðŒ©‚Â‚¯‚邱‚Æ‚ÍA’ljÁ‚̃tƒB[ƒ‹ƒh‚ÅƒŠƒXƒg‚ðƒ\[ƒg‚µA“¯‚¶ID‚ð‹¤—L‚·‚é‚à‚Ì‚ð‘I‚Ô‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·Bƒuƒ‹[ƒgƒtƒH[ƒXƒAƒ‹ƒSƒŠƒYƒ€‚ÍAŽÀs‚É”“ú‚©‚©‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚ªAƒXƒ}[ƒg‚ȃAƒ‹ƒSƒŠƒYƒ€‚͂قñ‚Ì”•b‚Å‚·B“‚¢–â‘è‚É’¼–Ê‚µ‚Ä‚¢‚邱‚Ì—á‚ðŠo‚¦‚Ä‚¨‚¢‚Ä‚­‚¾‚³‚¢B Next [Team Skills - How to Manage Development Time](../Team-Skills/01-How-to-Manage-Development-Time.md) diff --git a/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index a9215ea..44ae1d7 100644 --- a/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/jp/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -1,11 +1,11 @@ # How to Manage Development Time [//]: # (Version:1.0.0) -�J�����Ԃ��Ǘ����邽�߂ÉA�Ȍ��ÅÅV�̃v���W�F�N�g�v�����ێ������B�v���W�F�N�g�v���ƂÍA�����A�X�P�W���[���A�i�s�󋵂������}�C���X�g�[���A���ς��̊e�^�X�N�ւ̎����̃`�[���܂��͎����̎��Ԃ̊��蓖�Ăł��B�iï¿½ï¿½ï¿½ÛØ’S���҂Ƃ̖ʒk�A�h�L�������e�[�V�����Ì����A�@���̒����ȂÇA�Y���Ă͂Ȃ��Ȃ����Ƃ������܂��B�`�[���ɎQ���������ê‡ï¿½A�v���W�F�N�g�̌v���ÍA�J�n���ÆI�����̗����Å��ӂ������ӂłȂ����΂Ȃ��܂����B +ŠJ”­ŽžŠÔ‚ðŠÇ—‚·‚邽‚ß‚ÉAŠÈŒ‰‚ÅÅV‚̃vƒƒWƒFƒNƒgŒv‰æ‚ðˆÛŽ‚·‚éBƒvƒƒWƒFƒNƒgŒv‰æ‚Æ‚ÍAŒ©Ï‚à‚èAƒXƒPƒWƒ…[ƒ‹Aisó‹µ‚ðŽ¦‚·ƒ}ƒCƒ‹ƒXƒg[ƒ“AŒ©Ï‚è‚ÌŠeƒ^ƒXƒN‚Ö‚ÌŽ©•ª‚̃`[ƒ€‚Ü‚½‚ÍŽ©•ª‚ÌŽžŠÔ‚ÌŠ„‚è“–‚Ăł·B•iŽ¿•ÛØ’S“–ŽÒ‚Ƃ̖ʒkAƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚Ì€”õA‹@Ší‚Ì’•¶‚È‚ÇA–Y‚ê‚Ă͂Ȃç‚È‚¢‚±‚Æ‚à‚ ‚è‚Ü‚·Bƒ`[ƒ€‚ÉŽQ‰Á‚µ‚Ä‚¢‚éê‡AƒvƒƒWƒFƒNƒg‚ÌŒv‰æ‚ÍAŠJŽnŽž‚ÆI—¹Žž‚Ì—¼•û‚ŇˆÓ‚µ‚½‡ˆÓ‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -�v���W�F�N�g�v���ÍA���Ȃ����ǂ̂悤�ɑg�D�������Ă��邩�������̂ł͂Ȃ��A�ӎv�������x�����邽�߂ɑ��݂��܂��B�v���W�F�N�g�v�悪�������邩�ÅV�łȂ��ê‡ï¿½A�ӎv�����ɂ͖��ɗ����Ȃ��ł��傤�B���ۂɂÍA�������̌����͌Âl�Ɋւ������̂ł��B�v���Ƃ��Ȃ��̔��f�ÍA�d���������l�����ʂÌl�Ɉڂ��ׂ����ǂ��������肳���܂��B�}�C���X�g�[���͂��Ȃ��Ìi���������܂��B�t�@���V�[�ȃv���W�F�N�g�v���c�[�����g�p�������ê‡ï¿½ÍA�v���W�F�N�g��Big Design Up Front�iBDUF�j���ì¬ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚ɘf�킳�����̂ł͂Ȃ��A�������g�p���ĊȌ��ÅÅV�Ì��Ԃ��ێ����܂��B +ƒvƒƒWƒFƒNƒgŒv‰æ‚ÍA‚ ‚È‚½‚ª‚ǂ̂悤‚É‘gD‰»‚³‚ê‚Ä‚¢‚é‚©‚ðŽ¦‚·‚̂ł͂Ȃ­AˆÓŽvŒˆ’è‚ðŽx‰‡‚·‚邽‚߂ɑ¶Ý‚µ‚Ü‚·BƒvƒƒWƒFƒNƒgŒv‰æ‚ª’·‚·‚¬‚é‚©ÅV‚łȂ¢ê‡AˆÓŽvŒˆ’è‚ɂ͖ð‚É—§‚½‚È‚¢‚Å‚µ‚傤BŽÀÛ‚É‚ÍA‚±‚ê‚ç‚ÌŒˆ’è‚ÍŒÂl‚ÉŠÖ‚·‚é‚à‚̂ł·BŒv‰æ‚Æ‚ ‚È‚½‚Ì”»’f‚ÍAŽdŽ–‚ð‚ ‚él‚©‚ç•Ê‚Ìl‚Ɉڂ·‚ׂ«‚©‚Ç‚¤‚©‚ðŒˆ’è‚³‚¹‚Ü‚·Bƒ}ƒCƒ‹ƒXƒg[ƒ“‚Í‚ ‚È‚½‚Ìi•à‚ðŽ¦‚µ‚Ü‚·Bƒtƒ@ƒ“ƒV[‚ȃvƒƒWƒFƒNƒgŒv‰æƒc[ƒ‹‚ðŽg—p‚µ‚Ä‚¢‚éꇂÍAƒvƒƒWƒFƒNƒg‚ÌBig Design Up FrontiBDUFj‚ð쬂·‚é‚̂ɘf‚킳‚ê‚é‚̂ł͂Ȃ­A‚»‚ê‚ðŽg—p‚µ‚ÄŠÈŒ‰‚ÅÅV‚Ìó‘Ô‚ðˆÛŽ‚µ‚Ü‚·B -�}�C���X�g�[�������������ê‡ï¿½ÍA���i�ɂ��̃v���W�F�N�g�̗\�芮�������̋��z���������������Ƃ��m�点���ȂÇA�����És�������K�v�������܂��B���ς����ƃX�P�W���[���ÍA�����Ċ����Ȃ��̂ł͂Ȃ��������������܂����B�����ÍA���Ȃ����v���W�F�N�g�̌㔼�Ō��Ȃ��������₤���Ƃ��ł����Ƃ������o�������o���܂��B�������������Ȃ��B�������A���Ȃ����������ߑ��]�����Ă����Ƃ������Ƃ����Ȃ����ß��]�����Ă����”\���������܂��B���������ÄA���Ȃ����D�����ۂ��ɂ������炸�A�v�悳�ꂽ�v���W�F�N�g�̊����͂��łɃX���b�v���Ă��܂��B +ƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªŒ‡‚¯‚Ä‚¢‚éꇂÍAãŽi‚É‚»‚̃vƒƒWƒFƒNƒg‚Ì—\’芮—¹‚ª‚»‚Ì‹àŠz‚¾‚¯•´Ž¸‚µ‚½‚±‚Æ‚ð’m‚点‚é‚È‚ÇA‚·‚®‚És“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŒ©Ï‚à‚è‚ÆƒXƒPƒWƒ…[ƒ‹‚ÍAŒˆ‚µ‚ÄŠ®àø‚È‚à‚̂ł͂Ȃ©‚Á‚½‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚±‚ê‚ÍA‚ ‚È‚½‚ªƒvƒƒWƒFƒNƒg‚̌㔼‚ÅŒ‡È‚µ‚½“ú‚ð•₤‚±‚Æ‚ª‚Å‚«‚邯‚¢‚¤öŠo‚ðì‚èo‚µ‚Ü‚·B‚»‚¤‚©‚à‚µ‚ê‚È‚¢B‚µ‚©‚µA‚ ‚È‚½‚ª‚»‚ê‚ð‰ß‘å•]‰¿‚µ‚Ä‚¢‚邯‚¢‚¤‚±‚Æ‚ð‚ ‚È‚½‚ª‰ß¬•]‰¿‚µ‚Ä‚¢‚é‰Â”\«‚à‚ ‚è‚Ü‚·B‚µ‚½‚ª‚Á‚ÄA‚ ‚È‚½‚ªD‚«‚©”Û‚©‚É‚©‚©‚í‚炸AŒv‰æ‚³‚ꂽƒvƒƒWƒFƒNƒg‚ÌŠ®—¹‚Í‚·‚łɃXƒŠƒbƒv‚µ‚Ä‚¢‚Ü‚·B -�����`�[���~�[�e�B���O�A�f���A�������A�\�肳�ꂽ�����I�Ȋ����A�����e�X�g�A�O���҂Ƃ̑Î��A�a�C�A�x�ÉA�������i�̃����e�i���X�A�J���‹��̃����e�i���X�ȂÇA�v���Ɏ��Ԃ��܂܂��Ă��邱�Ƃ��m�F�����������B�v���W�F�N�g�v���ÍA���Ȃ��₠�Ȃ��̃`�[���������Ă��邱�Ƃ��O���҂����i�Ɍ��������@�Ƃ��Ė𗧂��܂��B���̂��ßA�Z���ԂÅÅV�̂��̂ɂ����K�v�������܂��B +“à•”ƒ`[ƒ€ƒ~[ƒeƒBƒ“ƒOAƒfƒ‚A•¶‘‰»A—\’肳‚ꂽ’èŠú“I‚ÈŠˆ“®A“‡ƒeƒXƒgAŠO•”ŽÒ‚Ƃ̑ΈA•a‹CA‹x‰ÉAŠù‘¶»•i‚̃ƒ“ƒeƒiƒ“ƒXAŠJ”­ŠÂ‹«‚̃ƒ“ƒeƒiƒ“ƒX‚È‚ÇAŒv‰æ‚ÉŽžŠÔ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢BƒvƒƒWƒFƒNƒgŒv‰æ‚ÍA‚ ‚È‚½‚â‚ ‚È‚½‚̃`[ƒ€‚ª‚â‚Á‚Ä‚¢‚邱‚Æ‚ðŠO•”ŽÒ‚âãŽi‚ÉŒ©‚¹‚é•û–@‚Æ‚µ‚Ä–ð—§‚¿‚Ü‚·B‚±‚Ì‚½‚ßA’ZŠúŠÔ‚ÅÅV‚Ì‚à‚̂ɂ·‚é•K—v‚ª‚ ‚è‚Ü‚·B Next [How to Manage Third-Party Software Risks](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index ba849cd..470d295 100644 --- a/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/jp/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -1,11 +1,11 @@ # How to Manage Third-Party Software Risks [//]: # (Version:1.0.0) -�v���W�F�N�g�͂��΂��ÎA�Ǘ����Ă��Ȃ��g�D�ɂ����Äì¬ï¿½ï¿½ï¿½ê‚½ï¿½\�t�g�E�F�A�Ɉˑ����܂��B�֌W���邷�ׂĂÌl���F�����Ȃ����΂Ȃ��Ȃ����O�҂̃\�t�g�E�F�A�ɂ͑傫�ȃ��X�N�������܂��B +ƒvƒƒWƒFƒNƒg‚Í‚µ‚΂µ‚ÎAŠÇ—‚µ‚Ä‚¢‚È‚¢‘gD‚É‚æ‚Á‚Ä쬂³‚ꂽƒ\ƒtƒgƒEƒFƒA‚Ɉˑ¶‚µ‚Ü‚·BŠÖŒW‚·‚é‚·‚ׂĂÌl‚ª”Fޝ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‘æŽOŽÒ‚̃\ƒtƒgƒEƒFƒA‚ɂ͑傫‚ÈƒŠƒXƒN‚ª‚ ‚è‚Ü‚·B -�����ÄA���C�ɂǂ��Ȋ��]�����Ă͂����܂����B Vapor�ÍA�ñ‘©‚����Ă��邪�܂����p�”\�ł͂Ȃ��Ǝ咣�����Ă����\�t�g�E�F�A�̂��Ƃł��B�����Íň��̕��@�ł��B�����̋@�\�������������Ì��i�������̓��t�Ƀ����[�X�����Ƃ����\�t�g�E�F�A���Ƃ̖ñ‘©‚��P�ɉ��^�I�ɂ����̂͌����ł͂Ȃ��B���������S�ɖ������A���Ȃ��������𕷂������Ƃ��Y���邱�Ƃ͂����ƌ����ł��B���Ȃ��̉��Ђ��g�p�����é‘�ނÉ������߂Ă͂����܂����B +Œˆ‚µ‚ÄAö‹C‚ɂǂñ‚ÈŠó–]‚à‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñB Vapor‚ÍA–ñ‘©‚³‚ê‚Ä‚¢‚邪‚Ü‚¾—˜—p‰Â”\‚ł͂Ȃ¢‚ÆŽå’£‚³‚ê‚Ä‚¢‚éƒ\ƒtƒgƒEƒFƒA‚Ì‚±‚Ƃł·B‚±‚ê‚Íň«‚Ì•û–@‚Å‚·B“Á’è‚Ì‹@”\‚ð”õ‚¦‚½“Á’è‚Ì»•i‚ð“Á’è‚Ì“ú•t‚ÉƒŠƒŠ[ƒX‚·‚邯‚¢‚¤ƒ\ƒtƒgƒEƒFƒAŠé‹Æ‚Ì–ñ‘©‚ð’P‚ɉù‹^“I‚É‚·‚é‚̂͌«–¾‚ł͂Ȃ¢B‚»‚ê‚ðŠ®‘S‚É–³Ž‹‚µA‚ ‚È‚½‚ª‚»‚ê‚ð•·‚¢‚½‚±‚Æ‚ð–Y‚ê‚邱‚Ƃ͂¸‚Á‚ÆŒ«–¾‚Å‚·B‚ ‚È‚½‚̉ïŽÐ‚ªŽg—p‚µ‚Ä‚¢‚é‘—Þ‚É‘‚«—¯‚߂Ă͂¢‚¯‚Ü‚¹‚ñB -�T�[�h�p�[�e�B�̃\�t�g�E�F�A���͊����Ă��Ȃ��ê‡ï¿½Å‚��A�����͂܂��댯�ł����A���Ȃ��Ƃ������͎����g�ނ��Ƃ��ł��郊�X�N�ł��B�T�[�h�p�[�e�B�̃\�t�g�E�F�A���g�p���邱�Ƃ��������Ă����ê‡ï¿½ÍA�����ɕ]�����ĕ]�������K�v�������܂��B�l�X�ÍA3�‚Ì��i�̂��ꂼ���ɂ‚��ēK�Øï¿½ï¿½ï¿½ï¿½]�������̂�2�T�Ԃ�2�����������ƕ����Ă��Ȃ����������܂��ñ‚ªA�”\�Ȍ��è‘���s���K�v�������܂��B�K�؂ȕ]���Ȃ��ÉA�����̃R�X�g�ð³Šm�É��肷�邱�Ƃ͂ł��܂����B +ƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ªŒÍЉ‚µ‚Ä‚¢‚È‚¢ê‡‚Å‚àA‚»‚ê‚͂܂¾ŠëŒ¯‚Å‚·‚ªA­‚È‚­‚Æ‚à‚»‚ê‚ÍŽæ‚è‘g‚Þ‚±‚Æ‚ª‚Å‚«‚郊ƒXƒN‚Å‚·BƒT[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒA‚ðŽg—p‚·‚邱‚Æ‚ðŒŸ“¢‚µ‚Ä‚¢‚éꇂÍA‘Šú‚É•]‰¿‚µ‚Ä•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BlX‚ÍA3‚‚̻•i‚Ì‚»‚ꂼ‚ê‚ɂ‚¢‚Ä“KØ«‚ð•]‰¿‚·‚é‚Ì‚É2TŠÔ‚©2‚©ŒŽ‚©‚©‚邯•·‚¢‚Ä‚¢‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‰Â”\‚ÈŒÀ‚è‘‚­s‚¤•K—v‚ª‚ ‚è‚Ü‚·B“K؂ȕ]‰¿‚È‚µ‚ÉA“‡‚̃RƒXƒg‚ð³Šm‚É„’è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -�����̖ړI�̂��߂̊����̃T�[�h�p�[�e�B�\�t�g�E�F�A�̓K�����ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚ÍA�����ɕ����I�Ȓm���ł��B�����͔����Ɏ��ϓI�ÅA���ʂÉ����Ƃɋ��Z���Ă��܂��B�������Ì����Ƃ����‚��邱�Ƃ��ł����ÎA�����̎��Ԃ��ߖ��ł��܂��B�����Ìê‡ï¿½A�v���W�F�N�g�̓T�[�h�p�[�e�B�̃\�t�g�E�F�A�V�X�e���Ɉˑ����邽�ßA���������s�����ƃv���W�F�N�g�͎��s���܂��B���̂悤�ȃ��X�N���X�P�W���[���Å��ʂŖ��m�ɕ\�������������B���X�N�ð‘Šï¿½ï¿½É����ł��Ȃ��ê‡ï¿½ÍA�g�p�”\�ȕʂ̃V�X�e�����@�\�������Åì¬ï¿½ï¿½ï¿½ï¿½ï¿½È‚ÇA�ً}���Ή��v���𗧂ĂĂ��������B�X�P�W���[���Í��C�Ɉˑ����Ȃ��悤�ɂ��Ă��������B +“Á’è‚Ì–Ú“I‚Ì‚½‚߂̊ù‘¶‚̃T[ƒhƒp[ƒeƒBƒ\ƒtƒgƒEƒFƒA‚Ì“K‡«‚ð—‰ð‚·‚邱‚Æ‚ÍA”ñí‚É•”‘°“I‚È’mޝ‚Å‚·B‚»‚ê‚Í”ñí‚ÉŽåŠÏ“I‚ÅAˆê”Ê‚Éê–副‚É‹Z‚µ‚Ä‚¢‚Ü‚·B‚»‚ê‚ç‚Ìê–副‚ðŒ©‚Â‚¯‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA‘½‚­‚ÌŽžŠÔ‚ðß–ñ‚Å‚«‚Ü‚·B‘½‚­‚Ìê‡AƒvƒƒWƒFƒNƒg‚̓T[ƒhƒp[ƒeƒB‚̃\ƒtƒgƒEƒFƒAƒVƒXƒeƒ€‚Ɉˑ¶‚·‚邽‚ßA“‡‚ªŽ¸”s‚·‚邯ƒvƒƒWƒFƒNƒg‚ÍŽ¸”s‚µ‚Ü‚·B‚»‚̂悤‚ÈƒŠƒXƒN‚ðƒXƒPƒWƒ…[ƒ‹‚Å‘–ʂŖ¾Šm‚É•\Œ»‚µ‚Ä‚­‚¾‚³‚¢BƒŠƒXƒN‚ð‘Šú‚Éœ‹Ž‚Å‚«‚È‚¢ê‡‚ÍAŽg—p‰Â”\‚ȕʂ̃VƒXƒeƒ€‚â‹@”\‚ðŽ©•ª‚Å쬂·‚é‚È‚ÇA‹Ù‹}Žž‘ΉžŒv‰æ‚𗧂ĂĂ­‚¾‚³‚¢BƒXƒPƒWƒ…[ƒ‹‚Íö‹C‚Ɉˑ¶‚µ‚È‚¢‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Manage Consultants](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md index bc39125..b0cbb82 100644 --- a/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md +++ b/jp/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -1,9 +1,9 @@ # How to Manage Consultants [//]: # (Version:1.0.0) -�R���T���^���g���g�p���܂����A�����ɗ����Ȃ��ł��������B�ނ��͂��΂炵���l�X�ł����A�傢�ɑ��h�������ׂ��ł��B�ނ��͑����̈قȂ��v���W�F�N�g�����Ă����̂ÅA�����̃e�N�m���W���v���O���~���O�e�N�j�b�N�ɂ‚��Ă̒m�����A���Ȃ��̂��̂��������΂��Ε������܂��B���������g�p�����őP�̕��@�ÍA���t���Г��ŋ����邱�Ƃ��ł����悤�ɂ��邱�Ƃł��B +ƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ðŽg—p‚µ‚Ü‚·‚ªA‚»‚ê‚É—Š‚ç‚È‚¢‚Å‚­‚¾‚³‚¢B”Þ‚ç‚Í‚·‚΂炵‚¢lX‚Å‚ ‚èA‘å‚¢‚É‘¸Œh‚³‚ê‚é‚ׂ«‚Å‚·B”Þ‚ç‚Í‘½‚­‚̈قȂéƒvƒƒWƒFƒNƒg‚ðŒ©‚Ä‚¢‚é‚Ì‚ÅA“Á’è‚̃eƒNƒmƒƒW‚âƒvƒƒOƒ‰ƒ~ƒ“ƒOƒeƒNƒjƒbƒN‚ɂ‚¢‚Ă̒mޝ‚ªA‚ ‚È‚½‚Ì‚à‚Ì‚æ‚è‚à‚µ‚΂µ‚Εª‚©‚è‚Ü‚·B‚»‚ê‚ç‚ðŽg—p‚·‚éÅ‘P‚Ì•û–@‚ÍA‹³Žt‚ªŽÐ“à‚Å‹³‚¦‚邱‚Æ‚ª‚Å‚«‚邿‚¤‚É‚·‚邱‚Ƃł·B -�������A�Ê��̋��݂Ǝ��݂��w�Ԃ̂É\���Ȏ��Ԃ��Ȃ����ßA�Ê��Ì]�ƈ��Ɠ������o�Ń`�[���ɎQ�����邱�Ƃ͂ł��܂����B�ނ��Ì����I�R�~�b�g�����g�͂͂邩�ɒႢ�ł��B�ނ��͂����ȒP�ɓ������Ƃ��ł��܂��B���Ђ����܂������Ȃ��A�ނ��̗��v�͂��܂蓾�����Ȃ����������܂����B�����‚��͗ǂ��A�����‚��͕��ςÅA�����‚��͈����ł����A���Ȃ��̃R���T���^���g�̑I���͂��Ȃ��Ì]�ƈ��̑I���قÇT�d�ł͂Ȃ��ł��傤�A���Ȃ��͈������̂𓾂��ł��傤�B +‚µ‚©‚µA’Êí‚Ì‹­‚݂Ǝã‚Ý‚ðŠw‚Ô‚Ì‚É\•ª‚ÈŽžŠÔ‚ª‚È‚¢‚½‚ßA’Êí‚Ì]‹Æˆõ‚Æ“¯‚¶Š´Šo‚Ń`[ƒ€‚ÉŽQ‰Á‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB”Þ‚ç‚Ìà­“IƒRƒ~ƒbƒgƒƒ“ƒg‚͂͂邩‚É’á‚¢‚Å‚·B”Þ‚ç‚Í‚æ‚èŠÈ’P‚É“®‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B‰ïŽÐ‚ª‚¤‚Ü‚­‚¢‚­‚È‚çA”Þ‚ç‚Ì—˜‰v‚Í‚ ‚܂蓾‚ç‚ê‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¢‚­‚‚©‚Í—Ç‚¢A‚¢‚­‚‚©‚Í•½‹Ï‚ÅA‚¢‚­‚‚©‚͈«‚¢‚Å‚·‚ªA‚ ‚È‚½‚̃Rƒ“ƒTƒ‹ƒ^ƒ“ƒg‚Ì‘I‘ð‚Í‚ ‚È‚½‚Ì]‹Æˆõ‚Ì‘I‘ð‚Ù‚ÇTd‚ł͂Ȃ¢‚Å‚µ‚傤A‚ ‚È‚½‚͈«‚¢‚à‚̂𓾂é‚Å‚µ‚傤B -�R���T���^���g���R�[�h�������‚����Ȃ��A�������T�d�Ɍ������Ȃ����΂Ȃ��܂����B���r���[�����Ă��Ȃ��傫�ȃR�[�h�u���b�N�̃��X�N�𔺂��v���W�F�N�g�ÌŌ��ɂ͓��B�ł��܂����B�����͎��ۂɂ͂��ׂẴ`�[�������o�[�ɓ��Ă͂܂��܂����A�Ê��͂��Ȃ��ɋ߂��`�[�������o�[�̒m���������܂��B +ƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ªƒR[ƒh‚ð‘‚­‚‚à‚è‚È‚çA‚»‚ê‚ðTd‚ÉŒŸ“¢‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBƒŒƒrƒ…[‚³‚ê‚Ä‚¢‚È‚¢‘å‚«‚ȃR[ƒhƒuƒƒbƒN‚ÌƒŠƒXƒN‚𔺂¤ƒvƒƒWƒFƒNƒg‚ÌÅŒã‚ɂ͓ž’B‚Å‚«‚Ü‚¹‚ñB‚±‚ê‚ÍŽÀۂɂ͂·‚ׂẴ`[ƒ€ƒƒ“ƒo[‚É“–‚Ă͂܂è‚Ü‚·‚ªA’Êí‚Í‚ ‚È‚½‚ɋ߂¢ƒ`[ƒ€ƒƒ“ƒo[‚Ì’mޝ‚ª‘‚¦‚Ü‚·B Next [How to Communicate the Right Amount](04-How-to-Communicate-the-Right-Amount.md) \ No newline at end of file diff --git a/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md index 636febc..b0daa68 100644 --- a/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md +++ b/jp/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -1,7 +1,7 @@ # How to Communicate the Right Amount [//]: # (Version:1.0.0) -�T�d�ɉ��c�����l�������������B ���̊��ԂɎQ���҂Ì����|����*���p���������܂��B ���c���K�v�Èê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚����A�Ê��Í��K�͂ł��B ���K�͂ȉ��c�ł̃R�~���j�P�[�V�����̎��͌��サ�A�S�̓I�ɖ��ʂɂȂ鎞�ԂÍ��Ȃ��Ȃ��܂��B ���c�ɒN�����ދ����Ă����ê‡ï¿½ÍA���c�������������ׂ��ł����Ƃ��������Ƃ��Ă����������B +Td‚ɉï‹c”ï‚ðl—¶‚µ‚Ä‚­‚¾‚³‚¢B ‚»‚ÌŠúŠÔ‚ÉŽQ‰ÁŽÒ‚Ì”‚ðŠ|‚¯‚½*”ï—p‚ª‚©‚©‚è‚Ü‚·B ‰ï‹c‚ª•K—v‚Èê‡‚à‚ ‚è‚Ü‚·‚ªA’Êí‚ͬ‹K–͂ł·B ¬‹K–͂ȉï‹c‚ł̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ÌŽ¿‚ÍŒüサA‘S‘Ì“I‚É–³‘ʂɂȂ鎞ŠÔ‚Í­‚È‚­‚È‚è‚Ü‚·B ‰ï‹c‚É’N‚©‚ª‘Þ‹ü‚µ‚Ä‚¢‚éꇂÍA‰ï‹c‚𬂳‚­‚·‚é‚ׂ«‚Å‚ ‚邯‚¢‚¤’›Œó‚Æ‚µ‚Ä‚±‚ê‚ðŽæ‚éB -�������̃R�~���j�P�[�V�����ð‘£i���邽�߂ɂÍA�”\�Ȍ����̂��Ƃ��s�����Ȃ����΂Ȃ��Ȃ��B �����֗��È��ƂÍA���̎��Ԃ����������Ƃ̃����`���És�����܂��B �����̊��Ƃ����̎������F���������T�|�[�g���Ă��Ȃ����Ƃ͎c�O�ł��B +”ñŒöŽ®‚̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ð‘£i‚·‚邽‚߂ɂÍA‰Â”\‚ÈŒÀ‚è‚Ì‚±‚Æ‚ªs‚í‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢B ‚æ‚è•Ö—˜‚Èì‹Æ‚ÍA‘¼‚ÌŽžŠÔ‚æ‚è‚à“¯—»‚Ƃ̃‰ƒ“ƒ`’†‚És‚í‚ê‚Ü‚·B ‘½‚­‚ÌŠé‹Æ‚ª‚±‚ÌŽ–ŽÀ‚ð”Fޝ‚µ‚½‚èƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢‚±‚Ƃ͎c”O‚Å‚·B Next [How to Disagree Honestly and Get Away with It](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md index afe61b8..7d35e8b 100644 --- a/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md +++ b/jp/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -1,11 +1,11 @@ # How to Disagree Honestly and Get Away with It [//]: # (Version:1.0.0) -�ӌ��̕s���v�͗ǂ����f���������D�̋@���ł����A�����É��������K�v�������܂��B���Ȃ����v�l���K�؂ɕ\�����A���肪���������O�ɕ������Ǝv�����Ƃ������Ă��܂��B���Ìê‡ï¿½Í‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Æ‚͂����܂����B���Ȃ��������ɓ��ӂ��Ȃ��Ă��A���Ȃ��������̔w���ɗ��‚��ǂ��������߂��ׂ��ł��B���Ȃ������ӂ��Ȃ��ɂ��������炸���̌������x�����邱�Ƃ��ł����ÎA���������Ȃ����B�����ÍA���Ȃ����Ɨ����Ă����A�C�G�X�E�}���ł͂Ȃ��A�����ƃ`�[���E�v���[���[�ð‘¸d���Ă��邽�ßA���Ȃ����ǂ��قNjM�d�Ȃ̂��������Ă��܂��B +ˆÓŒ©‚Ì•sˆê’v‚Í—Ç‚¢”»’f‚ð‚·‚éâD‚Ì‹@‰ï‚Å‚·‚ªA”÷–­‚Ɉ—‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ªŽvl‚ð“K؂ɕ\Œ»‚µAŒˆ’肪‰º‚³‚ê‚é‘O‚É•·‚¢‚½‚ÆŽv‚¤‚±‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B‚»‚Ìꇂ͉½‚àŒ¾‚¤‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ª‚»‚ê‚É“¯ˆÓ‚µ‚È‚­‚Ä‚àA‚ ‚È‚½‚ªŒˆ’è‚Ì”wŒã‚É—§‚‚©‚Ç‚¤‚©‚ðŒˆ‚ß‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚ª“¯ˆÓ‚µ‚È‚¢‚É‚à‚©‚©‚í‚炸‚±‚ÌŒˆ’è‚ðŽxŽ‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎA‚»‚¤Œ¾‚¢‚È‚³‚¢B‚±‚ê‚ÍA‚ ‚È‚½‚ª“Æ—§‚µ‚Ä‚¨‚èAƒCƒGƒXEƒ}ƒ“‚ł͂Ȃ­AŒˆ’è‚Æƒ`[ƒ€EƒvƒŒ[ƒ„[‚ð‘¸d‚µ‚Ä‚¢‚邽‚ßA‚ ‚È‚½‚ª‚Ç‚ê‚Ù‚Ç‹Md‚Ȃ̂©‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·B -�ӎv�����҂����Ȃ��̈ӌ����\���É������Ȃ������Ƃ��ÉA���Ȃ������΂��錈�����������Ƃ������܂��B���̌��A���Ђ╔���̗��v�Ɋ��Â��Ė��������N���邩�ǂ������]�������K�v�������܂��B���ꂪ���Ȃ��̈ӌ��Ì����ȊԈႢ�ł����Ȃ��A�����ÍÄl���鉿�l���Ȃ����������܂����B���Ȃ��̈ӌ��ɑ傫�ȊԈႢ�������ê‡ï¿½ÍA���������c�_���ñަ‚����K�v�������܂��B +ˆÓŽvŒˆ’èŽÒ‚ª‚ ‚È‚½‚̈ӌ©‚ð\•ª‚ɶ‚©‚¹‚È‚©‚Á‚½‚Æ‚«‚ÉA‚ ‚È‚½‚ª”½‘΂·‚錈’è‚ð‰º‚·‚±‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ÌŒãA‰ïŽÐ‚â•”‘°‚Ì—˜‰v‚ÉŠî‚¢‚Ä–â‘è‚ð’ñ‹N‚·‚é‚©‚Ç‚¤‚©‚ð•]‰¿‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ꂪ‚ ‚È‚½‚̈ӌ©‚̬‚³‚ȊԈႢ‚Å‚ ‚é‚È‚çA‚»‚ê‚ÍÄl‚·‚鉿’l‚ª‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚ ‚È‚½‚̈ӌ©‚ɑ傫‚ȊԈႢ‚ª‚ ‚éꇂÍA‚à‚¿‚ë‚ñ‹c˜_‚ð’ñަ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�Ê��A�����͖����ł͂����܂����B�X�g���X�̑����󋵂łÍA�����‚��̃p�[�\�i���e�B�^�C�v�łÍA�����͌Âl�I�Ȃ��̂ɂ‚Ȃ����”\���������܂��B���Ƃ��ÎA�����ɗD�ꂽ�v���O���}�[�̂Ȃ��ɂÍA���ꂪ�Ԉ����Ă����ÆM���é³ï¿½ï¿½ï¿½È—��R�������ê‡ï¿½Å‚��A�ӎv�����ɒ��킷�邽�߂ɕK�v�Ȏ��M���Ȃ����̂������܂��B�ň��Ì󋵂łÍA�ӎv�����҂͕s�����ł����A�����̌����ɑ΂����Âl�I�Ȓ����ƌ��Ȃ��B���̂悤�È󋵂łÍA�l�X�͔]��঒��ނ̕����ɔ������邱�Ƃ��o���Ă������Ƃ��őP�ł��B���Ȃ��͋c�_�������J�Œñަ‚��A�V�����m�����ǂ̂悤�Ɍ��肪�����ꂽ���������Ă݂��ׂ��ł��B +’ÊíA‚±‚ê‚Í–â‘è‚ł͂ ‚è‚Ü‚¹‚ñBƒXƒgƒŒƒX‚Ì‘½‚¢ó‹µ‚Å‚ÍA‚¢‚­‚‚©‚̃p[ƒ\ƒiƒŠƒeƒBƒ^ƒCƒv‚Å‚ÍA‚±‚ê‚ÍŒÂl“I‚È‚à‚̂ɂ‚Ȃª‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚ÎA”ñí‚É—D‚ꂽƒvƒƒOƒ‰ƒ}[‚̂Ȃ©‚É‚ÍA‚»‚ꂪŠÔˆá‚Á‚Ä‚¢‚邯M‚¸‚鳓–‚È——R‚ª‚ ‚éꇂłàAˆÓŽvŒˆ’è‚É’§í‚·‚邽‚߂ɕK—v‚ÈŽ©M‚ª‚È‚¢‚à‚Ì‚ª‚ ‚è‚Ü‚·Bň«‚Ì󋵂łÍAˆÓŽvŒˆ’èŽÒ‚Í•sˆÀ’è‚Å‚ ‚èAŽ©‚ç‚ÌŒ ŒÀ‚ɑ΂·‚éŒÂl“I‚È’§í‚ÆŒ©‚È‚·B‚±‚̂悤‚È󋵂łÍAlX‚Í”]‚Ìà¦’Ž—Þ‚Ì•”•ª‚É”½‰ž‚·‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚­‚±‚Æ‚ªÅ‘P‚Å‚·B‚ ‚È‚½‚Í‹c˜_‚ð”ñŒöŠJ‚Å’ñަ‚µAV‚µ‚¢’mޝ‚ª‚ǂ̂悤‚ÉŒˆ’肪‰º‚³‚ꂽ‚©‚ðŽ¦‚µ‚Ă݂é‚ׂ«‚Å‚·B -�ӎv���肪�t�]���Ă��邩�ǂ����ɂ������炸�A���֌��肪���S�ɒ������ꂽ�̂ÅA���Ȃ��Íu���Ȃ��ɂ����������v�ƌ������Ƃ͌����Ăł��Ȃ����Ƃ��Y���Ȃ��ł��������B +ˆÓŽvŒˆ’肪‹t“]‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚É‚©‚©‚í‚炸A‘ã‘ÖŒˆ’è‚ªŠ®‘S‚É’²¸‚³‚ꂽ‚Ì‚ÅA‚ ‚È‚½‚Íu‚ ‚È‚½‚É‚»‚¤Œ¾‚Á‚½v‚ÆŒ¾‚¤‚±‚Ƃ͌ˆ‚µ‚Ăł«‚È‚¢‚±‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B Next [Judgment - How to Tradeoff Quality Against Development Time](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md index e2627c9..8fbf4ae 100644 --- a/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md +++ b/jp/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -1,11 +1,11 @@ # How to Fight Schedule Pressure [//]: # (Version:1.0.0) -���i���܂ł̎��Ԃ̒Z�k�ÍA�����ꂽ���i���v���ɒñ‹Ÿ‚����Ƃ����v���b�V���[�ł��B�����Í����I�����𔽉f�������A���鎞�_�܂Ō��S�Ȃ̂ŗǂ��ł��B�X�P�W���[�����͂ÍA���B�”\�ȑ��x�������������B���鈳�͂ł����A���ʂł����A�s���S�ł����A���܂��ɂ����ʓI�ł����B +»•i‰»‚܂ł̎žŠÔ‚Ì’Zk‚ÍA‚·‚®‚ꂽ»•i‚ðv‘¬‚É’ñ‹Ÿ‚·‚邯‚¢‚¤ƒvƒŒƒbƒVƒƒ[‚Å‚·B‚»‚ê‚Íà­“IŒ»ŽÀ‚𔽉f‚µ‚Ä‚¨‚èA‚ ‚鎞“_‚܂Ō’‘S‚Ȃ̂ŗǂ¢‚Å‚·BƒXƒPƒWƒ…[ƒ‹ˆ³—Í‚ÍA‘—’B‰Â”\‚È‘¬“x‚æ‚è‚à‘¬‚­‘—’B‚·‚鈳—͂ł ‚èA–³‘ʂł ‚èA•sŒ’‘S‚Å‚ ‚èA‚ ‚Ü‚è‚É‚àˆê”Ê“I‚Å‚ ‚éB -�X�P�W���[�����͂͂����‚��̗��R�ő��݂��܂��B�v���O���}�[�𖱂߂��l�����ÍA�������������Ă��鋭���d���ϗ��ƃv���O���}�[�ɂȂ邱�Ƃ��ǂ��قNJy���������\���ɗ������Ă��܂����B�����炭�A�ނ��͎��������Ìs�����������ɓ��e�����̂ÅA�������������߂邱�ƂÍA�����������è‘�������ɓ��B�����悤�ɂ����Ɠ����悤�ɂȂ��ÆM���Ă��܂��B�����͂����炭���ۂɂ͓��Ă͂܂��܂����A���ʂ͔����É������A�����͔����ɑ傫���ł��B�����ÉA�ނ��͎��ۂɃ\�t�g�E�F�A�����邽�߂ɕK�v�Ȃ��̂ɂ‚��Ă͌����܂����B���������邱�Ƃ��ł����A���ꎩ�̂��ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł��Ȃ��Ƃ������ƂÍA�ނ炪�ł����B���̂��ƂÍA�s�꓊���܂ł̎��Ԃ̈����Ƃ����Ɋւ����v���O���}�[�̑����ł����B +ƒXƒPƒWƒ…[ƒ‹ˆ³—͂͂¢‚­‚‚©‚Ì——R‚Å‘¶Ý‚µ‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚𖱂߂él‚½‚¿‚ÍAŽ„‚½‚¿‚ªŽ‚Á‚Ä‚¢‚é‹­‚¢ŽdŽ–—Ï—‚ƃvƒƒOƒ‰ƒ}[‚ɂȂ邱‚Æ‚ª‚Ç‚ê‚Ù‚ÇŠy‚µ‚¢‚©‚ð\•ª‚É—‰ð‚µ‚Ä‚¢‚Ü‚¹‚ñB‚¨‚»‚ç‚­A”Þ‚ç‚ÍŽ©•ª‚½‚¿‚Ìs“®‚ðŽ„‚½‚¿‚ɓЉe‚·‚é‚Ì‚ÅA‘‚­‚»‚ê‚ð‹‚߂邱‚Æ‚ÍAŽ„‚½‚¿‚ª‚æ‚è‘‚­‚»‚±‚É“ž’B‚·‚邿‚¤‚É‚à‚Á‚Æ“­‚­‚悤‚É‚È‚é‚ÆM‚¶‚Ä‚¢‚Ü‚·B‚±‚ê‚Í‚¨‚»‚ç‚­ŽÀۂɂ͓–‚Ă͂܂è‚Ü‚·‚ªAŒø‰Ê‚Í”ñí‚ɬ‚³‚­A‘¹‚Í”ñí‚ɑ傫‚¢‚Å‚·B‚³‚ç‚ÉA”Þ‚ç‚ÍŽÀۂɃ\ƒtƒgƒEƒFƒA‚ðì‚邽‚߂ɕK—v‚È‚à‚̂ɂ‚¢‚Ă͌©‚¦‚Ü‚¹‚ñB‚»‚ê‚ðŒ©‚é‚±‚Æ‚ª‚Å‚«‚¸A‚»‚ꎩ‘Ì‚ð쬂·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚¢‚¤‚±‚Æ‚ÍA”ނ炪‚Å‚«‚é—Bˆê‚Ì‚±‚Æ‚ÍAŽs꓊“ü‚܂ł̎žŠÔ‚̈³”—‚Æ‚»‚ê‚ÉŠÖ‚·‚éƒvƒƒOƒ‰ƒ}[‚Ì‘›‚¬‚Å‚ ‚éB -�X�P�W���[���̈��͂Æí‚¤ï¿½ï¿½ï¿½ß‚̌��ÍA�������^�C���E�g�D�E�}�[�P�b�g�̈��͂ɕς��邱�Ƃł��B���p�”\�ȘJ���Æï¿½ï¿½i�Ƃ̊֌W���Ž������邽�߂̕��@�B�����ÅA�ÚׂÈA�����Äł��d�v�Ȃ��̂������o�����ƂÍA�������s�����߂ÌÅ‘P�̕��@�ł��B�����ɂÍA�”\���̂����@�\�̃g���[�h�I�t�ɂ‚��Ă̓K�؂ȊǗ����̌������”\�ɂ����Ƃ����lj��̗��_�������܂��B +ƒXƒPƒWƒ…[ƒ‹‚̈³—Í‚Æí‚¤‚½‚߂̌®‚ÍA‚»‚ê‚ðƒ^ƒCƒ€EƒgƒDEƒ}[ƒPƒbƒg‚̈³—͂ɕς¦‚邱‚Ƃł·B—˜—p‰Â”\‚ȘJ“­‚Æ»•i‚Ƃ̊֌W‚ð‰ÂŽ‹‰»‚·‚邽‚߂̕û–@B³’¼‚ÅAÚׂÈA‚»‚µ‚ÄÅ‚àd—v‚È‚à‚Ì‚ðì‚èo‚·‚±‚Æ‚ÍA‚±‚ê‚ðs‚¤‚½‚ß‚ÌÅ‘P‚Ì•û–@‚Å‚·B‚±‚ê‚É‚ÍA‰Â”\«‚Ì‚ ‚é‹@”\‚̃gƒŒ[ƒhƒIƒt‚ɂ‚¢‚Ă̓K؂ȊǗã‚ÌŒˆ’è‚ð‰Â”\‚É‚·‚邯‚¢‚¤’ljÁ‚Ì—˜“_‚ª‚ ‚è‚Ü‚·B -���ς��肪�����ɂ��Ȃ����΂Ȃ��Ȃ��d�v�ȓ��@�ÍA�J���͂قڔñˆ³k���̉t�̂ł����Ƃ������Ƃł��B�R���e�i�̗e�ψÈ��̃R���e�i�ɂ����Ƒ����Ì��������邱�Ƃ��ł��܂��B�����Ӗ��łÍA�v���O���}�[�Íu���Îv�ƌ����Ă͂����܂��ñ‚ªA�u�X�q�͂��Ȃ����]�ނ��Ƃ����߂��ł��傤���H�v�Ƃ������m�Ȍ��ς������o���̂ÍA�v���O���}�[�ɂƂ��Ă̌h�ӂ����߂邱�ƂɂȂ��܂��B�����͑��Ì����ƂÌs���ł��B�v���O���}�[�̘J�͂��������ł��傤�B�ñŒ»Žï¿½ï¿½I�ȃX�P�W���[�����ݒ肷�邱�ƂÍA�N�ɂƂ��Ă��Ɋ����邱�Ƃł��B�v���O���}�͂��ñ‚´‚肷�邱�Ƃ͂ł��܂����B�ނ��ɔñŒ»Žï¿½ï¿½I�Ȃ��Ƃ������͖̂����Ȃ��Ƃł��B Extreme Programming�͂����ð‘•����A���̎����Ƀv���Z�X���\�z���܂��B���ÍA���ׂĂ̓ǎ҂��������g�p�����̂É\���ȂقÇK�^�ɂȂ邱�Ƃ������Ă��܂��B +Œ©Ï‚à‚肪–¾”’‚É‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢d—v‚È“´Ž@‚ÍA˜J“­‚͂قڔñˆ³k«‚̉t‘̂ł ‚邯‚¢‚¤‚±‚Ƃł·BƒRƒ“ƒeƒi‚Ì—eψÈã‚̃Rƒ“ƒeƒi‚É‚à‚Á‚Æ‘½‚­‚Ì…‚ð“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚ ‚éˆÓ–¡‚Å‚ÍAƒvƒƒOƒ‰ƒ}[‚Íuâ‘Îv‚ÆŒ¾‚Á‚Ă͂¢‚¯‚Ü‚¹‚ñ‚ªAu–XŽq‚Í‚ ‚È‚½‚ª–]‚Þ‚±‚Æ‚ð’ú‚ß‚é‚Å‚µ‚傤‚©Hv‚Æ‚¢‚¤–¾Šm‚ÈŒ©Ï‚à‚è‚ðo‚·‚Ì‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă̌hˆÓ‚ð‚‚߂邱‚ƂɂȂè‚Ü‚·B‚±‚ê‚Í‘¼‚Ìê–副‚Ìs“®‚Å‚·BƒvƒƒOƒ‰ƒ}[‚̘J—Í‚ªŒ©‚¦‚é‚Å‚µ‚傤B”ñŒ»ŽÀ“I‚ȃXƒPƒWƒ…[ƒ‹‚ðÝ’è‚·‚邱‚Æ‚ÍA’N‚ɂƂÁ‚Ä‚à’ÉŠ´‚·‚邱‚Ƃł·BƒvƒƒOƒ‰ƒ}‚Í‚¤‚ñ‚´‚è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB”Þ‚ç‚É”ñŒ»ŽÀ“I‚È‚±‚Æ‚ð‚·‚é‚͖̂³—ç‚È‚±‚Ƃł·B Extreme Programming‚Í‚±‚ê‚ð‘•‚µA‚»‚ÌŽü‚è‚ɃvƒƒZƒX‚ð\’z‚µ‚Ü‚·BŽ„‚ÍA‚·‚ׂĂ̓ǎ҂ª‚»‚ê‚ðŽg—p‚·‚é‚Ì‚É\•ª‚ȂقÇK‰^‚ɂȂ邱‚Æ‚ðŠè‚Á‚Ä‚¢‚Ü‚·B Next [How to Understand the User](02-How-to-Understand-the-User.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index 7d09c19..de74aaf 100644 --- a/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/jp/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -1,17 +1,17 @@ # How to Understand the User [//]: # (Version:1.0.0) -���[�U�[�ð—‰ï¿½ï¿½ï¿½ï¿½A���i�Ƀ��[�U�[�ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì‚͂��Ȃ��̋`���ł��B���[�U�[�͎����Ì��i�Ìì¬ï¿½É–��ڂɊւ����Ă��Ȃ����ßA�������������������܂��B +ƒ†[ƒU[‚ð—‰ð‚µAãŽi‚Ƀ†[ƒU[‚ð—‰ð‚³‚¹‚é‚̂͂ ‚È‚½‚Ì‹`–±‚Å‚·Bƒ†[ƒU[‚ÍŽ©•ª‚Ì»•i‚Ì쬂ɖ§Ú‚ÉŠÖ‚í‚Á‚Ä‚¢‚È‚¢‚½‚ßA­‚µˆá‚Á‚½“®ì‚ð‚µ‚Ü‚·B -- ���[�U�[�ÍA���ʓI�ɒZ�����������܂��B -- ���[�U�[�͎����̎d���������Ă��܂��B�ނ��͎��ÉA�傫�ȉ��P�ł͂Ȃ��A���Ȃ��Ì��i�Ì����ȉ��P���l�����ł��傤�B -- ���[�U�[�ÍA���i���[�U�[�̑S�g���\���r�W���������‚��Ƃ͂ł��܂����B +- ƒ†[ƒU[‚ÍAˆê”Ê“I‚É’Z‚¢”­Œ¾‚ð‚µ‚Ü‚·B +- ƒ†[ƒU[‚ÍŽ©•ª‚ÌŽdŽ–‚ðŽ‚Á‚Ä‚¢‚Ü‚·B”Þ‚ç‚ÍŽå‚ÉA‘å‚«‚ȉü‘P‚ł͂Ȃ­A‚ ‚È‚½‚Ì»•i‚̬‚³‚ȉü‘P‚ðl‚¦‚é‚Å‚µ‚傤B +- ƒ†[ƒU[‚ÍA»•iƒ†[ƒU[‚Ì‘Sg‚ð•\‚·ƒrƒWƒ‡ƒ“‚ðŽ‚Â‚±‚Ƃ͂ł«‚Ü‚¹‚ñB -�ނ炪�{���ɗ~�������̂��^�����̂͂��Ȃ��̋`���ł����A�ނ炪�]�ނƌ����Ă������̂ł͂����܂����B�������A�������ނ��ɒ��Ă��A���Ȃ��̒��Ă����Ȃ����n�߂��O�ɖ{���ɖ]�ނ��̂ł��邱�Ƃɓ��ӂ������̂��ǂ��ł����A���������r�W�����͂Ȃ����������܂����B�����Ɋւ��邠�Ȃ����g�̃A�C�f�A�ɑ΂��邠�Ȃ��ÌM���͕ς����͂��ł��B�ڋq���{���ɖ]���ł��邱�Ƃ��m���Ƃ����ϓ_�����ÍA�������ƌ������������̗����������K�v�������܂��B�v���O���}�[�ÍÝŒv�Æì¬ï¿½ï¿½ï¿½P�����Ă��܂��B�s���̌����҂ÍA�l�X���]�ނ��̂ð—‰ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½æ‚¤ï¿½ÉŒP�������Ă��܂��B����2�‚̎��ނÌl�A�܂��͓����l��2�‚Ìl���������a���Ĉê�ɓ����ÄA�������r�W���������肷���ŗǂ̋@�����^���܂��B +”ނ炪–{“–‚É—~‚µ‚¢‚à‚Ì‚ð—^‚¦‚é‚̂͂ ‚È‚½‚Ì‹`–±‚Å‚ ‚èA”ނ炪–]‚Þ‚ÆŒ¾‚Á‚Ä‚¢‚é‚à‚̂ł͂ ‚è‚Ü‚¹‚ñB‚µ‚©‚µA‚»‚ê‚ð”Þ‚ç‚É’ñˆÄ‚µA‚ ‚È‚½‚Ì’ñˆÄ‚ª‚ ‚È‚½‚ªŽn‚ß‚é‘O‚É–{“–‚É–]‚Þ‚à‚̂ł ‚邱‚Ƃɓ¯ˆÓ‚³‚¹‚é‚Ì‚ª—Ç‚¢‚Å‚·‚ªA‚»‚¤‚·‚éƒrƒWƒ‡ƒ“‚͂Ȃ¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚±‚ê‚ÉŠÖ‚·‚é‚ ‚È‚½Ž©g‚̃AƒCƒfƒA‚ɑ΂·‚é‚ ‚È‚½‚ÌM—Š‚Í•Ï‚í‚é‚Í‚¸‚Å‚·BŒÚ‹q‚ª–{“–‚É–]‚ñ‚Å‚¢‚邱‚Æ‚ð’m‚邯‚¢‚¤ŠÏ“_‚©‚ç‚ÍA˜ü–‚³‚ÆŒë‚Á‚½Œª‹•‚³‚Ì—¼•û‚ðŽç‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ÍÝŒv‚Æì¬‚ðŒP—û‚µ‚Ä‚¢‚Ü‚·BŽsê‚ÌŒ¤‹†ŽÒ‚ÍAlX‚ª–]‚Þ‚à‚Ì‚ð—‰ð‚·‚邿‚¤‚ÉŒP—û‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚Ì2‚‚̎í—Þ‚ÌlA‚Ü‚½‚Í“¯‚¶l‚Ì2‚‚Ìl‚¦•û‚ª’²˜a‚µ‚Ĉê‚É“­‚¢‚ÄA³‚µ‚¢ƒrƒWƒ‡ƒ“‚ðô’è‚·‚éŗǂ̋@‰ï‚ð—^‚¦‚Ü‚·B -���[�U�[�ƈê�ɉ߂������Ԃ������Ȃ��΂Ȃ��قÇA���ۂɉ����������邩�ð—‰ï¿½ï¿½Å‚����悤�ɂȂ��܂��B�ł��邾���������ɑ΂��Ă��Ȃ��̃A�C�f�A���������Ƃ����ׂ��ł��B���Ȃ����ł����Ȃ��H�ׂĈ��ނׂ��ł��B +ƒ†[ƒU[‚ƈê‚ɉ߂²‚·ŽžŠÔ‚ª’·‚­‚È‚ê‚΂Ȃé‚Ù‚ÇAŽÀۂɉ½‚ª¬Œ÷‚·‚é‚©‚ð—‰ð‚Å‚«‚邿‚¤‚ɂȂè‚Ü‚·B‚Å‚«‚邾‚¯‚»‚ê‚ç‚ɑ΂µ‚Ä‚ ‚È‚½‚̃AƒCƒfƒA‚ðŽŽ‚»‚¤‚Æ‚·‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚ª‚Å‚«‚é‚È‚çH‚ׂĈù‚ނׂ«‚Å‚·B -Guy Kawasaki [Rules]�ÍA���[�U�[���������Ƃɉ����ÄA���[�U�[�Ìs�����Ď����邱�ƂÌd�v�����������Ă��܂��B +Guy Kawasaki [Rules]‚ÍAƒ†[ƒU[‚ª•·‚­‚±‚ƂɉÁ‚¦‚ÄAƒ†[ƒU[‚Ìs“®‚ðŠÄŽ‹‚·‚邱‚Æ‚Ìd—v«‚ð‹­’²‚µ‚Ä‚¢‚Ü‚·B -���Í����Ǝ҂��R���T���^���g���A���΂��Δނ炪�{���ɖ]�ނ��̂������ÌS�̒��Ŗ��m�ɂ����悤�Ɍڋq�ɑi�����傫�Ȗ����������Ă����ÆM���Ă��܂��B���Ȃ����R���T���^���g�ɂȂ낤�Ǝv���Ă����Ȃ��A���͂��Ȃ��̃N���C�A���g���A�ނ��̖��m�ȓ��̒������łȂ��A�ނ��̎蒠�Ɋ��Â��đI�Ԃ��Ƃ������߂��܂��B +Ž„‚Í¿•‰‹ÆŽÒ‚âƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ªA‚µ‚΂µ‚Δނ炪–{“–‚É–]‚Þ‚à‚Ì‚ðŽ©‚ç‚ÌS‚Ì’†‚Å–¾Šm‚É‚·‚邿‚¤‚Ɍڋq‚É‘i‚¦‚é‘å‚«‚È–â‘è‚ð•ø‚¦‚Ä‚¢‚邯M‚¶‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ªƒRƒ“ƒTƒ‹ƒ^ƒ“ƒg‚ɂȂ낤‚ÆŽv‚Á‚Ä‚¢‚é‚È‚çAŽ„‚Í‚ ‚È‚½‚̃Nƒ‰ƒCƒAƒ“ƒg‚ðA”Þ‚ç‚Ì–¾Šm‚È“ª‚Ì’†‚¾‚¯‚łȂ­A”Þ‚ç‚ÌŽè’ ‚ÉŠî‚¢‚Ä‘I‚Ô‚±‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·B Next [How to Get a Promotion](03-How-to-Get-a-Promotion.md) \ No newline at end of file diff --git a/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index efa22ad..0765719 100644 --- a/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/jp/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -1,13 +1,13 @@ # How to Get a Promotion [//]: # (Version:1.0.0) -�����É��i�������ɂÍA�܂����̖��������s���܂��B +–ðŠ„‚É¸i‚³‚¹‚é‚É‚ÍA‚Ü‚¸‚»‚Ì–ðŠ„‚ðŽÀs‚µ‚Ü‚·B -�^�C�g���É��i�������ɂÍA���̃^�C�g���ɉ������҂����Ă��邩�����‚��o�����������B +ƒ^ƒCƒgƒ‹‚ɸŠi‚³‚¹‚é‚É‚ÍA‚»‚̃^ƒCƒgƒ‹‚ɉ½‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚©‚ðŒ©‚Â‚¯o‚µ‚Ä‚­‚¾‚³‚¢B -���グ�𓾂��ɂÍA�����ŕ������Č��‚����B +’Àã‚°‚𓾂é‚É‚ÍAî•ñ‚Å•‘•‚µ‚ÄŒð‚·‚éB -���Ȃ����v�����[�V�����̊������߂��Ă����悤�Ɋ��������A���Ȃ��Ì��i�ɘb�����������B���i�����邽�߂ɉ��������K�v�������̂�??�𖾎��I�Éq�˂ÄA���������낤�Ƃ��܂��B�����͔n�����Ă��܂����A���΂��΂��Ȃ��������K�v�����邱�Ƃɑ΂��邠�Ȃ��̔F���ÍA���Ȃ��Ì��i�Ƃ͂��Ȃ��قȂ��ł��傤�B�܂��A�����͂����‚��̓_�ł��Ȃ��Ì��i���s���~�߂��܂��B +‚ ‚È‚½‚ªƒvƒƒ‚[ƒVƒ‡ƒ“‚ÌŠúŒÀ‚ª‰ß‚¬‚Ä‚¢‚邿‚¤‚ÉŠ´‚¶‚½‚çA‚ ‚È‚½‚ÌãŽi‚ɘb‚µ‚Ä‚­‚¾‚³‚¢B¸i‚³‚¹‚邽‚߂ɉ½‚ð‚·‚é•K—v‚ª‚ ‚é‚Ì‚©??‚𖾎¦“I‚Éq‚Ë‚ÄA‚»‚ê‚ð‚â‚낤‚Æ‚µ‚Ü‚·B‚±‚ê‚Í”nŽ­‚°‚Ä‚¢‚Ü‚·‚ªA‚µ‚΂µ‚΂ ‚È‚½‚ª‚·‚é•K—v‚ª‚ ‚邱‚Ƃɑ΂·‚é‚ ‚È‚½‚Ì”Fޝ‚ÍA‚ ‚È‚½‚ÌãŽi‚Ƃ͂©‚È‚èˆÙ‚È‚é‚Å‚µ‚傤B‚Ü‚½A‚±‚ê‚Í‚¢‚­‚‚©‚Ì“_‚Å‚ ‚È‚½‚ÌãŽi‚ðƒsƒ“Ž~‚ß‚µ‚Ü‚·B -�قƂ��ǂ̃v���O���}�ÍA�����炭���炩�̌`�ő��ΓI�Ȕ\�͂̌֒����ꂽ���o�������Ă����ł��傤�B���ǂ̂Ƃ����A���ׂĂ��g�b�v10���ɓ����킯�ł͂����܂����I�������A���Í^���ɕ]�������Ă��Ȃ��l�X�����Ă��܂����B�݂��Ȃ̕]�������Ɍ����Ɋ��S�Ƀ}�b�`�����Ƃ͎v���Ă��܂��ñ‚ªA���Íl�X���T���ēK�x�Ɍ����ł����Æl���Ă��܂��B���Ȃ��̎d���ɖڂ������邱�ƂȂ��]�����邱�Ƃ͂ł��܂����B�Ƃ��ɂÍA���R���Âl�I�ÈK���̂��߂ÉA�N���ɋC�t�����Ȃ����Ƃ������܂��B����瑽���̎d�����������A�`�[�������i�����n���I�ɗ����Ă����ÆA�����͓��É����ɂȂ��܂��B +‚Ù‚Æ‚ñ‚ǂ̃vƒƒOƒ‰ƒ}‚ÍA‚¨‚»‚ç‚­‰½‚ç‚©‚ÌŒ`‚Å‘Š‘Î“I‚È”\—͂̌֒£‚³‚ê‚½Š´Šo‚ðŽ‚Á‚Ä‚¢‚é‚Å‚µ‚傤BŒ‹‹Ç‚̂Ƃ±‚ëA‚·‚ׂĂªƒgƒbƒv10“‚É“ü‚é‚킯‚ł͂ ‚è‚Ü‚¹‚ñI‚µ‚©‚µAŽ„‚Í^Œ•‚É•]‰¿‚³‚ê‚Ä‚¢‚È‚¢lX‚ðŒ©‚Ä‚«‚Ü‚µ‚½B‚Ý‚ñ‚Ȃ̕]‰¿‚ªí‚ÉŒ»ŽÀ‚ÉŠ®‘S‚Ƀ}ƒbƒ`‚·‚邯‚ÍŽv‚Á‚Ä‚¢‚Ü‚¹‚ñ‚ªAŽ„‚ÍlX‚ªŠT‚µ‚Ä“K“x‚ÉŒö³‚Å‚ ‚邯l‚¦‚Ä‚¢‚Ü‚·B‚ ‚È‚½‚ÌŽdŽ–‚É–Ú‚ðŒü‚¯‚邱‚ƂȂ­•]‰¿‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚Æ‚«‚É‚ÍA‹ô‘R‚âŒÂl“I‚ÈKе‚Ì‚½‚ß‚ÉA’N‚©‚É‹C•t‚©‚ê‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·BŽ©‘î‚©‚瑽‚­‚ÌŽdŽ–‚ð‚µ‚½‚èAƒ`[ƒ€‚âãŽi‚©‚ç’n—“I‚É—£‚ê‚Ä‚¢‚邯A‚±‚ê‚Í“Á‚É¢“ï‚ɂȂè‚Ü‚·B Next [Serving Your Team - How to Develop Talent](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index 4b9fd1a..d195d4f 100644 --- a/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/jp/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -1,23 +1,23 @@ # How to Develop Talent -Nietschze�͔ނ�[Stronger]�ƌ������Ƃ��Ɍ֒������F +Nietschze‚͔ނª[Stronger]‚ÆŒ¾‚Á‚½‚Æ‚«‚Ɍ֒£‚µ‚½F ->�����j�󂵂Ȃ����̂ÍA�������苭�����܂��B +>Ž„‚ð”j‰ó‚µ‚È‚¢‚à‚Ì‚ÍAŽ„‚ð‚æ‚è‹­‚­‚µ‚Ü‚·B -���Ȃ��Ìő��ÌÓ”C�͂��Ȃ��̃`�[���ł��B���Ȃ��͂��ꂼ���̂��Ƃ��悭�m���Ă����͂��ł��B���Ȃ��͂��Ȃ��̃`�[���������L�΂��ׂ��ł����A�ނ��ɕ��S���������ׂ��ł͂����܂����B���Ȃ��͒Ê��A�ނ炪�L�тĂ������@�ɂ‚��Ęb���ׂ��ł��B�ނ炪�����𔃎������ÎA�ނ��͂��܂����@�Â������܂��B�e�v���W�F�N�g�A�܂��͑��̂��ׂẴv���W�F�N�g�ÅA���������@�Ƃ����ɓK�������@�ŃX�g���b�`���s���܂��B���葽���̎d�����^���邱�Ƃł͂Ȃ��A�ނ��ÉV�����X�L�����^�������A�`�[���ÅV�����������ʂ������肷�邱�Ƃɂ����ÄA�ނ����L�΂��B +‚ ‚È‚½‚ÌÅ‘å‚ÌÓ”C‚Í‚ ‚È‚½‚̃`[ƒ€‚Å‚·B‚ ‚È‚½‚Í‚»‚ꂼ‚ê‚Ì‚±‚Æ‚ð‚æ‚­’m‚Á‚Ä‚¢‚é‚Í‚¸‚Å‚·B‚ ‚È‚½‚Í‚ ‚È‚½‚̃`[ƒ€‚ðˆø‚«L‚΂·‚ׂ«‚Å‚·‚ªA”Þ‚ç‚É•‰’S‚ð‚©‚¯‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚Í’ÊíA”ނ炪L‚тĂ¢‚é•û–@‚ɂ‚¢‚Ęb‚·‚ׂ«‚Å‚·B”ނ炪‚»‚ê‚𔃎û‚·‚ê‚ÎA”Þ‚ç‚Í‚¤‚Ü‚­“®‹@‚¯‚ç‚ê‚Ü‚·BŠeƒvƒƒWƒFƒNƒgA‚Ü‚½‚Í‘¼‚Ì‚·‚ׂẴvƒƒWƒFƒNƒg‚ÅA’ñˆÄ‚·‚é•û–@‚Æ‚»‚ê‚É“K‚µ‚½•û–@‚ŃXƒgƒŒƒbƒ`‚ðs‚¢‚Ü‚·B‚æ‚葽‚­‚ÌŽdŽ–‚ð—^‚¦‚邱‚Ƃł͂Ȃ­A”Þ‚ç‚ÉV‚µ‚¢ƒXƒLƒ‹‚ð—^‚¦‚½‚èAƒ`[ƒ€‚ÅV‚µ‚¢–ðŠ„‚ð‰Ê‚½‚µ‚½‚è‚·‚邱‚Ƃɂæ‚Á‚ÄA”Þ‚ç‚ðL‚΂·B -���Ȃ����g�i���Ȃ����g���܂Þj�����X���s�����悤�ɂ��ÄA���Ȃ��̃X�P�W���[���ʼn��炩�̎��s���v�悷���ׂ��ł��B�������s���Ȃ����ÎA�`�����͂����܂����B���X���s���邱�Ƃ��Ȃ����ÎA���Ȃ��Í\���Ɋ撣���Ă����킯�ł͂����܂����B�N�������s�����ÆA�����������̂悤�Ɉ��킸�ÉA�ł��邾�����₩�ɂ����ׂ��ł��B +‚ ‚È‚½Ž©gi‚ ‚È‚½Ž©g‚ðŠÜ‚Þj‚ªŽžXޏ”s‚·‚邿‚¤‚É‚µ‚ÄA‚ ‚È‚½‚̃XƒPƒWƒ…[ƒ‹‚ʼn½‚ç‚©‚ÌŽ¸”s‚ðŒv‰æ‚·‚é‚ׂ«‚Å‚·BŒˆ‚µ‚ÄŽ¸”s‚ª‚È‚¯‚ê‚ÎA–`Œ¯Š´‚Í‚ ‚è‚Ü‚¹‚ñBŽžXޏ”s‚·‚邱‚Æ‚ª‚È‚¯‚ê‚ÎA‚ ‚È‚½‚Í\•ª‚ÉŠæ’£‚Á‚Ä‚¢‚é‚킯‚ł͂ ‚è‚Ü‚¹‚ñB’N‚©‚ªŽ¸”s‚·‚邯A¬Œ÷‚µ‚½‚©‚̂悤‚Ɉµ‚킸‚ÉA‚Å‚«‚邾‚¯‰¸‚â‚©‚É‚·‚é‚ׂ«‚Å‚·B -�e�`�[���̃����o�[���w�����A���@�t�������Ă����悤�ɂ��Ă��������B�����łȂ��ê‡ï¿½ÍA�ނ炪���܂����@�����������K�v�����邱�Ƃ𖾊m�ɂ��ꂼ�ꎿ�₵�Ă��������B���Ȃ��͂������s���̂܂܂ɂ��Ȃ����΂Ȃ��Ȃ����������܂��ñ‚ªA�݂��Ȃ��]�ނ��̂��m���Ă����ׂ��ł��B +Šeƒ`[ƒ€‚̃ƒ“ƒo[‚ªw“ü‚µA“®‹@•t‚¯‚³‚ê‚Ä‚¢‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B‚»‚¤‚łȂ¢ê‡‚ÍA”ނ炪‚¤‚Ü‚­“®‹@‚¯‚ç‚ê‚Ä‚¢‚é•K—v‚ª‚ ‚邱‚Ƃ𖾊m‚É‚»‚ꂼ‚ꎿ–₵‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚Í‚»‚ê‚ð•s–ž‚̂܂܂ɂµ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚Ý‚ñ‚È‚ª–]‚Þ‚à‚Ì‚ð’m‚Á‚Ä‚¨‚­‚ׂ«‚Å‚·B -�Ⴂ�m�C���s���̂��߂ɕ��ׂ𕪒S���Ă��Ȃ��l���������߂邱�Ƃ͂ł��܂����B���Ȃ��͂����������܂����@���Ä��Y�I�ɂ����悤�ɓw�߂Ȃ����΂Ȃ��܂����B���Ȃ����E�ϗ͂������Ă��������A�������ێ����Ă��������B���Ȃ��̔E�ς����ꂽ���A���������������������B�Ó}�I�Ƀ��x�����������Ä��Ƃ��Ă����l�ÍA�`�[���ɂƂ��Č����ł͂Ȃ����ßA�`�[���Ɏc�葱���邱�Ƃ͂ł��܂����B +’á‚¢Žm‹C‚â•s–ž‚Ì‚½‚߂ɕ‰‰×‚𕪒S‚µ‚Ä‚¢‚È‚¢l‚ð‚ ‚«‚ç‚߂邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚ ‚È‚½‚Í‚»‚ê‚ç‚ð‚¤‚Ü‚­“®‹@‚¯‚ĶŽY“I‚É‚·‚邿‚¤‚É“w‚߂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚ ‚È‚½‚ª”E‘Ï—Í‚ðŽ‚Á‚Ä‚¢‚éŒÀ‚èA‚±‚ê‚ðˆÛŽ‚µ‚Ä‚­‚¾‚³‚¢B‚ ‚È‚½‚Ì”E‘Ï‚ª”æ‚ꂽ‚çA‚»‚ê‚ç‚ðŒ‚‚Á‚Ä‚­‚¾‚³‚¢BˆÓ}“I‚ɃŒƒxƒ‹‚ð‰º‰ñ‚Á‚Äì‹Æ‚µ‚Ä‚¢‚él‚ÍAƒ`[ƒ€‚ɂƂÁ‚ÄŒö•½‚ł͂Ȃ¢‚½‚ßAƒ`[ƒ€‚ÉŽc‚葱‚¯‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -���Ȃ��̃`�[���̋��łȃ����o�[�ÉA�ނ��������M���Ă��邱�Ƃ��A���ɘb�����ƂŖ��m�ɂ��܂��B�^���͌��R�Ɣᔻ�v���C�x�[�g�ɂ����K�v�������܂��B +‚ ‚È‚½‚̃`[ƒ€‚Ì‹­ŒÅ‚ȃƒ“ƒo[‚ÉA”Þ‚ç‚ð‹­‚­M‚¶‚Ä‚¢‚邱‚Æ‚ðAŒö‚ɘb‚·‚±‚ƂŖ¾Šm‚É‚µ‚Ü‚·BŽ^”ü‚ÍŒö‘R‚Ɣᔻƒvƒ‰ƒCƒx[ƒg‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�`�[���̋��������o�[�ÍA���R�A�`�[���̎ア�����o�[����������d���������ł��傤�B�����͊��S�Ɏ��R�Ȃ��Ƃł����A�N�����ê¶ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½A�N�������ɂ����Ďז������邱�Ƃ͂����܂����B +ƒ`[ƒ€‚Ì‹­‚¢ƒƒ“ƒo[‚ÍA“–‘RAƒ`[ƒ€‚ÌŽã‚¢ƒƒ“ƒo[‚æ‚è‚à“‚¢ŽdŽ–‚ð‚·‚é‚Å‚µ‚傤B‚±‚ê‚ÍŠ®‘S‚ÉŽ©‘R‚È‚±‚Ƃł ‚èA’N‚à‚ªˆê¶Œœ–½“­‚­ŒÀ‚èA’N‚à‚»‚ê‚É‚æ‚Á‚Ďז‚‚³‚ê‚邱‚Ƃ͂ ‚è‚Ü‚¹‚ñB -�ǂ��v���O���}��10�l�̈����v���O���}���������Y���������̂ÍA�����ɔ��f�����Ȃ��Ƃ�����Ȏ����ł��B�����͊�È󋵂������o���܂��B���Ȃ��̎ア�v���O���}���������Ǝז��ɂȂ��ê‡ï¿½ÍA���Ȃ������葬���������Ƃ��ł��邱�Ƃ͂��΂��Î^���ł��B���Ȃ��������������ê‡ï¿½A���Ȃ��͎��ۂɒZ���Ԃł����Æi���ð‹‚����ł��傤�B�������A���Ȃ��̕����ÍA�ア�����o�[�̌P���A�����̒m���̕��y�A�����ċ��͂ȃ����o�[�̑r�������ñ•œ‚����\�͂Ƃ����A�����‚��Ìd�v�ȗ��_�������܂��B���̓_�ŋ����Ȃ����΂Ȃ炸�A�����͂��������p�x�����l���Ȃ����΂Ȃ��܂����B +—Ç‚¢ƒvƒƒOƒ‰ƒ}‚ª10l‚̈«‚¢ƒvƒƒOƒ‰ƒ}‚æ‚è‚à¶ŽY«‚ª‚‚¢‚Ì‚ÍA‹‹—¿‚É”½‰f‚³‚ê‚È‚¢‚Æ‚¢‚¤Šï–­‚ÈŽ–ŽÀ‚Å‚·B‚±‚ê‚ÍŠï–­‚È󋵂ðì‚èo‚µ‚Ü‚·B‚ ‚È‚½‚ÌŽã‚¢ƒvƒƒOƒ‰ƒ}‚ª‚¿‚å‚Á‚Ǝז‚‚ɂȂéꇂÍA‚ ‚È‚½‚ª‚æ‚葬‚­“®‚­‚±‚Æ‚ª‚Å‚«‚邱‚Ƃ͂µ‚΂µ‚Î^ŽÀ‚Å‚·B‚ ‚È‚½‚ª‚±‚ê‚ð‚µ‚½ê‡A‚ ‚È‚½‚ÍŽÀÛ‚É’ZŠúŠÔ‚Å‚à‚Á‚Æi•à‚ð‹‚°‚é‚Å‚µ‚傤B‚µ‚©‚µA‚ ‚È‚½‚Ì•”‘°‚ÍAŽã‚¢ƒƒ“ƒo[‚ÌŒP—ûA•”‘°‚Ì’mޝ‚Ì•‹yA‚»‚µ‚Ä‹­—͂ȃƒ“ƒo[‚Ì‘rޏ‚©‚ç‰ñ•œ‚·‚é”\—͂Ƃ¢‚¤A‚¢‚­‚‚©‚Ìd—v‚È—˜“_‚ðŽ¸‚¢‚Ü‚·B‚±‚Ì“_‚Å‹­‚­‚È‚¯‚ê‚΂Ȃ炸A–â‘è‚Í‚ ‚ç‚ä‚éŠp“x‚©‚çl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -���Ȃ��͂��΂��ÎA���苭���`�[�������o�[�ɒ����I�ł����A���Ó[���`���ꂽ�^�X�N���^���邱�Ƃ��ł��܂��B +‚ ‚È‚½‚Í‚µ‚΂µ‚ÎA‚æ‚è‹­‚¢ƒ`[ƒ€ƒƒ“ƒo[‚É’§í“I‚Å‚·‚ªA’ˆÓ[‚­•`‚©‚ꂽƒ^ƒXƒN‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B Next [How to Choose What to Work On](02-How-to-Choose-What-to-Work-On.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md index 5fce749..e192525 100644 --- a/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md +++ b/jp/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -1,5 +1,5 @@ # How to Choose What to Work On -�����̃j�[�Y�ƃ`�[���̃j�[�Y�Ƃ̃o�����X�������ÄA�ǂ̂悤�ȑ��ʂ̃v���W�F�N�g�����Ƃ��邩���I�����܂��B ���Ȃ��͎��������ÔD���Ȃ��Ƃ����Ȃ����΂Ȃ��܂��ñ‚ªA���葽���̎d���������̂ł͂Ȃ��A�V�����X�L�����s�g���������g���L�΂����@�����‚��悤�Ƃ��܂��B ���[�_�[�V�b�v�ƃR�~���j�P�[�V�����X�L���͋Z�p�X�L���������d�v�ł��B ���Ȃ��������ɋ������ÎA�v���W�F�N�g�łÍA���X�N�����炷���߂ÉA�ł��邾�������A�ł������ÈA�܂��̓��X�N�Ì����^�X�N�����s�����������B +Ž©•ª‚̃j[ƒY‚ƃ`[ƒ€‚̃j[ƒY‚Ƃ̃oƒ‰ƒ“ƒX‚ðŽæ‚Á‚ÄA‚ǂ̂悤‚È‘¤–ʂ̃vƒƒWƒFƒNƒg‚ðì‹Æ‚·‚é‚©‚ð‘I‘ð‚µ‚Ü‚·B ‚ ‚È‚½‚ÍŽ©•ª‚ªˆê”ÔD‚«‚È‚±‚Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ‚ªA‚æ‚葽‚­‚ÌŽdŽ–‚ð‚·‚é‚̂ł͂Ȃ­AV‚µ‚¢ƒXƒLƒ‹‚ðsŽg‚µ‚ÄŽ©•ªŽ©g‚ðL‚΂·•û–@‚ðŒ©‚Â‚¯‚悤‚Æ‚µ‚Ü‚·B ƒŠ[ƒ_[ƒVƒbƒv‚ƃRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“ƒXƒLƒ‹‚Í‹ZpƒXƒLƒ‹‚æ‚è‚àd—v‚Å‚·B ‚ ‚È‚½‚ª”ñí‚É‹­‚¯‚ê‚ÎAƒvƒƒWƒFƒNƒg‚Å‚ÍAƒŠƒXƒN‚ðŒ¸‚ç‚·‚½‚ß‚ÉA‚Å‚«‚邾‚¯‘‚­Ał࢓ï‚ÈA‚Ü‚½‚ÍƒŠƒXƒN‚Ì‚‚¢ƒ^ƒXƒN‚ðŽÀs‚µ‚Ä‚­‚¾‚³‚¢B Next [How to Get the Most From Your Team-mates](03-How-to-Get-the-Most-From-Your-Teammates.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md index 6d0a7bf..f6b14e9 100644 --- a/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md +++ b/jp/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -1,15 +1,15 @@ # How to Get the Most From Your Team-mates -�`�[�����C�g���ő����Ɋ��p�����ɂÍA�`�[���Ì��_�ð–‚��A���ׂĂÌl���Âl�I�ɒ��킵�A�Âl�I�Ɋւ��葱�����悤�ɂ��Ă��������B +ƒ`[ƒ€ƒƒCƒg‚ðÅ‘åŒÀ‚ÉŠˆ—p‚·‚é‚É‚ÍAƒ`[ƒ€‚̸_‚ð–‚«A‚·‚ׂĂÌl‚ªŒÂl“I‚É’§í‚µAŒÂl“I‚ÉŠÖ‚í‚葱‚¯‚邿‚¤‚É‚µ‚Ä‚­‚¾‚³‚¢B -�`�[���Ì��_�𔭒B�����邽�߂ÉA���S�����̈ߕ����p�[�e�B�[�̂悤�Ȗ����Ȃ��̂͗ǂ����̂ÌA�Âl�I�ȑ��h�Ɠ������炢�ǂ����̂ł͂����܂����B�N�������Ìl�ð‘¸d���Ă����Ȃ��A�N���N�����_���������Ȃ��ł��傤�B�`�[���Ì��_�ÍA�l�X���`�[���̂��߂ɋ]���𕥂��ÄA�����̌Âl�I�ȗ��v�̑O�Ƀ`�[���̗ǂ������̊ϓ_�����l�����Ƃ��É������܂��B�w���҂Ƃ��ÄA���Ȃ��͂��̓_�Ŏ������������������߂邱�Ƃ͂ł��܂����B +ƒ`[ƒ€‚̸_‚ð”­’B‚³‚¹‚邽‚ß‚ÉAƒƒS“ü‚è‚̈ߕž‚âƒp[ƒeƒB[‚̂悤‚È–ï‰î‚È‚à‚̂͗ǂ¢‚à‚Ì‚ÌAŒÂl“I‚È‘¸Œh‚Æ“¯‚¶‚­‚ç‚¢—Ç‚¢‚à‚̂ł͂ ‚è‚Ü‚¹‚ñB’N‚à‚ª‘¼‚Ìl‚ð‘¸d‚µ‚Ä‚¢‚é‚È‚çA’N‚à’N‚à—Ž’_‚³‚¹‚½‚­‚È‚¢‚Å‚µ‚傤Bƒ`[ƒ€‚̸_‚ÍAlX‚ªƒ`[ƒ€‚Ì‚½‚߂ɋ]µ‚𕥂Á‚ÄAŽ©•ª‚ÌŒÂl“I‚È—˜‰v‚Ì‘O‚Ƀ`[ƒ€‚Ì—Ç‚µˆ«‚µ‚ÌŠÏ“_‚©‚çl‚¦‚邯‚«‚Éì‚ç‚ê‚Ü‚·BŽw“±ŽÒ‚Æ‚µ‚ÄA‚ ‚È‚½‚Í‚±‚Ì“_‚ÅŽ©•ª‚æ‚è‚à‘½‚­‚ð‹‚߂邱‚Ƃ͂ł«‚Ü‚¹‚ñB -�`�[�����[�_�[�V�b�v�̌���1�‚ÍA�S�����o�C�C���O�ł����悤�ɃR���Z���T�X�ð‘£i���邱�Ƃł��B�����ÍA�`�[�����C�g���Ԉ����Ă��邱�Ƃ����X�Ӗ����܂��B�‚܂��A���ꂪ�v���W�F�N�g�����܂��ɂ��Q���邱�Ƃ��Ȃ����ÎA�R���Z���T�X�Ɋ��Â��Ď����̃`�[���̉��l�����Ǝ��̂������������悤�ɂ��Ȃ����΂Ȃ��܂����B���ꂪ�N���������A���ӂ��Ȃ��ł��������B�P�Ɍ��R�Ɣ��΂��A���ӂɓ��ӂ��Ă��������B���‚������A���������Ă����悤�ɕ��������肵�Ă͂����܂����B���Ȃ����ӌ��ɓ��ӂ��Ă��Ȃ��ƌ����܂����A�`�[���̃R���Z���T�X���d�v���Æl�����������B�����͂��΂��Δނ��ɋt�߂肳���܂��B�ނ炪�t�߂肵���ê‡ï¿½A�ނ炪�Å��̌v�����ʉ߂����Ǝ咣���Ȃ��ł��������B +ƒ`[ƒ€ƒŠ[ƒ_[ƒVƒbƒv‚ÌŒ®‚Ì1‚‚ÍA‘Sˆõ‚ªƒoƒCƒCƒ“ƒO‚Å‚«‚邿‚¤‚ɃRƒ“ƒZƒ“ƒTƒX‚ð‘£i‚·‚邱‚Ƃł·B‚±‚ê‚ÍAƒ`[ƒ€ƒƒCƒg‚ªŠÔˆá‚Á‚Ä‚¢‚邱‚Æ‚ðŽžXˆÓ–¡‚µ‚Ü‚·B‚‚܂èA‚»‚ꂪƒvƒƒWƒFƒNƒg‚ð‚ ‚Ü‚è‚É‚àŠQ‚·‚邱‚Æ‚ª‚È‚¯‚ê‚ÎAƒRƒ“ƒZƒ“ƒTƒX‚ÉŠî‚¢‚ÄŽ©•ª‚̃`[ƒ€‚̉½l‚©‚ª“ÆŽ©‚Ì‚â‚è•û‚ð‚·‚é‚æ‚¤‚É‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚ꂪ‹N‚±‚Á‚½‚çA“¯ˆÓ‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B’P‚ÉŒö‘R‚Æ”½‘΂µA‡ˆÓ‚É“¯ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B‚‚¢‚½‚èA‹­§‚³‚ê‚Ä‚¢‚邿‚¤‚É•·‚±‚¦‚½‚肵‚Ă͂¢‚¯‚Ü‚¹‚ñB‚ ‚È‚½‚ªˆÓŒ©‚É“¯ˆÓ‚µ‚Ä‚¢‚È‚¢‚ÆŒ¾‚¢‚Ü‚·‚ªAƒ`[ƒ€‚̃Rƒ“ƒZƒ“ƒTƒX‚ªd—v‚¾‚Æl‚¦‚Ä‚­‚¾‚³‚¢B‚±‚ê‚Í‚µ‚΂µ‚Δނç‚É‹t–߂肳‚¹‚Ü‚·B”ނ炪‹t–߂肵‚½ê‡A”ނ炪ʼn‚ÌŒv‰æ‚ð’ʉ߂·‚邯Žå’£‚µ‚È‚¢‚Å‚­‚¾‚³‚¢B -�K�؂ȑ������������c�_�������ɓ��ӂ��Ȃ��Âl�������ê‡ï¿½ÍA�P�Ɍ����������K�v�������Ǝ咣���A���ꂪ���Ȃ��̌����ł����Ǝ咣���܂��B���Ȃ��̌��肪�Ԉ����Ă��邩�ǂ����𔻒f�������@�������ê‡ï¿½A�܂��͂��ꂪ�Ԉ����Ă��邱�Ƃ����Ŏ����ꂽ�ê‡ï¿½ÍA�ł��邾�������؂��ւ��ÄA�������l�����F�������������B +“K؂ȑ¤‚©‚ç–â‘è‚ð‹c˜_‚µ‚½Œã‚É“¯ˆÓ‚µ‚È‚¢ŒÂl‚ª‚¢‚éꇂÍA’P‚ÉŒˆ’è‚ð‰º‚·•K—v‚ª‚ ‚邯Žå’£‚µA‚»‚ꂪ‚ ‚È‚½‚ÌŒˆ’è‚Å‚ ‚邯Žå’£‚µ‚Ü‚·B‚ ‚È‚½‚ÌŒˆ’肪ŠÔˆá‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ð”»’f‚·‚é•û–@‚ª‚ ‚éê‡A‚Ü‚½‚Í‚»‚ꂪŠÔˆá‚Á‚Ä‚¢‚邱‚Æ‚ªŒã‚ÅŽ¦‚³‚ꂽꇂÍA‚Å‚«‚邾‚¯‘‚­Ø‚è‘Ö‚¦‚ÄA³‚µ‚¢l•¨‚ð”Fޝ‚µ‚Ä‚­‚¾‚³‚¢B -���Ȃ��̃`�[���ɂÍA�O���[�v�Ƃ��Ă��•ʂɂ��A�`�[���X�s���b�g�ð¶‚Ýo���A���ʓI�ȃ`�[�������邽�߂Él���Ă��邱�Ƃ��q�˂Ă��������B +‚ ‚È‚½‚̃`[ƒ€‚É‚ÍAƒOƒ‹[ƒv‚Æ‚µ‚Ä‚àŒÂ•ʂɂàAƒ`[ƒ€ƒXƒsƒŠƒbƒg‚ð¶‚Ýo‚µAŒø‰Ê“I‚ȃ`[ƒ€‚ðì‚邽‚ß‚Él‚¦‚Ä‚¢‚邱‚Æ‚ðq‚˂Ă­‚¾‚³‚¢B -�ґ��ł͂Ȃ��p�ɂÉÜŽ^�����������B���ɂ��Ȃ����܎^�����鎞�ɂ��Ȃ��ɓ��ӂ��Ȃ��l���܎^���܂��B���Ɏ^�����A���I�ɔᔻ�����B 1�‚̗��O�������ÄF���ɂÍ����⎸�s�Ì����͌��̌��ׂɒp�����������ӂ��������ƂȂ��܎^���邱�Ƃ��ł��Ȃ��̂ÅA�����̓v���C�x�[�g�ÅÜŽ^�������ׂ��ł��B +æÒ‘ò‚ł͂Ȃ­•p”É‚ÉÜŽ^‚µ‚Ä‚­‚¾‚³‚¢B“Á‚É‚ ‚È‚½‚ªÜŽ^‚³‚ê‚鎞‚É‚ ‚È‚½‚É“¯ˆÓ‚µ‚È‚¢l‚ðÜŽ^‚µ‚Ü‚·BŒö‚ÉŽ^”ü‚µAŽ„“I‚ɔᔻ‚·‚éB 1‚‚̗áŠO‚𜂢‚ÄFŽž‚ɂͬ’·‚⎸”s‚Ì¥³‚ÍŒ³‚ÌŒ‡Š×‚É’p‚¸‚©‚µ‚¢’ˆÓ‚ðˆø‚­‚±‚ƂȂ­ÜŽ^‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Ì‚ÅA¬’·‚̓vƒ‰ƒCƒx[ƒg‚ÅÜŽ^‚³‚ê‚é‚ׂ«‚Å‚·B Next [How to Divide Problems Up](04-How-to-Divide-Problems-Up.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md index ab4caee..6ebb2b7 100644 --- a/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md +++ b/jp/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -1,9 +1,9 @@ # How to Divide Problems Up -�\�t�g�E�F�A�v���W�F�N�g�𗘗p���ÄA�Âl�ɂ����Ď��s�������^�X�N�ɕ��������̂͊y�������Ƃł��B�����͑����És���K�v�������܂��B���ɂÍA�}�l�[�W���[�ÍA���Ƃ����s�����Âl���l�������Ɍ��ς������s�����Ƃ��ł����Æl���Ă��邱�Ƃ������܂��B�����͌Âl�Ì��Y���������ɈقȂ邽�ߕs�”\�ł��B�R���|�[�l���g�ɂ‚��Ă̓����̒m�������������l�ÍA���ɕω����A�p�t�H�[�}���X�ɑ傫�ȉe�����^���邱�Ƃ��ł��܂��B +ƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚ð—˜—p‚µ‚ÄAŒÂl‚É‚æ‚Á‚ÄŽÀs‚³‚ê‚éƒ^ƒXƒN‚É•ªŠ„‚·‚é‚̂͊y‚µ‚¢‚±‚Ƃł·B‚±‚ê‚Í‘Šú‚És‚¤•K—v‚ª‚ ‚è‚Ü‚·BŽž‚É‚ÍAƒ}ƒl[ƒWƒƒ[‚ÍAì‹Æ‚ðŽÀs‚·‚éŒÂl‚ðl—¶‚¹‚¸‚ÉŒ©Ï‚à‚è‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚邯l‚¦‚Ä‚¢‚邱‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ÍŒÂl‚̶ŽY«‚ª”ñí‚ɈقȂ邽‚ß•s‰Â”\‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg‚ɂ‚¢‚Ă̓Á’è‚Ì’mޝ‚ðŽ‚Á‚Ä‚¢‚él‚ÍAí‚ɕω»‚µAƒpƒtƒH[ƒ}ƒ“ƒX‚ɑ傫‚ȉe‹¿‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B -���ȉƂÍA���t�����y���̉��F���^���I���̃R�[�`���e�I���̋��݂��l�����Ă����悤�ÉA�o���L�x�ȃ`�[�����[�_�[�ÍA�Ê��A�v���W�F�N�g�̕������`�[�������̎d���ɕ����邱�Ƃ͂ł��܂��ñ‚»‚��炪���蓖�Ă����éƒï¿½ï¿½ï¿½o�[�B�����ÍA�����\�̃`�[�������󂵂Ă͂Ȃ��Ȃ����R�̈ꕔ�ł��B +ì‹È‰Æ‚ÍA‰‰‘t‚·‚éŠyŠí‚̉¹F‚â‰^“®‘IŽè‚̃R[ƒ`‚ªŠe‘IŽè‚Ì‹­‚Ý‚ðl—¶‚µ‚Ä‚¢‚邿‚¤‚ÉAŒoŒ±–L•x‚ȃ`[ƒ€ƒŠ[ƒ_[‚ÍA’ÊíAƒvƒƒWƒFƒNƒg‚Ì•”–å‚ðƒ`[ƒ€‚©‚ç‚ÌŽdŽ–‚É•ª‚¯‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ‚»‚ê‚ç‚ªŠ„‚è“–‚Ä‚ç‚ê‚郃“ƒo[B‚±‚ê‚ÍA‚«”\‚̃`[ƒ€‚ª•ö‰ó‚µ‚Ă͂Ȃç‚È‚¢——R‚̈ꕔ‚Å‚·B -�����ÍA�l�X�������̋��݂��\�z���A���_�����P�������A�V�����X�L�����w�ñ‚¾‚肵�đދ������悤�ɂȂ��Ƃ����A�������x�̊댯�������܂��B�������A���å«ï¿½ÍA�ߓx�Ɏg�p�����Ȃ��ê‡ï¿½É‚͔����ɗL�p�È��Y���c�[���ł��B +‚±‚ê‚ÍAlX‚ªŽ©•ª‚Ì‹­‚Ý‚ð\’z‚µAŽã“_‚ð‰ü‘P‚µ‚½‚èAV‚µ‚¢ƒXƒLƒ‹‚ðŠw‚ñ‚¾‚肵‚đދü‚·‚邿‚¤‚É‚È‚é‚Æ‚¢‚¤A‚ ‚é’ö“x‚̊댯‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µAê–å«‚ÍA‰ß“x‚ÉŽg—p‚³‚ê‚È‚¢ê‡‚ɂ͔ñí‚É—L—p‚ȶŽY«ƒc[ƒ‹‚Å‚·B Next [How to Handle Boring Tasks](05-How-to-Handle-Boring-Tasks.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md index c2dd72b..409e127 100644 --- a/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md +++ b/jp/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -1,7 +1,7 @@ # How to Handle Boring Tasks -���ɂÍA���Ђ��v���W�F�N�g�Ì����ɕs�Œ��ȑދ��È��Ƃ������邱�Ƃ͂ł��܂����B �������̃^�X�N�ÍA���ۂɂ��������s���K�v�������l�̎m�C�𑹂Ȃ��”\���������܂��B �����ɑÎ����邽�߂ÌÅ‘P�̕��@�ÍALarry Wall�̃v���O���}�̑ӑĂ̔������ĂÑo�����A�܂��͑��i���邱�Ƃł��B �R���s���[�^�ɂ��Ȃ��̂��߂̃^�X�N�����s�����邩�A�`�[�����C�g���������s���̂��è•�����邽�߂̉��炩�̕��@�����‚��悤�Ƃ��܂��B ���Ås���̂�1�T�Ԃ������Ă��܂��d���������v���O������1�T�ԓ����Ă����̂ÍA���苳���I�ÅA���ɂ͔������������Ƃ����傫�ȗ��_�������܂��B +Žž‚É‚ÍA‰ïŽÐ‚âƒvƒƒWƒFƒNƒg‚̬Œ÷‚É•s‰ÂŒ‡‚ȑދü‚Èì‹Æ‚ð”ð‚¯‚é‚±‚Ƃ͂ł«‚Ü‚¹‚ñB ‚±‚ê‚ç‚̃^ƒXƒN‚ÍAŽÀÛ‚É‚»‚ê‚ç‚ðs‚¤•K—v‚ª‚ ‚él‚ÌŽm‹C‚𑹂Ȃ¤‰Â”\«‚ª‚ ‚è‚Ü‚·B ‚±‚ê‚ɑΈ‚·‚邽‚ß‚ÌÅ‘P‚Ì•û–@‚ÍALarry Wall‚̃vƒƒOƒ‰ƒ}‚̑ӑĂ̔ü“¿‚ðŒÄ‚Ño‚·‚©A‚Ü‚½‚Í‘£i‚·‚邱‚Ƃł·B ƒRƒ“ƒsƒ…[ƒ^‚É‚ ‚È‚½‚Ì‚½‚߂̃^ƒXƒN‚ðŽÀs‚³‚¹‚é‚©Aƒ`[ƒ€ƒƒCƒg‚ª‚±‚ê‚ðs‚¤‚Ì‚ðŽè•‚¯‚·‚邽‚߂̉½‚ç‚©‚Ì•û–@‚ðŒ©‚Â‚¯‚悤‚Æ‚µ‚Ü‚·B Žè‚Ås‚¤‚Ì‚É1TŠÔ‚©‚©‚Á‚Ä‚µ‚Ü‚¤ŽdŽ–‚ð‚·‚éƒvƒƒOƒ‰ƒ€‚Å1TŠÔ“­‚¢‚Ä‚¢‚é‚Ì‚ÍA‚æ‚苳ˆç“I‚ÅAŽž‚ɂ͔½•œ«‚ª‚ ‚邯‚¢‚¤‘å‚«‚È—˜“_‚ª‚ ‚è‚Ü‚·B -���̂��ׂĂ����s�����ê‡ï¿½ÍA�ދ��È��Ƃ����Ȃ����΂Ȃ��Ȃ��l�ɂ͎Ó߂��܂����A�����Ĉ��l�Ås�����Ƃ͂ł��܂����B �Œ��ł�2�l�̃`�[�������蓖�ĂÄA���Ƃ��s���A���S�ȃ`�[�����[�N�ð‘£i���ă^�X�N�����������܂��B +‘¼‚Ì‚·‚ׂĂªŽ¸”s‚µ‚½ê‡‚ÍA‘Þ‹ü‚Èì‹Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢l‚ɂ͎Óß‚µ‚Ü‚·‚ªAŒˆ‚µ‚Ĉêl‚Ås‚¤‚±‚Ƃ͂ł«‚Ü‚¹‚ñB Å’á‚Å‚à2l‚̃`[ƒ€‚ðŠ„‚è“–‚Ä‚ÄAì‹Æ‚ðs‚¢AŒ’‘S‚ȃ`[ƒ€ƒ[ƒN‚ð‘£i‚µ‚ă^ƒXƒN‚ðŠ®—¹‚³‚¹‚Ü‚·B Next [How to Gather Support for a Project](06-How-to-Gather-Support-for-a-Project.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md index fbf089e..079b83b 100644 --- a/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md +++ b/jp/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -1,5 +1,5 @@ # How to Gather Support for a Project -�v���W�F�N�g�̃T�|�[�g���W�߂��ɂÍA�g�D�S�̂É^�̉��l�������r�W�������ì¬ï¿½ï¿½ï¿½Ä“`���܂��B ���Ȃ��̃r�W�����ì¬ï¿½É‘��Ìl���������L���悤�Ƃ����B �����͔ނ��ɂ��Ȃ����T�|�[�g���é—�R���^���A���Ȃ��̃A�C�f�A�̉��b���^���܂��B �v���W�F�N�g�̎��v�T�|�[�^�[���•ʂɕ��W���܂��B �”\�Ȍ����A�������������B �”\�ł����ÎA�����i�⃂�b�N�A�b�v�������ăA�C�f�A�𔭊������Ă��������B �v���g�^�C�v�Í��ɋ��͂ł����A�\�t�g�E�F�A�łÍ����������͂邩�ɗD���Ă��܂��B +ƒvƒƒWƒFƒNƒg‚̃Tƒ|[ƒg‚ðW‚ß‚é‚É‚ÍA‘gD‘S‘Ì‚É^‚̉¿’l‚ðŽ¦‚·ƒrƒWƒ‡ƒ“‚ð쬂µ‚Ä“`‚¦‚Ü‚·B ‚ ‚È‚½‚̃rƒWƒ‡ƒ“쬂ɑ¼‚Ìl‚½‚¿‚ð‹¤—L‚µ‚悤‚Æ‚·‚éB ‚±‚ê‚͔ނç‚É‚ ‚È‚½‚ðƒTƒ|[ƒg‚·‚é——R‚ð—^‚¦A‚ ‚È‚½‚̃AƒCƒfƒA‚̉¶Œb‚ð—^‚¦‚Ü‚·B ƒvƒƒWƒFƒNƒg‚ÌŽå—vƒTƒ|[ƒ^[‚ðŒÂ•ʂɕåW‚µ‚Ü‚·B ‰Â”\‚ÈŒÀ‚èA‹³‚¦‚Ä‚­‚¾‚³‚¢B ‰Â”\‚Å‚ ‚ê‚ÎAŽŽì•i‚⃂ƒbƒNƒAƒbƒv‚ðì‚Á‚ăAƒCƒfƒA‚ð”­Šö‚³‚¹‚Ä‚­‚¾‚³‚¢B ƒvƒƒgƒ^ƒCƒv‚Íí‚É‹­—͂ł·‚ªAƒ\ƒtƒgƒEƒFƒA‚Å‚Íà–¾•¶‚æ‚è‚͂邩‚É—D‚ê‚Ä‚¢‚Ü‚·B Next [How to Grow a System](07-How-to-Grow-a-System.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md index 2b17aaa..e3959ae 100644 --- a/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md +++ b/jp/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -1,23 +1,23 @@ # How to Grow a System -�؂̗t�ɂ͑��l�̃A�C�f�A���܂܂��Ă��܂����A���l�̌`�����͂����S�ɂ͗������Ă��܂����B�ó‚ªï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½B�����͑傫���Ȃ��܂��B���l�̂悤�Ɍ����A���葽���̗p�r�������܂��B���ǂ����͉ʎ��ð¶‚݂܂��B���̌��A�����͎��ÉA���̑̂͑��Ì����ɉh�{���^���܂��B +–؂̗t‚ɂ͑ål‚̃AƒCƒfƒA‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·‚ªA¬l‚ÌŒ`‚âŒø—Í‚ðŠ®‘S‚ɂ͗‰ð‚µ‚Ä‚¢‚Ü‚¹‚ñBã󂪬’·‚·‚éB‚»‚ê‚͑傫‚­‚È‚è‚Ü‚·B‘ål‚̂悤‚ÉŒ©‚¦A‚æ‚葽‚­‚Ì—p“r‚ª‚ ‚è‚Ü‚·BŒ‹‹Ç‚»‚ê‚͉ʎÀ‚ð¶‚݂܂·B‚»‚ÌŒãA‚»‚ê‚ÍŽ€‚ÉA‚»‚̑̂͑¼‚̶•¨‚ɉh—{‚ð—^‚¦‚Ü‚·B -�������͂��̂悤�ȃ\�t�g�E�F�A�������ґò‚³‚������Ă��܂��B���͂����ł͂Ȃ��B�x�r�[�u���b�W�͂����܂��ñ‚ªA�������̋��͂����܂����B�u���b�W�̓\�t�g�E�F�A�������͂邩�ɊȒP�ł��B +Ž„‚½‚¿‚Í‚»‚̂悤‚ȃ\ƒtƒgƒEƒFƒA‚ðˆµ‚¤æÒ‘ò‚³‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‹´‚Í‚»‚¤‚ł͂Ȃ¢Bƒxƒr[ƒuƒŠƒbƒW‚Í‚ ‚è‚Ü‚¹‚ñ‚ªA–¢Š®¬‚Ì‹´‚Í‚ ‚è‚Ü‚¹‚ñBƒuƒŠƒbƒW‚̓\ƒtƒgƒEƒFƒA‚æ‚è‚à‚͂邩‚ÉŠÈ’P‚Å‚·B -�\�t�g�E�F�A�������������Æl���邱�ƂÍA�����È��_�I�ȃC���[�W�𓾂��O�ɗL�p�Èi���ð‹‚��邱�Ƃ��ł����̂ÅA�ǂ��l���ł��B���[�U�[�����̃t�B�[�h�o�b�N�𓾂ÄA�������g���Ä������C�����邱�Ƃ��ł��܂��B�ア�葫���؂����邱�Ƃ͌��N�ł��B +ƒ\ƒtƒgƒEƒFƒA‚ª¬’·‚µ‚Ä‚¢‚邯l‚¦‚邱‚Æ‚ÍAŠ®àø‚È¸_“I‚ȃCƒ[ƒW‚𓾂é‘O‚É—L—p‚Èi•à‚ð‹‚°‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚ÅA—Ç‚¢l‚¦‚Å‚·Bƒ†[ƒU[‚©‚ç‚̃tƒB[ƒhƒoƒbƒN‚𓾂ÄA‚»‚ê‚ðŽg‚Á‚Ĭ’·‚ðC³‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BŽã‚¢Žè‘«‚ðØ‚èŽæ‚邱‚Ƃ͌’N‚Å‚·B -�v���O���}�ÍA�z�����Ďg�p�ł��銮�������V�X�e�����݌v�����K�v�������܂��B�������A���x�ȃv���O���}�͂����Ƒ����̂��Ƃ����Ȃ����΂Ȃ��Ȃ��B���������V�X�e���ÅI���é¬ï¿½ï¿½ï¿½o�H���݌v�����K�v�������܂��B�A�C�f�A�̉��������ÄA�ł��邾���X���[�Y�ɗL�p�Èl�H���ɕς��铹���‚����̂͂��Ȃ��̎d���ł��B +ƒvƒƒOƒ‰ƒ}‚ÍA”z‘—‚µ‚ÄŽg—p‚Å‚«‚銮¬‚µ‚½ƒVƒXƒeƒ€‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µA‚“x‚ȃvƒƒOƒ‰ƒ}‚Í‚à‚Á‚Æ‘½‚­‚Ì‚±‚Æ‚ð‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢BŠ®¬‚µ‚½ƒVƒXƒeƒ€‚ÅI‚í‚鬒·Œo˜H‚ðÝŒv‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BƒAƒCƒfƒA‚̉è‚ðŽæ‚Á‚ÄA‚Å‚«‚邾‚¯ƒXƒ€[ƒY‚É—L—p‚ÈlH•¨‚ɕς¦‚铹‚ð‚‚­‚é‚̂͂ ‚È‚½‚ÌŽdŽ–‚Å‚·B -�������s���ɂÍA�ÅI���ʂ����o�����A�G���W�j�A�����O�`�[�������������è‹ï¿½ï¿½ï¿½é‚±ï¿½Æ‚��ł������@�œ`�B�����K�v�������܂��B�������A���Ȃ��͂܂��A�ނ炪���ǂ��ɂ��Ă��A�ǂ��ɂ��Ă��傫�Ȕ����������Ă��Ȃ��Ƃ����És�������ނ��ɓ`���Ȃ����΂Ȃ��܂����B�؂Í����Ă��Ȃ����΂Ȃ��܂����B�����͈��_�Ŏ����ł͂Ȃ炸�A���ŕ������邱�Ƃ͂ł��܂����B +‚±‚ê‚ðs‚¤‚É‚ÍAÅIŒ‹‰Ê‚ðŽ‹Šo‰»‚µAƒGƒ“ƒWƒjƒAƒŠƒ“ƒOƒ`[ƒ€‚ª‹»•±‚µ‚Ä‚â‚è‹‚°‚邱‚Æ‚ª‚Å‚«‚é•û–@‚Å“`’B‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚µ‚©‚µA‚ ‚È‚½‚͂܂½A”ނ炪¡‚Ç‚±‚É‚¢‚Ä‚àA‚Ç‚±‚É‚¢‚Ä‚à‘å‚«‚È”ò–ô‚ðŒ©‚¹‚Ä‚¢‚È‚¢‚Æ‚±‚ë‚És‚­“¹‚ð”Þ‚ç‚É“`‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB–؂Ͷ‚«‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ê‚͈ê“_‚ÅŽ€‚ñ‚ł͂Ȃ炸AŒã‚Å•œŠˆ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -���̃A�v���[�`�ÍA�������ɓW�J�����Ă��܂��B�������邱�Ƃ̂Ȃ��}�C���X�g�[���ÍA�o�H�ɉ����Äi�����}�[�N���邽�߂Ɏg�p�����܂��B�������I�ȃr�W�l�X�‹��łÍA���Ƃ��݌v���ꂽ�G���h�|�C���g���牓�������Ă��Ă��A�}�C���X�g�[���������[�X�����A�ł��邾���������v���グ�邱�Ƃ��őP�̕��@�ł��B�v���O���}�[�̎d����1�‚ÍA�}�C���X�g�[���ŕ\���ꂽ�����o�H�������ɑI�����邱�Ƃɂ����ÄA�����̕��V�Æï¿½ï¿½ï¿½ï¿½Ì•��V�̃o�����X���Ƃ邱�Ƃł��B +‚±‚̃Aƒvƒ[ƒ`‚ÍA—†ùó‚É“WŠJ‚³‚ê‚Ä‚¢‚Ü‚·B‰“‚·‚¬‚邱‚Ƃ̂Ȃ¢ƒ}ƒCƒ‹ƒXƒg[ƒ“‚ÍAŒo˜H‚ɉˆ‚Á‚Äi’»‚ðƒ}[ƒN‚·‚邽‚߂Ɏg—p‚³‚ê‚Ü‚·B’´‹£‘ˆ“I‚ȃrƒWƒlƒXŠÂ‹«‚Å‚ÍA‚½‚Æ‚¦ÝŒv‚³‚ꂽƒGƒ“ƒhƒ|ƒCƒ“ƒg‚©‚牓‚­—£‚ê‚Ä‚¢‚Ä‚àAƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªƒŠƒŠ[ƒX‚³‚êA‚Å‚«‚邾‚¯‘‚­Žû‰v‚ðã‚°‚邱‚Æ‚ªÅ‘P‚Ì•û–@‚Å‚·BƒvƒƒOƒ‰ƒ}[‚ÌŽdŽ–‚Ì1‚‚ÍAƒ}ƒCƒ‹ƒXƒg[ƒ“‚Å•\‚³‚ꂽ¬’·Œo˜H‚ðŒ«–¾‚É‘I‘ð‚·‚é‚±‚Ƃɂæ‚Á‚ÄA‘¦Žž‚Ì•ñV‚Æ«—ˆ‚Ì•ñV‚̃oƒ‰ƒ“ƒX‚ð‚Æ‚é‚±‚Ƃł·B -���i�I�ȃv���O���}�ÍA�\�t�g�E�F�A�A�`�[���A�����Ñl���ð‘‚₷�Ƃ���3�‚ÌÓ”C�𕉂��Ă��܂��B +æi“I‚ȃvƒƒOƒ‰ƒ}‚ÍAƒ\ƒtƒgƒEƒFƒAAƒ`[ƒ€A‚¨‚æ‚Ñlˆõ‚ð‘‚â‚·‚Æ‚¢‚¤3‚‚ÌÓ”C‚𕉂Á‚Ä‚¢‚Ü‚·B -�ǎÒARob Hafernik�ÍA���̃Z�N�V�����̂��̃R�����g�ÅA�������S�Ɉ��p�������������܂��������Ƃ͂ł��Ȃ��F +“ÇŽÒARob Hafernik‚ÍA‚±‚̃ZƒNƒVƒ‡ƒ“‚Ì‚±‚̃Rƒƒ“ƒg‚ÅAŽ„‚ªŠ®‘S‚Ɉø—p‚·‚邿‚è‚à‚¤‚Ü‚­‚¢‚­‚±‚Ƃ͂ł«‚È‚¢F ->���͂��Ȃ��������Åd�v�����������Ă����Ǝv���B�����̓V�X�e�������łȂ��A�A���S���Y���A���[�U�[�C���^�[�t�F�C�X�A�f�[�^���f���Ȃǂł��B���Ȃ����傫�ȖڕW���B�����邽�߂ɑ��K�͂ȃV�X�e���Ɏ����g�ނ悤�ɂȂ��ÆA���΂Éd�v�ł��B�I�����ɋ߂Â��A���ׂĂ����傤�ǂ��܂������Ȃ����Ƃ𔭌������Ƃ������ʂȋ��|�قLj����Ȃ��i���[�҃j���[�X�V�X�e���Ìŋ߂̑厸�s�������������j�B���͂����Éi���ÅA���������R�̖@���ƌ����Ă��܂��B���K�͂ŕ��G�ȃV�X�e���̓[�������������邱�Ƃ͂ł��܂����B�P���ȃV�X�e���������A�̈Ó}�I�ȃX�e�b�v��G�ȃV�X�e���ɂ����i���ł��܂����B +>Ž„‚Í‚ ‚È‚½‚ª‚±‚±‚Åd—v«‚ð‹­’²‚µ‚Ä‚¢‚邯Žv‚¤B‚±‚ê‚̓VƒXƒeƒ€‚¾‚¯‚łȂ­AƒAƒ‹ƒSƒŠƒYƒ€Aƒ†[ƒU[ƒCƒ“ƒ^[ƒtƒFƒCƒXAƒf[ƒ^ƒ‚ƒfƒ‹‚Ȃǂł·B‚ ‚È‚½‚ª‘å‚«‚È–Ú•W‚ð’B¬‚·‚邽‚߂ɑå‹K–͂ȃVƒXƒeƒ€‚ÉŽæ‚è‘g‚ނ悤‚É‚È‚é‚ÆAâ‘΂Éd—v‚Å‚·BI‚í‚è‚ɋ߂«A‚·‚ׂĂª‚¿‚傤‚Ç‚¤‚Ü‚­‚¢‚©‚È‚¢‚±‚Ƃ𔭌©‚·‚邯‚¢‚¤“Á•ʂȋ°•|‚قLj«‚­‚È‚¢i“Š•[ŽÒƒjƒ…[ƒXƒVƒXƒeƒ€‚Ìŋ߂̑厸”s‚ðŒ©‚Ä‚­‚¾‚³‚¢jBŽ„‚Í‚³‚ç‚Éi‚ñ‚ÅA‚»‚ê‚ðŽ©‘R‚Ì–@‘¥‚ÆŒ¾‚Á‚Ä‚¢‚Ü‚·B‘å‹K–͂ŕ¡ŽG‚ȃVƒXƒeƒ€‚̓[ƒ‚©‚çŽÀ‘•‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB’Pƒ‚ȃVƒXƒeƒ€‚©‚çˆê˜A‚̈Ó}“I‚ȃXƒeƒbƒv‚Å•¡ŽG‚ȃVƒXƒeƒ€‚É‚µ‚©i‰»‚Å‚«‚Ü‚¹‚ñB -�ǂ����ɕÔM���邱�Ƃ��ł��܂����H* Fiat lux *�I +‚Ç‚¿‚ç‚É•ÔM‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚©H* Fiat lux *I Next [How to Communicate Well](08-How-to-Communicate-Well.md) diff --git a/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index 527af5c..e79706c 100644 --- a/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/jp/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -1,11 +1,11 @@ # How to Communicate Well -���܂��R�~���j�P�[�V�����������ɂÍA���ꂪ�ǂ��قǓ�������F�����Ȃ����΂Ȃ��܂����B�����͂��ꎩ�g�̃X�L���ł��B���Ȃ����R�~���j�P�[�V�������Ȃ����΂Ȃ��Ȃ��l�Ɍ��ׂ������Ƃ��������ɂ����ÄA�����͂��è¢ï¿½ï¿½ï¿½É‚Ȃ��B�ނ��͂��Ȃ��ð—‰ï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚É”M�S�ɓ����Ă��܂����B�ނ��͕n���ɘb���A�n���É����B�ނ��͂��΂��ΉߘJ�܂��͑ދ��ł����A�Œ��ł����Ȃ��������g���ł����傫�Ȗ����ł͂Ȃ��A�����̎d���ɑ����W�����Ă��܂��B���Ƃ����u���A���M�A�����A���������H���邱�Ƃ̗��_��1�‚ÍA���������܂������ÎA���肪�ǂ��ɂ����̂��A�ǂ̂悤�ɒ��������̂��������ȒP�ɒm�邱�Ƃ��ł����Ƃ������Ƃł��B +‚¤‚Ü‚­ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðŽæ‚é‚É‚ÍA‚»‚ꂪ‚Ç‚ê‚قǓ‚¢‚©‚ð”Fޝ‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚ê‚Í‚»‚ꎩg‚̃XƒLƒ‹‚Å‚·B‚ ‚È‚½‚ªƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢l‚ÉŒ‡Š×‚ª‚ ‚邯‚¢‚¤Ž–ŽÀ‚É‚æ‚Á‚ÄA‚»‚ê‚Í‚æ‚袓ï‚ɂȂéB”Þ‚ç‚Í‚ ‚È‚½‚ð—‰ð‚·‚邱‚ƂɔMS‚É“­‚¢‚Ä‚¢‚Ü‚¹‚ñB”Þ‚ç‚Í•nŽã‚ɘb‚µA•nŽã‚É‘‚­B”Þ‚ç‚Í‚µ‚΂µ‚ΉߘJ‚Ü‚½‚͑ދü‚Å‚ ‚èAÅ’á‚Å‚à‚ ‚È‚½‚ªŽæ‚è‘g‚ñ‚Å‚¢‚é‘å‚«‚È–â‘è‚ł͂Ȃ­AŽ©•ª‚ÌŽdŽ–‚É‘½­W’†‚µ‚Ä‚¢‚Ü‚·BŽö‹Æ‚ðŽóu‚µAŽ·•MA‰‰àA’®‰ð‚ðŽÀ‘H‚·‚邱‚Ƃ̗˜“_‚Ì1‚‚ÍAŽ™“¶‚ª‚¤‚Ü‚­‚¢‚¯‚ÎA–â‘肪‚Ç‚±‚É‚ ‚é‚Ì‚©A‚ǂ̂悤‚É’ù³‚·‚é‚Ì‚©‚ð‚æ‚èŠÈ’P‚É’m‚邱‚Æ‚ª‚Å‚«‚邯‚¢‚¤‚±‚Ƃł·B -�v���O���}�[�Í����c�肪�Þ��̃`�[���Ƃ̃R�~���j�P�[�V�����Ɉˑ������Љ��I�ȓ����ł��B���x�ȃv���O���}�[�ÍA�����x���Þ��̃`�[���O�Ìl�X�Ƃ̃R�~���j�P�[�V�����Ɉˑ������Љ��I�ȓ����ł��B +ƒvƒƒOƒ‰ƒ}[‚Ͷ‚«Žc‚肪”Þ—‚̃`[ƒ€‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ɉˑ¶‚·‚éŽÐ‰ï“I‚È“®•¨‚Å‚·B‚“x‚ȃvƒƒOƒ‰ƒ}[‚ÍA–ž‘«“x‚ª”Þ—‚̃`[ƒ€ŠO‚ÌlX‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ɉˑ¶‚·‚éŽÐ‰ï“I‚È“®•¨‚Å‚·B -�v���O���}�[�Í������疽�߂��o���܂��B�������s��1�‚̋����[�����@�ÍA�`�[���O�̉��炩�̒��Ă��J�n���邱�Ƃł��B�����ÍA* strawman *�܂���* white-paper *�`���ÅA�܂��͌����ł̂Ýs�����Ƃ��ł��܂��B���̃��[�_�[�V�b�v�ÍA�c�_�Ì������ݒ肷���Ƃ����傫�ȗ��_�������܂��B�����͂��Ȃ����ᔻ�ɂ��炵�A�����Ɉ������ƂÉA�����Ɩ������\�I���܂��B���x�ȃv���O���}�ÍA�Ɠ��̗͂������Ă��邽�ߓƎ��ÌÓ”C�������̂ÅA�������󂯓����é€ï¿½ï¿½ï¿½ï¿½ï¿½Å‚������K�v�������܂��B�v���O���}�[�ł͂Ȃ��N�ƉƂÍA�����‚��̓_���[�_�[�V�b�v���ñ‹Ÿ‚����v���O���}�[���K�v�Ƃ��Ă��܂��B�v���O���}�[�ÍA�����ɗ����Ă����A�C�f�A�ƃ��A���e�B�̋��n���̈ꕔ�ł��B +ƒvƒƒOƒ‰ƒ}[‚ͬ—‚©‚ç–½—ß‚ðo‚µ‚Ü‚·B‚±‚ê‚ðs‚¤1‚‚̋»–¡[‚¢•û–@‚ÍAƒ`[ƒ€ŠO‚̉½‚ç‚©‚Ì’ñˆÄ‚ðŠJŽn‚·‚邱‚Ƃł·B‚±‚ê‚ÍA* strawman *‚Ü‚½‚Í* white-paper *Œ`Ž®‚ÅA‚Ü‚½‚ÍŒû“ª‚ł̂Ýs‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̃Š[ƒ_[ƒVƒbƒv‚ÍA‹c˜_‚ÌðŒ‚ðÝ’è‚·‚邯‚¢‚¤‘å‚«‚È—˜“_‚ª‚ ‚è‚Ü‚·B‚»‚ê‚Í‚ ‚È‚½‚ð”á”»‚É‚³‚炵A‚³‚ç‚Ɉ«‚¢‚±‚Æ‚ÉA‹‘â‚Æ–³Ž‹‚ð–\˜I‚µ‚Ü‚·B‚“x‚ȃvƒƒOƒ‰ƒ}‚ÍA“Æ“Á‚Ì—Í‚ðŽ‚Á‚Ä‚¢‚邽‚ߓƎ©‚ÌÓ”C‚ª‚ ‚é‚Ì‚ÅA‚±‚ê‚ðŽó‚¯“ü‚ê‚途õ‚ª‚Å‚«‚Ä‚¢‚é•K—v‚ª‚ ‚è‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ł͂Ȃ¢‹N‹Æ‰Æ‚ÍA‚¢‚­‚‚©‚Ì“_‚ŃŠ[ƒ_[ƒVƒbƒv‚ð’ñ‹Ÿ‚·‚éƒvƒƒOƒ‰ƒ}[‚ð•K—v‚Æ‚µ‚Ä‚¢‚Ü‚·BƒvƒƒOƒ‰ƒ}[‚ÍAŒ»ŽÀ‚É—Š‚Á‚Ä‚¢‚éƒAƒCƒfƒA‚ÆƒŠƒAƒŠƒeƒB‚Ì‹´“n‚µ‚̈ꕔ‚Å‚·B -���͂��܂��R�~���j�P�[�V�������}�X�^�[�ł��܂����ł������A�������ݎ����g���ł����̂ÍA����4�‚̃A�v���[�`���Ƃ��Ă����Ǝv���܂��B�����̃A�C�f�A�������É����������A���͌����Řb���A���Íi���ۂ̎��ɂ��d�q�I�ɂ��j�f���������ÄA���̃v���Z�X���h�������J���Ԃ��B���͂��̎��̓���R�~���j�P�[�V�����łÍA���x�����������\���Éh�������Ȃ��Ǝv���܂��B���Ȃ��̃A�C�f�A�������Ɏ󂯓��������Ȃ��Ȃ��A���Ȃ��͗��_���Ă͂����܂����B�ނ��Ì����ɃG�l���M�[�𓊓������ê‡ï¿½A�N�����Ȃ��̂��߂ɂ������n�ゾ�Ƃ͎v���Ȃ��ł��傤�B +Ž„‚Í‚¤‚Ü‚­ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚ðƒ}ƒXƒ^[‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½‚ªAŽ„‚ªŒ»ÝŽæ‚è‘g‚ñ‚Å‚¢‚é‚Ì‚ÍAŽ„‚ª4‚‚̃Aƒvƒ[ƒ`‚ð‚Æ‚Á‚Ä‚¢‚邯Žv‚¢‚Ü‚·BŽ©•ª‚̃AƒCƒfƒA‚ð‡’²‚É€”õ‚µ‚½ŒãAŽ„‚ÍŒû“ª‚Řb‚µAކ‚ÍiŽÀÛ‚ÌŽ†‚É‚à“dŽq“I‚É‚àjƒfƒ‚‚ðŒ©‚¹‚ÄA‚±‚̃vƒƒZƒX‚ðh•ø‹­‚­ŒJ‚è•Ô‚·BŽ„‚Í‚±‚ÌŽí‚̓‚¢ƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Å‚ÍA‰½“x‚àŽ„‚½‚¿‚ª\•ª‚Éh•ø‹­‚­‚È‚¢‚ÆŽv‚¢‚Ü‚·B‚ ‚È‚½‚̃AƒCƒfƒA‚ª‚·‚®‚Ɏ󂯓ü‚ê‚ç‚ê‚È‚¢‚È‚çA‚ ‚È‚½‚Í—Ž’_‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñB”Þ‚ç‚Ì€”õ‚ɃGƒlƒ‹ƒM[‚𓊓ü‚µ‚½ê‡A’N‚à‚ ‚È‚½‚Ì‚½‚߂ɂ»‚ê‚ð•nŽã‚¾‚Ƃ͎v‚í‚È‚¢‚Å‚µ‚傤B -Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) +Next [How to Tell People Things They Don't Want to Hear](09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md) diff --git a/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md b/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md new file mode 100644 index 0000000..f294f5c --- /dev/null +++ b/jp/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Don't-Want-to-Hear.md @@ -0,0 +1,9 @@ +# How to Tell People Things They Don't Want to Hear + +‚ ‚È‚½‚Í‚µ‚΂µ‚ÎAlX‚É•s‰õŠ´‚ð—^‚¦‚邿‚¤‚È‚±‚Æ‚ð“`‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B‚ ‚È‚½‚ª‰½‚ç‚©‚Ì——R‚Å‚±‚ê‚ð‚µ‚Ä‚¢‚邱‚Æ‚ð–Y‚ê‚È‚¢‚Å‚­‚¾‚³‚¢B–â‘è‚ɂ‚¢‚ĉ½‚à‚Å‚«‚È‚¢ê‡‚Å‚àA‚Å‚«‚邾‚¯‘‚­‚»‚ê‚ç‚ð“`‚¦‚Ä‚¢‚é‚Ì‚ÅA”Þ‚ç‚Í\•ª‚Èî•ñ‚𓾂ç‚ê‚Ü‚·B + +’N‚©‚É–â‘è‚ð“`‚¦‚éŗǂ̕û–@‚ÍA“¯Žž‚ɉðŒˆô‚ð’ñަ‚·‚邱‚Ƃł·B‘æ“ñ‚ÌÅ‘P‚Ì•û–@‚ÍA–â‘è‚Ì•‚¯‚ðŽØ‚è‚Ĕނç‚ɃAƒs[ƒ‹‚·‚邱‚Ƃł·BM‚¶‚ç‚ê‚È‚¢ŠëŒ¯‚ª‚ ‚éꇂÍA‚ ‚È‚½‚ÌŽå’£‚ÌŽxŽ‚ðW‚ß‚é‚ׂ«‚Å‚·B + +‚ ‚È‚½‚ªŒ¾‚í‚È‚¯‚ê‚΂Ȃç‚È‚¢Å‚à•s–ù‰õ‚ňê”Ê“I‚È‚±‚Ƃ̈ê‚‚ÍA”ނ̃XƒPƒWƒ…[ƒ‹‚ªŠÔˆá‚Á‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł·B—ÇS“I‚ȃvƒƒOƒ‰ƒ}[‚ÍA‚±‚ê‚ðŒ¾‚¤‚̂͌™‚Å‚·‚ªA‚Å‚«‚邾‚¯‘‚­Œ¾‚í‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB—Bˆê‚̃AƒNƒVƒ‡ƒ“‚ª’N‚ɂłà’m‚点‚邱‚Ƃł ‚Á‚Ä‚àAƒ}ƒCƒ‹ƒXƒg[ƒ“‚ªŠŠ‚Á‚½‚Æ‚«‚ɃAƒNƒVƒ‡ƒ“‚ð‰„Šú‚·‚邿‚è‚àˆ«‚¢‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚ðs‚¤‚É‚ÍA•¨—??“I‚ɂłȂ­‚Ä‚àA­‚È‚­‚Æ‚à¸_“I‚ɂ̓`[ƒ€‚Æ‚µ‚Äs‚¤•û‚ª—Ç‚¢‚Å‚·B‚ ‚È‚½‚ª—§‚Á‚Ä‚¢‚éꊂƂ»‚ê‚ɂ‚¢‚ĉ½‚ª‚Å‚«‚é‚©‚Ì—¼•û‚Å‚ ‚È‚½‚̃`[ƒ€‚Ì“ü—Í‚ð–]‚Þ‚Å‚µ‚傤Bƒ`[ƒ€‚Í‚ ‚È‚½‚ɉe‹¿‚ð—^‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB + +Next [How to Deal with Managerial Myths](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md index 5eae1b0..8a4d9ca 100644 --- a/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md +++ b/jp/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -1,13 +1,13 @@ # How to Deal with Managerial Myths -* myth *�Ƃ������t�͎��ɂ̓t�B�N�V�������Ӗ����܂��B�����������͂����[���Ӗ��������܂��B�����͂܂��A�F���Æl�ނƂ̊֌W�����������@���I�Ӗ��̕������Ӗ����܂��B�}�l�[�W���[�ÍA�v���O���}�[�Ƃ��Ċw�ñ‚¾‚��Ƃ��Y���ÄA�����Ì_�b���M�����X���������܂��B�������Ì_�b���U���ł��邱�Ƃ��M�������悤�Ƃ����͖̂����ł��莸�s���Ă����ł��傤�B���̂��ßA���Ȃ��͂������ÌM�O���_�b�Ƃ��ĔF�����ׂ��ł��F +* myth *‚Æ‚¢‚¤Œ¾—t‚ÍŽž‚ɂ̓tƒBƒNƒVƒ‡ƒ“‚ðˆÓ–¡‚µ‚Ü‚·B‚µ‚©‚µ‚»‚ê‚Í‚æ‚è[‚¢ˆÓ–¡‚ðŽ‚¿‚Ü‚·B‚»‚ê‚͂܂½A‰F’ˆ‚Æl—ނƂ̊֌W‚ðà–¾‚·‚é@‹³“IˆÓ–¡‚Ì•¨Œê‚ðˆÓ–¡‚µ‚Ü‚·Bƒ}ƒl[ƒWƒƒ[‚ÍAƒvƒƒOƒ‰ƒ}[‚Æ‚µ‚ÄŠw‚ñ‚¾‚±‚Æ‚ð–Y‚ê‚ÄA“Á’è‚Ì_˜b‚ðM‚¶‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚Ì_˜b‚ª‹U‚è‚Å‚ ‚邱‚Æ‚ðM‚¶‚³‚¹‚悤‚Æ‚·‚é‚͖̂³—ç‚Å‚ ‚莸”s‚µ‚Ä‚¢‚é‚Å‚µ‚傤B‚»‚Ì‚½‚ßA‚ ‚È‚½‚Í‚±‚ê‚ç‚ÌM”O‚ð_˜b‚Æ‚µ‚Ä”Fޝ‚·‚ׂ«‚Å‚·F -- ���葽���̃h�L�������g�����ɗD���Ă��܂��B �i�ނ��͂��ꂪ�~�������A���‚ł����Ȃ��������ɔ��₷���Ƃ��]���ł��Ȃ��B�j -- �v���O���}�͓����ɂ��邱�Ƃ��ł��܂��B �i�v���O���}�͌��Ⴂ�ɈقȂ��j -- �������X�s�[�h�A�b�v���邽�߂ÉA���\�[�X���㔼�̃v���W�F�N�g�ɒlj����邱�Ƃ��ł��܂��B �i�V�����l�Ƃ̃R�~���j�P�[�V�����̃R�X�g�ÍA�����ɂȂ��������قƂ��Ç��ɉÛł����܂��B�j -- �\�t�g�E�F�A�J�����m���Ɍ��ς��邱�Ƃ��”\�ł��B �i���_�I�ɂ��”\�ł͂����܂����B�j -- �v���O���}�Ì��Y���ÍA�R�[�h�s�̂悤�ȒP���ȃ��g���b�N�̊ϓ_���瑪���ł��܂��B �i�����Ȍ������͂ł����ÎA�R�[�h�s�͈����A�ǂ����Ƃł͂����܂����B�j +- ‚æ‚葽‚­‚̃hƒLƒ…ƒƒ“ƒg‚ªí‚É—D‚ê‚Ä‚¢‚Ü‚·B i”Þ‚ç‚Í‚»‚ꂪ—~‚µ‚¢‚ªA‚¢‚Â‚Å‚à‚ ‚È‚½‚ª‚»‚ê‚É”ï‚â‚·‚±‚Æ‚ð–]‚ñ‚Å‚¢‚È‚¢Bj +- ƒvƒƒOƒ‰ƒ}‚Í“¯“™‚É‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B iƒvƒƒOƒ‰ƒ}‚ÍŒ…ˆá‚¢‚ɈقȂéj +- ‚»‚ê‚ðƒXƒs[ƒhƒAƒbƒv‚·‚邽‚ß‚ÉAƒŠƒ\[ƒX‚ðŒã”¼‚̃vƒƒWƒFƒNƒg‚ɒljÁ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B iV‚µ‚¢l‚Ƃ̃Rƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚̃RƒXƒg‚ÍA•‚¯‚É‚È‚é‚æ‚è‚à‚Ù‚Æ‚ñ‚Çí‚ɉÛÅ‚³‚ê‚Ü‚·Bj +- ƒ\ƒtƒgƒEƒFƒAŠJ”­‚ðŠmŽÀ‚ÉŒ©Ï‚à‚邱‚Æ‚ª‰Â”\‚Å‚·B i—˜_“I‚É‚à‰Â”\‚ł͂ ‚è‚Ü‚¹‚ñBj +- ƒvƒƒOƒ‰ƒ}‚̶ŽY«‚ÍAƒR[ƒhs‚̂悤‚È’Pƒ‚ȃƒgƒŠƒbƒN‚ÌŠÏ“_‚©‚瑪’è‚Å‚«‚Ü‚·B i‚à‚µŠÈŒ‰‚³‚ª—͂ł ‚ê‚ÎAƒR[ƒhs‚͈«‚¢A—Ç‚¢‚±‚Ƃł͂ ‚è‚Ü‚¹‚ñBj -�@������ÎA�������̂��Ƃ��������邱�Ƃ͂ł��܂����A�������Ă��Ȃ��ƈ����C�����ɂȂ炸�A�������Ì_�b�ɑÎR���Ă��Ȃ��̕]���𑹂Ȃ����Ƃ͂����܂����B�������Ì_�b�̂��ꂼ���ÍA�����N�����Ă��邩�����ۂɎx�z�������}�l�[�W���[�Ìl�������߂��B�^���ÍA�}�l�[�W���[���ނ炪�ǂ����Ηe�ՂɂȂ��A�ނ炪�����ê‡ï¿½É‚͂������W���邱�Ƃł��B +‹@‰ï‚ª‚ ‚ê‚ÎA‚±‚ê‚ç‚Ì‚±‚Æ‚ðà–¾‚·‚邱‚Ƃ͂ł«‚Ü‚·‚ªA¬Œ÷‚µ‚Ä‚¢‚È‚¢‚ƈ«‚¢‹CŽ‚¿‚ɂȂ炸A‚±‚ê‚ç‚Ì_˜b‚É‘ÎR‚µ‚Ä‚ ‚È‚½‚Ì•]”»‚𑹂Ȃ¤‚±‚Ƃ͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚ç‚Ì_˜b‚Ì‚»‚ꂼ‚ê‚ÍA‰½‚ª‹N‚±‚Á‚Ä‚¢‚é‚©‚ðŽÀÛ‚ÉŽx”z‚µ‚Ä‚¢‚éƒ}ƒl[ƒWƒƒ[‚Ìl‚¦‚ð‹­‚ß‚éB^ŽÀ‚ÍAƒ}ƒl[ƒWƒƒ[‚ª”ނ炪—Ç‚¯‚ê‚ΗeˆÕ‚ɂȂèA”ނ炪ˆ«‚¢ê‡‚ɂ͂»‚ê‚ð–W‚°‚邱‚Ƃł·B Next [How to Deal with Organizational Chaos](11-How-to-Deal-with-Organizational-Chaos.md) \ No newline at end of file diff --git a/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md index 47c458e..5f6967b 100644 --- a/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md +++ b/jp/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -1,11 +1,11 @@ # How to Deal with Organizational Chaos -���C�I�t�A�o�C�A�E�g�Aipos�A���ÎA�V�����̗p�Ȃǂ̂悤�ÈA�g�D�I�����̒Z�����Ԃ����΂��΂���܂��B�����͊F�ɂƂ��ĕs���ł����A�Âl�I�Ȏ����S�����؂���Ă���̂ł͂Ȃ��A�\�͂Åݗ����ꂽ�v���O���}�[�ɂƂ��Ă͂����炭�����s���ł��B�g�D�Ì����ÍA�v���O���}�ɂƂ��Ė��@�̗͂𔭊������D�̋@��ł��B����Í[�������̔閧�ł��邽�ßA�����Ō�ɕۑ����܂����B���Ȃ����v���O���}�[�łȂ���ÎA���ǂ�ł����Ă��������B +ƒŒƒCƒIƒtAƒoƒCƒAƒEƒgAiposA”­‰ÎAV‚µ‚¢Ì—p‚Ȃǂ̂悤‚ÈA‘gD“I¬—‚Ì’Z‚¢ŠúŠÔ‚ª‚µ‚΂µ‚΂ ‚è‚Ü‚·B‚±‚ê‚ç‚ÍŠF‚ɂƂÁ‚Ä•sˆÀ‚Å‚·‚ªAŒÂl“I‚ÈŽ©‘¸S‚ª—§Ø‚³‚ê‚Ä‚¢‚é‚̂ł͂Ȃ­A”\—Í‚ÅÝ—§‚³‚ꂽƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͂¨‚»‚ç‚­­‚µ•sˆÀ‚Å‚·B‘gD‚̬—‚ÍAƒvƒƒOƒ‰ƒ}‚ɂƂÁ‚Ä–‚–@‚̗͂𔭊ö‚·‚éâD‚Ì‹@‰ï‚Å‚·B‚»‚ê‚Í[‚¢•”‘°‚̔閧‚Å‚ ‚邽‚ßA‚±‚ê‚ðÅŒã‚ɕۑ¶‚µ‚Ü‚µ‚½B‚ ‚È‚½‚ªƒvƒƒOƒ‰ƒ}[‚łȂ¯‚ê‚ÎA¡“Ç‚ñ‚Å‚¨‚¢‚Ä‚­‚¾‚³‚¢B ->�G���W�j�A�͑n���͂Ǝ����͂�����Ă��܂��B +>ƒGƒ“ƒWƒjƒA‚Í‘n‘¢—͂Ǝ‘±—Í‚ðŽ‚Á‚Ä‚¢‚Ü‚·B -�m���G���W�j�A�͈�ʂ̃\�t�g�E�F�A��ЂłÍA�G���W�j�A����ʓI�É��i��̔�������A�r�W�l�X����ʓI�ɊǗ����邱�Ƃ��ł��Ȃ����ßA�G���W�j�A�Ȃ��ʼn���ì¬ï¿½ï¿½ï¿½ÄˆÛŽï¿½ï¿½ï¿½ï¿½é‚±ï¿½Æ‚͂ł��܂���B���̔\�͂ÍA�ꎞ�I�ȑg�D�����Ɋ֘A����قƂ�ǂ��ׂĂ̖��ɑ΂��ė��؂����̂ł��B���Ȃ������������Ă���Ƃ��A��������S�ɖ������ÄA����N�����Ă��Ȃ����̂悤�ɑ�����ׂ��ł��B���Ȃ��͂�����A��ق���邩�����܂��ñ‚ªA����N����ÎA�����炭���͂̂��߂ÉV�����d���𓾂邱�Ƃ��ł��܂��B����ʓI�ɂÍA���@�̗͂�����Ă��Ȃ��X�g���X�̑����l�����Ȃ��̗����̂ɓ����ÄA���Ȃ��ɉ����΂��������Ƃ�����悤�ɂȂ�܂��B���Ȃ����{���ɂ��ꂪ�n�����Ɗm�M���Ă���Ȃ�ÎA�ނ炪����܂Ŕ��΂�������̂���Ԃł��B +ƒmƒ“ƒGƒ“ƒWƒjƒA‚͈ê”ʂ̃\ƒtƒgƒEƒFƒA‰ïŽÐ‚Å‚ÍAƒGƒ“ƒWƒjƒA‚ªˆê”Ê“I‚É»•i‚ð”Ì”„‚µ‚½‚èAƒrƒWƒlƒX‚ðŒø‰Ê“I‚ÉŠÇ—‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚ßAƒGƒ“ƒWƒjƒA‚È‚µ‚ʼn½‚à쬂µ‚Ĉێ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‚±‚Ì”\—Í‚ÍAˆêŽž“I‚È‘gD‘›—‚ÉŠÖ˜A‚·‚é‚Ù‚Æ‚ñ‚Ç‚·‚ׂĂ̖â‘è‚ɑ΂µ‚Ä—§Ø‚·‚é‚à‚̂ł·B‚ ‚È‚½‚ª‚»‚ê‚ðŽ‚Á‚Ä‚¢‚邯‚«A¬—‚ðŠ®‘S‚É–³Ž‹‚µ‚ÄA‰½‚à‹N‚±‚Á‚Ä‚¢‚È‚¢‚©‚̂悤‚É‘±‚¯‚é‚ׂ«‚Å‚·B‚ ‚È‚½‚Í‚à‚¿‚ë‚ñA‰ðŒÙ‚³‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚à‚µ‹N‚±‚ê‚ÎA‚¨‚»‚ç‚­–‚—͂̂½‚ß‚ÉV‚µ‚¢ŽdŽ–‚𓾂邱‚Æ‚ª‚Å‚«‚Ü‚·B‚æ‚èˆê”Ê“I‚É‚ÍA–‚–@‚Ì—Í‚ðŽ‚Á‚Ä‚¢‚È‚¢ƒXƒgƒŒƒX‚Ì‘½‚¢l‚ª‚ ‚È‚½‚Ì—§•û‘̂ɓü‚Á‚ÄA‚ ‚È‚½‚ɉ½‚©‚΂©‚°‚½‚±‚Æ‚ðŒ¾‚¤‚悤‚ɂȂè‚Ü‚·B‚ ‚È‚½‚ª–{“–‚É‚»‚ꂪ”nŽ­‚¾‚ÆŠmM‚µ‚Ä‚¢‚é‚È‚ç‚ÎA”ނ炪‹Ž‚é‚܂Ŕ÷΂ñ‚Åèõ‚­‚Ì‚ªˆê”Ô‚Å‚·B -���Ȃ������[�_�[�ł���ÎA�������Ƃ𑼂Ìl���b�����Ƃ𖳎�����悤�Él�X�ɓ`���܂��B���Ìs���[�u�ÍA�Âl�I�ɂÍÅ��̂�̂ł���A���Ȃ��̉�Ђ�v���W�F�N�g�ÉÅ“K�ł��B +‚ ‚È‚½‚ªƒŠ[ƒ_[‚Å‚ ‚ê‚ÎA“¯‚¶‚±‚Ƃ𑼂Ìl‚ª˜b‚·‚±‚Ƃ𖳎‹‚·‚邿‚¤‚ÉlX‚É“`‚¦‚Ü‚·B‚±‚Ìs“®‘[’u‚ÍAŒÂl“I‚É‚ÍÅ‚‚Ì‚à‚̂ł ‚èA‚ ‚È‚½‚̉ïŽÐ‚âƒvƒƒWƒFƒNƒg‚ÉÅ“K‚Å‚·B Next [Glossary](../../GLOSSARY.md) diff --git a/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md index ec0d645..080cfba 100644 --- a/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md +++ b/jp/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -1,9 +1,9 @@ # How to Tell the Hard From the Impossible [//]: # (Version:1.0.1) -������Ƃ����ÄA�s�”\�ƌ��Ȃ��͎̂������̎d���ł��B�قƂ��ǂÌ��ƃv���O���}�[�̊ϓ_�����ÍA�P���ȃV�X�e�����ç¬ï¿½ï¿½ï¿½Å‚��Ȃ����A�����ł��Ȃ��ê‡ï¿½Í•s�”\�ł��B���̒��`�ɂ����ÄA�����ƌĂ΂������͕̂s�”\�ł��B���ʂ̒P�Ȃ��d���͓�����A�K�������s�”\�Ƃ����킯�ł͂Ȃ��B +“‚¢‚±‚Æ‚ð‚µ‚ÄA•s‰Â”\‚ÆŒ©‚È‚·‚͎̂„‚½‚¿‚ÌŽdŽ–‚Å‚·B‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÌŠÏ“_‚©‚ç‚ÍA’Pƒ‚ȃVƒXƒeƒ€‚©‚笒·‚Å‚«‚È‚¢‚©A„’è‚Å‚«‚È‚¢ê‡‚Í•s‰Â”\‚Å‚·B‚±‚Ì’è‹`‚É‚æ‚Á‚ÄAŒ¤‹†‚ƌĂ΂ê‚é‚à‚͕̂s‰Â”\‚Å‚·B‘å—ʂ̒P‚È‚éŽdŽ–‚͓‚¢‚ªA•K‚¸‚µ‚à•s‰Â”\‚Æ‚¢‚¤‚킯‚ł͂Ȃ¢B -�Ȋw�I�Ȋϓ_���\�t�g�E�F�A�H�w�̊ϓ_�����ÍA���ۂɂ͕s�”\�Ȃ��Ƃ������ɂ��܂������Ă����邩�������Ȃ��̂ÅA���̋��ʂ͖ʔ����Ȃ��B�����͋N�ƉƂ��P�Ȃé¢ï¿½ï¿½ï¿½Å‚����A�ނ炪�]�ނ��̂̂قƂ��ǂ𓾂é‡ï¿½ï¿½ï¿½I�ȉ����������‚����̂������邠�Ȃ��̎d���ɂȂ��܂��B�������ÍA���M�������ăX�P�W���[�������A���X�N���������������ê‡ï¿½É‚͓���ł��B +‰ÈŠw“I‚ÈŠÏ“_‚âƒ\ƒtƒgƒEƒFƒAHŠw‚ÌŠÏ“_‚©‚ç‚ÍAŽÀۂɂ͕s‰Â”\‚È‚±‚Æ‚ð”ñí‚É‚¤‚Ü‚­‚â‚Á‚Ä‚­‚ê‚é‚©‚à‚µ‚ê‚È‚¢‚Ì‚ÅA‚±‚Ì‹æ•ʂ͖ʔ’‚­‚È‚¢B‚»‚ê‚Í‹N‹Æ‰Æ‚ª’P‚Ȃ颓ï‚Å‚ ‚èA”ނ炪–]‚Þ‚à‚̂̂قƂñ‚ǂ𓾂釗“I‚ȉðŒˆô‚ðŒ©‚Â‚¯‚é‚̂𕂯‚é‚ ‚È‚½‚ÌŽdŽ–‚ɂȂè‚Ü‚·B‰ðŒˆô‚ÍAŽ©M‚ðŽ‚Á‚ăXƒPƒWƒ…[ƒ‹‚³‚êAƒŠƒXƒN‚ª—‰ð‚³‚ê‚Ä‚¢‚éꇂɂ͓‚¢‚Å‚·B -�ł����͓I�Ȕ��^���F���v�Z�����V�X�e���ȂÇA���R�Ƃ����v���𖞂������Ƃ͕s�”\�ł��B�v���������N���ɂ��邱�Ƃ��ł����ÎA�l�̖��͓I�Ȕ��^�ÆF���v�Z���A�������v���r���[�������ÏX�������A���̃X�^�C���Ɋ��Â��Čڋq�����x�����߂ÄA���������̂������҂��V�X�e�����\�z���܂��傤�B�����̑N���Ȓ��`���Ȃ��A���Ȃ��Í������܂����B +Å‚à–£—Í“I‚È”¯Œ^‚âF‚ðŒvŽZ‚·‚éƒVƒXƒeƒ€‚È‚ÇA”™‘R‚Æ‚µ‚½—v‹‚ð–ž‚½‚·‚±‚Ƃ͕s‰Â”\‚Å‚·B—vŒ‚ð‚æ‚è‘N–¾‚É‚·‚邱‚Æ‚ª‚Å‚«‚ê‚ÎAl‚Ì–£—Í“I‚È”¯Œ^‚ÆF‚ðŒvŽZ‚µA‚»‚ê‚ðƒvƒŒƒrƒ…[‚µ‚½‚è•ÏX‚µ‚½‚èAŒ³‚̃Xƒ^ƒCƒ‹‚ÉŠî‚¢‚Čڋq–ž‘«“x‚ð‚‚ß‚ÄA‚½‚­‚³‚ñ‚Ì‚¨‹à‚ð‰Ò‚®ƒVƒXƒeƒ€‚ð\’z‚µ‚Ü‚µ‚傤B¬Œ÷‚Ì‘N–¾‚È’è‹`‚ª‚È‚¢A‚ ‚È‚½‚ͬŒ÷‚µ‚Ü‚¹‚ñB Next [How to Utilize Embedded Languages](02-How-to-Utilize-Embedded-Languages.md) diff --git a/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index 99ef99c..717a912 100644 --- a/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/jp/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -1,11 +1,11 @@ # How to Utilize Embedded Languages -�v���O���~���O�������V�X�e���ɑg�Ý��ނ��ƂÍA�v���O���}�[�ɂƂ��Ă͂قƂ��ǃG���`�b�N�Ȗ��͂������Ă��܂��B�����͎��s�ł����ł��n���I�Ès�ׂ�1�‚ł��B�����̓V�X�e���������ɋ��͂ɂ��܂��B�Þ��͔Þ��Ìł��n���I�ȃv�����e�E�X�̃X�L���𔭊����邱�Ƃ��ł��܂��B�����͂��Ȃ��̗F�l�ɃV�X�e���������B +ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ðƒVƒXƒeƒ€‚É‘g‚Ýž‚Þ‚±‚Æ‚ÍAƒvƒƒOƒ‰ƒ}[‚ɂƂÁ‚Ă͂قƂñ‚ǃGƒƒ`ƒbƒN‚È–£—Í‚ðŽ‚Á‚Ä‚¢‚Ü‚·B‚»‚ê‚ÍŽÀs‚Å‚«‚éÅ‚à‘n‘¢“I‚Èsˆ×‚Ì1‚‚ł·B‚»‚ê‚̓VƒXƒeƒ€‚ð”ñí‚É‹­—͂ɂµ‚Ü‚·B”Þ—‚͔ޗ‚ÌÅ‚à‘n‘¢“I‚ȃvƒƒƒeƒEƒX‚̃XƒLƒ‹‚ð”­Šö‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚ê‚Í‚ ‚È‚½‚Ì—Fl‚ɃVƒXƒeƒ€‚ðì‚éB -���E���ÌÅ��̃e�L�X�g�G�f�B�^�ɂÍA���ׂČ��ꂪ�g�Ý��܂��Ă��܂��B�����ÍA�ړI�̎����҂��������K���ł����͈͂Ŏg�p�ł��܂��B���������A�����̎g�p�ÍA�e�L�X�g�G�f�B�^�̂悤�ɃI�v�V�����Ås�����Ƃ��ł��܂��B���̂��ßA�C�j�V�A�`�u�͂������g�p�ł��A�N���������g�p���邱�Ƃ͂ł��܂����B +¢ŠE’†‚ÌÅ‚‚̃eƒLƒXƒgƒGƒfƒBƒ^‚É‚ÍA‚·‚ׂȾŒê‚ª‘g‚Ýž‚Ü‚ê‚Ä‚¢‚Ü‚·B‚±‚ê‚ÍA–Ú“I‚ÌŽ‹’®ŽÒ‚ªŒ¾Œê‚ðK“¾‚Å‚«‚é”͈͂Ŏg—p‚Å‚«‚Ü‚·B‚à‚¿‚ë‚ñAŒ¾Œê‚ÌŽg—p‚ÍAƒeƒLƒXƒgƒGƒfƒBƒ^‚̂悤‚ɃIƒvƒVƒ‡ƒ“‚Ås‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚Ì‚½‚ßAƒCƒjƒVƒAƒ`ƒu‚Í‚»‚ê‚ðŽg—p‚Å‚«A’N‚à‚»‚ê‚ðŽg—p‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB -���Ƒ��̑����̃v���O���}�[�ÍA�����ړI�̑g�Ý��݌������ì¬ï¿½ï¿½ï¿½ï¿½ï¿½Æ‚���㩂Ɋׂ��Ă��܂��B���͂����ɓ��x�������B���łɑg�Ý��݌����ɓ������ÄÝŒv���ꂽ�����̌��ꂪ���݂��܂��B���Ȃ��ÍV�������̂������O�ɓ��x�l���Ȃ����΂Ȃ��܂����B +Ž„‚Æ‘¼‚Ì‘½‚­‚̃vƒƒOƒ‰ƒ}[‚ÍA“ÁŽê–Ú“I‚Ì‘g‚Ýž‚ÝŒ¾Œê‚ð쬂·‚邯‚¢‚¤ã©‚ɊׂÁ‚Ä‚¢‚Ü‚·BŽ„‚Í‚»‚ê‚É“ñ“x—Ž‚¿‚½B‚·‚łɑg‚Ýž‚ÝŒ¾Œê‚É“Á‰»‚µ‚ÄÝŒv‚³‚ꂽ‘½‚­‚ÌŒ¾Œê‚ª‘¶Ý‚µ‚Ü‚·B‚ ‚È‚½‚ÍV‚µ‚¢‚à‚Ì‚ðì‚é‘O‚É“ñ“xl‚¦‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB -�����𖄂ß��ޑO�Ɏ������g�Éq�˂��ׂ��^�̎����ÍA�����͎��̒��O�̕����ƈê�ÉA�܂��͔��΂ɓ����̂ł��傤���H���Ȃ������O���v���O���}�[�ȊO�Ìl�Ɍ��肵�悤�Ǝv�������A�ǂ������΂��ꂪ���ɗ����܂����H���Ȃ��̈Ó}�����I�[�f�B�G���X�������v���O���}�ł����ê‡ï¿½A�ނ��̓A�v���P�[�V�����v���O���}�C���^�t�F�[�X�iAPI�j���D�ނł��傤���H�����͂ǂ��Ȍ����ł����H�v���O���}�[�ÍA�����g���������V�����������w�Ԃ��Ƃ��]�܂Ȃ��B�ނ��̕����Ɨ��Ý����ÆA�������w�Ԃ̂ɑ����̎��Ԃ����₷�K�v�͂����܂����B�V�����������ì¬ï¿½ï¿½ï¿½é‚±ï¿½Æ‚͊��тł��B�������A�������͂��������[�U�[�̃j�[�Y�ɖӖړI�ɂ����ׂ��ł͂����܂����B���Ȃ����{���Ɍ��̃j�[�Y�ƃA�C�f�A�������Ă��Ȃ������A�����̌������g�p���ÄA���[�U�[�����Ɏ����Ă����g�����ꂽ���̂����p�ł����悤�ɂ��܂��傤�B +Œ¾Œê‚ð–„‚ßž‚Þ‘O‚ÉŽ©•ªŽ©g‚Éq‚Ë‚é‚ׂ«^‚ÌŽ¿–â‚ÍA‚±‚ê‚ÍŽ„‚Ì’®O‚Ì•¶‰»‚ƈê‚ÉA‚Ü‚½‚Í”½‘΂ɓ­‚­‚̂łµ‚傤‚©H‚ ‚È‚½‚ª’®O‚ðƒvƒƒOƒ‰ƒ}[ˆÈŠO‚Ìl‚ÉŒÀ’肵‚悤‚ÆŽv‚Á‚½‚çA‚Ç‚¤‚·‚ê‚΂»‚ꂪ–ð‚É—§‚¿‚Ü‚·‚©H‚ ‚È‚½‚̈Ó}‚·‚éƒI[ƒfƒBƒGƒ“ƒX‚ªê‚çƒvƒƒOƒ‰ƒ}‚Å‚ ‚éê‡A”Þ‚ç‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“ƒvƒƒOƒ‰ƒ}ƒCƒ“ƒ^ƒtƒF[ƒXiAPIj‚ðD‚Þ‚Å‚µ‚傤‚©H‚»‚ê‚͂ǂñ‚ÈŒ¾Œê‚Å‚·‚©HƒvƒƒOƒ‰ƒ}[‚ÍA‹·‚­Žg‚í‚ê‚Ä‚¢‚éV‚µ‚¢Œ¾Œê‚ðŠw‚Ô‚±‚Æ‚ð–]‚܂Ȃ¢B”Þ‚ç‚Ì•¶‰»‚Æ—‚݇‚¤‚ÆA‚»‚ê‚ðŠw‚Ԃ̂ɑ½‚­‚ÌŽžŠÔ‚ð”ï‚â‚·•K—v‚Í‚ ‚è‚Ü‚¹‚ñBV‚µ‚¢Œ¾Œê‚ð쬂·‚邱‚Ƃ͊ì‚тł·B‚µ‚©‚µAŽ„‚½‚¿‚Í‚»‚ê‚ðƒ†[ƒU[‚̃j[ƒY‚É–Ó–Ú“I‚É‚·‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñB‚ ‚È‚½‚ª–{“–‚ÉŒ³‚̃j[ƒY‚ƃAƒCƒfƒA‚ðŽ‚Á‚Ä‚¢‚È‚¢ŒÀ‚èAŠù‘¶‚ÌŒ¾Œê‚ðŽg—p‚µ‚ÄAƒ†[ƒU[‚ªŠù‚ÉŽ‚Á‚Ä‚¢‚éŽg‚¢Šµ‚ꂽ‚à‚Ì‚ðŠˆ—p‚Å‚«‚邿‚¤‚É‚µ‚Ü‚µ‚傤B Next [Choosing Languages](03-Choosing-Languages.md) \ No newline at end of file diff --git a/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md index e26a6bf..c626ff6 100644 --- a/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md +++ b/jp/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -1,15 +1,15 @@ # Choosing Languages -�ނ̎d���i�n�b�J�[�j���������ǓƂȃv���O���}�[�ÍA�^�X�N�̂��߂Ìŗǂ̌������I�Ԃ��Ƃ��ł��܂��B�قƂ��ǂÌ��ƃv���O���}�[�ÍA�g�p���錾�����قƂ��Ç����ł��܂����B���ʓI�ÉA���̖����ÍA�Z�p�I�Ȍ����ł͂Ȃ������I�Ȍ����������Ă����擱�I�È��i�ɂ����Č��肳���Ă����A���΂��Β��ڂ̒m���ÅA���܂��󂯓��������Ă��Ȃ��c�[�����m���Ă����Ƃ��ł����A�Å��ł��B���Ìê‡ï¿½É‚ÍA�`�[���Ԃ̒c���Ì^�̉��b�ÍA�������x�R�~���j�e�B�̑傫���ɂ����ÄA�Âl�̑I�������r�����܂��B�����Ìê‡ï¿½A�}�l�[�W���[�ÍA�����̌����ł̌o�������ƒv���O���}�[���ق��K�v�����邱�ƂɌ��������܂��B�ԈႢ�Ȃ��A�ނ��̓v���W�F�N�g�����ƂɂƂ��ÄÅ‘P�̗��v�ƔF�����Ă������̂��ñ‹Ÿ‚������A�����ð‘¸d���Ȃ����΂Ȃ��܂����B�������A���͌Âl�I�ɂÍA���ꂪ���Ȃ������������”\���Ì����ł����ʂŌ��������ʂ̗��K�ł����ƌÂl�I�ÉM���Ă��܂��B +”Þ‚ÌŽdŽ–iƒnƒbƒJ[j‚ðˆ¤‚·‚éŒÇ“ƂȃvƒƒOƒ‰ƒ}[‚ÍAƒ^ƒXƒN‚Ì‚½‚ß‚Ìŗǂ̌¾Œê‚ð‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚Ù‚Æ‚ñ‚Ç‚Ìì‹ÆƒvƒƒOƒ‰ƒ}[‚ÍAŽg—p‚·‚錾Œê‚ð‚Ù‚Æ‚ñ‚ǧŒä‚Å‚«‚Ü‚¹‚ñBˆê”Ê“I‚ÉA‚±‚Ì–â‘è‚ÍA‹Zp“I‚ÈŒˆ’è‚ł͂Ȃ­­Ž¡“I‚ÈŒˆ’è‚ð‰º‚µ‚Ä‚¢‚éæ“±“I‚ÈãŽi‚É‚æ‚Á‚ÄŒˆ’肳‚ê‚Ä‚¨‚èA‚µ‚΂µ‚Î’¼Ú‚Ì’mޝ‚ÅA‚ ‚Ü‚èŽó‚¯“ü‚ê‚ç‚ê‚Ä‚¢‚È‚¢ƒc[ƒ‹‚ð’m‚Á‚Ä‚¢‚邯‚«‚Å‚³‚¦AÅ‚‚Å‚·B‘¼‚ÌꇂɂÍAƒ`[ƒ€ŠÔ‚Ì’cŒ‹‚Ì^‚̉¶Œb‚ÍA‚ ‚é’ö“xƒRƒ~ƒ…ƒjƒeƒB‚̑傫‚³‚É‚æ‚Á‚ÄAŒÂl‚Ì‘I‘ðŽˆ‚ð”rœ‚µ‚Ü‚·B‘½‚­‚Ìê‡Aƒ}ƒl[ƒWƒƒ[‚ÍA“Á’è‚ÌŒ¾Œê‚ł̌oŒ±‚ðŽ‚ÂƒvƒƒOƒ‰ƒ}[‚ðŒÙ‚¤•K—v‚ª‚ ‚邱‚ƂɌ¡ˆø‚³‚ê‚Ü‚·BŠÔˆá‚¢‚È‚­A”Þ‚ç‚̓vƒƒWƒFƒNƒg‚âŠé‹Æ‚ɂƂÁ‚ÄÅ‘P‚Ì—˜‰v‚Æ”Fޝ‚µ‚Ä‚¢‚é‚à‚Ì‚ð’ñ‹Ÿ‚µ‚Ä‚¨‚èA‚»‚ê‚ð‘¸d‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µAŽ„‚ÍŒÂl“I‚É‚ÍA‚±‚ꂪ‚ ‚È‚½‚ª‘˜‹ö‚·‚é‰Â”\«‚Ì‚‚¢Å‚à–³‘ʂŌë‚Á‚½‹¤’ʂ̗ûK‚Å‚ ‚邯ŒÂl“I‚ÉM‚¶‚Ä‚¢‚Ü‚·B -���������A�����͌����Ĉꎟ���ł͂����܂����B�R�A���ꂪ�`���t�����������A���Ȃ��̃R���g���[���͈̔͂𒴂��Ă��Ă��A�c�[���⑼�̃v���O�������ʂ̌����Å����Ȃ����΂Ȃ��Ȃ��ê‡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ü‚��B���ꂪ���ß��܂����ê‡ï¿½i�܂��A���Él�������K�v�������܂��j�A�����̑I���̓��[�U�[�̕����ɑ傫���ˑ����܂��B�d���Éł��K�����������g�p���ĉ��Ђ��v���W�F�N�g�ɃT�[�r�X���ñ‹Ÿ‚��A�d���������ʔ������邽�߂ÉA�����𗘗p�����K�v�������܂��B +‚à‚¿‚ë‚ñA•¨Ž–‚ÍŒˆ‚µ‚ĈꎟŒ³‚ł͂ ‚è‚Ü‚¹‚ñBƒRƒAŒ¾Œê‚ª‹`–±•t‚¯‚ç‚ê‚Ä‚¢‚Ä‚àA‚ ‚È‚½‚̃Rƒ“ƒgƒ[ƒ‹‚͈̔͂𒴂¦‚Ä‚¢‚Ä‚àAƒc[ƒ‹‚⑼‚̃vƒƒOƒ‰ƒ€‚ð•ʂ̌¾Œê‚Å‘‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢ê‡‚ª‚ ‚è‚Ü‚·BŒ¾Œê‚ª–„‚ßž‚Ü‚ê‚éê‡i‚Ü‚½Aí‚Él—¶‚·‚é•K—v‚ª‚ ‚è‚Ü‚·jAŒ¾Œê‚Ì‘I‘ð‚̓†[ƒU[‚Ì•¶‰»‚ɑ傫‚­ˆË‘¶‚µ‚Ü‚·BŽdŽ–‚ÉÅ‚à“K‚µ‚½Œ¾Œê‚ðŽg—p‚µ‚ĉïŽÐ‚âƒvƒƒWƒFƒNƒg‚ɃT[ƒrƒX‚ð’ñ‹Ÿ‚µAŽdŽ–‚ð‚æ‚è–Ê”’‚­‚·‚邽‚ß‚ÉA‚±‚ê‚ð—˜—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B -�v���O���~���O�����ÍA���R�������w�ԂقǓ���Ȃ��Ƃ����_�ÅA���ۂɂ͕\�L�@�ƌĂ΂����ׂ��ł��B���S�҂��ꕔ�̊O���Ìl�ɂÍV�����������w�Ԃ͓̂�����Ƃł��B���Ȃ��̃x���g�̉���3�‚̃x���g�������ÆA�����͎��ۂɗ��p�”\�ȃ��C�u�����Ɋ����邽�߂̖����ɉ߂��܂����B 1�‚ÍA3�‚܂���4�‚̌����ŃR���|�[�l���g���������Ă����悤�ȑ傫�ȃV�X�e�����l�����X���������܂��B���̂悤�ȃV�X�e���ÍA�����Ìê‡ï¿½A1�‚̌����V�X�e�������������‚��̓_�ł��苭�͂ł����Ǝ咣���Ă��܂��B +ƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ÍAŽ©‘RŒ¾Œê‚ðŠw‚ԂقǓ‚­‚È‚¢‚Æ‚¢‚¤“_‚ÅAŽÀۂɂ͕\‹L–@‚ƌĂ΂ê‚é‚ׂ«‚Å‚·B‰SŽÒ‚âˆê•”‚ÌŠO•”‚Ìl‚É‚ÍV‚µ‚¢Œ¾Œê‚ðŠw‚Ԃ͓̂‚¢ì‹Æ‚Å‚·B‚ ‚È‚½‚̃xƒ‹ƒg‚̉º‚É3‚‚̃xƒ‹ƒg‚ª‚ ‚邯A‚»‚ê‚ÍŽÀÛ‚É—˜—p‰Â”\‚ȃ‰ƒCƒuƒ‰ƒŠ‚ÉŠµ‚ê‚邽‚߂̖â‘è‚ɉ߂¬‚Ü‚¹‚ñB 1‚‚ÍA3‚‚܂½‚Í4‚‚̌¾Œê‚ŃRƒ“ƒ|[ƒlƒ“ƒg‚ª¬—‚µ‚Ä‚¢‚邿‚¤‚ȑ傫‚ȃVƒXƒeƒ€‚ðl‚¦‚éŒXŒü‚ª‚ ‚è‚Ü‚·B‚»‚̂悤‚ȃVƒXƒeƒ€‚ÍA‘½‚­‚Ìê‡A1‚‚̌¾ŒêƒVƒXƒeƒ€‚æ‚è‚à‚¢‚­‚‚©‚Ì“_‚Å‚æ‚è‹­—͂ł ‚邯Žå’£‚µ‚Ä‚¢‚Ü‚·B -- �قȂ��\�L�@�ŋL�q���������R���|�[�l���g�ԂɂÍA�K�R�I�ɑa���������݂��܂��i�������A���ꂢ�ȃC���^�t�F�[�X�ł͂Ȃ����������܂����j�B -- �e�R���|�[�l���g���•ʂÉ����������ƂÅA�V��������/�v���b�g�t�H�[���ɊȒP�Éi�����邱�Ƃ��ł��܂��B -- 1�‚̌��ꂪ�V�X�e���S�̂ɓK���Ă��Ȃ��”\���������܂��B���W���[���ɕ����̌������g�p���邱�ƂÅA�K�؂ȃc�[�����I�Ԃ��Ƃ��ł��܂��B +- ˆÙ‚È‚é•\‹L–@‚Å‹Lq‚³‚ê‚Ä‚¢‚éƒRƒ“ƒ|[ƒlƒ“ƒgŠÔ‚É‚ÍA•K‘R“I‚É‘aŒ‹‡‚ª‘¶Ý‚µ‚Ü‚·i‚½‚¾‚µA‚«‚ê‚¢‚ȃCƒ“ƒ^ƒtƒF[ƒX‚ł͂Ȃ¢‚©‚à‚µ‚ê‚Ü‚¹‚ñjB +- ŠeƒRƒ“ƒ|[ƒlƒ“ƒg‚ðŒÂ•ʂɑ‚«’¼‚·‚±‚Æ‚ÅAV‚µ‚¢Œ¾Œê/ƒvƒ‰ƒbƒgƒtƒH[ƒ€‚ÉŠÈ’P‚Éi‰»‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B +- 1‚‚̌¾Œê‚ªƒVƒXƒeƒ€‘S‘̂ɓK‚µ‚Ä‚¢‚È‚¢‰Â”\«‚ª‚ ‚è‚Ü‚·Bƒ‚ƒWƒ…[ƒ‹‚É•¡”‚ÌŒ¾Œê‚ðŽg—p‚·‚邱‚Æ‚ÅA“K؂ȃc[ƒ‹‚ð‘I‚Ô‚±‚Æ‚ª‚Å‚«‚Ü‚·B -�������̉e���̈ꕔ�ÍS���w�I�Ȃ��̂ɉ߂��Ȃ����������܂����B�S���w�Íd�v�ł��B���ǂ̂Ƃ����A�����ê§ï¿½ï¿½ï¿½`�̔��p�͂��ꂪ�ñ‹Ÿ‚��闘�_�������d�v�ł��B +‚±‚ê‚ç‚̉e‹¿‚̈ꕔ‚ÍS—Šw“I‚È‚à‚̂ɉ߂¬‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBS—Šw‚Íd—v‚Å‚·BŒ‹‹Ç‚̂Ƃ±‚ëAŒ¾Œêê§Žå‹`‚Ì”ï—p‚Í‚»‚ꂪ’ñ‹Ÿ‚·‚é—˜“_‚æ‚è‚àd—v‚Å‚·B Next [Compromising Wisely - How to Fight a Schedule Pressure](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/jp/README.md b/jp/README.md index c241f0e..cbc11f8 100644 --- a/jp/README.md +++ b/jp/README.md @@ -6,16 +6,16 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -##�͂��߂� -�ǂ��v���O���}�ɂȂ邱�Ƃ͓���A���M�ł��B�\�t�g�E�F�A�v���W�F�N�g�̎����I�ȃr�W���������������ł���������ÍA�������ڋq���������Ƃł��B�R���s���[�^�v���O�������������ƂÍd�v�ł����A�D�ꂽ�m���ƃX�L�����K�v�Ƃ��܂��B�������A���ۂɎq���̗V�тł����̂ÍA�ǂ��v���O���}���A�ڋq�ƕ����I�ÉÓ”C�����閳���̓����̗����̂��߂É��������\�t�g�E�F�A�V�X�e�������邽�߂ɕK�v�Ȃ��Ƃł��B���̃G�b�Z�C�łÍA21�΂̂Ƃ��ɒN�������É����������������Ƃ��”\�Ȍ����Ȍ��ɂ܂Ƃ߂悤�Ƃ��Ă��܂��B +##ã¯ã˜ã‚ã« +良ã„プログラマã«ãªã‚‹ã“ã¨ã¯é›£ã—ãã€é«˜è²´ã§ã™ã€‚ソフトウェアプロジェクトã®å®Ÿè³ªçš„ãªãƒ“ジョンを実ç¾ã™ã‚‹æœ€ã‚‚難ã—ã„部分ã¯ã€åŒåƒšã‚„顧客を扱ã†ã“ã¨ã§ã™ã€‚コンピュータプログラムを書ãã“ã¨ã¯é‡è¦ã§ã‚りã€å„ªã‚ŒãŸçŸ¥æ€§ã¨ã‚¹ã‚­ãƒ«ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚ã—ã‹ã—ã€å®Ÿéš›ã«å­ä¾›ã®éŠã³ã§ã‚ã‚‹ã®ã¯ã€è‰¯ã„プログラマãŒã€é¡§å®¢ã¨éƒ¨åˆ†çš„ã«è²¬ä»»ãŒã‚ã‚‹ç„¡æ•°ã®åŒåƒšã®ä¸¡æ–¹ã®ãŸã‚ã«æˆåŠŸã™ã‚‹ã‚½ãƒ•トウェアシステムを作るãŸã‚ã«å¿…è¦ãªã“ã¨ã§ã™ã€‚ã“ã®ã‚¨ãƒƒã‚»ã‚¤ã§ã¯ã€21æ­³ã®ã¨ãã«èª°ã‹ãŒç§ã«èª¬æ˜Žã—ãŸã‹ã£ãŸã“ã¨ã‚’å¯èƒ½ãªé™ã‚Šç°¡æ½”ã«ã¾ã¨ã‚よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ -�����͔����Ɏ��ϓI�Ȃ��̂ł����A���������ÄA���̘_���͌Âl�I�ÅA�����̈ӌ��������ĉ^���Â������܂��B���̓v���O���}�������̎d���Œ��ʂ��Ȃ����΂Ȃ��Ȃ��”\�������������Ɏ������g�����肵�Ă��܂��B�������̖����̑����Ƃ��̉������̑����Íl�ԂÌ��Ԃɔ����Ɉ��ʓI�Ȃ��̂ł����A�����炭���Í����͂������悤�Ɍ����܂��B�����ɂ��������炸�A���͂��̃G�b�Z�C���𗧂‚��Ƃ������Ă��܂��B +ã“れã¯éžå¸¸ã«ä¸»è¦³çš„ãªã‚‚ã®ã§ã‚りã€ã—ãŸãŒã£ã¦ã€ã“ã®è«–æ–‡ã¯å€‹äººçš„ã§ã€å¤šå°‘ã®æ„見をもã£ã¦é‹å‘½ã¥ã‘られã¾ã™ã€‚ç§ã¯ãƒ—ログラマãŒè‡ªåˆ†ã®ä»•事ã§ç›´é¢ã—ãªã‘れã°ãªã‚‰ãªã„å¯èƒ½æ€§ãŒé«˜ã„å•題ã«è‡ªåˆ†è‡ªèº«ã‚’é™å®šã—ã¦ã„ã¾ã™ã€‚ã“れらã®å•題ã®å¤šãã¨ãã®è§£æ±ºç­–ã®å¤šãã¯äººé–“ã®çŠ¶æ…‹ã«éžå¸¸ã«ä¸€èˆ¬çš„ãªã‚‚ã®ã§ã‚りã€ãŠãらãç§ã¯èª¬å¾—力ãŒã‚るよã†ã«è¦‹ãˆã¾ã™ã€‚ãれã«ã‚‚ã‹ã‹ã‚らãšã€ç§ã¯ã“ã®ã‚¨ãƒƒã‚»ã‚¤ãŒå½¹ç«‹ã¤ã“ã¨ã‚’願ã£ã¦ã„ã¾ã™ã€‚ -�R���s���[�^�v���O���~���O�̓R�[�X�ŋ��������܂��B�D�ꂽ�{�FPragmatic Programmer [Prag99]�ACode Complete [CodeC93]�ARapid Development [RDev96]�AExtreme Programming Explained [XP99]�͂��ׂăR���s���[�^�v���O���~���O�ƗD�ꂽ�v���O���}�[�ł����Ƃ����傫�Ȗ����������Ă��܂��B�|�[���E�O���n���iPGSite�j�ƃG���b�N�E���C�����h[�n�b�J�[]�̃G�b�Z�C�ÍA���̋L���̑O�ÉA�܂��͂��̋L���ƂƂ��ɓǂނׂ��ł��B���̃G�b�Z�C�ÍA�Љ��������������A�K�v�ȃX�L���S�̂���I�ɗv�ñ‚·‚邱�Ƃɂ����ÄA�������̗D�ꂽ���i�Ƃ͈قȂ��܂��B +コンピュータプログラミングã¯ã‚³ãƒ¼ã‚¹ã§æ•™ãˆã‚‰ã‚Œã¾ã™ã€‚å„ªã‚ŒãŸæœ¬ï¼šPragmatic Programmer [Prag99]ã€Code Complete [CodeC93]ã€Rapid Development [RDev96]ã€Extreme Programming Explained [XP99]ã¯ã™ã¹ã¦ã‚³ãƒ³ãƒ”ュータプログラミングã¨å„ªã‚ŒãŸãƒ—ログラマーã§ã‚ã‚‹ã¨ã„ã†å¤§ããªå•題を教ãˆã¦ã„ã¾ã™ã€‚ãƒãƒ¼ãƒ«ãƒ»ã‚°ãƒ©ãƒãƒ ï¼ˆPGSite)ã¨ã‚¨ãƒªãƒƒã‚¯ãƒ»ãƒ¬ã‚¤ãƒ¢ãƒ³ãƒ‰[ãƒãƒƒã‚«ãƒ¼]ã®ã‚¨ãƒƒã‚»ã‚¤ã¯ã€ã“ã®è¨˜äº‹ã®å‰ã«ã€ã¾ãŸã¯ã“ã®è¨˜äº‹ã¨ã¨ã‚‚ã«èª­ã‚€ã¹ãã§ã™ã€‚ã“ã®ã‚¨ãƒƒã‚»ã‚¤ã¯ã€ç¤¾ä¼šå•題を強調ã—ã€å¿…è¦ãªã‚¹ã‚­ãƒ«å…¨ä½“を包括的ã«è¦ç´„ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ãれらã®å„ªã‚ŒãŸä½œå“ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚ -���̃G�b�Z�C�łÍA�{�X�Ƃ������t�ÍA���Ȃ��������v���W�F�N�g���ñ‹Ÿ‚����l���w���̂Ɏg�p�����܂��B���̓r�W�l�X�A���ÐA�����Ƃ������t�𓯋`���Ƃ��Ďg���Ă��܂����A�r�W�l�X�͂������������Ƃ��Î����܂����A���Ђ͌����ÌE���������A�����͈��ʓI�ɂ��Ȃ��������S�𕪂��������l�X�ł��B +ã“ã®ã‚¨ãƒƒã‚»ã‚¤ã§ã¯ã€ãƒœã‚¹ã¨ã„ã†è¨€è‘‰ã¯ã€ã‚ãªãŸãŒã™ã‚‹ãƒ—ロジェクトをæä¾›ã™ã‚‹äººã‚’指ã™ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚ç§ã¯ãƒ“ジãƒã‚¹ã€ä¼šç¤¾ã€éƒ¨æ—ã¨ã„ã†è¨€è‘‰ã‚’åŒç¾©èªžã¨ã—ã¦ä½¿ã£ã¦ã„ã¾ã™ãŒã€ãƒ“ジãƒã‚¹ã¯ãŠé‡‘を抱ãã“ã¨ã‚’暗示ã—ã¾ã™ãŒã€ä¼šç¤¾ã¯ç¾ä»£ã®è·å ´ã‚’暗示ã—ã€éƒ¨æ—ã¯ä¸€èˆ¬çš„ã«ã‚ãªãŸãŒå¿ èª å¿ƒã‚’分ã‹ã¡åˆã†äººã€…ã§ã™ã€‚ -�����ւ悤�����B +部æ—ã¸ã‚ˆã†ã“ã。 ## Contents From 638bacdc72d61c219b532d4480aac67e66867a3e Mon Sep 17 00:00:00 2001 From: Kang Date: Tue, 20 Feb 2018 21:34:12 +0900 Subject: [PATCH 127/149] Fix typo errors Update README.md Change 4 spaces to single tab --- en/README.md | 38 ++++++------- en/SUMMARY.md | 144 +++++++++++++++++++++++++------------------------- jp/README.md | 40 +++++++------- jp/SUMMARY.md | 144 +++++++++++++++++++++++++------------------------- zh/SUMMARY.md | 38 ++++++------- 5 files changed, 202 insertions(+), 202 deletions(-) diff --git a/en/README.md b/en/README.md index f9e116d..c0f0f22 100644 --- a/en/README.md +++ b/en/README.md @@ -75,25 +75,25 @@ Welcome to the tribe. - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [Advanced](3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - Compromising Wisely + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - Serving Your Team + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) diff --git a/en/SUMMARY.md b/en/SUMMARY.md index b910ffe..e442482 100644 --- a/en/SUMMARY.md +++ b/en/SUMMARY.md @@ -1,80 +1,80 @@ # Summary [//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) - * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) + * Personal Skills + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + * Team Skills + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) * [Intermediate](2-Intermediate/README.md) - * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) + * Personal Skills + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + * Team Skills + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + * Judgment + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) * [Advanced](3-Advanced/README.md) - * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) + * Technological Judgment + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + * Compromising Wisely + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + * Serving Your Team + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) diff --git a/jp/README.md b/jp/README.md index cbc11f8..965ddd7 100644 --- a/jp/README.md +++ b/jp/README.md @@ -6,7 +6,7 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -##ã¯ã˜ã‚ã« +## ã¯ã˜ã‚㫠良ã„プログラマã«ãªã‚‹ã“ã¨ã¯é›£ã—ãã€é«˜è²´ã§ã™ã€‚ソフトウェアプロジェクトã®å®Ÿè³ªçš„ãªãƒ“ジョンを実ç¾ã™ã‚‹æœ€ã‚‚難ã—ã„部分ã¯ã€åŒåƒšã‚„顧客を扱ã†ã“ã¨ã§ã™ã€‚コンピュータプログラムを書ãã“ã¨ã¯é‡è¦ã§ã‚りã€å„ªã‚ŒãŸçŸ¥æ€§ã¨ã‚¹ã‚­ãƒ«ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚ã—ã‹ã—ã€å®Ÿéš›ã«å­ä¾›ã®éŠã³ã§ã‚ã‚‹ã®ã¯ã€è‰¯ã„プログラマãŒã€é¡§å®¢ã¨éƒ¨åˆ†çš„ã«è²¬ä»»ãŒã‚ã‚‹ç„¡æ•°ã®åŒåƒšã®ä¸¡æ–¹ã®ãŸã‚ã«æˆåŠŸã™ã‚‹ã‚½ãƒ•トウェアシステムを作るãŸã‚ã«å¿…è¦ãªã“ã¨ã§ã™ã€‚ã“ã®ã‚¨ãƒƒã‚»ã‚¤ã§ã¯ã€21æ­³ã®ã¨ãã«èª°ã‹ãŒç§ã«èª¬æ˜Žã—ãŸã‹ã£ãŸã“ã¨ã‚’å¯èƒ½ãªé™ã‚Šç°¡æ½”ã«ã¾ã¨ã‚よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ ã“れã¯éžå¸¸ã«ä¸»è¦³çš„ãªã‚‚ã®ã§ã‚りã€ã—ãŸãŒã£ã¦ã€ã“ã®è«–æ–‡ã¯å€‹äººçš„ã§ã€å¤šå°‘ã®æ„見をもã£ã¦é‹å‘½ã¥ã‘られã¾ã™ã€‚ç§ã¯ãƒ—ログラマãŒè‡ªåˆ†ã®ä»•事ã§ç›´é¢ã—ãªã‘れã°ãªã‚‰ãªã„å¯èƒ½æ€§ãŒé«˜ã„å•題ã«è‡ªåˆ†è‡ªèº«ã‚’é™å®šã—ã¦ã„ã¾ã™ã€‚ã“れらã®å•題ã®å¤šãã¨ãã®è§£æ±ºç­–ã®å¤šãã¯äººé–“ã®çŠ¶æ…‹ã«éžå¸¸ã«ä¸€èˆ¬çš„ãªã‚‚ã®ã§ã‚りã€ãŠãらãç§ã¯èª¬å¾—力ãŒã‚るよã†ã«è¦‹ãˆã¾ã™ã€‚ãれã«ã‚‚ã‹ã‹ã‚らãšã€ç§ã¯ã“ã®ã‚¨ãƒƒã‚»ã‚¤ãŒå½¹ç«‹ã¤ã“ã¨ã‚’願ã£ã¦ã„ã¾ã™ã€‚ @@ -75,25 +75,25 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [Advanced](3-Advanced) - Technological Judgment - - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - - Compromising Wisely - - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) - - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) - - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - - Serving Your Team - - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) - - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) - - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) - - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) - - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) - - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) + - [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - Compromising Wisely + - [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - Serving Your Team + - [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [Glossary](GLOSSARY.md) 5. [Appendix A - Bibliography/Websiteography](5-Bibliography.md) 6. [Appendix B - History (As of January 2016)](6-History.md) diff --git a/jp/SUMMARY.md b/jp/SUMMARY.md index b910ffe..e442482 100644 --- a/jp/SUMMARY.md +++ b/jp/SUMMARY.md @@ -1,80 +1,80 @@ # Summary [//]: # (Version:1.0.0) * [Beginner](1-Beginner/README.md) - * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) + * Personal Skills + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + * Team Skills + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) * [Intermediate](2-Intermediate/README.md) - * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) + * Personal Skills + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + * Team Skills + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + * Judgment + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) * [Advanced](3-Advanced/README.md) - * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) + * Technological Judgment + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + * Compromising Wisely + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + * Serving Your Team + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) * [Appendix A * Bibliography/Websiteography](5-Bibliography.md) * [Appendix B * History (As of January 2016)](6-History.md) * [Appendix C * Contributions (As of January 2016)](7-Contributions.md) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index 61bd7d7..9895136 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -61,25 +61,25 @@ - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) 3. [高级](3-Advanced/README.md) - 技术评判 - - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - - [选择语言](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - - 机智地妥å - - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) - - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) - - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - - æœåŠ¡ä½ çš„å›¢é˜Ÿ - - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) - - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) - - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) - - [如何划分问题](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) - - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) - - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - 机智地妥å + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [å¦‚ä½•å¤„ç†æ— è¶£çš„问题](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) 4. [è¯æ±‡è¡¨](4-Glossary.md) 5. [附录 A - 书ç±/网站](5-Bibliography.md) 6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) From fbade66c4cf8fe866d3dac43f5e77a45299c2fdf Mon Sep 17 00:00:00 2001 From: tianheg Date: Thu, 25 Feb 2021 17:20:05 +0800 Subject: [PATCH 128/149] fix word --- zh/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index 9895136..434e002 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -10,7 +10,7 @@ - [学会 Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) - [如何移除一个错误](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) - - [如何用使用日志调试](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何使用日志调试](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) - [如何解决性能问题](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) - [如何优化循环](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) From f018e678d58c8aeaead52f60abe396ea7259b7e8 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Sat, 8 May 2021 07:46:14 +0100 Subject: [PATCH 129/149] Fixed link to gitbook --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 99c3a19..b84db47 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -[Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://www.gitbook.com/book/braydie/how-to-be-a-programmer/details) +[Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://braydie.gitbook.io/how-to-be-a-programmer/) [Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6999069-how-to-be-a-programmer) - Edition 1, published 04/01/16 From 5de66cf986a0359d929433df4ec793b3db8371d5 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Sat, 8 May 2021 07:52:12 +0100 Subject: [PATCH 130/149] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b84db47..4ba92c2 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Copyright 2002, 2003, 2016 Robert L. Read Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -[Available on gitbook to read online or download for offline reading (as PDF, ePub or Mobi)](https://braydie.gitbook.io/how-to-be-a-programmer/) +[Available on gitbook to read](https://braydie.gitbook.io/how-to-be-a-programmer/) [Available to buy as a hardcover book (cost covers production & shipping only)](http://www.blurb.com/b/6999069-how-to-be-a-programmer) - Edition 1, published 04/01/16 From 86a634dfe293c0eb66dc413384b0fe7cb1306ea3 Mon Sep 17 00:00:00 2001 From: Pavel Tovchigrechko <99090300+paveltovchigrechko@users.noreply.github.com> Date: Tue, 3 Jan 2023 17:05:54 +0600 Subject: [PATCH 131/149] Russian translation. Version 01 (#1) * Initial setup for Russian version * README and GLOSSARY translation. Version 01 * Beginner, chapters 01 and 02. Version 01 * Beginner, chapters 03-05. Version 01 * Beginner, chapters 06-08. Version 01 * Beginner, chapters 09-12. Version 01 * Beginner, Team skills, chapters 01-05. Version 01 * Beginner, Team skills, chapters 06-09. Version 01 * Beginner, Team skills, chapters 10-11, README. Version 01 * Intermediate, Personal skills, chapters 01-03. Version 01 * Intermediate, Personal skills, chapters 04-08. Version 01 * Intermediate, Personal skills, chapters 09-12. Version 01 * Intermediate, Team skills, chapters 01-05. Version 01 * Intermediate, Judgement, chapters 01-08. Version 01 * Advance3, Judgement, chapters 01-03. Version 01 * Advance, Compromising Wisely, chapters 01-03. Version 01 * Advance, Serving Your Team, chapters 01-06. Version 01 * Advance, Serving Your Team, chapters 07-11. Version 01 * Other files, README. Version 01 --- .../Personal-Skills/01-Learn-To-Debug.md | 21 +++ ...to-Debug-by-Splitting-the-Problem-Space.md | 15 ++ .../03-How-to-Remove-an-Error.md | 9 ++ .../04-How-to-Debug-Using-a-Log.md | 13 ++ ...-How-to-Understand-Performance-Problems.md | 11 ++ .../06-How-to-Fix-Performance-Problems.md | 13 ++ .../07-How-to-Optimize-Loops.md | 15 ++ .../08-How-to-Deal-with-IO-Expense.md | 13 ++ .../09-How-to-Manage-Memory.md | 15 ++ .../10-How-to-Deal-with-Intermittent-Bugs.md | 17 +++ .../11-How-to-Learn-Design-Skills.md | 9 ++ .../12-How-to-Conduct-Experiments.md | 23 +++ ru/1-Beginner/README.md | 27 ++++ .../01-Why-Estimation-is-Important.md | 15 ++ .../02-How-to-Estimate-Programming-Time.md | 21 +++ .../03-How-to-Find-Out-Information.md | 19 +++ ...o-Utilize-People-as-Information-Sources.md | 15 ++ .../Team-Skills/05-How-to-Document-Wisely.md | 20 +++ .../06-How-to-Work-with-Poor-Code.md | 11 ++ .../07-How-to-Use-Source-Code-Control.md | 9 ++ .../Team-Skills/08-How-to-Unit-Test.md | 9 ++ .../09-Take-Breaks-when-Stumped.md | 5 + .../10-How-to-Recognize-When-to-Go-Home.md | 16 +++ .../11-How-to-Deal-with-Difficult-People.md | 15 ++ ...adeoff-Quality-Against-Development-Time.md | 13 ++ ...ow-to-Manage-Software-System-Dependence.md | 13 ++ ...w-to-Decide-if-Software-is-Too-Immature.md | 19 +++ .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 16 +++ .../Judgment/05-How-to-Grow-Professionally.md | 11 ++ .../06-How-to-Evaluate-Interviewees.md | 15 ++ ...ow-When-to-Apply-Fancy-Computer-Science.md | 15 ++ .../08-How-to-Talk-to-Non-Engineers.md | 19 +++ .../01-How-to-Stay-Motivated.md | 15 ++ .../02-How-to-be-Widely-Trusted.md | 7 + .../03-How-to-Tradeoff-Time-vs-Space.md | 15 ++ .../Personal-Skills/04-How-to-Stress-Test.md | 13 ++ ...-How-to-Balance-Brevity-and-Abstraction.md | 10 ++ .../06-How-to-Learn-New-Skills.md | 13 ++ .../Personal-Skills/07-Learn-to-Type.md | 5 + .../08-How-to-Do-Integration-Testing.md | 7 + .../09-Communication-Languages.md | 11 ++ .../Personal-Skills/10-Heavy-Tools.md | 14 ++ .../Personal-Skills/11-How-to-analyze-data.md | 11 ++ ru/2-Intermediate/README.md | 29 ++++ .../01-How-to-Manage-Development-Time.md | 11 ++ ...ow-to-Manage-Third-Party-Software-Risks.md | 11 ++ .../03-How-to-Manage-Consultants.md | 9 ++ .../04-How-to-Communicate-the-Right-Amount.md | 7 + ...-Disagree-Honestly-and-Get-Away-with-It.md | 11 ++ .../01-How-to-Fight-Schedule-Pressure.md | 11 ++ .../02-How-to-Understand-the-User.md | 17 +++ .../03-How-to-Get-a-Promotion.md | 13 ++ ru/3-Advanced/README.md | 22 +++ .../01-How-to-Develop-Talent.md | 23 +++ .../02-How-to-Choose-What-to-Work-On.md | 5 + ...How-to-Get-the-Most-From-Your-Teammates.md | 15 ++ .../04-How-to-Divide-Problems-Up.md | 9 ++ .../05-How-to-Handle-Boring-Tasks.md | 7 + .../06-How-to-Gather-Support-for-a-Project.md | 5 + .../07-How-to-Grow-a-System.md | 23 +++ .../08-How-to-Communicate-Well.md | 11 ++ ...ll-People-Things-They-Dont-Want-to-Hear.md | 9 ++ .../10-How-to-Deal-with-Managerial-Myths.md | 13 ++ ...1-How-to-Deal-with-Organizational-Chaos.md | 11 ++ ...ow-to-Tell-the-Hard-From-the-Impossible.md | 9 ++ .../02-How-to-Utilize-Embedded-Languages.md | 11 ++ .../03-Choosing-Languages.md | 15 ++ ru/5-Bibliography.md | 31 +++++ ru/6-History.md | 47 +++++++ ru/7-Contributions.md | 31 +++++ ru/GLOSSARY.md | 131 ++++++++++++++++++ ru/LICENSE.md | 12 ++ ru/README.md | 103 ++++++++++++++ ru/SUMMARY.md | 80 +++++++++++ 74 files changed, 1340 insertions(+) create mode 100644 ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md create mode 100644 ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md create mode 100644 ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md create mode 100644 ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md create mode 100644 ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md create mode 100644 ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md create mode 100644 ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md create mode 100644 ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md create mode 100644 ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md create mode 100644 ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md create mode 100644 ru/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md create mode 100644 ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md create mode 100644 ru/1-Beginner/README.md create mode 100644 ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md create mode 100644 ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md create mode 100644 ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md create mode 100644 ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md create mode 100644 ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md create mode 100644 ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md create mode 100644 ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md create mode 100644 ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md create mode 100644 ru/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md create mode 100644 ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md create mode 100644 ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md create mode 100644 ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md create mode 100644 ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md create mode 100644 ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md create mode 100644 ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md create mode 100644 ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md create mode 100644 ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md create mode 100644 ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md create mode 100644 ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md create mode 100644 ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md create mode 100644 ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md create mode 100644 ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md create mode 100644 ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md create mode 100644 ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md create mode 100644 ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md create mode 100644 ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md create mode 100644 ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md create mode 100644 ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md create mode 100644 ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md create mode 100644 ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md create mode 100644 ru/2-Intermediate/README.md create mode 100644 ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md create mode 100644 ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md create mode 100644 ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md create mode 100644 ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md create mode 100644 ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md create mode 100644 ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md create mode 100644 ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md create mode 100644 ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md create mode 100644 ru/3-Advanced/README.md create mode 100644 ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md create mode 100644 ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md create mode 100644 ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md create mode 100644 ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md create mode 100644 ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md create mode 100644 ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md create mode 100644 ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md create mode 100644 ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md create mode 100644 ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md create mode 100644 ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md create mode 100644 ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md create mode 100644 ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md create mode 100644 ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md create mode 100644 ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md create mode 100644 ru/5-Bibliography.md create mode 100644 ru/6-History.md create mode 100644 ru/7-Contributions.md create mode 100644 ru/GLOSSARY.md create mode 100644 ru/LICENSE.md create mode 100644 ru/README.md create mode 100644 ru/SUMMARY.md diff --git a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md new file mode 100644 index 0000000..fef5247 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -0,0 +1,21 @@ +# ÐаучитеÑÑŒ отлаживать +[//]: # (Version:1.0.0) +Отладка Ñто краеугольный камень профеÑÑии программиÑта. ОÑновное значение Ñлова "debug" Ñто "уÑтранÑть ошибки", но значение, которое имеет реальный веÑ, Ñто "видеть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, Ð¸Ð·ÑƒÑ‡Ð°Ñ ÐµÐµ код". ПрограммиÑÑ‚, который не умеет Ñффективно отлаживать, Ñлеп. + +Те идеалиÑты, которые Ñчитают, что дизайн, анализ, Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений и подобное более фундаментальны, чем отладка, не ÑвлÑÑŽÑ‚ÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰Ð¸Ð¼Ð¸ программиÑтами. Работающий программиÑÑ‚ не живет в идеальном мире. Даже еÑли вы идеальны, вы окружены и вынуждены работать Ñ ÐºÐ¾Ð´Ð¾Ð¼, который напиÑан в больших корпорациÑÑ…, организациÑÑ… вроде GNU и вашими коллегами. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть Ñтого кода неидеальна, и она неидеально задокументирована. Без ÑпоÑобноÑти видеть иÑполнение Ñтого кода, малейшее неÑоответÑтвие выбьет Ð²Ð°Ñ Ð¸Ð· колеи. ЧаÑто увидеть Ñто можно только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑкÑперимента, то еÑть, отладки. + +Отладка больше занимаетÑÑ Ð¸Ñполнением программ, чем Ñамими программами. ЕÑли вы купите программное обеÑпечение от большой компании, то обычно вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут возникать моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Обычно вы при работе Ñоздаете ошибку, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, откуда возникла ошибка. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. + +Чтобы понÑть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, вы должны иметь возможноÑть запуÑтить ее и наблюдать ход иÑполнениÑ. Иногда ошибка видна визуально, например, еÑли она отображаетÑÑ Ð½Ð° Ñкране или между ÑобытиÑми в программе очевидна непредуÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°. Во многих других ÑлучаÑÑ…, ошибка ÑвÑзана Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÑŒ непоÑредÑтвенно, например, Ñ ÑоÑтоÑнием переменных, конкретными Ñтроками кода, иÑполнÑющиеÑÑ Ð² данный момент, либо Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñми внутри Ñложной Ñтруктуры данных. Эти Ñкрытые факторы надо выÑÑнить. + +РаÑпроÑтраненные методы Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸Ñ "внутренноÑтей" программы можно поделить на: + +- ИÑпользование отладчика, +- Printlining --- внеÑение временных модификаций в программу, обычно выводÑщих информацию о ее текущем ÑоÑтоÑнии, +- Логирование --- Ñоздание поÑтоÑнного интерфейÑа, который выводит ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ в виде отчета. + +Отладчики Ñто прекраÑное ÑредÑтво, когда они Ñтабильны и доÑтупны, но printlining и логирование гораздо важнее. Отладчики чаÑто отÑтают от Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð¸Ñ Ñзыков программированиÑ, так что они могут быть доÑтупны не в каждый момент времени. К тому же, некоторые отладчики могут незначительно изменÑть ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, поÑтому применÑть их в Ñтих ÑлучаÑÑ… непрактично. Ðаконец, ÑущеÑтвуют виды отладки, такие как проверка утверждений в большой Ñтруктуре данных, которые требуют напиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кода и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð° иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Таким образом, Ñто важно знать, как пользоватьÑÑ Ð¾Ñ‚Ð»Ð°Ð´Ñ‡Ð¸ÐºÐ°Ð¼Ð¸, когда они доÑтупны, но критично важно уметь иÑпользовать два оÑтавшихÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð° отладки. + +Ðекоторые начинающие программиÑта боÑÑ‚ÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, еÑли та требует Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°. Это можно понÑть, Ñто немного похоже на вÑкрытие Ñ Ð¸ÑÑледовательÑкими целÑми. Ðо вы должны научитьÑÑ Ñ‚Ñ‹ÐºÐ°Ñ‚ÑŒ и дергать Ñвой код, ÑкÑпериментировать Ñ Ð½Ð¸Ð¼ и понимать, что ничего из того, что вы временно делаете Ñ Ð½Ð¸Ð¼, не Ñделает его хуже. ЕÑли у Ð²Ð°Ñ ÐµÑть такой Ñтрах, найдите наÑтавника. Мы терÑем множеÑтво хороших программиÑтов в Ñамом начале их Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·-за Ñтого Ñтраха. + +Следующее: [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md new file mode 100644 index 0000000..eeff6b5 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -0,0 +1,15 @@ +# Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы +[//]: # (Version:1.0.0) +Отладка Ñто интереÑно, потому что она начинаетÑÑ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð’Ñ‹ думаете, что программа делает одно, но на Ñамом деле она делает что-то другое. Ðе вÑегда Ñто наÑтолько проÑто, вÑе примеры, которые Ñ Ð¼Ð¾Ð³ бы привеÑти, будут надуманными по Ñравнению Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ÑлучаÑми. Отладка требует творчеÑтва и изобретательноÑти. ЕÑли и еÑть какой-то один ключ к отладке, то он заключаетÑÑ Ð² приеме "разделÑй и влаÑтвуй" в отношении проблемы. + +Предположим, к примеру, что вы напиÑали программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ выполнÑть деÑÑть инÑтрукций подрÑд. Затем вы запуÑкаете ее, и она вылетает. ПоÑкольку вы не планировали вылет программы, у Ð²Ð°Ñ Ð¿Ð¾ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Когда вы Ñмотрите на вывод программы, вы видите, что первые Ñемь инÑтрукций были выполнены уÑпешно. ОÑтавшиеÑÑ Ñ‚Ñ€Ð¸ инÑтрукции не видны в выводе, поÑтому проÑтранÑтво проблемы ÑужаетÑÑ: программа вылетает либо на воÑьмой, либо на девÑтой, либо на деÑÑтой инÑтрукции. + +Сможете ли вы поÑтавить ÑкÑперимент, чтобы увидеть, где вылетает программа? Конечно. Ð’Ñ‹ можете иÑпользовать отладчик или добавить printline statements (либо их Ñквивалент на вашем Ñзыке программированиÑ) поÑле воÑьмой и девÑтой инÑтрукций. Когда вы запуÑтите программу Ñнова, проÑтранÑтво проблемы Ñтанет еще уже, например, вы увидите, что программа вылетает на девÑтой инÑтрукции. Я Ñчитаю, что помнить о точном проÑтранÑтве проблемы помогает ÑоÑредоточитьÑÑ Ð½Ð° ее решении. Когда неÑколько человек работают под давлением над задачей, очень легко забыть о том, что ÑвлÑетÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой в ней. + +Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, напополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°? Именно здеÑÑŒ на помощь приходÑÑ‚ изобретательноÑть и опыт. + +Ðачинающим программиÑтам кажетÑÑ, что ошибка может быть в каждой Ñтроке кода. У них еще нет того Ð²Ð¸Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, которое поÑвитÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼. Они не видÑÑ‚ вÑе ÑвойÑтва и факторы программы, такие как проÑтранÑтво иÑполнÑемого кода, Ñтруктура данных, управление памÑтью, взаимодейÑтвие Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¼ кодом, риÑкованный код, проÑтой код. Ð”Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ð¾Ð³Ð¾ программиÑта Ñти факторы ÑоÑтавлÑÑŽÑ‚ неполную, но крайне полезную модель вÑего того, что может пойти не так. Ðаличие такой модели в голове очень Ñффективно помогает обнаружить точное меÑто проблемы. + +Когда вы разделили вÑе проÑтранÑтво программы на вÑе меÑта, где может быть ошибка, вы предÑтоит определить, где именно она находитÑÑ. Ð’ проÑтом Ñлучае, когда Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñтоит как "Ð’ какой неизвеÑтной мне Ñтроке падает программа?", вы можете ÑпроÑить ÑебÑ: "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¼Ð½Ðµ Ñтрока Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ находитÑÑ Ð´Ð¾ или поÑле Ñтой Ñтроки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾ моему мнению должна иÑполнÑтьÑÑ Ð² Ñередине программы?" Как правило, вы будете не наÑтолько удачливы, чтобы обнаружить, что ошибка кроетÑÑ Ð² одной Ñтроке или даже в одном блоке кода. Чаще проблема будет звучать как "Либо в Ñтом графе еÑть указатель на некорректный объект, либо мой алгоритм некорректно Ñкладывает переменные в Ñтом графе". Ð’ Ñтом Ñлучае, возможно, вам придетÑÑ Ð½Ð°Ð¿Ð¸Ñать небольшую программу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ указателей, чтобы решить, какую из чаÑтей Ñтого проÑтранÑтва проблемы можно иÑключить. + +Следующее: [Как уÑтранÑть ошибки](03-How-to-Remove-an-Error.md) diff --git a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md new file mode 100644 index 0000000..acea68c --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -0,0 +1,9 @@ +# Как уÑтранÑть ошибки +[//]: # (Version:1.0.0) +Я намеренно разделил иÑÑледование хода иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ от иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. Ðо, разумеетÑÑ, отладка означает и уÑтранение ошибки. Ð’ идеале вы прекраÑно поймете код и поймаете "Ðга"-момент, когда вы четко увидите ошибку и как ее иÑправить. Ðо Ñто не вÑегда будет возможно, поÑкольку зачаÑтую ваша программа будет иÑпользовать недоÑтаточно документированные Ñторонние ÑиÑтемы, наÑчет которых у Ð²Ð°Ñ Ð½Ðµ будет полной ÑÑноÑти. Ð’ других ÑлучаÑÑ… Ñам код будет наÑтолько Ñложен, что ваше понимание его будет неÑовершенным. + +При иÑправлении ошибки важно внеÑти наименьшие изменениÑ, которые ее иÑправÑÑ‚. Ð’Ñ‹ можете заметить другие меÑта в коде, которые потребуют улучшений, но не вноÑите их одновременно Ñ Ð¸Ñправлением ошибки. СтарайтеÑÑŒ применÑть научный метод: изменÑть только одно зараз. Лучший ÑпоÑоб Ð´Ð»Ñ Ñтого: воÑпроизвеÑти ошибку, внеÑти иÑправлениÑ, затем перезапуÑтить программу и убедитьÑÑ, что ошибки больше нет. Конечно, иногда придетÑÑ Ð¼ÐµÐ½Ñть не одну, а неÑколько Ñтрок кода, но концептуально вÑе равно ÑтарайтеÑÑŒ вноÑить точечные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. + +Иногда в программе приÑутÑтвует неÑколько ошибок, очень похожих друг на друга. Определить их и иÑправить --- Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае, вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир иногда бывает нерÑшлив. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. + +Следующее: [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md new file mode 100644 index 0000000..1d5e750 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -0,0 +1,13 @@ +# Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸ +[//]: # (Version:1.0.0) +Логирование Ñто практика напиÑÐ°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼ таким образом, что они выдают поÑледовательноÑть информативных запиÑей, называемых логом. Printlining Ñто Ñоздание небольшого, обычно временного лога. Ðачинающие программиÑты должны понимать и иÑпользовать логи, поÑкольку их Ð·Ð½Ð°Ð½Ð¸Ñ Ð² программировании ограничены. СиÑтемные архитекторы должны понимать и иÑпользовать логи, потому что они работают Ñо Ñложными ÑиÑтемами. КоличеÑтво информации, которую выдает лог, должно быть наÑтраиваемым, желательно во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Ð’ общем Ñлучае, логирование имеет три оÑновных преимущеÑтва: + +- Логи могут дать полезную информацию о багах, которые трудно воÑпроизвеÑти (например, такие, которые воÑпроизводÑÑ‚ÑÑ Ð½Ð° боевом окружении, но не на теÑтовом). +- Логи могут веÑти ÑтатиÑтику и данные о производительноÑти, такие как Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ выполнением команд. +- ЕÑли логи наÑтраиваемы, то они помогают Ñобрать общую информацию Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ñ‹Ñ… ÑпецифичеÑких проблем без необходимоÑти модифицировать или перезапуÑкать код. + +КоличеÑтво выводимой в лог информации Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ информативноÑтью и краткоÑтью. Избыток информации Ñделает лог Ñ‚Ñжелым и вызовет *Ñлепоту прокрутки*, уÑложнÑÑ Ð¿Ð¾Ð¸Ñк нужного. ÐедоÑтаток информации может проÑто Ñделать лог беÑполезным. По Ñтой причине полезно делать логи наÑтраиваемыми. Как правило, ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в логе отображает Ñвое меÑто в иÑходном коде, иÑполнÑющий ее поток, еÑли он еÑть, точное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸, обычно, Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ñ€Ð¾Ð´Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹, объем Ñвободной памÑти, чиÑло объектов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и так далее. Эти запиÑи покрывают веÑÑŒ иÑходный код, оÑобенно оÑновные функциональные узлы и риÑкованный код. ЗапиÑи можно раÑпределить по уровнÑм, и наÑтраивать в конфигурации вывод только запиÑей определенного уровнÑ. Лог Ñледует проектировать таким образом, чтобы его запиÑи помогали решать проблемы программы, которые вы предвидите. ПредуÑматривайте и проблему Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти. + +ЕÑли у Ð²Ð°Ñ ÐµÑть поÑтоÑнный лог, printlining можно выполнить в рамках запиÑей лога, и некоторые из отладочных Ñообщений Ñтоит перманентно включить в ÑиÑтему логированиÑ. + +Следующее: [Как определÑть проблемы производительноÑти](05-How-to-Understand-Performance-Problems.md) diff --git a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md new file mode 100644 index 0000000..bf62f60 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -0,0 +1,11 @@ +# Как определÑть проблемы производительноÑти +[//]: # (Version:1.0.0) +Изучение проблем производительноÑти так же неизбежно, как оÑвоение отладки. Даже еÑли вы в точноÑти и ÑовершенÑтве понимаете затраты на иÑполнение вашего кода, он будет взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ программным обеÑпечением, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ будет такого ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¸Ð»Ð¸ пониманиÑ. Как бы то ни было, на практике проблемы производительноÑти немного отличаютÑÑ Ð¸ немного проще, чем отладка в целом. + +Предположим, что вы или ваши клиенты Ñчитают ÑиÑтему или одну из подÑиÑтем Ñлишком медленной. Перед тем, как вы попытаетеÑÑŒ уÑкорить ее, вам Ñтоит поÑтроить мыÑленную модель и определить, почему она медленную. Ð’Ñ‹ можете иÑпользовать профилировщик или хороший лог, чтобы определить, где именно затрачиваетÑÑ Ð²Ñ€Ð²Ð¼Ñ Ð¸Ð»Ð¸ иной реÑÑƒÑ€Ñ ÑиÑтемы. СущеÑтвует извеÑтное утверждение, что 90% времени затрачиваетÑÑ Ð½Ð° 10% кода. Я бы добавил к Ñтому важноÑть затрат на чтение и запиÑÑŒ (I/O) в оценке проблем производительноÑти. ЧаÑто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð»Ð¸Ð±Ð¾ на чтение информации, либо на ее запиÑÑŒ. Хорошим первым шагом в поÑтроении мыÑленной модели проблемы будет нахождение затратных операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и 10% кода, занимающих большую чаÑть реÑурÑа. + +СущеÑтвует множеÑтво измерений в производительноÑти компьютерной ÑиÑтемы и множеÑтво потреблÑемых реÑурÑов. Первое, что Ñтоит измерить, Ñто реальное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение программы. Логирование Ñтого времени оÑобенно полезно тем, что оно может указать на непредвиденные обÑтоÑтельÑтва, которые возникают в ÑитуациÑÑ…, когда иÑпоьлзование профилировщика непрактично. Однако, Ñтот параметр не вÑегда дает полную картину проиÑходÑщего. Иногда вычиÑлениÑ, которые требуют чуть больше общего времени, но занимают меньше процеÑÑорного времени, покажут ÑÐµÐ±Ñ Ð»ÑƒÑ‡ÑˆÐµ в реальном окружении. Ðналогично, памÑть, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети, доÑтуп к базе данных или другому Ñерверу могут оказатьÑÑ, в конечном Ñчете, гораздо дороже, чем процеÑÑорное времÑ. + +ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° Ñто невозможноÑть продолжить иÑпонение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли она не ÑлучитÑÑ, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. + +Следующее: [Как уÑтранÑть проблемы производительноÑти](06-How-to-Fix-Performance-Problems.md) diff --git a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md new file mode 100644 index 0000000..78241c3 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -0,0 +1,13 @@ +# Как уÑтранÑть проблемы производительноÑти +[//]: # (Version:1.0.0) +БольшинÑтво проектов можно Ñ Ð¾Ñ‚Ð½Ð¾Ñительно небольшими уÑилиÑми уÑкорить в 10-100 раз отноÑительно их первой верÑии. Ð’ уÑловиÑÑ… Ñжатых Ñроков ыхода на рынок разумно и Ñффективно выбирать ту реализацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ñ‰Ðµ и быÑтрее оÑтальных. Однако, производительноÑть Ñто чаÑть удобÑтва иÑпользованиÑ, поÑтому чаÑто ее Ñтоит оценить более внимательно. + +Главное в улучшении производительноÑти Ñложной ÑиÑтемы Ñто проанализировать ее доÑтаточно тщательно, чтобы найти "узкие меÑта", то еÑть те меÑта, где запрашиваетÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¹ объем реÑурÑов. Ðет большого ÑмыÑла оптимизировать функцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ только 1% процеÑÑорного времени. ЕÑли вы не уверены, что изменение уÑкорит ÑиÑтему или ее значительную чаÑть Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ в два раза, то Ñтоит хорошо подумать, Ñтоит ли Ñто вообще делать. Как правило, еÑть такие ÑпоÑобы. Оценивайте также затраты на теÑтирование и проверки, которые потребует ваше уÑкорение. Каждое изменение кода приноÑит Ñ Ñобой необходимоÑть теÑтированиÑ, поÑтому лучше иметь немного больших изменений. + +ПоÑле того, как вы добилиÑÑŒ двукратного ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти в одном меÑте, Ñтоит Ñнова провеÑти анализ программы и определить Ñледующее по затратам узкое меÑто. Тогда можно занÑтьÑÑ Ð¸Ð¼. + +ЧаÑто узкие меÑта в производительноÑти будут предÑтавлÑть Ñобой что-то вроде подÑчета коров по ногам и делению на четыре вмеÑто обычного подÑчета по головам. Ðапример, Ñ Ñ‡Ð°Ñто забывал дать ÑобÑтвенный Ð¸Ð½Ð´ÐµÐºÑ Ñтолбцу в релÑционной базе ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, что замедлÑло веÑÑŒ процеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ в 20 раз. Среди других примеров: ненужные операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в циклах, отладочные ÑообщениÑ, Ñтавшие неактуальными, избыточное выделение памÑти и в оÑобенноÑти неумелое иÑпользование библиотек и Ñторонних фреймворков, которые плохо документированы в чаÑти производительноÑти. Такой вид улучшений легко определить и Ñ Ñ…Ð¾Ð´Ñƒ внеÑти в программу. + +Что делать, когда очевидных меÑÑ‚ Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ð¹ не оÑталоÑÑŒ? Ð’Ñ‹ можете продолжать иÑкать узкие меÑта на более глубоком уровне или переÑмотреть веÑÑŒ дизайн ÑиÑтемы. ПоÑледнее дает прекраную возможноÑть продемонÑтрировать Ñвои ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта не только в реализации нового дизайна ÑиÑтемы, но и в умении убедить Ñвоего боÑÑа в том, что Ñто необходимо. Тем не менее, перед тем, как вы начнете убеждать его в необходимоÑти коренных изменений, ÑпроÑите ÑебÑ, уÑкорить ли ваше решение ÑиÑтему в 5-10 раз. + +Следующее: [Как оптимизировать циклы](07-How-to-Optimize-Loops.md) diff --git a/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md new file mode 100644 index 0000000..4aafc84 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -0,0 +1,15 @@ +# Как оптимизировать циклы +[//]: # (Version:1.0.0) +Иногда вам повÑтречаютÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ñ‹Ðµ по времени циклы или рекурÑивные функции, которые окажутÑÑ ÑƒÐ·ÐºÐ¸Ð¼Ð¸ меÑтами в вашей программе. Перед тем, как вы попытаетеÑÑŒ уÑкорить цикл, потратьте некоторое Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° то, чтобы понÑть, можно ли избавитьÑÑ Ð¾Ñ‚ него полноÑтью. Сработает ли здеÑÑŒ какой-нибудь другой алгоритм? Можно ли вычиÑлить Ñто парамллельно Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ вычиÑлением? ЕÑли вам не удалоÑÑŒ найти обходной путь, тогда оптимизируйте цикл. Это проÑто: вынеÑите из него вÑе, что можно. Ð’ конце концов, Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ не только изобретательноÑти, но и пониманиÑ, Ñколько затрачиваетÑÑ Ð½Ð° каждое выражение и операцию. Вот неÑколько предложений: + +- Уберите операции Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой. +- Ðе размещайте впуÑтую новвые блоки под памÑть. +- Держите Ñ€Ñдом конÑтанты. +- Передвиньте операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в буфер. +- СтарайтеÑÑŒ не иÑпользовать деление. +- СтарайтеÑÑŒ не иÑпользовать затратные Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² данных. +- Перемещайте указатель вмеÑто того, чтобы переÑчитывать индекÑÑ‹. + +СтоимоÑть каждой из Ñтих операций завиÑит от вашей конкретной ÑиÑтемы. Где-то компилÑторы и аппаратное обеÑпечение выполнит их вмеÑто ваÑ. РазумнеетÑÑ, чиÑтый и Ñффективный код лучше, чем тот, который требует Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñпецифичной платформы. + +Следующее: [Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи](08-How-to-Deal-with-IO-Expense.md) diff --git a/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md new file mode 100644 index 0000000..e0c467d --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -0,0 +1,13 @@ +# Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи +[//]: # (Version:1.0.0) +Ð’ большинÑтве Ñлучаев процеÑÑоры работают быÑтро по Ñравнению Ñо взаимодейÑтвием Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼Ð¸ уÑтройÑтвами. Затраты на Ñто взаимодейÑтвие обычно объединÑÑŽÑ‚ÑÑ Ð¿Ð¾Ð´ Ñловами операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и включают Ñетевые запроÑÑ‹, чтение и запиÑÑŒ на диÑки, запроÑÑ‹ в базы данных, чтение и запиÑÑŒ файлов и другое иÑпользование аппаратной чаÑти, иногда раÑположенной не ÑовÑем Ñ€Ñвдом Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑором. Так образом, поÑтроение быÑтрой ÑиÑтемы Ñто чаще улучшение операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, чем улучшение кода в цикле или даже ÑовершенÑтвование алгоритма. + +СущеÑтвует две фундаментальные техники по улучшению операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи: кÑширование и форматирование данных. КÑширование позволÑет избежать чтениÑ-запиÑи (обычно Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ð³Ð¾ абÑтрактного значениÑ) Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ð¸ значений локально. Таким образом, Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ повторÑетÑÑ. Главное в кÑшировании четко обозначить, какие данные ÑвлÑÑŽÑ‚ÑÑ Ð¸Ñходными, а какие - копиÑми. Должен ÑущеÑтвовать только один иÑходник. КÑширование опаÑно тем, что иногда ÐºÐ¾Ð¿Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ не отразить изменениÑ, произошедшие в иÑходных данных. + +Форматирование данных Ñто удешевление операций чтени и запиÑи за Ñчет более Ñффективного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…. ЗачаÑтую Ñто конфликтует Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ требованиÑми к данным, вроде удобочитаемоÑти и переноÑимоÑти. + +ЧаÑто формат данных можно улучшить в 2-3 раза отноÑительно их первоначального предÑтавлениÑ. Техники, которые позволÑет Ñделать Ñто, включают предÑтавление в двоичном виде вмеÑто предÑтавление в удобочитаемом виде, передача Ñправочников Ñимволов вмеÑте Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, так что длинные Ñимволы не нуждаютÑÑ Ð² кодировании, и, в крайнем Ñлучае, ÑпоÑобы вроде алгоритма Хаффмана. + +Третий ÑпоÑоб, который иногда возможен, Ñто Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ð²Ñ‹Ñ‡Ð¸Ñлений ближе к Ñамим данным. Ðапример, еÑли вы читаете данные из базы данных и выполнÑете Ñ Ð½Ð¸Ð¼Ð¸ проÑтые операции вроде ÑложениÑ, то Ñтоит попытатьÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти Ñту операцию на Ñервер базы данных. Этот ÑпоÑоб очень Ñильно завиÑит от типа вашей ÑиÑтемы, но вам Ñтоит отдельно изучить его. + +Следующее: [Как управлÑть памÑтью](09-How-to-Manage-Memory.md) \ No newline at end of file diff --git a/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md new file mode 100644 index 0000000..10d7ffa --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -0,0 +1,15 @@ +# Как управлÑть памÑтью +[//]: # (Version:1.0.0) +ПамÑть Ñто ценнейший реÑурÑ, который вы не можете Ñебе позволить иÑчерпать. Какое-то Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ можете игнорировать ее, но в один момент вам придетÑÑ Ñ€ÐµÑˆÐ°Ñ‚ÑŒ, как ею управлÑть. + +ПроÑтранÑтво памÑти, которое должно ÑохранÑтьÑÑ Ð·Ð° пределами одной подпрограммы, чаÑто называетÑÑ *выделенной кучей*. УчаÑток памÑти без указателей на него беÑполезен и называетÑÑ *муÑором*. Ð’ завиÑимоÑти от ÑиÑтемы, которую вы иÑпользуете, вы можете решить удалить в Ñвном виде памÑть, выделенную под данные, которые вот-вот Ñтанут муÑором. Ðо чаще у Ð²Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ возможноÑть иÑпользовать *Ñборщик муÑора*. Он определÑет муÑорную памÑть и оÑвобождает ее автоматичеÑки, без вмешательÑтва программиÑта. Сборщик муÑора Ñто прекраÑное ÑредÑтво, оно уменьшает чиÑло ошибок в коде, позволÑет пиÑать его короче и понÑтнее Ñ Ð½Ð°Ð¸Ð¼ÐµÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ затратами. ИÑпользуйте его, когда Ñто возможно. + +Ðо даже Ñо Ñборщиком муÑора вы можете забить вÑÑŽ памÑть муÑорными данными. КлаÑÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° --- иÑпользовать Ñ…Ñш-таблицу в качеÑтве кÑша и забыть удалить ÑÑылки в ней. ПоÑкольку ÑÑылка оÑтаетÑÑ, данные по ней недоÑÑгаемы, и ÑÑылка беÑполезна. Это называетÑÑ *утечкой памÑти*. С Ñамого начала разработки Ñледует Ñледить за утечками памÑти и уÑтранÑть их. ЕÑли у Ð²Ð°Ñ ÐµÑть долго работающие ÑиÑтемы, то памÑть может никогда не заканчиватьÑÑ Ð¿Ñ€Ð¸ теÑтировании, будет иÑчерпана польователÑми при реальном иÑпользовании. + +Создание новых объектов Ñто отноÑительно Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð² любых ÑиÑтемах. ПамÑть, Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ð¿Ñ€Ñмую под локальные переменные подпрограммы, однако, обычно дешевле из-за проÑтой политики ее выÑвобождениÑ. Избегайте ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÐ½ÑƒÐ¶Ð½Ñ‹Ñ… объектов. + +Выжный момент проиÑходит, когда вы можете определить верхнюю границу чиÑла требуемых объектов. ЕÑли вÑе объекты занимают одинаковый объем памÑти, то вы можете выделить под них один блок памÑти или буфер. Ð’Ñе необходимые вам объекты можно Ñоздавать и удалÑть внутри Ñтого блока по принципу ротации, так что иногда Ñто называют кольцевым или цикличеÑким буфером. Обычно он быÑтрее, чем Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÐºÑƒÑ‡Ð°. + +Иногда вам придетÑÑ Ñвно оÑвобождать выделенное проÑтранÑтво памÑти вмеÑто того, чтобы полагатьÑÑ Ð½Ð° Ñборщик муÑора. Ð’ Ñтом Ñлучае вы должны тщательно проанализировать каждую чаÑть выделенной памÑти и разработать ÑпоÑоб ее выÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² нужный момент времени. СпоÑоб может отличатьÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ типа объектов, который вы Ñоздаете. Ð’Ñ‹ должны убедитьÑÑ, что каждой операции Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти ÑоответÑтвует Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÐµÐµ оÑвобождениÑ. Это непроÑто, поÑтому Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ программиÑты как правило реализуют Ñборщик муÑора в порÑтой форме, например, в виде подÑчета ÑÑылок на объекты. + +Следующее: [Как уÑтранÑть плавающие баги](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md new file mode 100644 index 0000000..0053887 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -0,0 +1,17 @@ +# Как уÑтранÑть плавающие баги +[//]: # (Version:1.0.0) +ÐŸÐ»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñто родÑтвенник пÑтидеÑÑтиметрового невидимого Ñкорпиона из глубокого коÑмоÑа. Этот кошмар воÑпроизводитÑÑ Ñ‚Ð°Ðº редко, что его трудно наблюдать, но доÑтаточно чаÑти его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ñто игнорировать. Ð’Ñ‹ не можете отладить баг, потому что вы не можете его найти. + +Ð¥Ð¾Ñ‚Ñ Ð¿Ð¾Ñле воÑьми чаÑов отладки вы начнете ÑомневатьÑÑ Ð² Ñтом, плавающие баги подчинÑÑŽÑ‚ÑÑ Ñ‚ÐµÐ¼ же Ñамым законам логики, что и вÑе оÑтальное. Что делает их трудными, Ñто неизвеÑтные обÑтоÑтельÑтва, в которых они воÑпроизводÑÑ‚ÑÑ. ПоÑтарайтеÑÑŒ запиÑать вÑе уÑловиÑ, при которых проиÑходит плавающий баг, чтобы вы могли предположить, в чем на Ñамом деле заключаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñ‡Ð¸Ð²Ð¾Ñть бага. Баг может быть ÑвÑзан Ñо значениÑми данных, например, воÑпроизводитьÑÑ, только когда переменной приÑваиваетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ "Вайоминг". ЕÑли причина изменчивоÑти не в Ñтом, то Ñледующим пунктом Ñтоит проверить Ñинхронизацию конкуррентноÑти. + +Изо вÑех Ñил поÑтарайтеÑÑŒ воÑпроизвеÑти баг контролируемым ÑпоÑобом. ЕÑли воÑпроизвеÑти его не получаетÑÑ, попробуйте поймать его через логирование. ЕÑли нужно, напишите Ñпециальные логи Ð´Ð»Ñ Ñтого бага, которые будут запиÑать то, что вам кажетÑÑ ÑвÑзанным Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹. СмиритеÑÑŒ Ñ Ñ‚ÐµÐ¼, что Ñто будет долгий процеÑÑ, еÑли ошибка воÑпроизводитÑÑ Ð½Ð° боевом окружении и не по вашей прихоти. ПодÑказки, которые вы можете извлечь из логов, могут не дать вам полного ответа, но должны предоÑтавить доÑтаточно информации Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñамих логов. Улучшение ÑиÑтемы Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð±Ð¾ÐµÐ²Ð¾Ð³Ð¾ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ занÑть много времени. Затем вам придетÑÑ Ð¶Ð´Ð°Ñ‚ÑŒ, пока баг не поÑвитÑÑ Ð²Ð½Ð¾Ð²ÑŒ, чтобы получить информацию из обновленных логов. Этот цикл может повторитьÑÑ ÐµÑ‰Ðµ неÑколько раз. + +Самый глупый плавающий баг, который Ñоздал Ñ, заключалÑÑ Ð² многопоточной реализации одного функционального Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¾Ð³Ð¾ проекта. Я тщательно обеÑпечил корректную оценку параллельноÑти программы, правильное иÑпользование Ñдере процеÑÑора (вÑех воÑьми в жанном Ñлучае). Я проÑто-напроÑто забыл Ñинхронизировать Ñборщик муÑора. Программа могла работать безошибочно долгое времÑ, Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ñ Ð²Ñе заданиÑ, которые Ñ ÐµÐ¹ назначал. Со Ñтыдом признаюÑÑŒ, Ñ Ð½Ð°Ñ‡Ð°Ð» подозревать аппаратное обеÑпечение, прежде чем Ð¼ÐµÐ½Ñ Ð¾Ñенило, в чем проблема. + +Ðедавно на работе у Ð½Ð°Ñ Ð±Ñ‹Ð» плавающий баг, на который мы потратили неÑколько недель. У Ð½Ð°Ñ ÐµÑть многопоточное Ñерверное приложение на Java, размещенное на Apache-Ñерверах. Чтобы поддержать быÑтрую Ñмену Ñтраниц, мы выполнÑли вÑе операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в небольшом наборе из четырех потоков, отделенных от потоков, ответÑтвенных за Ñмену Ñтраниц. Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени они "замораживалиÑÑŒ" и, наÑколько мы могли понÑть из логов, прекращали делать что-либо полезное на неÑколько чаÑов. ПоÑкольку у Ð½Ð°Ñ Ð±Ñ‹Ð»Ð¾ выделено четыре потока, Ñамо по Ñебе Ñто не было большой проблемой. До тех пор, пока не замораживалиÑÑŒ вÑе четыре потока одновременно. Тогда очереди запроÑов, оÑвобожденные замороженными потоками, забивали вÑÑŽ Ñвободную памÑть и крашили наш Ñервер. Ðам потребовалаÑÑŒ неделÑ, чтобы проÑто выÑвить баг, и мы не Ñмогли понÑть, в чем причина, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñтот баг, и даже что именно проиÑходило в потоках в тот момент, когда они "заÑтревали". + +Этот пример демонÑтрирует риÑк, ÑвÑзанный Ñ Ð¸Ñпользованием Ñтороннего программного обеÑпечениÑ. Мы иÑпользовали лицензионный код, который убирал теги HTML из текÑта. ХотÑ, к ÑчаÑтью, у Ð½Ð°Ñ Ð±Ñ‹Ð» иÑходный код, мы не изучали его доÑконально, пока мы не включили логирование на нашем Ñервере и не увидели, что потоки почтовых Ñообщений забивалиÑÑŒ из-за Ñтого лиценционного кода. + +Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае, иÑполнение было квадратичным. Это значит, что Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта было пропорционально квадрату длины текÑта. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. + +Следующее: [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](11-How-to-Learn-Design-Skills.md) diff --git a/ru/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/ru/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md new file mode 100644 index 0000000..997dede --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -0,0 +1,9 @@ +# Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы +[//]: # (Version:1.0.0) +Чтобы научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программное обеÑпечение, наблюдайте за тем, как Ñто делают более опытные коллеги. Затем изучайте хорошо напиÑанные программы. Далее вы можете прочеÑть неÑколько книг о новейших техниках проектированиÑ. + +Затем вы должны начать проектировать ÑамоÑтоÑтельно. Ðачните Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð³Ð¾ проекта. Когда вы завершите его, оцените, наÑколько удачна или неудачна Ñ„Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, и как Ñильно вы отклонилиÑÑŒ от первоначальной концепции. Потом переходите на проекты побольше, желательно в ÑотрудничеÑтве Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми. Ðавык Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ годы на выработку. Толковый программиÑÑ‚ может оÑвоить оÑновы за пару меÑÑцев и дальше развиватьÑÑ ÑамоÑтоÑтельно. + +ЕÑтеÑтвенно и полезно развивать Ñвой ÑобÑтвенный Ñтиль, но помните, что проектирование Ñто иÑкуÑÑтво, а не наука. Люди, которые пишут об Ñтом книги, заинтереÑованы в том, чтобы проектирование казалоÑÑŒ научным. Ðе ÑтановитеÑÑŒ догматиком в отношении Ñтилей проектированиÑ. + +Следующее: [Как ÑкÑпериментировать](12-How-to-Conduct-Experiments.md) diff --git a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md new file mode 100644 index 0000000..5743c62 --- /dev/null +++ b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -0,0 +1,23 @@ +# Как ÑкÑпериментировать +[//]: # (Version:1.0.0) +Великий ЭдÑгер ДейкÑтра краÑноречиво объеÑнил, что информатика не ÑвлÑетÑÑ ÑкÑпериментальной наукой и не завиÑит от Ñлектронных уÑтройÑтв. Как он выразилÑÑ Ð² 1960-е годы: + +> ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. + +Программирвание может и не быть ÑкÑпериментальной наукой, но у большинÑтва программиÑтов не возможноÑти заниматьÑÑ Ñ‚ÐµÐ¼, что ДейкÑтра определил как вычиÑлительную науку. Мы должны работать в облаÑти Ñкперимента подобно некоторым (но не вÑем) физикам. ЕÑли ÑпуÑÑ‚Ñ 30 лет можно будет заниматьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ без ÑкÑпериментированиÑ, то Ñто будет великим доÑтижением информатики. + +ЭкÑперименты, которые вам придетÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒÑÑ, включают: + +- ТеÑтирование ÑиÑтем на небольших примерах данных, чтобы убедитьÑÑ Ð² их ÑоответÑтвии документации, либо чтобы понÑть их ответы, еÑли документации нет. +- ТеÑтирование небольших изменений в коде, чтобы удоÑтоверитьÑÑ, что они уÑтранÑÑŽÑ‚ баг в программе +- Измерение производительноÑти ÑиÑтемы в двух различных окружениÑÑ… из-за неÑовершенÑтва знаний о их характериÑтиках производительноÑти +- Проверка целоÑтноÑти данных +- Сбор ÑтатиÑтики, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ помочь Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ð¸ Ñложных и трудновоÑпроизводимых багов + +Я не думаю, что в Ñтом ÑÑÑе Ñ Ñмогу объÑÑнить, как проектировать ÑкÑперименты. Вам придетÑÑ Ð½Ð°ÑƒÑ‡Ð¸Ñ‚ÑŒÑÑ Ñтому ÑамоÑтоÑтельно и практиковатьÑÑ. Я могу предложить два небольших Ñовета. + +Первое, ÑтарайтеÑÑŒ четко обозначать Ñвои иÑходные Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ утверждениÑ, которые вы ÑобираетеÑÑŒ проверить. Очень полезно запиÑывать их, оÑобенно, еÑли вы работаете в коллективе. + +ЧаÑто вам придетÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñерию ÑкÑпериментов, каждый из которых опираетÑÑ Ð½Ð° знаниÑ, полученные в результате предыдущего. Таким образом, Ñледует проектировать ÑкÑперименты таким образом, чтобы получать как можно больше информации. К Ñожалению, Ñто противоречит принципу проÑтоты ÑкÑпериментов. Вам придетÑÑ Ñ€Ð°Ð·Ð²Ð¸Ð²Ð°Ñ‚ÑŒ Ñвою ÑкÑпертизу в Ñтой облаÑти ÑамоÑтоÑтельно. + +Следующее: [Командные навыки. Почему важно оценивать задачи](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/ru/1-Beginner/README.md b/ru/1-Beginner/README.md new file mode 100644 index 0000000..b4d029f --- /dev/null +++ b/ru/1-Beginner/README.md @@ -0,0 +1,27 @@ +# 1. Ðачинающий программиÑÑ‚ +[//]: # (Version:1.0.0) +- Личные навыки + - [ÐаучитеÑÑŒ отлаживать](Personal-Skills/01-Learn-To-Debug.md) + - [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [Как уÑтранÑть ошибки](Personal-Skills/03-How-to-Remove-an-Error.md) + - [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸](Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [Как определÑть проблемы производительноÑти](Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [Как уÑтранÑть проблемы производительноÑти](Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [Как оптимизировать циклы](Personal-Skills/07-How-to-Optimize-Loops.md) + - [Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи](Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [Как управлÑть памÑтью](Personal-Skills/09-How-to-Manage-Memory.md) + - [Как уÑтранÑть плавающие баги](Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [Как ÑкÑпериментировать](Personal-Skills/12-How-to-Conduct-Experiments.md) +- Командные навыки + - [Почему важно оценивать задачи](Team-Skills/01-Why-Estimation-is-Important.md) + - [Как оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку](Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [Как иÑкать информацию](Team-Skills/03-How-to-Find-Out-Information.md) + - [Как Ñпрашивать людей](Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [Как документировать правильно](Team-Skills/05-How-to-Document-Wisely.md) + - [Как работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом](Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий](Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [Как пиÑать юнит-теÑты](Team-Skills/08-How-to-Unit-Test.md) + - [Делайте перерывы, когда вы в тупике](Team-Skills/09-Take-Breaks-when-Stumped.md) + - [Как понÑть, когда идти домой](Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми](Team-Skills/11-How-to-Deal-with-Difficult-People.md) diff --git a/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md new file mode 100644 index 0000000..0830507 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -0,0 +1,15 @@ +# Почему важно оценивать задачи +[//]: # (Version:1.0.0) +Чтобы как можно быÑтрее выпуÑтить программное обеÑпечение, нужно планировать не только ее разработку, но и документирование, запуÑк и продвижение. Ð’ коммерчеÑких проектах также важны продажи и финанÑÐ¾Ð²Ð°Ñ ÑоÑтавлÑющаÑ. Без предÑказуемоÑти времени разработки невозможно вÑе Ñто запланировать Ñффективно. + +Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° времени на разработку дает предÑказуемоÑть. Менеджеры очень любÑÑ‚ Ñто. Тот факт, что теоретичеÑки и практичеÑки невозможно точно предÑказать, Ñколько времени уйдет на рзработку, чаÑто упуÑкаетÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð°Ð¼Ð¸. ÐÐ°Ñ Ð²Ñе Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ Ñделать Ñту невыполнимую вещь, и мы должны чеÑтно в Ñтом признатьÑÑ. Однако, будет нечеÑтно не признать невыполнимоÑть Ñтого Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¸, когда необходимо, не объÑÑнить Ñто. Вокруг временных оценок много недопониманий, так как люди Ñклонны принимать Ñлова + +> Я думаю, что еÑли Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ понимаю проблему, то около 50% вероÑтноÑти, что мы Ñделаем Ñто за пÑть недель. При уÑловии, что никто не будет нам мешать вÑе Ñто времÑ. + +в дейÑтвительноÑти означает + +> Я обещаю вÑе Ñделать за пÑть недель, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ момента. + +Это Ð¾Ð±Ñ‰Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð½ÐµÐ¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚, чтобы вы в Ñвном виде обÑуждали, что именно значит ваша Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° Ñо Ñвоим боÑÑом или клиентом. Так, Ñловно они дети. Измените Ñвои формулировки оценки, даже еÑли они вам кажутÑÑ Ð¾Ñ‡ÐµÐ²Ð¸Ð´Ð½Ñ‹Ð¼Ð¸. + +Следующее: [Как оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку](02-How-to-Estimate-Programming-Time.md) diff --git a/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md new file mode 100644 index 0000000..5361792 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -0,0 +1,21 @@ +# Как оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку +[//]: # (Version:1.0.0) +Оценка времени требует практики и труда. Иногда так много труда, что имеет ÑмыÑл отдельно оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° оценку задачи, оÑобенно, еÑли речь идет об оценке большой задачи. + +Когда Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ оценивать большую задачу, Ñамое чеÑтное - потÑнуть времÑ. БольшинÑтво инженеров полны Ñнтузиазма и Ñклонны угождать, а задержка ответа не обрадует Ñпрашивающего. Ðо Ð²Ñ‹Ð´Ð°Ð½Ð½Ð°Ñ Ñ Ñ…Ð¾Ð´Ñƒ оценка врÑд ли будет точной и чеÑтной. + +Пока вы думаете над ответом, возможно, получитÑÑ Ñделать прототип задачи. ЕÑли обÑтоÑтельÑтва позволÑÑŽÑ‚, то Ñто Ñамый точный ÑпоÑоб оценки, и он позволÑет добитьÑÑ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ прогреÑÑа. + +Когда взÑть Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° некоторое иÑÑледование задачи невозможно, то Ñначала вы должны четко и ÑÑно уÑтановить, что именно означает ваша оценка. Сформулируйте Ñто значение как первое и заключительное чаÑти вашей оценки в пиÑьменном виде. Подготовьте пиÑьменный ответ, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ на более мелкие заданиÑ, в идеальном Ñлучае, требующие не больше одного рабочего днÑ. Самое важное здеÑÑŒ - ничего не забыть. Ðапример, очень важно Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° документирование, теÑтирование, планирование, взаимодейÑтвие Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ командами, отпуÑка. ЕÑли вы каждый день тратите чаÑть времени на общение Ñ Ð½ÐµÑƒÐ¼Ð½Ñ‹Ð¼Ð¸ людьми, добавьте отдельную Ñтроку на Ñто в общую оценку времени. Это даÑÑ‚ вашему боÑÑу общее видение того, что отнимает у Ð²Ð°Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ времени, а на что вам требуетÑÑ ÐµÐ³Ð¾ гораздо больше. + +Я знаком Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, которые включают такие временные затраты в общую оценку в неÑвном виде, Ñ‚.е. проÑто прибавлÑÑŽÑ‚ их к общему времени работы. Я не Ñоветую так делать. Одним из Ñффектов такого подхода может Ñтать Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ. Ðапример, программиÑÑ‚ может заложить три Ð´Ð½Ñ Ð½Ð° задачу, которую он на Ñамом деле ÑобираетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ за день. ПрограммиÑÑ‚ планирует потратить еще два Ð´Ð½Ñ Ð½Ð° документирование Ñвоей работы или на другой полезный проект. Ðо тот факт, что работа была выполнена только за один день, очень проÑто выÑÑнить. И тогда может возникнуть впечатление, что программиÑÑ‚ бездельничал или переоценил задачу. Ðамного лучше дать четкое опиÑание того, что вы реально ÑобираетеÑÑŒ делать в рамках задачи. ЕÑли документирование занимает в два раза больше времени, чем напиÑание кода, и в оценке Ñказано об Ñтом, то Ñто дает преимущеÑтва, еÑли Ñто донеÑти до вашего менеджера. + +Включайте вÑе временные затраты в оценку в Ñвном виде. ЕÑли задача Ñкорее вÑего займет один день, но может раÑÑ‚ÑнутьÑÑ Ð½Ð° деÑÑть дней, еÑли ваш первоначальный подход не Ñработает, отметьте Ñто в вашей оценке. Либо укажите Ñреднее Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ ÑоглаÑно вашим оценкам вероÑтноÑтей разных иÑходов. Любые риÑки, ÑвÑзанные Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½ÐµÐ¼ на задачу, должны быть включены в оценку. Ð’Ñ€Ñд ли конкретный человек заболеет в конкретный момент времени. Ðо в большом проекте Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвом программиÑтов обÑзательно будут те, кто возьмет больничный. То же Ñамое каÑаетÑÑ Ð¾Ñ‚Ð¿ÑƒÑков. Ркакова вероÑтноÑть обÑзательного обучающего Ñеминара в рамках вÑей компании? ЕÑли ее можно оценить, включите ее в общую оценку. Кроме Ñтого, еще еÑть неизвеÑтные факторы. Их по определению не получитÑÑ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ по отдельноÑти. Ð’Ñ‹ можете заложить Ð´Ð»Ñ Ð½Ð¸Ñ… отдельную Ñтроку в общей оценке, либо учеÑть их как-то по-другому. Чего Ð½ÐµÐ»ÑŒÐ·Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ, так Ñто позволÑть Ñвоему боÑÑу забыть об их ÑущеÑтвовании. Очень легко превратить оценку времени в раÑпиÑание, еÑли не учитывать неизвеÑтные факторы. + +Ð’ командной работе Ñледует ÑтаратьÑÑ, чтобы оценку выполнÑли те люди, которые будут выполнÑть задачу, и чтобы оценка была ÑоглаÑована внутри вÑей команды. Люди отличаютÑÑ Ð¿Ð¾ навыкам, опыту, готовноÑти и уверенноÑти. ÐеприÑтноÑти начинаютÑÑ, когда Ñильный программиÑÑ‚ оценивает задачу Ð´Ð»Ñ ÑебÑ, а более Ñлабые программиÑты затем вынуждены придерживатьÑÑ Ñтой оценки. Когда вÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑоглаÑна Ñ Ð¿Ð¾Ñтрочным разбиением оценок затрат на задачи, Ñто облегчает общее понимание задач и дает возможноÑть тактичеÑки перераÑпределить нагрузку Ñ Ð±Ð¾Ð»ÐµÐµ Ñлабых членов команды на более Ñильных. + +ЕÑли в задаче приÑутÑтвуют большие риÑки, которые невозможно оценить, ваша обÑзанноÑть донеÑти Ñто до менеджера так, чтобы тот не брал на ÑÐµÐ±Ñ Ð¾Ð±ÑзательÑтва, ÑвÑзанные Ñ Ð½Ð¸Ð¼Ð¸. Ð’ Ñтом Ñлучае Ñтоит Ñделать вÑе возможное, чтобы Ñнизить Ñти риÑки. + +ЕÑли вы Ñможете убедить Ñвою компанию иÑользовать *ÑкÑтремальное программирование*, то вам придетÑÑ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°Ñ‚ÑŒ только отноÑительно небольшие задачи. Это гораздо интереÑнее и продуктивнее. + +Следующее: [Как иÑкать информацию](03-How-to-Find-Out-Information.md) diff --git a/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md new file mode 100644 index 0000000..61977ec --- /dev/null +++ b/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -0,0 +1,19 @@ +# Как иÑкать информацию +[//]: # (Version:1.0.0) +То, что вы ищете, определÑет то, как вы Ñто ищете. + +ЕÑли вы ищете информацию о *конкретных знаниÑÑ…*, которые объективны и легко проверить, например, поÑледнÑÑ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ð°Ñ‚Ñ‡Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, то лучше вежливо ÑпроÑить об Ñтом в интернете или в диÑкуÑÑионной группе. Ðе ищите в интернете то, что ÑвÑзано Ñ Ð¼Ð½ÐµÐ½Ð¸ÐµÐ¼ или Ñубъективной интерпретацией, отношение бреда здеÑÑŒ Ñлишком велико. + +ЕÑли вы ищете *общие Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ чем-то Ñубъективном*, иÑторию мнений людей о предмете, то идите в библиотеку (Ñ Ð¸Ð¼ÐµÑŽ в виду наÑтоÑщее здание Ñ ÐºÐ½Ð¸Ð³Ð°Ð¼Ð¸). Ðапример, чтобы узнать что-нибудь о математике, грибах или миÑтицизме, идите в библиотеку. + +ЕÑли вам нужно узнать, *как Ñделать что-то нетривиальное*, доÑтаньте две-три книги, поÑвÑщенные Ñтой теме, и прочтите их. Ð’ интернете вы можете узнать, как Ñделать тривиальные вещи, вроде уÑтановки пакета программного обеÑпечениÑ. Ð’Ñ‹ даже можете узнать Ñерьезные вещи, например, хорошие техники программированиÑ, но здеÑÑŒ легко потратить гораздо больше времени на поиÑк и отбор результатов и попытки определить, наÑколько авторитетен иÑточник, чем на чтение ÑоответÑтвующей чаÑти в Ñерьезной книге. + +ЕÑли вы ищете *информацию, которую Ñкорее вÑего никто не знает*, например, "работает ли Ñто новое программное обеÑпечение Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ñ‹Ð¼Ð¸ наборами данных?", вÑе равно Ñтоит поиÑкать ответ в интернете и в библиотеке. Когда Ñти ÑпоÑобы будут иÑчерпаны, вы можете Ñпроектировать ÑкÑперимент, чтобы убедитьÑÑ Ð² иÑтинноÑти найденных ответов. + +ЕÑли Ð²Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€ÐµÑует мнение или ÑкÑпертное Ñуждение Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ некоторых уникальных обÑтоÑтельÑтв, поговорите Ñ ÑкÑпертом. Ðапример, еÑли вы хотите знать, Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð»Ð¸ Ñто Ð¸Ð´ÐµÑ Ð½Ð°Ð¿Ð¸Ñать Ñовременную ÑиÑтему ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… на Lisp, вам Ñтоит поговорить Ñ ÑкÑпертом Lisp и Ñ ÑкÑпертом по базам данных. + +ЕÑли вы хотите знать, *какова вероÑтноÑть*, что ÑущеÑтвует более быÑтрый алгоритм Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ приложениÑ, поговорите Ñ Ñ‚ÐµÐ¼, кто работает в Ñтой облаÑти. + +ЕÑли вы хотите принÑть личное решение, которое можете принÑть только вы, вроде начинать вам Ñвой Ð±Ð¸Ð·Ð½ÐµÑ Ð¸Ð»Ð¸ нет, попробуйте ÑоÑтавить ÑпиÑок аргументов за и против Ñтого решениÑ. ЕÑли Ñто не поможет, попробуйте принÑть решение наугад. Предположим, вы изучили идею Ñо вÑех Ñторон, провели нужные иÑÑледованиÑ, выÑÑнили вÑе обÑтоÑтельÑтва, преимущеÑтва и недоÑтатки идеи, но вÑе равно не можете решить. Тогда вы должны поÑледовать Ñвоему Ñердцу и Ñказать Ñвоему разуму заткнутьÑÑ. МножеÑтво доÑтупных техник Ð³Ð°Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‡ÐµÐ½ÑŒ полезны Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐ¸Ñ… подÑознательных желаний, так как ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· них предÑтавлÑет Ñобой Ñовершенно неоднозначный и Ñлучайный образ, которому ваше подÑознание придаÑÑ‚ Ñвое значение. + +Следующее: [Как иÑпользовать людей в качеÑтве иÑточников информации](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md new file mode 100644 index 0000000..d8d5829 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -0,0 +1,15 @@ +# Как Ñпрашивать людей +[//]: # (Version:1.0.0) +Уважайте Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ человека и ÑоизмерÑйте его Ñо Ñвоим. Ð’Ð¾Ð¿Ñ€Ð¾Ñ Ð´Ð°ÐµÑ‚ гораздо больше, чем проÑто ответ. Человек, которого вы Ñпрашиваете, узнает Ð²Ð°Ñ ÐºÐ°Ðº проÑто из вашего приÑутÑтвиÑ, так и по вашему вопроÑу. Ð’Ñ‹ узнаете о человеке то же Ñамое, и вдобавок, возможно, вы получаете ответ на ваш вопроÑ. Как правило, Ñто гораздо важнее, чем ваш вопроÑ. + +Однако, ценноÑть вопроÑов умешьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретны выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может показатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. + +Главное правило: вÑе получают пользу от небольшой беÑеды Ñ Ð²Ð°Ð¼Ð¸. И чем чаще проиÑходит беÑеда, тем меньше пользы они получают. Ваша работа ÑоÑтоит в том, чтобы дать Ñтим людÑм полезу от разговора Ñ Ð²Ð°Ð¼Ð¸ и получить ее Ñамому, ÑохранÑÑ Ð±Ð°Ð»Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñƒ нею и потраченным временем. + +Важно уважать Ñвое ÑобÑтвенное времÑ. ЕÑли разговор Ñ ÐºÐµÐ¼-то, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что он займет Ð²Ñ€ÐµÐ¼Ñ Ñтого человека, поможет Ñохранить вам ваше времÑ, то вам Ñтоит провеÑти Ñтот разговор. ЕÑли только вы не Ñчитаете, что потраченное на разговор Ð²Ñ€ÐµÐ¼Ñ Ñтого человека более важно Ð´Ð»Ñ Ð²Ñей организации. + +Странным примером Ñтого ÑвлÑетÑÑ Ð»ÐµÑ‚Ð½Ð¸Ð¹ Ñтажер. От Ñтажера на выÑокотехничеÑкой должноÑти Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ больших Ñвершений, но можно ожидать, что но будет донимать вопроÑами вÑех подрÑд. Почему Ñто позволÑетÑÑ? Потому что те, кого донимает Ñтажер, получают от него важную возможноÑть покраÑоватьÑÑ. У них, возможно, поÑвлÑетÑÑ ÑˆÐ°Ð½Ñ ÑƒÑлышать новые идеи, поÑмотреть Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° проект. Может быть, они попытаютÑÑ Ð½Ð°Ð½Ñть Ñтажера, но даже еÑли Ñто не так, вÑе равно от него много пользы. + +Каждый раз, когда вы Ñчитаете, что людÑм еÑть что Ñказать, вам Ñледует Ñпрашивать их мнение. Это льÑтит им и позволÑет вам узнать что-то новое, научить их чему-то новому. Хорошему программиÑту редко нужны Ñоветы от вице-президента по продажам, но когда они нужны, ÑпроÑите их. Я однажды попроÑил разрешить мне поÑлушать неÑколько звонков от ребÑÑ‚ из отдела продаж, чтобы лучше понÑть их работу. Это занÑло не больше 30 минут, но думаю, что Ñто произвело на них большое впечатление. + +Следующее: [Как документировать правильно](05-How-to-Document-Wisely.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md new file mode 100644 index 0000000..a6388d9 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -0,0 +1,20 @@ +# Как документировать правильно +[//]: # (Version:1.0.0) +Жизнь Ñлишком коротка, чтобы пиÑать ерунду, которую никто не будет читать. ЕÑли вы пишите плохо, никто не будет Ñто читать. Так что лучше вÑего документировать хорошо и немного. Менеджеры чаÑто не понимают Ñтого, потому что даже Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð°ÐµÑ‚ им ложное чувÑтво уверенноÑти, что они не завиÑÑÑ‚ от Ñвоих программиÑтов. ЕÑли кто-то абÑолютно наÑтаивает, чтобы вы пиÑали никому не нужную документацию, Ñкажите "да" и начинайте Ñпокойно иÑкать новую работу. + +Чтобы Ñнизить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° документирование, нет ничего более Ñффективного, чем дать точную оценку времени, которое на него потребуетÑÑ. Реалии жизни холодны и Ñуровы: документирование, как и теÑтирование, может занÑть гораздо больше времени, чем разработка. + +ÐапиÑание хорошей документации Ñто, прежде вÑего, умение хорошо пиÑать. Я предлагаю вам найти книги о том, как хорошо пиÑать, изучить их и практиковатьÑÑ. Ðо даже еÑли вы плохой пиÑатель или плохо владеете Ñзыком, на котором должны документировать, вÑе, что вам реально нужно, Ñто золотое правило "ПоÑтупай Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ так, как вы хотите, чтобы поÑтупали Ñ Ð²Ð°Ð¼Ð¸". Подумайте о тех, кто будет читать вашу документацию, что им будет нужно найти в ней, как вы можете Ñто до них донеÑти. Уже Ñ Ñтим вы будете лучше Ñреднего автора документации и хорошим программиÑтом. + +Когда дело каÑаетÑÑ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñамого кода в противоположноÑть напиÑанию документировании Ð´Ð»Ñ Ð½ÐµÐ¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов, лучшие программиÑты, которых Ñ Ð·Ð½Ð°ÑŽ, придерживаютÑÑ ÑƒÐ½Ð¸Ð²ÐµÑ€Ñального принципа пиÑать Ñамодокументируемый код и добавлÑть комментарии только там, где невозможно объÑÑнить Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñамим кодом. Ð”Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ подхода еÑть две веÑкие причины. Во-первых, любой, кому понадобитÑÑ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð´Ð°, в большинÑтве Ñлучаев Ñможет и предпочтет читать Ñам код. РазумеетÑÑ, Ñделать Ñто проще опытным программиÑтам, чем начинающим. Ðо гораздо важнее, что код и Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ могут противоречить друг другу, еÑли отдельной документации нет. ИÑходный код в худшем Ñлучае может быть напиÑан плохо и непонÑтно. ДокументациÑ, еÑли она напиÑана плохо, может лгать, а Ñто в тыÑÑчу раз хуже. + +Это не облегчает работу ответÑтвенным программиÑтам. Как пиÑать Ñамодокументируемый код? Что Ñто вообще значит? Это значит: + +- ПиÑать код, Ð´ÑƒÐ¼Ð°Ñ Ð¾ том, что кому-то придетÑÑ ÐµÐ³Ð¾ читать; +- ПрименÑть золотое правило выше; +- Выбирать решение, которое очевидно, даже еÑли менее очевидное решение быÑтрее; +- Жертвовать небольшими оптимизациÑми вмеÑто того, чтобы делать код менее понÑтным; +- Думать о читателе кода и тратить больше Ñвоего драгоценного времени на то, чтобы ему было проще; +- Ðикогда не называть функции `foo`, `bar` или `doIt`! + +Следующее: [Как работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом](06-How-to-Work-with-Poor-Code.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md new file mode 100644 index 0000000..894cffa --- /dev/null +++ b/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -0,0 +1,11 @@ +# Как работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом +[//]: # (Version:1.0.0) +Иногда приходитÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ Ñ‡ÑƒÐ¶Ð¸Ð¼ плохо напиÑанным кодом. Ðе Ñтоит плохо думать об авторах Ñтого кода, пока вы не поймете полноÑтью их Ñитуацию. Возможно, они работали быÑтро и под давлением, чтобы уÑпеть по графику. Как бы то ни было, чтобы работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом, вам надо его понÑть. Чтобы понÑть его, нужно времÑ, и его надо откуда-то взÑть из вашего текущего графика. Ðа Ñтом Ñледует наÑтаивать. Чтобы понÑть код, вам придетÑÑ Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ иÑходники и ÑкÑпериментировать Ñ Ð½Ð¸Ð¼. + +Это отличный момент начать документировать, даже еÑли пока только Ð´Ð»Ñ ÑебÑ. Попытка задокументировать код вынудит Ð²Ð°Ñ Ð¿Ð¾Ñмотреть на него Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… точек зрениÑ, которые вы до Ñтого не раÑÑматривали, и конечный документ может получитьÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ полезным. Пока вы занимаетеÑÑŒ Ñтим, прикиньте, Ñколько займет перепиÑать веÑÑŒ код или его некоторую чаÑть. Сохранит ли Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ¿Ð¸Ñывание чаÑти кода? Сможете ли вы больше доверÑть коду, еÑли вы перепишите его? ЗдеÑÑŒ опаÑайтеÑÑŒ ÑамоуверенноÑти. ЕÑли вы перепишете код, то вам будет проще, но будет ли проще Ñледующему человеку, который будет работать Ñ ÐºÐ¾Ð´Ð¾Ð¼? ЕÑли вы перепишите код, то как много придетÑÑ Ñ‚ÐµÑтировать? Ðе перевеÑит ли необходимоÑть теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кода вÑе преимущеÑтва, которые он принеÑет? + +Ð’ любой оценке времени, которую вы делаете Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ‡ÑƒÐ¶Ð¸Ð¼ кодом, качеÑтво Ñтоого кода должно влиÑть на ваше воÑприÑтие риÑков проблем и неизвеÑтных факторов. + +Важно помнить, что абÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ Ð¸ инкапÑулÑциÑ, два лучших ÑредÑтва программиÑта, оÑобенно применимы к плохому коду. Возможно, вы не Ñможете переделать целиком большой блок кода, но еÑли вы добавите новый уровень абÑтракции к него, то Ñможете добитьÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… преимущеÑтв без переделки вÑего кода. Ð’ чаÑтноÑти, вы можете отделить оÑобенно плохие чаÑти кода, чтобы отрефакторить их незавиÑимо от оÑтального кода. + +Следующее: [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð°](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md new file mode 100644 index 0000000..3308445 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -0,0 +1,9 @@ +# Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий +[//]: # (Version:1.0.0) +СиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð° (также извеÑтные как ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий) позволÑÑŽÑ‚ вам Ñффективно управлÑть проектами. Они очень полезны Ð´Ð»Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡ÐºÐ¸ и жизненно важны Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разработчиков. Они отÑлеживают вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑех верÑиÑÑ… кода, так что ни одна Ñтрока кода не может быть потерÑна навÑегда. Кроме Ñтого, они позволÑÑŽÑ‚ приÑвоить оÑмыÑленное название изменениÑм. С помощью таких ÑиÑтем можно пиÑать отладочный код Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью, ведь веÑÑŒ модифицируемый код можно хранить отдельно от иÑходного работающего. Ðовый код потом можно показать вÑей команде или Ñразу выпуÑтить. + +Я довольно поздно оценил вÑе преимущеÑтва ÑиÑтем ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий, но теперь без них Ñ Ð½Ðµ начну даже небольшой личный проект. Вообще, они нужны, когда вы работаете в команде Ñ Ð¾Ð´Ð½Ð¾Ð¹ кодовой базой. Ðо у них еÑть другое важное преимущеÑтво: они поощрÑÑŽÑ‚ думать о коде как о раÑтущей ÑиÑтеме. ПоÑкольку каждое изменение отмечено Ñвоим именем или номером, поÑтепенно приходишь к мыÑли, что программное обеÑпечение Ñто Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑÐµÑ€Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в коде. Я думаю, что Ñто оÑобенно полезно Ð´Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… программиÑтов. + +Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ñ‚ÐµÑ…Ð½Ð¸ÐºÐ° иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий заключаетÑÑ Ð² том, чтобы поÑтоÑнно держать Ñвой код в пределах неÑкольких дней от актуальноÑти. Код, который не может быть закончен за неÑколько дней, проверÑетÑÑ, но таким образом, чтобы он был неактивным и не вызывалÑÑ Ð² дейÑтвующей ÑиÑтеме, а значит, не Ñоздавал проблем Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…. Ошибки, замедлÑющие работу товарищей по команде, непроÑтительны и чаÑто ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð°Ð±Ñƒ. + +Следующее: [Как пиÑать юнит-теÑты](08-How-to-Unit-Test.md) diff --git a/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md new file mode 100644 index 0000000..4329615 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -0,0 +1,9 @@ +# Как пиÑать юнит-теÑты +[//]: # (Version:1.0.0) +Юнит-теÑтирование, то еÑть теÑтирование отдельных чаÑтей кода командой, напиÑавшей его, Ñто чаÑть программирование, а не что-то отдельное от него. Проектирование того, как будет теÑтироватьÑÑ ÐºÐ¾Ð´, Ñто чаÑть общего Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°. Вам Ñледует запиÑывать планы по теÑтированию, даже еÑли Ñто вÑего одна фраза. Иногда теÑÑ‚ окажетÑÑ Ð¿Ñ€Ð¾Ñтым: "Хорошо ли выглÑдит кнопка?". Иногда он будет Ñложным: "Этот алгоритм ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ правильные ÑовпадениÑ?" + +Когда возможно, иÑползуйте проверки утверждений и теÑтовые драйверы. Они не только помогут найти баги в начале разработки, но будут полезны позже и позволÑÑ‚ уÑтранить более Ñложные проблемы. + +ЭкÑтремальные программиÑты много пишут об Ñффективном юнит-теÑтировании. Я могу только поÑоветовать ознакомитьÑÑ Ñ Ð¸Ñ… трудами на Ñту тему. + +Следующее: [Делайте перерывы, когда вы в тупике](09-Take-Breaks-when-Stumped.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/ru/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md new file mode 100644 index 0000000..dc7d331 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -0,0 +1,5 @@ +# Делайте перерывы, когда вы в тупике +[//]: # (Version:1.0.0) +Когда вы в тупике, Ñделайте перерыв. Я иногда медитирую 15 минут, когда захожу в тупик, и проблема неожиданно разрешаетÑÑ, когда Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÑŽÑÑŒ к ней. Ðочной отдых иногда выполнÑет такую же роль в более широком маÑштабе. Возможно, поможет временное переключение на другую задачу. + +Следующее: [Как понÑть, когда идти домой](10-How-to-Recognize-When-to-Go-Home.md) diff --git a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md new file mode 100644 index 0000000..fa3c770 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -0,0 +1,16 @@ +# Как понÑть, когда идти домой +[//]: # (Version:1.0.0) +Программирование Ñто деÑтельноÑть, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑвлÑетÑÑ ÐºÑƒÐ»ÑŒÑ‚ÑƒÑ€Ð¾Ð¹. К Ñожалению, Ñто не та культура, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ†ÐµÐ½Ð¸Ñ‚ пÑихичеÑкое и физичеÑкое здоровье. По культурно-иÑторичеÑким причинам (например, необходимоÑть работать по ночам на ненагруженных компьютерах) и из-за Ñильного Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑтить продукт на рынок программиÑты традиционно перерабатывают. Ðе думаю, что Ñтоит верить вÑему, что раÑÑказывают, но мне кажетÑÑ, что 60 рабочих чаÑов в неделю Ñто раÑпроÑтраненный график, а 50 чаÑов Ñто практичеÑки минимум. Это значит, что чаÑто требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. И Ñто ÑÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð´Ð»Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐ³Ð¾ программиÑта, который отвечает не только за ÑебÑ, но и за Ñвоих коллег. Ð’Ñ‹ должны понимать, когда идти домой, и иногда, когда предложить Ñвоим коллегам пойти домой. ЗдеÑÑŒ не может быть четких правил Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹, так же, как не может быть однозначных правил о том, как воÑпитывать детей. Ð’Ñе люди разные. + +Свыше 60 рабочих чаÑов в неделю Ð´Ð»Ñ Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð°Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°, которую Ñ Ð¼Ð¾Ð³Ñƒ выдержать лишь небольшое Ð²Ñ€ÐµÐ¼Ñ (около недели). Ðо иногда от Ð¼ÐµÐ½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñтолько. Ðе знаю, Ñправедливо ли ожидать от человека 60 чаÑов работы в неделю. Я не уверен, что даже 40 чаÑов Ñто Ñправедливо. Однако, Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что Ñто глупо работать так много, что почти не извлекать пользы от дополнительных чаÑов работы. Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñтот предел лежит за 60 чаÑами в неделю. Я лично Ñчитаю, что программиÑÑ‚ должен проÑвлÑть благородÑтво и неÑти Ñту Ñ‚Ñжелую ношу. Однако, быть козлом Ð¾Ñ‚Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ - не обÑзанноÑть программиÑта. Печальный факт заключаетÑÑ Ð² том, что чаÑто программиÑтов проÑÑÑ‚ быть козлами отпущениÑ, чтобы уÑтроить Ð´Ð»Ñ ÐºÐ¾Ð³Ð¾-то предÑтавление, например, когда менеждер пытаетÑÑ Ð²Ð¿ÐµÑ‡Ð°Ñ‚Ð»Ð¸Ñ‚ÑŒ руководителÑ. ПрограммиÑты чаÑто идут на Ñто, потому что они хотÑÑ‚ угодить и не умеют говорить "нет". ЕÑть четыре ÑпоÑоба защиты от такого отношениÑ: + +- Как можно больше общайтеÑÑŒ Ñо вÑеми Ñотрудниками в компании, чтобы никто не мог ввеÑти в заблуждение руководителей отноÑительно того, что проиÑходит +- ÐаучитеÑÑŒ оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° работу и планировать вÑе ее чаÑти в Ñвном виде и дайте вÑем четкое предÑтавление о Ñвоем раÑпиÑании и где его найти +- ÐаучитеÑÑŒ говорить "нет", говорите "нет" вÑей командой, еÑли Ñто необходимо +- УвольнÑйтеÑÑŒ, еÑли дургих выходов нет + +БольшинÑтво программиÑтов Ñто хорошие программиÑты, а хорошие программиÑты хотÑÑ‚ Ñделать как можно больше. Чтобы доÑтичь Ñтого, они должны Ñффективно управлÑть Ñвоим временем. Между разогревом перед работой и глубоким погружением в нее вÑегда должно пройти некоторое времÑ. Многие программиÑты лучше вÑего работают, когда они раÑполагают длинными, никем не прерываемыми отрезками времени, в течение которых они могут ÑоÑредоточитьÑÑ Ð¸ погрузитьÑÑ Ð² работу. Ðо люди должны еще и Ñпать, и выполнÑть множетÑов других вещей. Каждый должен найти ÑпоÑоб ÑбаланÑировать Ñвой рабочий ритм и ритм жизни. Каждый программиÑÑ‚ должен делать вÑе возможное, чтобы обеÑпечить ÑÐµÐ±Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð°Ð¼Ð¸ Ñффективной работы, например, Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€ÑƒÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ дни, когда он может отвлекатьÑÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на Ñамые важные ÑобраниÑ. + +ПоÑкольку у Ð¼ÐµÐ½Ñ ÐµÑть дети, Ñ ÑтараюÑÑŒ проводить вечера Ñ Ð½Ð¸Ð¼Ð¸. Лучше вÑего мне подходит очень долгий раочий день, затем поÑпать в офиÑе или Ñ€Ñдом (Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ очень далеко от дома), затем на Ñледующий день уйти домой доÑтаточно рано, чтобы провеÑти Ð²Ñ€ÐµÐ¼Ñ Ñ Ð¼Ð¾Ð¸Ð¼Ð¸ детьми до того, как они отправÑÑ‚ÑÑ Ñпать. Этот ритм не очень удобен Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, но Ñто лучшее, что Ñ Ñмог найти. ОтправлÑйтеÑÑŒ домой, еÑли у Ð²Ð°Ñ Ð·Ð°Ñ€Ð°Ð·Ð½Ð°Ñ Ð±Ð¾Ð»ÐµÐ·Ð½ÑŒ. Ð’Ñ‹ должны идти домой, еÑли у Ð²Ð°Ñ Ñуицидальные мыÑли. Ð’Ñ‹ должны Ñделать перерыв или идти домой, еÑли вы думаете об убийÑтве больше чем неÑколько Ñекунд. Ð’Ñ‹ должны отправить домой человека, еÑли он демонÑтрирует признаки Ñерьезного умÑтвенного раÑÑтройÑтва или депреÑÑии. ЕÑли из-за уÑталоÑти у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ‚ Ñоблазн быть более нечеÑтным или вредным, чем вам обычно ÑвойÑтвенно, Ñделайте перерыв. Ðе иÑпользуйте кокаин или амфетамины Ð´Ð»Ñ Ð±Ð¾Ñ€ÑŒÐ±Ñ‹ Ñ ÑƒÑталоÑтью. Ðе злоупотреблÑйте кофеином. + +Следующее: [Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми](11-How-to-Deal-with-Difficult-People.md) diff --git a/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md new file mode 100644 index 0000000..d6bfb97 --- /dev/null +++ b/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -0,0 +1,15 @@ +# Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми +[//]: # (Version:1.0.0) +Скорее вÑего вам придетÑÑ Ð¸Ð¼ÐµÑ‚ÑŒ дело Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми. Может быть, вы Ñами трудный человек. ЕÑли вы из тех, у кого чаÑто возникают конфликты Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и руководителÑми, то вы должны ценить Ñвою незавиÑимоÑть, но одновременно работать над Ñвоими навыками взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð¾Ñтальными, не приноÑÑ Ð² жертву Ñвои принципы и ум. + +Это может Ñтать проблемой Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… программиÑтов, у которых нет опыта подобных Ñитуаций, и чей предыдущий жизненный опыт научил моделÑм поведениÑ, которые не годÑÑ‚ÑÑ Ð² рабочем окружении. Трудные люди чаÑто привыкают к разноглаÑиÑм, и на них меньше, чем на оÑтальных, дейÑтвует Ñоциальное давление идти на компромиÑÑ. Главное - уважать их должным образом. Ðо Ñто больше, чем захотите вы, и меньше, чем могут захотеть подобные люди. + +ПрограммиÑты вынуждены работать вмеÑте в команде. Когда возникает разноглаÑие, его надо как-то решить, его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñлишком долго. Трудные люди чаÑто бывают чрезвычайно умны, и им еÑть, что полезного выÑказать. Очень важно Ñлушать их и понимать без предубеждениÑ, которое может вызывать их личноÑть. ТрудноÑти в общении чаÑто ÑтановÑÑ‚ÑÑ Ð¸Ñточником разноглаÑий, но их можно преодолеть терпением. СтарайтеÑÑŒ держать общение в Ñпокойном и вежливом тоне, не поддавайтеÑÑŒ на уловки увеличить конфликт. ПоÑле того, как вы потратите разумное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° попытки понÑть оппонента, примите решение. + +Ðе позволÑйте грубой Ñиле заÑтвавлÑть Ð²Ð°Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ то, Ñ Ñ‡ÐµÐ¼ вы неÑоглаÑны. ЕÑли вы лидер команды, принимайте то, что вы Ñчитаете лучшим решением. Ðе принимайте Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ÑÑ…Ð¾Ð´Ñ Ð¸Ð· личных причин, какими они бы ни были. Будьте готовы объÑÑнить Ñвое решение. ЕÑли вы в команде Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼ человеком, не позволÑйте, чтобы решение лидера было вызвано любым личным мнением. ЕÑли решение не в вашу пользу, принимайте его от вÑей души. + +Трудные люди менÑÑŽÑ‚ÑÑ Ð¸ ÑтановÑÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ в общении. Я Ñам был Ñвидетелем Ñтому, но Ñто ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. Как бы то ни было, у вÑех бывают периоды взлетов и падений. + +Один из Ñамых больших вызовов, вÑтречающихÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñƒ программиÑту, оÑобенно лидерам, Ñто держать трудного человека вовлеченным в общую работу. Такие люди больше Ñклонны уклонÑтьÑÑ Ð¾Ñ‚ нее и паÑÑивно ÑопротивлÑтьÑÑ. + +Следующее: [Разработчик Ñреднего уровнÑ](../../2-Intermediate) diff --git a/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md new file mode 100644 index 0000000..2293b7b --- /dev/null +++ b/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -0,0 +1,13 @@ +# Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ +[//]: # (Version:1.0.0) +Разработка программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ - Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ тем, что делает Ñамо программное обеÑпечение, и тем, чтобы проект был завершен. Ð’Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ попроÑить пожертвовать качеÑтвом разработки, чтобы уÑкорить запуÑк проекта. Причем жертва может оказатьÑÑ Ñ‚Ð°ÐºÐ¾Ð¹, что Ñто Ñерьезно заденет вашу инженерную или бизнеÑ-ответÑтвенноÑть. Ðапример, Ð²Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ попроÑить применить Ñлабое или неоправданное техничеÑкое решение, которое в дальнейшем приведет к множеÑтву проблем. + +Ð’ таком Ñлучае ваша Ð¿ÐµÑ€Ð²Ð°Ñ Ð¾Ð±ÑзанноÑть Ñообщить о таком требовании Ñвоей команде и ÑÑно объÑÑнить, чем обернетÑÑ Ñнижение качеÑтва. Ð’ конце концов, ваше техничеÑкое понимание проекта должно быть гораздо лучше Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Подчеркните, что терÑет проект, что приобретает, и какой ценой потери на текущем Ñтапе придетÑÑ Ð²Ð¾ÑполнÑть на Ñледующем цикле разработки. ЗдеÑÑŒ очень пригодитÑÑ Ð¾Ð±Ñ‰ÐµÐµ понимание, которое дает хороший проектный план. ЕÑли жертвование качеÑтвом влиÑет на уÑÐ¸Ð»Ð¸Ñ Ð¿Ð¾ обеÑпечению качеÑтва, укажите на Ñто боÑÑу и команде по качеÑтву. ЕÑли жертвование качеÑтвом приведет к увеличению найденных багов поÑле теÑтированиÑ, укажите и на Ñто. + +ЕÑли жертвы неизбежны, вам Ñтоит попытатьÑÑ Ð¾Ñ‚Ð´ÐµÐ»Ð¸Ñ‚ÑŒ некачеÑтвенный в результате такого Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ в отдельные компоненты, чтобы в дальнейшем вернутьÑÑ Ðº нему и перепиÑать. РазъÑÑните Ñто Ñвоей команде, чтобы они могли запланировать такой подход. + +NinjaProgrammer на Slashdot приÑлал такой шедевр: + +> Помните, что Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° будет уÑтойчива к плохой реализации к коде. ЕÑли в коде приÑутÑтвуют правильные интерфейÑÑ‹ и абÑтракции, тогда поÑледующий рефакторинг будет менее болезненным. ЕÑли напиÑать чиÑтый код, который легко поправить, подумайте, в чем проблема у архитектуры, из-за которой Ñто проиÑходит. + +Следующее: [Как управлÑть завиÑимоÑÑ‚Ñми](02-How-to-Manage-Software-System-Dependence.md) diff --git a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md new file mode 100644 index 0000000..9f34432 --- /dev/null +++ b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -0,0 +1,13 @@ +# Как управлÑть завиÑимоÑÑ‚Ñми +[//]: # (Version:1.0.0) +Современное программное обеÑпечение имеет тенденцию завиÑеть от множеÑтва компонентов, которые могут не быть под вашим непоÑредÑтвенным контролем. Это повышает продуктивноÑть за Ñчет Ñинергии и повторного иÑпользованиÑ. Однако, каждый такой компонент приноÑит Ñ Ñобой некоторые проблемы: + +- Как вы будете иÑправлÑть баги в компоненте? +- Ограничивает ли компонент Ð²Ð°Ñ Ð¸Ñпользовать определенное аппаратное обеÑпечение или ÑиÑтему? +- Что вы будете делать, еÑли компонент полноÑтью откажет? + +Ð’Ñегда лучше инкапÑулировать компонент таким образом, чтобы он был отделен, и его можно было легко заменить. ЕÑли компонент покажет Ñвою неработоÑпоÑобноÑть, вы замените его на другой или напишите Ñвой ÑобÑтвенный. ИнкапÑулÑÑ†Ð¸Ñ Ð½Ðµ улучшает переноÑимоÑть, но делает перепиÑывание кода проще, что почти также здорово. + +ЕÑли у Ð²Ð°Ñ ÐµÑть иÑходный код компонента, то риÑки ÑнижаютÑÑ Ð²Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð¾. С иÑходным кодом вы можете быÑтрее оценивать компонент, отлаживать, находить новые Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ вноÑить иÑправлениÑ. ЕÑли вы вноÑите иÑправлениÑ, то о них Ñледует Ñообщить владельцу компонента, чтобы он включил их в официальный релиз. Ð’ противном Ñлучае, вам придетÑÑ ÑамоÑтоÑтельно поддерживать неофициальную верÑию компонента. + +Следующее: [Как оценивать Ñтороннее программное обеÑпечение](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md new file mode 100644 index 0000000..ba99c05 --- /dev/null +++ b/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -0,0 +1,19 @@ +# Как оценивать Ñтороннее программное обеÑпечение +[//]: # (Version:1.0.0) +ИÑпользование Ñтороннего программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñто один из Ñамых Ñффективных ÑпоÑобов быÑтро поÑтроить Ñерьезную ÑиÑтему. От него не Ñледует отказыватьÑÑ, но Ñледует изучить ÑвÑзанные Ñ Ð½Ð¸Ð¼ риÑки. Один из Ñамых больших риÑков Ñто период множеÑтва багов и почти неработоÑпоÑобноÑти, ÑлучающийÑÑ Ð¿ÐµÑ€ÐµÐ´ тем, как программное обеÑпечение будет доработано и Ñтанет уÑтойчивым продуктом. Прежде чем раÑÑматривать возможноÑть интеграции Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹, разработанной вашей или Ñторонней компанией, очень важно оценить, наÑколько она уÑтойчива Ð´Ð»Ñ Ð¸ÑпользованиÑ. Вот деÑÑть вопроÑов, которые вы должны задать Ñебе по Ñтому поводу: + +1. Это выпущенный продукт? (ОбещаниÑм не Ñтоит верить) +2. СущеÑтвует ли доÑтупный Ñвод знаний об Ñтом программном обеÑпечении? +3. Ð’Ñ‹ первый пользователь? +4. ЕÑть ли у разработчиков программы Ñильный Ñтимул Ð´Ð»Ñ ÐµÐµ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð¸ развитиÑ? +5. ЕÑть ли техничеÑÐºÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ°? +6. Переживет ли проект уход нынешних разработчиков? +7. ЕÑть ли Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ наполовину ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð°? +8. ИзвеÑтно ли Ñто программное обеÑпечение вашей команде или компании? +9. Хочет ли ваша команда или ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ Ð½Ð¸Ð¼? +10. Сможете ли вы нанÑть людей Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼, даже еÑли Ñто плохое программное обеÑпечение? + +Ðебольшое размышление над Ñтими вопроÑами демонÑтрирует огромную ценноÑть хорошо зарекомендовавшего ÑÐµÐ±Ñ Ñвободного программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ кодом в Ñнижении риÑков. + + +Следующее: [Как решать: покупать программу или пиÑать Ñвою](04-How-to-Make-a-Buy-vs-Build-Decision.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md new file mode 100644 index 0000000..0d43204 --- /dev/null +++ b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -0,0 +1,16 @@ +# Как решать: покупать программу или пиÑать Ñвою +[//]: # (Version:1.0.0) +ПредпринимательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проект, которые пытаютÑÑ Ð´Ð¾Ð±Ð¸Ñ‚ÑŒÑÑ Ñ‡ÐµÐ³Ð¾-то Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ программного отбеÑпечениÑ, поÑтоÑнно вынуждены принимать Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° *покупать программу или пиÑать Ñвою*. Это выражение неудачно по двум причинам. Оно как будто игнорирует ÑущеÑтвование Ñвободного и открытого программного обеÑпечениÑ, которое необÑзательно покупать. И, что более важно, его Ñтоит переформулировать в *приобреÑти и интегрировать или напиÑать Ñвое и интегрировать*, потому что затраты на интеграцию обÑзательны надо учеÑть. Такие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ редкого ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´ÐµÐ»Ð¾Ð²Ð¾Ð¹, управленчеÑкой и инженерной Ñмекалки. + +- ÐаÑколько полно ваши Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ñовпадают Ñ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñми под которые было Ñоздано программное обеÑпечение, раÑÑматривающееÑÑ Ðº покупке? +- ÐšÐ°ÐºÐ°Ñ Ñ‡Ð°Ñть программы, которую вы можете купить, дейÑтвительно вам нужна? +- Каковы затраты на оценку интеграции? +- Каковы затраты на интеграцию? +- Приобретение Ñтой программы увеличит или уменьшит затраты на долгоÑрочную поддержку? +- ЕÑли вы напишите Ñвое программное обеÑпечение под Ñвои цели, поÑтавить ли Ñто вашу компанию в нежелательную бизнеÑ-Ñитуацию? + +Следует как минимум дважды хорошо подумать, прежде чем начинать Ñоздавать программу, доÑтаточно большую, чтобы Ñтать оÑновой чьего-то бизнеÑа. Подобные идеи чаÑто предлагают Ñркие и оптимиÑтичные люди, которые могут внеÑти большой вклад в вашу команду. ЕÑли их Ð¸Ð´ÐµÑ Ð¾ÐºÐ°Ð¶ÐµÑ‚ÑÑ ÑƒÐ±ÐµÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹, возможно вы захотите изменить Ñвой бизнеÑ-план. Ðо не инвеÑтируйте необдуманно в решение, которое больше, чем ваш ÑобÑтвенный бизнеÑ. + +РаÑÑмотрев Ñти вопроÑÑ‹, вам Ñтоит подготовить две черновых проектных плана, один Ñ Ð¿Ð¾ÐºÑƒÐ¿ÐºÐ¾Ð¹ программного обеÑпечениÑ, второй Ñ Ñозданием ÑобÑтвенного. Это подтолкнет Ð²Ð°Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ затраты на интеграцию. Также Ñтоит раÑÑмотреть затраты на долгоÑрочную поддержку программы. Чтобы оценить затраты на интеграцию, вам придетÑÑ Ñ‚Ñ‰Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾ изучить Ñамо программное обеÑпечение перед покупкой. ЕÑли Ñто невозможно, то вы берете на ÑÐµÐ±Ñ Ð½ÐµÑ€Ð°Ð·ÑƒÐ¼Ð½Ñ‹Ðµ риÑки при покупке и вам Ñтоит отказатьÑÑ Ð¾Ñ‚ Ð¿Ñ€Ð¸Ð¾Ð±Ñ€ÐµÑ‚ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð² данном проекте. ЕÑли в раÑÑмотрении неÑколько подобных вопроÑов о покупке, то придетÑÑ Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‚Ð¸Ñ‚ÑŒ Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° тщательную оценку каждого ÑлучаÑ. + +Следующее: [Как раÑти профеÑÑионально](05-How-to-Grow-Professionally.md) diff --git a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md new file mode 100644 index 0000000..35930d0 --- /dev/null +++ b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -0,0 +1,11 @@ +# Как раÑти профеÑÑионально +[//]: # (Version:1.0.0) +Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте роль, которую вы хотите. Выражайте признательноÑть и благодарноÑть людÑи за их вклад в уÑпех организации и за перÑональнуб помощь вам. + +ЕÑли вы хотите Ñтать лидером команды, ÑпоÑобÑтвуйте формированию общего ÑоглаÑÐ¸Ñ Ð² работе. ЕÑли вы хотите Ñтать менеджером, возьмите ответÑтвенноÑть за раÑпиÑание. Обычно вы Ñпокойно можете Ñделать Ñто, Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ñ Ð»Ð¸Ð´ÐµÑ€Ð¾Ð¼ или менеджером, так как Ñто Ñнимет Ñ Ð½Ð¸Ñ… большую нагрузку. ЕÑли Ñто Ñлишком ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, возьмите на ÑÐµÐ±Ñ Ð¾Ð±ÑзанноÑти поменьше. + +Оценивайте ÑебÑ. ЕÑли вы хотите Ñтать лучше как программиÑÑ‚, ÑпроÑите программиÑта, которого вы уважаете, как Ñтать похожим на него. Также вы можете ÑпроÑить Ñвоего боÑÑа, который меньше разбираетÑÑ Ð² Ñтом, но зато имеет большее влиÑние на вашу карьеру. + +Ищите пути оÑвоить новые навыки, как тривиальные техничеÑкие вроде оÑÐ²Ð¾ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ программной ÑиÑтемы, так и трудные Ñоциальные, вроде ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ð¸Ñать хорошо. СтарайтеÑÑŒ иÑпользовать Ñти навыки в работе. + +Следующее: [Как проводить ÑобеÑедованиÑ](06-How-to-Evaluate-Interviewees.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md new file mode 100644 index 0000000..cf331be --- /dev/null +++ b/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -0,0 +1,15 @@ +# Как проводить ÑобеÑÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ +[//]: # (Version:1.0.0) +Оценке потенциальных Ñотрудников не уделÑетÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾Ð³Ð¾ вниманиÑ. ÐанÑтый плохой Ñотрудник Ñто, как и неудачный брак, ужаÑно. Ð—Ð½Ð°Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть уÑилий каждого должна быть направлена на найм, но Ñто ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. + +ЕÑть разные Ñтили ÑобеÑедованиÑ. Ðекоторые мучительны и направлены оказать на кандидата давление. Это Ñлужит ценной цели: выÑвить под ÑтреÑÑом недоÑтатки характера и ÑлабоÑти. Кандидаты не чеÑтнее Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽÐµÑ€Ð°Ð¼Ð¸, чем Ñ Ñамим Ñобой, а чеолвечеÑÐºÐ°Ñ ÑпоÑобноÑть к Ñамообману поразительна. + +Как минимум, вам Ñтоит выделить два чаÑа на уÑтную оценку техничеÑких навыков каждого кандидата. С опытом вы научитеÑÑŒ быÑтро выÑÑнÑть, что они знают, и быÑтро проводить границу Ñ Ñ‚ÐµÐ¼, чего они не знают. Кандидаты Ñ ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ отноÑÑÑ‚ÑÑ Ðº Ñтому. Мне доводилоÑÑŒ неÑколько раз Ñлышать от кандидатов, что качеÑтво ÑобеÑÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ñ‹Ð»Ð¾ одной из причин выбрать компанию. Хорошие профеÑÑионалы хотÑÑ‚, чтобы их нанимали за навыки, а не за поÑледнее меÑтоработы или колледж или некие иные неÑущеÑтвенные характериÑтики. + +При ÑобеÑедовании также Ñтоит оценивать ÑпоÑобноÑть кандидата учитьÑÑ, что гораздо важнее того, что он уже знает. Также Ñтоит обратить внимание на признаки трудного человека. Их можно раÑпознать, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸ о ÑобеÑедовании, но во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽ быть трудно их определить. ÐаÑколько хорошо кандидат умеет общатьÑÑ Ð¸ взаимодейÑтвовать Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ гораздо важнее Ð·Ð½Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÐµÐ¹ÑˆÐµÐ³Ð¾ Ñзыка программированиÑ. + +Один из читателей рекомендует давать теÑтовое задание кандидатам. ПреимущеÑтво Ñтого теÑта в том, что он позволÑет выÑвить кандидата, который хорошо предÑтавлÑет ÑебÑ, но не может пиÑать код. Таких людей немало. Я лично не пробовал Ñтот метод, но он кажетÑÑ Ñ€Ð°Ð·ÑƒÐ¼Ð½Ñ‹Ð¼. + +Ðаконец, ÑобеÑедование - Ñто еще и процеÑÑ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸. Ð’Ñ‹ продаете Ñвоб компанию или проект кандидату. Однако, поÑкольку вы разговариваете Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтом, не пытайтеÑÑŒ приукраÑить правду. Ðачните Ñ Ð¿Ð»Ð¾Ñ…Ð¾Ð³Ð¾, а затем перейдите к тому хорошему, что еÑть. + +Следующее: [Как понÑть, когда применÑть выÑокие технологии](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md new file mode 100644 index 0000000..0788a87 --- /dev/null +++ b/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -0,0 +1,15 @@ +# Как понÑть, когда применÑть выÑокие технологии +[//]: # (Version:1.0.0) +СущеÑтвует Ñвод знаний об алгоритмах, Ñтруктурах данных, математике и других вещах, о которых программиÑты знают, но довольно редко иÑпользуют в работе. Ðа практике Ñти замкчательные вещи Ñлишком Ñложны и, как правило, ненужны. Ðет ÑмыÑла улучшать алгоритм, когда Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð½Ð° неÑффективный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº базе данных. ДоÑÐ°Ð´Ð½Ð°Ñ Ñ‡Ð°Ñть Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑоÑтоит в том, чтобы заÑтавить ÑиÑтемы общатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ и иÑпользовать очень проÑтые Ñтруктуры данных Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ ÐºÑ€Ð°Ñивого пользовательÑкого интерфейÑа. + +Когда Ñледует применÑть выÑокие технологии? Когда Ñледует открывать Ñерьезные книги, чтобы найти альтернативу обычному алгоритму? Иногда полезно Ñто делать, но такие технологии Ñледует тщательно оценивать. + +Три Ñамых важных ÑÐ¾Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾ потенциальном иÑпользовании какой-либо техники Ñто: + +- Хорошо ли Ñта техники инкапÑулирована? Так что риÑк Ð´Ð»Ñ Ð¾Ñтальных ÑиÑтем невыÑок, как и общий прироÑÑ‚ ÑложноÑти и затраты на поддержку +- ЯвлÑетÑÑ Ð»Ð¸ преимущеÑтво иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтой техники значительным (например, в два раза Ð´Ð»Ñ Ñтарой и хорошо разработанной ÑиÑтемы или в деÑÑть раз Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹)? +- Сможете ли вы проверить и оценить Ñту технику Ñффективно? + +ЕÑли хорошо изолированный алгоритм, иÑпользующий Ñлегка более Ñложную логику, может уменьшить нагрузку на аппаратную чаÑть или увеличить производительноÑть в два раза, то будет преÑтуплением не иÑпользовать его. Один из факторов поддержать такой подход - Ñто показать, наÑколько низок риÑк иÑпользованиÑ, так как Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐ¾ изучена. ОÑтаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ риÑк интеграции. ЗдеÑÑŒ опыт и ÑкÑпертиза программиÑта в Ñочетании Ñ Ñамой технологией должны Ñделать интеграцию доÑтаточно проÑтой. + +Следующее: [Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸](08-How-to-Talk-to-Non-Engineers.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md new file mode 100644 index 0000000..756fec3 --- /dev/null +++ b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -0,0 +1,19 @@ +# Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸ +[//]: # (Version:1.0.0) +Инженеры и в чаÑтноÑти программиÑты чаÑто отделÑÑŽÑ‚ÑÑ Ð¾Ñ‚ оÑтальных людей. Это значит, что оÑтальные люди непохожи на наÑ. Об Ñтом Ñтоит помнить во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Ð’Ñегда Ñледует понимать Ñвою аудиторию. + +Ðеинженеры умны, но не так ÑвÑзаны Ñ Ñозданием техничеÑких вещей, как мы. Мы Ñоздаем продукт. Они продают его, работают Ñ Ð½Ð¸Ð¼, поддерживают и управлÑÑŽÑ‚, но они не ÑкÑперты в Ñоздании. Они не так хороши в командной работе, как инженеры (здеÑÑŒ, вне вÑÑких Ñомнений, еÑть иÑключениÑ). Их Ñоциальные навыки как правило так же хороши или лучше, чем у инженеров, но их работа не вÑегда требует того доверительного и точного Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ четкого раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡ как у программиÑтов. + +Ðеинженеры могут Ñлишком ÑтремитьÑÑ ÑƒÐ³Ð¾Ð´Ð¸Ñ‚ÑŒ, и вы можете подавить их. Подобно нам, они могут без реального Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñказать "да", чтобы угодить вам или из-за Ñтраха перед вами. И затем не выполнить Ñвое обещание. + +ÐепрограммиÑты могут понимать техничеÑкие аÑпекты, но у них нет того, что трудно даже Ð´Ð»Ñ Ð½Ð°Ñ: техничеÑкой ÑкÑпертизы. Они понимают, как работает технологиÑ, но не могут понÑть, почему один ÑпоÑоб займет три меÑÑца, а другой три днÑ. (Ð’ конце концов, программиÑты анекдотично плохи в оценке затрат). Это дает прекраÑную возможноÑть Ð´Ð»Ñ Ñинергии Ñ Ð½Ð¸Ð¼Ð¸. + +При разговоре Ñ Ð²Ð°ÑˆÐµÐ¹ командой вы, не думаÑ, иÑпользуете ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñленг, которые гораздо короче и Ñффективнее, так как у вÑех Ð²Ð°Ñ Ñхожий опыт Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñми и вашим продуктом в чаÑтноÑти. ПотребуетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶Ð¸Ñ‚ÑŒ уÑилие, чтобы не иÑпользовать Ñтот Ñленг Ñ Ñ‚ÐµÐ¼Ð¸, у кого нет подобного опыта, оÑобенно, еÑли приÑутÑтвуют члены вашей команды. Такой Ñленг Ñоздает Ñтену между вами и оÑтальными и даже хуже, заÑтавлÑет их беÑÑмыÑленно тратить времÑ. + +С вашей командой базовый контекÑÑ‚ и цели Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑны и не нуждаютÑÑ Ð² чаÑтом повторении, вы фокуÑируетеÑÑŒ на деталÑÑ…. С неинженерами нужен другой подход. Они могут не понимать то, что вы Ñчитаете разумеещимÑÑ. И поÑкольку вы Ñчитаете Ñто очевидным и не объÑÑнÑете детали, поÑле разговора Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¾Ð¼ вам может показатьÑÑ, что вы прекраÑно понÑли друг друга, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº в дейÑтвительноÑти образовалоÑÑŒ большое недопонимание. Вам Ñледует предполагать, что будет недопонимание, и внимательно Ñледить, где в разговоре оно может поÑвитьÑÑ. ПоÑтарайтеÑÑŒ, чтобы ваш ÑобеÑедник повторил или переформулировал то, что вы ему Ñказали, чтобы убедитьÑÑ, что он правильно вÑе понÑл. ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть чаÑто вÑтречатьÑÑ Ñ Ñтим человеком, потратьте времÑ, чтобы узнать, наÑколько Ñффективно вы выражаете ÑÐµÐ±Ñ Ð¸ как вы можете Ñто делать лучше. ЕÑли в общении возникает проблема, ÑтремитеÑÑŒ изменить ÑобÑтвенный подход вмеÑто того, чтобы разочаровыватьÑÑ Ð² подходе ÑобеÑедников. + +Я обожаю работать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Это дает прекраÑные возможноÑти учить и научитьÑÑ Ñамому. Ð’Ñ‹ можете подавать пример в ÑмыÑле ÑÑноÑти и четкоÑти в общении. Инженеры привыкли вноÑить порÑдок в хаоÑ, вноÑить ÑÑноÑть в неразбериху, и неинженеры очень ценÑÑ‚ Ñто в наÑ. ПоÑкольку мы владеем техничеÑкой ÑкÑпертизой и чаÑто понимаем проблемы бизнеÑа, чаÑто мы можем найти проÑтое решение. + +Иногда неинженеры из доброты и ÑÑ‚Ñ€ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ñть правильное решение предлагают вещи, которые по их мнению Ñделают нашу жизнь проще, тогда как в дейÑтвительноÑти ÑущеÑтвует решение гораздо лучше, которое можно найти, объединив взглÑд неинженера Ñ Ð²Ð°ÑˆÐµÐ¹ техничеÑкой ÑкÑпертизой. Я лично люблю ÑкÑтремальное программирование, поÑкольку оно решает Ñту проблему неÑффективноÑти. БыÑтрое ÑоглаÑование оценки Ñ Ð¸Ð´ÐµÐµÐ¹ упрощает поиÑк новой идеи, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой лучшее Ñочетание затрат и выгод. + +Следующее: [Продвинутые навыки](../../3-Advanced) diff --git a/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md new file mode 100644 index 0000000..20c37a5 --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -0,0 +1,15 @@ +# Как ÑохранÑть мотивацию +[//]: # (Version:1.0.0) +Замечателен и удивителен тот факт, что программиÑты выÑоко мотивированы желанием Ñоздавать прекраÑное, полезное и удобное. Это желание не уникально Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов и не универÑально, но оно наÑтолько раÑпроÑтранено именно Ñреди них, что Ñто отделÑет Ñту профеÑÑию от оÑтальных. + +У Ñтого еÑть практичеÑкие и важные поÑледÑтвиÑ. ЕÑли программиÑты вынуждены делать что-то, что не ÑвлÑетÑÑ Ð¿Ñ€ÐµÐºÑ€Ð°Ñным, полезным или удобным, они начинают терÑть мотивацию. Ð’ Ñоздание уродливых, глупых и Ñкучных вещей вкладываетÑÑ Ð¼Ð½Ð¾Ð³Ð¾ денег, но в конечном Ñчете именно радоÑть ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ð¾Ñит наибольший доход компании. + +Очевидно, ÑущеÑтвуют целые индуÑтрии вокруг мотивационных техник, некоторые из которых применимы и Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов. Среди таких Ñ Ð¼Ð¾Ð³Ñƒ выделить: + +- ИÑпользование наиболее подходÑщего Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¹ задачи +- ПоиÑк возможноÑтей применить новые технологии, Ñзыки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ техники +- Попытка либо научить кого-то, либо научитьÑÑ Ñамому в каждом проекте, как был мал он ни был + +Ðаконец, еÑли возможно, ÑтарайтеÑÑŒ измерÑть Ñвой вклад в работу в том, что Ð´Ð»Ñ Ð²Ð°Ñ Ð¿ÐµÑ€Ñонально имеет значение. Ðапример, когда Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ над багами, общее чиÑло уже иÑправденных мною багов мне Ñовершенно неинтереÑно, ведь оно не завиÑит от общего чиÑла багов, которые вÑе еще возможно ÑущеÑтвуют. Кроме того, Ñто чиÑло отражает мой вклад в Ñамом малом из вÑех возможных ракурÑов. Ðо ÑоотноÑить каждый иÑправленный баг Ñо ÑчаÑтливым клиентом Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, наоборот, очень ценно, и Ñлужит мотивацией в работе. + +Следующее: [Как заÑлужить доверие](02-How-to-be-Widely-Trusted.md) diff --git a/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md new file mode 100644 index 0000000..41c82dc --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -0,0 +1,7 @@ +# Как заÑлужить доверие +[//]: # (Version:1.0.0) +Чтобы вам доверÑли, вы должны заÑлуживать доверие. Ð’Ñ‹ также должны быть прозрачны. ЕÑли никто не знает Ð²Ð°Ñ Ñ‚Ð¾Ð»ÐºÐ¾Ð¼, то никто до конца вам не поверит. С теми, кто близок к вам, например, Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами по команде, такой проблемы не будет. ЗаÑлужить доверие за пределами Ñвоего отдела или команды можно будучи отзывчивым и информативным. Иногда кто-гибудь попробует злоупотребить Ñтим доверием и попроÑит о необоÑнованных уÑтупках. Ðе бойтеÑÑŒ Ñтого, проÑто объÑÑните, чем вам придетÑÑ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ñ‚ÑŒ, чтобы выполнить проÑьбу. + +Ðе притворÑйтеÑÑŒ, что знаете то, что вы на Ñамом деле не знаете. С людьми, которые не ÑвлÑÑŽÑ‚ÑÑ Ñ‡Ð°Ñтью вашей команды, вам придетÑÑ Ð½Ð°ÑƒÑ‡Ð¸Ñ‚ÑŒÑÑ Ð¾Ñ‚Ð´ÐµÐ»Ñть "не могу ответить на Ñто Ñходу" и "не могу Ñтого знать в принципе". + +Следующее: [Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md new file mode 100644 index 0000000..4ea766e --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -0,0 +1,15 @@ +# Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть +[//]: # (Version:1.0.0) +Ð’Ñ‹ можете быть хорошим программиÑтом, не Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ ÐºÐ¾Ð»Ð»ÐµÐ´Ð¶, но вам не Ñтать продвинытум разработчиком без базовых знаний теории ÑложноÑти вычиÑлений. Вам необÑзательно знать нотацию "большое О", но Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что вам Ñледует понимать разницу между "конÑтантным временем вычиÑлениÑ", "n log n" и "n в квадрате". Может быть, вы Ñможете интуитивно ÑбаланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть без Ñтого пониманиÑ, но еÑли его нет, у Ð²Ð°Ñ Ð½Ðµ будет прочной базы Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами. + +При проектировании или изучении алгоритма важно понимать, что Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° иногда предÑтавлÑет Ñобой функцию от размера входных данных. Когда Ñто так, мы можем Ñказать, что худшее/ожидаемое/лучшее Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение Ñтого алгоритма Ñто "n log n", еÑли оно пропорционально размеру ($n$), умноженному на логарифм размера данных. Это обозначение и ÑпоÑоб Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ применÑть и к памÑти, занимаемой Ñтруктурой данных. + +Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений так же прекраÑна и глубока, как и физика, и ее Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть здорово помогает в работе. + +Ð’Ñ€ÐµÐ¼Ñ (циклы процеÑÑора) и памÑть могут ÑбаланÑированы одно за Ñчет другого. Это отличный пример того, что программирование - Ñто компромиÑÑ. Ðе вÑегда оно ÑиÑтематично. Ð’ общем виде, ÑÑŠÑкономить памÑть можно за Ñчет большего чиÑла вычиÑлений. Обратно, чиÑло вычиÑлений можно уменьшить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кÑшированиÑ, то еÑть, ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти, хранÑщей копии данных. Иногда Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ уменьшить, ÑохранÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ информации в Ñтруктуре данных. Как правило, Ñто требует небольшого объема памÑти, но может уÑложнить алгоритм. + +Улучшение компромиÑÑа между объемом памÑти и ÑкороÑтью вычиÑлений чаÑто может привеÑти к кардинальному Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из Ñтих параметров. Перед тем, как начать работу, ÑпроÑите ÑебÑ, дейÑтвительно ли то, что вы ÑобираетеÑÑŒ улучшить, нуждаетÑÑ Ð² Ñтом. Работать Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð°Ð¼Ð¸ интереÑно, но не позволÑйте Ñтому затмить факт, что улучшение того, что не ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹, не принеÑет заметной разницы в программу и увеличит нагрузку на теÑтирование. + +Ð’ Ñовременных компьютерах памÑть кажетÑÑ Ð´ÐµÑˆÐµÐ²Ñ‹Ð¼ реÑурÑом, потому что в отличие от процеÑÑорного времени вы не видите, как она иÑпользуетÑÑ, пока не упретеÑÑŒ в потолок. Ðо тогда Ñбой может оказатьÑÑ ÐºÐ°Ñ‚Ð°ÑтрофичеÑким. СущеÑтвуют и другие Ñкрытые затраты на иÑпользование памÑти, такие как ваш Ñффект на Ñторонние программы, который должен быть поÑтоÑнным, и Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° ее выделение и оÑвобождение. Обдумайте Ñти моменты перед тем, как вы пожертвуете памÑтью ради уÑкорениÑ. + +Следующее: [Как проводить ÑтреÑÑ-теÑтирование](04-How-to-Stress-Test.md) diff --git a/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md new file mode 100644 index 0000000..2834f05 --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -0,0 +1,13 @@ +# Как проводить ÑтреÑÑ-теÑтирование +[//]: # (Version:1.0.0) +СтреÑÑ-теÑтирование Ñто интереÑно. Сначала кажетÑÑ, что его цель - выÑÑнить, будет ли ÑиÑтема работать под нагрузкой. Ð’ дейÑтвительноÑти, обычно ÑиÑтема работает под нагрузкой, но начинает отказывать в каких-то меÑтах, еÑли нагрузка доÑтаточно большаÑ. Я называю Ñто "уперетьÑÑ Ð² потолок". Могут быть иÑлючениÑ, но почти вÑегда Ñто "потолок". СмыÑл ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² том, чтобы выÑÑнить, где находитÑÑ Ñтот потолок Ð´Ð»Ñ ÑиÑтемы, а потом понÑть, как его отодвинуть. + +План Ð´Ð»Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñледует разрабатывать на ранних ÑтадиÑÑ… проекта, так как чаÑто он помогает проÑÑнить в точноÑти, что именно ожидаетÑÑ Ð¾Ñ‚ ÑиÑтемы. Две Ñекунды на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²ÐµÐ±-Ñтраницы Ñто позорный провал или оглушительный уÑпех? ДоÑтаточно ли 500 одновременных пользователей? Ответы завиÑÑÑ‚ от ÑиÑтемы, но перед началом ее Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ… уже Ñтоит знать. Чтобы быть полезным, ÑтреÑÑ-теÑтирование должно доÑтаточно хорошо имитировать дейÑтвительную нагрузку. Ð’Ñ€Ñд ли возможно Ñмоделировать 500 одновременных хаотичных и непредÑказуемых пользователей, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñть ÑиÑтемы, но как минимум можно Ñоздать 500 ÑимулÑций и попытатьÑÑ Ñмоделировать некоторую чаÑть того, что будут делать реальные пользователи. + +Во Ð²Ñ€ÐµÐ¼Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð½Ð¸Ñ‚Ðµ Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ нагрузки и увеличивайте ее по одному параметру ÑиÑтемы, например, по чаÑтоте входных запроÑов или по величине входных данных, пока вы не доÑтигнете потолка ÑиÑтемы. ЕÑли вы доÑтигли его Ñлишком рано, чтобы удовлетворить требованиÑм к ÑиÑтеме, выÑÑните, какой реÑÑƒÑ€Ñ ÑвлÑетÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом в ÑиÑтеме (как правило, Ñильно не хватает чего-то одного). Что Ñто: памÑть, процеÑÑор, операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети или нехватка данных? Теперь выÑÑните, как вы можете отодвинуть потолок. Заметьте, что повышение потолка или увеличение нагрузки, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ÑправлÑетÑÑ ÑиÑтема, может не помочь или даже Ñнизить производительноÑть Ð´Ð»Ñ Ð»ÐµÐ³ÐºÐ¾Ð½Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемы. Обычно производительноÑть под большой нагрузкой важнее производительноÑти под маленькой. + +Возможно, вам придетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ предÑтавление о неÑкольких разных параметрах ÑиÑтемы, чтобы поÑтроить ее мыÑленную модель. ЗдеÑÑŒ не хватит какой-то одной техники. Ðапример, логирование чаÑто дает хорошую картину о реальном времени на иÑполнение команд между Ð´Ð²ÑƒÐ¼Ñ ÑобытиÑми в ÑиÑтеме, но еÑли оно внедрено небрежно, не дает Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¾Ð± иÑпользовании памÑти или даже о размере Ñтруктур данных. Ðналогично, в Ñовременных ÑиÑтемах могут взаимодейÑтвовать неÑколько компьютеров и множеÑтво программных ÑиÑтем. Когда вы упираетеÑÑŒ в потолок (то еÑть производительноÑть нелинейно завиÑит от размера входных данных) Ñти Ñторонние программы могут оказатьÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом. ПредÑтавление о работе Ñтих программ, даже в виде проÑтого Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ процеÑÑоров на вÑех задейÑтвованных машинах, может оказатьÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ полезным. + +Знать потолок ÑиÑтемы важно не только Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы отодвинуть его, но и Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑказуемоÑти, чтобы Ñффективно управлÑть ее разработкой. + +Следующее: [Как баланÑировать краткоÑть и абÑтракцию](05-How-to-Balance-Brevity-and-Abstraction.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md new file mode 100644 index 0000000..b0ce41e --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -0,0 +1,10 @@ +# Как баланÑировать краткоÑть и абÑтракцию +[//]: # (Version:1.0.0) +ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто ключ к программированию. Следует тщательно выбирать, наÑколько абÑтрактны вы хотите быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракции, чмъем в дейÑтвительноÑти необходимо. Один из признаков Ñтого: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат толко Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода должны быть Ñоизмерена Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаюмую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и можно предположить, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которые чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. +Я очень рекомендую Ñтатью ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). + +СущеÑтвует Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð´Ð¾Ð³Ð¼Ð°, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ полезными техниками как *Ñокрытие информации* и *объектно-ориентированное программирование*, применение которых иногда заходит Ñлишком далеко. Они позволÑÑŽÑ‚ пиÑать код более абÑтрактно и предвидеть возможные в нем изменениÑ. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что не Ñледует пиÑать Ñлишком много ÑпекулÑтивного кода. Ðапример, принÑто прÑтать целочиÑленные переменные в объектах за публичными методами клаÑÑа, так что Ñама Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ видна, а доÑтупен только Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº ней. Это позволÑет изменить реализацию Ñтой переменной без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ³Ð¾ Ñти методы кода. Возможно, Ñто подходит Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ библиотек, где необходимо предоÑтавить уÑтойчивый API. Ðо Ñ Ð½Ðµ думаю, что преимущеÑтва Ñтого подхода перевешивают избыток кода, потраченного на него, оÑобенно, когда Ð¼Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° владеет вызывающим кодом и может перепиÑать как его, так и вызываемый код. Четыре или пÑть Ñтрок кода Ñто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ†ÐµÐ½Ð° за такое умозрительное преимущеÑтво. + +ПортируемоÑть Ñоздает похожую проблему. Должен ли код быть портируемым на другой компьютер, компилÑтор, ÑиÑтему или платформу, или его Ñтоит проÑто перепиÑать под них? Я думаю, что непортируемый, короткий и легко перепиÑываемый код лучше, чем длинный портируемый. ОтноÑительно легко и обычно Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¸Ð´ÐµÑ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð¸Ñ‚ÑŒ непортируемый код в определенных облаÑÑ‚ÑÑ…, таких как клаÑÑ, который выполнÑет запроÑÑ‹ к базе данных, Ñпецифичные Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ СУБД. + +Следующее: [Как оÑваивать новые навыки](06-How-to-Learn-New-Skills.md) diff --git a/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md new file mode 100644 index 0000000..70d096f --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -0,0 +1,13 @@ +# Как оÑваивать новые навыки +[//]: # (Version:1.0.0) +Учить новое, оÑобенно что-то нетехничеÑкое, Ñто величайшее удовольÑтвие из вÑех. БольшинтÑво компаний имели бы гораздо более выÑокую мораль в коллективе, еÑли бы они понимали, как учеба мотивирует программиÑтов. + +Люди учатÑÑ Ð½Ð° практике. Чтение книг и курÑÑ‹ полезны, но Ñможете ли вы уважать программиÑта, который никогда не пиÑал программы? Чтобы чему-нибудь научитьÑÑ, вы должны поÑтавить ÑÐµÐ±Ñ Ð² положение, когда вы можете применÑть Ñтот навык. Ð˜Ð·ÑƒÑ‡Ð°Ñ Ð½Ð¾Ð²Ñ‹Ð¹ Ñзык программированиÑ, попытайтеÑÑŒ выполнить на нем маленький проект перед тем, как вам придетÑÑ Ð¸Ñпользовать Ñтот Ñзык в большом проекте. ОÑÐ²Ð°Ð¸Ð²Ð°Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ проектом по разработке программного обеÑпечениÑ, Ñначала попробуйте управлÑть небольшим проектом. + +Хороший учитель не заменит практику, но гораздо лучше книги. Что вы можете предложить потенциальному учителю в обмен на его знаниÑ? Как минимум, вы можете пообещать уÑердно учитьÑÑ, так что Ð²Ñ€ÐµÐ¼Ñ Ñтого человека не будет потрачено впуÑтую. + +ПоÑтарайтеÑÑŒ уговорить Ñвоего боÑÑа оплатить вам формальное обучение, но помните, что чаще вÑего гораздо полезнее потратить то же Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° игру Ñ Ñ‚ÐµÐ¼ навыокм, который вы хотите оÑвоить. Однако, в нашем неÑовершенном мире легче попроÑить об обучение, чем о времени на вольную игру, хоть множеÑтво обучений ÑводÑÑ‚ÑÑ Ðº Ñну на лекциÑÑ… в ожидании обеда. + +ЕÑли вы руководитель, поÑтарайтеÑÑŒ понÑть, как учатÑÑ Ð²Ð°ÑˆÐ¸ подчиненные и помогите им, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°Ñ Ð¸Ð¼ такие проекты и заданиÑ, которые им по плечу и одновременно позволÑÑŽÑ‚ им развить навыки, в которых они заинтереÑованы. Ðе забывайте, что Ñамые важные навыки программиÑта вовÑе не техничеÑкие. Дайте Ñвоей команде Ð²Ñ€ÐµÐ¼Ñ ÑкÑпериментировать и практиковатьÑÑ Ð² ÑмелоÑти, чеÑтноÑти и взаимодейÑтвии. + +Следующее: [ÐаучитеÑÑŒ печатать вÑлепую](07-Learn-to-Type.md) diff --git a/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md new file mode 100644 index 0000000..58a39df --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -0,0 +1,5 @@ +# ÐаучитеÑÑŒ печатать вÑлепую +[//]: # (Version:1.0.0) +ÐаучитеÑÑŒ печатать вÑлепую. Это навык Ñреднего уровнÑ, потому что пиÑать код наÑтолько Ñложно, что ÑкороÑть его набора неважна и неÑильно влиÑет на затраченное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку, наÑколько бы хорошим программиÑтом вы не ÑвлÑлиÑÑŒ. Однако, к тому времени, как вы Ñтанете программиÑтом Ñреднего уровнÑ, Ñкорее вÑего вы потратите кучу времени на пиÑьменное общение Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и вÑеми оÑтальными. Этот навык - Ð·Ð°Ð±Ð°Ð²Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° вашей целеуÑтемленноÑти. Он требует отдельного времени, которое не так забавно потратить именно на него. Легенда глаÑит, что когда Майкл Тименн работал в Microelectronics and Computer Technology Corporation, его коллеги ÑобиралиÑÑŒ у двери его кабинета поÑлушать гул, производимый им при нажатии клавиш. Они были наÑтолько быÑтры, что были практичеÑки неразличимы. + +Следующее: [Как выполнÑть интеграционное теÑтирование](08-How-to-Do-Integration-Testing.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md new file mode 100644 index 0000000..cc2e778 --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -0,0 +1,7 @@ +# Как выполнÑть интеграционное теÑтирование +[//]: # (Version:1.0.0) +Интеграционное теÑтирование Ñто ÑовмеÑтное теÑтирование отдельных компонентов, которые прошли до Ñтого юнит-теÑтирование. Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð³Ð¾ обходитÑÑ, и Ñто выÑÑнÑетÑÑ Ð¿Ñ€Ð¸ теÑтировании. Ð’Ñ‹ должны включать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° интеграционное теÑтирование в Ñвои оценки затрат и в раÑпиÑание. + +Ð’ идеале вы должны организовать проект таким образом, чтобы в конце не было Ñтапа, где Ñвным образом должна проиÑходить интеграциÑ. Гораздо лучше поÑтепенно интегрировать компоненты по мере их Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð² ходе проекта. ЕÑли Ñто неизбежно, тщательно оцените временные затраты на такой Ñтап. + +Следующее: [Communication Languages](09-Communication-Languages.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md new file mode 100644 index 0000000..a0a4c37 --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -0,0 +1,11 @@ +# Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем +[//]: # (Version:1.0.0) +СущеÑтвуют Ñзыки, то еÑть формально определенные ÑинтакÑичеÑкие ÑиÑтемы, которые ÑвлÑÑŽÑ‚ÑÑ Ð½Ðµ Ñзыками программированиÑ, а Ñзыками взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем, Ñоздаными Ñпециально Ð´Ð»Ñ Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Ñтандартизацию. Ð’ 2003 году Ñамые важные из них Ñто UML, XML и SQL. Ð’Ñ‹ должны быть знакомы Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ из них, чтобы уметь иÑпользовать их и понимать, когда их Ñледует применÑть. + +UML - Ñто Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñхем и диаграмм, опиÑывающих архитектуру. Ее прелеÑть в том, что она одновременно и визуальна, и формальна, и ÑпоÑобна передать огромное количеÑтво информации, еÑли автор и его Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽÑ‚ UML. Вам Ñледует знать UML, потому что иногда архитектуру опиÑывают Ñ ÐµÐ³Ð¾ помощью. СущеÑтвуют очень полезные инÑтрументы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÑÑионально выглÑдÑщих Ñхем UML. Во многих ÑлучаÑÑ…, UML Ñлишком ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема, и Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° находил, что Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… Ñхем проще иÑпользовать Ñтрелки и прÑмоугольники. Ðо Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что изучение UML полезно так же, как и изучение латыни. + +XML - Ñто Ñтандарт Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… Ñтандартов. Это не решение проблем передачи данных, Ñ…Ð¾Ñ‚Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° вы увидите, что XML предÑтавлÑÑŽÑ‚ именно так. Ðо Ñкорее, Ñто ÑредÑтво автоматизации Ñамой Ñкучной работы по обмену данных, а именно Ñтруктурное предÑтавление данных в линейной поÑледовательноÑти и обратный ÑинтакÑичеÑкий анализ Ñтого поÑледовательноÑти в Ñтруктуру данных. UML предоÑтавлÑет неплохую проверку типов и правильноÑти данных, Ñ…Ð¾Ñ‚Ñ Ñто лишь Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть того, что вам понадобитÑÑ Ð² работе. + +SQL - Ñто очень мощный и богатый Ñзык запроÑов и Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, и он не ÑовÑем ÑвлÑетÑÑ Ñзыком программированиÑ. У него еÑть много вариаций, в оÑновном завиÑимых от конкретного продукта, который его иÑпользует. Они не так важны как Ñтандартное Ñдро Ñзыка. SQL - Ñто оÑнова вÑех релÑционных баз данных. Ð’Ñ‹ можете не работать в облаÑти, где требуетÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ такого типа баз данных, но вам вÑе равно Ñледует иметь базовое предÑтавление о них и о ÑинтакÑиÑе и назначении SQL. + +Следующее: [Стандартные технологии](10-Heavy-Tools.md) diff --git a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md new file mode 100644 index 0000000..93d3696 --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -0,0 +1,14 @@ +# Стандартные технологии + [//]: # (Version:1.0.0) +По мере того, как развиваютÑÑ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸, разработка программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð¸Ñ‚ к иÑпользованию Ñтандартизированных широко раÑпроÑтраненных и незатратных продуктов. Это технологии могут взÑть на ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑŒÑˆÑƒÑŽ нагрузку в разработке программного обеÑпечениÑ, но одновременно могут показатьÑÑ Ð¿ÑƒÐ³Ð°ÑŽÑ‰Ðµ непонÑтными и требовать много времени на оÑвоение. ПрограммиÑÑ‚ Ñреднего ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ знать, как управлÑть Ñтими технологиÑми и когда Ñледует их иÑпользовать. + +Ðа мой взглÑд некоторыми примерами таких технологий ÑвлÑÑŽÑ‚ÑÑ: + +- РелÑционные базы данных +- ПолнотекÑтовые поиÑковые ÑиÑтемы +- МатематичеÑкие бибилиотеки +- OpenGL +- XML-парÑеры +- Элеткронные таблицы + +Следующее: [Как анализировать данные](11-How-to-analyze-data.md) diff --git a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md new file mode 100644 index 0000000..85e3cef --- /dev/null +++ b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -0,0 +1,11 @@ +# Как анализировать данные +[//]: # (Version:1.0.0) +Ðнализ данных - Ñто ранний Ñтап разработки, когда вы изучаете предметную облаÑть и определÑете Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ… в программное обеÑпечение. Это формальное определение может заÑтавить подумать, что анализ данных Ñто деÑтельноÑть, которую Ñтоит оÑтавить на ÑиÑтемных аналитиков. РпрограммиÑты должны ÑоÑредоточитьÑÑ Ð½Ð° напиÑании кода, который те Ñпроектируют. ЕÑли мы поÑледует Ñтрого парадигме разработки, то возможно, Ñто будет ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¸Ð´ÐµÑ. Опытные программиÑты ÑтановÑÑ‚ÑÑ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, а лучшие архитекторы ÑтановÑÑ‚ÑÑ Ð±Ð¸Ð·Ð½ÐµÑ-аналитиками и отвечают об требованиÑÑ… к данным и выдают программиÑтам четко определенное задание Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°. Ðо Ñто не ÑовÑем так, так как данные Ñто Ñдро любой деÑтельноÑти программиÑтов. Что бы вы не делали в Ñвоей программе, вы либо передаете, либо изменÑете данные. БизнеÑ-аналитик изучает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² широком виде, архитектор в чуть более узком разрезе, так что, когда проблема приходит в вам, кажетÑÑ, что вÑе, что вам надо Ñделать, Ñто применить нужные алгоритмы и начать взаимодейÑтвовать Ñ Ð¸Ð¼ÐµÑŽÑ‰Ð¸Ð¼Ð¸ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. + +Это не так. + +Ðеважно, на каком Ñтапе вы начинаете работать Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, они вÑегда оÑтаютÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой хорошо Ñпроектированного приложениÑ. ЕÑли вы внимательно поÑмотрите, как бизнеÑ-аналитик извлекает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· запроÑов клиентов, то Ñ Ð¿Ð¾Ð¹Ð¼ÐµÑ‚Ðµ, что данные играют фндаментальную роль. Ðналитик Ñоздает так называемые диаграммы потоков данных, где указаны иÑточники данных, и обозначен поток информации. Определив, какие данные будут чаÑтью ÑиÑтемы, архитектор начнет формировать иÑточники данных Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð°Ð· данных, протоколов обмена данными и форматов файлов. ПоÑле Ñтого задачу можно передавать программиÑту. Ðо процеÑÑ Ð½Ð° Ñтом не заканчиваетÑÑ, потому что вы (программиÑÑ‚) даже поÑле подобной тщательной обработки данных должны проанализировать их, чтобы выполнить задачу оптимальным ÑпоÑобом. Ð’ оÑнове вашей работы лежит Ð¸Ð´ÐµÑ ÐиклауÑа Вирта, ÑÐ¾Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑкольких Ñзыков программированиÑ. "Ðлгоритмы + Структуры данных = Программы". Ðлгоритм никогда не ÑущеÑтвует отдельно, Ð´ÐµÐ»Ð°Ñ Ñ‡Ñ‚Ð¾-то Ñам по Ñебе. Каждый алгоритм обÑзательно взаимодейÑтвует как минимум Ñ ÐºÐ°ÐºÐ¾Ð¹-то чаÑтью данных. + +Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Преположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знаением нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтокнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. + +Следующее: [Командные навыки. Как управлÑть временем разработки](../Team-Skills/01-How-to-Manage-Development-Time.md) \ No newline at end of file diff --git a/ru/2-Intermediate/README.md b/ru/2-Intermediate/README.md new file mode 100644 index 0000000..3728f8b --- /dev/null +++ b/ru/2-Intermediate/README.md @@ -0,0 +1,29 @@ +# 2. Разработчик Ñреднего ÑƒÑ€Ð¾Ð²Ð½Ñ +[//]: # (Version:1.0.0) +- Личные навыки + - [Как ÑохранÑть мотивацию](Personal-Skills/01-How-to-Stay-Motivated.md) + - [Как заÑлужить доверие](Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть](Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [Как проводить ÑтреÑÑ-теÑтирование](Personal-Skills/04-How-to-Stress-Test.md) + - [Как баланÑировать краткоÑть и абÑтракцию](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [Как оÑваивать новые навыки](Personal-Skills/06-How-to-Learn-New-Skills.md) + - [ÐаучитеÑÑŒ печатать вÑлепую](Personal-Skills/07-Learn-to-Type.md) + - [Как выполнÑть интеграционное теÑтирование](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем](Personal-Skills/09-Communication-Languages.md) + - [Стандартные технологии](Personal-Skills/10-Heavy-Tools.md) + - [Как анализировать данные](Personal-Skills/11-How-to-analyze-data.md) +- Командные навыки + - [Как управлÑть временем разработки](Team-Skills/01-How-to-Manage-Development-Time.md) + - [Как управлÑть риÑками, ÑвÑзанными Ñо Ñторонним программным обеÑпечением](Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [Как руководить конÑультантами](Team-Skills/03-How-to-Manage-Consultants.md) + - [Как ÑоизмерÑть количеÑтво общениÑ](Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [Как чеÑтно выражать неÑоглаÑие](Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) +- ЭкÑпертиза + - [Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [Как управлÑть завиÑимоÑÑ‚Ñми](Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [Как оценивать Ñтороннее программное обеÑпечение](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [Как решать: покупать программу или пиÑать Ñвою](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [Как раÑти профеÑÑионально](Judgment/05-How-to-Grow-zProfessionally.md) + - [Как проводить ÑобеÑедованиÑ](Judgment/06-How-to-Evaluate-Interviewees.md) + - [Как понÑть, когда применÑть выÑокие технологии](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸](Judgment/08-How-to-Talk-to-Non-Engineers.md) diff --git a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md new file mode 100644 index 0000000..591bd7f --- /dev/null +++ b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -0,0 +1,11 @@ +# Как управлÑть временем разработки +[//]: # (Version:1.0.0) +Чтобы управлÑть временем разработки, поддерживайте четкий и актуальный проектный план. Проектный план - Ñто оценка временных затрат, раÑпиÑание, набор промежуточных Ñтапов Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑÑа и раÑпределение времени вашей команды на каждое задание. Он также должен включать другие вещи, которые важно помнить, такие как вÑтречи Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ теÑтированиÑ, подготовка документации, заказ рабочего оборудованиÑ. ЕÑли вы работаете в команде, проектный план должен быть ÑоглаÑованным решением, как на Ñтарте проекта, там и по его ходу. + +Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком опдробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñто Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ñчет конкретных людей. План и ваша ÑкÑпертиза позволÑть вам понÑть, Ñледует ли передать чаÑть задач одного члена команду другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте его, чтобы поддерживать емкоÑть и актуальноÑть задач. + +ЕÑли вы не уÑпеваете выполнить Ñтап, Ñледует немедленно предпринÑть что-то, как минимум проинформировать боÑÑа о том, что запланированное завершение проекта ÑмеÑтитÑÑ Ð½Ð° некоторое времÑ. Ðачать Ñ Ñ‚Ð¾Ð³Ð¾, что оценка и раÑпиÑание никогда не будут идеальны, но они дают иллюзию, что вы Ñможете наверÑтать пропущенные дни в конце проекта. Может быть. Ðо так же вероÑтно, что вы недооценили Ñту чаÑть проекта, как и то, что вы ее переоценили. Так что запланированное завершение проекта уже ÑмеÑтилоÑÑŒ, Ð½Ñ€Ð°Ð²Ð¸Ñ‚Ñ Ð²Ð°Ð¼ Ñто или нет. + +УбедитеÑÑŒ, что ваш план включает Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° внутренние ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹, демоÑтрации проекта, документацию, периодичеÑкие задачи по раÑпиÑанию, интеграционное теÑтирование, общение Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼Ð¸ командами, больничные, отпуÑка, поддержку ÑущеÑтвующих продуктов и Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸. Проектный план может предÑтавить Ñторонним людÑм или боÑÑу, чтобы они понÑли, чем занÑта команда. По Ñтой причине он должен быть краток и актуален. + +Следующее: [Как управлÑть риÑками, ÑвÑзанными Ñо Ñторонним программным обеÑпечением](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md new file mode 100644 index 0000000..7296524 --- /dev/null +++ b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -0,0 +1,11 @@ +# Как управлÑть риÑками, ÑвÑзанными Ñо Ñторонним программным обеÑпечением +[//]: # (Version:1.0.0) +Проект чаÑто завиÑит от Ñтороннего программного обеÑпечениÑ, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ контролÑ. С Ñтим ÑвÑзаны большие риÑки, которые должны быть понÑтны каждому, кто работает в проекте. + +Ðикогда не возлагайте никаких надежд на Ñкобы обещанное, но пока еще недоÑтупное программное обеÑпечение. Это вернейший ÑпоÑоб вылететь в трубу. Ðеразумно проÑто ÑкептичеÑки отноÑитьÑÑ Ðº обещанию Ñторонней компании выпуÑтить определенны продукт к определенной дате. Гораздо разумнее полноÑтью проигнорировать его и забыть о его ÑущеÑтвовании. Ðикогда не запиÑывайте такие надежды в документы вашей компании. + +ЕÑли Ñтороннее программное обеÑпечение вÑе же ÑущеÑтвует, оно по-прежнему неÑет Ñ Ñобой риÑки, но по крайней мере Ñти риÑки можно преодолеть. ЕÑли вы предполагаете иÑпользование Ñторонних программ, уже на ранней Ñтадии проекта Ñледует поÑвÑтить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° их оценку. Ðикому не понравитÑÑ ÑƒÑлышать, что потребуетÑÑ Ð´Ð²Ðµ недели или два меÑÑца на оценку пригодноÑти вÑех трех Ñторонних программ, но Ñто то, что должно быть Ñделано как можно Ñкорее. СтоимоÑть интеграции Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ без надлежащей оценки задейÑтвованных Ñторонних программ. + +Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно и главным образом опираетÑÑ Ð½Ð° ÑкÑпертов. Ð’Ñ‹ можете ÑÑŠÑконоить кучу времени, еÑли Ñможете найти ÑкÑпертов. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. + +Следующее: [Как руководить конÑультантами](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md new file mode 100644 index 0000000..f70d33e --- /dev/null +++ b/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -0,0 +1,9 @@ +# Как руководить конÑультантами +[//]: # (Version:1.0.0) +ИÑпользуйте конÑультантов, но не полагайтеÑÑŒ на них. Эти замечательные людии заÑлуживают вÑÑчеÑкого уважениÑ. ПоÑкольку они наблюдали множеÑтво проектов, они зачаÑтю знают больше о ÑпецифичеÑких технологиÑÑ… или даже техниках программированиÑ, чем вы. Лучший ÑпоÑоб иÑпользовать их как штатных преподавателей, которые могут научить на ÑобÑтвенном примере. + +Однако, обычно конÑультанты не могут Ñтать чаÑтью команды в том ÑмыÑле, что и обычные Ñотрудники, Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ потому, что у Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ не хватить времени изучить их Ñильные и Ñлабые Ñтороны. Их финанÑовые обÑзательÑтва гораздо ниже. Они могут легко уйти. Они меньше выигрывают, еÑли ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð² целом процветает. Ðекоторые из них будут хороши, некоторые Ñредними, некоторые плохими конÑультантами. ПоÑкольку ваш выбор конÑультантов будет не так тщателен, как подбор Ñотрудников, чаще вы будете вÑтречать плохих. + +ЕÑли конÑультанты пишут код, то вы должны тщательно ревьюить его по мере работы. ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ проект до конца, риÑÐºÑƒÑ Ð¾Ñтавить большой непроверенный блок кода. Это отноÑитÑÑ ÐºÐ¾ вÑем членам команды, но обычно вы их знаете лучше, чем конÑультантов. + +Следующее: [Как ÑоизмерÑть количеÑтво общениÑ](04-How-to-Communicate-the-Right-Amount.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md new file mode 100644 index 0000000..00d4402 --- /dev/null +++ b/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -0,0 +1,7 @@ +# Как ÑоизмерÑть количеÑтво Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ +[//]: # (Version:1.0.0) +Тщательно ÑоизмерÑйте ÑтоимоÑть ÑовещаниÑ. Оно равно *его длительноÑти, умноженной на чиÑлу учаÑтников*. Иногда ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹, но небольшие ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ Ð»ÑƒÑ‡ÑˆÐµ. КачеÑтво Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° небольших ÑовещаниÑÑ… лучше, и на них уходит меньше времени. ЕÑли на Ñовещании кто-нибудь Ñкучает, то Ñто знак, что Ñледующее Ñобрание должно быть меньше. + +Ðеобходимо Ñледует вÑе возможное, чтобы поощрÑть неформальное общение. Во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±ÐµÐ´Ð° Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ делаетÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ полезной работы, чем в любое другое времÑ. Жаль, что многие компании не признают и не поддерживают Ñтот факт. + +Следующее: [Как чеÑтно выражать неÑоглаÑие](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md new file mode 100644 index 0000000..6c3d489 --- /dev/null +++ b/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -0,0 +1,11 @@ +# Как чеÑтно выражать неÑоглаÑие +[//]: # (Version:1.0.0) +ÐеÑоглаÑие Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть принÑть хорошее решение, но егоÑледует выражать аккуратно. ÐадеюÑÑŒ, обычно вы Ñпокойно выражаете Ñвою точку зрениÑ, Ð²Ð°Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñлушают, а затем принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. Ð’ Ñтом Ñлучае больше нечего Ñказать, и вам только оÑтаетÑÑ Ð¿Ñ€Ð¸Ð½Ñть решение, даже еÑли вы Ñ Ð½Ð¸Ð¼ неÑоглаÑны. ЕÑли вы можете Ñледовать решению неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñвое неÑоглаÑие, Ñкажите об Ñтом. Это продемоÑтрирует, что вы незавиÑимы и не поддакиваете проÑто так, но одновременно уважаете принÑтое решение и вÑÑŽ команду. + +Иногда решение, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы неÑоглаÑны, принимаетÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ñƒ, что те, кто его принимает, не имели возможноÑти полноÑтью оценить ваше мнение. Ð’ Ñтом Ñлучае, иÑÑ…Ð¾Ð´Ñ Ð¸Ð· пользы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или команды вам Ñтоит прикинуть, поднимать ли вопроÑ. ЕÑли Ñто Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð½Ð° ваш взглÑд ошибка, то, возможно, не Ñтоит переÑматривать решение. ЕÑли же речь идет о Ñерьезной ошибке, то Ñтоит выдвинуть возражениÑ. + +Обычно, Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñто не проблема. Ð’ некоторых ÑтреÑÑовых ÑитуациÑÑ… и Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ типами личноÑтей они могут быть принÑты на личный Ñчет. Ðапример, некоторые очень хорошие программиÑты недоÑтаточно уверены в Ñебе, чтобы возразить, даже еÑли у них на Ñто еÑть веÑкие причины. Ð’ худшем Ñлучае, тот, кто принимает Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½ÐµÑƒÐ²ÐµÑ€ÐµÐ½ в Ñебе и принимает Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ðº вызов Ñвоему авторитету. ЗдеÑÑŒ важно помнить, что в таких обÑтоÑтельÑтвах люди в первую очередь реагируют инÑтинктивно. Вам Ñтоит выÑказать Ñвои Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð»Ð¸Ñ‡Ð½Ð¾ и поÑтаратьÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ, как новые аргументы изменÑÑ‚ оÑнову, на которой принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. + +ÐезавиÑимо от того, будет решение отменено или нет, вы должны помнить, что вы не Ñможете Ñказать "Я же говорил!", поÑкольку альтернативное решение было полноÑтью изучено. + +Следующее: [ЭкÑпертиза. Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md new file mode 100644 index 0000000..c851c12 --- /dev/null +++ b/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -0,0 +1,11 @@ +# Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика +[//]: # (Version:1.0.0) +Давление выхода на рынок - Ñто давление быÑтро выпуÑтить хороший продукт. Это хорошо, поÑкольку отражает финанÑовую дейÑтвительноÑть и до некоторой Ñтепени Ñто полезное давление. Давление графика - Ñто давление выпуÑтить что-то быÑтрее, чем Ñто возможно, и Ñто давление опуÑтошает, оно нездоровое и вÑтречаетÑÑ Ñлишком чаÑто. + +Давление графика ÑущеÑтвует по неÑкольким причинам. Люди, дающие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтам не до конца ценÑÑ‚ нашу рабочую Ñтику и наÑколько здорово быть программиÑтом. Возможно, поÑкольку они проецируют ÑобÑтвенное поведение на наÑ, они ожидают, что проÑьба Ñделать задачу быÑтрее заÑтавит Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ уÑерднее. Возможно, Ñто так, но Ñффект от такой проÑьбы очень мал, а ущерб велик. Вдобавок, они не понимают, что в дейÑтвительноÑти значит разработать программное обеÑпечение. Они не могут Ñтого понÑть, не могут разработать ÑиÑтему ÑамоÑтоÑтельно, поÑтому единÑтвенное, что им оÑтаетÑÑ, Ñто наблюдать за давлением выхода на рынок и подталкивать программиÑтов. + +Лучшее, что можно Ñделать Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика, Ñто превратить его в давление выхода на рынок. Ð”Ð»Ñ Ñтого надо дать четкое предÑтавление о ÑвÑзи между имеющимиÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ и продуктом. Лучший ÑпоÑоб Ñто дать чеÑтную, детальную и, Ñамое главное, понÑтную оценку вÑех трудозатрат. Это дает дополнительное преимущеÑтво в виде возможноÑти принимать правильные управленчеÑкие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ñчет возможных компромиÑÑов в функциональноÑти. + +ÐšÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ð¼Ñ‹Ñль, которую должна проÑÑнить оценка, заключаетÑÑ Ð² том, что работа очень похожа на неÑжимаемую жидкоÑть. Ð’Ñ‹ не можете вмеÑтить в промежуток времени больше работы, так как не можете вмеÑтить в контейнер больше воды, чем его объем. Ð’ некотором ÑмыÑле, программиÑÑ‚ должен не говорить "Ðет", а Ñпрашивать в ответ "Чем вы готовы пожертвовать, чтобы Ñта работа была Ñделана?". Эффект от ÑоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ‚ÐºÐ¸Ñ… планов и оценок заключаетÑÑ Ð² повышении ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸Ñ Ðº программиÑтам. Именно так ведут ÑÐµÐ±Ñ Ð¿Ñ€Ð¾Ñ„ÐµÑÑионалы. УÑÐµÑ€Ð´Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° программиÑтов Ñтанет видна, и нереалиÑтичный график Ñтанет очевиден Ð´Ð»Ñ Ð²Ñех. ПрограммиÑтов Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ð²ÐµÑти. ÐереалиÑтичный график Ñто неуважение к команде, он Ñильно деморализует людей. ЭкÑтремальное программирование раÑширÑет Ñту идею и ÑтроитÑÑ Ð²Ð¾ÐºÑ€ÑƒÐ³ нее. Я надеюÑÑŒ, что каждому из читателей поÑчаÑтливитÑÑ Ð¸Ñпользовать его в работе. + +Следующее: [Как понÑть пользователÑ](02-How-to-Understand-the-User.md) \ No newline at end of file diff --git a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md new file mode 100644 index 0000000..0fc20d6 --- /dev/null +++ b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -0,0 +1,17 @@ +# Как понÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +[//]: # (Version:1.0.0) +Ваша обÑзанноÑть - Ñто понÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ помочь Ñто Ñделать вашему боÑÑу. ПоÑкольку пользователи непоÑредÑтвенно не вовлечены в разработку вашего продукта, они ведут ÑÐµÐ±Ñ Ñлегка иначе: + +- Обычно пользователи выноÑÑÑ‚ короткие ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ +- У пользователей еÑть ÑÐ²Ð¾Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°, они будут Ñкорее думать о небольших доработках в вашем продукте, чем о больших улучшениÑÑ… +- Мнение одного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ может предÑтавлÑть общее мнение вÑех пользователей вашего продукта + +Ваша обÑзанноÑть - дать пользователÑм не то, что они говорÑÑ‚, что хотÑÑ‚, а то, что они хотÑÑ‚ в деÑтвительноÑти. Однако, лучше вÑего Ñто Ñформулировать Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… пользователей и получить от них ответ, что ваше предложение дейÑтвительно отвечает их реальных желаниÑм. Ð¥Ð¾Ñ‚Ñ Ñƒ пользователей может не хватит полного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°. Ваша уверенноÑть в ÑобÑтвенных идеÑÑ… на Ñтот Ñчет должно варьироватьÑÑ. Следует одинаково опаÑатьÑÑ ÐºÐ°Ðº ÑамоуверенноÑти, так и ложной ÑкромноÑти, когда речь идет о нуждах вашего пользователÑ. ПрограммиÑты нацелены на проектирование и Ñоздание. ИÑÑледователи рынка нацелены на выÑвление нужд потребителей. Эти два типа людей или два типа Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ñ Ð² одном человеке, гармонично Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ð² ÑвÑзке, дают наилучший ÑˆÐ°Ð½Ñ Ñформировать правильное предÑтавление. + +Чем больше времени вы проведете Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми, тем лучше вы Ñможете понÑть, что будет лучшим Ð´Ð»Ñ Ð½Ð¸Ñ…. Вам Ñтоит проверÑть Ñвои идеи на пользователÑÑ… так чаÑто, наÑколько Ñто вообще возможно. Вам Ñтоит обедать Ñ Ð½Ð¸Ð¼Ð¸, еÑли Ñто возможно. + +Гай КаваÑаки [Rules] подчеркивает важноÑть *наблюдениÑ* того, чем занÑты ваши пользователи, дополнительно к выÑлушиванию их. + +Я думаю, что у подрÑдчиков и конÑультантов чаÑто возникают большие проблемы Ñ Ñ‚ÐµÐ¼, чтобы их клиенты проÑÑнили в Ñвоем Ñознаннии, что они хотÑÑ‚ в дейÑтвительноÑти. ЕÑли вы намерены быть конÑультантом, Ñ Ð±Ñ‹ предложил вам выбирать клиентов по четкоÑти их мыÑлей и по кошельку. + +Следующее: [Как получить повышение](03-How-to-Get-a-Promotion.md) \ No newline at end of file diff --git a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md new file mode 100644 index 0000000..b557ea9 --- /dev/null +++ b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -0,0 +1,13 @@ +# Как получить повышение +[//]: # (Version:1.0.0) +Чтобы получить повышение по роли, Ñначала начните играть Ñту роль. + +Чтобы получить повышение по должноÑти, выÑÑните, что ожидаетÑÑ Ð¾Ñ‚ Ñтой должноÑти, и Ñделайте Ñто. + +Чтобы получить прибавку к зарплате, обговорите Ñто, Ð¸Ð¼ÐµÑ Ð½Ð° руках веÑкие аргументы в Ñвою пользу. + +ЕÑли вы чуÑтвуете, что Ð²Ð°Ñ Ð¾Ð±Ð¾ÑˆÐ»Ð¸ Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸ÐµÐ¼, поговорите Ñ Ð±Ð¾ÑÑом об Ñтом. СпроÑите его в Ñвном виде, что вы должны делать, чтобы получить повышение, и поÑтарайтеÑÑŒ Ñделать Ñто. Это кажетÑÑ Ð±Ð°Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼, но чаÑто ваше предÑтавление того, что вам надо делать, отличаетÑÑ Ð¾Ñ‚ предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Кроме того, такой разговор в некотором ÑмыÑле подтолкнет вашего боÑÑа. + +БольшинÑтво программиÑтов Ñкорее вÑего имеют преувеличенное предÑтавление о ÑобÑтвенных ÑпоÑобноÑÑ‚ÑÑ…, в конце концов, мы вÑе не можем входить в 10% лучших программиÑтов. Однако, Ñ Ð²Ñтречал и людей, которые были очень Ñильно недооценены. ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ, что оценка каждого будет на 100% Ñовпадать Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью, но Ñ Ð´ÑƒÐ¼Ð°ÑŽ, что в общем люди довольно Ñправедливо ÑÐµÐ±Ñ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°ÑŽÑ‚, но Ñ Ð¾Ð´Ð½Ð¾Ð¹ оговоркой: Ð²Ð°Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ñправедливо оценить без видимоÑти вашей работы. Иногда из-за обÑтоÑтельÑтв или личных качеÑтв кто-то будет не наÑтолько Ñильно заметен. Работа из дома или географичеÑки удаленно от вашей команды и боÑÑа делает Ñто оÑобенно трудным. + +Следующее: [Serving Your Team - Как развивать таланты](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/ru/3-Advanced/README.md b/ru/3-Advanced/README.md new file mode 100644 index 0000000..3e314ce --- /dev/null +++ b/ru/3-Advanced/README.md @@ -0,0 +1,22 @@ +# 3. Advanced +[//]: # (Version:1.0.0) +- ТехнологичеÑÐºÐ°Ñ ÑкÑпертиза + - [Как отличить Ñложное от невозможного](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [Как иÑпользовать вÑтроенные Ñзыки](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Выбор Ñзыка программированиÑ](Technical-Judgment/03-Choosing-Languages.md) +- Правильные компромиÑÑÑ‹ + - [Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика](Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [Как понÑть пользователÑ](Compromising-Wisely/02-How-to-Understand-the-User.md) + - [Как получить повышение](Compromising-Wisely/03-How-to-Get-a-Promotion.md) +- Управление командой + - [Как развивать таланты](Serving-Your-Team/01-How-to-Develop-Talent.md) + - [Как выбрать, над чем работать](Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [Как получить наибольшую отдачу от коллег](Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [Как разделÑть задачи](Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [Как раÑпределÑть Ñкучные заданиÑ](Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [Как развивать ÑиÑтему](Serving-Your-Team/07-How-to-Grow-a-System.md) + - [Как качеÑтвенно взаимодейÑтвовать](Serving-Your-Team/08-How-to-Communicate-Well.md) + - [Как Ñообщать неприÑтное](Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [Как ÑправлÑтьÑÑ Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ñкими мифами](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md new file mode 100644 index 0000000..1632ac8 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -0,0 +1,23 @@ +# Как развивать таланты + +Ðицше преувеличил, когда Ñказал [Stronger]: + +> Ð’ÑÑ‘, что Ð¼ÐµÐ½Ñ Ð½Ðµ убивает, делает Ð¼ÐµÐ½Ñ Ñильнее. + +Ваша ÑÐ°Ð¼Ð°Ñ Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть - Ñто ваша команда. Ð’Ñ‹ должны хорошо знать каждого из членов команды. Ð’Ñ‹ должны нагружать Ñвою команду, но не перегружать. Следует разговаривать Ñ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ вашей команды об их нагрузке. ЕÑли они ÑоглаÑны Ñ Ð½ÐµÐ¹, то они будут хорошо мотивированы. Ð’ каждом проекте ÑтарайтеÑÑŒ нагружать их таким образом, чтобы они были ÑоглаÑны Ñо Ñвоей нагрузкой, и одновременно, чтобы она Ñовпадала Ñ Ð²Ð°ÑˆÐ¸Ð¼ ÑобÑтвенным мнением о том, что нужно членам вашей команды. Ðагружайте их не объемом работы, а новым навыком или Ñлегка иной ролью в команде. + +Вам Ñледует позволÑть людÑм (и Ñебе тоже) иногда ошибатьÑÑ. ПредуÑматривайте Ñти неудачи в Ñвоем графике. ЕÑли никогда нет ошибок и неудач, то нет и чувÑтва приключениÑ. ЕÑли иногда нет ошибок и неудач, значит, вы недоÑтаточно ÑтараетеÑÑŒ. Когда кто-то ошибаетÑÑ, вам Ñледует веÑти ÑÐµÐ±Ñ Ñ‚Ð°Ðº вежливо, как вы можете, одновременно не отноÑÑÑÑŒ к человеку так, Ñловно он преуÑпел. + +ПоÑтарайтеÑÑŒ вовлечь и увлечь каждого из членов команды. СпроÑите каждого из них в Ñвном виде, что им нужно Ð´Ð»Ñ Ð¼Ð¾Ñ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸, еÑли они еще не мотивированы. Возможно, вы не Ñможете удовлетворить вÑех, но вÑе же Ñтоит узнать, кто что хочет. + +ÐÐµÐ»ÑŒÐ·Ñ Ð¼Ð¸Ñ€Ð¸Ñ‚ÑŒÑÑ Ñ Ñ‚ÐµÐ¼, кто намеренно не Ñ‚Ñнет Ñвою чаÑть нагрузки из-за низкого морального духа или неудовлетворенноÑти. ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñть отлынивать. Ð’Ñ‹ должны ÑтаратьÑÑ Ð¿Ñ€Ð¸Ð²ÐµÑти таких людей в ÑоÑтоÑние выÑокой мотивации и продуктивноÑти. Пока у Ð²Ð°Ñ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ терпениÑ, подталкивайте их в Ñтом направлении. Когда ваше терпение иÑÑÑкнет, увольнÑйте их. ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñть тому, кто намеренно работает ниже Ñвоего уровнÑ, оÑтаватьÑÑ Ð² команде. Это неÑправедливо по отношению к оÑтальным. + +Ð’Ñ‹Ñкажите публично Ñильным членам Ñвоей команды, что вы думаете, что они Ñильные Ñотрудники. Хвалите публично и критикуйте наедине. + +Более Ñильные члены вашей команды еÑтеÑтвенно будут занÑты более трудными задачами, чем Ñлабые. Это абÑолютно нормально, и пока вÑе в команде работают уÑердно, никто не должен заморачиватьÑÑ Ð¿Ð¾ Ñтому поводу. + +Странный факт, который не отражаетÑÑ Ð½Ð° зарплатах, заключаетÑÑ Ð² том, что хороший программиÑÑ‚ продуктивнее 10 плохих. Это порождает Ñтранную Ñитуацию. ЧаÑто будет ÑлучатьÑÑ, что вы будете быÑтрее продвигатьÑÑ Ð¿Ð¾ проекту, еÑли отÑтранить от работы вÑех Ñлабых членов команды. ЕÑли бы вы так поÑтупали бы, то дейÑтвительно в краткоÑрочной перÑпективе вы добьетеÑÑŒ большего прогреÑÑа. Однако, ваша команда потерÑет неÑколько важных преимущеÑтв, а именно обучение Ñлабых членов команды, раÑпроÑтранение знаний и ÑпоÑобноÑть команды воÑÑтанавливатьÑÑ Ð¿Ñ€Ð¸ потере Ñильных программиÑтов. Сильные программиÑты должны быть ÑниÑходительными в Ñтом плане и ÑтаратьÑÑ Ð²Ð¸Ð´ÐµÑ‚ÑŒ общую картину. + +ЧаÑто вы можете дать более Ñильным членам команды Ñложные, но тщательно разграниченные задачи. + +Следующее: [Как выбрать, над чем работать](02-How-to-Choose-What-to-Work-On.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md new file mode 100644 index 0000000..5b759f7 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -0,0 +1,5 @@ +# Как выбрать, над чем работать + +Ð’Ñ‹ баланÑируете Ñвои ÑобÑтвенные потребноÑти Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ÑÑ‚Ñми команды через выбор того аÑпекта проекта, над которым вы работаете. Вам Ñледует делать то, что у Ð²Ð°Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÐµÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ вÑего, но ищите ÑпоÑобы занÑть ÑÐµÐ±Ñ Ð½Ðµ увеличением работы, а применением новых навыков. ЛидерÑтво и навыки Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ важны, чем техничеÑкие навыки. ЕÑли вы очень Ñильный программиÑÑ‚, берите на ÑÐµÐ±Ñ Ñамые Ñложные или риÑкованные задачи и выполнÑйте их как можно раньше, чтобы Ñнизить риÑки. + +Следующее: [Как получить наибольшую отдачу от коллег](03-How-to-Get-the-Most-From-Your-Teammates.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md new file mode 100644 index 0000000..8f469b2 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -0,0 +1,15 @@ +# Как получить наибольшую отдачу от коллег + +Чтобы получить наибольшую отдачу от коллег, развивайте дружеÑкий командный дух и ÑтарайтеÑÑŒ, чтобы каждый был лично воÑтребован и вовлечен. + +Ð’ развитии командного духа помогают такие банальные штуки как одежда Ñ Ð»Ð¾Ð³Ð¾ компании и корпоративы, но нет ничего лучше личного взаимоуважениÑ. ЕÑли вÑе уважают друг друга, то никто никого не захочет подводить. Командный дух поÑвлÑетÑÑ, когда люди жертвуют ради команды и думают в рамках блага Ð´Ð»Ñ Ð²Ñей команды, а не о личной выгоде. Как лидер, вы не можете требовать большего, чем лично вы делаете в Ñтом отношении. + +Одним из ключевых моментов в руководÑтве команды ÑвлÑетÑÑ Ð´Ð¾Ñтижение конÑенÑуÑа, чтобы вÑе были вовлечены в решение. Иногда Ñто означает позволить Ñвоей команде ошибитьÑÑ. То еÑть, еÑли Ñто не принеÑет большого ущерба проекту, вы должны позволить чаÑти Ñвоей команды поÑтупать по-Ñвоему, оÑновываÑÑÑŒ на конÑенÑуÑе, даже вы абÑолютно уверены, что Ñто неверное решение. Ð’ Ñтом Ñлучае не надо ÑоглашатьÑÑ Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸, проÑто открыто выразите Ñвое неÑоглаÑие и примите общее решение. Ðе говорите обиженно или как будто вы вынуждают к решению, проÑто обозначьте, что вы неÑоглаÑны, но Ð´Ð»Ñ Ð²Ð°Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ команды гораздо важнее. ЧаÑто Ñто заÑтавит команду изменить Ñвое решение. Ð’ Ñтом Ñлучае, не заÑтавлÑйте ее Ñледовать первоначальному плану. + +ЕÑли найдетÑÑ Ñ‡ÐµÐ»Ð¾Ð²ÐµÐº, который не ÑоглаÑитÑÑ Ñ Ð²Ð°Ð¼Ð¸ поÑле того, как вы раÑÑмотрите проблему Ñо вÑех Ñторон, проÑто Ñкажите, что вам надо принÑть решение, и Ñто ваше решение. ЕÑли еÑть возможноÑть проверить, было ли ваше решение ошибочным или позднее окажетÑÑ, что оно ошибочно, измените его, как только Ñможете, и признайте правоту тех, кто был Ñ Ð²Ð°Ð¼Ð¸ неÑоглаÑен. + +СпроÑите Ñвою команду как в группе, так и индивидуально, что по их мнению Ñоздает командный дух и делает команду Ñффективной. + +Хвалите чаÑто, но не много. ОÑобенно хвалите тех, кто не ÑоглаÑен Ñ Ð²Ð°Ð¼Ð¸, еÑли в итоге они заÑлуживают похвалы. Хвалите публично и критикуйте наедине. Одно иÑключение: иногда прогреÑÑ Ð¸Ð»Ð¸ иÑправление ошибки Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÑ‚Ð¸Ñ‚ÑŒ без ÑƒÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð²Ð¸Ð½Ð¾Ð²Ð½Ð¸ÐºÐ° ошибки, в Ñтом Ñлучае хвалите наедине. + +Следующее: [Как разделÑть задачи](04-How-to-Divide-Problems-Up.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md new file mode 100644 index 0000000..1d614f5 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -0,0 +1,9 @@ +# Как разделÑть задачи + +Брать проект по разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ делить его на индивидуальные задачи веÑело. Это Ñтоит делать на ранних Ñтапах. Иногда менеджеры Ñклонны думать, что оценку затрат можно Ñделать без учета людей, которые будут выполнÑть задачи. Ðо Ñто невозможно, так как продуктивноÑть людей очень различаетÑÑ. Человек, обладающий конкретными знаниÑми о компоненте ÑиÑтемы, также поÑтоÑнно менÑетÑÑ, и Ñто влиÑет на производительноÑть. + +Подобно композитору, который учитывает тембр инÑтрумента, играющего партию или тренеру Ñпортивной команды, держащему в уме Ñильные Ñтороны каждого игрока, опытный руководитель не Ñможет отделить разделение проекта на задачи от членов команды, которые будут заниматьÑÑ Ñтими задачами. Это одна из причин, по которой выÑокоÑффективную команду не Ñтоит разбивать на чаÑти. + +Ð’ Ñтом еÑть Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿Ð°ÑноÑть, что люди будут Ñкучать, так как такие команды оÑнованы на Ñильных Ñторонах каждого. Ð’ Ñтом Ñлучае члены команды не улучшают Ñвои Ñлабые Ñтороны и не развивают новые навыки. Однако, ÑÐ¿ÐµÑ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‡ÐµÐ½ÑŒ Ñффективна Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти, еÑли ею не злоупотреблÑть. + +Следующее: [Как раÑпределÑть Ñкучные заданиÑ](05-How-to-Handle-Boring-Tasks.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md new file mode 100644 index 0000000..3bfa89c --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -0,0 +1,7 @@ +# Как раÑпределÑть Ñкучные Ð·Ð°Ð´Ð°Ð½Ð¸Ñ + +Иногда невозможно избежать Ñкучных задач, которые критичны Ð´Ð»Ñ ÑƒÑпеха компании или проекта. Такие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñильно подорвать дух тех, кому придетÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒÑÑ Ð¸Ð¼Ð¸. Лучше вÑего поÑтратьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ ÑпоÑоб заÑтавить компьютер выполнÑть Ñти задачи вмеÑто ваших коллаг, либо помочь им. Работа Ñ Ñ‚ÐµÑ‡ÐµÐ½Ð¸Ðµ недели над программой, выполнÑющей задачу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ займет ту же неделю, имеет то огромное преимущеÑтво, что она учит большему и иногда более повторÑема. + +ЕÑли ничего из Ñтого не Ñработает, извинитеÑÑŒ перед теми, кому придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñкучные задачи, но ни при каких обÑтоÑтельÑтвах не позволÑйте выполнÑть Ñти задачи в одиночку. Как минимум назначьте двоих на Ñту работу и поощрÑйте командную работу в выполнении таких задач. + +Следующее: [Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°](06-How-to-Gather-Support-for-a-Project.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md new file mode 100644 index 0000000..c283c90 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -0,0 +1,5 @@ +# Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° + +Чтобы получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, Ñоздайте и раÑÑкажите вÑе предÑтавление, которое покажет его реальную ценноÑть Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ в целом. ПопытайтеÑÑŒ вовлечь других в Ñоздание вашего предÑтавлениÑ. Это даÑÑ‚ им причину поддерживать ваÑ, а вам - возможноÑть иÑпользовать их идеи. Индивидуально привлекайте ключевых людей Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ вашего проекта. Ð’Ñегда, когда возможно, показывайте, а не раÑÑказывайте. ЕÑли Ñто реально, поÑтройте прототип или макет Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½Ñтрации ваших идей. Прототип вÑегда мощное ÑредÑтво, оÑобенно Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, где он превоÑходит любое пиÑьменное опиÑание. + +Следующее: [Как развивать ÑиÑтему](07-How-to-Grow-a-System.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md new file mode 100644 index 0000000..3f62d41 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -0,0 +1,23 @@ +# Как развивать ÑиÑтему + +Ð¡ÐµÐ¼Ñ Ñодержит в Ñебе идею дерева, но не имеет форму и мощь взроÑлого раÑтениÑ. Ð¡ÐµÐ¼Ñ Ð²Ñ‹Ñ€Ð°Ñтает в Ñаженец. Он ÑтановитÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ. Он вÑе больше похож на взроÑлое дерево. Дерево начичает приноÑить плоды. Ðаконец, оно умирает и Ñлужит пищей Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… организмов. + +У Ð½Ð°Ñ ÐµÑть роÑкошь отноÑитьÑÑ Ðº программному обеÑпечению похожим образом. МоÑÑ‚ не похож на него. Ðе бывает моÑтов-детей, бывают недоÑтроенные моÑты. Они гораздо проще, чем программное обеÑпечение. + +Полезно думать о программном обеÑпечении как о чем-то раÑтущем, Ñто позволÑет нам добитьÑÑ ÑущеÑтвенного прогреÑÑа до того, как у Ð½Ð°Ñ ÑложитÑÑ Ð¸Ð´ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹ мыÑленный образ того, что мы делаем. Мы можем иÑпользовать обратную ÑвÑзь от пользователей, чтобы Ñкорректировать развитие ÑиÑтемы. Ð’Ñегда полезно обрезать Ñлабые и ненужные ветки. + +ПрограммиÑÑ‚ должен разработать законченную ÑиÑтемы, которую можно поÑтавлÑть и иÑпользовать. Ðо продвинутый программиÑÑ‚ должен гораздо больше. Ð’Ñ‹ должны разработать путь развитиÑ, который завершитÑÑ готовой ÑиÑтемой. Ваша работа - взÑть зародыш идеи и поÑтроить путь, который как можно плавнее приведет к оплезному продукту. + +Чтобы Ñделать Ñто, вы должны визуализировать конечный результат и предÑтавить его так, чтобы ваша Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¸Ð°Ð½Ð´Ð° загорелаÑÑŒ им. Ðо кроме Ñтого вы должны раÑÑказать им без больших Ñкачков веÑÑŒ путь, который ведет от текущей точки проекта до конечной. Дерево должно жить вÑе Ñто времÑ, Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ‚ÑŒ ему умереть, а затем возрождать его. + +Этот подход отражен в Ñпиральной разработке. Этапы проекты никогда не находÑÑ‚ÑÑ Ð´Ð°Ð»ÐµÐºÐ¾ друг от друга и отмечают прогреÑÑ Ð¿Ð¾ пути проекта. Ð’ Ñверхконкурентной Ñреде бизнеÑа лучше вÑего, еÑли поÑле каждого Ñтапа программное обеÑпечение можно выпуÑтить и заработать на Ñтом денег, даже еÑли оно вÑе еще далеко от финального ÑоÑтоÑниÑ. Одна из задач программиÑта - ÑбаланÑировать немедленную отдачу от проекта Ñ Ð±ÑƒÐ´ÑƒÑ‰ÐµÐ¹, тщательно Ð²Ñ‹Ð±Ð¸Ñ€Ð°Ñ Ð¿ÑƒÑ‚ÑŒ прогреÑÑа, отраженный в его Ñтапах. + +Продвинутый программиÑÑ‚ неÑет тройную ответÑтвенноÑть за развитие программного обеÑпечение, команд и отдельных людей. + +Один из читателей, Роб Хаферник, приÑлал комментарий к Ñтой чаÑти, который Ñ Ð½Ðµ могу не привеÑти полноÑтью: + +> Я думаю, что вы недооценили важноÑть Ñтого вопроÑа. Он каÑаетÑÑ Ð½Ðµ только ÑиÑтемы, но и алгоритмов, пользовательÑких интерфейÑов, моделей данных и так далее. При работе над большой ÑиÑтемой жизненно важно иметь измерÑемый прогреÑÑ Ð² доÑтижении промежуточных целей. Ðичто не ÑравнитÑÑ Ñ ÑƒÐ¶Ð°Ñом, когда вы доходите до конца и обнаруживаете, что вÑе Ñто проÑто не работает (поÑмотрите на недавний провал ÑиÑтемы Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð·Ð±Ð¸Ñ€Ð°Ñ‚ÐµÐ»ÐµÐ¹). Я бы пошел дальше и Ñформулировал бы Ñто как природный закон: Ð½ÐµÐ»ÑŒÐ·Ñ Ñ Ð»Ð¸Ñта поÑтроить большую и Ñложную ÑиÑтему. Ее можно только развить из небольшой в Ñложную через Ñерию поÑледовательных шагов. + +Ðа Ñто можно только ответить "Именно так!" + +Следующее: [Как качеÑтвенно взаимодейÑтвовать](08-How-to-Communicate-Well.md) diff --git a/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md new file mode 100644 index 0000000..0338ac9 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -0,0 +1,11 @@ +# Как качеÑтвенно взаимодейÑтвовать + +Чтобы качеÑтвенно взаимодейÑтвовать, вам Ñтоит оÑознать, наÑколько Ñто трудно. Это Ñам по Ñебе отдельный навык. Он уÑложнÑетÑÑ Ñ‚ÐµÐ¼, что люди, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ вам приходитÑÑ Ð¾Ð±Ñ‰Ð°Ñ‚ÑŒÑÑ, неÑовершенны. Они не будут прилагать уÑилий, чтобы понÑть ваÑ. Они плохо выражают Ñвои мыÑли и плохо пишут. Ои чаÑто перегружены работой или им Ñкучно, либо как минимум больше ÑоÑредоточены на Ñвоей чаÑти работы, чем на глобальных проблемах, которые вы, возможно, решаете. Одно из преимущеÑтв чаÑтных занÑтий и практики пиÑьма, публичных выÑтуплений и ÑÐ»ÑƒÑˆÐ°Ð½Ð¸Ñ ÑоÑтоит в том, что еÑли вы Ñтанете лучше во вÑем Ñтом, вы Ñможете быÑтрее увидеть, где лежит проблема взаимодейÑÑ‚Ð²Ð¸Ñ Ð¸ как ее иÑправить. + +ПрограммиÑÑ‚ - Ñто Ñоциальное ÑущеÑтво, и его выживание завиÑит от коммуникации Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹. Продвинутый программиÑÑ‚ - Ñто Ñоциальное ÑущеÑтво, чье удовлетворение завиÑит от коммуникации Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ за пределами команды. + +Программм=иÑты приноÑÑÑ‚ порÑдок в хаоÑ. Один из интереÑных ÑпоÑобов делать Ñто - внеÑти какое-нибудь предложение за пределами вашей команды. Это можно Ñделать в виде черновика или уÑтно. Такой подход имеет огромное преимущеÑтво в том, что уÑтанавливает рамки обÑуждениÑ. Он также Ñтавить Ð²Ð°Ñ Ð² позицию критикуемого и может привеÑти к отвержению и пренебрежению. Продвиутый программиÑÑ‚ должен быть готов принÑть вÑе Ñто, ведь у него еÑть уникальные возможноÑти, а значит, и ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть. Предприниматели, которые не ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, нуждаютÑÑ Ð² том, чтобы программиÑты проÑвлÑли инициативу хоть в каком-то виде. ПрограммиÑты - Ñто та чаÑть моÑта между идеÑми и дейÑтвительноÑтью, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ð¸Ñ€Ð°ÐµÑ‚ÑÑ Ð½Ð° поÑледнее. + +Я вÑе еще не оÑвоил до конца навык взаимодейÑтвиÑ, но что Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ делать, можно выразить как четырехÑторонний подход. ПоÑле того, как Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð¶Ñƒ Ñвои идеи в порÑдок и полноÑтью готов, Ñ ÑтараюÑÑŒ Ñобощить о них уÑтно, вручаю людÑм черновой наброÑок (на бумаге или в Ñлектронном виде), показываю демо и затем терпеливо повторÑÑŽ процеÑÑ. Я думаю, что чаÑто мы недоÑтаточно терпеливы Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñложного общениÑ. Ðе Ñтоит раÑÑтраиватьÑÑ, еÑли ваши идеи не были Ñразу принÑты. ЕÑли вы вложили много уÑилий в их подготовку, никто не будет думать о Ð²Ð°Ñ Ð¿Ð»Ð¾Ñ…Ð¾ из-за отказа. + +Следующее: [Как Ñообщать неприÑтное](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md b/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md new file mode 100644 index 0000000..d3ade2e --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md @@ -0,0 +1,9 @@ +# Как Ñообщать неприÑтное + +ЧаÑто вам придетÑÑ Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÑŒ людÑм вещи, которые им не понравÑÑ‚ÑÑ. Помните, что у Ð²Ð°Ñ ÐµÑть на то причина. Даже еÑли Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹ ничего Ð½ÐµÐ»ÑŒÐ·Ñ Ñделать, вы Ñообщаете о ней как можно раньше, чтобы вÑе были информированы о ней. + +Лучший ÑпоÑоб Ñообщить о проблеме - Ñто тут же предложить ÑпоÑоб ее решениÑ. Второй хороший ÑпоÑоб - Ñто попроÑить о помощи в ее решении. ЕÑли еÑть вероÑтноÑть, что вам не поверÑÑ‚, Ñоберите доказательÑтва Ñвоей правоты. + +Одна из Ñамых неприÑтных и чаÑтых фраз, которую вам придетÑÑ Ð¿Ñ€Ð¾Ð¸Ð·Ð½Ð¾Ñить, Ñто "График придетÑÑ Ñдвинуть". Сознательный программиÑÑ‚ терпеть не может произноÑить ее, но должен делать Ñто как можно раньше. Ðет ничего хуже, чем откладывать решение, когда ÑрываетÑÑ Ñтап проекта. Даже еÑли решение заключаетÑÑ Ð² информировании о проблеме. Когда такое проиходит, лучше вÑего Ñказать Ñто от лица команды. Вам понадобитÑÑ Ð¼Ð½ÐµÐ½Ð¸Ðµ вашей команды о проблеме и том, как ее решить, и учаÑтие команды в поÑледÑтвиÑÑ… проблемы вмеÑте Ñ Ð²Ð°Ð¼Ð¸. + +Следующее: [Как ÑправлÑтьÑÑ Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ñкими мифами](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md new file mode 100644 index 0000000..4475362 --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -0,0 +1,13 @@ +# Как ÑправлÑтьÑÑ Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ñкими мифами + +Слово *миф* иногда означает вымыÑел. Ðо у него еÑть и более глубокий ÑмыÑл. Оно также означает иÑторию религиозного значениÑ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð±ÑŠÑÑнÑет вÑеленную и отношение человека к ней. Менеджеры Ñклонны забывать, что они знали, когда были программиÑтами, и верить в определенные мифы. ПытатьÑÑ Ð¿ÐµÑ€ÐµÑƒÐ±ÐµÐ´Ð¸Ñ‚ÑŒ их, что Ñти мифы ложны, будет так же грубо и беÑÑмыÑленно, как разубедить религиозного человека в его убеждениÑÑ…. По Ñтой причине вам Ñледует различать как мифы Ñледующие убеждениÑ: + +- Больше документации вÑегда лучше. (Они хотÑÑ‚ Ñтого, но не хотÑÑ‚, чтобы вы тратили на Ñто Ñвое времÑ) +- ПрограммиÑтов можно Ñравнивать. (ПрограммиÑты очень Ñильно отличаютÑÑ Ð´Ñ€ÑƒÐ³ от друга) +- Ð’ проект можно добавить реÑурÑов, чтобы уÑкорить его. (ÐšÐ¾Ð¼Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ людьми в проекте почти вÑегда ведет к увеличению проекта) +- Разработку программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ надежно оценить по времени и затратам. (Это невозможно даже теоретичеÑки) +- ПроизводительноÑть программиÑтов можно измерить в рамках одной проÑтой метрики, например, в Ñтроках кода. (ЕÑли качеÑтво в емкоÑти, то избыточные Ñтроки кода Ñто плохо, а не хорошо) + +ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть, вы можете попытатьÑÑ Ð¾Ð±ÑŠÑÑнить Ñто, но не раÑÑтраивайтеÑÑŒ, еÑли у Ð²Ð°Ñ Ð½Ðµ получитÑÑ. Ðе портьте Ñебе репутацию воинÑтвенным противоÑтоÑнием Ñтим мифам. Каждый из них поддерживает идею менеджера о том, что у них еÑть реальный контроль над тем, что проиÑходит в проекте. Ðо правда в том, что менеджеры только упрощают процеÑÑ, еÑли они хороши, и препÑÑ‚Ñтвуют, еÑли нет. + +Следующее: [Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом](11-How-to-Deal-with-Organizational-Chaos.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md new file mode 100644 index 0000000..b914ddc --- /dev/null +++ b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -0,0 +1,11 @@ +# Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом + +Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организционный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, выход на биржу, маÑÑовый наем Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. + +> ПрограммиÑты могут Ñоздавать и поддерживать продукт. + +Ðеинженеры могут руководить людьми, но в типичной компании по разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¸ не могут ничего Ñоздать или поддерживать без инженеров. Точно так же типичные инженеры не Ñмогут продать продукт или Ñффективно веÑти бизнеÑ. Эта ÑуперÑпоÑобноÑть защищает почти от вÑех проблем, ÑвÑзанных Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼ организационным хаоÑом. Пока она Ñ Ð²Ð°Ð¼Ð¸, вам Ñледует игнорировать полноÑтью Ñ…Ð°Ð¾Ñ Ð¸ продолжать делать Ñвою работы, как будто ничего не проиÑходит. ВаÑ, конечно, могут уволить, но еÑли Ñто ÑлучитÑÑ, то Ñкорее вÑего вы найдете новую работу Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñвоей ÑуперÑпоÑобноÑти. Ðо чаще вÑего кто-нибудь измученный ÑтреÑÑом придет к вам и прикажет делать что-нибудь глупое. ЕÑли вы Ñовершенно уверены, что Ñто глупо, то лучше вÑего улыбатьÑÑ Ð¸ кивать, пока Ñтот человек не уйдет. Рзатем продолжать делать то, что вы Ñчитаете правильным Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸. + +ЕÑли вы лидер, Ñкажите Ñвоей команде делать то же Ñамое и игнорировать вÑе, что ей будут говорить оÑтальные. Такое поведение наиболее выгодно Ð´Ð»Ñ Ð²Ð°Ñ Ð»Ð¸Ñ‡Ð½Ð¾ и Ð´Ð»Ñ Ð²Ñей компании или проекта. + +Следующее: [ГлоÑÑарий](../../GLOSSARY.md) diff --git a/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md new file mode 100644 index 0000000..21006f2 --- /dev/null +++ b/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -0,0 +1,9 @@ +# Как отличить Ñложное от невозможного +[//]: # (Version:1.0.1) +Ваша работа заключаетÑÑ Ð² том, чтобы делать Ñложное и отличать невозможное. С точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñтва программиÑтов невозможное Ñто то, что невозможно получить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ одной ÑиÑтемы или то, что невозможно оценить. По Ñтому определению научное иÑÑледование невозможно выполнить. Большой объем работы Ñто Ñложно, не необÑзательно невозможно. + +Это нешуточное различие, потому что чаÑто Ð²Ð°Ñ Ð±ÑƒÐ´ÑƒÑ‚ проÑить Ñделать то, что невозможно практичеÑки, будь то Ñ Ð½Ð°ÑƒÑ‡Ð½Ð¾Ð¹ точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ программного обеÑпечениÑ. Тогда ваша задача помочь найти разумное решение, которое будет проÑто Ñложным и позволит реализовать большую чаÑть запроÑов. Решение ÑвлÑетÑÑ Ñложным, еÑли его можно Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью раÑпланировать, и понÑтны ÑвÑзанные Ñ Ð½Ð¸Ð¼ риÑки. + +Ðевозможно выполнить туманные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ€Ð¾Ð´Ðµ "ПоÑтроить ÑиÑтему, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ вычиÑлÑть Ñамую привлекательную причеÑку и цвет Ð²Ð¾Ð»Ð¾Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клиента". ЕÑли требование можно Ñделать более четким, оно зачаÑтую Ñтанет Ñложнее, например, "ПоÑтроить ÑиÑтему, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ вычиÑлÑть Ñамую привлекательную причеÑку и цвет Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°, позволÑть им предварительно проÑматривать решение, изменÑть его и наÑтолько хорошо удовлетворÑть клиента, что мы будет получать от Ñтого кучу денег". ЕÑли нет четкого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑƒÑпеха, то вы не добьетеÑÑŒ его. + +Следующее: [Как иÑпользовать вÑтроенные Ñзыки](02-How-to-Utilize-Embedded-Languages.md) diff --git a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md new file mode 100644 index 0000000..b8db6aa --- /dev/null +++ b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -0,0 +1,11 @@ +# Как иÑпользовать вÑтроенные Ñзыки + +Ð’Ñтраивание Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑиÑтему обладает почти ÑротичеÑким притÑжением Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта. Это Ñамое творчеÑкое, что можно Ñделать. Это делает ÑиÑтемы невероÑтно мощной и позволит вам иÑпользовать ее Ñамые творчеÑкие возможноÑти. Это Ñделает ÑиÑтему вашим другом. + +У лучших теÑтовых редакторов еÑть вÑтроенные Ñзыки программированиÑ. Это можно иÑпользовать в той мере, в какой Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ овладеть Ñтими Ñзыками. Конечно, можно Ñделать иÑпользование вÑтроенного Ñзыка необÑзательным, как Ñто делаетÑÑ Ð² текÑтовых редакторах, так что ими пользуютÑÑ Ð¾Ð¿Ñ‹Ñ‚Ð½Ñ‹Ðµ пользователи, а оÑтальным они и не нужны. + +И Ñ, и множеÑтво других программиÑтов попадали в ловушку ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñтроенных Ñзыков Ñо Ñпециальным назначением. Я попадалÑÑ Ð½Ð° Ñто дважды. Ð’ мире уже ÑущеÑтвует множеÑтво Ñзыков, которые Ñпроетированы Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы их вÑтраивать в ÑиÑтемы. Подумайте дважды, прежде чем Ñоздавать еще один. + +ВопроÑ, который Ñтоит задать Ñебе перед вÑтраиванием Ñзыка, звучит так: входит ли иÑпользование таких Ñзыков в культуру моих пользователей или нет? ЕÑли ваша Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит иÑключительно из непрограммиÑтов, то наÑколько поможет внедрение Ñзыка в ÑиÑтему? ЕÑли Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит из программиÑтов, то не предпочтут ли они четкое API? И какой Ñзык вы ÑобираетеÑÑŒ вÑтраивать? ПрограммиÑты не очень любÑÑ‚ изучать новый Ñзык, еÑли он применÑетÑÑ ÑƒÐ·ÐºÐ¾. Ðо еÑли он похож на то, Ñ Ñ‡ÐµÐ¼ они уже работают, то они быÑтро оÑвоÑÑ‚ его. Создавать новый Ñзык Ñто огромное удовольÑтвие и радоÑть. Ðо мы не должны позволÑть Ñтой радоÑти оÑлеплÑть Ð½Ð°Ñ Ð¸ затмевать потребноÑти пользователÑ. ЕÑли только у Ð²Ð°Ñ Ð½Ðµ по-наÑтоÑщему оригинальные запроÑÑ‹ и идеи, то почему бы не иÑпользовать уже ÑущеÑтвующий Ñзык, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ знакома Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‡Ð°Ñть ваших пользователей? + +Следующее: [Выбор Ñзыка программированиÑ](03-Choosing-Languages.md) diff --git a/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md new file mode 100644 index 0000000..87cda5a --- /dev/null +++ b/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -0,0 +1,15 @@ +# Выбор Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + +ПрограммиÑÑ‚-одиночка, который любит Ñвою работу, может позволить Ñебе выбирать Ñзык, лучше вÑего подходÑщий Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸. Ðо у большинÑтва работающих программиÑтов небольшой выбор над Ñзыком, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ они работают. Обычно, за них Ñто решают руководители, которые больше принимают политичеÑкое, а не технологичеÑкое решение. ЧаÑто руководителÑм не хватает ÑмелоÑти иÑпользовать нетрадиционный инÑтрумент, даже еÑли они знают, иногда по ÑобÑтвенному опыту, что менее раÑпроÑтраненный инÑтрумент лучше. Ð’ других ÑлучаÑÑ… преимущеÑтво того, что Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть команды и иногда более широкого общеÑтва владеет инÑтрументом, иÑключает его выбор Ñо Ñтороны отдельного программиÑта. ЧаÑто менеджеры руководÑтвуютÑÑ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾Ñтью нанимать программиÑтов Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼ Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼ Ñзыком. Вне Ñомнений они делают то, что Ñчитают лучшим Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или проекта, и их Ñтоит уважать за Ñто. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитает Ñтот подход одним из Ñамых беÑполезных и ошибочных, которые можно только вÑтретить. + +Ðо конечно, вÑе не так однозначно. Даже еÑли оÑновной Ñзык обÑзателен, и вы не можете изменить его, чаÑто ÑлучаетÑÑ, что некоторые инÑтрументы или Ñторонние программы можно и нужно напиÑать на других Ñзыках. ЕÑли Ñзык должен быть вÑтроен в ÑиÑтему (и вам вÑегда Ñледует раÑÑмотреть такую возможноÑть), то его выбор во многом будет завиÑеть от пользователей ÑиÑтемы. Из таких Ñлучаев Ñледует извлекать преимущеÑтво и выбирать лучший Ñзык Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или проекта. Заодно Ñто делает работу намного интереÑнее. + +Языки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² дейÑтвительноÑти Ñтоит называть нотациÑми, поÑкольку выучить один из них не так трудно, как еÑтеÑтвенный Ñзык. Ð”Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… или непоÑвÑщенных "выучить новый Ñзык программированиÑ" кажетÑÑ Ñложной задачей, но поÑле трех Ñзыков Ñто вÑего лишь Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð·Ð½Ð°ÐºÐ¾Ð¼Ñтва Ñ Ð´Ð¾Ñтупными библиотеками. Ðкоторые Ñклонны думать о большой ÑиÑтеме, в которой компоненты напиÑаны на трех-четырех Ñзыках, как о беÑпорÑдочной ÑолÑнке, но Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÑŽ, что Ñ‚Ð°ÐºÐ°Ñ ÑиÑтема во Ñногих ÑлучаÑÑ… превоÑходит ÑиÑтему, напиÑанную на одном Ñзыке: + +- Между компонентами, напиÑанными на разных нотациÑÑ…, нет теÑной ÑвÑзи, они лучше изолированы друг от друга (Ñ…Ð¾Ñ‚Ñ Ð¾Ð½Ð¸ могут иметь не ÑовÑем понÑтные интерфейÑÑ‹) +- Ð’Ñ‹ можете легко внедрить новый Ñзык или платформу, перепиÑав индивидуально каждый компонент +- Один Ñзык может не подходить Ð´Ð»Ñ Ð²Ñех задач ÑиÑтемы. Ð˜Ð¼ÐµÑ Ð½ÐµÑколько Ñзыков Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð², вы можете выбирать наиболее подходÑщий Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¹ задачи + +Ðекоторые из Ñтих преимущеÑтв чиÑто пÑихологичеÑкие, но пÑÐ¸Ñ…Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñ‚Ð¾Ð¶Ðµ важна. Ð’ конце концов, издержки Ñзыковой тирании перевешивают любые преимущеÑтва, которые она дает. + +Следующее: [Ðахождение компромиÑÑов. Как ÑправлÑтьÑÑ Ð² давлением графика](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/ru/5-Bibliography.md b/ru/5-Bibliography.md new file mode 100644 index 0000000..5736f6e --- /dev/null +++ b/ru/5-Bibliography.md @@ -0,0 +1,31 @@ +# Приложение A - БиблиографиÑ/СпиÑок Ñайтов +[//]: # (Version:1.0.0) +## Книги + +[Rules00] Guy Kawasaki, Michelle Moreno, and Gary Kawasaki. 2000. HarperBusiness. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services. + +[RDev96] Steve McConnell. 1996. Microsoft Press. Redmond, Wash. Rapid Development: Taming Wild Software Schedules. + +[CodeC93] Steve McConnell. 1993. Microsoft Press. Redmond, Wash. Code Complete. + +[XP99] Kent Beck. 1999. 0201616416. Addison-Wesley. Extreme Programming Explained: Embrace Change. + +[PlanXP00] Kent Beck and Martin Fowler. 2000. 0201710919. Addison-Wesley. Planning Extreme Programming. + +[Prag99] Andrew Hunt, David Thomas, and Ward Cunningham. 1999. 020161622X. Addison-Wesley. The Pragmatic Programmer: From Journeyman to Master. + +[Stronger] Friedrich Nietzsche. 1889. Twilight of the Idols, "Maxims and Arrows", section 8.. + +## Сайты + +[PGSite] Paul Graham. 2002. Articles on his website: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). All of them, but especially "Beating the Averages". + +[Hacker] Eric S. Raymond. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). + +[HackDict] Eric S. Raymond. 2003. The New Hacker Dictionary. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). + +[ExpCS] Edsger W. Dijkstra. 1986. How Experimental is Computing Science?. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). + +[Knife] Edsger W. Dijkstra. 1984. On a Cultural Gap. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). + +Следующее: [ИÑториÑ](6-History.md) \ No newline at end of file diff --git a/ru/6-History.md b/ru/6-History.md new file mode 100644 index 0000000..c99fa25 --- /dev/null +++ b/ru/6-History.md @@ -0,0 +1,47 @@ +# Приложение B - ИÑÑ‚Ð¾Ñ€Ð¸Ñ +[//]: # (Version:1.0.0) +## Move to Github + +This essay has been created as a repository on Github so that it can be easily shared, updated and improved. It was copied from [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie). It was moved to Github in January 2016. + +## Request for Feedback or Extension + +Please send me any comments you may have on this essay. I consider all suggestions, many of which have already improved this essay. + +I have placed this essay under the GNU Free Documentation License. This license is not specifically designed for essays. Essays are usually intended to be coherent and convincing arguments that are written from a single point of view in a single voice. I hope this essay is a short and pleasant read. + +I also hope that it is instructive. Although not a textbook, it is broken into many small sections to which new sections can be freely added. If so inclined, you are encouraged to expand upon this essay as you see fit, subject to the provisions of the License. + +It may be arrogance to imagine that this document is worthy of extension; but hope springs eternal. I would be joyous if it were extended in the following ways: + +The addition of a comprehensive reading list to each section, + +The addition of more and better sections, + +Translation into other languages, even if only on a subsection-by-subsection basis, and/or + +Criticism or commentary in-lined into the text. + +The ability to build into different formats, such as palm formats and better HTML. + +If you inform me of your work, I will consider it and may include it in subsequent versions that I produce, subject to the provisions of the License. You may of course produce your own versions of this document without my knowledge, as explained in the License. + +Thank you. + +Robert L. Read + +## Original Version + +The original version of this document was begun by Robert L. Read in the year 2000 and first published electronically at Samizdat Press(http://Samizdat.mines.edu) in 2002. It is dedicated to the programmers of Hire.com. + +After this article was mentioned on Slashdot in 2003, about 75 people sent me email with suggestions and errata. I appreciate them all. There was a lot of duplication, but the following people either made major suggestions or were the first to find a bug that I fixed: Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, and Tom Corcoran. + +Finally I would like to thank Christina Vallery, whose editing and proofreading greatly improved the second draft, and Wayne Allen, who encouraged me to initiate this. + +## Original Author's Bio + +Robert L. Read lives in Austin, Texas, with his wife and two children. He is currently a Principal Engineer at Hire.com, where he has worked for four years. Prior to that he founded 4R Technology, which made a scanner-based image analysis quality control tool for the paper industry. + +Rob received a PhD from the University of Texas at Austin in 1995 in Computer Science related to database theory. In 1987 he received a BA in Computer Science from Rice University. He has been a paid programmer since the age of 16. + +Next [License](LICENSE.md) diff --git a/ru/7-Contributions.md b/ru/7-Contributions.md new file mode 100644 index 0000000..d40ba50 --- /dev/null +++ b/ru/7-Contributions.md @@ -0,0 +1,31 @@ +# УчаÑтеи в проекте +[//]: # (Version:1.0.0) +This repository aims to be a community driven project, and your involvement will ultimately help improve the quality of this guide. + +## What can I do to contribute? +There are a number of ways to contribute to "How to be a Programmer". + +- Ideas for new sections +- Improvements to existing sections +- Identifying typos or other issues in sections +- Contributing additional links to resources for sections +- General suggestions for improving the project +- Provide translations of the guide + +## Translations + +Currently this guide has been translated from English into the following languages: + +- Chinese by [ahangchen](https://github.com/ahangchen) + +**If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** + +## Contributors + +Github holds a list of all [contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) to this project. + +## Editorship and Move to GitHub + +[Braydie Grove](https://www.github.com/braydie) has agreed to serve as editor-in-chief. + +Braydie transposed the original essay into MarkDown and created the repository. diff --git a/ru/GLOSSARY.md b/ru/GLOSSARY.md new file mode 100644 index 0000000..0b1833e --- /dev/null +++ b/ru/GLOSSARY.md @@ -0,0 +1,131 @@ +# ГлоÑÑарий +[//]: # (Version:1.0.0) +Ð’ данном глоÑÑарии Ñобраны термирны, иÑпользующиеÑÑ Ð² ÑÑÑе. Термины необÑзательно имеют Ñтандартное Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва людей значение. Eric S. Raymond Ñобрал маÑÑивный и информативный глоÑÑарий[HackerDict], оценив малую чаÑть которого, можно Ñ ÑƒÐ´Ð¾Ð²Ð¾Ð»ÑŒÑтвием прочеÑть от корки до корки, как бы Ñто Ñтранно ни звучало. + +### unk-unk + +Жаргон Ð´Ð»Ñ "неизвеÑтное-неизвеÑтное". Это проблемы, которые в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ предÑтавить даже концептуально, и которые будут отнимать времÑ, заложенное на проект, и Ñбивать график. + +### printlining + +Ð’Ñтавка в программу временных команд, которые выводÑÑ‚ информацию о ее выполнении Ð´Ð»Ñ Ð¿Ð¾Ñледующей отладки. + +### Логирование + +Практика пиÑать программу таким образом, чтобы она могла выводить наÑтраиваемый отчет, опиÑывающий ход ее иÑполнениÑ. + +### divide and conquer + +Техника Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ отладки по принципу "Ñверху-вниз". ЗаключаетÑÑ Ð² разделении большой проблемы или задачи на ÑоÑтавные проблемы или задачи меньшего размера. + +### vapour + +Воображаемые и чаÑто обманчивые Ð¾Ð±ÐµÑ‰Ð°Ð½Ð¸Ñ Ð½Ð°Ñчет программного обеÑпечениÑ, которое еще не готово Ð´Ð»Ñ Ð²Ñ‹Ð¿ÑƒÑка, и которое зачаÑтую никогда не преобразуетÑÑ Ð² нечто работающее. + +### БоÑÑ + +Человек, который назначает вам задачи. Ð’ некоторых ÑлучаÑÑ…, Ñто Ñам пользователь. + +### tribe + +Люди, которые разделÑÑŽÑ‚ Ñ Ð²Ð°Ð¼Ð¸ верноÑть некой общей цели. + +### low-hanging fruit + +СущеÑтвенные улучшениÑ, которые требуют мало затрат. + +### Entrepreneur + +Инициатор проектов. + +### business + +Группа людей, организованных Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð±Ñ‹Ð»Ð¸. + +### company + +Группа людей, организованных Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð±Ñ‹Ð»Ð¸. + +### scroll blindness + +ÐевозможноÑть найти нужную информацию из-за того, что она ÑпрÑтана в большом количеÑтве другой, менее интереÑной, информации. + +### wall-clock + +ФактичеÑкое времÑ, измерÑемое наÑтенными чаÑами, противоположноÑть процеÑÑорного времени. + +### Узкое меÑто + +Главное ограничение в производительноÑти ÑиÑтемы. Ограничение, которые Ñнижает производительноÑть. + +### master + +Уникальный фрагмент информациÑ, от которого проиÑходÑÑ‚ вÑе кÑшированные копии. Служит официальным определением данных. + +### Ð’Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÐºÑƒÑ‡Ð° + +ПамÑть можно назвать "выделенной в куче", когда механизм по ее оÑвобождению можно назвать Ñложным. + +### МуÑор + +ПамÑть, которую занимают ненужные более Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹. + +### Сборщик муÑора + +СиÑтема Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ муÑора. + +### Утечка памÑти + +Ðабор нежелаемых ÑÑылок на объекты, которые мешают Ñборке муÑора. Либо ошибка в Ñборщике муÑоре или ÑиÑтеме ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти. Приводит к поÑтепенному увеличению памÑти, которую запрашивает программа Ñ Ñ‚ÐµÑ‡ÐµÐ½Ð¸ÐµÐ¼ времени. + +### ЭкÑтремальное программирование + +Стиль разработки, которые акцентируетÑÑ Ð½Ð° общении Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð¼Ð¸ и автоматизированным теÑтированием. + +### hitting the wall + +ИÑчерпать некий реÑÑƒÑ€Ñ Ð¸ тем Ñамым резко Ñнизить производительноÑть программы в противоположноÑть поÑтепенному Ñнижению. + +### speculative programming + +Создание функции до того, как точно определено, будет ли она полезна. + +### information hiding + +Принцип проектированиÑ, которые ÑтремитÑÑ Ð¸Ð·Ð¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ друг от друга компоненты через внешние интерфейÑÑ‹, предоÑтавлÑющие необходимый минимум информации. + +### Объектно-ориентированное программирование + +Стиль программированиÑ, акцентирующийÑÑ Ð½Ð° управлении внутренним ÑоÑтоÑнием объектов. + +### communication languages + +Язык, Ñпроектированный в первую очередь Ð´Ð»Ñ Ñтандартизации, чем Ð´Ð»Ñ Ð½ÐµÐ¿Ð¾ÑредÑтвенного иÑпользованиÑ. + +### boxes and arrows + +Свободный, неформальный Ñтиль поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼ из Ñчеек и Ñтрелок, отображающих отношениÑ. ПротивопоÑтавлÑетÑÑ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¼ методологиÑм диаграмм, таким как UML. + +### lingua franca + +ПопулÑрный в Ñвоей облаÑти Ñзык, Ñтавший де-факто Ñтандартом. Ðапример, как французÑкий был в одно Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð¼ÐµÐ¶Ð´ÑƒÐ½Ð°Ñ€Ð¾Ð´Ð½Ð¾Ð¹ дипломатии. + +### buy vs. build + +Выбор между покупкой программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ ÑамоÑтоÑтельной разработкой. + +### mere work + +Работа, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ мало творчеÑтва и подразумевает малый риÑк. Можно легко оценить Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… затрат. + +### programming notation + +Синоним Ð´Ð»Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð° "Ñзыка программированиÑ", который почеркивает математичеÑкую природу Ñзыков Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ их проÑтоту отноÑительно еÑтеÑтвенных Ñзыков. + +### strawman + +Документ, который ÑвлÑетÑÑ Ñтартовой точкой техничеÑкой диÑкуÑÑиии. Может веÑти к поÑледующим верÑиÑм документации. + +### white-paper + +Информативный документ, который чаÑто предназначен объÑÑнить или продать продукт или идею аудитории, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚ÑÑ Ð¾Ñ‚ разработчиков данного продукта или идеи. diff --git a/ru/LICENSE.md b/ru/LICENSE.md new file mode 100644 index 0000000..3e18a1a --- /dev/null +++ b/ru/LICENSE.md @@ -0,0 +1,12 @@ + +## Creative Commons Attribution Share-Alike + +"How To Be A Programmer: Community Version" by Robert L. Read with Community is licensed under Creative Commons Attribution Share-Alike Internal v 4.0. + +At present this work will be edited by Braydie Grove and Robert L. Read. + +We will make reasonable attempts to maintain proper attributions of contributions in the section entittle "Contributions". If you make a pull-request with a significant contribution, please add a very brief description of your contribution to that section. + + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/ru/README.md b/ru/README.md new file mode 100644 index 0000000..4a94ad6 --- /dev/null +++ b/ru/README.md @@ -0,0 +1,103 @@ +# How to be a Programmer: Community Version +[//]: # (Version:1.0.0) +Robert L. Read with Community + +Copyright 2002, 2003, 2016 Robert L. Read + +Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +## Введение +Быть хорошим программиÑтом трудно и благородно. Самое Ñложное в коллективной разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñто взаимодейÑтвие Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и клиентами. ПиÑать компьютерные программы важно и требует многих знаний и навыков, но Ñто лишь детÑкий лепет по Ñравнению Ñ Ñ‚ÐµÐ¼ прочим, что хороший программиÑÑ‚ должен делать, чтобы Ñоздать программное обеÑпечение, уÑпешное и Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð², и Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва коллег, за которых он неÑет чаÑтичную ответÑтвенноÑть. Ð’ данном ÑÑÑе Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ как можно более кратко изложить вÑе те нюанÑÑ‹ и детали, которые Ñ Ñам бы хотел, чтобы кто-нибудь мне объÑÑнил, когда мне был двадцать один год. + +Это очень ÑÑƒÐ±ÑŠÐµÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð°, поÑтому данное ÑÑÑе неизбежно будет отражением моих перÑональных взглÑдов и убеждений. Я ограничу ÑÐµÐ±Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸, Ñкорее вÑего, ÑтолкнетÑÑ Ð¿Ð¾Ñ‡Ñ‚Ð¸ каждый программиÑÑ‚ во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Многие из них, а также их Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ Ð½Ð°Ñтолько общечеловечеÑкими, что вероÑтно, мой тон покажетÑÑ Ð½Ð°Ð·Ð¸Ð´Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼. ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñто, Ñ Ð½Ð°Ð´ÐµÑŽÑÑŒ, что ÑÑÑе окажетÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ‹Ð¼. + +Программирование преподаетÑÑ Ð½Ð° курÑах. Великолепные книги The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96] и Extreme Programming Explained [XP99]: вÑе обучают программированию и более общим вопроÑам о том, как быть хорошим программиÑтом. До или вмеÑте Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñтатьей непременно Ñтоит ознакомитьÑÑ Ñ‚Ð°ÐºÐ¶Ðµ Ñ ÑÑÑе Paul Graham [PGSite] и Eric Raymond [Hacker]. Данное ÑÑÑе Ñлегка отличаетÑÑ Ð¾Ñ‚ Ñтих великолепных работ тем, что акцентирует внимание на Ñоциальных проблемах и обобщает набор необходимых программиÑту навыков так Ñ Ð¼Ð¾ÐµÐ¹ личной точки зрениÑ. + +Ð’ данном ÑÑÑе Ñ Ð½Ð°Ð·Ñ‹Ð²Ð°ÑŽ "боÑÑом" любого, кто Ñтавит перед вами задачи. Слова "бизнеÑ", "компаниÑ" и "племÑ" Ñ Ð¸Ñпользую как Ñинонимы, кроме тех Ñлучаев, когда "бизнеÑ" означает генерирование прибыли, "компаниÑ" - меÑто работы, а "клан" - людей, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ вы разделÑете преданноÑть. + +Добро пожаловать в клан. + +## Содержание + +1. [Ðачинающий разработчик](1-Beginner) + - Личные навыки + - [ÐаучитеÑÑŒ отлаживать](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [Как уÑтранÑть ошибки](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [Как определÑть проблемы производительноÑти](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [Как уÑтранÑть проблемы производительноÑти](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [Как оптимизировать циклы](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [Как управлÑть памÑтью](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [Как уÑтранÑть плавающие баги](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [Как ÑкÑпериментировать](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + - Командные навыки + - [Почему важно оценивать задачи](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [Как оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [Как иÑкать информацию](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [Как Ñпрашивать людей](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [Как документировать правильно](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [Как работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [Как пиÑать юнит-теÑты](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [Делайте перерывы, когда вы в тупике](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [Как понÑть, когда идти домой](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +2. [Разработчик Ñреднего уровнÑ](2-Intermediate) + - Личные навыки + - [Как ÑохранÑть мотивацию](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [Как заÑлужить доверие](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [Как проводить ÑтреÑÑ-теÑтирование](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [Как баланÑировать краткоÑть и абÑтракцию](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [Как оÑваивать новые навыки](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [ÐаучитеÑÑŒ печатать вÑлепую](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [Как выполнÑть интеграционное теÑтирование](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [Стандартные технологии](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [Как анализировать данные](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + - Командные навыки + - [Как управлÑть временем разработки](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [Как управлÑть риÑками, ÑвÑзанными Ñо Ñторонним программным обеÑпечением](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [Как руководить конÑультантами](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [Как ÑоизмерÑть количеÑтво общениÑ](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [Как чеÑтно выражать неÑоглаÑие](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + - ЭкÑпертиза + - [Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [Как управлÑть завиÑимоÑÑ‚Ñми](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [Как оценивать Ñтороннее программное обеÑпечение](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [Как решать: покупать программу или пиÑать Ñвою](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [Как раÑти профеÑÑионально](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [Как проводить ÑобеÑедованиÑ](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [Как понÑть, когда применÑть выÑокие технологии](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +3. [Продвинутый разработчик](3-Advanced) + - ТехнологичеÑÐºÐ°Ñ ÑкÑпертиза + - [Как отличить Ñложное от невозможного](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [Как иÑпользовать вÑтроенные Ñзыки](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Выбор Ñзыка программированиÑ](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - Правильные компромиÑÑÑ‹ + - [Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [Как понÑть пользователÑ](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [Как получить повышение](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - Управление командой + - [Как развивать таланты](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [Как выбрать, над чем работать](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [Как получить наибольшую отдачу от коллег](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [Как разделÑть задачи](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [Как раÑпределÑть Ñкучные заданиÑ](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [Как развивать ÑиÑтему](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [Как качеÑтвенно взаимодейÑтвовать](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [Как Ñообщать неприÑтное](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [Как ÑправлÑтьÑÑ Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ñкими мифами](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +4. [ГлоÑÑарий](GLOSSARY.md) +5. [Приложение A - БиблиографиÑ/СпиÑок Ñайтов](5-Bibliography.md) +6. [Приложение B - ИÑÑ‚Ð¾Ñ€Ð¸Ñ (на Ñнварь 2016)](6-History.md) +6. [Приложение C - УчаÑтие в проекте (на Ñнварь 2016)](7-Contributions.md) + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/ru/SUMMARY.md b/ru/SUMMARY.md new file mode 100644 index 0000000..e442482 --- /dev/null +++ b/ru/SUMMARY.md @@ -0,0 +1,80 @@ +# Summary +[//]: # (Version:1.0.0) +* [Beginner](1-Beginner/README.md) + * Personal Skills + * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + * Team Skills + * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +* [Intermediate](2-Intermediate/README.md) + * Personal Skills + * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + * Team Skills + * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + * Judgment + * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +* [Advanced](3-Advanced/README.md) + * Technological Judgment + * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + * Compromising Wisely + * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + * Serving Your Team + * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +* [Appendix A * Bibliography/Websiteography](5-Bibliography.md) +* [Appendix B * History (As of January 2016)](6-History.md) +* [Appendix C * Contributions (As of January 2016)](7-Contributions.md) From 2b1cc7af2f4c78ab330b6ece54aacf83ce9b1a2a Mon Sep 17 00:00:00 2001 From: Pavel Tovchigrechko <99090300+paveltovchigrechko@users.noreply.github.com> Date: Thu, 5 Jan 2023 17:38:49 +0600 Subject: [PATCH 132/149] Russian version. Version 02 (#3) * Beginner. Proof-reading, fixes, enhancements. Version 02 * Intermediate. Proof-reading, fixes, enhancements. Version 02 * Advanced. Proof-reading, fixes, enhancements. Version 02 * Bibliography, History, Glossary. Version 02 --- .../Personal-Skills/01-Learn-To-Debug.md | 16 ++--- ...to-Debug-by-Splitting-the-Problem-Space.md | 14 ++-- .../03-How-to-Remove-an-Error.md | 8 +-- .../04-How-to-Debug-Using-a-Log.md | 12 ++-- ...-How-to-Understand-Performance-Problems.md | 8 +-- .../06-How-to-Fix-Performance-Problems.md | 8 +-- .../07-How-to-Optimize-Loops.md | 18 ++--- .../08-How-to-Deal-with-IO-Expense.md | 8 +-- .../09-How-to-Manage-Memory.md | 10 +-- .../10-How-to-Deal-with-Intermittent-Bugs.md | 10 +-- .../12-How-to-Conduct-Experiments.md | 10 +-- ru/1-Beginner/README.md | 2 +- .../01-Why-Estimation-is-Important.md | 2 +- .../02-How-to-Estimate-Programming-Time.md | 4 +- .../03-How-to-Find-Out-Information.md | 6 +- ...o-Utilize-People-as-Information-Sources.md | 4 +- .../Team-Skills/05-How-to-Document-Wisely.md | 12 ++-- .../06-How-to-Work-with-Poor-Code.md | 4 +- .../07-How-to-Use-Source-Code-Control.md | 4 +- .../Team-Skills/08-How-to-Unit-Test.md | 4 +- .../10-How-to-Recognize-When-to-Go-Home.md | 10 +-- .../11-How-to-Deal-with-Difficult-People.md | 8 +-- ...adeoff-Quality-Against-Development-Time.md | 4 +- ...ow-to-Manage-Software-System-Dependence.md | 2 +- ...w-to-Decide-if-Software-is-Too-Immature.md | 7 +- .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 2 +- .../Judgment/05-How-to-Grow-Professionally.md | 4 +- .../06-How-to-Evaluate-Interviewees.md | 12 ++-- ...ow-When-to-Apply-Fancy-Computer-Science.md | 8 +-- .../08-How-to-Talk-to-Non-Engineers.md | 12 ++-- .../01-How-to-Stay-Motivated.md | 12 ++-- .../02-How-to-be-Widely-Trusted.md | 4 +- .../03-How-to-Tradeoff-Time-vs-Space.md | 8 +-- .../Personal-Skills/04-How-to-Stress-Test.md | 10 +-- ...-How-to-Balance-Brevity-and-Abstraction.md | 7 +- .../06-How-to-Learn-New-Skills.md | 10 +-- .../Personal-Skills/07-Learn-to-Type.md | 4 +- .../08-How-to-Do-Integration-Testing.md | 6 +- .../09-Communication-Languages.md | 4 +- .../Personal-Skills/10-Heavy-Tools.md | 2 +- .../Personal-Skills/11-How-to-analyze-data.md | 6 +- ru/2-Intermediate/README.md | 4 +- .../01-How-to-Manage-Development-Time.md | 8 +-- ...ow-to-Manage-Third-Party-Software-Risks.md | 6 +- .../03-How-to-Manage-Consultants.md | 4 +- ...-Disagree-Honestly-and-Get-Away-with-It.md | 4 +- .../01-How-to-Fight-Schedule-Pressure.md | 8 +-- .../02-How-to-Understand-the-User.md | 8 +-- .../03-How-to-Get-a-Promotion.md | 10 +-- .../01-How-to-Develop-Talent.md | 10 +-- ...How-to-Get-the-Most-From-Your-Teammates.md | 6 +- .../04-How-to-Divide-Problems-Up.md | 6 +- .../05-How-to-Handle-Boring-Tasks.md | 4 +- .../06-How-to-Gather-Support-for-a-Project.md | 2 +- .../07-How-to-Grow-a-System.md | 12 ++-- .../08-How-to-Communicate-Well.md | 6 +- ...ll-People-Things-They-Dont-Want-to-Hear.md | 4 +- .../10-How-to-Deal-with-Managerial-Myths.md | 4 +- ...1-How-to-Deal-with-Organizational-Chaos.md | 4 +- .../02-How-to-Utilize-Embedded-Languages.md | 6 +- .../03-Choosing-Languages.md | 14 ++-- ru/5-Bibliography.md | 2 +- ru/6-History.md | 50 ++++++------- ru/GLOSSARY.md | 72 +++---------------- ru/README.md | 6 +- 65 files changed, 254 insertions(+), 312 deletions(-) diff --git a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index fef5247..763811a 100644 --- a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -2,20 +2,20 @@ [//]: # (Version:1.0.0) Отладка Ñто краеугольный камень профеÑÑии программиÑта. ОÑновное значение Ñлова "debug" Ñто "уÑтранÑть ошибки", но значение, которое имеет реальный веÑ, Ñто "видеть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, Ð¸Ð·ÑƒÑ‡Ð°Ñ ÐµÐµ код". ПрограммиÑÑ‚, который не умеет Ñффективно отлаживать, Ñлеп. -Те идеалиÑты, которые Ñчитают, что дизайн, анализ, Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений и подобное более фундаментальны, чем отладка, не ÑвлÑÑŽÑ‚ÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰Ð¸Ð¼Ð¸ программиÑтами. Работающий программиÑÑ‚ не живет в идеальном мире. Даже еÑли вы идеальны, вы окружены и вынуждены работать Ñ ÐºÐ¾Ð´Ð¾Ð¼, который напиÑан в больших корпорациÑÑ…, организациÑÑ… вроде GNU и вашими коллегами. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть Ñтого кода неидеальна, и она неидеально задокументирована. Без ÑпоÑобноÑти видеть иÑполнение Ñтого кода, малейшее неÑоответÑтвие выбьет Ð²Ð°Ñ Ð¸Ð· колеи. ЧаÑто увидеть Ñто можно только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑкÑперимента, то еÑть, отладки. +Те идеалиÑты, которые Ñчитают, что дизайн, анализ, Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений и подобное более фундаментальны, чем отладка, врÑд ли ÑвлÑÑŽÑ‚ÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰Ð¸Ð¼Ð¸ программиÑтами. Работающий программиÑÑ‚ не живет в идеальном мире. Даже еÑли вы идеальны, вы окружены и вынуждены работать Ñ ÐºÐ¾Ð´Ð¾Ð¼, который напиÑан в больших корпорациÑÑ…, организациÑÑ… вроде GNU и вашими коллегами. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть Ñтого кода неидеальна, и она неидеально задокументирована. Без ÑпоÑобноÑти видеть иÑполнение Ñтого кода, малейший баг выбьет Ð²Ð°Ñ Ð¸Ð· колеи. ЧаÑто увидеть иÑполнение можно только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑкÑперимента, то еÑть, отладки. -Отладка больше занимаетÑÑ Ð¸Ñполнением программ, чем Ñамими программами. ЕÑли вы купите программное обеÑпечение от большой компании, то обычно вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут возникать моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Обычно вы при работе Ñоздаете ошибку, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, откуда возникла ошибка. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. +Отладка больше каÑаетÑÑ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼, чем Ñамих программ. ЕÑли вы купите программное обеÑпечение от большой компании, то как правило вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Обычно вы при работе Ñоздаете баг, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, как он возник. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. -Чтобы понÑть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, вы должны иметь возможноÑть запуÑтить ее и наблюдать ход иÑполнениÑ. Иногда ошибка видна визуально, например, еÑли она отображаетÑÑ Ð½Ð° Ñкране или между ÑобытиÑми в программе очевидна непредуÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°. Во многих других ÑлучаÑÑ…, ошибка ÑвÑзана Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÑŒ непоÑредÑтвенно, например, Ñ ÑоÑтоÑнием переменных, конкретными Ñтроками кода, иÑполнÑющиеÑÑ Ð² данный момент, либо Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñми внутри Ñложной Ñтруктуры данных. Эти Ñкрытые факторы надо выÑÑнить. +Чтобы понÑть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, вы должны иметь возможноÑть запуÑтить ее и наблюдать ход иÑполнениÑ. Иногда баг виден визуально, например, еÑли он отображаетÑÑ Ð½Ð° Ñкране или между ÑобытиÑми в программе очевидна непредуÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°. Во многих других ÑлучаÑÑ…, баг ÑвÑзан Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÑŒ непоÑредÑтвенно, например, Ñ ÑоÑтоÑнием переменных, конкретными Ñтроками кода, иÑполнÑющиеÑÑ Ð² данный момент, либо Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñми внутри Ñложной Ñтруктуры данных. Эти Ñкрытые факторы надо выÑÑнить. РаÑпроÑтраненные методы Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸Ñ "внутренноÑтей" программы можно поделить на: -- ИÑпользование отладчика, -- Printlining --- внеÑение временных модификаций в программу, обычно выводÑщих информацию о ее текущем ÑоÑтоÑнии, -- Логирование --- Ñоздание поÑтоÑнного интерфейÑа, который выводит ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ в виде отчета. +- ИÑпользование отладчика +- Вывод в конÑоль - внеÑение временных модификаций в программу, обычно выводÑщих информацию о ее текущем ÑоÑтоÑнии +- Логирование - Ñоздание поÑтоÑнного интерфейÑа, который выводит ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ в виде отчета -Отладчики Ñто прекраÑное ÑредÑтво, когда они Ñтабильны и доÑтупны, но printlining и логирование гораздо важнее. Отладчики чаÑто отÑтают от Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð¸Ñ Ñзыков программированиÑ, так что они могут быть доÑтупны не в каждый момент времени. К тому же, некоторые отладчики могут незначительно изменÑть ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, поÑтому применÑть их в Ñтих ÑлучаÑÑ… непрактично. Ðаконец, ÑущеÑтвуют виды отладки, такие как проверка утверждений в большой Ñтруктуре данных, которые требуют напиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кода и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð° иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Таким образом, Ñто важно знать, как пользоватьÑÑ Ð¾Ñ‚Ð»Ð°Ð´Ñ‡Ð¸ÐºÐ°Ð¼Ð¸, когда они доÑтупны, но критично важно уметь иÑпользовать два оÑтавшихÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð° отладки. +Отладчики Ñто прекраÑное ÑредÑтво, когда они Ñтабильны и доÑтупны, но вывод в конÑоль и логирование гораздо важнее. Отладчики чаÑто отÑтают от Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð¸Ñ Ñзыков программированиÑ, так что они могут быть доÑтупны не в каждый момент времени. К тому же, некоторые отладчики могут незначительно изменÑть ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, поÑтому применÑть их в Ñтих ÑлучаÑÑ… непрактично. Ðаконец, ÑущеÑтвуют виды отладки, такие как проверка утверждений в большой Ñтруктуре данных, которые требуют напиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кода и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð° иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Так что важно знать, как пользоватьÑÑ Ð¾Ñ‚Ð»Ð°Ð´Ñ‡Ð¸ÐºÐ°Ð¼Ð¸, когда они доÑтупны, но критично важно уметь иÑпользовать два оÑтавшихÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð°. -Ðекоторые начинающие программиÑта боÑÑ‚ÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, еÑли та требует Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°. Это можно понÑть, Ñто немного похоже на вÑкрытие Ñ Ð¸ÑÑледовательÑкими целÑми. Ðо вы должны научитьÑÑ Ñ‚Ñ‹ÐºÐ°Ñ‚ÑŒ и дергать Ñвой код, ÑкÑпериментировать Ñ Ð½Ð¸Ð¼ и понимать, что ничего из того, что вы временно делаете Ñ Ð½Ð¸Ð¼, не Ñделает его хуже. ЕÑли у Ð²Ð°Ñ ÐµÑть такой Ñтрах, найдите наÑтавника. Мы терÑем множеÑтво хороших программиÑтов в Ñамом начале их Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·-за Ñтого Ñтраха. +Ðекоторые начинающие программиÑта боÑÑ‚ÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, еÑли та требует Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°. Это можно понÑть, ведь Ñто немного похоже на вÑкрытие Ñ Ð¸ÑÑледовательÑкими целÑми. Ðо вы должны научитьÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ñвой код, ÑкÑпериментировать Ñ Ð½Ð¸Ð¼ и понимать, что ничего из того, что вы временно делаете Ñ Ð½Ð¸Ð¼, не Ñделает его хуже. ЕÑли у Ð²Ð°Ñ ÐµÑть такой Ñтрах, найдите наÑтавника. Мы терÑем множеÑтво хороших программиÑтов в Ñамом начале их Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·-за Ñтого Ñтраха. Следующее: [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md index eeff6b5..6f7c1db 100644 --- a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md +++ b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -1,15 +1,15 @@ # Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы [//]: # (Version:1.0.0) -Отладка Ñто интереÑно, потому что она начинаетÑÑ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð’Ñ‹ думаете, что программа делает одно, но на Ñамом деле она делает что-то другое. Ðе вÑегда Ñто наÑтолько проÑто, вÑе примеры, которые Ñ Ð¼Ð¾Ð³ бы привеÑти, будут надуманными по Ñравнению Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ÑлучаÑми. Отладка требует творчеÑтва и изобретательноÑти. ЕÑли и еÑть какой-то один ключ к отладке, то он заключаетÑÑ Ð² приеме "разделÑй и влаÑтвуй" в отношении проблемы. +Отладка Ñто интереÑно, потому что она начинаетÑÑ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð’Ñ‹ думаете, что программа делает одно, но на Ñамом деле она делает что-то другое. Ðе вÑегда Ñто наÑтолько проÑто, но вÑе примеры, которые Ñ Ð¼Ð¾Ð³ бы привеÑти, будут надуманными по Ñравнению Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ÑлучаÑми. Отладка требует творчеÑтва и изобретательноÑти. ЕÑли и еÑть какой-то один ключ к отладке, то он заключаетÑÑ Ð² приеме "разделÑй и влаÑтвуй" в отношении проблемы. -Предположим, к примеру, что вы напиÑали программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ выполнÑть деÑÑть инÑтрукций подрÑд. Затем вы запуÑкаете ее, и она вылетает. ПоÑкольку вы не планировали вылет программы, у Ð²Ð°Ñ Ð¿Ð¾ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Когда вы Ñмотрите на вывод программы, вы видите, что первые Ñемь инÑтрукций были выполнены уÑпешно. ОÑтавшиеÑÑ Ñ‚Ñ€Ð¸ инÑтрукции не видны в выводе, поÑтому проÑтранÑтво проблемы ÑужаетÑÑ: программа вылетает либо на воÑьмой, либо на девÑтой, либо на деÑÑтой инÑтрукции. +Предположим, к примеру, что вы напиÑали программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° выполнÑть деÑÑть инÑтрукций подрÑд. Затем вы запуÑкаете ее, и она вылетает. ПоÑкольку вы не планировали вылет программы, у Ð²Ð°Ñ Ð¿Ð¾ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Когда вы Ñмотрите на вывод программы, вы видите, что первые Ñемь инÑтрукций были выполнены уÑпешно. ОÑтавшиеÑÑ Ñ‚Ñ€Ð¸ инÑтрукции не видны в выводе, поÑтому проÑтранÑтво проблемы ÑужаетÑÑ: программа вылетает либо на воÑьмой, либо на девÑтой, либо на деÑÑтой инÑтрукции. -Сможете ли вы поÑтавить ÑкÑперимент, чтобы увидеть, где вылетает программа? Конечно. Ð’Ñ‹ можете иÑпользовать отладчик или добавить printline statements (либо их Ñквивалент на вашем Ñзыке программированиÑ) поÑле воÑьмой и девÑтой инÑтрукций. Когда вы запуÑтите программу Ñнова, проÑтранÑтво проблемы Ñтанет еще уже, например, вы увидите, что программа вылетает на девÑтой инÑтрукции. Я Ñчитаю, что помнить о точном проÑтранÑтве проблемы помогает ÑоÑредоточитьÑÑ Ð½Ð° ее решении. Когда неÑколько человек работают под давлением над задачей, очень легко забыть о том, что ÑвлÑетÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой в ней. +Сможете ли вы поÑтавить ÑкÑперимент, чтобы увидеть, где вылетает программа? Конечно. Ð’Ñ‹ можете иÑпользовать отладчик или добавить вывод в конÑоль (либо их Ñквивалент на вашем Ñзыке программированиÑ) поÑле воÑьмой и девÑтой инÑтрукций. Когда вы запуÑтите программу Ñнова, проÑтранÑтво проблемы Ñтанет еще уже, например, вы увидите, что программа вылетает на девÑтой инÑтрукции. Я Ñчитаю, что помнить о точном определении проблемы помогает ÑоÑредоточитьÑÑ Ð½Ð° ее решении. Когда неÑколько человек работают под давлением и ÑтреÑÑом над задачей, очень легко забыть о том, что в ней ÑвлÑетÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой. -Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, напополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°? Именно здеÑÑŒ на помощь приходÑÑ‚ изобретательноÑть и опыт. +Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, напополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° и которое Ñледует поделить пополам? Именно здеÑÑŒ на помощь приходÑÑ‚ изобретательноÑть и опыт. -Ðачинающим программиÑтам кажетÑÑ, что ошибка может быть в каждой Ñтроке кода. У них еще нет того Ð²Ð¸Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, которое поÑвитÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼. Они не видÑÑ‚ вÑе ÑвойÑтва и факторы программы, такие как проÑтранÑтво иÑполнÑемого кода, Ñтруктура данных, управление памÑтью, взаимодейÑтвие Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¼ кодом, риÑкованный код, проÑтой код. Ð”Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ð¾Ð³Ð¾ программиÑта Ñти факторы ÑоÑтавлÑÑŽÑ‚ неполную, но крайне полезную модель вÑего того, что может пойти не так. Ðаличие такой модели в голове очень Ñффективно помогает обнаружить точное меÑто проблемы. +Ðачинающим программиÑтам кажетÑÑ, что ошибка может быть в каждой Ñтроке кода. У них еще нет того Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, которое поÑвитÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼. Они не видÑÑ‚ вÑе ÑвойÑтва и факторы программы, такие как проÑтранÑтво иÑполнÑемого кода, Ñтруктура данных, управление памÑтью, взаимодейÑтвие Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¼ кодом, риÑкованный код, проÑтой код. Ð”Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ð¾Ð³Ð¾ программиÑта Ñти факторы ÑоÑтавлÑÑŽÑ‚ неполную, но крайне полезную модель вÑего того, что может пойти не так. Ðаличие такой модели в голове очень Ñффективно помогает обнаружить точное меÑто проблемы. -Когда вы разделили вÑе проÑтранÑтво программы на вÑе меÑта, где может быть ошибка, вы предÑтоит определить, где именно она находитÑÑ. Ð’ проÑтом Ñлучае, когда Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñтоит как "Ð’ какой неизвеÑтной мне Ñтроке падает программа?", вы можете ÑпроÑить ÑебÑ: "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¼Ð½Ðµ Ñтрока Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ находитÑÑ Ð´Ð¾ или поÑле Ñтой Ñтроки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾ моему мнению должна иÑполнÑтьÑÑ Ð² Ñередине программы?" Как правило, вы будете не наÑтолько удачливы, чтобы обнаружить, что ошибка кроетÑÑ Ð² одной Ñтроке или даже в одном блоке кода. Чаще проблема будет звучать как "Либо в Ñтом графе еÑть указатель на некорректный объект, либо мой алгоритм некорректно Ñкладывает переменные в Ñтом графе". Ð’ Ñтом Ñлучае, возможно, вам придетÑÑ Ð½Ð°Ð¿Ð¸Ñать небольшую программу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ указателей, чтобы решить, какую из чаÑтей Ñтого проÑтранÑтва проблемы можно иÑключить. +Когда вы разделили вÑе проÑтранÑтво программы на вÑе меÑта, где может быть ошибка, вам предÑтоит определить, где именно она находитÑÑ. Ð’ проÑтом Ñлучае, когда Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñтоит как "Ð’ какой неизвеÑтной мне Ñтроке падает программа?", вы можете ÑпроÑить ÑебÑ: "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¼Ð½Ðµ Ñтрока Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ находитÑÑ Ð´Ð¾ или поÑле Ñтой Ñтроки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾ моему мнению должна иÑполнÑтьÑÑ Ð² Ñередине программы?" Как правило, вы будете не наÑтолько удачливы, чтобы обнаружить, что ошибка кроетÑÑ Ð² одной Ñтроке или даже в одном блоке кода. Чаще проблема будет звучать как "Либо в Ñтом графе еÑть указатель на некорректный объект, либо мой алгоритм некорректно Ñкладывает переменные в Ñтом графе". Ð’ Ñтом Ñлучае, возможно, вам придетÑÑ Ð½Ð°Ð¿Ð¸Ñать небольшую программу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ указателей, чтобы решить, какую из чаÑтей Ñтого проÑтранÑтва проблемы можно иÑключить. -Следующее: [Как уÑтранÑть ошибки](03-How-to-Remove-an-Error.md) +Следующее: [Как уÑтранÑть баги](03-How-to-Remove-an-Error.md) diff --git a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index acea68c..9531023 100644 --- a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -1,9 +1,9 @@ -# Как уÑтранÑть ошибки +# Как уÑтранÑть баги [//]: # (Version:1.0.0) -Я намеренно разделил иÑÑледование хода иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ от иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. Ðо, разумеетÑÑ, отладка означает и уÑтранение ошибки. Ð’ идеале вы прекраÑно поймете код и поймаете "Ðга"-момент, когда вы четко увидите ошибку и как ее иÑправить. Ðо Ñто не вÑегда будет возможно, поÑкольку зачаÑтую ваша программа будет иÑпользовать недоÑтаточно документированные Ñторонние ÑиÑтемы, наÑчет которых у Ð²Ð°Ñ Ð½Ðµ будет полной ÑÑноÑти. Ð’ других ÑлучаÑÑ… Ñам код будет наÑтолько Ñложен, что ваше понимание его будет неÑовершенным. +Я намеренно разделил иÑÑледование хода иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ от иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð³Ð¾Ð². Ðо, разумеетÑÑ, отладка означает и уÑтранение ошибки. Ð’ идеале вы прекраÑно поймете код и поймаете "Ðга"-момент, когда вы четко увидите баг и ÑпоÑоб иÑправить его. Ðо Ñто не вÑегда будет возможно, поÑкольку зачаÑтую ваша программа будет иÑпользовать недоÑтаточно документированные Ñторонние ÑиÑтемы, наÑчет работы которых у Ð²Ð°Ñ Ð½Ðµ будет полной ÑÑноÑти. Ð’ других ÑлучаÑÑ… Ñам код будет наÑтолько Ñложен, что ваше понимание его будет неÑовершенным. -При иÑправлении ошибки важно внеÑти наименьшие изменениÑ, которые ее иÑправÑÑ‚. Ð’Ñ‹ можете заметить другие меÑта в коде, которые потребуют улучшений, но не вноÑите их одновременно Ñ Ð¸Ñправлением ошибки. СтарайтеÑÑŒ применÑть научный метод: изменÑть только одно зараз. Лучший ÑпоÑоб Ð´Ð»Ñ Ñтого: воÑпроизвеÑти ошибку, внеÑти иÑправлениÑ, затем перезапуÑтить программу и убедитьÑÑ, что ошибки больше нет. Конечно, иногда придетÑÑ Ð¼ÐµÐ½Ñть не одну, а неÑколько Ñтрок кода, но концептуально вÑе равно ÑтарайтеÑÑŒ вноÑить точечные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. +При иÑправлении бага важно внеÑти наименьшие изменениÑ, которые его уÑтранÑÑ‚. Ð’Ñ‹ можете заметить другие меÑта в коде, которые потребуют улучшений, но не вноÑите их одновременно Ñ Ð¸Ñправлением ошибки. СтарайтеÑÑŒ применÑть научный метод: изменÑть только одно зараз. Лучший ÑпоÑоб Ð´Ð»Ñ Ñтого: воÑпроизвеÑти баг, внеÑти иÑправлениÑ, затем перезапуÑтить программу и убедитьÑÑ, что бага больше нет. Конечно, иногда придетÑÑ Ð¼ÐµÐ½Ñть не одну, а неÑколько Ñтрок кода, но концептуально вÑе равно ÑтарайтеÑÑŒ вноÑить точечные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. -Иногда в программе приÑутÑтвует неÑколько ошибок, очень похожих друг на друга. Определить их и иÑправить --- Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае, вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир иногда бывает нерÑшлив. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. +Иногда в программе приÑутÑтвует неÑколько багов, очень похожих друг на друга. Определить их и иÑправить по одному - Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае, вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир чаÑто бывает беÑпорÑдочен. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. Следующее: [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 1d5e750..6933061 100644 --- a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -1,13 +1,13 @@ # Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸ [//]: # (Version:1.0.0) -Логирование Ñто практика напиÑÐ°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼ таким образом, что они выдают поÑледовательноÑть информативных запиÑей, называемых логом. Printlining Ñто Ñоздание небольшого, обычно временного лога. Ðачинающие программиÑты должны понимать и иÑпользовать логи, поÑкольку их Ð·Ð½Ð°Ð½Ð¸Ñ Ð² программировании ограничены. СиÑтемные архитекторы должны понимать и иÑпользовать логи, потому что они работают Ñо Ñложными ÑиÑтемами. КоличеÑтво информации, которую выдает лог, должно быть наÑтраиваемым, желательно во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Ð’ общем Ñлучае, логирование имеет три оÑновных преимущеÑтва: +Логирование - Ñто практика напиÑÐ°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼ таким образом, что они выдают поÑледовательноÑть информативных запиÑей, называемых логом. Вывод в конÑоль - Ñто Ñоздание небольшого, обычно временного лога. Ðачинающие программиÑты должны понимать и иÑпользовать логи, поÑкольку их Ð·Ð½Ð°Ð½Ð¸Ñ Ð² программировании ограничены. СиÑтемные архитекторы должны понимать и иÑпользовать логи, потому что они работают Ñо Ñложными ÑиÑтемами. КоличеÑтво информации, которую выдает лог, должно быть наÑтраиваемым, желательно во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Ð’ общем Ñлучае, логирование имеет три оÑновных преимущеÑтва: -- Логи могут дать полезную информацию о багах, которые трудно воÑпроизвеÑти (например, такие, которые воÑпроизводÑÑ‚ÑÑ Ð½Ð° боевом окружении, но не на теÑтовом). -- Логи могут веÑти ÑтатиÑтику и данные о производительноÑти, такие как Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ выполнением команд. -- ЕÑли логи наÑтраиваемы, то они помогают Ñобрать общую информацию Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ñ‹Ñ… ÑпецифичеÑких проблем без необходимоÑти модифицировать или перезапуÑкать код. +- Логи могут дать полезную информацию о багах, которые трудно воÑпроизвеÑти (например, такие, которые воÑпроизводÑÑ‚ÑÑ Ð½Ð° боевом окружении, но не на теÑтовом) +- Логи могут давать ÑтатиÑтику и данные о производительноÑти, такие как Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ выполнением команд +- ЕÑли логи наÑтраиваемы, то они помогают Ñобрать общую информацию Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ñ‹Ñ… ÑпецифичеÑких проблем без необходимоÑти модифицировать или перезапуÑкать код -КоличеÑтво выводимой в лог информации Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ информативноÑтью и краткоÑтью. Избыток информации Ñделает лог Ñ‚Ñжелым и вызовет *Ñлепоту прокрутки*, уÑложнÑÑ Ð¿Ð¾Ð¸Ñк нужного. ÐедоÑтаток информации может проÑто Ñделать лог беÑполезным. По Ñтой причине полезно делать логи наÑтраиваемыми. Как правило, ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в логе отображает Ñвое меÑто в иÑходном коде, иÑполнÑющий ее поток, еÑли он еÑть, точное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸, обычно, Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ñ€Ð¾Ð´Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹, объем Ñвободной памÑти, чиÑло объектов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и так далее. Эти запиÑи покрывают веÑÑŒ иÑходный код, оÑобенно оÑновные функциональные узлы и риÑкованный код. ЗапиÑи можно раÑпределить по уровнÑм, и наÑтраивать в конфигурации вывод только запиÑей определенного уровнÑ. Лог Ñледует проектировать таким образом, чтобы его запиÑи помогали решать проблемы программы, которые вы предвидите. ПредуÑматривайте и проблему Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти. +КоличеÑтво выводимой в лог информации Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ информативноÑтью и краткоÑтью. Избыток информации Ñделает лог Ñ‚Ñжелым и вызовет *Ñлепоту прокрутки*, уÑложнÑÑ Ð¿Ð¾Ð¸Ñк нужного. ÐедоÑтаток информации может проÑто Ñделать лог беÑполезным. По Ñтой причине полезно делать логи наÑтраиваемыми. Как правило, ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в логе отображает Ñвое меÑто в иÑходном коде, иÑполнÑющий ее поток, еÑли он еÑть, точное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸, обычно, дополнительную информацию вроде значений переменных, объем Ñвободной памÑти, чиÑло объектов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и так далее. Эти запиÑи покрывают веÑÑŒ иÑходный код, оÑобенно оÑновные функциональные узлы и риÑкованный код. ЗапиÑи можно раÑпределить по уровнÑм, и наÑтраивать в конфигурации вывод только запиÑей определенного уровнÑ. Лог Ñледует проектировать таким образом, чтобы его запиÑи помогали решать проблемы программы, которые вы предвидите. ПредуÑматривайте и проблему Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти. -ЕÑли у Ð²Ð°Ñ ÐµÑть поÑтоÑнный лог, printlining можно выполнить в рамках запиÑей лога, и некоторые из отладочных Ñообщений Ñтоит перманентно включить в ÑиÑтему логированиÑ. +ЕÑли у Ð²Ð°Ñ ÐµÑть поÑтоÑнный лог, вывод в конÑоль можно выполнить в рамках запиÑей лога, и некоторые из отладочных Ñообщений Ñтоит перманентно включить в ÑиÑтему логированиÑ. Следующее: [Как определÑть проблемы производительноÑти](05-How-to-Understand-Performance-Problems.md) diff --git a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index bf62f60..bb3ba1f 100644 --- a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -1,11 +1,11 @@ # Как определÑть проблемы производительноÑти [//]: # (Version:1.0.0) -Изучение проблем производительноÑти так же неизбежно, как оÑвоение отладки. Даже еÑли вы в точноÑти и ÑовершенÑтве понимаете затраты на иÑполнение вашего кода, он будет взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ программным обеÑпечением, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ будет такого ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¸Ð»Ð¸ пониманиÑ. Как бы то ни было, на практике проблемы производительноÑти немного отличаютÑÑ Ð¸ немного проще, чем отладка в целом. +Изучение проблем производительноÑти так же неизбежно, как оÑвоение отладки. Даже еÑли вы в точноÑти и ÑовершенÑтве понимаете затраты на иÑполнение вашего кода, он будет взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ программным обеÑпечением, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ будет такого ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¸Ð»Ð¸ пониманиÑ. Как бы то ни было, на практике проблемы производительноÑти немного отличаютÑÑ Ð¸ проще, чем отладка в целом. -Предположим, что вы или ваши клиенты Ñчитают ÑиÑтему или одну из подÑиÑтем Ñлишком медленной. Перед тем, как вы попытаетеÑÑŒ уÑкорить ее, вам Ñтоит поÑтроить мыÑленную модель и определить, почему она медленную. Ð’Ñ‹ можете иÑпользовать профилировщик или хороший лог, чтобы определить, где именно затрачиваетÑÑ Ð²Ñ€Ð²Ð¼Ñ Ð¸Ð»Ð¸ иной реÑÑƒÑ€Ñ ÑиÑтемы. СущеÑтвует извеÑтное утверждение, что 90% времени затрачиваетÑÑ Ð½Ð° 10% кода. Я бы добавил к Ñтому важноÑть затрат на чтение и запиÑÑŒ (I/O) в оценке проблем производительноÑти. ЧаÑто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð»Ð¸Ð±Ð¾ на чтение информации, либо на ее запиÑÑŒ. Хорошим первым шагом в поÑтроении мыÑленной модели проблемы будет нахождение затратных операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и 10% кода, занимающих большую чаÑть реÑурÑа. +Предположим, что вы или ваши клиенты Ñчитают ÑиÑтему или одну из подÑиÑтем Ñлишком медленной. Перед тем, как вы попытаетеÑÑŒ уÑкорить ее, вам Ñтоит поÑтроить мыÑленную модель и определить, почему она медленнаÑ. Ð’Ñ‹ можете иÑпользовать профилировщик или хороший лог, чтобы определить, где именно затрачиваетÑÑ Ð²Ñ€Ð²Ð¼Ñ Ð¸Ð»Ð¸ иной реÑÑƒÑ€Ñ ÑиÑтемы. СущеÑтвует извеÑтное утверждение, что 90% времени затрачиваетÑÑ Ð½Ð° 10% кода. Я бы добавил к Ñтому важноÑть затрат на чтение и запиÑÑŒ в оценке проблем производительноÑти. ЧаÑто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð»Ð¸Ð±Ð¾ на чтение информации, либо на ее запиÑÑŒ. Хорошим первым шагом в поÑтроении мыÑленной модели проблемы будет нахождение затратных операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и 10% кода, занимающих большую чаÑть реÑурÑа. -СущеÑтвует множеÑтво измерений в производительноÑти компьютерной ÑиÑтемы и множеÑтво потреблÑемых реÑурÑов. Первое, что Ñтоит измерить, Ñто реальное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение программы. Логирование Ñтого времени оÑобенно полезно тем, что оно может указать на непредвиденные обÑтоÑтельÑтва, которые возникают в ÑитуациÑÑ…, когда иÑпоьлзование профилировщика непрактично. Однако, Ñтот параметр не вÑегда дает полную картину проиÑходÑщего. Иногда вычиÑлениÑ, которые требуют чуть больше общего времени, но занимают меньше процеÑÑорного времени, покажут ÑÐµÐ±Ñ Ð»ÑƒÑ‡ÑˆÐµ в реальном окружении. Ðналогично, памÑть, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети, доÑтуп к базе данных или другому Ñерверу могут оказатьÑÑ, в конечном Ñчете, гораздо дороже, чем процеÑÑорное времÑ. +СущеÑтвует множеÑтво измерений в производительноÑти компьютерной ÑиÑтемы и множеÑтво потреблÑемых реÑурÑов. Первое, что Ñтоит измерить, Ñто реальное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение программы. Логирование Ñтого времени оÑобенно полезно тем, что оно может указать на непредвиденные обÑтоÑтельÑтва, которые возникают в ÑитуациÑÑ…, когда иÑпользовать профилировщик непрактично. Однако, Ñтот параметр не вÑегда дает полную картину проиÑходÑщего. Иногда вычиÑлениÑ, которые требуют чуть больше общего времени, но занимают меньше процеÑÑорного времени, покажут ÑÐµÐ±Ñ Ð»ÑƒÑ‡ÑˆÐµ в реальном окружении. Ðналогично, памÑть, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети, доÑтуп к базе данных или другому Ñерверу могут оказатьÑÑ, в конечном Ñчете, гораздо дороже, чем процеÑÑорное времÑ. -ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° Ñто невозможноÑть продолжить иÑпонение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли она не ÑлучитÑÑ, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. +ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° - Ñто невозможноÑть продолжить иÑпонение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод - Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли загруженноÑть не произойдет, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. Следующее: [Как уÑтранÑть проблемы производительноÑти](06-How-to-Fix-Performance-Problems.md) diff --git a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index 78241c3..0dca667 100644 --- a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -1,13 +1,13 @@ # Как уÑтранÑть проблемы производительноÑти [//]: # (Version:1.0.0) -БольшинÑтво проектов можно Ñ Ð¾Ñ‚Ð½Ð¾Ñительно небольшими уÑилиÑми уÑкорить в 10-100 раз отноÑительно их первой верÑии. Ð’ уÑловиÑÑ… Ñжатых Ñроков ыхода на рынок разумно и Ñффективно выбирать ту реализацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ñ‰Ðµ и быÑтрее оÑтальных. Однако, производительноÑть Ñто чаÑть удобÑтва иÑпользованиÑ, поÑтому чаÑто ее Ñтоит оценить более внимательно. +БольшинÑтво проектов можно Ñ Ð¾Ñ‚Ð½Ð¾Ñительно небольшими уÑилиÑми уÑкорить в 10-100 раз отноÑительно их первой верÑии. Ð’ уÑловиÑÑ… Ñжатых Ñроков ыыхода на рынок разумно и Ñффективно выбирать ту реализацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ñ‰Ðµ и быÑтрее оÑтальных. Однако, производительноÑть Ñто чаÑть удобÑтва иÑпользованиÑ, поÑтому чаÑто ее Ñтоит оценивать более внимательно. -Главное в улучшении производительноÑти Ñложной ÑиÑтемы Ñто проанализировать ее доÑтаточно тщательно, чтобы найти "узкие меÑта", то еÑть те меÑта, где запрашиваетÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¹ объем реÑурÑов. Ðет большого ÑмыÑла оптимизировать функцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ только 1% процеÑÑорного времени. ЕÑли вы не уверены, что изменение уÑкорит ÑиÑтему или ее значительную чаÑть Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ в два раза, то Ñтоит хорошо подумать, Ñтоит ли Ñто вообще делать. Как правило, еÑть такие ÑпоÑобы. Оценивайте также затраты на теÑтирование и проверки, которые потребует ваше уÑкорение. Каждое изменение кода приноÑит Ñ Ñобой необходимоÑть теÑтированиÑ, поÑтому лучше иметь немного больших изменений. +Главное в улучшении производительноÑти Ñложной ÑиÑтемы - Ñто проанализировать ее доÑтаточно тщательно, чтобы найти "узкие меÑта", то еÑть те меÑта, где запрашиваетÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¹ объем реÑурÑов. Ðет большого ÑмыÑла оптимизировать функцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ только 1% процеÑÑорного времени. ЕÑли вы не уверены, что изменение уÑкорит ÑиÑтему или ее значительную чаÑть Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ в два раза, то Ñтоит хорошо подумать, Ñтоит ли Ñто вообще делать. Как правило, такие ÑпоÑобы уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ ÐµÑть. Оценивайте также затраты на теÑтирование и проверки, которые потребует ваше изменение кода. Каждое изменение кода влечет за Ñобой необходимоÑть теÑтированиÑ, поÑтому лучше иметь немного больших изменений. ПоÑле того, как вы добилиÑÑŒ двукратного ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти в одном меÑте, Ñтоит Ñнова провеÑти анализ программы и определить Ñледующее по затратам узкое меÑто. Тогда можно занÑтьÑÑ Ð¸Ð¼. -ЧаÑто узкие меÑта в производительноÑти будут предÑтавлÑть Ñобой что-то вроде подÑчета коров по ногам и делению на четыре вмеÑто обычного подÑчета по головам. Ðапример, Ñ Ñ‡Ð°Ñто забывал дать ÑобÑтвенный Ð¸Ð½Ð´ÐµÐºÑ Ñтолбцу в релÑционной базе ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, что замедлÑло веÑÑŒ процеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ в 20 раз. Среди других примеров: ненужные операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в циклах, отладочные ÑообщениÑ, Ñтавшие неактуальными, избыточное выделение памÑти и в оÑобенноÑти неумелое иÑпользование библиотек и Ñторонних фреймворков, которые плохо документированы в чаÑти производительноÑти. Такой вид улучшений легко определить и Ñ Ñ…Ð¾Ð´Ñƒ внеÑти в программу. +ЧаÑто узкие меÑта в производительноÑти будут предÑтавлÑть Ñобой что-то вроде подÑчета коров по ногам и делению на четыре вмеÑто обычного подÑчета по головам. Ðапример, Ñ Ñ‡Ð°Ñто забывал дать ÑобÑтвенный Ð¸Ð½Ð´ÐµÐºÑ Ñ‡Ð°Ñто запрашиваемому Ñтолбцу в релÑционной базе ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, что замедлÑло веÑÑŒ процеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ в 20 раз. Среди других примеров: ненужные операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в циклах, отладочные ÑообщениÑ, Ñтавшие неактуальными, избыточное выделение памÑти и в оÑобенноÑти неумелое иÑпользование библиотек и Ñторонних фреймворков, которые плохо документированы в чаÑти производительноÑти. Такой вид улучшений легко определить и Ñ Ñ…Ð¾Ð´Ñƒ внеÑти в программу. -Что делать, когда очевидных меÑÑ‚ Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ð¹ не оÑталоÑÑŒ? Ð’Ñ‹ можете продолжать иÑкать узкие меÑта на более глубоком уровне или переÑмотреть веÑÑŒ дизайн ÑиÑтемы. ПоÑледнее дает прекраную возможноÑть продемонÑтрировать Ñвои ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта не только в реализации нового дизайна ÑиÑтемы, но и в умении убедить Ñвоего боÑÑа в том, что Ñто необходимо. Тем не менее, перед тем, как вы начнете убеждать его в необходимоÑти коренных изменений, ÑпроÑите ÑебÑ, уÑкорить ли ваше решение ÑиÑтему в 5-10 раз. +Что делать, когда очевидных меÑÑ‚ Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ð¹ не оÑталоÑÑŒ? Ð’Ñ‹ можете продолжать иÑкать узкие меÑта на более глубоком уровне или переÑмотреть веÑÑŒ дизайн ÑиÑтемы. ПоÑледнее дает прекраную возможноÑть продемонÑтрировать Ñвои ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта не только в реализации нового дизайна ÑиÑтемы, но и в умении убедить Ñвоего боÑÑа в том, что Ñто необходимо. Тем не менее, перед тем, как вы начнете убеждать его в необходимоÑти коренных изменений, ÑпроÑите ÑебÑ, уÑкорит ли ваше решение ÑиÑтему в 5-10 раз. Следующее: [Как оптимизировать циклы](07-How-to-Optimize-Loops.md) diff --git a/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md index 4aafc84..34c39f5 100644 --- a/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md +++ b/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -1,15 +1,15 @@ # Как оптимизировать циклы [//]: # (Version:1.0.0) -Иногда вам повÑтречаютÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ñ‹Ðµ по времени циклы или рекурÑивные функции, которые окажутÑÑ ÑƒÐ·ÐºÐ¸Ð¼Ð¸ меÑтами в вашей программе. Перед тем, как вы попытаетеÑÑŒ уÑкорить цикл, потратьте некоторое Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° то, чтобы понÑть, можно ли избавитьÑÑ Ð¾Ñ‚ него полноÑтью. Сработает ли здеÑÑŒ какой-нибудь другой алгоритм? Можно ли вычиÑлить Ñто парамллельно Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ вычиÑлением? ЕÑли вам не удалоÑÑŒ найти обходной путь, тогда оптимизируйте цикл. Это проÑто: вынеÑите из него вÑе, что можно. Ð’ конце концов, Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ не только изобретательноÑти, но и пониманиÑ, Ñколько затрачиваетÑÑ Ð½Ð° каждое выражение и операцию. Вот неÑколько предложений: +Иногда вам будут вÑтречатьÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ñ‹Ðµ по времени циклы или рекурÑивные функции, которые окажутÑÑ ÑƒÐ·ÐºÐ¸Ð¼Ð¸ меÑтами в вашей программе. Перед тем, как вы попытаетеÑÑŒ уÑкорить цикл, потратьте некоторое Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° то, чтобы понÑть, можно ли избавитьÑÑ Ð¾Ñ‚ него полноÑтью. Сработает ли здеÑÑŒ какой-нибудь другой алгоритм? Можно ли вычиÑлить Ñто параллельно Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ вычиÑлением? ЕÑли вам не удалоÑÑŒ найти обходной путь, тогда оптимизируйте цикл. Это проÑто: вынеÑите из него вÑе, что можно. Ð’ конце концов, Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ не только изобретательноÑти, но и пониманиÑ, Ñколько затрачиваетÑÑ Ð½Ð° каждое выражение и операцию. Вот неÑколько предложений: -- Уберите операции Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой. -- Ðе размещайте впуÑтую новвые блоки под памÑть. -- Держите Ñ€Ñдом конÑтанты. -- Передвиньте операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в буфер. -- СтарайтеÑÑŒ не иÑпользовать деление. -- СтарайтеÑÑŒ не иÑпользовать затратные Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² данных. -- Перемещайте указатель вмеÑто того, чтобы переÑчитывать индекÑÑ‹. +- Уберите операции Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой +- Ðе выделÑйте впуÑтую новые блоки памÑти +- Держите конÑтанты в одном меÑте +- ВынеÑите операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в буфер +- СтарайтеÑÑŒ не иÑпользовать деление +- СтарайтеÑÑŒ не иÑпользовать затратные Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² данных +- Перемещайте указатель вмеÑто того, чтобы переÑчитывать индекÑÑ‹ -СтоимоÑть каждой из Ñтих операций завиÑит от вашей конкретной ÑиÑтемы. Где-то компилÑторы и аппаратное обеÑпечение выполнит их вмеÑто ваÑ. РазумнеетÑÑ, чиÑтый и Ñффективный код лучше, чем тот, который требует Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñпецифичной платформы. +СтоимоÑть каждой из Ñтих операций завиÑит от вашей конкретной ÑиÑтемы. Где-то компилÑторы и аппаратное обеÑпечение выполнит их вмеÑто ваÑ. РазумеетÑÑ, чиÑтый и Ñффективный код лучше, чем тот, который требует Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñпецифичной платформы. Следующее: [Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи](08-How-to-Deal-with-IO-Expense.md) diff --git a/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md index e0c467d..52500ff 100644 --- a/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md +++ b/ru/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -1,13 +1,13 @@ # Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи [//]: # (Version:1.0.0) -Ð’ большинÑтве Ñлучаев процеÑÑоры работают быÑтро по Ñравнению Ñо взаимодейÑтвием Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼Ð¸ уÑтройÑтвами. Затраты на Ñто взаимодейÑтвие обычно объединÑÑŽÑ‚ÑÑ Ð¿Ð¾Ð´ Ñловами операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и включают Ñетевые запроÑÑ‹, чтение и запиÑÑŒ на диÑки, запроÑÑ‹ в базы данных, чтение и запиÑÑŒ файлов и другое иÑпользование аппаратной чаÑти, иногда раÑположенной не ÑовÑем Ñ€Ñвдом Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑором. Так образом, поÑтроение быÑтрой ÑиÑтемы Ñто чаще улучшение операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, чем улучшение кода в цикле или даже ÑовершенÑтвование алгоритма. +Ð’ большинÑтве Ñлучаев процеÑÑоры Ñами по Ñебе работают быÑтро по Ñравнению Ñо взаимодейÑтвием Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼Ð¸ уÑтройÑтвами. Затраты на Ñто взаимодейÑтвие обычно объединÑÑŽÑ‚ÑÑ Ð¿Ð¾Ð´ Ñловами операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и включают Ñетевые запроÑÑ‹, чтение и запиÑÑŒ на диÑки, запроÑÑ‹ в базы данных, чтение и запиÑÑŒ файлов и другое иÑпользование аппаратной чаÑти, иногда раÑположенной не ÑовÑем Ñ€Ñдом Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑором. Таким образом, поÑтроение быÑтрой ÑиÑтемы Ñто чаще улучшение операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, чем улучшение кода в цикле или даже ÑовершенÑтвование алгоритма. СущеÑтвует две фундаментальные техники по улучшению операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи: кÑширование и форматирование данных. КÑширование позволÑет избежать чтениÑ-запиÑи (обычно Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ð³Ð¾ абÑтрактного значениÑ) Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ð¸ значений локально. Таким образом, Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ повторÑетÑÑ. Главное в кÑшировании четко обозначить, какие данные ÑвлÑÑŽÑ‚ÑÑ Ð¸Ñходными, а какие - копиÑми. Должен ÑущеÑтвовать только один иÑходник. КÑширование опаÑно тем, что иногда ÐºÐ¾Ð¿Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ не отразить изменениÑ, произошедшие в иÑходных данных. -Форматирование данных Ñто удешевление операций чтени и запиÑи за Ñчет более Ñффективного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…. ЗачаÑтую Ñто конфликтует Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ требованиÑми к данным, вроде удобочитаемоÑти и переноÑимоÑти. +Форматирование данных - Ñто удешевление операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи за Ñчет более Ñффективного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…. ЗачаÑтую Ñто конфликтует Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ требованиÑми к данным, вроде удобочитаемоÑти и переноÑимоÑти. -ЧаÑто формат данных можно улучшить в 2-3 раза отноÑительно их первоначального предÑтавлениÑ. Техники, которые позволÑет Ñделать Ñто, включают предÑтавление в двоичном виде вмеÑто предÑтавление в удобочитаемом виде, передача Ñправочников Ñимволов вмеÑте Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, так что длинные Ñимволы не нуждаютÑÑ Ð² кодировании, и, в крайнем Ñлучае, ÑпоÑобы вроде алгоритма Хаффмана. +ЧаÑто формат данных можно улучшить в 2-3 раза отноÑительно их первоначального предÑтавлениÑ. Техники, которые позволÑет Ñделать Ñто, включают предÑтавление в двоичном виде вмеÑто предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² удобочитаемом виде, передача Ñправочников Ñимволов вмеÑте Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, так что длинные Ñимволы не нуждаютÑÑ Ð² кодировании, и, в крайнем Ñлучае, ÑпоÑобы вроде алгоритма Хаффмана. -Третий ÑпоÑоб, который иногда возможен, Ñто Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ð²Ñ‹Ñ‡Ð¸Ñлений ближе к Ñамим данным. Ðапример, еÑли вы читаете данные из базы данных и выполнÑете Ñ Ð½Ð¸Ð¼Ð¸ проÑтые операции вроде ÑложениÑ, то Ñтоит попытатьÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти Ñту операцию на Ñервер базы данных. Этот ÑпоÑоб очень Ñильно завиÑит от типа вашей ÑиÑтемы, но вам Ñтоит отдельно изучить его. +Третий ÑпоÑоб, который иногда возможен, Ñто Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ð²Ñ‹Ñ‡Ð¸Ñлений ближе к Ñамим данным. Ðапример, еÑли вы читаете данные из базы и выполнÑете Ñ Ð½Ð¸Ð¼Ð¸ проÑтые операции вроде ÑложениÑ, то Ñтоит попытатьÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти Ñту операцию на Ñервер базы данных. Этот ÑпоÑоб очень Ñильно завиÑит от типа вашей ÑиÑтемы, но вам Ñтоит отдельно изучить его возможноÑть. Следующее: [Как управлÑть памÑтью](09-How-to-Manage-Memory.md) \ No newline at end of file diff --git a/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md index 10d7ffa..5c812d4 100644 --- a/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md +++ b/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -1,15 +1,15 @@ # Как управлÑть памÑтью [//]: # (Version:1.0.0) -ПамÑть Ñто ценнейший реÑурÑ, который вы не можете Ñебе позволить иÑчерпать. Какое-то Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ можете игнорировать ее, но в один момент вам придетÑÑ Ñ€ÐµÑˆÐ°Ñ‚ÑŒ, как ею управлÑть. +ПамÑть - Ñто ценнейший реÑурÑ, который вы не можете Ñебе позволить иÑчерпать. Какое-то Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ можете игнорировать ее, но в один момент вам придетÑÑ Ñ€ÐµÑˆÐ°Ñ‚ÑŒ, как ею управлÑть. -ПроÑтранÑтво памÑти, которое должно ÑохранÑтьÑÑ Ð·Ð° пределами одной подпрограммы, чаÑто называетÑÑ *выделенной кучей*. УчаÑток памÑти без указателей на него беÑполезен и называетÑÑ *муÑором*. Ð’ завиÑимоÑти от ÑиÑтемы, которую вы иÑпользуете, вы можете решить удалить в Ñвном виде памÑть, выделенную под данные, которые вот-вот Ñтанут муÑором. Ðо чаще у Ð²Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ возможноÑть иÑпользовать *Ñборщик муÑора*. Он определÑет муÑорную памÑть и оÑвобождает ее автоматичеÑки, без вмешательÑтва программиÑта. Сборщик муÑора Ñто прекраÑное ÑредÑтво, оно уменьшает чиÑло ошибок в коде, позволÑет пиÑать его короче и понÑтнее Ñ Ð½Ð°Ð¸Ð¼ÐµÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ затратами. ИÑпользуйте его, когда Ñто возможно. +ПроÑтранÑтво памÑти, которое должно ÑохранÑтьÑÑ Ð·Ð° пределами одной подпрограммы, чаÑто называетÑÑ *выделенной кучей*. УчаÑток памÑти без указателей на него беÑполезен и называетÑÑ *муÑором*. Ð’ завиÑимоÑти от ÑиÑтемы, которую вы иÑпользуете, вы можете решить удалить в Ñвном виде памÑть, выделенную под данные, которые вот-вот Ñтанут муÑором. Ðо чаще вÑего у Ð²Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ возможноÑть иÑпользовать *Ñборщик муÑора*. Он определÑет муÑорную памÑть и оÑвобождает ее автоматичеÑки, без вмешательÑтва программиÑта. Сборщик муÑора Ñто прекраÑное ÑредÑтво, оно уменьшает чиÑло ошибок в коде, позволÑет пиÑать его короче и понÑтнее Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ затратами. ИÑпользуйте его, когда Ñто возможно. -Ðо даже Ñо Ñборщиком муÑора вы можете забить вÑÑŽ памÑть муÑорными данными. КлаÑÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° --- иÑпользовать Ñ…Ñш-таблицу в качеÑтве кÑша и забыть удалить ÑÑылки в ней. ПоÑкольку ÑÑылка оÑтаетÑÑ, данные по ней недоÑÑгаемы, и ÑÑылка беÑполезна. Это называетÑÑ *утечкой памÑти*. С Ñамого начала разработки Ñледует Ñледить за утечками памÑти и уÑтранÑть их. ЕÑли у Ð²Ð°Ñ ÐµÑть долго работающие ÑиÑтемы, то памÑть может никогда не заканчиватьÑÑ Ð¿Ñ€Ð¸ теÑтировании, будет иÑчерпана польователÑми при реальном иÑпользовании. +Ðо даже Ñо Ñборщиком муÑора вы можете забить вÑÑŽ памÑть муÑорными данными. КлаÑÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° - иÑпользовать Ñ…Ñш-таблицу в качеÑтве кÑша и забыть удалить ÑÑылки в ней. ПоÑкольку ÑÑылка оÑтаетÑÑ, данные по ней недоÑÑгаемы, и ÑÑылка беÑполезна. Это называетÑÑ *утечкой памÑти*. С Ñамого начала разработки Ñледует Ñледить за утечками памÑти и уÑтранÑть их. ЕÑли у Ð²Ð°Ñ ÐµÑть долгоработающие ÑиÑтемы, то памÑть может никогда не заканчиватьÑÑ Ð¿Ñ€Ð¸ теÑтировании, но будет иÑчерпана пользователÑми при реальной работе. Создание новых объектов Ñто отноÑительно Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð² любых ÑиÑтемах. ПамÑть, Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ð¿Ñ€Ñмую под локальные переменные подпрограммы, однако, обычно дешевле из-за проÑтой политики ее выÑвобождениÑ. Избегайте ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÐ½ÑƒÐ¶Ð½Ñ‹Ñ… объектов. -Выжный момент проиÑходит, когда вы можете определить верхнюю границу чиÑла требуемых объектов. ЕÑли вÑе объекты занимают одинаковый объем памÑти, то вы можете выделить под них один блок памÑти или буфер. Ð’Ñе необходимые вам объекты можно Ñоздавать и удалÑть внутри Ñтого блока по принципу ротации, так что иногда Ñто называют кольцевым или цикличеÑким буфером. Обычно он быÑтрее, чем Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÐºÑƒÑ‡Ð°. +Важный момент проиÑходит, когда вы можете определить верхнюю границу чиÑла требуемых объектов. ЕÑли вÑе объекты занимают одинаковый объем памÑти, то вы можете выделить под них один блок памÑти или буфер. Ð’Ñе необходимые вам объекты можно Ñоздавать и удалÑть внутри Ñтого блока по принципу ротации, так что иногда Ñто называют кольцевым или цикличеÑким буфером. Обычно он быÑтрее, чем Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÐºÑƒÑ‡Ð°. -Иногда вам придетÑÑ Ñвно оÑвобождать выделенное проÑтранÑтво памÑти вмеÑто того, чтобы полагатьÑÑ Ð½Ð° Ñборщик муÑора. Ð’ Ñтом Ñлучае вы должны тщательно проанализировать каждую чаÑть выделенной памÑти и разработать ÑпоÑоб ее выÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² нужный момент времени. СпоÑоб может отличатьÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ типа объектов, который вы Ñоздаете. Ð’Ñ‹ должны убедитьÑÑ, что каждой операции Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти ÑоответÑтвует Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÐµÐµ оÑвобождениÑ. Это непроÑто, поÑтому Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ программиÑты как правило реализуют Ñборщик муÑора в порÑтой форме, например, в виде подÑчета ÑÑылок на объекты. +Иногда вам придетÑÑ Ñвно оÑвобождать выделенное проÑтранÑтво памÑти вмеÑто того, чтобы полагатьÑÑ Ð½Ð° Ñборщик муÑора. Ð’ Ñтом Ñлучае вы должны тщательно проанализировать каждую чаÑть выделенной памÑти и разработать ÑпоÑоб ее выÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² нужный момент времени. СпоÑоб может отличатьÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ типа объектов, который вы Ñоздаете. Ð’Ñ‹ должны убедитьÑÑ, что каждой операции Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти ÑоответÑтвует Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÐµÐµ оÑвобождениÑ. Это непроÑто, поÑтому Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ программиÑты как правило реализуют Ñборщик муÑора в проÑтой форме, например, в виде подÑчета ÑÑылок на объекты. Следующее: [Как уÑтранÑть плавающие баги](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index 0053887..aae3578 100644 --- a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -1,17 +1,17 @@ # Как уÑтранÑть плавающие баги [//]: # (Version:1.0.0) -ÐŸÐ»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñто родÑтвенник пÑтидеÑÑтиметрового невидимого Ñкорпиона из глубокого коÑмоÑа. Этот кошмар воÑпроизводитÑÑ Ñ‚Ð°Ðº редко, что его трудно наблюдать, но доÑтаточно чаÑти его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ñто игнорировать. Ð’Ñ‹ не можете отладить баг, потому что вы не можете его найти. +Плавающий баг Ñто родÑтвенник пÑтидеÑÑтиметрового невидимого Ñкорпиона из глубокого коÑмоÑа. Этот кошмар воÑпроизводитÑÑ Ñ‚Ð°Ðº редко, что его трудно наблюдать, но доÑтаточно чаÑти его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ñто игнорировать. Ð’Ñ‹ не можете отладить баг, потому что вы не можете его найти. Ð¥Ð¾Ñ‚Ñ Ð¿Ð¾Ñле воÑьми чаÑов отладки вы начнете ÑомневатьÑÑ Ð² Ñтом, плавающие баги подчинÑÑŽÑ‚ÑÑ Ñ‚ÐµÐ¼ же Ñамым законам логики, что и вÑе оÑтальное. Что делает их трудными, Ñто неизвеÑтные обÑтоÑтельÑтва, в которых они воÑпроизводÑÑ‚ÑÑ. ПоÑтарайтеÑÑŒ запиÑать вÑе уÑловиÑ, при которых проиÑходит плавающий баг, чтобы вы могли предположить, в чем на Ñамом деле заключаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñ‡Ð¸Ð²Ð¾Ñть бага. Баг может быть ÑвÑзан Ñо значениÑми данных, например, воÑпроизводитьÑÑ, только когда переменной приÑваиваетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ "Вайоминг". ЕÑли причина изменчивоÑти не в Ñтом, то Ñледующим пунктом Ñтоит проверить Ñинхронизацию конкуррентноÑти. -Изо вÑех Ñил поÑтарайтеÑÑŒ воÑпроизвеÑти баг контролируемым ÑпоÑобом. ЕÑли воÑпроизвеÑти его не получаетÑÑ, попробуйте поймать его через логирование. ЕÑли нужно, напишите Ñпециальные логи Ð´Ð»Ñ Ñтого бага, которые будут запиÑать то, что вам кажетÑÑ ÑвÑзанным Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹. СмиритеÑÑŒ Ñ Ñ‚ÐµÐ¼, что Ñто будет долгий процеÑÑ, еÑли ошибка воÑпроизводитÑÑ Ð½Ð° боевом окружении и не по вашей прихоти. ПодÑказки, которые вы можете извлечь из логов, могут не дать вам полного ответа, но должны предоÑтавить доÑтаточно информации Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñамих логов. Улучшение ÑиÑтемы Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð±Ð¾ÐµÐ²Ð¾Ð³Ð¾ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ занÑть много времени. Затем вам придетÑÑ Ð¶Ð´Ð°Ñ‚ÑŒ, пока баг не поÑвитÑÑ Ð²Ð½Ð¾Ð²ÑŒ, чтобы получить информацию из обновленных логов. Этот цикл может повторитьÑÑ ÐµÑ‰Ðµ неÑколько раз. +Изо вÑех Ñил поÑтарайтеÑÑŒ воÑпроизвеÑти баг контролируемым ÑпоÑобом. ЕÑли воÑпроизвеÑти его не получаетÑÑ, попробуйте поймать его через логирование. ЕÑли нужно, напишите Ñпециальные логи Ð´Ð»Ñ Ñтого бага, которые будут запиÑывать то, что вам кажетÑÑ ÑвÑзанным Ñ Ð½Ð¸Ð¼. СмиритеÑÑŒ Ñ Ñ‚ÐµÐ¼, что Ñто будет долгий процеÑÑ, еÑли ошибка воÑпроизводитÑÑ Ð½Ð° боевом окружении и не по вашей прихоти. ПодÑказки, которые вы можете извлечь из логов, могут не дать вам полного ответа, но должны предоÑтавить доÑтаточно информации Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñамих логов. Улучшение ÑиÑтемы Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð±Ð¾ÐµÐ²Ð¾Ð³Ð¾ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ занÑть много времени. Затем вам придетÑÑ Ð¶Ð´Ð°Ñ‚ÑŒ, пока баг не поÑвитÑÑ Ð²Ð½Ð¾Ð²ÑŒ, чтобы получить информацию из обновленных логов. Этот цикл может повторитьÑÑ ÐµÑ‰Ðµ неÑколько раз. -Самый глупый плавающий баг, который Ñоздал Ñ, заключалÑÑ Ð² многопоточной реализации одного функционального Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¾Ð³Ð¾ проекта. Я тщательно обеÑпечил корректную оценку параллельноÑти программы, правильное иÑпользование Ñдере процеÑÑора (вÑех воÑьми в жанном Ñлучае). Я проÑто-напроÑто забыл Ñинхронизировать Ñборщик муÑора. Программа могла работать безошибочно долгое времÑ, Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ñ Ð²Ñе заданиÑ, которые Ñ ÐµÐ¹ назначал. Со Ñтыдом признаюÑÑŒ, Ñ Ð½Ð°Ñ‡Ð°Ð» подозревать аппаратное обеÑпечение, прежде чем Ð¼ÐµÐ½Ñ Ð¾Ñенило, в чем проблема. +Самый глупый плавающий баг, который Ñоздал Ñ, заключалÑÑ Ð² многопоточной реализации одного функционального Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¾Ð³Ð¾ проекта. Я тщательно обеÑпечил корректную оценку параллельноÑти программы, правильное иÑпользование Ñдер процеÑÑора (вÑех воÑьми в данном Ñлучае). Я проÑто-напроÑто забыл Ñинхронизировать Ñборщик муÑора. Программа могла работать безошибочно долгое времÑ, Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ñ Ð²Ñе заданиÑ, которые Ñ ÐµÐ¹ назначал. Со Ñтыдом признаюÑÑŒ, Ñ Ð½Ð°Ñ‡Ð°Ð» подозревать аппаратное обеÑпечение, прежде чем Ð¼ÐµÐ½Ñ Ð¾Ñенило, в чем проблема. -Ðедавно на работе у Ð½Ð°Ñ Ð±Ñ‹Ð» плавающий баг, на который мы потратили неÑколько недель. У Ð½Ð°Ñ ÐµÑть многопоточное Ñерверное приложение на Java, размещенное на Apache-Ñерверах. Чтобы поддержать быÑтрую Ñмену Ñтраниц, мы выполнÑли вÑе операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в небольшом наборе из четырех потоков, отделенных от потоков, ответÑтвенных за Ñмену Ñтраниц. Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени они "замораживалиÑÑŒ" и, наÑколько мы могли понÑть из логов, прекращали делать что-либо полезное на неÑколько чаÑов. ПоÑкольку у Ð½Ð°Ñ Ð±Ñ‹Ð»Ð¾ выделено четыре потока, Ñамо по Ñебе Ñто не было большой проблемой. До тех пор, пока не замораживалиÑÑŒ вÑе четыре потока одновременно. Тогда очереди запроÑов, оÑвобожденные замороженными потоками, забивали вÑÑŽ Ñвободную памÑть и крашили наш Ñервер. Ðам потребовалаÑÑŒ неделÑ, чтобы проÑто выÑвить баг, и мы не Ñмогли понÑть, в чем причина, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñтот баг, и даже что именно проиÑходило в потоках в тот момент, когда они "заÑтревали". +Ðедавно на работе у Ð½Ð°Ñ Ð±Ñ‹Ð» плавающий баг, на который мы потратили неÑколько недель. У Ð½Ð°Ñ ÐµÑть многопоточное Ñерверное приложение на Java, размещенное на Apache-Ñерверах. Чтобы поддержать быÑтрую Ñмену веб-Ñтраниц, мы выполнÑли вÑе операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в небольшом наборе из четырех потоков, отделенных от потоков, ответÑтвенных за Ñмену Ñтраниц. Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени они "замораживалиÑÑŒ" и, наÑколько мы могли понÑть из логов, прекращали делать что-либо полезное на неÑколько чаÑов. ПоÑкольку у Ð½Ð°Ñ Ð±Ñ‹Ð»Ð¾ выделено четыре потока, Ñамо по Ñебе Ñто не было большой проблемой. До тех пор, пока не замораживалиÑÑŒ вÑе четыре потока одновременно. Тогда очереди запроÑов, оÑвобожденные замороженными потоками, забивали вÑÑŽ Ñвободную памÑть и крашили наш Ñервер. Ðам потребовалаÑÑŒ неделÑ, чтобы проÑто выÑвить баг, и за Ñто Ð²Ñ€ÐµÐ¼Ñ Ð¼Ñ‹ не Ñмогли понÑть, в чем причина, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñтот баг, и даже что именно проиÑходило в потоках в тот момент, когда они "заÑтревали". Этот пример демонÑтрирует риÑк, ÑвÑзанный Ñ Ð¸Ñпользованием Ñтороннего программного обеÑпечениÑ. Мы иÑпользовали лицензионный код, который убирал теги HTML из текÑта. ХотÑ, к ÑчаÑтью, у Ð½Ð°Ñ Ð±Ñ‹Ð» иÑходный код, мы не изучали его доÑконально, пока мы не включили логирование на нашем Ñервере и не увидели, что потоки почтовых Ñообщений забивалиÑÑŒ из-за Ñтого лиценционного кода. -Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае, иÑполнение было квадратичным. Это значит, что Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта было пропорционально квадрату длины текÑта. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. +Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае, Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта ÑтановилоÑÑŒ пропорционально квадрату его длины. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как Ñто бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. Следующее: [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](11-How-to-Learn-Design-Skills.md) diff --git a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index 5743c62..271d8bf 100644 --- a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -1,14 +1,14 @@ # Как ÑкÑпериментировать [//]: # (Version:1.0.0) -Великий ЭдÑгер ДейкÑтра краÑноречиво объеÑнил, что информатика не ÑвлÑетÑÑ ÑкÑпериментальной наукой и не завиÑит от Ñлектронных уÑтройÑтв. Как он выразилÑÑ Ð² 1960-е годы: +Великий ЭдÑгер ДейкÑтра краÑноречиво объеÑнил, что информатика не ÑвлÑетÑÑ ÑкÑпериментальной наукой[ExpCS] и не завиÑит от Ñлектронных уÑтройÑтв. Как он выразилÑÑ Ð² 1960-е годы [Knife]: -> ...the harm was done: the topic became known as “computer science†- which, actually, is like referring to surgery as “knife science†- and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. +> ...произошло худшее: предмет Ñтал извеÑтен как “computer scienceâ€, что, ÑобÑтвенно говорÑ, то же Ñамое, что называть хирургию “knife scienceâ€. И в Ñознании людей прочно укоренилоÑÑŒ, что “computer science†- Ñто наука о машинах и периферийном оборудовании. -Программирвание может и не быть ÑкÑпериментальной наукой, но у большинÑтва программиÑтов не возможноÑти заниматьÑÑ Ñ‚ÐµÐ¼, что ДейкÑтра определил как вычиÑлительную науку. Мы должны работать в облаÑти Ñкперимента подобно некоторым (но не вÑем) физикам. ЕÑли ÑпуÑÑ‚Ñ 30 лет можно будет заниматьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ без ÑкÑпериментированиÑ, то Ñто будет великим доÑтижением информатики. +Программирование может и не быть ÑкÑпериментальной наукой, но у большинÑтва программиÑтов не возможноÑти заниматьÑÑ Ñ‚ÐµÐ¼, что ДейкÑтра определил как “computer scienceâ€. Мы должны работать в облаÑти Ñкперимента подобно некоторым (но не вÑем) физикам. ЕÑли ÑпуÑÑ‚Ñ 30 лет можно будет заниматьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ без ÑкÑпериментированиÑ, то Ñто будет великим доÑтижением информатики. ЭкÑперименты, которые вам придетÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒÑÑ, включают: -- ТеÑтирование ÑиÑтем на небольших примерах данных, чтобы убедитьÑÑ Ð² их ÑоответÑтвии документации, либо чтобы понÑть их ответы, еÑли документации нет. +- ТеÑтирование ÑиÑтем на небольших примерах данных, чтобы убедитьÑÑ Ð² их ÑоответÑтвии документации, либо чтобы понÑть их ответы, еÑли документации нет - ТеÑтирование небольших изменений в коде, чтобы удоÑтоверитьÑÑ, что они уÑтранÑÑŽÑ‚ баг в программе - Измерение производительноÑти ÑиÑтемы в двух различных окружениÑÑ… из-за неÑовершенÑтва знаний о их характериÑтиках производительноÑти - Проверка целоÑтноÑти данных @@ -16,7 +16,7 @@ Я не думаю, что в Ñтом ÑÑÑе Ñ Ñмогу объÑÑнить, как проектировать ÑкÑперименты. Вам придетÑÑ Ð½Ð°ÑƒÑ‡Ð¸Ñ‚ÑŒÑÑ Ñтому ÑамоÑтоÑтельно и практиковатьÑÑ. Я могу предложить два небольших Ñовета. -Первое, ÑтарайтеÑÑŒ четко обозначать Ñвои иÑходные Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ утверждениÑ, которые вы ÑобираетеÑÑŒ проверить. Очень полезно запиÑывать их, оÑобенно, еÑли вы работаете в коллективе. +Первое: ÑтарайтеÑÑŒ четко обозначать Ñвои иÑходные Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ утверждениÑ, которые вы ÑобираетеÑÑŒ проверить. Очень полезно запиÑывать их, оÑобенно, еÑли вы работаете в коллективе. ЧаÑто вам придетÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñерию ÑкÑпериментов, каждый из которых опираетÑÑ Ð½Ð° знаниÑ, полученные в результате предыдущего. Таким образом, Ñледует проектировать ÑкÑперименты таким образом, чтобы получать как можно больше информации. К Ñожалению, Ñто противоречит принципу проÑтоты ÑкÑпериментов. Вам придетÑÑ Ñ€Ð°Ð·Ð²Ð¸Ð²Ð°Ñ‚ÑŒ Ñвою ÑкÑпертизу в Ñтой облаÑти ÑамоÑтоÑтельно. diff --git a/ru/1-Beginner/README.md b/ru/1-Beginner/README.md index b4d029f..425a92d 100644 --- a/ru/1-Beginner/README.md +++ b/ru/1-Beginner/README.md @@ -3,7 +3,7 @@ - Личные навыки - [ÐаучитеÑÑŒ отлаживать](Personal-Skills/01-Learn-To-Debug.md) - [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) - - [Как уÑтранÑть ошибки](Personal-Skills/03-How-to-Remove-an-Error.md) + - [Как уÑтранÑть баги](Personal-Skills/03-How-to-Remove-an-Error.md) - [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸](Personal-Skills/04-How-to-Debug-Using-a-Log.md) - [Как определÑть проблемы производительноÑти](Personal-Skills/05-How-to-Understand-Performance-Problems.md) - [Как уÑтранÑть проблемы производительноÑти](Personal-Skills/06-How-to-Fix-Performance-Problems.md) diff --git a/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md index 0830507..d7b89bb 100644 --- a/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md +++ b/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) Чтобы как можно быÑтрее выпуÑтить программное обеÑпечение, нужно планировать не только ее разработку, но и документирование, запуÑк и продвижение. Ð’ коммерчеÑких проектах также важны продажи и финанÑÐ¾Ð²Ð°Ñ ÑоÑтавлÑющаÑ. Без предÑказуемоÑти времени разработки невозможно вÑе Ñто запланировать Ñффективно. -Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° времени на разработку дает предÑказуемоÑть. Менеджеры очень любÑÑ‚ Ñто. Тот факт, что теоретичеÑки и практичеÑки невозможно точно предÑказать, Ñколько времени уйдет на рзработку, чаÑто упуÑкаетÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð°Ð¼Ð¸. ÐÐ°Ñ Ð²Ñе Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ Ñделать Ñту невыполнимую вещь, и мы должны чеÑтно в Ñтом признатьÑÑ. Однако, будет нечеÑтно не признать невыполнимоÑть Ñтого Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¸, когда необходимо, не объÑÑнить Ñто. Вокруг временных оценок много недопониманий, так как люди Ñклонны принимать Ñлова +Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° времени на разработку дает предÑказуемоÑть. Менеджеры очень любÑÑ‚ Ñто. Тот факт, что теоретичеÑки и практичеÑки невозможно точно предÑказать, Ñколько времени уйдет на рзработку, чаÑто упуÑкаетÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð°Ð¼Ð¸. ÐÐ°Ñ Ð²Ñе Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ Ñделать Ñту невыполнимую вещь, и мы должны Ñебе чеÑтно в Ñтом признатьÑÑ. Однако, будет нечеÑтно не признать невыполнимоÑть Ñтого Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¸, когда необходимо, не объÑÑнить Ñто. Вокруг временных оценок много недопониманий, так как люди Ñклонны принимать Ñлова > Я думаю, что еÑли Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ понимаю проблему, то около 50% вероÑтноÑти, что мы Ñделаем Ñто за пÑть недель. При уÑловии, что никто не будет нам мешать вÑе Ñто времÑ. diff --git a/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md index 5361792..5ad5101 100644 --- a/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md +++ b/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -8,11 +8,11 @@ Когда взÑть Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° некоторое иÑÑледование задачи невозможно, то Ñначала вы должны четко и ÑÑно уÑтановить, что именно означает ваша оценка. Сформулируйте Ñто значение как первое и заключительное чаÑти вашей оценки в пиÑьменном виде. Подготовьте пиÑьменный ответ, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ на более мелкие заданиÑ, в идеальном Ñлучае, требующие не больше одного рабочего днÑ. Самое важное здеÑÑŒ - ничего не забыть. Ðапример, очень важно Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° документирование, теÑтирование, планирование, взаимодейÑтвие Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ командами, отпуÑка. ЕÑли вы каждый день тратите чаÑть времени на общение Ñ Ð½ÐµÑƒÐ¼Ð½Ñ‹Ð¼Ð¸ людьми, добавьте отдельную Ñтроку на Ñто в общую оценку времени. Это даÑÑ‚ вашему боÑÑу общее видение того, что отнимает у Ð²Ð°Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ времени, а на что вам требуетÑÑ ÐµÐ³Ð¾ гораздо больше. -Я знаком Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, которые включают такие временные затраты в общую оценку в неÑвном виде, Ñ‚.е. проÑто прибавлÑÑŽÑ‚ их к общему времени работы. Я не Ñоветую так делать. Одним из Ñффектов такого подхода может Ñтать Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ. Ðапример, программиÑÑ‚ может заложить три Ð´Ð½Ñ Ð½Ð° задачу, которую он на Ñамом деле ÑобираетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ за день. ПрограммиÑÑ‚ планирует потратить еще два Ð´Ð½Ñ Ð½Ð° документирование Ñвоей работы или на другой полезный проект. Ðо тот факт, что работа была выполнена только за один день, очень проÑто выÑÑнить. И тогда может возникнуть впечатление, что программиÑÑ‚ бездельничал или переоценил задачу. Ðамного лучше дать четкое опиÑание того, что вы реально ÑобираетеÑÑŒ делать в рамках задачи. ЕÑли документирование занимает в два раза больше времени, чем напиÑание кода, и в оценке Ñказано об Ñтом, то Ñто дает преимущеÑтва, еÑли Ñто донеÑти до вашего менеджера. +Я знаком Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, которые включают такие временные затраты в общую оценку в неÑвном виде, то еÑть проÑто прибавлÑÑŽÑ‚ их к общему времени работы. Я не Ñоветую так делать. Одним из Ñффектов такого подхода может Ñтать Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ. Ðапример, программиÑÑ‚ может заложить три Ð´Ð½Ñ Ð½Ð° задачу, которую он на Ñамом деле ÑобираетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ за день. ПрограммиÑÑ‚ планирует потратить еще два Ð´Ð½Ñ Ð½Ð° документирование Ñвоей работы или на другой полезный проект. Ðо тот факт, что работа была выполнена только за один день, очень проÑто выÑÑнить. И тогда может возникнуть впечатление, что программиÑÑ‚ бездельничал или переоценил задачу. Ðамного лучше дать четкое опиÑание того, что вы реально ÑобираетеÑÑŒ делать в рамках задачи. ЕÑли документирование занимает в два раза больше времени, чем напиÑание кода, и в оценке Ñказано об Ñтом, то Ñто дает преимущеÑтва, еÑли Ñто донеÑти до вашего менеджера. Включайте вÑе временные затраты в оценку в Ñвном виде. ЕÑли задача Ñкорее вÑего займет один день, но может раÑÑ‚ÑнутьÑÑ Ð½Ð° деÑÑть дней, еÑли ваш первоначальный подход не Ñработает, отметьте Ñто в вашей оценке. Либо укажите Ñреднее Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ ÑоглаÑно вашим оценкам вероÑтноÑтей разных иÑходов. Любые риÑки, ÑвÑзанные Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½ÐµÐ¼ на задачу, должны быть включены в оценку. Ð’Ñ€Ñд ли конкретный человек заболеет в конкретный момент времени. Ðо в большом проекте Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвом программиÑтов обÑзательно будут те, кто возьмет больничный. То же Ñамое каÑаетÑÑ Ð¾Ñ‚Ð¿ÑƒÑков. Ркакова вероÑтноÑть обÑзательного обучающего Ñеминара в рамках вÑей компании? ЕÑли ее можно оценить, включите ее в общую оценку. Кроме Ñтого, еще еÑть неизвеÑтные факторы. Их по определению не получитÑÑ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ по отдельноÑти. Ð’Ñ‹ можете заложить Ð´Ð»Ñ Ð½Ð¸Ñ… отдельную Ñтроку в общей оценке, либо учеÑть их как-то по-другому. Чего Ð½ÐµÐ»ÑŒÐ·Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ, так Ñто позволÑть Ñвоему боÑÑу забыть об их ÑущеÑтвовании. Очень легко превратить оценку времени в раÑпиÑание, еÑли не учитывать неизвеÑтные факторы. -Ð’ командной работе Ñледует ÑтаратьÑÑ, чтобы оценку выполнÑли те люди, которые будут выполнÑть задачу, и чтобы оценка была ÑоглаÑована внутри вÑей команды. Люди отличаютÑÑ Ð¿Ð¾ навыкам, опыту, готовноÑти и уверенноÑти. ÐеприÑтноÑти начинаютÑÑ, когда Ñильный программиÑÑ‚ оценивает задачу Ð´Ð»Ñ ÑебÑ, а более Ñлабые программиÑты затем вынуждены придерживатьÑÑ Ñтой оценки. Когда вÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑоглаÑна Ñ Ð¿Ð¾Ñтрочным разбиением оценок затрат на задачи, Ñто облегчает общее понимание задач и дает возможноÑть тактичеÑки перераÑпределить нагрузку Ñ Ð±Ð¾Ð»ÐµÐµ Ñлабых членов команды на более Ñильных. +Ð’ рамках команды Ñледует ÑтаратьÑÑ, чтобы оценку выполнÑли те люди, которые будут выполнÑть задачу, и чтобы оценка была ÑоглаÑована внутри вÑей команды. Люди отличаютÑÑ Ð¿Ð¾ навыкам, опыту, готовноÑти и уверенноÑти. ÐеприÑтноÑти начинаютÑÑ, когда Ñильный программиÑÑ‚ оценивает задачу Ð´Ð»Ñ ÑебÑ, а более Ñлабые программиÑты затем вынуждены придерживатьÑÑ Ñтой оценки. Когда вÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑоглаÑна Ñ Ð¿Ð¾Ñтрочным разбиением оценок затрат на задачи, Ñто облегчает общее понимание задач и дает возможноÑть тактичеÑки перераÑпределить нагрузку Ñ Ð±Ð¾Ð»ÐµÐµ Ñлабых членов команды на более Ñильных. ЕÑли в задаче приÑутÑтвуют большие риÑки, которые невозможно оценить, ваша обÑзанноÑть донеÑти Ñто до менеджера так, чтобы тот не брал на ÑÐµÐ±Ñ Ð¾Ð±ÑзательÑтва, ÑвÑзанные Ñ Ð½Ð¸Ð¼Ð¸. Ð’ Ñтом Ñлучае Ñтоит Ñделать вÑе возможное, чтобы Ñнизить Ñти риÑки. diff --git a/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md index 61977ec..3e6ceac 100644 --- a/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md +++ b/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -1,10 +1,10 @@ # Как иÑкать информацию [//]: # (Version:1.0.0) -То, что вы ищете, определÑет то, как вы Ñто ищете. +То, что вы ищете, определÑет, какими ÑпоÑобами вам Ñледует Ñто иÑкать. -ЕÑли вы ищете информацию о *конкретных знаниÑÑ…*, которые объективны и легко проверить, например, поÑледнÑÑ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ð°Ñ‚Ñ‡Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, то лучше вежливо ÑпроÑить об Ñтом в интернете или в диÑкуÑÑионной группе. Ðе ищите в интернете то, что ÑвÑзано Ñ Ð¼Ð½ÐµÐ½Ð¸ÐµÐ¼ или Ñубъективной интерпретацией, отношение бреда здеÑÑŒ Ñлишком велико. +ЕÑли вы ищете информацию о *конкретных знаниÑÑ…*, которые объективны и легко проверить, например, поÑледнÑÑ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ð°Ñ‚Ñ‡Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, то лучше вежливо ÑпроÑить об Ñтом в интернете или в диÑкуÑÑионной группе. Ðе ищите в интернете то, что ÑвÑзано Ñ Ð¼Ð½ÐµÐ½Ð¸ÐµÐ¼ или Ñубъективной интерпретацией, количеÑтво бреда здеÑÑŒ Ñлишком велико. -ЕÑли вы ищете *общие Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ чем-то Ñубъективном*, иÑторию мнений людей о предмете, то идите в библиотеку (Ñ Ð¸Ð¼ÐµÑŽ в виду наÑтоÑщее здание Ñ ÐºÐ½Ð¸Ð³Ð°Ð¼Ð¸). Ðапример, чтобы узнать что-нибудь о математике, грибах или миÑтицизме, идите в библиотеку. +ЕÑли вы ищете *общие Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ чем-то Ñубъективном*, иÑторию мнений людей о предмете, то идите в библиотеку (Ñ Ð¸Ð¼ÐµÑŽ ввиду наÑтоÑщее здание Ñ ÐºÐ½Ð¸Ð³Ð°Ð¼Ð¸). Ðапример, идите туда, чтобы узнать что-нибудь о математике, грибах или миÑтицизме. ЕÑли вам нужно узнать, *как Ñделать что-то нетривиальное*, доÑтаньте две-три книги, поÑвÑщенные Ñтой теме, и прочтите их. Ð’ интернете вы можете узнать, как Ñделать тривиальные вещи, вроде уÑтановки пакета программного обеÑпечениÑ. Ð’Ñ‹ даже можете узнать Ñерьезные вещи, например, хорошие техники программированиÑ, но здеÑÑŒ легко потратить гораздо больше времени на поиÑк и отбор результатов и попытки определить, наÑколько авторитетен иÑточник, чем на чтение ÑоответÑтвующей чаÑти в Ñерьезной книге. diff --git a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index d8d5829..5c97e85 100644 --- a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -2,13 +2,13 @@ [//]: # (Version:1.0.0) Уважайте Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ человека и ÑоизмерÑйте его Ñо Ñвоим. Ð’Ð¾Ð¿Ñ€Ð¾Ñ Ð´Ð°ÐµÑ‚ гораздо больше, чем проÑто ответ. Человек, которого вы Ñпрашиваете, узнает Ð²Ð°Ñ ÐºÐ°Ðº проÑто из вашего приÑутÑтвиÑ, так и по вашему вопроÑу. Ð’Ñ‹ узнаете о человеке то же Ñамое, и вдобавок, возможно, вы получаете ответ на ваш вопроÑ. Как правило, Ñто гораздо важнее, чем ваш вопроÑ. -Однако, ценноÑть вопроÑов умешьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретны выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может показатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. +Однако, ценноÑть вопроÑов умешьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретны выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может оказатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñо вÑеми вашими руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. Главное правило: вÑе получают пользу от небольшой беÑеды Ñ Ð²Ð°Ð¼Ð¸. И чем чаще проиÑходит беÑеда, тем меньше пользы они получают. Ваша работа ÑоÑтоит в том, чтобы дать Ñтим людÑм полезу от разговора Ñ Ð²Ð°Ð¼Ð¸ и получить ее Ñамому, ÑохранÑÑ Ð±Ð°Ð»Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñƒ нею и потраченным временем. Важно уважать Ñвое ÑобÑтвенное времÑ. ЕÑли разговор Ñ ÐºÐµÐ¼-то, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что он займет Ð²Ñ€ÐµÐ¼Ñ Ñтого человека, поможет Ñохранить вам ваше времÑ, то вам Ñтоит провеÑти Ñтот разговор. ЕÑли только вы не Ñчитаете, что потраченное на разговор Ð²Ñ€ÐµÐ¼Ñ Ñтого человека более важно Ð´Ð»Ñ Ð²Ñей организации. -Странным примером Ñтого ÑвлÑетÑÑ Ð»ÐµÑ‚Ð½Ð¸Ð¹ Ñтажер. От Ñтажера на выÑокотехничеÑкой должноÑти Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ больших Ñвершений, но можно ожидать, что но будет донимать вопроÑами вÑех подрÑд. Почему Ñто позволÑетÑÑ? Потому что те, кого донимает Ñтажер, получают от него важную возможноÑть покраÑоватьÑÑ. У них, возможно, поÑвлÑетÑÑ ÑˆÐ°Ð½Ñ ÑƒÑлышать новые идеи, поÑмотреть Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° проект. Может быть, они попытаютÑÑ Ð½Ð°Ð½Ñть Ñтажера, но даже еÑли Ñто не так, вÑе равно от него много пользы. +Странным примером вÑего Ñтого ÑвлÑетÑÑ Ð»ÐµÑ‚Ð½Ð¸Ð¹ Ñтажер. От Ñтажера на выÑокотехничеÑкой должноÑти Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ больших Ñвершений, но можно ожидать, что он будет донимать вопроÑами вÑех подрÑд. Почему Ñто позволÑетÑÑ? Потому что те, кого донимает Ñтажер, получают от него важную возможноÑть покраÑоватьÑÑ. У них, возможно, поÑвлÑетÑÑ ÑˆÐ°Ð½Ñ ÑƒÑлышать новые идеи, поÑмотреть Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° проект. Может быть, они попытаютÑÑ Ð½Ð°Ð½Ñть Ñтажера, но даже еÑли Ñто не так, вÑе равно от него много пользы. Каждый раз, когда вы Ñчитаете, что людÑм еÑть что Ñказать, вам Ñледует Ñпрашивать их мнение. Это льÑтит им и позволÑет вам узнать что-то новое, научить их чему-то новому. Хорошему программиÑту редко нужны Ñоветы от вице-президента по продажам, но когда они нужны, ÑпроÑите их. Я однажды попроÑил разрешить мне поÑлушать неÑколько звонков от ребÑÑ‚ из отдела продаж, чтобы лучше понÑть их работу. Это занÑло не больше 30 минут, но думаю, что Ñто произвело на них большое впечатление. diff --git a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index a6388d9..a3c24d5 100644 --- a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -6,15 +6,15 @@ ÐапиÑание хорошей документации Ñто, прежде вÑего, умение хорошо пиÑать. Я предлагаю вам найти книги о том, как хорошо пиÑать, изучить их и практиковатьÑÑ. Ðо даже еÑли вы плохой пиÑатель или плохо владеете Ñзыком, на котором должны документировать, вÑе, что вам реально нужно, Ñто золотое правило "ПоÑтупай Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ так, как вы хотите, чтобы поÑтупали Ñ Ð²Ð°Ð¼Ð¸". Подумайте о тех, кто будет читать вашу документацию, что им будет нужно найти в ней, как вы можете Ñто до них донеÑти. Уже Ñ Ñтим вы будете лучше Ñреднего автора документации и хорошим программиÑтом. -Когда дело каÑаетÑÑ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñамого кода в противоположноÑть напиÑанию документировании Ð´Ð»Ñ Ð½ÐµÐ¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов, лучшие программиÑты, которых Ñ Ð·Ð½Ð°ÑŽ, придерживаютÑÑ ÑƒÐ½Ð¸Ð²ÐµÑ€Ñального принципа пиÑать Ñамодокументируемый код и добавлÑть комментарии только там, где невозможно объÑÑнить Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñамим кодом. Ð”Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ подхода еÑть две веÑкие причины. Во-первых, любой, кому понадобитÑÑ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð´Ð°, в большинÑтве Ñлучаев Ñможет и предпочтет читать Ñам код. РазумеетÑÑ, Ñделать Ñто проще опытным программиÑтам, чем начинающим. Ðо гораздо важнее, что код и Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ могут противоречить друг другу, еÑли отдельной документации нет. ИÑходный код в худшем Ñлучае может быть напиÑан плохо и непонÑтно. ДокументациÑ, еÑли она напиÑана плохо, может лгать, а Ñто в тыÑÑчу раз хуже. +Когда дело каÑаетÑÑ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñамого кода в противоположноÑть напиÑанию документации Ð´Ð»Ñ Ð½ÐµÐ¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов, лучшие программиÑты, которых Ñ Ð·Ð½Ð°ÑŽ, придерживаютÑÑ ÑƒÐ½Ð¸Ð²ÐµÑ€Ñального принципа пиÑать Ñамодокументируемый код и добавлÑть комментарии только там, где невозможно объÑÑнить Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñамим кодом. Ð”Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ подхода еÑть две веÑкие причины. Во-первых, любой, кому понадобитÑÑ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð´Ð°, в большинÑтве Ñлучаев Ñможет и предпочтет читать Ñам код. РазумеетÑÑ, Ñделать Ñто проще опытным программиÑтам, чем начинающим. Ðо гораздо важнее, что код и Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ могут противоречить друг другу, еÑли отдельной документации нет. ИÑходный код в худшем Ñлучае может быть напиÑан плохо и непонÑтно. ДокументациÑ, еÑли она напиÑана плохо, может лгать, а Ñто в тыÑÑчу раз хуже. Это не облегчает работу ответÑтвенным программиÑтам. Как пиÑать Ñамодокументируемый код? Что Ñто вообще значит? Это значит: -- ПиÑать код, Ð´ÑƒÐ¼Ð°Ñ Ð¾ том, что кому-то придетÑÑ ÐµÐ³Ð¾ читать; -- ПрименÑть золотое правило выше; -- Выбирать решение, которое очевидно, даже еÑли менее очевидное решение быÑтрее; -- Жертвовать небольшими оптимизациÑми вмеÑто того, чтобы делать код менее понÑтным; -- Думать о читателе кода и тратить больше Ñвоего драгоценного времени на то, чтобы ему было проще; +- ПиÑать код, Ð´ÑƒÐ¼Ð°Ñ Ð¾ том, что кому-то придетÑÑ ÐµÐ³Ð¾ читать +- ПрименÑть золотое правило выше +- Выбирать решение, которое очевидно, даже еÑли менее очевидное решение быÑтрее +- Жертвовать небольшими оптимизациÑми вмеÑто того, чтобы делать код менее понÑтным +- Думать о читателе кода и тратить больше Ñвоего драгоценного времени на то, чтобы ему было проще - Ðикогда не называть функции `foo`, `bar` или `doIt`! Следующее: [Как работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом](06-How-to-Work-with-Poor-Code.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md index 894cffa..7036276 100644 --- a/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md +++ b/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -4,8 +4,8 @@ Это отличный момент начать документировать, даже еÑли пока только Ð´Ð»Ñ ÑебÑ. Попытка задокументировать код вынудит Ð²Ð°Ñ Ð¿Ð¾Ñмотреть на него Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… точек зрениÑ, которые вы до Ñтого не раÑÑматривали, и конечный документ может получитьÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ полезным. Пока вы занимаетеÑÑŒ Ñтим, прикиньте, Ñколько займет перепиÑать веÑÑŒ код или его некоторую чаÑть. Сохранит ли Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ¿Ð¸Ñывание чаÑти кода? Сможете ли вы больше доверÑть коду, еÑли вы перепишите его? ЗдеÑÑŒ опаÑайтеÑÑŒ ÑамоуверенноÑти. ЕÑли вы перепишете код, то вам будет проще, но будет ли проще Ñледующему человеку, который будет работать Ñ ÐºÐ¾Ð´Ð¾Ð¼? ЕÑли вы перепишите код, то как много придетÑÑ Ñ‚ÐµÑтировать? Ðе перевеÑит ли необходимоÑть теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кода вÑе преимущеÑтва, которые он принеÑет? -Ð’ любой оценке времени, которую вы делаете Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ‡ÑƒÐ¶Ð¸Ð¼ кодом, качеÑтво Ñтоого кода должно влиÑть на ваше воÑприÑтие риÑков проблем и неизвеÑтных факторов. +Ð’ любой оценке времени, которую вы делаете Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ‡ÑƒÐ¶Ð¸Ð¼ кодом, качеÑтво Ñтого кода должно влиÑть на ваше воÑприÑтие риÑков проблем и неизвеÑтных факторов. -Важно помнить, что абÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ Ð¸ инкапÑулÑциÑ, два лучших ÑредÑтва программиÑта, оÑобенно применимы к плохому коду. Возможно, вы не Ñможете переделать целиком большой блок кода, но еÑли вы добавите новый уровень абÑтракции к него, то Ñможете добитьÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… преимущеÑтв без переделки вÑего кода. Ð’ чаÑтноÑти, вы можете отделить оÑобенно плохие чаÑти кода, чтобы отрефакторить их незавиÑимо от оÑтального кода. +Важно помнить, что абÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ Ð¸ инкапÑулÑциÑ, два лучших ÑредÑтва программиÑта, оÑобенно применимы к плохому коду. Возможно, вы не Ñможете переделать целиком большой блок кода, но еÑли вы добавите новый уровень абÑтракции к нему, то Ñможете добитьÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… преимущеÑтв без переделки вÑего кода. Ð’ чаÑтноÑти, вы можете отделить оÑобенно плохие чаÑти кода, чтобы отрефакторить их незавиÑимо от оÑтального кода. Следующее: [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð°](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md index 3308445..ca20628 100644 --- a/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md +++ b/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -1,8 +1,8 @@ # Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий [//]: # (Version:1.0.0) -СиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð° (также извеÑтные как ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий) позволÑÑŽÑ‚ вам Ñффективно управлÑть проектами. Они очень полезны Ð´Ð»Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡ÐºÐ¸ и жизненно важны Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разработчиков. Они отÑлеживают вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑех верÑиÑÑ… кода, так что ни одна Ñтрока кода не может быть потерÑна навÑегда. Кроме Ñтого, они позволÑÑŽÑ‚ приÑвоить оÑмыÑленное название изменениÑм. С помощью таких ÑиÑтем можно пиÑать отладочный код Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью, ведь веÑÑŒ модифицируемый код можно хранить отдельно от иÑходного работающего. Ðовый код потом можно показать вÑей команде или Ñразу выпуÑтить. +СиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий (также извеÑтные как ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð°) позволÑÑŽÑ‚ вам Ñффективно управлÑть проектами. Они очень полезны Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта-одиночки и жизненно важны Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разработчиков. Они отÑлеживают вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑех верÑиÑÑ… кода, так что ни одна Ñтрока кода не может быть потерÑна навÑегда. Кроме Ñтого, они позволÑÑŽÑ‚ приÑвоить оÑмыÑленное название изменениÑм. С помощью таких ÑиÑтем можно пиÑать отладочный код Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью, ведь веÑÑŒ модифицируемый код можно хранить отдельно от иÑходного работающего. Ðовый код потом можно показать вÑей команде или Ñразу выпуÑтить. -Я довольно поздно оценил вÑе преимущеÑтва ÑиÑтем ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий, но теперь без них Ñ Ð½Ðµ начну даже небольшой личный проект. Вообще, они нужны, когда вы работаете в команде Ñ Ð¾Ð´Ð½Ð¾Ð¹ кодовой базой. Ðо у них еÑть другое важное преимущеÑтво: они поощрÑÑŽÑ‚ думать о коде как о раÑтущей ÑиÑтеме. ПоÑкольку каждое изменение отмечено Ñвоим именем или номером, поÑтепенно приходишь к мыÑли, что программное обеÑпечение Ñто Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑÐµÑ€Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в коде. Я думаю, что Ñто оÑобенно полезно Ð´Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… программиÑтов. +Я довольно поздно оценил вÑе преимущеÑтва ÑиÑтем ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий, но теперь без них Ñ Ð½Ðµ начну даже небольшой личный проект. Вообще они нужны, когда вы работаете в команде Ñ Ð¾Ð´Ð½Ð¾Ð¹ кодовой базой. Ðо у них еÑть другое важное преимущеÑтво: они поощрÑÑŽÑ‚ думать о коде как о раÑтущей ÑиÑтеме. ПоÑкольку каждое изменение отмечено Ñвоим именем или номером, поÑтепенно приходишь к мыÑли, что программное обеÑпечение Ñто Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑÐµÑ€Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в коде. Я думаю, что Ñто оÑобенно полезно Ð´Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… программиÑтов. Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ñ‚ÐµÑ…Ð½Ð¸ÐºÐ° иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий заключаетÑÑ Ð² том, чтобы поÑтоÑнно держать Ñвой код в пределах неÑкольких дней от актуальноÑти. Код, который не может быть закончен за неÑколько дней, проверÑетÑÑ, но таким образом, чтобы он был неактивным и не вызывалÑÑ Ð² дейÑтвующей ÑиÑтеме, а значит, не Ñоздавал проблем Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…. Ошибки, замедлÑющие работу товарищей по команде, непроÑтительны и чаÑто ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð°Ð±Ñƒ. diff --git a/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md index 4329615..0b37814 100644 --- a/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md +++ b/ru/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -1,8 +1,8 @@ # Как пиÑать юнит-теÑты [//]: # (Version:1.0.0) -Юнит-теÑтирование, то еÑть теÑтирование отдельных чаÑтей кода командой, напиÑавшей его, Ñто чаÑть программирование, а не что-то отдельное от него. Проектирование того, как будет теÑтироватьÑÑ ÐºÐ¾Ð´, Ñто чаÑть общего Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°. Вам Ñледует запиÑывать планы по теÑтированию, даже еÑли Ñто вÑего одна фраза. Иногда теÑÑ‚ окажетÑÑ Ð¿Ñ€Ð¾Ñтым: "Хорошо ли выглÑдит кнопка?". Иногда он будет Ñложным: "Этот алгоритм ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ правильные ÑовпадениÑ?" +Юнит-теÑтирование, то еÑть теÑтирование отдельных чаÑтей кода командой, напиÑавшей его, Ñто чаÑть программированиÑ, а не что-то отдельное от него. Проектирование того, как будет теÑтироватьÑÑ ÐºÐ¾Ð´, Ñто чаÑть общего Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°. Вам Ñледует запиÑывать планы по теÑтированию, даже еÑли Ñто вÑего одна фраза. Иногда теÑÑ‚ окажетÑÑ Ð¿Ñ€Ð¾Ñтым: "Хорошо ли выглÑдит кнопка?". Иногда он будет Ñложным: "Этот алгоритм ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ правильные ÑовпадениÑ?" -Когда возможно, иÑползуйте проверки утверждений и теÑтовые драйверы. Они не только помогут найти баги в начале разработки, но будут полезны позже и позволÑÑ‚ уÑтранить более Ñложные проблемы. +Когда возможно, иÑпользуйте проверки утверждений и теÑтовые драйверы. Они не только помогут найти баги в начале разработки, но будут полезны позже и позволÑÑ‚ уÑтранить более Ñложные проблемы. ЭкÑтремальные программиÑты много пишут об Ñффективном юнит-теÑтировании. Я могу только поÑоветовать ознакомитьÑÑ Ñ Ð¸Ñ… трудами на Ñту тему. diff --git a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index fa3c770..8950abf 100644 --- a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -2,15 +2,15 @@ [//]: # (Version:1.0.0) Программирование Ñто деÑтельноÑть, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑвлÑетÑÑ ÐºÑƒÐ»ÑŒÑ‚ÑƒÑ€Ð¾Ð¹. К Ñожалению, Ñто не та культура, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ†ÐµÐ½Ð¸Ñ‚ пÑихичеÑкое и физичеÑкое здоровье. По культурно-иÑторичеÑким причинам (например, необходимоÑть работать по ночам на ненагруженных компьютерах) и из-за Ñильного Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑтить продукт на рынок программиÑты традиционно перерабатывают. Ðе думаю, что Ñтоит верить вÑему, что раÑÑказывают, но мне кажетÑÑ, что 60 рабочих чаÑов в неделю Ñто раÑпроÑтраненный график, а 50 чаÑов Ñто практичеÑки минимум. Это значит, что чаÑто требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. И Ñто ÑÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð´Ð»Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐ³Ð¾ программиÑта, который отвечает не только за ÑебÑ, но и за Ñвоих коллег. Ð’Ñ‹ должны понимать, когда идти домой, и иногда, когда предложить Ñвоим коллегам пойти домой. ЗдеÑÑŒ не может быть четких правил Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹, так же, как не может быть однозначных правил о том, как воÑпитывать детей. Ð’Ñе люди разные. -Свыше 60 рабочих чаÑов в неделю Ð´Ð»Ñ Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð°Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°, которую Ñ Ð¼Ð¾Ð³Ñƒ выдержать лишь небольшое Ð²Ñ€ÐµÐ¼Ñ (около недели). Ðо иногда от Ð¼ÐµÐ½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñтолько. Ðе знаю, Ñправедливо ли ожидать от человека 60 чаÑов работы в неделю. Я не уверен, что даже 40 чаÑов Ñто Ñправедливо. Однако, Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что Ñто глупо работать так много, что почти не извлекать пользы от дополнительных чаÑов работы. Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñтот предел лежит за 60 чаÑами в неделю. Я лично Ñчитаю, что программиÑÑ‚ должен проÑвлÑть благородÑтво и неÑти Ñту Ñ‚Ñжелую ношу. Однако, быть козлом Ð¾Ñ‚Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ - не обÑзанноÑть программиÑта. Печальный факт заключаетÑÑ Ð² том, что чаÑто программиÑтов проÑÑÑ‚ быть козлами отпущениÑ, чтобы уÑтроить Ð´Ð»Ñ ÐºÐ¾Ð³Ð¾-то предÑтавление, например, когда менеждер пытаетÑÑ Ð²Ð¿ÐµÑ‡Ð°Ñ‚Ð»Ð¸Ñ‚ÑŒ руководителÑ. ПрограммиÑты чаÑто идут на Ñто, потому что они хотÑÑ‚ угодить и не умеют говорить "нет". ЕÑть четыре ÑпоÑоба защиты от такого отношениÑ: +Свыше 60 рабочих чаÑов в неделю Ð´Ð»Ñ Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð°Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°, которую Ñ Ð¼Ð¾Ð³Ñƒ выдержать лишь небольшое Ð²Ñ€ÐµÐ¼Ñ (около недели). Ðо иногда от Ð¼ÐµÐ½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñтолько. Ðе знаю, Ñправедливо ли ожидать от человека 60 чаÑов работы в неделю. Я не уверен, что даже 40 чаÑов Ñто Ñправедливо. Однако, Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что глупо работать так много, чтобы почти не извлекать пользы от дополнительных чаÑов работы. Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñтот предел лежит за 60 чаÑами в неделю. Я лично Ñчитаю, что программиÑÑ‚ должен проÑвлÑть благородÑтво и неÑти Ñту Ñ‚Ñжелую ношу. Однако, быть козлом Ð¾Ñ‚Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ - не обÑзанноÑть программиÑта. Печальный факт заключаетÑÑ Ð² том, что чаÑто программиÑтов проÑÑÑ‚ быть козлами отпущениÑ, чтобы уÑтроить Ð´Ð»Ñ ÐºÐ¾Ð³Ð¾-то предÑтавление, например, когда менеджер пытаетÑÑ Ð²Ð¿ÐµÑ‡Ð°Ñ‚Ð»Ð¸Ñ‚ÑŒ руководителÑ. ПрограммиÑты чаÑто идут на Ñто, потому что они хотÑÑ‚ угодить и не умеют говорить "нет". ЕÑть четыре ÑпоÑоба защиты от такого отношениÑ: - Как можно больше общайтеÑÑŒ Ñо вÑеми Ñотрудниками в компании, чтобы никто не мог ввеÑти в заблуждение руководителей отноÑительно того, что проиÑходит -- ÐаучитеÑÑŒ оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° работу и планировать вÑе ее чаÑти в Ñвном виде и дайте вÑем четкое предÑтавление о Ñвоем раÑпиÑании и где его найти +- ÐаучитеÑÑŒ оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° работу и планировать вÑе ее чаÑти в Ñвном виде. Дайте вÑем четкое предÑтавление о Ñвоем раÑпиÑании и где его найти - ÐаучитеÑÑŒ говорить "нет", говорите "нет" вÑей командой, еÑли Ñто необходимо -- УвольнÑйтеÑÑŒ, еÑли дургих выходов нет +- УвольнÑйтеÑÑŒ, еÑли нет других выходов -БольшинÑтво программиÑтов Ñто хорошие программиÑты, а хорошие программиÑты хотÑÑ‚ Ñделать как можно больше. Чтобы доÑтичь Ñтого, они должны Ñффективно управлÑть Ñвоим временем. Между разогревом перед работой и глубоким погружением в нее вÑегда должно пройти некоторое времÑ. Многие программиÑты лучше вÑего работают, когда они раÑполагают длинными, никем не прерываемыми отрезками времени, в течение которых они могут ÑоÑредоточитьÑÑ Ð¸ погрузитьÑÑ Ð² работу. Ðо люди должны еще и Ñпать, и выполнÑть множетÑов других вещей. Каждый должен найти ÑпоÑоб ÑбаланÑировать Ñвой рабочий ритм и ритм жизни. Каждый программиÑÑ‚ должен делать вÑе возможное, чтобы обеÑпечить ÑÐµÐ±Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð°Ð¼Ð¸ Ñффективной работы, например, Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€ÑƒÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ дни, когда он может отвлекатьÑÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на Ñамые важные ÑобраниÑ. +БольшинÑтво программиÑтов Ñто хорошие программиÑты, а хорошие программиÑты хотÑÑ‚ Ñделать как можно больше. Чтобы доÑтичь Ñтого, они должны Ñффективно управлÑть Ñвоим временем. Между разогревом перед работой и глубоким погружением в нее вÑегда должно пройти некоторое времÑ. Многие программиÑты лучше вÑего работают, когда они раÑполагают длинными, никем не прерываемыми отрезками времени, в течение которых они могут ÑоÑредоточитьÑÑ Ð¸ погрузитьÑÑ Ð² работу. Ðо люди должны еще и Ñпать, и выполнÑть множеÑтво других вещей. Каждый должен найти ÑпоÑоб ÑбаланÑировать Ñвой рабочий ритм и ритм жизни. Каждый программиÑÑ‚ должен делать вÑе возможное, чтобы обеÑпечить ÑÐµÐ±Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð°Ð¼Ð¸ Ñффективной работы, например, Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€ÑƒÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ дни, когда он может отвлекатьÑÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на Ñамые важные ÑобраниÑ. -ПоÑкольку у Ð¼ÐµÐ½Ñ ÐµÑть дети, Ñ ÑтараюÑÑŒ проводить вечера Ñ Ð½Ð¸Ð¼Ð¸. Лучше вÑего мне подходит очень долгий раочий день, затем поÑпать в офиÑе или Ñ€Ñдом (Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ очень далеко от дома), затем на Ñледующий день уйти домой доÑтаточно рано, чтобы провеÑти Ð²Ñ€ÐµÐ¼Ñ Ñ Ð¼Ð¾Ð¸Ð¼Ð¸ детьми до того, как они отправÑÑ‚ÑÑ Ñпать. Этот ритм не очень удобен Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, но Ñто лучшее, что Ñ Ñмог найти. ОтправлÑйтеÑÑŒ домой, еÑли у Ð²Ð°Ñ Ð·Ð°Ñ€Ð°Ð·Ð½Ð°Ñ Ð±Ð¾Ð»ÐµÐ·Ð½ÑŒ. Ð’Ñ‹ должны идти домой, еÑли у Ð²Ð°Ñ Ñуицидальные мыÑли. Ð’Ñ‹ должны Ñделать перерыв или идти домой, еÑли вы думаете об убийÑтве больше чем неÑколько Ñекунд. Ð’Ñ‹ должны отправить домой человека, еÑли он демонÑтрирует признаки Ñерьезного умÑтвенного раÑÑтройÑтва или депреÑÑии. ЕÑли из-за уÑталоÑти у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ‚ Ñоблазн быть более нечеÑтным или вредным, чем вам обычно ÑвойÑтвенно, Ñделайте перерыв. Ðе иÑпользуйте кокаин или амфетамины Ð´Ð»Ñ Ð±Ð¾Ñ€ÑŒÐ±Ñ‹ Ñ ÑƒÑталоÑтью. Ðе злоупотреблÑйте кофеином. +ПоÑкольку у Ð¼ÐµÐ½Ñ ÐµÑть дети, Ñ ÑтараюÑÑŒ проводить вечера Ñ Ð½Ð¸Ð¼Ð¸. Лучше вÑего мне подходит очень долгий рабочий день, затем поÑпать в офиÑе или Ñ€Ñдом (Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ очень далеко от дома), затем на Ñледующий день уйти домой доÑтаточно рано, чтобы провеÑти Ð²Ñ€ÐµÐ¼Ñ Ñ Ð¼Ð¾Ð¸Ð¼Ð¸ детьми до того, как они отправÑÑ‚ÑÑ Ñпать. Этот ритм не очень удобен Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, но Ñто лучшее, что Ñ Ñмог найти. ОтправлÑйтеÑÑŒ домой, еÑли у Ð²Ð°Ñ Ð·Ð°Ñ€Ð°Ð·Ð½Ð°Ñ Ð±Ð¾Ð»ÐµÐ·Ð½ÑŒ. Ð’Ñ‹ должны идти домой, еÑли у Ð²Ð°Ñ Ñуицидальные мыÑли. Ð’Ñ‹ должны Ñделать перерыв или идти домой, еÑли вы думаете об убийÑтве больше, чем неÑколько Ñекунд. Ð’Ñ‹ должны отправить домой человека, еÑли он демонÑтрирует признаки Ñерьезного умÑтвенного раÑÑтройÑтва или депреÑÑии. ЕÑли из-за уÑталоÑти у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ‚ Ñоблазн быть более нечеÑтным или вредным, чем вам обычно ÑвойÑтвенно, Ñделайте перерыв. Ðе иÑпользуйте кокаин или амфетамины Ð´Ð»Ñ Ð±Ð¾Ñ€ÑŒÐ±Ñ‹ Ñ ÑƒÑталоÑтью. Ðе злоупотреблÑйте кофеином. Следующее: [Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми](11-How-to-Deal-with-Difficult-People.md) diff --git a/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md index d6bfb97..cb4c5df 100644 --- a/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md +++ b/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -1,14 +1,14 @@ # Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми [//]: # (Version:1.0.0) -Скорее вÑего вам придетÑÑ Ð¸Ð¼ÐµÑ‚ÑŒ дело Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми. Может быть, вы Ñами трудный человек. ЕÑли вы из тех, у кого чаÑто возникают конфликты Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и руководителÑми, то вы должны ценить Ñвою незавиÑимоÑть, но одновременно работать над Ñвоими навыками взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð¾Ñтальными, не приноÑÑ Ð² жертву Ñвои принципы и ум. +Скорее вÑего вам придетÑÑ Ð¸Ð¼ÐµÑ‚ÑŒ дело Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми. Может быть, вы Ñами трудный человек. ЕÑли вы из тех, у кого чаÑто возникают конфликты Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и руководителÑми, то вам Ñтоит ценить Ñвою незавиÑимоÑть, но одновременно работать над Ñвоими навыками взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð¾Ñтальными, не приноÑÑ Ð² жертву Ñвои принципы и ум. -Это может Ñтать проблемой Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… программиÑтов, у которых нет опыта подобных Ñитуаций, и чей предыдущий жизненный опыт научил моделÑм поведениÑ, которые не годÑÑ‚ÑÑ Ð² рабочем окружении. Трудные люди чаÑто привыкают к разноглаÑиÑм, и на них меньше, чем на оÑтальных, дейÑтвует Ñоциальное давление идти на компромиÑÑ. Главное - уважать их должным образом. Ðо Ñто больше, чем захотите вы, и меньше, чем могут захотеть подобные люди. +Это может Ñтать проблемой Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… программиÑтов, у которых нет опыта подобных Ñитуаций, и чей предыдущий жизненный опыт научил моделÑм поведениÑ, которые не годÑÑ‚ÑÑ Ð² рабочем окружении. Трудные люди чаÑто привыкают к разноглаÑиÑм, и на них меньше, чем на оÑтальных, дейÑтвует Ñоциальное давление идти на компромиÑÑ. Главное - уважать их должным образом, что больше, чем захотите вы, и меньше, чем могут захотеть подобные люди. ПрограммиÑты вынуждены работать вмеÑте в команде. Когда возникает разноглаÑие, его надо как-то решить, его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñлишком долго. Трудные люди чаÑто бывают чрезвычайно умны, и им еÑть, что полезного выÑказать. Очень важно Ñлушать их и понимать без предубеждениÑ, которое может вызывать их личноÑть. ТрудноÑти в общении чаÑто ÑтановÑÑ‚ÑÑ Ð¸Ñточником разноглаÑий, но их можно преодолеть терпением. СтарайтеÑÑŒ держать общение в Ñпокойном и вежливом тоне, не поддавайтеÑÑŒ на уловки увеличить конфликт. ПоÑле того, как вы потратите разумное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° попытки понÑть оппонента, примите решение. -Ðе позволÑйте грубой Ñиле заÑтвавлÑть Ð²Ð°Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ то, Ñ Ñ‡ÐµÐ¼ вы неÑоглаÑны. ЕÑли вы лидер команды, принимайте то, что вы Ñчитаете лучшим решением. Ðе принимайте Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ÑÑ…Ð¾Ð´Ñ Ð¸Ð· личных причин, какими они бы ни были. Будьте готовы объÑÑнить Ñвое решение. ЕÑли вы в команде Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼ человеком, не позволÑйте, чтобы решение лидера было вызвано любым личным мнением. ЕÑли решение не в вашу пользу, принимайте его от вÑей души. +Ðе позволÑйте грубой Ñиле заÑтавлÑть Ð²Ð°Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ то, Ñ Ñ‡ÐµÐ¼ вы неÑоглаÑны. ЕÑли вы лидер команды, принимайте то решение, которое вы Ñчитаете лучшим. Ðе принимайте Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ÑÑ…Ð¾Ð´Ñ Ð¸Ð· личных причин, какими они бы ни были. Будьте готовы объÑÑнить Ñвое решение. ЕÑли вы в команде Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼ человеком, не позволÑйте, чтобы решение лидера было вызвано любым личным мнением. ЕÑли решение не в вашу пользу, примите его. -Трудные люди менÑÑŽÑ‚ÑÑ Ð¸ ÑтановÑÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ в общении. Я Ñам был Ñвидетелем Ñтому, но Ñто ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. Как бы то ни было, у вÑех бывают периоды взлетов и падений. +Трудные люди менÑÑŽÑ‚ÑÑ Ð¸ ÑтановÑÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ в общении. Я Ñам был Ñвидетелем Ñтому, но такое ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. Как бы то ни было, у вÑех бывают периоды взлетов и падений. Один из Ñамых больших вызовов, вÑтречающихÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñƒ программиÑту, оÑобенно лидерам, Ñто держать трудного человека вовлеченным в общую работу. Такие люди больше Ñклонны уклонÑтьÑÑ Ð¾Ñ‚ нее и паÑÑивно ÑопротивлÑтьÑÑ. diff --git a/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md index 2293b7b..9d6b380 100644 --- a/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md +++ b/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -6,8 +6,8 @@ ЕÑли жертвы неизбежны, вам Ñтоит попытатьÑÑ Ð¾Ñ‚Ð´ÐµÐ»Ð¸Ñ‚ÑŒ некачеÑтвенный в результате такого Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ в отдельные компоненты, чтобы в дальнейшем вернутьÑÑ Ðº нему и перепиÑать. РазъÑÑните Ñто Ñвоей команде, чтобы они могли запланировать такой подход. -NinjaProgrammer на Slashdot приÑлал такой шедевр: +NinjaProgrammer на Slashdot приÑлал на Ñту тему такой шедевр: -> Помните, что Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° будет уÑтойчива к плохой реализации к коде. ЕÑли в коде приÑутÑтвуют правильные интерфейÑÑ‹ и абÑтракции, тогда поÑледующий рефакторинг будет менее болезненным. ЕÑли напиÑать чиÑтый код, который легко поправить, подумайте, в чем проблема у архитектуры, из-за которой Ñто проиÑходит. +> Помните, что Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° будет уÑтойчива к плохой реализации к коде. ЕÑли в коде приÑутÑтвуют правильные интерфейÑÑ‹ и абÑтракции, тогда поÑледующий рефакторинг будет менее болезненным. ЕÑли вам Ñложно напиÑать чиÑтый код, который легко поправить, подумайте, в чем проблема архитектуры, из-за которой возникает Ñта ÑложноÑть. Следующее: [Как управлÑть завиÑимоÑÑ‚Ñми](02-How-to-Manage-Software-System-Dependence.md) diff --git a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index 9f34432..ce013c8 100644 --- a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -6,7 +6,7 @@ - Ограничивает ли компонент Ð²Ð°Ñ Ð¸Ñпользовать определенное аппаратное обеÑпечение или ÑиÑтему? - Что вы будете делать, еÑли компонент полноÑтью откажет? -Ð’Ñегда лучше инкапÑулировать компонент таким образом, чтобы он был отделен, и его можно было легко заменить. ЕÑли компонент покажет Ñвою неработоÑпоÑобноÑть, вы замените его на другой или напишите Ñвой ÑобÑтвенный. ИнкапÑулÑÑ†Ð¸Ñ Ð½Ðµ улучшает переноÑимоÑть, но делает перепиÑывание кода проще, что почти также здорово. +Ð’Ñегда лучше инкапÑулировать компонент таким образом, чтобы он был отделен от оÑновной ÑиÑтемы, и его можно было легко заменить. ЕÑли компонент покажет Ñвою неработоÑпоÑобноÑть, вы замените его на другой или напишите Ñвой ÑобÑтвенный. ИнкапÑулÑÑ†Ð¸Ñ Ð½Ðµ улучшает переноÑимоÑть, но делает перепиÑывание кода проще, что почти также здорово. ЕÑли у Ð²Ð°Ñ ÐµÑть иÑходный код компонента, то риÑки ÑнижаютÑÑ Ð²Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð¾. С иÑходным кодом вы можете быÑтрее оценивать компонент, отлаживать, находить новые Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ вноÑить иÑправлениÑ. ЕÑли вы вноÑите иÑправлениÑ, то о них Ñледует Ñообщить владельцу компонента, чтобы он включил их в официальный релиз. Ð’ противном Ñлучае, вам придетÑÑ ÑамоÑтоÑтельно поддерживать неофициальную верÑию компонента. diff --git a/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md index ba99c05..2b3684a 100644 --- a/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md +++ b/ru/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -1,6 +1,6 @@ # Как оценивать Ñтороннее программное обеÑпечение [//]: # (Version:1.0.0) -ИÑпользование Ñтороннего программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñто один из Ñамых Ñффективных ÑпоÑобов быÑтро поÑтроить Ñерьезную ÑиÑтему. От него не Ñледует отказыватьÑÑ, но Ñледует изучить ÑвÑзанные Ñ Ð½Ð¸Ð¼ риÑки. Один из Ñамых больших риÑков Ñто период множеÑтва багов и почти неработоÑпоÑобноÑти, ÑлучающийÑÑ Ð¿ÐµÑ€ÐµÐ´ тем, как программное обеÑпечение будет доработано и Ñтанет уÑтойчивым продуктом. Прежде чем раÑÑматривать возможноÑть интеграции Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹, разработанной вашей или Ñторонней компанией, очень важно оценить, наÑколько она уÑтойчива Ð´Ð»Ñ Ð¸ÑпользованиÑ. Вот деÑÑть вопроÑов, которые вы должны задать Ñебе по Ñтому поводу: +ИÑпользование Ñтороннего программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñто один из Ñамых Ñффективных ÑпоÑобов быÑтро поÑтроить Ñерьезную ÑиÑтему. От него не Ñледует отказыватьÑÑ, но Ñледует изучить ÑвÑзанные Ñ Ð½Ð¸Ð¼ риÑки. Один из Ñамых больших риÑков - Ñто период множеÑтва багов и почти неработоÑпоÑобноÑти, ÑлучающийÑÑ Ð¿ÐµÑ€ÐµÐ´ тем, как программное обеÑпечение будет доработано и Ñтанет уÑтойчивым продуктом. Прежде чем раÑÑматривать возможноÑть интеграции Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹, разработанной вашей или Ñторонней компанией, очень важно оценить, наÑколько она уÑтойчива Ð´Ð»Ñ Ð¸ÑпользованиÑ. Вот деÑÑть вопроÑов, которые вы должны задать Ñебе по Ñтому поводу: 1. Это выпущенный продукт? (ОбещаниÑм не Ñтоит верить) 2. СущеÑтвует ли доÑтупный Ñвод знаний об Ñтом программном обеÑпечении? @@ -13,7 +13,6 @@ 9. Хочет ли ваша команда или ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ Ð½Ð¸Ð¼? 10. Сможете ли вы нанÑть людей Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼, даже еÑли Ñто плохое программное обеÑпечение? -Ðебольшое размышление над Ñтими вопроÑами демонÑтрирует огромную ценноÑть хорошо зарекомендовавшего ÑÐµÐ±Ñ Ñвободного программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ кодом в Ñнижении риÑков. +Ðебольшое размышление над Ñтими вопроÑами демонÑтрирует огромную ценноÑть хорошо зарекомендовавшего ÑÐµÐ±Ñ Ñвободного программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ кодом в Ñнижении риÑков. - -Следующее: [Как решать: покупать программу или пиÑать Ñвою](04-How-to-Make-a-Buy-vs-Build-Decision.md) \ No newline at end of file +Следующее: [Как решить: покупать программу или пиÑать Ñвою](04-How-to-Make-a-Buy-vs-Build-Decision.md) diff --git a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index 0d43204..e4b3eaf 100644 --- a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -1,4 +1,4 @@ -# Как решать: покупать программу или пиÑать Ñвою +# Как решить: покупать программу или пиÑать Ñвою [//]: # (Version:1.0.0) ПредпринимательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проект, которые пытаютÑÑ Ð´Ð¾Ð±Ð¸Ñ‚ÑŒÑÑ Ñ‡ÐµÐ³Ð¾-то Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ программного отбеÑпечениÑ, поÑтоÑнно вынуждены принимать Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° *покупать программу или пиÑать Ñвою*. Это выражение неудачно по двум причинам. Оно как будто игнорирует ÑущеÑтвование Ñвободного и открытого программного обеÑпечениÑ, которое необÑзательно покупать. И, что более важно, его Ñтоит переформулировать в *приобреÑти и интегрировать или напиÑать Ñвое и интегрировать*, потому что затраты на интеграцию обÑзательны надо учеÑть. Такие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ редкого ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´ÐµÐ»Ð¾Ð²Ð¾Ð¹, управленчеÑкой и инженерной Ñмекалки. diff --git a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index 35930d0..e1a828b 100644 --- a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -1,8 +1,8 @@ # Как раÑти профеÑÑионально [//]: # (Version:1.0.0) -Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте роль, которую вы хотите. Выражайте признательноÑть и благодарноÑть людÑи за их вклад в уÑпех организации и за перÑональнуб помощь вам. +Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте роль, которую вы хотите. Выражайте признательноÑть и благодарноÑть людÑи за их вклад в уÑпех организации и за помощь лично вам. -ЕÑли вы хотите Ñтать лидером команды, ÑпоÑобÑтвуйте формированию общего ÑоглаÑÐ¸Ñ Ð² работе. ЕÑли вы хотите Ñтать менеджером, возьмите ответÑтвенноÑть за раÑпиÑание. Обычно вы Ñпокойно можете Ñделать Ñто, Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ñ Ð»Ð¸Ð´ÐµÑ€Ð¾Ð¼ или менеджером, так как Ñто Ñнимет Ñ Ð½Ð¸Ñ… большую нагрузку. ЕÑли Ñто Ñлишком ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, возьмите на ÑÐµÐ±Ñ Ð¾Ð±ÑзанноÑти поменьше. +ЕÑли вы хотите Ñтать лидером команды, ÑпоÑобÑтвуйте формированию общего ÑоглаÑÐ¸Ñ Ð² работе. ЕÑли вы хотите Ñтать менеджером, возьмите ответÑтвенноÑть за график. Обычно вы Ñпокойно можете Ñделать Ñто, Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ñ Ð»Ð¸Ð´ÐµÑ€Ð¾Ð¼ или менеджером, так как Ñто Ñнимет Ñ Ð½Ð¸Ñ… большую нагрузку. ЕÑли Ñто Ñлишком ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, возьмите на ÑÐµÐ±Ñ Ð¾Ð±ÑзанноÑти поменьше. Оценивайте ÑебÑ. ЕÑли вы хотите Ñтать лучше как программиÑÑ‚, ÑпроÑите программиÑта, которого вы уважаете, как Ñтать похожим на него. Также вы можете ÑпроÑить Ñвоего боÑÑа, который меньше разбираетÑÑ Ð² Ñтом, но зато имеет большее влиÑние на вашу карьеру. diff --git a/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md index cf331be..aa222a1 100644 --- a/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md +++ b/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -1,15 +1,15 @@ # Как проводить ÑобеÑÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ [//]: # (Version:1.0.0) -Оценке потенциальных Ñотрудников не уделÑетÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾Ð³Ð¾ вниманиÑ. ÐанÑтый плохой Ñотрудник Ñто, как и неудачный брак, ужаÑно. Ð—Ð½Ð°Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть уÑилий каждого должна быть направлена на найм, но Ñто ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. +Оценке потенциальных Ñотрудников не уделÑетÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾Ð³Ð¾ вниманиÑ. ÐанÑтый плохой Ñотрудник Ñто так же ужаÑно, как и неудачный брак. Ð—Ð½Ð°Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñть уÑилий каждого должна быть направлена на найм, но Ñто ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. -ЕÑть разные Ñтили ÑобеÑедованиÑ. Ðекоторые мучительны и направлены оказать на кандидата давление. Это Ñлужит ценной цели: выÑвить под ÑтреÑÑом недоÑтатки характера и ÑлабоÑти. Кандидаты не чеÑтнее Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽÐµÑ€Ð°Ð¼Ð¸, чем Ñ Ñамим Ñобой, а чеолвечеÑÐºÐ°Ñ ÑпоÑобноÑть к Ñамообману поразительна. +ЕÑть разные Ñтили ÑобеÑедованиÑ. Ðекоторые мучительны и направлены оказать на кандидата давление. Это Ñлужит ценной цели: выÑвить под ÑтреÑÑом недоÑтатки характера и ÑлабоÑти. Кандидаты не чеÑтнее Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽÐµÑ€Ð°Ð¼Ð¸, чем Ñ Ñамим Ñобой, а человечеÑÐºÐ°Ñ ÑпоÑобноÑть к Ñамообману поразительна. -Как минимум, вам Ñтоит выделить два чаÑа на уÑтную оценку техничеÑких навыков каждого кандидата. С опытом вы научитеÑÑŒ быÑтро выÑÑнÑть, что они знают, и быÑтро проводить границу Ñ Ñ‚ÐµÐ¼, чего они не знают. Кандидаты Ñ ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ отноÑÑÑ‚ÑÑ Ðº Ñтому. Мне доводилоÑÑŒ неÑколько раз Ñлышать от кандидатов, что качеÑтво ÑобеÑÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ñ‹Ð»Ð¾ одной из причин выбрать компанию. Хорошие профеÑÑионалы хотÑÑ‚, чтобы их нанимали за навыки, а не за поÑледнее меÑтоработы или колледж или некие иные неÑущеÑтвенные характериÑтики. +Как минимум, вам Ñтоит выделить два чаÑа на уÑтное ÑобеÑедование по техничеÑким навыкам каждого кандидата. С опытом вы научитеÑÑŒ быÑтро выÑÑнÑть, что они знают, и быÑтро проводить границу Ñ Ñ‚ÐµÐ¼, чего они не знают. Кандидаты Ñ ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ отноÑÑÑ‚ÑÑ Ðº Ñтому. Мне доводилоÑÑŒ неÑколько раз Ñлышать от кандидатов, что качеÑтво ÑобеÑÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ñ‹Ð»Ð¾ одной из причин выбрать компанию. Хорошие профеÑÑионалы хотÑÑ‚, чтобы их нанимали за навыки, а не за поÑледнее меÑто работы, колледж или другие неÑущеÑтвенные характериÑтики. -При ÑобеÑедовании также Ñтоит оценивать ÑпоÑобноÑть кандидата учитьÑÑ, что гораздо важнее того, что он уже знает. Также Ñтоит обратить внимание на признаки трудного человека. Их можно раÑпознать, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸ о ÑобеÑедовании, но во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽ быть трудно их определить. ÐаÑколько хорошо кандидат умеет общатьÑÑ Ð¸ взаимодейÑтвовать Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ гораздо важнее Ð·Ð½Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÐµÐ¹ÑˆÐµÐ³Ð¾ Ñзыка программированиÑ. +При ÑобеÑедовании также Ñтоит оценивать ÑпоÑобноÑть кандидата учитьÑÑ, что гораздо важнее того, что он уже знает. Также Ñтоит обратить внимание на признаки трудного человека. Их можно раÑпознать, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸ о ÑобеÑедовании, но во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽ быть трудно их заметить. Умение кандидата общатьÑÑ Ð¸ взаимодейÑтвовать Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ гораздо важнее Ð·Ð½Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÐµÐ¹ÑˆÐµÐ³Ð¾ Ñзыка программированиÑ. -Один из читателей рекомендует давать теÑтовое задание кандидатам. ПреимущеÑтво Ñтого теÑта в том, что он позволÑет выÑвить кандидата, который хорошо предÑтавлÑет ÑебÑ, но не может пиÑать код. Таких людей немало. Я лично не пробовал Ñтот метод, но он кажетÑÑ Ñ€Ð°Ð·ÑƒÐ¼Ð½Ñ‹Ð¼. +Один из читателей рекомендует давать кандидатам теÑтовое задание на дом. ПреимущеÑтво Ñтого теÑта в том, что он позволÑет выÑвить кандидата, который хорошо презентует ÑебÑ, но не может пиÑать код. Таких людей немало. Я лично не пробовал Ñтот метод, но он кажетÑÑ Ñ€Ð°Ð·ÑƒÐ¼Ð½Ñ‹Ð¼. -Ðаконец, ÑобеÑедование - Ñто еще и процеÑÑ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸. Ð’Ñ‹ продаете Ñвоб компанию или проект кандидату. Однако, поÑкольку вы разговариваете Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтом, не пытайтеÑÑŒ приукраÑить правду. Ðачните Ñ Ð¿Ð»Ð¾Ñ…Ð¾Ð³Ð¾, а затем перейдите к тому хорошему, что еÑть. +Ðаконец, ÑобеÑедование - Ñто еще и процеÑÑ Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð¸. Ð’Ñ‹ продаете Ñвою компанию или проект кандидату. Однако, поÑкольку вы разговариваете Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтом, не пытайтеÑÑŒ приукраÑить правду. Ðачните Ñ Ð¿Ð»Ð¾Ñ…Ð¾Ð³Ð¾, а затем перейдите к тому хорошему, что еÑть. Следующее: [Как понÑть, когда применÑть выÑокие технологии](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md index 0788a87..9f97e8a 100644 --- a/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md +++ b/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -1,15 +1,15 @@ # Как понÑть, когда применÑть выÑокие технологии [//]: # (Version:1.0.0) -СущеÑтвует Ñвод знаний об алгоритмах, Ñтруктурах данных, математике и других вещах, о которых программиÑты знают, но довольно редко иÑпользуют в работе. Ðа практике Ñти замкчательные вещи Ñлишком Ñложны и, как правило, ненужны. Ðет ÑмыÑла улучшать алгоритм, когда Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð½Ð° неÑффективный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº базе данных. ДоÑÐ°Ð´Ð½Ð°Ñ Ñ‡Ð°Ñть Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑоÑтоит в том, чтобы заÑтавить ÑиÑтемы общатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ и иÑпользовать очень проÑтые Ñтруктуры данных Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ ÐºÑ€Ð°Ñивого пользовательÑкого интерфейÑа. +СущеÑтвует Ñвод знаний об алгоритмах, Ñтруктурах данных, математике и других вещах, о которых программиÑты знают, но довольно редко иÑпользуют в работе. Ðа практике Ñти замечательные вещи Ñлишком Ñложны и, как правило, ненужны. Ðет ÑмыÑла улучшать алгоритм, когда Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð½Ð° неÑффективный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº базе данных. ДоÑÐ°Ð´Ð½Ð°Ñ Ñ‡Ð°Ñть Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ð² том, чтобы заÑтавить ÑиÑтемы общатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ и иÑпользовать очень проÑтые Ñтруктуры данных Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ ÐºÑ€Ð°Ñивого пользовательÑкого интерфейÑа. Когда Ñледует применÑть выÑокие технологии? Когда Ñледует открывать Ñерьезные книги, чтобы найти альтернативу обычному алгоритму? Иногда полезно Ñто делать, но такие технологии Ñледует тщательно оценивать. Три Ñамых важных ÑÐ¾Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾ потенциальном иÑпользовании какой-либо техники Ñто: -- Хорошо ли Ñта техники инкапÑулирована? Так что риÑк Ð´Ð»Ñ Ð¾Ñтальных ÑиÑтем невыÑок, как и общий прироÑÑ‚ ÑложноÑти и затраты на поддержку +- Хорошо ли Ñта техника инкапÑулирована? Так что риÑк Ð´Ð»Ñ Ð¾Ñтальных ÑиÑтем невыÑок, как и общий прироÑÑ‚ ÑложноÑти и затраты на поддержку - ЯвлÑетÑÑ Ð»Ð¸ преимущеÑтво иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтой техники значительным (например, в два раза Ð´Ð»Ñ Ñтарой и хорошо разработанной ÑиÑтемы или в деÑÑть раз Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹)? -- Сможете ли вы проверить и оценить Ñту технику Ñффективно? +- Сможете ли вы протеÑтировать и оценить Ñту технику Ñффективно? -ЕÑли хорошо изолированный алгоритм, иÑпользующий Ñлегка более Ñложную логику, может уменьшить нагрузку на аппаратную чаÑть или увеличить производительноÑть в два раза, то будет преÑтуплением не иÑпользовать его. Один из факторов поддержать такой подход - Ñто показать, наÑколько низок риÑк иÑпользованиÑ, так как Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐ¾ изучена. ОÑтаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ риÑк интеграции. ЗдеÑÑŒ опыт и ÑкÑпертиза программиÑта в Ñочетании Ñ Ñамой технологией должны Ñделать интеграцию доÑтаточно проÑтой. +ЕÑли хорошо изолированный алгоритм, иÑпользующий Ñлегка более Ñложную логику, может уменьшить нагрузку на аппаратную чаÑть или увеличить производительноÑть в два раза, то будет преÑтуплением не иÑпользовать его. Один из ÑпоÑобов убедить применить такой подход - Ñто показать, наÑколько низок риÑк иÑпользованиÑ, так как Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐ¾ изучена. ОÑтаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ риÑк интеграции. ЗдеÑÑŒ опыт и ÑкÑпертиза программиÑта в Ñочетании Ñ Ñамой технологией должны Ñделать интеграцию доÑтаточно проÑтой. Следующее: [Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸](08-How-to-Talk-to-Non-Engineers.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md index 756fec3..d2b3c70 100644 --- a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md +++ b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -1,18 +1,18 @@ # Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸ [//]: # (Version:1.0.0) -Инженеры и в чаÑтноÑти программиÑты чаÑто отделÑÑŽÑ‚ÑÑ Ð¾Ñ‚ оÑтальных людей. Это значит, что оÑтальные люди непохожи на наÑ. Об Ñтом Ñтоит помнить во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Ð’Ñегда Ñледует понимать Ñвою аудиторию. +Ð’ популÑрной культуре инженеры и в чаÑтноÑти программиÑты чаÑто отделÑÑŽÑ‚ÑÑ Ð¾Ñ‚ оÑтальных людей. Это значит, что оÑтальные люди непохожи на наÑ. Об Ñтом Ñтоит помнить во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Ð’Ñегда Ñледует понимать Ñвою аудиторию. -Ðеинженеры умны, но не так ÑвÑзаны Ñ Ñозданием техничеÑких вещей, как мы. Мы Ñоздаем продукт. Они продают его, работают Ñ Ð½Ð¸Ð¼, поддерживают и управлÑÑŽÑ‚, но они не ÑкÑперты в Ñоздании. Они не так хороши в командной работе, как инженеры (здеÑÑŒ, вне вÑÑких Ñомнений, еÑть иÑключениÑ). Их Ñоциальные навыки как правило так же хороши или лучше, чем у инженеров, но их работа не вÑегда требует того доверительного и точного Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ четкого раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡ как у программиÑтов. +Ðеинженеры умны, но не так ÑвÑзаны Ñ Ñозданием техничеÑких вещей, как мы. Мы Ñоздаем продукт. Они продают его, работают Ñ Ð½Ð¸Ð¼, поддерживают и управлÑÑŽÑ‚, но они не ÑкÑперты в Ñоздании. Они не так хороши в командной работе, как инженеры (здеÑÑŒ, вне вÑÑких Ñомнений, еÑть иÑключениÑ). Их Ñоциальные навыки как правило так же хороши или лучше, чем у инженеров вне рабочей обÑтановки, но их работа не вÑегда требует того доверительного и точного Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ четкого раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡ как у программиÑтов. -Ðеинженеры могут Ñлишком ÑтремитьÑÑ ÑƒÐ³Ð¾Ð´Ð¸Ñ‚ÑŒ, и вы можете подавить их. Подобно нам, они могут без реального Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñказать "да", чтобы угодить вам или из-за Ñтраха перед вами. И затем не выполнить Ñвое обещание. +Ðеинженеры могут Ñлишком ÑтремитьÑÑ ÑƒÐ³Ð¾Ð´Ð¸Ñ‚ÑŒ. Они могут ÑмущатьÑÑ Ð¿Ñ€Ð¸ разговоре Ñ Ð²Ð°Ð¼Ð¸. Подобно нам, они могут без реального Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñказать "да", чтобы угодить вам или из-за Ñтраха перед вами. И затем не выполнить Ñвое обещание. -ÐепрограммиÑты могут понимать техничеÑкие аÑпекты, но у них нет того, что трудно даже Ð´Ð»Ñ Ð½Ð°Ñ: техничеÑкой ÑкÑпертизы. Они понимают, как работает технологиÑ, но не могут понÑть, почему один ÑпоÑоб займет три меÑÑца, а другой три днÑ. (Ð’ конце концов, программиÑты анекдотично плохи в оценке затрат). Это дает прекраÑную возможноÑть Ð´Ð»Ñ Ñинергии Ñ Ð½Ð¸Ð¼Ð¸. +ÐепрограммиÑты могут понимать техничеÑкие аÑпекты, но у них нет того, что трудно даже Ð´Ð»Ñ Ð½Ð°Ñ: техничеÑкой ÑкÑпертизы. Они понимают, как работает технологиÑ, но не могут понÑть, почему один ÑпоÑоб займет три меÑÑца, а другой три днÑ. (Ð’ конце концов, программиÑты вÑе так же анекдотично плохи в оценке затрат). Это дает прекраÑную возможноÑть Ð´Ð»Ñ Ñинергии Ñ Ð½Ð¸Ð¼Ð¸. При разговоре Ñ Ð²Ð°ÑˆÐµÐ¹ командой вы, не думаÑ, иÑпользуете ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñленг, которые гораздо короче и Ñффективнее, так как у вÑех Ð²Ð°Ñ Ñхожий опыт Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñми и вашим продуктом в чаÑтноÑти. ПотребуетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶Ð¸Ñ‚ÑŒ уÑилие, чтобы не иÑпользовать Ñтот Ñленг Ñ Ñ‚ÐµÐ¼Ð¸, у кого нет подобного опыта, оÑобенно, еÑли приÑутÑтвуют члены вашей команды. Такой Ñленг Ñоздает Ñтену между вами и оÑтальными и даже хуже, заÑтавлÑет их беÑÑмыÑленно тратить времÑ. -С вашей командой базовый контекÑÑ‚ и цели Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑны и не нуждаютÑÑ Ð² чаÑтом повторении, вы фокуÑируетеÑÑŒ на деталÑÑ…. С неинженерами нужен другой подход. Они могут не понимать то, что вы Ñчитаете разумеещимÑÑ. И поÑкольку вы Ñчитаете Ñто очевидным и не объÑÑнÑете детали, поÑле разговора Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¾Ð¼ вам может показатьÑÑ, что вы прекраÑно понÑли друг друга, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº в дейÑтвительноÑти образовалоÑÑŒ большое недопонимание. Вам Ñледует предполагать, что будет недопонимание, и внимательно Ñледить, где в разговоре оно может поÑвитьÑÑ. ПоÑтарайтеÑÑŒ, чтобы ваш ÑобеÑедник повторил или переформулировал то, что вы ему Ñказали, чтобы убедитьÑÑ, что он правильно вÑе понÑл. ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть чаÑто вÑтречатьÑÑ Ñ Ñтим человеком, потратьте времÑ, чтобы узнать, наÑколько Ñффективно вы выражаете ÑÐµÐ±Ñ Ð¸ как вы можете Ñто делать лучше. ЕÑли в общении возникает проблема, ÑтремитеÑÑŒ изменить ÑобÑтвенный подход вмеÑто того, чтобы разочаровыватьÑÑ Ð² подходе ÑобеÑедников. +С вашей командой базовый контекÑÑ‚ и цели Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑны и не нуждаютÑÑ Ð² чаÑтом повторении, вы фокуÑируетеÑÑŒ на деталÑÑ…. С неинженерами нужен другой подход. Они могут не понимать то, что вы Ñчитаете разумеещимÑÑ. И поÑкольку вы Ñчитаете Ñто очевидным и не объÑÑнÑете детали, поÑле разговора Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¾Ð¼ вам может показатьÑÑ, что вы прекраÑно понÑли друг друга, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº в дейÑтвительноÑти образовалоÑÑŒ большое недопонимание. Вам Ñледует предполагать, что будет недопонимание, и внимательно Ñледить, где в разговоре оно может поÑвитьÑÑ. ПоÑтарайтеÑÑŒ, чтобы ваш ÑобеÑедник повторил или переформулировал Ñвоими Ñловами то, что вы ему Ñказали, чтобы убедитьÑÑ, что он правильно вÑе понÑл. ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть чаÑто вÑтречатьÑÑ Ñ Ñтим человеком, потратьте времÑ, чтобы узнать, наÑколько Ñффективно вы выражаете ÑÐµÐ±Ñ Ð¸ как вы можете Ñто делать лучше. ЕÑли в общении возникает проблема, ÑтремитеÑÑŒ изменить ÑобÑтвенный подход вмеÑто того, чтобы разочаровыватьÑÑ Ð² подходе ÑобеÑедников. -Я обожаю работать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Это дает прекраÑные возможноÑти учить и научитьÑÑ Ñамому. Ð’Ñ‹ можете подавать пример в ÑмыÑле ÑÑноÑти и четкоÑти в общении. Инженеры привыкли вноÑить порÑдок в хаоÑ, вноÑить ÑÑноÑть в неразбериху, и неинженеры очень ценÑÑ‚ Ñто в наÑ. ПоÑкольку мы владеем техничеÑкой ÑкÑпертизой и чаÑто понимаем проблемы бизнеÑа, чаÑто мы можем найти проÑтое решение. +Я обожаю работать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Это дает прекраÑные возможноÑти учить других и учитьÑÑ Ñамому. Ð’Ñ‹ можете подавать пример в ÑмыÑле ÑÑноÑти и четкоÑти в общении. Инженеры привыкли вноÑить порÑдок в хаоÑ, вноÑить ÑÑноÑть в неразбериху, и неинженеры очень ценÑÑ‚ Ñто качеÑтво в наÑ. ПоÑкольку мы владеем техничеÑкой ÑкÑпертизой и чаÑто понимаем проблемы бизнеÑа, чаÑто мы можем найти проÑтое решение проблем. Иногда неинженеры из доброты и ÑÑ‚Ñ€ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ñть правильное решение предлагают вещи, которые по их мнению Ñделают нашу жизнь проще, тогда как в дейÑтвительноÑти ÑущеÑтвует решение гораздо лучше, которое можно найти, объединив взглÑд неинженера Ñ Ð²Ð°ÑˆÐµÐ¹ техничеÑкой ÑкÑпертизой. Я лично люблю ÑкÑтремальное программирование, поÑкольку оно решает Ñту проблему неÑффективноÑти. БыÑтрое ÑоглаÑование оценки Ñ Ð¸Ð´ÐµÐµÐ¹ упрощает поиÑк новой идеи, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой лучшее Ñочетание затрат и выгод. diff --git a/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md index 20c37a5..733e631 100644 --- a/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md +++ b/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -1,15 +1,15 @@ # Как ÑохранÑть мотивацию [//]: # (Version:1.0.0) -Замечателен и удивителен тот факт, что программиÑты выÑоко мотивированы желанием Ñоздавать прекраÑное, полезное и удобное. Это желание не уникально Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов и не универÑально, но оно наÑтолько раÑпроÑтранено именно Ñреди них, что Ñто отделÑет Ñту профеÑÑию от оÑтальных. +Замечателен и удивителен тот факт, что программиÑты выÑоко мотивированы желанием Ñоздавать прекраÑное, полезное и удобное. Это желание не уникально Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов и не универÑально, но оно наÑтолько раÑпроÑтранено именно Ñреди них, что отделÑет Ñту профеÑÑию от оÑтальных. -У Ñтого еÑть практичеÑкие и важные поÑледÑтвиÑ. ЕÑли программиÑты вынуждены делать что-то, что не ÑвлÑетÑÑ Ð¿Ñ€ÐµÐºÑ€Ð°Ñным, полезным или удобным, они начинают терÑть мотивацию. Ð’ Ñоздание уродливых, глупых и Ñкучных вещей вкладываетÑÑ Ð¼Ð½Ð¾Ð³Ð¾ денег, но в конечном Ñчете именно радоÑть ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ð¾Ñит наибольший доход компании. +У Ñтого еÑть практичеÑкие и важные поÑледÑтвиÑ. ЕÑли программиÑты вынуждены делать что-то, что не ÑвлÑетÑÑ Ð¿Ñ€ÐµÐºÑ€Ð°Ñным, полезным или удобным, они начинают терÑть мотивацию. Ð’ Ñоздание уродливых, глупых и Ñкучных вещей вкладываетÑÑ Ð¼Ð½Ð¾Ð³Ð¾ денег, но в конечном Ñчете именно радоÑть творчеÑтва приноÑит наибольший доход компании. Очевидно, ÑущеÑтвуют целые индуÑтрии вокруг мотивационных техник, некоторые из которых применимы и Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов. Среди таких Ñ Ð¼Ð¾Ð³Ñƒ выделить: -- ИÑпользование наиболее подходÑщего Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¹ задачи -- ПоиÑк возможноÑтей применить новые технологии, Ñзыки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ техники -- Попытка либо научить кого-то, либо научитьÑÑ Ñамому в каждом проекте, как был мал он ни был +- ИÑпользовать наиболее подходÑщий Ñзык Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¹ задачи +- ИÑкать возможноÑти применить новые технологии, Ñзыки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ техники +- СтаратьÑÑ Ð»Ð¸Ð±Ð¾ научить кого-то, либо научитьÑÑ Ñамому в каждом проекте, как был мал он ни был -Ðаконец, еÑли возможно, ÑтарайтеÑÑŒ измерÑть Ñвой вклад в работу в том, что Ð´Ð»Ñ Ð²Ð°Ñ Ð¿ÐµÑ€Ñонально имеет значение. Ðапример, когда Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ над багами, общее чиÑло уже иÑправденных мною багов мне Ñовершенно неинтереÑно, ведь оно не завиÑит от общего чиÑла багов, которые вÑе еще возможно ÑущеÑтвуют. Кроме того, Ñто чиÑло отражает мой вклад в Ñамом малом из вÑех возможных ракурÑов. Ðо ÑоотноÑить каждый иÑправленный баг Ñо ÑчаÑтливым клиентом Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, наоборот, очень ценно, и Ñлужит мотивацией в работе. +Ðаконец, еÑли возможно, ÑтарайтеÑÑŒ измерÑть Ñвой вклад в работу в том, что Ð´Ð»Ñ Ð²Ð°Ñ Ð¿ÐµÑ€Ñонально имеет значение. Ðапример, когда Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ над багами, общее чиÑло уже иÑправленных мною багов мне Ñовершенно неинтереÑно, ведь оно не завиÑит от общего чиÑла багов, которые вÑе еще возможно ÑущеÑтвуют. Кроме того, Ñто чиÑло отражает мой вклад в Ñамом малом из вÑех возможных ракурÑов. Ðо ÑоотноÑить каждый иÑправленный баг Ñо ÑчаÑтливым клиентом Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, наоборот, очень ценно, и Ñлужит мотивацией в работе. Следующее: [Как заÑлужить доверие](02-How-to-be-Widely-Trusted.md) diff --git a/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md index 41c82dc..3e85096 100644 --- a/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md +++ b/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -1,7 +1,7 @@ # Как заÑлужить доверие [//]: # (Version:1.0.0) -Чтобы вам доверÑли, вы должны заÑлуживать доверие. Ð’Ñ‹ также должны быть прозрачны. ЕÑли никто не знает Ð²Ð°Ñ Ñ‚Ð¾Ð»ÐºÐ¾Ð¼, то никто до конца вам не поверит. С теми, кто близок к вам, например, Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами по команде, такой проблемы не будет. ЗаÑлужить доверие за пределами Ñвоего отдела или команды можно будучи отзывчивым и информативным. Иногда кто-гибудь попробует злоупотребить Ñтим доверием и попроÑит о необоÑнованных уÑтупках. Ðе бойтеÑÑŒ Ñтого, проÑто объÑÑните, чем вам придетÑÑ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ñ‚ÑŒ, чтобы выполнить проÑьбу. +Чтобы вам доверÑли, вы должны заÑлуживать доверие. Ð’Ñ‹ также должны быть на виду. ЕÑли никто не знает Ð²Ð°Ñ Ñ‚Ð¾Ð»ÐºÐ¾Ð¼, то никто до конца вам не поверит. С теми, кто близок к вам, например, Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами по команде, такой проблемы не будет. ЗаÑлужить доверие за пределами Ñвоего отдела или команды можно будучи отзывчивым и информативным. Иногда кто-нибудь попробует злоупотребить Ñтим доверием и попроÑит о необоÑнованных уÑтупках. Ðе бойтеÑÑŒ, проÑто объÑÑните, чем вам придетÑÑ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ñ‚ÑŒ, чтобы выполнить проÑьбу. -Ðе притворÑйтеÑÑŒ, что знаете то, что вы на Ñамом деле не знаете. С людьми, которые не ÑвлÑÑŽÑ‚ÑÑ Ñ‡Ð°Ñтью вашей команды, вам придетÑÑ Ð½Ð°ÑƒÑ‡Ð¸Ñ‚ÑŒÑÑ Ð¾Ñ‚Ð´ÐµÐ»Ñть "не могу ответить на Ñто Ñходу" и "не могу Ñтого знать в принципе". +Ðе притворÑйтеÑÑŒ, что знаете то, что вы на Ñамом деле не знаете. С людьми, которые не ÑвлÑÑŽÑ‚ÑÑ Ñ‡Ð°Ñтью вашей команды, вам придетÑÑ Ñ‡ÐµÑ‚ÐºÐ¾ объÑÑнить разницу между ответами "не могу ответить на Ñто Ñходу" и "не могу Ñтого знать в принципе". Следующее: [Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md index 4ea766e..b81cebf 100644 --- a/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md +++ b/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -1,14 +1,14 @@ # Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть [//]: # (Version:1.0.0) -Ð’Ñ‹ можете быть хорошим программиÑтом, не Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ ÐºÐ¾Ð»Ð»ÐµÐ´Ð¶, но вам не Ñтать продвинытум разработчиком без базовых знаний теории ÑложноÑти вычиÑлений. Вам необÑзательно знать нотацию "большое О", но Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что вам Ñледует понимать разницу между "конÑтантным временем вычиÑлениÑ", "n log n" и "n в квадрате". Может быть, вы Ñможете интуитивно ÑбаланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть без Ñтого пониманиÑ, но еÑли его нет, у Ð²Ð°Ñ Ð½Ðµ будет прочной базы Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами. +Ð’Ñ‹ можете быть хорошим программиÑтом, не Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ ÐºÐ¾Ð»Ð»ÐµÐ´Ð¶, но вам не Ñтать продвинутым разработчиком без базовых знаний теории ÑложноÑти вычиÑлений. Вам необÑзательно знать нотацию "большое О", но Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что вам Ñледует понимать разницу между "конÑтантным временем вычиÑлениÑ", "n log n" и "n в квадрате". Может быть, вы Ñможете интуитивно ÑбаланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть без Ñтого пониманиÑ, но еÑли его нет, у Ð²Ð°Ñ Ð½Ðµ будет прочной оÑновы Ð´Ð»Ñ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами. -При проектировании или изучении алгоритма важно понимать, что Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° иногда предÑтавлÑет Ñобой функцию от размера входных данных. Когда Ñто так, мы можем Ñказать, что худшее/ожидаемое/лучшее Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение Ñтого алгоритма Ñто "n log n", еÑли оно пропорционально размеру ($n$), умноженному на логарифм размера данных. Это обозначение и ÑпоÑоб Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ применÑть и к памÑти, занимаемой Ñтруктурой данных. +При проектировании или изучении алгоритма важно понимать, что Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° иногда предÑтавлÑет Ñобой функцию от размера входных данных. Ð’ таком Ñлучае мы можем Ñказать, что худшее/ожидаемое/лучшее Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение Ñтого алгоритма Ñто "n log n", еÑли оно пропорционально размеру ($n$), умноженному на логарифм размера данных. Это обозначение и ÑпоÑоб Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ применÑть и к памÑти, занимаемой Ñтруктурой данных. Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений так же прекраÑна и глубока, как и физика, и ее Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть здорово помогает в работе. -Ð’Ñ€ÐµÐ¼Ñ (циклы процеÑÑора) и памÑть могут ÑбаланÑированы одно за Ñчет другого. Это отличный пример того, что программирование - Ñто компромиÑÑ. Ðе вÑегда оно ÑиÑтематично. Ð’ общем виде, ÑÑŠÑкономить памÑть можно за Ñчет большего чиÑла вычиÑлений. Обратно, чиÑло вычиÑлений можно уменьшить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кÑшированиÑ, то еÑть, ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти, хранÑщей копии данных. Иногда Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ уменьшить, ÑохранÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ информации в Ñтруктуре данных. Как правило, Ñто требует небольшого объема памÑти, но может уÑложнить алгоритм. +Ð’Ñ€ÐµÐ¼Ñ (циклы процеÑÑора) и памÑть можно ÑбаланÑировать за Ñчет друг друга. Это отличный пример того, что программирование - Ñто компромиÑÑ. Ðе вÑегда оно ÑиÑтематично. Ð’ общем виде, ÑÑкономить памÑть можно за Ñчет большего чиÑла вычиÑлений. Обратно, чиÑло вычиÑлений можно уменьшить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кÑшированиÑ, то еÑть, ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти, хранÑщей копии данных. Иногда Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ уменьшить, ÑохранÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ информации в Ñтруктуре данных. Как правило, Ñто требует небольшого объема памÑти, но может уÑложнить алгоритм. -Улучшение компромиÑÑа между объемом памÑти и ÑкороÑтью вычиÑлений чаÑто может привеÑти к кардинальному Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из Ñтих параметров. Перед тем, как начать работу, ÑпроÑите ÑебÑ, дейÑтвительно ли то, что вы ÑобираетеÑÑŒ улучшить, нуждаетÑÑ Ð² Ñтом. Работать Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð°Ð¼Ð¸ интереÑно, но не позволÑйте Ñтому затмить факт, что улучшение того, что не ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹, не принеÑет заметной разницы в программу и увеличит нагрузку на теÑтирование. +Улучшение компромиÑÑа между объемом памÑти и ÑкороÑтью вычиÑлений чаÑто может привеÑти к кардинальному изменению одного из Ñтих параметров. Перед тем, как начать работу, ÑпроÑите ÑебÑ, дейÑтвительно ли то, что вы ÑобираетеÑÑŒ улучшить, нуждаетÑÑ Ð² Ñтом. Работать Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð°Ð¼Ð¸ интереÑно, но не забывайте, что улучшение того, что не ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹, не принеÑет заметной разницы в программу и увеличит нагрузку на теÑтирование. Ð’ Ñовременных компьютерах памÑть кажетÑÑ Ð´ÐµÑˆÐµÐ²Ñ‹Ð¼ реÑурÑом, потому что в отличие от процеÑÑорного времени вы не видите, как она иÑпользуетÑÑ, пока не упретеÑÑŒ в потолок. Ðо тогда Ñбой может оказатьÑÑ ÐºÐ°Ñ‚Ð°ÑтрофичеÑким. СущеÑтвуют и другие Ñкрытые затраты на иÑпользование памÑти, такие как ваш Ñффект на Ñторонние программы, который должен быть поÑтоÑнным, и Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° ее выделение и оÑвобождение. Обдумайте Ñти моменты перед тем, как вы пожертвуете памÑтью ради уÑкорениÑ. diff --git a/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md index 2834f05..ef47144 100644 --- a/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md +++ b/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -1,13 +1,13 @@ # Как проводить ÑтреÑÑ-теÑтирование [//]: # (Version:1.0.0) -СтреÑÑ-теÑтирование Ñто интереÑно. Сначала кажетÑÑ, что его цель - выÑÑнить, будет ли ÑиÑтема работать под нагрузкой. Ð’ дейÑтвительноÑти, обычно ÑиÑтема работает под нагрузкой, но начинает отказывать в каких-то меÑтах, еÑли нагрузка доÑтаточно большаÑ. Я называю Ñто "уперетьÑÑ Ð² потолок". Могут быть иÑлючениÑ, но почти вÑегда Ñто "потолок". СмыÑл ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² том, чтобы выÑÑнить, где находитÑÑ Ñтот потолок Ð´Ð»Ñ ÑиÑтемы, а потом понÑть, как его отодвинуть. +СтреÑÑ-теÑтирование Ñто ÑƒÐ²Ð»ÐµÐºÐ°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð²ÐµÑ‰ÑŒ. Сначала кажетÑÑ, что его цель - выÑÑнить, будет ли ÑиÑтема работать под нагрузкой. Ð’ дейÑтвительноÑти, обычно ÑиÑтема работает под нагрузкой, но начинает отказывать в каких-то меÑтах, еÑли нагрузка доÑтаточно большаÑ. Я называю Ñто "доÑтичь потолка". Могут быть иÑключениÑ, но почти вÑегда Ñто "потолок". СмыÑл ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² том, чтобы выÑÑнить, где находитÑÑ Ñтот потолок Ð´Ð»Ñ ÑиÑтемы, а потом понÑть, как его отодвинуть. -План Ð´Ð»Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñледует разрабатывать на ранних ÑтадиÑÑ… проекта, так как чаÑто он помогает проÑÑнить в точноÑти, что именно ожидаетÑÑ Ð¾Ñ‚ ÑиÑтемы. Две Ñекунды на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²ÐµÐ±-Ñтраницы Ñто позорный провал или оглушительный уÑпех? ДоÑтаточно ли 500 одновременных пользователей? Ответы завиÑÑÑ‚ от ÑиÑтемы, но перед началом ее Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ… уже Ñтоит знать. Чтобы быть полезным, ÑтреÑÑ-теÑтирование должно доÑтаточно хорошо имитировать дейÑтвительную нагрузку. Ð’Ñ€Ñд ли возможно Ñмоделировать 500 одновременных хаотичных и непредÑказуемых пользователей, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñть ÑиÑтемы, но как минимум можно Ñоздать 500 ÑимулÑций и попытатьÑÑ Ñмоделировать некоторую чаÑть того, что будут делать реальные пользователи. +План Ð´Ð»Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñледует разрабатывать на ранних ÑтадиÑÑ… проекта, так как чаÑто он помогает в точноÑти проÑÑнить, что именно ожидаетÑÑ Ð¾Ñ‚ ÑиÑтемы. Две Ñекунды на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²ÐµÐ±-Ñтраницы Ñто позорный провал или оглушительный уÑпех? ДоÑтаточно ли 500 одновременных пользователей? Ответы завиÑÑÑ‚ от ÑиÑтемы, но перед началом ее Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ… уже Ñтоит знать. Чтобы быть полезным, ÑтреÑÑ-теÑтирование должно доÑтаточно хорошо имитировать дейÑтвительную нагрузку. Ð’Ñ€Ñд ли возможно Ñмоделировать 500 одновременных хаотичных и непредÑказуемых пользователей, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñть ÑиÑтемы, но как минимум можно Ñоздать 500 ÑимулÑций и попытатьÑÑ Ñмоделировать некоторую чаÑть того, что будут делать реальные пользователи. -Во Ð²Ñ€ÐµÐ¼Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð½Ð¸Ñ‚Ðµ Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ нагрузки и увеличивайте ее по одному параметру ÑиÑтемы, например, по чаÑтоте входных запроÑов или по величине входных данных, пока вы не доÑтигнете потолка ÑиÑтемы. ЕÑли вы доÑтигли его Ñлишком рано, чтобы удовлетворить требованиÑм к ÑиÑтеме, выÑÑните, какой реÑÑƒÑ€Ñ ÑвлÑетÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом в ÑиÑтеме (как правило, Ñильно не хватает чего-то одного). Что Ñто: памÑть, процеÑÑор, операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети или нехватка данных? Теперь выÑÑните, как вы можете отодвинуть потолок. Заметьте, что повышение потолка или увеличение нагрузки, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ÑправлÑетÑÑ ÑиÑтема, может не помочь или даже Ñнизить производительноÑть Ð´Ð»Ñ Ð»ÐµÐ³ÐºÐ¾Ð½Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемы. Обычно производительноÑть под большой нагрузкой важнее производительноÑти под маленькой. +Во Ð²Ñ€ÐµÐ¼Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð½Ð¸Ñ‚Ðµ Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ нагрузки и увеличивайте ее по одному параметру ÑиÑтемы, например, по чаÑтоте входных запроÑов или по величине входных данных, пока вы не доÑтигнете потолка ÑиÑтемы. ЕÑли вы доÑтигли его Ñлишком рано, чтобы удовлетворить требованиÑм к ÑиÑтеме, выÑÑните, какой реÑÑƒÑ€Ñ ÑвлÑетÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом в ÑиÑтеме (как правило, Ñильно не хватает чего-то одного). Что Ñто: памÑть, процеÑÑор, операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети или задержка данных? Затем выÑÑните, как вы можете отодвинуть потолок. Заметьте, что повышение потолка или увеличение нагрузки, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ÑправлÑетÑÑ ÑиÑтема, может не помочь или даже Ñнизить производительноÑть Ð´Ð»Ñ Ð»ÐµÐ³ÐºÐ¾Ð½Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемы. Обычно производительноÑть под большой нагрузкой важнее производительноÑти под маленькой. -Возможно, вам придетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ предÑтавление о неÑкольких разных параметрах ÑиÑтемы, чтобы поÑтроить ее мыÑленную модель. ЗдеÑÑŒ не хватит какой-то одной техники. Ðапример, логирование чаÑто дает хорошую картину о реальном времени на иÑполнение команд между Ð´Ð²ÑƒÐ¼Ñ ÑобытиÑми в ÑиÑтеме, но еÑли оно внедрено небрежно, не дает Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¾Ð± иÑпользовании памÑти или даже о размере Ñтруктур данных. Ðналогично, в Ñовременных ÑиÑтемах могут взаимодейÑтвовать неÑколько компьютеров и множеÑтво программных ÑиÑтем. Когда вы упираетеÑÑŒ в потолок (то еÑть производительноÑть нелинейно завиÑит от размера входных данных) Ñти Ñторонние программы могут оказатьÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом. ПредÑтавление о работе Ñтих программ, даже в виде проÑтого Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ процеÑÑоров на вÑех задейÑтвованных машинах, может оказатьÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ полезным. +Возможно, вам придетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ предÑтавление о неÑкольких разных параметрах ÑиÑтемы, чтобы поÑтроить ее мыÑленную модель. ЗдеÑÑŒ не обойтиÑÑŒ какой-то одной техникой. Ðапример, логирование чаÑто дает хорошую картину о реальном времени на иÑполнение команд между Ð´Ð²ÑƒÐ¼Ñ ÑобытиÑми в ÑиÑтеме, но еÑли оно внедрено небрежно, то не дает Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¾Ð± иÑпользовании памÑти или даже о размере Ñтруктур данных. Ðналогично, в Ñовременных ÑиÑтемах могут взаимодейÑтвовать неÑколько компьютеров и множеÑтво программных ÑиÑтем. Когда вы упираетеÑÑŒ в потолок (то еÑть производительноÑть нелинейно завиÑит от размера входных данных), Ñти Ñторонние программы могут оказатьÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом. ПредÑтавление о работе Ñтих программ, даже в виде проÑтого Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ процеÑÑоров на вÑех задейÑтвованных машинах, может оказатьÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ полезным. -Знать потолок ÑиÑтемы важно не только Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы отодвинуть его, но и Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑказуемоÑти, чтобы Ñффективно управлÑть ее разработкой. +Знать потолок ÑиÑтемы важно не только Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы отодвинуть его, но и Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑказуемоÑти, чтобы Ñффективно управлÑть ÑвÑзанным Ñ Ð½ÐµÐ¹ бизнеÑ-процеÑÑами. Следующее: [Как баланÑировать краткоÑть и абÑтракцию](05-How-to-Balance-Brevity-and-Abstraction.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index b0ce41e..ad758d3 100644 --- a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -1,10 +1,9 @@ # Как баланÑировать краткоÑть и абÑтракцию [//]: # (Version:1.0.0) -ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто ключ к программированию. Следует тщательно выбирать, наÑколько абÑтрактны вы хотите быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракции, чмъем в дейÑтвительноÑти необходимо. Один из признаков Ñтого: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат толко Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода должны быть Ñоизмерена Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаюмую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и можно предположить, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которые чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. -Я очень рекомендую Ñтатью ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html). +ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто ключ к программированию. Следует тщательно выбирать, наÑколько абÑтрактны вам Ñледует быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракций, чем в дейÑтвительноÑти необходимо. Один из признаков такой Ñитуации: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат только Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода надо ÑоизмерÑть Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаюмую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и кажетÑÑ, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которое чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. Ðа Ñту тему Ñ Ð¾Ñ‡ÐµÐ½ÑŒ рекомендую прочеÑть Ñтатью Пола ГрÑхема ['Succinctness is Power'](http://www.paulgraham.com/power.html). -СущеÑтвует Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð´Ð¾Ð³Ð¼Ð°, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ полезными техниками как *Ñокрытие информации* и *объектно-ориентированное программирование*, применение которых иногда заходит Ñлишком далеко. Они позволÑÑŽÑ‚ пиÑать код более абÑтрактно и предвидеть возможные в нем изменениÑ. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что не Ñледует пиÑать Ñлишком много ÑпекулÑтивного кода. Ðапример, принÑто прÑтать целочиÑленные переменные в объектах за публичными методами клаÑÑа, так что Ñама Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ видна, а доÑтупен только Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº ней. Это позволÑет изменить реализацию Ñтой переменной без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ³Ð¾ Ñти методы кода. Возможно, Ñто подходит Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ библиотек, где необходимо предоÑтавить уÑтойчивый API. Ðо Ñ Ð½Ðµ думаю, что преимущеÑтва Ñтого подхода перевешивают избыток кода, потраченного на него, оÑобенно, когда Ð¼Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° владеет вызывающим кодом и может перепиÑать как его, так и вызываемый код. Четыре или пÑть Ñтрок кода Ñто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ†ÐµÐ½Ð° за такое умозрительное преимущеÑтво. +СущеÑтвует определенные догмы, ÑвÑзанные Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ полезными техниками как *Ñокрытие информации* и *объектно-ориентированное программирование*, применение которых иногда заходит Ñлишком далеко. Они позволÑÑŽÑ‚ пиÑать код более абÑтрактно и предвидеть возможные в нем изменениÑ. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что не Ñледует пиÑать Ñлишком много ÑпекулÑтивного кода. Ðапример, принÑто прÑтать целочиÑленные переменные в объектах за публичными методами клаÑÑа, так что Ñама Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ видна, а доÑтупен только Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº ней. Это позволÑет изменить реализацию Ñтой переменной без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ³Ð¾ Ñти методы кода. Возможно, Ñто подходит Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ библиотек, где необходимо предоÑтавить уÑтойчивый API. Ðо Ñ Ð½Ðµ думаю, что преимущеÑтва Ñтого подхода перевешивают избыток кода, потраченного на него, оÑобенно, когда Ð¼Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° владеет вызывающим кодом и может перепиÑать как его, так и вызываемый код. Четыре или пÑть Ñтрок кода - Ñто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ†ÐµÐ½Ð° за такое умозрительное преимущеÑтво. -ПортируемоÑть Ñоздает похожую проблему. Должен ли код быть портируемым на другой компьютер, компилÑтор, ÑиÑтему или платформу, или его Ñтоит проÑто перепиÑать под них? Я думаю, что непортируемый, короткий и легко перепиÑываемый код лучше, чем длинный портируемый. ОтноÑительно легко и обычно Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¸Ð´ÐµÑ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð¸Ñ‚ÑŒ непортируемый код в определенных облаÑÑ‚ÑÑ…, таких как клаÑÑ, который выполнÑет запроÑÑ‹ к базе данных, Ñпецифичные Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ СУБД. +ПортируемоÑть Ñоздает похожую проблему. Должен ли код быть портируемым на другой компьютер, компилÑтор, ÑиÑтему или платформу, или его Ñтоит проÑто перепиÑать под них? Я думаю, что непортируемый, короткий и легко перепиÑываемый код лучше, чем длинный портируемый. ОтноÑительно Ð»ÐµÐ³ÐºÐ°Ñ Ð¸ обычно Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¸Ð´ÐµÑ - ограничить непортируемый код в определенных облаÑÑ‚ÑÑ…, таких как клаÑÑ, который выполнÑет запроÑÑ‹ к базе данных, Ñпецифичные Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ СУБД. Следующее: [Как оÑваивать новые навыки](06-How-to-Learn-New-Skills.md) diff --git a/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md index 70d096f..06e774a 100644 --- a/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md +++ b/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -1,13 +1,13 @@ # Как оÑваивать новые навыки [//]: # (Version:1.0.0) -Учить новое, оÑобенно что-то нетехничеÑкое, Ñто величайшее удовольÑтвие из вÑех. БольшинтÑво компаний имели бы гораздо более выÑокую мораль в коллективе, еÑли бы они понимали, как учеба мотивирует программиÑтов. +Учить новое, оÑобенно что-то нетехничеÑкое, Ñто величайшее удовольÑтвие из вÑех. БольшинÑтво компаний имели бы гораздо лучшую мораль в коллективе, еÑли бы они понимали, как учеба мотивирует программиÑтов. -Люди учатÑÑ Ð½Ð° практике. Чтение книг и курÑÑ‹ полезны, но Ñможете ли вы уважать программиÑта, который никогда не пиÑал программы? Чтобы чему-нибудь научитьÑÑ, вы должны поÑтавить ÑÐµÐ±Ñ Ð² положение, когда вы можете применÑть Ñтот навык. Ð˜Ð·ÑƒÑ‡Ð°Ñ Ð½Ð¾Ð²Ñ‹Ð¹ Ñзык программированиÑ, попытайтеÑÑŒ выполнить на нем маленький проект перед тем, как вам придетÑÑ Ð¸Ñпользовать Ñтот Ñзык в большом проекте. ОÑÐ²Ð°Ð¸Ð²Ð°Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ проектом по разработке программного обеÑпечениÑ, Ñначала попробуйте управлÑть небольшим проектом. +Люди учатÑÑ Ð½Ð° практике. Чтение книг и курÑÑ‹ полезны, но Ñможете ли вы уважать программиÑта, который никогда не пиÑал программы? Чтобы чему-нибудь научитьÑÑ, вы должны поÑтавить ÑÐµÐ±Ñ Ð² положение, когда вы можете применÑть Ñтот навык. Ð˜Ð·ÑƒÑ‡Ð°Ñ Ð½Ð¾Ð²Ñ‹Ð¹ Ñзык программированиÑ, попытайтеÑÑŒ выполнить на нем маленький проект перед тем, как вам придетÑÑ Ð¸Ñпользовать Ñтот Ñзык в большом проекте. ОÑÐ²Ð°Ð¸Ð²Ð°Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ проектом по разработке программного обеÑпечениÑ, Ñначала попробуйте руководить небольшим проектом. -Хороший учитель не заменит практику, но гораздо лучше книги. Что вы можете предложить потенциальному учителю в обмен на его знаниÑ? Как минимум, вы можете пообещать уÑердно учитьÑÑ, так что Ð²Ñ€ÐµÐ¼Ñ Ñтого человека не будет потрачено впуÑтую. +Хороший учитель не заменит практику, но гораздо лучше книги. Что вы можете предложить потенциальному учителю в обмен на его знаниÑ? Как минимум, вы можете предложить уÑердно учитьÑÑ, так что Ð²Ñ€ÐµÐ¼Ñ Ñтого человека не будет потрачено впуÑтую. -ПоÑтарайтеÑÑŒ уговорить Ñвоего боÑÑа оплатить вам формальное обучение, но помните, что чаще вÑего гораздо полезнее потратить то же Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° игру Ñ Ñ‚ÐµÐ¼ навыокм, который вы хотите оÑвоить. Однако, в нашем неÑовершенном мире легче попроÑить об обучение, чем о времени на вольную игру, хоть множеÑтво обучений ÑводÑÑ‚ÑÑ Ðº Ñну на лекциÑÑ… в ожидании обеда. +ПоÑтарайтеÑÑŒ уговорить Ñвоего боÑÑа оплатить вам формальное обучение, но помните, что чаще вÑего гораздо полезнее потратить то же Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° Ñвободную игру Ñ Ñ‚ÐµÐ¼ навыком, который вы хотите оÑвоить. Однако, в нашем неÑовершенном мире легче попроÑить об обучении, чем о времени на Ñвободное полуизучение-полуигру, хоть множеÑтво обучений и ÑводÑÑ‚ÑÑ ÐºÐ¾ Ñну на лекциÑÑ… в ожидании обеда. -ЕÑли вы руководитель, поÑтарайтеÑÑŒ понÑть, как учатÑÑ Ð²Ð°ÑˆÐ¸ подчиненные и помогите им, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°Ñ Ð¸Ð¼ такие проекты и заданиÑ, которые им по плечу и одновременно позволÑÑŽÑ‚ им развить навыки, в которых они заинтереÑованы. Ðе забывайте, что Ñамые важные навыки программиÑта вовÑе не техничеÑкие. Дайте Ñвоей команде Ð²Ñ€ÐµÐ¼Ñ ÑкÑпериментировать и практиковатьÑÑ Ð² ÑмелоÑти, чеÑтноÑти и взаимодейÑтвии. +ЕÑли вы руководитель, поÑтарайтеÑÑŒ понÑть, как учатÑÑ Ð²Ð°ÑˆÐ¸ подчиненные и помогите им, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°Ñ Ð¸Ð¼ такие проекты и заданиÑ, которые им по плечу и одновременно позволÑÑ‚ развить интереÑные им навыки. Ðе забывайте, что Ñамые важные навыки программиÑта вовÑе не техничеÑкие. Дайте Ñвоей команде Ð²Ñ€ÐµÐ¼Ñ ÑкÑпериментировать и практикуйте в команде ÑмелоÑть, чеÑтноÑть и взаимодейÑтвие. Следующее: [ÐаучитеÑÑŒ печатать вÑлепую](07-Learn-to-Type.md) diff --git a/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md index 58a39df..f0fb89e 100644 --- a/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md +++ b/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -1,5 +1,5 @@ # ÐаучитеÑÑŒ печатать вÑлепую [//]: # (Version:1.0.0) -ÐаучитеÑÑŒ печатать вÑлепую. Это навык Ñреднего уровнÑ, потому что пиÑать код наÑтолько Ñложно, что ÑкороÑть его набора неважна и неÑильно влиÑет на затраченное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку, наÑколько бы хорошим программиÑтом вы не ÑвлÑлиÑÑŒ. Однако, к тому времени, как вы Ñтанете программиÑтом Ñреднего уровнÑ, Ñкорее вÑего вы потратите кучу времени на пиÑьменное общение Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и вÑеми оÑтальными. Этот навык - Ð·Ð°Ð±Ð°Ð²Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° вашей целеуÑтемленноÑти. Он требует отдельного времени, которое не так забавно потратить именно на него. Легенда глаÑит, что когда Майкл Тименн работал в Microelectronics and Computer Technology Corporation, его коллеги ÑобиралиÑÑŒ у двери его кабинета поÑлушать гул, производимый им при нажатии клавиш. Они были наÑтолько быÑтры, что были практичеÑки неразличимы. +ÐаучитеÑÑŒ печатать вÑлепую. Это навык Ñреднего уровнÑ, потому что пиÑать код наÑтолько Ñложно, что ÑкороÑть его набора неважна и неÑильно влиÑет на затраченное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку, наÑколько бы хорошим программиÑтом вы не ÑвлÑлиÑÑŒ. Однако, к тому времени, как вы Ñтанете программиÑтом Ñреднего уровнÑ, Ñкорее вÑего вы потратите кучу времени на пиÑьменное общение Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и вÑеми оÑтальными. Этот навык - интереÑÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° вашей целеуÑтемленноÑти. Он требует поÑвÑтить на ÑÐµÐ±Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ðµ времÑ, которое вовÑе не так интереÑно потратить именно на него. Легенда глаÑит, что когда Майкл Тименн работал в Microelectronics and Computer Technology Corporation, его коллеги ÑобиралиÑÑŒ у двери его кабинета поÑлушать гул, производимый им при нажатии клавиш. Они были наÑтолько быÑтры, что были практичеÑки неразличимы. -Следующее: [Как выполнÑть интеграционное теÑтирование](08-How-to-Do-Integration-Testing.md) \ No newline at end of file +Следующее: [Как проводить интеграционное теÑтирование](08-How-to-Do-Integration-Testing.md) diff --git a/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md index cc2e778..52436b4 100644 --- a/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md +++ b/ru/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -1,7 +1,7 @@ -# Как выполнÑть интеграционное теÑтирование +# Как проводить интеграционное теÑтирование [//]: # (Version:1.0.0) -Интеграционное теÑтирование Ñто ÑовмеÑтное теÑтирование отдельных компонентов, которые прошли до Ñтого юнит-теÑтирование. Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð³Ð¾ обходитÑÑ, и Ñто выÑÑнÑетÑÑ Ð¿Ñ€Ð¸ теÑтировании. Ð’Ñ‹ должны включать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° интеграционное теÑтирование в Ñвои оценки затрат и в раÑпиÑание. +Интеграционное теÑтирование - Ñто ÑовмеÑтное теÑтирование отдельных компонентов, которые прошли до Ñтого юнит-теÑтирование. Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð´Ð¾Ñ€Ð¾Ð³Ð¾, и Ñто выÑÑнÑетÑÑ Ð¿Ñ€Ð¸ теÑтировании. Ð’Ñ‹ должны включать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° интеграционное теÑтирование в Ñвои оценки затрат и в график работ. -Ð’ идеале вы должны организовать проект таким образом, чтобы в конце не было Ñтапа, где Ñвным образом должна проиÑходить интеграциÑ. Гораздо лучше поÑтепенно интегрировать компоненты по мере их Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð² ходе проекта. ЕÑли Ñто неизбежно, тщательно оцените временные затраты на такой Ñтап. +Ð’ идеале вы должны организовать проект таким образом, чтобы в конце не было отдельного Ñтапа, где Ñвным образом должна проиÑходить интеграциÑ. Гораздо лучше поÑтепенно интегрировать компоненты по мере их Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð² ходе проекта. ЕÑли такой Ñтап неизбежен, тщательно оцените временные затраты на него. Следующее: [Communication Languages](09-Communication-Languages.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md index a0a4c37..6609d44 100644 --- a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -2,10 +2,10 @@ [//]: # (Version:1.0.0) СущеÑтвуют Ñзыки, то еÑть формально определенные ÑинтакÑичеÑкие ÑиÑтемы, которые ÑвлÑÑŽÑ‚ÑÑ Ð½Ðµ Ñзыками программированиÑ, а Ñзыками взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем, Ñоздаными Ñпециально Ð´Ð»Ñ Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Ñтандартизацию. Ð’ 2003 году Ñамые важные из них Ñто UML, XML и SQL. Ð’Ñ‹ должны быть знакомы Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ из них, чтобы уметь иÑпользовать их и понимать, когда их Ñледует применÑть. -UML - Ñто Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñхем и диаграмм, опиÑывающих архитектуру. Ее прелеÑть в том, что она одновременно и визуальна, и формальна, и ÑпоÑобна передать огромное количеÑтво информации, еÑли автор и его Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽÑ‚ UML. Вам Ñледует знать UML, потому что иногда архитектуру опиÑывают Ñ ÐµÐ³Ð¾ помощью. СущеÑтвуют очень полезные инÑтрументы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÑÑионально выглÑдÑщих Ñхем UML. Во многих ÑлучаÑÑ…, UML Ñлишком ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема, и Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° находил, что Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… Ñхем проще иÑпользовать Ñтрелки и прÑмоугольники. Ðо Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что изучение UML полезно так же, как и изучение латыни. +UML - Ñто Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñхем и диаграмм, опиÑывающих архитектуру. Ее прелеÑть в том, что она одновременно и визуальна, и формальна, и ÑпоÑобна передать огромное количеÑтво информации, еÑли автор и его Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽÑ‚ UML. Вам Ñледует знать UML, потому что иногда архитектуру опиÑывают Ñ ÐµÐµ помощью. СущеÑтвуют очень полезные инÑтрументы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÑÑионально выглÑдÑщих Ñхем UML. Во многих ÑлучаÑÑ…, UML Ñлишком ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема, и Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° находил, что Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… Ñхем проще иÑпользовать Ñтрелки и прÑмоугольники. Ðо Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что изучение UML полезно так же, как и изучение латыни. XML - Ñто Ñтандарт Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… Ñтандартов. Это не решение проблем передачи данных, Ñ…Ð¾Ñ‚Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° вы увидите, что XML предÑтавлÑÑŽÑ‚ именно так. Ðо Ñкорее, Ñто ÑредÑтво автоматизации Ñамой Ñкучной работы по обмену данных, а именно Ñтруктурное предÑтавление данных в линейной поÑледовательноÑти и обратный ÑинтакÑичеÑкий анализ Ñтого поÑледовательноÑти в Ñтруктуру данных. UML предоÑтавлÑет неплохую проверку типов и правильноÑти данных, Ñ…Ð¾Ñ‚Ñ Ñто лишь Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть того, что вам понадобитÑÑ Ð² работе. -SQL - Ñто очень мощный и богатый Ñзык запроÑов и Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, и он не ÑовÑем ÑвлÑетÑÑ Ñзыком программированиÑ. У него еÑть много вариаций, в оÑновном завиÑимых от конкретного продукта, который его иÑпользует. Они не так важны как Ñтандартное Ñдро Ñзыка. SQL - Ñто оÑнова вÑех релÑционных баз данных. Ð’Ñ‹ можете не работать в облаÑти, где требуетÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ такого типа баз данных, но вам вÑе равно Ñледует иметь базовое предÑтавление о них и о ÑинтакÑиÑе и назначении SQL. +SQL - Ñто очень мощный и богатый Ñзык запроÑов и Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. Это не ÑовÑем Ñзык программированиÑ. У него еÑть много вариаций, в оÑновном завиÑимых от конкретного продукта, который его иÑпользует. Они не так важны как Ñтандартное Ñдро Ñзыка. SQL - Ñто оÑнова вÑех релÑционных баз данных. Ð’Ñ‹ можете не работать в облаÑти, где требуетÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ такого типа баз данных, но вам вÑе равно Ñледует иметь базовое предÑтавление о них и о ÑинтакÑиÑе и назначении SQL. Следующее: [Стандартные технологии](10-Heavy-Tools.md) diff --git a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index 93d3696..6233a81 100644 --- a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -1,6 +1,6 @@ # Стандартные технологии [//]: # (Version:1.0.0) -По мере того, как развиваютÑÑ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸, разработка программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð¸Ñ‚ к иÑпользованию Ñтандартизированных широко раÑпроÑтраненных и незатратных продуктов. Это технологии могут взÑть на ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑŒÑˆÑƒÑŽ нагрузку в разработке программного обеÑпечениÑ, но одновременно могут показатьÑÑ Ð¿ÑƒÐ³Ð°ÑŽÑ‰Ðµ непонÑтными и требовать много времени на оÑвоение. ПрограммиÑÑ‚ Ñреднего ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ знать, как управлÑть Ñтими технологиÑми и когда Ñледует их иÑпользовать. +По мере того, как развиваютÑÑ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸, разработка программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð¸Ñ‚ к иÑпользованию Ñтандартизированных, широко раÑпроÑтраненных и незатратных технологий. Они могут взÑть на ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑŒÑˆÑƒÑŽ нагрузку в разработке программного обеÑпечениÑ, но одновременно могут показатьÑÑ Ð¿ÑƒÐ³Ð°ÑŽÑ‰Ðµ непонÑтными и требовать много времени на оÑвоение. ПрограммиÑÑ‚ Ñреднего ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ знать, как управлÑть Ñтими технологиÑми и когда Ñледует их иÑпользовать. Ðа мой взглÑд некоторыми примерами таких технологий ÑвлÑÑŽÑ‚ÑÑ: diff --git a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index 85e3cef..8bc7d0d 100644 --- a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -1,11 +1,11 @@ # Как анализировать данные [//]: # (Version:1.0.0) -Ðнализ данных - Ñто ранний Ñтап разработки, когда вы изучаете предметную облаÑть и определÑете Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ… в программное обеÑпечение. Это формальное определение может заÑтавить подумать, что анализ данных Ñто деÑтельноÑть, которую Ñтоит оÑтавить на ÑиÑтемных аналитиков. РпрограммиÑты должны ÑоÑредоточитьÑÑ Ð½Ð° напиÑании кода, который те Ñпроектируют. ЕÑли мы поÑледует Ñтрого парадигме разработки, то возможно, Ñто будет ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¸Ð´ÐµÑ. Опытные программиÑты ÑтановÑÑ‚ÑÑ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, а лучшие архитекторы ÑтановÑÑ‚ÑÑ Ð±Ð¸Ð·Ð½ÐµÑ-аналитиками и отвечают об требованиÑÑ… к данным и выдают программиÑтам четко определенное задание Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°. Ðо Ñто не ÑовÑем так, так как данные Ñто Ñдро любой деÑтельноÑти программиÑтов. Что бы вы не делали в Ñвоей программе, вы либо передаете, либо изменÑете данные. БизнеÑ-аналитик изучает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² широком виде, архитектор в чуть более узком разрезе, так что, когда проблема приходит в вам, кажетÑÑ, что вÑе, что вам надо Ñделать, Ñто применить нужные алгоритмы и начать взаимодейÑтвовать Ñ Ð¸Ð¼ÐµÑŽÑ‰Ð¸Ð¼Ð¸ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. +Ðнализ данных - Ñто ранний Ñтап разработки, когда вы изучаете предметную облаÑть и определÑете Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¸Ñ… Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² программное обеÑпечение. Это формальное определение может заÑтавить подумать, что анализ данных Ñто деÑтельноÑть, которую Ñтоит оÑтавить на ÑиÑтемных аналитиков. РпрограммиÑты должны ÑоÑредоточитьÑÑ Ð½Ð° напиÑании кода, который те Ñпроектируют. ЕÑли мы Ñтрого поÑледуем парадигме разработки, то возможно, Ñто будет Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¸Ð´ÐµÑ. Опытные программиÑты ÑтановÑÑ‚ÑÑ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, а лучшие архитекторы ÑтановÑÑ‚ÑÑ Ð±Ð¸Ð·Ð½ÐµÑ-аналитиками и отвечают за Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº данным и выдают программиÑтам четко определенное задание Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°. Ðо Ñто не ÑовÑем так, так как данные Ñто Ñдро любой деÑтельноÑти программиÑтов. Что бы вы не делали в Ñвоей программе, вы либо передаете, либо изменÑете данные. БизнеÑ-аналитик изучает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² широком виде, архитектор в чуть более узком разрезе, так что, когда проблема приходит к вам, кажетÑÑ, что вÑе, что вам надо Ñделать, Ñто применить нужные алгоритмы и начать взаимодейÑтвовать Ñ Ð¸Ð¼ÐµÑŽÑ‰Ð¸Ð¼Ð¸ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. Это не так. -Ðеважно, на каком Ñтапе вы начинаете работать Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, они вÑегда оÑтаютÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой хорошо Ñпроектированного приложениÑ. ЕÑли вы внимательно поÑмотрите, как бизнеÑ-аналитик извлекает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· запроÑов клиентов, то Ñ Ð¿Ð¾Ð¹Ð¼ÐµÑ‚Ðµ, что данные играют фндаментальную роль. Ðналитик Ñоздает так называемые диаграммы потоков данных, где указаны иÑточники данных, и обозначен поток информации. Определив, какие данные будут чаÑтью ÑиÑтемы, архитектор начнет формировать иÑточники данных Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð°Ð· данных, протоколов обмена данными и форматов файлов. ПоÑле Ñтого задачу можно передавать программиÑту. Ðо процеÑÑ Ð½Ð° Ñтом не заканчиваетÑÑ, потому что вы (программиÑÑ‚) даже поÑле подобной тщательной обработки данных должны проанализировать их, чтобы выполнить задачу оптимальным ÑпоÑобом. Ð’ оÑнове вашей работы лежит Ð¸Ð´ÐµÑ ÐиклауÑа Вирта, ÑÐ¾Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑкольких Ñзыков программированиÑ. "Ðлгоритмы + Структуры данных = Программы". Ðлгоритм никогда не ÑущеÑтвует отдельно, Ð´ÐµÐ»Ð°Ñ Ñ‡Ñ‚Ð¾-то Ñам по Ñебе. Каждый алгоритм обÑзательно взаимодейÑтвует как минимум Ñ ÐºÐ°ÐºÐ¾Ð¹-то чаÑтью данных. +Ðеважно, на каком Ñтапе вы начинаете работать Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, они вÑегда оÑтаютÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ заботой в хорошо Ñпроектированном приложении. ЕÑли вы внимательно поÑмотрите, как бизнеÑ-аналитик извлекает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· запроÑов клиентов, то поймете, что данные играют фундаментальную роль. Ðналитик Ñоздает так называемые диаграммы потоков данных, где указаны иÑточники данных, и обозначен поток информации. Определив, какие данные будут чаÑтью ÑиÑтемы, архитектор начнет формировать иÑточники данных Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð°Ð· данных, протоколов обмена данными и форматов файлов. ПоÑле Ñтого задачу можно передавать программиÑту. Ðо процеÑÑ Ð½Ð° Ñтом не заканчиваетÑÑ, потому что вы (программиÑÑ‚) даже поÑле подобной тщательной обработки данных должны проанализировать их, чтобы выполнить задачу оптимальным ÑпоÑобом. Ð’ оÑнове вашей работы лежит Ð¸Ð´ÐµÑ ÐиклауÑа Вирта, ÑÐ¾Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑкольких Ñзыков программированиÑ. "Ðлгоритмы + Структуры данных = Программы". Ðлгоритм никогда не ÑущеÑтвует отдельно, Ð´ÐµÐ»Ð°Ñ Ñ‡Ñ‚Ð¾-то Ñам по Ñебе. Каждый алгоритм обÑзательно взаимодейÑтвует как минимум Ñ ÐºÐ°ÐºÐ¾Ð¹-то чаÑтью данных. -Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Преположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знаением нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтокнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. +Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Преположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знанием нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтокнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. Следующее: [Командные навыки. Как управлÑть временем разработки](../Team-Skills/01-How-to-Manage-Development-Time.md) \ No newline at end of file diff --git a/ru/2-Intermediate/README.md b/ru/2-Intermediate/README.md index 3728f8b..ea278b1 100644 --- a/ru/2-Intermediate/README.md +++ b/ru/2-Intermediate/README.md @@ -8,7 +8,7 @@ - [Как баланÑировать краткоÑть и абÑтракцию](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) - [Как оÑваивать новые навыки](Personal-Skills/06-How-to-Learn-New-Skills.md) - [ÐаучитеÑÑŒ печатать вÑлепую](Personal-Skills/07-Learn-to-Type.md) - - [Как выполнÑть интеграционное теÑтирование](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Как проводить интеграционное теÑтирование](Personal-Skills/08-How-to-Do-Integration-Testing.md) - [Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем](Personal-Skills/09-Communication-Languages.md) - [Стандартные технологии](Personal-Skills/10-Heavy-Tools.md) - [Как анализировать данные](Personal-Skills/11-How-to-analyze-data.md) @@ -22,7 +22,7 @@ - [Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) - [Как управлÑть завиÑимоÑÑ‚Ñми](Judgment/02-How-to-Manage-Software-System-Dependence.md) - [Как оценивать Ñтороннее программное обеÑпечение](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) - - [Как решать: покупать программу или пиÑать Ñвою](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [Как решить: покупать программу или пиÑать Ñвою](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) - [Как раÑти профеÑÑионально](Judgment/05-How-to-Grow-zProfessionally.md) - [Как проводить ÑобеÑедованиÑ](Judgment/06-How-to-Evaluate-Interviewees.md) - [Как понÑть, когда применÑть выÑокие технологии](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index 591bd7f..28bb771 100644 --- a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -1,11 +1,11 @@ # Как управлÑть временем разработки [//]: # (Version:1.0.0) -Чтобы управлÑть временем разработки, поддерживайте четкий и актуальный проектный план. Проектный план - Ñто оценка временных затрат, раÑпиÑание, набор промежуточных Ñтапов Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑÑа и раÑпределение времени вашей команды на каждое задание. Он также должен включать другие вещи, которые важно помнить, такие как вÑтречи Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ теÑтированиÑ, подготовка документации, заказ рабочего оборудованиÑ. ЕÑли вы работаете в команде, проектный план должен быть ÑоглаÑованным решением, как на Ñтарте проекта, там и по его ходу. +Чтобы управлÑть временем разработки, поддерживайте четкий и актуальный проектный план. Проектный план - Ñто оценка временных затрат, график, набор промежуточных Ñтапов Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑÑа и раÑпределение времени вашей команды на каждое задание. Он также должен включать другие вещи, о которых важно помнить, такие как вÑтречи Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ теÑтированиÑ, подготовка документации, заказ рабочего оборудованиÑ. ЕÑли вы работаете в команде, проектный план должен быть ÑоглаÑованным решением, как на Ñтарте проекта, там и по его ходу. -Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком опдробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñто Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ñчет конкретных людей. План и ваша ÑкÑпертиза позволÑть вам понÑть, Ñледует ли передать чаÑть задач одного члена команду другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте его, чтобы поддерживать емкоÑть и актуальноÑть задач. +Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком подробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñти Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ°ÑаютÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… людей. План и ваша ÑкÑпертиза позволÑть вам понÑть, Ñледует ли передать чаÑть задач одного члена команды другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте трекер, чтобы поддерживать емкоÑть и актуальноÑть задач. -ЕÑли вы не уÑпеваете выполнить Ñтап, Ñледует немедленно предпринÑть что-то, как минимум проинформировать боÑÑа о том, что запланированное завершение проекта ÑмеÑтитÑÑ Ð½Ð° некоторое времÑ. Ðачать Ñ Ñ‚Ð¾Ð³Ð¾, что оценка и раÑпиÑание никогда не будут идеальны, но они дают иллюзию, что вы Ñможете наверÑтать пропущенные дни в конце проекта. Может быть. Ðо так же вероÑтно, что вы недооценили Ñту чаÑть проекта, как и то, что вы ее переоценили. Так что запланированное завершение проекта уже ÑмеÑтилоÑÑŒ, Ð½Ñ€Ð°Ð²Ð¸Ñ‚Ñ Ð²Ð°Ð¼ Ñто или нет. +ЕÑли вы не уÑпеваете выполнить Ñтап, Ñледует немедленно предпринÑть что-то, как минимум проинформировать боÑÑа о том, что запланированное завершение проекта ÑмеÑтитÑÑ Ð½Ð° некоторое времÑ. Стоило бы начать Ñ Ñ‚Ð¾Ð³Ð¾, что оценка и раÑпиÑание никогда не будут идеальны, но они дают иллюзию, что вы Ñможете наверÑтать пропущенные дни в конце проекта. Может быть. Ðо так же вероÑтно, что вы недооценили Ñту чаÑть проекта, как и то, что вы ее переоценили. Так что запланированное завершение проекта уже ÑмеÑтилоÑÑŒ, нравитÑÑ Ð²Ð°Ð¼ Ñто или нет. -УбедитеÑÑŒ, что ваш план включает Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° внутренние ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹, демоÑтрации проекта, документацию, периодичеÑкие задачи по раÑпиÑанию, интеграционное теÑтирование, общение Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼Ð¸ командами, больничные, отпуÑка, поддержку ÑущеÑтвующих продуктов и Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸. Проектный план может предÑтавить Ñторонним людÑм или боÑÑу, чтобы они понÑли, чем занÑта команда. По Ñтой причине он должен быть краток и актуален. +УбедитеÑÑŒ, что ваш план включает Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° внутренние ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹, демонÑтрации проекта, документирование, периодичеÑкие задачи по графику, интеграционное теÑтирование, общение Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼Ð¸ командами, больничные, отпуÑка, поддержку ÑущеÑтвующих продуктов и Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸. Проектный план можно показать Ñторонним людÑм или боÑÑу, чтобы они понÑли, чем занÑта команда. По Ñтой причине он должен быть краток и актуален. Следующее: [Как управлÑть риÑками, ÑвÑзанными Ñо Ñторонним программным обеÑпечением](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index 7296524..04723a5 100644 --- a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -2,10 +2,10 @@ [//]: # (Version:1.0.0) Проект чаÑто завиÑит от Ñтороннего программного обеÑпечениÑ, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ контролÑ. С Ñтим ÑвÑзаны большие риÑки, которые должны быть понÑтны каждому, кто работает в проекте. -Ðикогда не возлагайте никаких надежд на Ñкобы обещанное, но пока еще недоÑтупное программное обеÑпечение. Это вернейший ÑпоÑоб вылететь в трубу. Ðеразумно проÑто ÑкептичеÑки отноÑитьÑÑ Ðº обещанию Ñторонней компании выпуÑтить определенны продукт к определенной дате. Гораздо разумнее полноÑтью проигнорировать его и забыть о его ÑущеÑтвовании. Ðикогда не запиÑывайте такие надежды в документы вашей компании. +Ðикогда не возлагайте никаких надежд на Ñкобы обещанное, но пока еще недоÑтупное программное обеÑпечение. Это вернейший ÑпоÑоб вылететь в трубу. Ðеразумно проÑто ÑкептичеÑки отноÑитьÑÑ Ðº обещанию Ñторонней компании выпуÑтить определенный продукт к определенной дате. Гораздо разумнее полноÑтью проигнорировать его и забыть о его ÑущеÑтвовании. Ðикогда не запиÑывайте такие надежды в документы вашей компании. -ЕÑли Ñтороннее программное обеÑпечение вÑе же ÑущеÑтвует, оно по-прежнему неÑет Ñ Ñобой риÑки, но по крайней мере Ñти риÑки можно преодолеть. ЕÑли вы предполагаете иÑпользование Ñторонних программ, уже на ранней Ñтадии проекта Ñледует поÑвÑтить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° их оценку. Ðикому не понравитÑÑ ÑƒÑлышать, что потребуетÑÑ Ð´Ð²Ðµ недели или два меÑÑца на оценку пригодноÑти вÑех трех Ñторонних программ, но Ñто то, что должно быть Ñделано как можно Ñкорее. СтоимоÑть интеграции Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ без надлежащей оценки задейÑтвованных Ñторонних программ. +ЕÑли Ñтороннее программное обеÑпечение вÑе же ÑущеÑтвует, оно по-прежнему неÑет Ñ Ñобой риÑки, но по крайней мере Ñти риÑки можно преодолеть. ЕÑли вы предполагаете иÑпользование Ñторонних программ, уже на ранней Ñтадии проекта Ñледует поÑвÑтить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° их оценку. Ðикому не понравитÑÑ ÑƒÑлышать, что потребуетÑÑ Ð´Ð²Ðµ недели, а то и два меÑÑца на оценку пригодноÑти вÑех трех Ñторонних программ, но Ñто то, что надо Ñделать как можно раньше. СтоимоÑть интеграции Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ без надлежащей оценки задейÑтвованных Ñторонних программ. -Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно и главным образом опираетÑÑ Ð½Ð° ÑкÑпертов. Ð’Ñ‹ можете ÑÑŠÑконоить кучу времени, еÑли Ñможете найти ÑкÑпертов. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. +Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно, и в оÑновном им владеют ÑкÑперты. Ð’Ñ‹ можете ÑÑкономить кучу времени, еÑли Ñможете найти ÑкÑпертов. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. Ðикогда не вноÑите в график еще не выпущенное Ñтороннее прграммное обеÑпечение. Следующее: [Как руководить конÑультантами](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md index f70d33e..8e5c43b 100644 --- a/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md +++ b/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -1,9 +1,9 @@ # Как руководить конÑультантами [//]: # (Version:1.0.0) -ИÑпользуйте конÑультантов, но не полагайтеÑÑŒ на них. Эти замечательные людии заÑлуживают вÑÑчеÑкого уважениÑ. ПоÑкольку они наблюдали множеÑтво проектов, они зачаÑтю знают больше о ÑпецифичеÑких технологиÑÑ… или даже техниках программированиÑ, чем вы. Лучший ÑпоÑоб иÑпользовать их как штатных преподавателей, которые могут научить на ÑобÑтвенном примере. +ИÑпользуйте конÑультантов, но не полагайтеÑÑŒ на них. Эти замечательные люди заÑлуживают вÑÑчеÑкого уважениÑ. ПоÑкольку они наблюдали множеÑтво проектов, они зачаÑтую знают больше о ÑпецифичеÑких технологиÑÑ… или даже техниках программированиÑ, чем вы. Лучший ÑпоÑоб иÑпользовать их как штатных преподавателей, которые могут научить на ÑобÑтвенном примере. Однако, обычно конÑультанты не могут Ñтать чаÑтью команды в том ÑмыÑле, что и обычные Ñотрудники, Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ потому, что у Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ не хватить времени изучить их Ñильные и Ñлабые Ñтороны. Их финанÑовые обÑзательÑтва гораздо ниже. Они могут легко уйти. Они меньше выигрывают, еÑли ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð² целом процветает. Ðекоторые из них будут хороши, некоторые Ñредними, некоторые плохими конÑультантами. ПоÑкольку ваш выбор конÑультантов будет не так тщателен, как подбор Ñотрудников, чаще вы будете вÑтречать плохих. -ЕÑли конÑультанты пишут код, то вы должны тщательно ревьюить его по мере работы. ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ проект до конца, риÑÐºÑƒÑ Ð¾Ñтавить большой непроверенный блок кода. Это отноÑитÑÑ ÐºÐ¾ вÑем членам команды, но обычно вы их знаете лучше, чем конÑультантов. +ЕÑли конÑультанты пишут код, то вы должны тщательно ревьюить его по мере работы. ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ проект до конца, риÑÐºÑƒÑ Ð¾Ñтавить непроверенным большой блок кода. Это отноÑитÑÑ ÐºÐ¾ вÑем членам команды, но обычно вы их знаете лучше, чем конÑультантов. Следующее: [Как ÑоизмерÑть количеÑтво общениÑ](04-How-to-Communicate-the-Right-Amount.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md index 6c3d489..2df240f 100644 --- a/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md +++ b/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -1,10 +1,10 @@ # Как чеÑтно выражать неÑоглаÑие [//]: # (Version:1.0.0) -ÐеÑоглаÑие Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть принÑть хорошее решение, но егоÑледует выражать аккуратно. ÐадеюÑÑŒ, обычно вы Ñпокойно выражаете Ñвою точку зрениÑ, Ð²Ð°Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñлушают, а затем принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. Ð’ Ñтом Ñлучае больше нечего Ñказать, и вам только оÑтаетÑÑ Ð¿Ñ€Ð¸Ð½Ñть решение, даже еÑли вы Ñ Ð½Ð¸Ð¼ неÑоглаÑны. ЕÑли вы можете Ñледовать решению неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñвое неÑоглаÑие, Ñкажите об Ñтом. Это продемоÑтрирует, что вы незавиÑимы и не поддакиваете проÑто так, но одновременно уважаете принÑтое решение и вÑÑŽ команду. +ÐеÑоглаÑие Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть принÑть хорошее решение, но его Ñледует выражать аккуратно. ÐадеюÑÑŒ, обычно вы Ñпокойно выражаете Ñвою точку зрениÑ, Ð²Ð°Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñлушают, а затем принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. Ð’ Ñтом Ñлучае больше нечего Ñказать, и вам только оÑтаетÑÑ Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ, поддерживаете ли вы решение, даже еÑли вы Ñ Ð½Ð¸Ð¼ неÑоглаÑны. ЕÑли вы можете поддержать решение неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñвое неÑоглаÑие, Ñкажите об Ñтом. Так вы покажете Ñвоб ценноÑть: вы незавиÑимы, имеете Ñвое мнение и не идете на поводу, но одновременно уважаете принÑтое решение и вÑÑŽ команду. Иногда решение, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы неÑоглаÑны, принимаетÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ñƒ, что те, кто его принимает, не имели возможноÑти полноÑтью оценить ваше мнение. Ð’ Ñтом Ñлучае, иÑÑ…Ð¾Ð´Ñ Ð¸Ð· пользы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или команды вам Ñтоит прикинуть, поднимать ли вопроÑ. ЕÑли Ñто Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð½Ð° ваш взглÑд ошибка, то, возможно, не Ñтоит переÑматривать решение. ЕÑли же речь идет о Ñерьезной ошибке, то Ñтоит выдвинуть возражениÑ. -Обычно, Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñто не проблема. Ð’ некоторых ÑтреÑÑовых ÑитуациÑÑ… и Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ типами личноÑтей они могут быть принÑты на личный Ñчет. Ðапример, некоторые очень хорошие программиÑты недоÑтаточно уверены в Ñебе, чтобы возразить, даже еÑли у них на Ñто еÑть веÑкие причины. Ð’ худшем Ñлучае, тот, кто принимает Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½ÐµÑƒÐ²ÐµÑ€ÐµÐ½ в Ñебе и принимает Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ðº вызов Ñвоему авторитету. ЗдеÑÑŒ важно помнить, что в таких обÑтоÑтельÑтвах люди в первую очередь реагируют инÑтинктивно. Вам Ñтоит выÑказать Ñвои Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð»Ð¸Ñ‡Ð½Ð¾ и поÑтаратьÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ, как новые аргументы изменÑÑ‚ оÑнову, на которой принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. +Обычно Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñто не проблема. Ð’ некоторых ÑтреÑÑовых ÑитуациÑÑ… и Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ типами личноÑтей их могут принÑть на личный Ñчет. Ðапример, некоторые очень хорошие программиÑты недоÑтаточно уверены в Ñебе, чтобы возразить, даже еÑли у них на Ñто еÑть веÑкие причины. Ð’ худшем Ñлучае, тот, кто принимает Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½ÐµÑƒÐ²ÐµÑ€ÐµÐ½ в Ñебе и принимает Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ðº вызов Ñвоему авторитету. ЗдеÑÑŒ важно помнить, что в таких обÑтоÑтельÑтвах люди в первую очередь реагируют инÑтинктивно. Вам Ñтоит выÑказать Ñвои Ð²Ð¾Ð·Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°ÐµÐ´Ð¸Ð½Ðµ Ñ Ñтим человеком и поÑтаратьÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ, как новые аргументы изменÑÑ‚ оÑнову, на которой принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. ÐезавиÑимо от того, будет решение отменено или нет, вы должны помнить, что вы не Ñможете Ñказать "Я же говорил!", поÑкольку альтернативное решение было полноÑтью изучено. diff --git a/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md index c851c12..59996bb 100644 --- a/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md +++ b/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -1,11 +1,11 @@ # Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика [//]: # (Version:1.0.0) -Давление выхода на рынок - Ñто давление быÑтро выпуÑтить хороший продукт. Это хорошо, поÑкольку отражает финанÑовую дейÑтвительноÑть и до некоторой Ñтепени Ñто полезное давление. Давление графика - Ñто давление выпуÑтить что-то быÑтрее, чем Ñто возможно, и Ñто давление опуÑтошает, оно нездоровое и вÑтречаетÑÑ Ñлишком чаÑто. +Давление выхода на рынок - Ñто необходимоÑть быÑтро выпуÑтить хороший продукт. Это хорошо, поÑкольку отражает финанÑовую дейÑтвительноÑть и до некоторой Ñтепени Ñто полезное давление. Давление графика - Ñто давление выпуÑтить что-то быÑтрее, чем Ñто возможно, и подобное давление опуÑтошает, оно нездоровое и вÑтречаетÑÑ Ñлишком чаÑто. -Давление графика ÑущеÑтвует по неÑкольким причинам. Люди, дающие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтам не до конца ценÑÑ‚ нашу рабочую Ñтику и наÑколько здорово быть программиÑтом. Возможно, поÑкольку они проецируют ÑобÑтвенное поведение на наÑ, они ожидают, что проÑьба Ñделать задачу быÑтрее заÑтавит Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ уÑерднее. Возможно, Ñто так, но Ñффект от такой проÑьбы очень мал, а ущерб велик. Вдобавок, они не понимают, что в дейÑтвительноÑти значит разработать программное обеÑпечение. Они не могут Ñтого понÑть, не могут разработать ÑиÑтему ÑамоÑтоÑтельно, поÑтому единÑтвенное, что им оÑтаетÑÑ, Ñто наблюдать за давлением выхода на рынок и подталкивать программиÑтов. +Давление графика ÑущеÑтвует по неÑкольким причинам. Люди, дающие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтам не до конца ценÑÑ‚ нашу рабочую Ñтику и любовь к профеÑÑии. Возможно, поÑкольку они проецируют ÑобÑтвенное поведение на наÑ, они ожидают, что проÑьба Ñделать задачу быÑтрее заÑтавит Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ уÑерднее. Возможно, Ñто так, но Ñффект от такой проÑьбы очень мал, а ущерб велик. Вдобавок, они не понимают, что в дейÑтвительноÑти значит разработать программное обеÑпечение. Они не могут Ñтого понÑть, не могут разработать ÑиÑтему ÑамоÑтоÑтельно, поÑтому единÑтвенное, что им оÑтаетÑÑ, Ñто наблюдать за давлением выхода на рынок и подталкивать программиÑтов. -Лучшее, что можно Ñделать Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика, Ñто превратить его в давление выхода на рынок. Ð”Ð»Ñ Ñтого надо дать четкое предÑтавление о ÑвÑзи между имеющимиÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ и продуктом. Лучший ÑпоÑоб Ñто дать чеÑтную, детальную и, Ñамое главное, понÑтную оценку вÑех трудозатрат. Это дает дополнительное преимущеÑтво в виде возможноÑти принимать правильные управленчеÑкие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ñчет возможных компромиÑÑов в функциональноÑти. +Лучшее, что можно Ñделать Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика, Ñто превратить его в давление выхода на рынок. Ð”Ð»Ñ Ñтого надо дать четкое предÑтавление о ÑвÑзи между имеющимиÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ и продуктом. Лучший ÑпоÑоб - Ñто дать чеÑтную, детальную и, Ñамое главное, понÑтную оценку вÑех трудозатрат. Это дает дополнительное преимущеÑтво в виде возможноÑти принимать правильные управленчеÑкие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ñчет возможных компромиÑÑов в функциональноÑти. -ÐšÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ð¼Ñ‹Ñль, которую должна проÑÑнить оценка, заключаетÑÑ Ð² том, что работа очень похожа на неÑжимаемую жидкоÑть. Ð’Ñ‹ не можете вмеÑтить в промежуток времени больше работы, так как не можете вмеÑтить в контейнер больше воды, чем его объем. Ð’ некотором ÑмыÑле, программиÑÑ‚ должен не говорить "Ðет", а Ñпрашивать в ответ "Чем вы готовы пожертвовать, чтобы Ñта работа была Ñделана?". Эффект от ÑоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ‚ÐºÐ¸Ñ… планов и оценок заключаетÑÑ Ð² повышении ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸Ñ Ðº программиÑтам. Именно так ведут ÑÐµÐ±Ñ Ð¿Ñ€Ð¾Ñ„ÐµÑÑионалы. УÑÐµÑ€Ð´Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° программиÑтов Ñтанет видна, и нереалиÑтичный график Ñтанет очевиден Ð´Ð»Ñ Ð²Ñех. ПрограммиÑтов Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ð²ÐµÑти. ÐереалиÑтичный график Ñто неуважение к команде, он Ñильно деморализует людей. ЭкÑтремальное программирование раÑширÑет Ñту идею и ÑтроитÑÑ Ð²Ð¾ÐºÑ€ÑƒÐ³ нее. Я надеюÑÑŒ, что каждому из читателей поÑчаÑтливитÑÑ Ð¸Ñпользовать его в работе. +ÐšÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ð¼Ñ‹Ñль, которую должна проÑÑнить оценка, заключаетÑÑ Ð² том, что работа очень похожа на неÑжимаемую жидкоÑть. Ð’Ñ‹ не можете вмеÑтить в промежуток времени больше работы, так же как не можете вмеÑтить в контейнер больше воды, чем его объем. Ð’ некотором ÑмыÑле, программиÑÑ‚ должен не говорить "Ðет", а Ñпрашивать в ответ "Чем вы готовы пожертвовать, чтобы Ñта работа была Ñделана?". Эффект от ÑоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ‚ÐºÐ¸Ñ… планов и оценок заключаетÑÑ Ð² повышении ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸Ñ Ðº программиÑтам. Именно так ведут ÑÐµÐ±Ñ Ð¿Ñ€Ð¾Ñ„ÐµÑÑионалы. УÑÐµÑ€Ð´Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° программиÑтов Ñтанет видна, а нереалиÑтичный график Ñтанет Ð´Ð»Ñ Ð²Ñех очевиден. ПрограммиÑтов Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ð²ÐµÑти. ÐереалиÑтичный график Ñто неуважение к команде, он Ñильно деморализует людей. ЭкÑтремальное программирование раÑширÑет Ñту идею и ÑтроитÑÑ Ð²Ð¾ÐºÑ€ÑƒÐ³ нее. Я надеюÑÑŒ, что каждому из читателей поÑчаÑтливитÑÑ Ð¸Ñпользовать его в работе. Следующее: [Как понÑть пользователÑ](02-How-to-Understand-the-User.md) \ No newline at end of file diff --git a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index 0fc20d6..bc5528c 100644 --- a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -2,15 +2,15 @@ [//]: # (Version:1.0.0) Ваша обÑзанноÑть - Ñто понÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ помочь Ñто Ñделать вашему боÑÑу. ПоÑкольку пользователи непоÑредÑтвенно не вовлечены в разработку вашего продукта, они ведут ÑÐµÐ±Ñ Ñлегка иначе: -- Обычно пользователи выноÑÑÑ‚ короткие ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ +- Обычно пользователи выноÑÑÑ‚ короткие ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ заÑÐ²Ð»ÐµÐ½Ð¸Ñ - У пользователей еÑть ÑÐ²Ð¾Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°, они будут Ñкорее думать о небольших доработках в вашем продукте, чем о больших улучшениÑÑ… -- Мнение одного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ может предÑтавлÑть общее мнение вÑех пользователей вашего продукта +- Мнение одного конкретного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ может предÑтавлÑть общее мнение вÑех пользователей вашего продукта -Ваша обÑзанноÑть - дать пользователÑм не то, что они говорÑÑ‚, что хотÑÑ‚, а то, что они хотÑÑ‚ в деÑтвительноÑти. Однако, лучше вÑего Ñто Ñформулировать Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… пользователей и получить от них ответ, что ваше предложение дейÑтвительно отвечает их реальных желаниÑм. Ð¥Ð¾Ñ‚Ñ Ñƒ пользователей может не хватит полного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°. Ваша уверенноÑть в ÑобÑтвенных идеÑÑ… на Ñтот Ñчет должно варьироватьÑÑ. Следует одинаково опаÑатьÑÑ ÐºÐ°Ðº ÑамоуверенноÑти, так и ложной ÑкромноÑти, когда речь идет о нуждах вашего пользователÑ. ПрограммиÑты нацелены на проектирование и Ñоздание. ИÑÑледователи рынка нацелены на выÑвление нужд потребителей. Эти два типа людей или два типа Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ñ Ð² одном человеке, гармонично Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ð² ÑвÑзке, дают наилучший ÑˆÐ°Ð½Ñ Ñформировать правильное предÑтавление. +Ваша обÑзанноÑть - дать пользователÑм не то, что они говорÑÑ‚, что хотÑÑ‚, а то, что они хотÑÑ‚ в деÑтвительноÑти. Однако, лучше вÑего Ñто Ñформулировать и получить от ваших пользователей ответ, что ваше предложение дейÑтвительно отвечает их реальных желаниÑм. Ð¥Ð¾Ñ‚Ñ Ñƒ пользователей может не хватит полного Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ñей картины Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°. Ваша уверенноÑть в ÑобÑтвенных идеÑÑ… на Ñтот Ñчет должна варьироватьÑÑ. Следует одинаково опаÑатьÑÑ ÐºÐ°Ðº ÑамоуверенноÑти, так и ложной ÑкромноÑти, когда речь идет о нуждах вашего пользователÑ. ПрограммиÑты нацелены на проектирование и Ñоздание. ИÑÑледователи рынка нацелены на выÑвление нужд потребителей. Эти два типа людей или два типа Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ñ Ð² одном человеке, гармонично Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ð² ÑвÑзке, дают наилучший ÑˆÐ°Ð½Ñ Ñформировать правильное понимание пользователÑ. Чем больше времени вы проведете Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми, тем лучше вы Ñможете понÑть, что будет лучшим Ð´Ð»Ñ Ð½Ð¸Ñ…. Вам Ñтоит проверÑть Ñвои идеи на пользователÑÑ… так чаÑто, наÑколько Ñто вообще возможно. Вам Ñтоит обедать Ñ Ð½Ð¸Ð¼Ð¸, еÑли Ñто возможно. -Гай КаваÑаки [Rules] подчеркивает важноÑть *наблюдениÑ* того, чем занÑты ваши пользователи, дополнительно к выÑлушиванию их. +Гай КаваÑаки [Rules] подчеркивает важноÑть *наблюдениÑ* того, чем занÑты ваши пользователи, дополнительно к выÑлушиванию их пожеланий. Я думаю, что у подрÑдчиков и конÑультантов чаÑто возникают большие проблемы Ñ Ñ‚ÐµÐ¼, чтобы их клиенты проÑÑнили в Ñвоем Ñознаннии, что они хотÑÑ‚ в дейÑтвительноÑти. ЕÑли вы намерены быть конÑультантом, Ñ Ð±Ñ‹ предложил вам выбирать клиентов по четкоÑти их мыÑлей и по кошельку. diff --git a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index b557ea9..d646634 100644 --- a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -1,13 +1,13 @@ # Как получить повышение [//]: # (Version:1.0.0) -Чтобы получить повышение по роли, Ñначала начните играть Ñту роль. +Чтобы получить повышение по роли, начните играть Ñту роль. -Чтобы получить повышение по должноÑти, выÑÑните, что ожидаетÑÑ Ð¾Ñ‚ Ñтой должноÑти, и Ñделайте Ñто. +Чтобы получить повышение по должноÑти, выÑÑните, что ожидаетÑÑ Ð¾Ñ‚ Ñтой должноÑти, и делайте Ñто. -Чтобы получить прибавку к зарплате, обговорите Ñто, Ð¸Ð¼ÐµÑ Ð½Ð° руках веÑкие аргументы в Ñвою пользу. +Чтобы получить прибавку к зарплате, обговорите ее, Ð¸Ð¼ÐµÑ Ð½Ð° руках веÑкие аргументы в Ñвою пользу. ЕÑли вы чуÑтвуете, что Ð²Ð°Ñ Ð¾Ð±Ð¾ÑˆÐ»Ð¸ Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸ÐµÐ¼, поговорите Ñ Ð±Ð¾ÑÑом об Ñтом. СпроÑите его в Ñвном виде, что вы должны делать, чтобы получить повышение, и поÑтарайтеÑÑŒ Ñделать Ñто. Это кажетÑÑ Ð±Ð°Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼, но чаÑто ваше предÑтавление того, что вам надо делать, отличаетÑÑ Ð¾Ñ‚ предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Кроме того, такой разговор в некотором ÑмыÑле подтолкнет вашего боÑÑа. -БольшинÑтво программиÑтов Ñкорее вÑего имеют преувеличенное предÑтавление о ÑобÑтвенных ÑпоÑобноÑÑ‚ÑÑ…, в конце концов, мы вÑе не можем входить в 10% лучших программиÑтов. Однако, Ñ Ð²Ñтречал и людей, которые были очень Ñильно недооценены. ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ, что оценка каждого будет на 100% Ñовпадать Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью, но Ñ Ð´ÑƒÐ¼Ð°ÑŽ, что в общем люди довольно Ñправедливо ÑÐµÐ±Ñ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°ÑŽÑ‚, но Ñ Ð¾Ð´Ð½Ð¾Ð¹ оговоркой: Ð²Ð°Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ñправедливо оценить без видимоÑти вашей работы. Иногда из-за обÑтоÑтельÑтв или личных качеÑтв кто-то будет не наÑтолько Ñильно заметен. Работа из дома или географичеÑки удаленно от вашей команды и боÑÑа делает Ñто оÑобенно трудным. +БольшинÑтво программиÑтов Ñкорее вÑего имеют преувеличенное предÑтавление о ÑобÑтвенных ÑпоÑобноÑÑ‚ÑÑ…, в конце концов, мы вÑе не можем входить в 10% лучших программиÑтов. Однако, Ñ Ð²Ñтречал и людей, которые были очень Ñильно недооценены. ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ, что оценка каждого будет на 100% Ñовпадать Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью, но Ñ Ð´ÑƒÐ¼Ð°ÑŽ, что в общем люди довольно Ñправедливо ÑÐµÐ±Ñ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°ÑŽÑ‚. С одной оговоркой: Ð²Ð°Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ñправедливо оценить без видимоÑти вашей работы. Иногда из-за обÑтоÑтельÑтв или личных качеÑтв кто-то будет не наÑтолько Ñильно заметен. Работа из дома или географичеÑки удаленно от вашей команды и боÑÑа делает Ñто оÑобенно трудным. -Следующее: [Serving Your Team - Как развивать таланты](../Serving-Your-Team/01-How-to-Develop-Talent.md) +Следующее: [Управление командой. Как развивать таланты](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index 1632ac8..950aa56 100644 --- a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -4,19 +4,19 @@ > Ð’ÑÑ‘, что Ð¼ÐµÐ½Ñ Ð½Ðµ убивает, делает Ð¼ÐµÐ½Ñ Ñильнее. -Ваша ÑÐ°Ð¼Ð°Ñ Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть - Ñто ваша команда. Ð’Ñ‹ должны хорошо знать каждого из членов команды. Ð’Ñ‹ должны нагружать Ñвою команду, но не перегружать. Следует разговаривать Ñ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ вашей команды об их нагрузке. ЕÑли они ÑоглаÑны Ñ Ð½ÐµÐ¹, то они будут хорошо мотивированы. Ð’ каждом проекте ÑтарайтеÑÑŒ нагружать их таким образом, чтобы они были ÑоглаÑны Ñо Ñвоей нагрузкой, и одновременно, чтобы она Ñовпадала Ñ Ð²Ð°ÑˆÐ¸Ð¼ ÑобÑтвенным мнением о том, что нужно членам вашей команды. Ðагружайте их не объемом работы, а новым навыком или Ñлегка иной ролью в команде. +Ваша ÑÐ°Ð¼Ð°Ñ Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть - Ñто ваша команда. Ð’Ñ‹ должны хорошо знать каждого из членов команды. Ð’Ñ‹ должны нагружать Ñвою команду, но не перегружать. Следует разговаривать Ñ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ вашей команды об их нагрузке. ЕÑли они ÑоглаÑны Ñ Ð½ÐµÐ¹, то они будут хорошо мотивированы. Ð’ каждом проекте ÑтарайтеÑÑŒ нагружать их таким образом, чтобы они были ÑоглаÑны Ñо Ñвоей нагрузкой, и одновременно, чтобы она Ñовпадала Ñ Ð²Ð°ÑˆÐ¸Ð¼ ÑобÑтвенным мнением о том, что нужно членам вашей команды. Ðагружайте их не объемом работы, а оÑвоением новых навыков или Ñлегка иной ролью в команде. -Вам Ñледует позволÑть людÑм (и Ñебе тоже) иногда ошибатьÑÑ. ПредуÑматривайте Ñти неудачи в Ñвоем графике. ЕÑли никогда нет ошибок и неудач, то нет и чувÑтва приключениÑ. ЕÑли иногда нет ошибок и неудач, значит, вы недоÑтаточно ÑтараетеÑÑŒ. Когда кто-то ошибаетÑÑ, вам Ñледует веÑти ÑÐµÐ±Ñ Ñ‚Ð°Ðº вежливо, как вы можете, одновременно не отноÑÑÑÑŒ к человеку так, Ñловно он преуÑпел. +Вам Ñледует позволÑть людÑм (и Ñебе тоже) иногда ошибатьÑÑ. ПредуÑматривайте Ñти неудачи в графике. ЕÑли ошибки и неудачи никогда не ÑлучаютÑÑ, то нет и чувÑтва приключениÑ. ЕÑли иногда в работе нет ошибок и неудач, значит, вы недоÑтаточно ÑтараетеÑÑŒ. Когда кто-то ошибаетÑÑ, вам Ñледует веÑти ÑÐµÐ±Ñ Ñ‚Ð°Ðº вежливо, как вы можете, одновременно не отноÑÑÑÑŒ к человеку так, Ñловно он преуÑпел. ПоÑтарайтеÑÑŒ вовлечь и увлечь каждого из членов команды. СпроÑите каждого из них в Ñвном виде, что им нужно Ð´Ð»Ñ Ð¼Ð¾Ñ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸, еÑли они еще не мотивированы. Возможно, вы не Ñможете удовлетворить вÑех, но вÑе же Ñтоит узнать, кто что хочет. -ÐÐµÐ»ÑŒÐ·Ñ Ð¼Ð¸Ñ€Ð¸Ñ‚ÑŒÑÑ Ñ Ñ‚ÐµÐ¼, кто намеренно не Ñ‚Ñнет Ñвою чаÑть нагрузки из-за низкого морального духа или неудовлетворенноÑти. ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñть отлынивать. Ð’Ñ‹ должны ÑтаратьÑÑ Ð¿Ñ€Ð¸Ð²ÐµÑти таких людей в ÑоÑтоÑние выÑокой мотивации и продуктивноÑти. Пока у Ð²Ð°Ñ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ терпениÑ, подталкивайте их в Ñтом направлении. Когда ваше терпение иÑÑÑкнет, увольнÑйте их. ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñть тому, кто намеренно работает ниже Ñвоего уровнÑ, оÑтаватьÑÑ Ð² команде. Это неÑправедливо по отношению к оÑтальным. +ÐÐµÐ»ÑŒÐ·Ñ Ð¼Ð¸Ñ€Ð¸Ñ‚ÑŒÑÑ Ñ Ñ‡Ð»ÐµÐ½Ð¾Ð¼ команды, который намеренно не Ñ‚Ñнет Ñвою чаÑть нагрузки из-за низкого морального духа или неудовлетворенноÑти. ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñть отлынивать. Ð’Ñ‹ должны ÑтаратьÑÑ Ð¿Ñ€Ð¸Ð²ÐµÑти таких людей в ÑоÑтоÑние выÑокой мотивации и продуктивноÑти. Пока у Ð²Ð°Ñ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ терпениÑ, подталкивайте их в Ñтом направлении. Когда ваше терпение иÑÑÑкнет, увольнÑйте их. ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñть тому, кто намеренно работает ниже Ñвоего уровнÑ, оÑтаватьÑÑ Ð² команде. Это неÑправедливо по отношению к оÑтальным. -Ð’Ñ‹Ñкажите публично Ñильным членам Ñвоей команды, что вы думаете, что они Ñильные Ñотрудники. Хвалите публично и критикуйте наедине. +Говорите публично Ñильным членам Ñвоей команды, что по вашему мнению они Ñильные Ñотрудники. Хвалите публично и критикуйте наедине. Более Ñильные члены вашей команды еÑтеÑтвенно будут занÑты более трудными задачами, чем Ñлабые. Это абÑолютно нормально, и пока вÑе в команде работают уÑердно, никто не должен заморачиватьÑÑ Ð¿Ð¾ Ñтому поводу. -Странный факт, который не отражаетÑÑ Ð½Ð° зарплатах, заключаетÑÑ Ð² том, что хороший программиÑÑ‚ продуктивнее 10 плохих. Это порождает Ñтранную Ñитуацию. ЧаÑто будет ÑлучатьÑÑ, что вы будете быÑтрее продвигатьÑÑ Ð¿Ð¾ проекту, еÑли отÑтранить от работы вÑех Ñлабых членов команды. ЕÑли бы вы так поÑтупали бы, то дейÑтвительно в краткоÑрочной перÑпективе вы добьетеÑÑŒ большего прогреÑÑа. Однако, ваша команда потерÑет неÑколько важных преимущеÑтв, а именно обучение Ñлабых членов команды, раÑпроÑтранение знаний и ÑпоÑобноÑть команды воÑÑтанавливатьÑÑ Ð¿Ñ€Ð¸ потере Ñильных программиÑтов. Сильные программиÑты должны быть ÑниÑходительными в Ñтом плане и ÑтаратьÑÑ Ð²Ð¸Ð´ÐµÑ‚ÑŒ общую картину. +Странный факт, который не отражаетÑÑ Ð½Ð° зарплатах, заключаетÑÑ Ð² том, что хороший программиÑÑ‚ продуктивнее 10 плохих. Это порождает Ñтранную Ñитуацию. ЧаÑто будет ÑлучатьÑÑ, что вы будете быÑтрее продвигатьÑÑ Ð¿Ð¾ графику, еÑли отÑтраните от работы вÑех Ñлабых членов команды. ЕÑли бы вы так поÑтупили бы, то дейÑтвительно в краткоÑрочной перÑпективе вы добилиÑÑŒ бы большего прогреÑÑа. Однако, ваша команда потерÑет неÑколько важных преимущеÑтв, а именно обучение Ñлабых членов команды, раÑпроÑтранение знаний и ÑпоÑобноÑть команды воÑÑтанавливатьÑÑ Ð¿Ñ€Ð¸ потере Ñильных программиÑтов. Сильные программиÑты должны быть ÑниÑходительными в Ñтом плане и ÑтаратьÑÑ Ð²Ð¸Ð´ÐµÑ‚ÑŒ общую картину. ЧаÑто вы можете дать более Ñильным членам команды Ñложные, но тщательно разграниченные задачи. diff --git a/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md index 8f469b2..8dfd82e 100644 --- a/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md +++ b/ru/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -2,13 +2,13 @@ Чтобы получить наибольшую отдачу от коллег, развивайте дружеÑкий командный дух и ÑтарайтеÑÑŒ, чтобы каждый был лично воÑтребован и вовлечен. -Ð’ развитии командного духа помогают такие банальные штуки как одежда Ñ Ð»Ð¾Ð³Ð¾ компании и корпоративы, но нет ничего лучше личного взаимоуважениÑ. ЕÑли вÑе уважают друг друга, то никто никого не захочет подводить. Командный дух поÑвлÑетÑÑ, когда люди жертвуют ради команды и думают в рамках блага Ð´Ð»Ñ Ð²Ñей команды, а не о личной выгоде. Как лидер, вы не можете требовать большего, чем лично вы делаете в Ñтом отношении. +Ð’ развитии командного духа помогают такие банальные штуки как одежда Ñ Ð»Ð¾Ð³Ð¾ компании и корпоративы, но нет ничего лучше личного взаимоуважениÑ. ЕÑли вÑе уважают друг друга, то никто никого не захочет подводить. Командный дух поÑвлÑетÑÑ, когда люди жертвуют ради команды и думают в рамках блага Ð´Ð»Ñ Ð²Ñей команды, а не о личной выгоде. Как лидер, вы не можете требовать от оÑтальных большего, чем лично вы делаете в Ñтом отношении. -Одним из ключевых моментов в руководÑтве команды ÑвлÑетÑÑ Ð´Ð¾Ñтижение конÑенÑуÑа, чтобы вÑе были вовлечены в решение. Иногда Ñто означает позволить Ñвоей команде ошибитьÑÑ. То еÑть, еÑли Ñто не принеÑет большого ущерба проекту, вы должны позволить чаÑти Ñвоей команды поÑтупать по-Ñвоему, оÑновываÑÑÑŒ на конÑенÑуÑе, даже вы абÑолютно уверены, что Ñто неверное решение. Ð’ Ñтом Ñлучае не надо ÑоглашатьÑÑ Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸, проÑто открыто выразите Ñвое неÑоглаÑие и примите общее решение. Ðе говорите обиженно или как будто вы вынуждают к решению, проÑто обозначьте, что вы неÑоглаÑны, но Ð´Ð»Ñ Ð²Ð°Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ команды гораздо важнее. ЧаÑто Ñто заÑтавит команду изменить Ñвое решение. Ð’ Ñтом Ñлучае, не заÑтавлÑйте ее Ñледовать первоначальному плану. +Одним из ключевых моментов в руководÑтве команды ÑвлÑетÑÑ Ð´Ð¾Ñтижение конÑенÑуÑа, так чтобы вÑе были вовлечены в решение. Иногда Ñто означает позволить Ñвоей команде ошибитьÑÑ. То еÑть, еÑли Ñто не принеÑет большого ущерба проекту, вы должны позволить чаÑти Ñвоей команды поÑтупать по-Ñвоему, оÑновываÑÑÑŒ на конÑенÑуÑе, даже вы абÑолютно уверены, что Ñто неверное решение. Ð’ Ñтом Ñлучае не надо ÑоглашатьÑÑ Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸, проÑто открыто выразите Ñвое неÑоглаÑие и примите общее решение. Ðе Ñтоит говорить обиженно или так, как будто вы вынуждают к решению, проÑто обозначьте, что вы неÑоглаÑны, но Ð´Ð»Ñ Ð²Ð°Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ команды гораздо важнее. ЧаÑто Ñто заÑтавит команду изменить Ñвое решение. Ð’ Ñтом Ñлучае, не заÑтавлÑйте ее Ñледовать первоначальному плану. ЕÑли найдетÑÑ Ñ‡ÐµÐ»Ð¾Ð²ÐµÐº, который не ÑоглаÑитÑÑ Ñ Ð²Ð°Ð¼Ð¸ поÑле того, как вы раÑÑмотрите проблему Ñо вÑех Ñторон, проÑто Ñкажите, что вам надо принÑть решение, и Ñто ваше решение. ЕÑли еÑть возможноÑть проверить, было ли ваше решение ошибочным или позднее окажетÑÑ, что оно ошибочно, измените его, как только Ñможете, и признайте правоту тех, кто был Ñ Ð²Ð°Ð¼Ð¸ неÑоглаÑен. -СпроÑите Ñвою команду как в группе, так и индивидуально, что по их мнению Ñоздает командный дух и делает команду Ñффективной. +СпроÑите Ñвою команду как в группе, так и индивидуально по отдельноÑти, что по их мнению Ñоздает командный дух и делает команду Ñффективной. Хвалите чаÑто, но не много. ОÑобенно хвалите тех, кто не ÑоглаÑен Ñ Ð²Ð°Ð¼Ð¸, еÑли в итоге они заÑлуживают похвалы. Хвалите публично и критикуйте наедине. Одно иÑключение: иногда прогреÑÑ Ð¸Ð»Ð¸ иÑправление ошибки Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÑ‚Ð¸Ñ‚ÑŒ без ÑƒÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð²Ð¸Ð½Ð¾Ð²Ð½Ð¸ÐºÐ° ошибки, в Ñтом Ñлучае хвалите наедине. diff --git a/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md index 1d614f5..3ef958e 100644 --- a/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md +++ b/ru/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -1,9 +1,9 @@ # Как разделÑть задачи -Брать проект по разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ делить его на индивидуальные задачи веÑело. Это Ñтоит делать на ранних Ñтапах. Иногда менеджеры Ñклонны думать, что оценку затрат можно Ñделать без учета людей, которые будут выполнÑть задачи. Ðо Ñто невозможно, так как продуктивноÑть людей очень различаетÑÑ. Человек, обладающий конкретными знаниÑми о компоненте ÑиÑтемы, также поÑтоÑнно менÑетÑÑ, и Ñто влиÑет на производительноÑть. +Брать проект по разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ делить его на индивидуальные задачи - Ñто увлекательно. Это Ñтоит делать на ранних Ñтапах. Иногда менеджеры Ñклонны думать, что оценку затрат можно Ñделать без учета людей, которые будут выполнÑть задачи. Ðо Ñто невозможно, так как продуктивноÑть людей очень различаетÑÑ. Человек, обладающий конкретными знаниÑми о компоненте ÑиÑтемы, также поÑтоÑнно менÑетÑÑ, и Ñто влиÑет на производительноÑть. -Подобно композитору, который учитывает тембр инÑтрумента, играющего партию или тренеру Ñпортивной команды, держащему в уме Ñильные Ñтороны каждого игрока, опытный руководитель не Ñможет отделить разделение проекта на задачи от членов команды, которые будут заниматьÑÑ Ñтими задачами. Это одна из причин, по которой выÑокоÑффективную команду не Ñтоит разбивать на чаÑти. +Подобно композитору, который учитывает тембр инÑтрумента, играющего партию, или тренеру Ñпортивной команды, держащему в уме Ñильные Ñтороны каждого игрока, опытный руководитель не Ñможет отделить разделение проекта на задачи от членов команды, которые будут заниматьÑÑ Ñтими задачами. Это одна из причин, по которой выÑокоÑффективную команду не Ñтоит разбивать на чаÑти. -Ð’ Ñтом еÑть Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿Ð°ÑноÑть, что люди будут Ñкучать, так как такие команды оÑнованы на Ñильных Ñторонах каждого. Ð’ Ñтом Ñлучае члены команды не улучшают Ñвои Ñлабые Ñтороны и не развивают новые навыки. Однако, ÑÐ¿ÐµÑ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‡ÐµÐ½ÑŒ Ñффективна Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти, еÑли ею не злоупотреблÑть. +Ð’ Ñтом еÑть Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿Ð°ÑноÑть, что люди начнут Ñкучать, так как такие команды оÑнованы на Ñильных Ñторонах каждого. Ð’ Ñтом Ñлучае члены команды не улучшают Ñвои Ñлабые Ñтороны и не развивают новые навыки. Однако, ÑÐ¿ÐµÑ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‡ÐµÐ½ÑŒ Ñффективна Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти, еÑли ею не злоупотреблÑть. Следующее: [Как раÑпределÑть Ñкучные заданиÑ](05-How-to-Handle-Boring-Tasks.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md index 3bfa89c..e9c6ead 100644 --- a/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md +++ b/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -1,7 +1,7 @@ # Как раÑпределÑть Ñкучные Ð·Ð°Ð´Ð°Ð½Ð¸Ñ -Иногда невозможно избежать Ñкучных задач, которые критичны Ð´Ð»Ñ ÑƒÑпеха компании или проекта. Такие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñильно подорвать дух тех, кому придетÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒÑÑ Ð¸Ð¼Ð¸. Лучше вÑего поÑтратьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ ÑпоÑоб заÑтавить компьютер выполнÑть Ñти задачи вмеÑто ваших коллаг, либо помочь им. Работа Ñ Ñ‚ÐµÑ‡ÐµÐ½Ð¸Ðµ недели над программой, выполнÑющей задачу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ займет ту же неделю, имеет то огромное преимущеÑтво, что она учит большему и иногда более повторÑема. +Иногда невозможно избежать Ñкучных задач, которые критичны Ð´Ð»Ñ ÑƒÑпеха компании или проекта. Такие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñильно подорвать дух тех, кому придетÑÑ Ð¸Ð¼Ð¸ заниматьÑÑ. Лучше вÑего поÑтратьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ ÑпоÑоб заÑтавить компьютер выполнÑть Ñти задачи вмеÑто ваших коллег, либо заÑтавить его помочь им. Работа в течение недели над программой, выполнÑющей задачу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ займет ту же неделю, имеет то огромное выгоду, что она учит большему и иногда более повторÑема. -ЕÑли ничего из Ñтого не Ñработает, извинитеÑÑŒ перед теми, кому придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñкучные задачи, но ни при каких обÑтоÑтельÑтвах не позволÑйте выполнÑть Ñти задачи в одиночку. Как минимум назначьте двоих на Ñту работу и поощрÑйте командную работу в выполнении таких задач. +ЕÑли ничего из Ñтого не Ñработает, извинитеÑÑŒ перед теми, кому придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñкучные задачи, но ни при каких обÑтоÑтельÑтвах не позволÑйте заниматьÑÑ Ð¸Ð¼Ð¸ в одиночку. Как минимум назначьте двоих на Ñту работу и поощрÑйте командную работу в выполнении таких задач. Следующее: [Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°](06-How-to-Gather-Support-for-a-Project.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md index c283c90..6141b54 100644 --- a/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md +++ b/ru/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -1,5 +1,5 @@ # Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° -Чтобы получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, Ñоздайте и раÑÑкажите вÑе предÑтавление, которое покажет его реальную ценноÑть Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ в целом. ПопытайтеÑÑŒ вовлечь других в Ñоздание вашего предÑтавлениÑ. Это даÑÑ‚ им причину поддерживать ваÑ, а вам - возможноÑть иÑпользовать их идеи. Индивидуально привлекайте ключевых людей Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ вашего проекта. Ð’Ñегда, когда возможно, показывайте, а не раÑÑказывайте. ЕÑли Ñто реально, поÑтройте прототип или макет Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½Ñтрации ваших идей. Прототип вÑегда мощное ÑредÑтво, оÑобенно Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, где он превоÑходит любое пиÑьменное опиÑание. +Чтобы получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, Ñоздайте и раÑпроÑтраните его визуальный образ, который покажет реальную ценноÑть проекта Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ в целом. ПопытайтеÑÑŒ вовлечь других в Ñоздание образа вашего проекта. Это даÑÑ‚ им причину поддерживать ваÑ, а вам - возможноÑть иÑпользовать их идеи. Индивидуально привлекайте ключевых людей Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ вашего проекта. Ð’Ñегда, когда возможно, показывайте, а не раÑÑказывайте. ЕÑли Ñто реально, поÑтройте прототип или макет Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½Ñтрации ваших идей. Прототип вÑегда мощное ÑредÑтво, оÑобенно Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, где он превоÑходит любое пиÑьменное опиÑание. Следующее: [Как развивать ÑиÑтему](07-How-to-Grow-a-System.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md index 3f62d41..6c49c31 100644 --- a/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md +++ b/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -2,22 +2,22 @@ Ð¡ÐµÐ¼Ñ Ñодержит в Ñебе идею дерева, но не имеет форму и мощь взроÑлого раÑтениÑ. Ð¡ÐµÐ¼Ñ Ð²Ñ‹Ñ€Ð°Ñтает в Ñаженец. Он ÑтановитÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ. Он вÑе больше похож на взроÑлое дерево. Дерево начичает приноÑить плоды. Ðаконец, оно умирает и Ñлужит пищей Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… организмов. -У Ð½Ð°Ñ ÐµÑть роÑкошь отноÑитьÑÑ Ðº программному обеÑпечению похожим образом. МоÑÑ‚ не похож на него. Ðе бывает моÑтов-детей, бывают недоÑтроенные моÑты. Они гораздо проще, чем программное обеÑпечение. +У Ð½Ð°Ñ ÐµÑть роÑкошь отноÑитьÑÑ Ðº программному обеÑпечению похожим образом. МоÑÑ‚ не похож на программное обеÑпечение. Ðе бывает моÑтов-детей, бывают недоÑтроенные моÑты. Они гораздо проще, чем программное обеÑпечение. Полезно думать о программном обеÑпечении как о чем-то раÑтущем, Ñто позволÑет нам добитьÑÑ ÑущеÑтвенного прогреÑÑа до того, как у Ð½Ð°Ñ ÑложитÑÑ Ð¸Ð´ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¹ мыÑленный образ того, что мы делаем. Мы можем иÑпользовать обратную ÑвÑзь от пользователей, чтобы Ñкорректировать развитие ÑиÑтемы. Ð’Ñегда полезно обрезать Ñлабые и ненужные ветки. -ПрограммиÑÑ‚ должен разработать законченную ÑиÑтемы, которую можно поÑтавлÑть и иÑпользовать. Ðо продвинутый программиÑÑ‚ должен гораздо больше. Ð’Ñ‹ должны разработать путь развитиÑ, который завершитÑÑ Ð³Ð¾Ñ‚Ð¾Ð²Ð¾Ð¹ ÑиÑтемой. Ваша работа - взÑть зародыш идеи и поÑтроить путь, который как можно плавнее приведет к оплезному продукту. +ПрограммиÑÑ‚ должен разработать законченную ÑиÑтему, которую можно поÑтавлÑть и иÑпользовать. Ðо продвинутый программиÑÑ‚ должен гораздо больше. Ð’Ñ‹ должны разработать путь развитиÑ, который завершитÑÑ Ð³Ð¾Ñ‚Ð¾Ð²Ð¾Ð¹ ÑиÑтемой. Ваша работа - взÑть зародыш идеи и поÑтроить путь, который как можно плавнее приведет к полезному продукту. -Чтобы Ñделать Ñто, вы должны визуализировать конечный результат и предÑтавить его так, чтобы ваша Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¸Ð°Ð½Ð´Ð° загорелаÑÑŒ им. Ðо кроме Ñтого вы должны раÑÑказать им без больших Ñкачков веÑÑŒ путь, который ведет от текущей точки проекта до конечной. Дерево должно жить вÑе Ñто времÑ, Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ‚ÑŒ ему умереть, а затем возрождать его. +Чтобы Ñто Ñделать, вы должны визуализировать конечный результат и предÑтавить его так, чтобы ваша Ð¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° загорелаÑÑŒ им. Ðо кроме Ñтого вы должны раÑÑказать им без больших пробелов веÑÑŒ путь, который ведет от текущей точки проекта до конечной. Дерево должно жить вÑе Ñто времÑ, Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ‚ÑŒ ему умереть, а затем возрождать его. -Этот подход отражен в Ñпиральной разработке. Этапы проекты никогда не находÑÑ‚ÑÑ Ð´Ð°Ð»ÐµÐºÐ¾ друг от друга и отмечают прогреÑÑ Ð¿Ð¾ пути проекта. Ð’ Ñверхконкурентной Ñреде бизнеÑа лучше вÑего, еÑли поÑле каждого Ñтапа программное обеÑпечение можно выпуÑтить и заработать на Ñтом денег, даже еÑли оно вÑе еще далеко от финального ÑоÑтоÑниÑ. Одна из задач программиÑта - ÑбаланÑировать немедленную отдачу от проекта Ñ Ð±ÑƒÐ´ÑƒÑ‰ÐµÐ¹, тщательно Ð²Ñ‹Ð±Ð¸Ñ€Ð°Ñ Ð¿ÑƒÑ‚ÑŒ прогреÑÑа, отраженный в его Ñтапах. +Этот подход отражен в Ñпиральной разработке. Этапы проекта никогда не находÑÑ‚ÑÑ Ð´Ð°Ð»ÐµÐºÐ¾ друг от друга и отмечают прогреÑÑ Ð¿Ð¾ пути проекта. Ð’ Ñверхконкурентной Ñреде бизнеÑа лучше вÑего, еÑли поÑле каждого Ñтапа программное обеÑпечение можно выпуÑтить и заработать на Ñтом денег, даже еÑли оно вÑе еще далеко от финального ÑоÑтоÑниÑ. Одна из задач программиÑта - ÑбаланÑировать немедленную отдачу от проекта Ñ Ð±ÑƒÐ´ÑƒÑ‰ÐµÐ¹, тщательно Ð²Ñ‹Ð±Ð¸Ñ€Ð°Ñ Ð¿ÑƒÑ‚ÑŒ прогреÑÑа, отраженный в его Ñтапах. Продвинутый программиÑÑ‚ неÑет тройную ответÑтвенноÑть за развитие программного обеÑпечение, команд и отдельных людей. Один из читателей, Роб Хаферник, приÑлал комментарий к Ñтой чаÑти, который Ñ Ð½Ðµ могу не привеÑти полноÑтью: -> Я думаю, что вы недооценили важноÑть Ñтого вопроÑа. Он каÑаетÑÑ Ð½Ðµ только ÑиÑтемы, но и алгоритмов, пользовательÑких интерфейÑов, моделей данных и так далее. При работе над большой ÑиÑтемой жизненно важно иметь измерÑемый прогреÑÑ Ð² доÑтижении промежуточных целей. Ðичто не ÑравнитÑÑ Ñ ÑƒÐ¶Ð°Ñом, когда вы доходите до конца и обнаруживаете, что вÑе Ñто проÑто не работает (поÑмотрите на недавний провал ÑиÑтемы Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð·Ð±Ð¸Ñ€Ð°Ñ‚ÐµÐ»ÐµÐ¹). Я бы пошел дальше и Ñформулировал бы Ñто как природный закон: Ð½ÐµÐ»ÑŒÐ·Ñ Ñ Ð»Ð¸Ñта поÑтроить большую и Ñложную ÑиÑтему. Ее можно только развить из небольшой в Ñложную через Ñерию поÑледовательных шагов. +> Я думаю, что вы недооценили важноÑть Ñтого вопроÑа. Он каÑаетÑÑ Ð½Ðµ только ÑиÑтемы, но и алгоритмов, пользовательÑких интерфейÑов, моделей данных и так далее. При работе над большой ÑиÑтемой жизненно важно иметь измерÑемый прогреÑÑ Ð² доÑтижении промежуточных целей. Ðичто не ÑравнитÑÑ Ñ ÑƒÐ¶Ð°Ñом, когда вы доходите до конца и обнаруживаете, что вÑе Ñто проÑто не работает. Я бы пошел дальше и Ñформулировал бы Ñто как природный закон: Ð½ÐµÐ»ÑŒÐ·Ñ Ñ Ð»Ð¸Ñта поÑтроить большую и Ñложную ÑиÑтему. Ее можно только развить из небольшой в Ñложную через Ñерию поÑледовательных шагов. -Ðа Ñто можно только ответить "Именно так!" +Ðа Ñто можно только ответить "ИÑтинно так!" Следующее: [Как качеÑтвенно взаимодейÑтвовать](08-How-to-Communicate-Well.md) diff --git a/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index 0338ac9..01708c6 100644 --- a/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -1,11 +1,11 @@ # Как качеÑтвенно взаимодейÑтвовать -Чтобы качеÑтвенно взаимодейÑтвовать, вам Ñтоит оÑознать, наÑколько Ñто трудно. Это Ñам по Ñебе отдельный навык. Он уÑложнÑетÑÑ Ñ‚ÐµÐ¼, что люди, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ вам приходитÑÑ Ð¾Ð±Ñ‰Ð°Ñ‚ÑŒÑÑ, неÑовершенны. Они не будут прилагать уÑилий, чтобы понÑть ваÑ. Они плохо выражают Ñвои мыÑли и плохо пишут. Ои чаÑто перегружены работой или им Ñкучно, либо как минимум больше ÑоÑредоточены на Ñвоей чаÑти работы, чем на глобальных проблемах, которые вы, возможно, решаете. Одно из преимущеÑтв чаÑтных занÑтий и практики пиÑьма, публичных выÑтуплений и ÑÐ»ÑƒÑˆÐ°Ð½Ð¸Ñ ÑоÑтоит в том, что еÑли вы Ñтанете лучше во вÑем Ñтом, вы Ñможете быÑтрее увидеть, где лежит проблема взаимодейÑÑ‚Ð²Ð¸Ñ Ð¸ как ее иÑправить. +Чтобы качеÑтвенно взаимодейÑтвовать, вам Ñтоит оÑознать, наÑколько Ñто трудно. Это Ñам по Ñебе отдельный навык. Он уÑложнÑетÑÑ Ñ‚ÐµÐ¼, что люди, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ вам приходитÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹Ñтвовать, неÑовершенны. Они не будут прилагать уÑилий, чтобы понÑть ваÑ. Они плохо выражают Ñвои мыÑли и плохо пишут. Они чаÑто перегружены работой, либо им Ñкучно, либо как минимум они больше ÑоÑредоточены на Ñвоей чаÑти работы, чем на глобальных проблемах, которые вы, возможно, решаете. Одно из преимущеÑтв чаÑтных занÑтий и практики пиÑьма, публичных выÑтуплений и ÑÐ»ÑƒÑˆÐ°Ð½Ð¸Ñ ÑоÑтоит в том, что еÑли вы Ñтанете лучше во вÑем Ñтом, вы Ñможете быÑтрее увидеть, где лежит проблема взаимодейÑÑ‚Ð²Ð¸Ñ Ð¸ как ее иÑправить. ПрограммиÑÑ‚ - Ñто Ñоциальное ÑущеÑтво, и его выживание завиÑит от коммуникации Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹. Продвинутый программиÑÑ‚ - Ñто Ñоциальное ÑущеÑтво, чье удовлетворение завиÑит от коммуникации Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ за пределами команды. -Программм=иÑты приноÑÑÑ‚ порÑдок в хаоÑ. Один из интереÑных ÑпоÑобов делать Ñто - внеÑти какое-нибудь предложение за пределами вашей команды. Это можно Ñделать в виде черновика или уÑтно. Такой подход имеет огромное преимущеÑтво в том, что уÑтанавливает рамки обÑуждениÑ. Он также Ñтавить Ð²Ð°Ñ Ð² позицию критикуемого и может привеÑти к отвержению и пренебрежению. Продвиутый программиÑÑ‚ должен быть готов принÑть вÑе Ñто, ведь у него еÑть уникальные возможноÑти, а значит, и ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть. Предприниматели, которые не ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, нуждаютÑÑ Ð² том, чтобы программиÑты проÑвлÑли инициативу хоть в каком-то виде. ПрограммиÑты - Ñто та чаÑть моÑта между идеÑми и дейÑтвительноÑтью, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ð¸Ñ€Ð°ÐµÑ‚ÑÑ Ð½Ð° поÑледнее. +ПрограммиÑты приноÑÑÑ‚ порÑдок в хаоÑ. Один из интереÑных ÑпоÑобов делать Ñто - внеÑти какое-нибудь предложение за пределами вашей команды. Это можно Ñделать в виде черновика или уÑтно. Такой подход имеет огромное преимущеÑтво в том, что очерчивает рамки диÑкуÑÑии. Он также Ñтавит Ð²Ð°Ñ Ð² позицию критикуемого и может привеÑти к отвержению и пренебрежению. Продвинутый программиÑÑ‚ должен быть готов к Ñтому, ведь у него еÑть уникальные возможноÑти, а значит, и ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть. Предприниматели, которые не ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, нуждаютÑÑ Ð² том, чтобы программиÑты проÑвлÑли инициативу хоть в каком-то виде. ПрограммиÑты - Ñто та чаÑть моÑта между идеÑми и дейÑтвительноÑтью, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ð¸Ñ€Ð°ÐµÑ‚ÑÑ Ð½Ð° поÑледнее. -Я вÑе еще не оÑвоил до конца навык взаимодейÑтвиÑ, но что Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ делать, можно выразить как четырехÑторонний подход. ПоÑле того, как Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð¶Ñƒ Ñвои идеи в порÑдок и полноÑтью готов, Ñ ÑтараюÑÑŒ Ñобощить о них уÑтно, вручаю людÑм черновой наброÑок (на бумаге или в Ñлектронном виде), показываю демо и затем терпеливо повторÑÑŽ процеÑÑ. Я думаю, что чаÑто мы недоÑтаточно терпеливы Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñложного общениÑ. Ðе Ñтоит раÑÑтраиватьÑÑ, еÑли ваши идеи не были Ñразу принÑты. ЕÑли вы вложили много уÑилий в их подготовку, никто не будет думать о Ð²Ð°Ñ Ð¿Ð»Ð¾Ñ…Ð¾ из-за отказа. +Я вÑе еще не оÑвоил до конца навык взаимодейÑтвиÑ, но что Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ делать, можно выразить как четырехÑторонний подход. ПоÑле того, как Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð¶Ñƒ Ñвои идеи в порÑдок и полноÑтью готов, Ñ ÑтараюÑÑŒ Ñообщить о них уÑтно, вручаю нужным людÑм черновой наброÑок (на бумаге или в Ñлектронном виде), показываю демо и затем терпеливо повторÑÑŽ процеÑÑ. Я думаю, что чаÑто мы недоÑтаточно терпеливы Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñложного общениÑ. Ðе Ñтоит раÑÑтраиватьÑÑ, еÑли ваши идеи не были принÑты Ñразу. ЕÑли вы вложили много уÑилий в их подготовку, никто не будет думать о Ð²Ð°Ñ Ð¿Ð»Ð¾Ñ…Ð¾ из-за отказа. Следующее: [Как Ñообщать неприÑтное](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md b/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md index d3ade2e..0ae6d52 100644 --- a/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md +++ b/ru/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md @@ -2,8 +2,8 @@ ЧаÑто вам придетÑÑ Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÑŒ людÑм вещи, которые им не понравÑÑ‚ÑÑ. Помните, что у Ð²Ð°Ñ ÐµÑть на то причина. Даже еÑли Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹ ничего Ð½ÐµÐ»ÑŒÐ·Ñ Ñделать, вы Ñообщаете о ней как можно раньше, чтобы вÑе были информированы о ней. -Лучший ÑпоÑоб Ñообщить о проблеме - Ñто тут же предложить ÑпоÑоб ее решениÑ. Второй хороший ÑпоÑоб - Ñто попроÑить о помощи в ее решении. ЕÑли еÑть вероÑтноÑть, что вам не поверÑÑ‚, Ñоберите доказательÑтва Ñвоей правоты. +Лучший ÑпоÑоб Ñообщить о проблеме - Ñто тут же предложить ÑпоÑоб ее решениÑ. Второй хороший ÑпоÑоб - Ñто попроÑить о помощи в ее решении. ЕÑли еÑть опаÑноÑть, что вам не поверÑÑ‚, Ñоберите доказательÑтва Ñвоей правоты. -Одна из Ñамых неприÑтных и чаÑтых фраз, которую вам придетÑÑ Ð¿Ñ€Ð¾Ð¸Ð·Ð½Ð¾Ñить, Ñто "График придетÑÑ Ñдвинуть". Сознательный программиÑÑ‚ терпеть не может произноÑить ее, но должен делать Ñто как можно раньше. Ðет ничего хуже, чем откладывать решение, когда ÑрываетÑÑ Ñтап проекта. Даже еÑли решение заключаетÑÑ Ð² информировании о проблеме. Когда такое проиходит, лучше вÑего Ñказать Ñто от лица команды. Вам понадобитÑÑ Ð¼Ð½ÐµÐ½Ð¸Ðµ вашей команды о проблеме и том, как ее решить, и учаÑтие команды в поÑледÑтвиÑÑ… проблемы вмеÑте Ñ Ð²Ð°Ð¼Ð¸. +Одна из Ñамых неприÑтных и чаÑтых фраз, которую вам придетÑÑ Ð¿Ñ€Ð¾Ð¸Ð·Ð½Ð¾Ñить, Ñто "График придетÑÑ Ñдвинуть". Сознательный программиÑÑ‚ терпеть не может произноÑить ее, но должен делать Ñто как можно раньше. Ðет ничего хуже, чем откладывать решение, когда ÑрываетÑÑ Ñтап проекта. Даже еÑли решение заключаетÑÑ Ð² информировании о проблеме. Когда такое проиÑходит, лучше вÑего Ñказать Ñто от лица команды. Вам понадобитÑÑ Ð¼Ð½ÐµÐ½Ð¸Ðµ вашей команды о проблеме и том, как ее решить, а также учаÑтие команды в поÑледÑтвиÑÑ… проблемы вмеÑте Ñ Ð²Ð°Ð¼Ð¸. Следующее: [Как ÑправлÑтьÑÑ Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ñкими мифами](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md index 4475362..78bc895 100644 --- a/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md +++ b/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -4,10 +4,10 @@ - Больше документации вÑегда лучше. (Они хотÑÑ‚ Ñтого, но не хотÑÑ‚, чтобы вы тратили на Ñто Ñвое времÑ) - ПрограммиÑтов можно Ñравнивать. (ПрограммиÑты очень Ñильно отличаютÑÑ Ð´Ñ€ÑƒÐ³ от друга) -- Ð’ проект можно добавить реÑурÑов, чтобы уÑкорить его. (ÐšÐ¾Ð¼Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ людьми в проекте почти вÑегда ведет к увеличению проекта) +- Ð’ проект можно добавить реÑурÑов, чтобы уÑкорить его. (ÐšÐ¾Ð¼Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ людьми в проекте почти вÑегда Ñкорее ведет к замедлению проекта, чем к уÑкорению) - Разработку программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ надежно оценить по времени и затратам. (Это невозможно даже теоретичеÑки) - ПроизводительноÑть программиÑтов можно измерить в рамках одной проÑтой метрики, например, в Ñтроках кода. (ЕÑли качеÑтво в емкоÑти, то избыточные Ñтроки кода Ñто плохо, а не хорошо) -ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть, вы можете попытатьÑÑ Ð¾Ð±ÑŠÑÑнить Ñто, но не раÑÑтраивайтеÑÑŒ, еÑли у Ð²Ð°Ñ Ð½Ðµ получитÑÑ. Ðе портьте Ñебе репутацию воинÑтвенным противоÑтоÑнием Ñтим мифам. Каждый из них поддерживает идею менеджера о том, что у них еÑть реальный контроль над тем, что проиÑходит в проекте. Ðо правда в том, что менеджеры только упрощают процеÑÑ, еÑли они хороши, и препÑÑ‚Ñтвуют, еÑли нет. +ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть, вы можете попытатьÑÑ Ð¾Ð±ÑŠÑÑнить Ñти мифы, но не раÑÑтраивайтеÑÑŒ, еÑли у Ð²Ð°Ñ Ð½Ðµ получитÑÑ. Ðе портьте Ñебе репутацию воинÑтвенным противоÑтоÑнием Ñтим мифам. Каждый из них поддерживает идею менеджеров о том, что у них еÑть реальный контроль над тем, что проиÑходит в проекте. Ðо правда в том, что менеджеры только упрощают процеÑÑ, еÑли они хороши, и мешают ему в противном Ñлучае. Следующее: [Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом](11-How-to-Deal-with-Organizational-Chaos.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md index b914ddc..b423ba2 100644 --- a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md +++ b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -1,10 +1,10 @@ # Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом -Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организционный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, выход на биржу, маÑÑовый наем Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. +Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организционный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, размещение компании на бирже, маÑÑовый наем Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. > ПрограммиÑты могут Ñоздавать и поддерживать продукт. -Ðеинженеры могут руководить людьми, но в типичной компании по разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¸ не могут ничего Ñоздать или поддерживать без инженеров. Точно так же типичные инженеры не Ñмогут продать продукт или Ñффективно веÑти бизнеÑ. Эта ÑуперÑпоÑобноÑть защищает почти от вÑех проблем, ÑвÑзанных Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼ организационным хаоÑом. Пока она Ñ Ð²Ð°Ð¼Ð¸, вам Ñледует игнорировать полноÑтью Ñ…Ð°Ð¾Ñ Ð¸ продолжать делать Ñвою работы, как будто ничего не проиÑходит. ВаÑ, конечно, могут уволить, но еÑли Ñто ÑлучитÑÑ, то Ñкорее вÑего вы найдете новую работу Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñвоей ÑуперÑпоÑобноÑти. Ðо чаще вÑего кто-нибудь измученный ÑтреÑÑом придет к вам и прикажет делать что-нибудь глупое. ЕÑли вы Ñовершенно уверены, что Ñто глупо, то лучше вÑего улыбатьÑÑ Ð¸ кивать, пока Ñтот человек не уйдет. Рзатем продолжать делать то, что вы Ñчитаете правильным Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸. +Ðеинженеры могут руководить людьми, но в типичной компании по разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¸ не могут ничего Ñоздать или поддерживать без инженеров. Точно так же типичные инженеры не Ñмогут продать продукт или Ñффективно веÑти бизнеÑ. Эта ÑуперÑпоÑобноÑть защищает почти от вÑех проблем, ÑвÑзанных Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼ организационным хаоÑом. Пока она Ñ Ð²Ð°Ð¼Ð¸, вам Ñледует игнорировать полноÑтью Ñ…Ð°Ð¾Ñ Ð¸ продолжать делать Ñвою работу, как будто ничего не проиÑходит. ВаÑ, конечно, могут уволить, но еÑли Ñто ÑлучитÑÑ, то Ñкорее вÑего вы найдете новую работу Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñвоей ÑуперÑпоÑобноÑти. Ðо чаще вÑего кто-нибудь измученный ÑтреÑÑом придет к вам и прикажет делать что-нибудь глупое. ЕÑли вы Ñовершенно уверены, что Ñто глупо, то лучше вÑего улыбатьÑÑ Ð¸ кивать, пока Ñтот человек не уйдет. Рзатем продолжать делать то, что вы Ñчитаете правильным Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸. ЕÑли вы лидер, Ñкажите Ñвоей команде делать то же Ñамое и игнорировать вÑе, что ей будут говорить оÑтальные. Такое поведение наиболее выгодно Ð´Ð»Ñ Ð²Ð°Ñ Ð»Ð¸Ñ‡Ð½Ð¾ и Ð´Ð»Ñ Ð²Ñей компании или проекта. diff --git a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index b8db6aa..717992f 100644 --- a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -1,11 +1,11 @@ # Как иÑпользовать вÑтроенные Ñзыки -Ð’Ñтраивание Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑиÑтему обладает почти ÑротичеÑким притÑжением Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта. Это Ñамое творчеÑкое, что можно Ñделать. Это делает ÑиÑтемы невероÑтно мощной и позволит вам иÑпользовать ее Ñамые творчеÑкие возможноÑти. Это Ñделает ÑиÑтему вашим другом. +Ð’Ñтраивание Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑиÑтему обладает почти ÑротичеÑким притÑжением Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта. Это одно из Ñамых творчеÑких Ñвершений, которые он может Ñделать. Ð’Ñтроенный Ñзык делает ÑиÑтему невероÑтно мощной и позволит вам иÑпользовать ее Ñамые творчеÑкие возможноÑти. Это превратит ÑиÑтему в вашего друга. У лучших теÑтовых редакторов еÑть вÑтроенные Ñзыки программированиÑ. Это можно иÑпользовать в той мере, в какой Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ овладеть Ñтими Ñзыками. Конечно, можно Ñделать иÑпользование вÑтроенного Ñзыка необÑзательным, как Ñто делаетÑÑ Ð² текÑтовых редакторах, так что ими пользуютÑÑ Ð¾Ð¿Ñ‹Ñ‚Ð½Ñ‹Ðµ пользователи, а оÑтальным они и не нужны. -И Ñ, и множеÑтво других программиÑтов попадали в ловушку ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñтроенных Ñзыков Ñо Ñпециальным назначением. Я попадалÑÑ Ð½Ð° Ñто дважды. Ð’ мире уже ÑущеÑтвует множеÑтво Ñзыков, которые Ñпроетированы Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы их вÑтраивать в ÑиÑтемы. Подумайте дважды, прежде чем Ñоздавать еще один. +Я и многие другие программиÑты попадали в ловушку ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñтроенных Ñзыков Ñо Ñпециальным назначением. Я попадалÑÑ Ð½Ð° Ñто дважды. Ð’ мире уже ÑущеÑтвует множеÑтво Ñзыков, которые Ñпроектированы Ñпециально Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ñ… целей. Подумайте дважды, прежде чем Ñоздавать еще один. -ВопроÑ, который Ñтоит задать Ñебе перед вÑтраиванием Ñзыка, звучит так: входит ли иÑпользование таких Ñзыков в культуру моих пользователей или нет? ЕÑли ваша Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит иÑключительно из непрограммиÑтов, то наÑколько поможет внедрение Ñзыка в ÑиÑтему? ЕÑли Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит из программиÑтов, то не предпочтут ли они четкое API? И какой Ñзык вы ÑобираетеÑÑŒ вÑтраивать? ПрограммиÑты не очень любÑÑ‚ изучать новый Ñзык, еÑли он применÑетÑÑ ÑƒÐ·ÐºÐ¾. Ðо еÑли он похож на то, Ñ Ñ‡ÐµÐ¼ они уже работают, то они быÑтро оÑвоÑÑ‚ его. Создавать новый Ñзык Ñто огромное удовольÑтвие и радоÑть. Ðо мы не должны позволÑть Ñтой радоÑти оÑлеплÑть Ð½Ð°Ñ Ð¸ затмевать потребноÑти пользователÑ. ЕÑли только у Ð²Ð°Ñ Ð½Ðµ по-наÑтоÑщему оригинальные запроÑÑ‹ и идеи, то почему бы не иÑпользовать уже ÑущеÑтвующий Ñзык, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ знакома Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‡Ð°Ñть ваших пользователей? +ВопроÑ, который Ñтоит задать Ñебе перед вÑтраиванием Ñзыка, звучит так: входит ли иÑпользование таких Ñзыков в культуру моих пользователей или нет? ЕÑли ваша Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит иÑключительно из непрограммиÑтов, то наÑколько поможет внедрение Ñзыка в ÑиÑтему? ЕÑли Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит из программиÑтов, то не предпочтут ли они API? И какой Ñзык вы ÑобираетеÑÑŒ вÑтраивать? ПрограммиÑты не очень любÑÑ‚ изучать новый Ñзык, еÑли у него узкое применение. Ðо еÑли он похож на то, Ñ Ñ‡ÐµÐ¼ они уже работают, то они быÑтро оÑвоÑÑ‚ его. Создавать новый Ñзык Ñто огромное удовольÑтвие и радоÑть. Ðо мы не должны позволÑть Ñтой радоÑти оÑлеплÑть Ð½Ð°Ñ Ð¸ затмевать потребноÑти пользователÑ. ЕÑли только у Ð²Ð°Ñ Ð½Ðµ по-наÑтоÑщему оригинальные запроÑÑ‹ и идеи, то почему бы не иÑпользовать уже ÑущеÑтвующий Ñзык, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ знакома Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‡Ð°Ñть ваших пользователей? Следующее: [Выбор Ñзыка программированиÑ](03-Choosing-Languages.md) diff --git a/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md index 87cda5a..e7efda5 100644 --- a/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md +++ b/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -1,15 +1,19 @@ # Выбор Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -ПрограммиÑÑ‚-одиночка, который любит Ñвою работу, может позволить Ñебе выбирать Ñзык, лучше вÑего подходÑщий Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸. Ðо у большинÑтва работающих программиÑтов небольшой выбор над Ñзыком, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ они работают. Обычно, за них Ñто решают руководители, которые больше принимают политичеÑкое, а не технологичеÑкое решение. ЧаÑто руководителÑм не хватает ÑмелоÑти иÑпользовать нетрадиционный инÑтрумент, даже еÑли они знают, иногда по ÑобÑтвенному опыту, что менее раÑпроÑтраненный инÑтрумент лучше. Ð’ других ÑлучаÑÑ… преимущеÑтво того, что Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть команды и иногда более широкого общеÑтва владеет инÑтрументом, иÑключает его выбор Ñо Ñтороны отдельного программиÑта. ЧаÑто менеджеры руководÑтвуютÑÑ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾Ñтью нанимать программиÑтов Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼ Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼ Ñзыком. Вне Ñомнений они делают то, что Ñчитают лучшим Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или проекта, и их Ñтоит уважать за Ñто. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитает Ñтот подход одним из Ñамых беÑполезных и ошибочных, которые можно только вÑтретить. +ПрограммиÑÑ‚-одиночка, любÑщий Ñвою работу, может позволить Ñебе выбирать Ñзык, который лучше вÑего подходит Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸. Ðо у большинÑтва работающих программиÑтов небольшой выбор Ñзыка, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ они работают. Обычно за них Ñто решают руководители, которые больше принимают политичеÑкое, а не технологичеÑкое решение. ЧаÑто руководителÑм не хватает ÑмелоÑти иÑпользовать нетрадиционный инÑтрумент, даже еÑли они знают, иногда по ÑобÑтвенному опыту, что менее раÑпроÑтраненный инÑтрумент лучше. Ð’ других ÑлучаÑÑ… преимущеÑтво того, что Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть команды и иногда более широкого общеÑтва владеет инÑтрументом, делает невозможным выбор иного Ñзыка Ñо Ñтороны отдельного программиÑта. ЧаÑто менеджеры руководÑтвуютÑÑ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾Ñтью нанимать программиÑтов Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼ Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼ Ñзыком. Вне Ñомнений они делают то, что Ñчитают лучшим Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или проекта, и их Ñтоит уважать за Ñто. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитает Ñтот подход одним из Ñамых беÑполезных и ошибочных, которые можно только вÑтретить. -Ðо конечно, вÑе не так однозначно. Даже еÑли оÑновной Ñзык обÑзателен, и вы не можете изменить его, чаÑто ÑлучаетÑÑ, что некоторые инÑтрументы или Ñторонние программы можно и нужно напиÑать на других Ñзыках. ЕÑли Ñзык должен быть вÑтроен в ÑиÑтему (и вам вÑегда Ñледует раÑÑмотреть такую возможноÑть), то его выбор во многом будет завиÑеть от пользователей ÑиÑтемы. Из таких Ñлучаев Ñледует извлекать преимущеÑтво и выбирать лучший Ñзык Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или проекта. Заодно Ñто делает работу намного интереÑнее. +Ðо конечно, вÑе не так однозначно. Даже еÑли оÑновной Ñзык обÑзателен, и вы не можете изменить его, чаÑто ÑлучаетÑÑ, что некоторые инÑтрументы или Ñторонние программы можно и нужно напиÑать на других Ñзыках. ЕÑли Ñзык должен быть вÑтроен в ÑиÑтему (и вам вÑегда Ñледует раÑÑмотреть такую возможноÑть), то его выбор во многом будет завиÑеть от пользователей ÑиÑтемы. Из таких Ñлучаев Ñледует извлекать выгоду и выбирать лучший Ñзык Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или проекта. Заодно Ñто делает работу намного интереÑнее. -Языки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² дейÑтвительноÑти Ñтоит называть нотациÑми, поÑкольку выучить один из них не так трудно, как еÑтеÑтвенный Ñзык. Ð”Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… или непоÑвÑщенных "выучить новый Ñзык программированиÑ" кажетÑÑ Ñложной задачей, но поÑле трех Ñзыков Ñто вÑего лишь Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð·Ð½Ð°ÐºÐ¾Ð¼Ñтва Ñ Ð´Ð¾Ñтупными библиотеками. Ðкоторые Ñклонны думать о большой ÑиÑтеме, в которой компоненты напиÑаны на трех-четырех Ñзыках, как о беÑпорÑдочной ÑолÑнке, но Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÑŽ, что Ñ‚Ð°ÐºÐ°Ñ ÑиÑтема во Ñногих ÑлучаÑÑ… превоÑходит ÑиÑтему, напиÑанную на одном Ñзыке: +Языки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² дейÑтвительноÑти Ñтоит называть нотациÑми, поÑкольку выучить один из них не так трудно, как еÑтеÑтвенный Ñзык. Ð”Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… или непоÑвÑщенных "выучить новый Ñзык программированиÑ" кажетÑÑ Ñложной задачей, но поÑле трех Ñзыков Ñто вÑего лишь Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð·Ð½Ð°ÐºÐ¾Ð¼Ñтва Ñ Ð´Ð¾Ñтупными библиотеками. Ðекоторые Ñклонны думать о большой ÑиÑтеме, в которой компоненты напиÑаны на трех-четырех Ñзыках, как о беÑпорÑдочной ÑолÑнке, но Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÑŽ, что Ñ‚Ð°ÐºÐ°Ñ ÑиÑтема во многих ÑлучаÑÑ… превоÑходит ÑиÑтему, напиÑанную на одном Ñзыке: -- Между компонентами, напиÑанными на разных нотациÑÑ…, нет теÑной ÑвÑзи, они лучше изолированы друг от друга (Ñ…Ð¾Ñ‚Ñ Ð¾Ð½Ð¸ могут иметь не ÑовÑем понÑтные интерфейÑÑ‹) -- Ð’Ñ‹ можете легко внедрить новый Ñзык или платформу, перепиÑав индивидуально каждый компонент +- Между компонентами, напиÑанными на разных Ñзыках, нет теÑной ÑвÑзи, они лучше изолированы друг от друга (Ñ…Ð¾Ñ‚Ñ Ð¾Ð½Ð¸ могут иметь не ÑовÑем понÑтные интерфейÑÑ‹) +- Ð’Ñ‹ можете легко внедрить новый Ñзык или платформу, перепиÑав индивидуально по очереди каждый компонент - Один Ñзык может не подходить Ð´Ð»Ñ Ð²Ñех задач ÑиÑтемы. Ð˜Ð¼ÐµÑ Ð½ÐµÑколько Ñзыков Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð², вы можете выбирать наиболее подходÑщий Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¹ задачи Ðекоторые из Ñтих преимущеÑтв чиÑто пÑихологичеÑкие, но пÑÐ¸Ñ…Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñ‚Ð¾Ð¶Ðµ важна. Ð’ конце концов, издержки Ñзыковой тирании перевешивают любые преимущеÑтва, которые она дает. +<<<<<<< HEAD +Следующее: [Правильные компромиÑÑÑ‹. Как ÑправлÑтьÑÑ Ð² давлением графика](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) +======= Следующее: [Ðахождение компромиÑÑов. Как ÑправлÑтьÑÑ Ð² давлением графика](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) +>>>>>>> 86a634dfe293c0eb66dc413384b0fe7cb1306ea3 diff --git a/ru/5-Bibliography.md b/ru/5-Bibliography.md index 5736f6e..a04fc94 100644 --- a/ru/5-Bibliography.md +++ b/ru/5-Bibliography.md @@ -18,7 +18,7 @@ ## Сайты -[PGSite] Paul Graham. 2002. Articles on his website: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). All of them, but especially "Beating the Averages". +[PGSite] Paul Graham. 2002. Статьи на его вебÑайте: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). Рекомендую вÑе Ñтатьи, оÑобенно "Beating the Averages". [Hacker] Eric S. Raymond. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). diff --git a/ru/6-History.md b/ru/6-History.md index c99fa25..165bf7a 100644 --- a/ru/6-History.md +++ b/ru/6-History.md @@ -1,47 +1,43 @@ # Приложение B - ИÑÑ‚Ð¾Ñ€Ð¸Ñ [//]: # (Version:1.0.0) -## Move to Github +## Переезд на Github -This essay has been created as a repository on Github so that it can be easily shared, updated and improved. It was copied from [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie). It was moved to Github in January 2016. +Это ÑÑÑе было перемещено в репозиторий Gihub Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ проÑтого раÑпроÑтранениÑ, обновлени и улучшениÑ. Оно было Ñкопировано [Braydie Grove](https://github.com/braydie) Ñ [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm). ЭÑÑе переехало на Github в Ñнваре 2016 года. -## Request for Feedback or Extension +## ПроÑьба об обратной ÑвÑзи и дополнениÑÑ… -Please send me any comments you may have on this essay. I consider all suggestions, many of which have already improved this essay. +ПожалуйÑта, приÑылайте любые комментарии, которые у Ð²Ð°Ñ ÐµÑть по Ñтому ÑÑÑе. Я раÑÑматриваю вÑе предложениÑ, многие из них уже внеÑли Ñвой вклад в улучшение ÑÑÑе. -I have placed this essay under the GNU Free Documentation License. This license is not specifically designed for essays. Essays are usually intended to be coherent and convincing arguments that are written from a single point of view in a single voice. I hope this essay is a short and pleasant read. +Я размеÑтил ÑÑÑе под GNU Free Documentation License. Эта Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð½Ðµ предназначена Ñпециально Ð´Ð»Ñ ÑÑÑе. Они обычно предÑтавлÑÑŽÑ‚ Ñобой поÑледовательные и убедительные тезиÑÑ‹, изложенные Ñ Ð¾Ð´Ð½Ð¾Ð¹ точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð² едином Ñтиле. Я надеюÑÑŒ, что Ñто ÑÑÑе будет коротким и приÑтным чтением. -I also hope that it is instructive. Although not a textbook, it is broken into many small sections to which new sections can be freely added. If so inclined, you are encouraged to expand upon this essay as you see fit, subject to the provisions of the License. +Я также надеюÑÑŒ, что оно поучительным. Хоть Ñто и не учебник, Ñ Ñ€Ð°Ð·Ð±Ð¸Ð» его на множеÑтво маленьких разделов, к которым можно легко добавлÑть новые. ЕÑли у Ð²Ð°Ñ ÐµÑть желание, вы можете раÑширить Ñто ÑÑÑе по Ñвоему уÑмотрению в ÑоответÑтвии Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÑми лицензии. -It may be arrogance to imagine that this document is worthy of extension; but hope springs eternal. I would be joyous if it were extended in the following ways: +Возможно, ÑамонадеÑнно полагать, что документ доÑтоин раÑширениÑ, но надежда вечна. Я был бы ÑчаÑтлив, еÑли бы он был бы раÑширен Ñледующим образом: -The addition of a comprehensive reading list to each section, +- Добавление полного ÑпиÑка литературы к каждому разделу +- Добавление новых и лучших разделов +- Переводы на другие Ñзыки, даже еÑли только на оÑнове подразделов +- Критика или поÑтрочные комментарии +- ВозможноÑть преобразовывать в другие форматы, такие как PALM и более Ñовершенный HTML -The addition of more and better sections, +ЕÑли вы Ñообщите мне о Ñвоей работе, Ñ Ñ€Ð°ÑÑмотрю ее и, возможно, включу в поÑледующие верÑии в ÑоответÑтвии Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми лицензии. Конечно, вы можете Ñоздать Ñвою ÑобÑтвенную верÑию Ñтого документа без моего ведома, как Ñто разъÑÑнÑетÑÑ Ð² лицензии. -Translation into other languages, even if only on a subsection-by-subsection basis, and/or +СпаÑибо. -Criticism or commentary in-lined into the text. +Роберт Л. Рид -The ability to build into different formats, such as palm formats and better HTML. +## ÐžÑ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ -If you inform me of your work, I will consider it and may include it in subsequent versions that I produce, subject to the provisions of the License. You may of course produce your own versions of this document without my knowledge, as explained in the License. +ÐžÑ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтого документа была начата Робртом Л. Ридом в 2000 году и впервые опубликована в Ñлектронном вида в Samizdat Press(http://Samizdat.mines.edu) в 2002 году. Он поÑвÑщен программиÑтам Hire.com. -Thank you. +ПоÑле того, как ÑÑ‚Ð°Ñ‚ÑŒÑ Ð±Ñ‹Ð»Ð° упомÑнута на Slashdot в 2003 году, около 75 человек приÑлали мне пиÑьма Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми и найденными ошибками. Я ценю помощь и вклад каждого из них. Было немало повторов, но Ñти люди внеÑли значимые Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ первые заметили ошибки, которые Ñ Ð¿Ð¾Ð·Ð¶Ðµ иÑправил: Морган МакГуайр, ДÑвид МейÑон, Том Мортел, ninja Programmer на Slashdot, Бен Верк, Роб Хаферник, Марк Хоув, Питер Парейт, Брайан ГрейÑон, Зед Ð. Шоу, Стив, Бенц, МакÑим Йоффе, Эндрю Ву, ДÑвид Джецке и Том Коркоран. -Robert L. Read +Ðаконец, Ñ Ñ…Ð¾Ñ‚ÐµÐ» бы поблагодарить КриÑтину Валлери, Ñ‡ÑŒÑ Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¸ вычитка ÑущеÑтвенно улучшили второй черновик, и УÑйна Ðллена, который побудил мне начать Ñто ÑÑÑе. -## Original Version +## Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð° -The original version of this document was begun by Robert L. Read in the year 2000 and first published electronically at Samizdat Press(http://Samizdat.mines.edu) in 2002. It is dedicated to the programmers of Hire.com. +Роберт Л. Рид живет в ОÑтине, ТехаÑ, Ñ Ð¶ÐµÐ½Ð¾Ð¹ и Ð´Ð²ÑƒÐ¼Ñ Ð´ÐµÑ‚ÑŒÐ¼Ð¸. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð½ работает главным инженером в Hire.com, где он работает поÑледние четыре года. До Ñтого он оÑновал 4R Technology, разработавшую инÑтрумент ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ°Ñ‡ÐµÑтва Ð´Ð»Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð° изображений на оÑнове Ñканнера в индуÑтрии производÑтва бумаги. -After this article was mentioned on Slashdot in 2003, about 75 people sent me email with suggestions and errata. I appreciate them all. There was a lot of duplication, but the following people either made major suggestions or were the first to find a bug that I fixed: Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, and Tom Corcoran. +Роберт получил ученую Ñтепень PhD в универÑитете ТехаÑа в ОÑтине в 1995 году в облаÑти информатики, ÑвÑзанной Ñ Ñ‚ÐµÐ¾Ñ€Ð¸ÐµÐ¹ баз данных. Ð’ 1987 году он получил Ñтепень бакалавра информатики в универÑитете РайÑа. Он работает программиÑтом Ñ 16 лет. -Finally I would like to thank Christina Vallery, whose editing and proofreading greatly improved the second draft, and Wayne Allen, who encouraged me to initiate this. - -## Original Author's Bio - -Robert L. Read lives in Austin, Texas, with his wife and two children. He is currently a Principal Engineer at Hire.com, where he has worked for four years. Prior to that he founded 4R Technology, which made a scanner-based image analysis quality control tool for the paper industry. - -Rob received a PhD from the University of Texas at Austin in 1995 in Computer Science related to database theory. In 1987 he received a BA in Computer Science from Rice University. He has been a paid programmer since the age of 16. - -Next [License](LICENSE.md) +Следующее: [ЛицензиÑ](LICENSE.md) diff --git a/ru/GLOSSARY.md b/ru/GLOSSARY.md index 0b1833e..02549ed 100644 --- a/ru/GLOSSARY.md +++ b/ru/GLOSSARY.md @@ -2,11 +2,7 @@ [//]: # (Version:1.0.0) Ð’ данном глоÑÑарии Ñобраны термирны, иÑпользующиеÑÑ Ð² ÑÑÑе. Термины необÑзательно имеют Ñтандартное Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва людей значение. Eric S. Raymond Ñобрал маÑÑивный и информативный глоÑÑарий[HackerDict], оценив малую чаÑть которого, можно Ñ ÑƒÐ´Ð¾Ð²Ð¾Ð»ÑŒÑтвием прочеÑть от корки до корки, как бы Ñто Ñтранно ни звучало. -### unk-unk - -Жаргон Ð´Ð»Ñ "неизвеÑтное-неизвеÑтное". Это проблемы, которые в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ предÑтавить даже концептуально, и которые будут отнимать времÑ, заложенное на проект, и Ñбивать график. - -### printlining +### Вывод в конÑоль Ð’Ñтавка в программу временных команд, которые выводÑÑ‚ информацию о ее выполнении Ð´Ð»Ñ Ð¿Ð¾Ñледующей отладки. @@ -14,39 +10,23 @@ Практика пиÑать программу таким образом, чтобы она могла выводить наÑтраиваемый отчет, опиÑывающий ход ее иÑполнениÑ. -### divide and conquer - -Техника Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ отладки по принципу "Ñверху-вниз". ЗаключаетÑÑ Ð² разделении большой проблемы или задачи на ÑоÑтавные проблемы или задачи меньшего размера. - -### vapour - -Воображаемые и чаÑто обманчивые Ð¾Ð±ÐµÑ‰Ð°Ð½Ð¸Ñ Ð½Ð°Ñчет программного обеÑпечениÑ, которое еще не готово Ð´Ð»Ñ Ð²Ñ‹Ð¿ÑƒÑка, и которое зачаÑтую никогда не преобразуетÑÑ Ð² нечто работающее. - ### БоÑÑ Ð§ÐµÐ»Ð¾Ð²ÐµÐº, который назначает вам задачи. Ð’ некоторых ÑлучаÑÑ…, Ñто Ñам пользователь. -### tribe +### Клан Люди, которые разделÑÑŽÑ‚ Ñ Ð²Ð°Ð¼Ð¸ верноÑть некой общей цели. -### low-hanging fruit - -СущеÑтвенные улучшениÑ, которые требуют мало затрат. - -### Entrepreneur - -Инициатор проектов. - -### business +### Ð‘Ð¸Ð·Ð½ÐµÑ Ð“Ñ€ÑƒÐ¿Ð¿Ð° людей, организованных Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð±Ñ‹Ð»Ð¸. -### company +### ÐšÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð“Ñ€ÑƒÐ¿Ð¿Ð° людей, организованных Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð±Ñ‹Ð»Ð¸. -### scroll blindness +### Слепота прокрутки ÐевозможноÑть найти нужную информацию из-за того, что она ÑпрÑтана в большом количеÑтве другой, менее интереÑной, информации. @@ -58,10 +38,6 @@ Главное ограничение в производительноÑти ÑиÑтемы. Ограничение, которые Ñнижает производительноÑть. -### master - -Уникальный фрагмент информациÑ, от которого проиÑходÑÑ‚ вÑе кÑшированные копии. Служит официальным определением данных. - ### Ð’Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÐºÑƒÑ‡Ð° ПамÑть можно назвать "выделенной в куче", когда механизм по ее оÑвобождению можно назвать Ñложным. @@ -82,50 +58,18 @@ Стиль разработки, которые акцентируетÑÑ Ð½Ð° общении Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð¼Ð¸ и автоматизированным теÑтированием. -### hitting the wall - -ИÑчерпать некий реÑÑƒÑ€Ñ Ð¸ тем Ñамым резко Ñнизить производительноÑть программы в противоположноÑть поÑтепенному Ñнижению. - -### speculative programming +### СпекулÑтивное программирование Создание функции до того, как точно определено, будет ли она полезна. -### information hiding - -Принцип проектированиÑ, которые ÑтремитÑÑ Ð¸Ð·Ð¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ друг от друга компоненты через внешние интерфейÑÑ‹, предоÑтавлÑющие необходимый минимум информации. - ### Объектно-ориентированное программирование Стиль программированиÑ, акцентирующийÑÑ Ð½Ð° управлении внутренним ÑоÑтоÑнием объектов. -### communication languages +### Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем Язык, Ñпроектированный в первую очередь Ð´Ð»Ñ Ñтандартизации, чем Ð´Ð»Ñ Ð½ÐµÐ¿Ð¾ÑредÑтвенного иÑпользованиÑ. -### boxes and arrows - -Свободный, неформальный Ñтиль поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼ из Ñчеек и Ñтрелок, отображающих отношениÑ. ПротивопоÑтавлÑетÑÑ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¼ методологиÑм диаграмм, таким как UML. - -### lingua franca - -ПопулÑрный в Ñвоей облаÑти Ñзык, Ñтавший де-факто Ñтандартом. Ðапример, как французÑкий был в одно Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð¼ÐµÐ¶Ð´ÑƒÐ½Ð°Ñ€Ð¾Ð´Ð½Ð¾Ð¹ дипломатии. - -### buy vs. build - -Выбор между покупкой программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ ÑамоÑтоÑтельной разработкой. - -### mere work - -Работа, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ мало творчеÑтва и подразумевает малый риÑк. Можно легко оценить Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… затрат. - -### programming notation +### ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð½Ð¾Ñ‚Ð°Ñ†Ð¸Ñ Ð¡Ð¸Ð½Ð¾Ð½Ð¸Ð¼ Ð´Ð»Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð° "Ñзыка программированиÑ", который почеркивает математичеÑкую природу Ñзыков Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ их проÑтоту отноÑительно еÑтеÑтвенных Ñзыков. - -### strawman - -Документ, который ÑвлÑетÑÑ Ñтартовой точкой техничеÑкой диÑкуÑÑиии. Может веÑти к поÑледующим верÑиÑм документации. - -### white-paper - -Информативный документ, который чаÑто предназначен объÑÑнить или продать продукт или идею аудитории, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÐµÑ‚ÑÑ Ð¾Ñ‚ разработчиков данного продукта или идеи. diff --git a/ru/README.md b/ru/README.md index 4a94ad6..e5de3de 100644 --- a/ru/README.md +++ b/ru/README.md @@ -23,7 +23,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - Личные навыки - [ÐаучитеÑÑŒ отлаживать](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) - [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) - - [Как уÑтранÑть ошибки](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [Как уÑтранÑть баги](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) - [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) - [Как определÑть проблемы производительноÑти](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) - [Как уÑтранÑть проблемы производительноÑти](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) @@ -54,7 +54,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [Как баланÑировать краткоÑть и абÑтракцию](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) - [Как оÑваивать новые навыки](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) - [ÐаучитеÑÑŒ печатать вÑлепую](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) - - [Как выполнÑть интеграционное теÑтирование](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Как проводить интеграционное теÑтирование](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) - [Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем](2-Intermediate/Personal-Skills/09-Communication-Languages.md) - [Стандартные технологии](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) - [Как анализировать данные](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) @@ -68,7 +68,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) - [Как управлÑть завиÑимоÑÑ‚Ñми](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) - [Как оценивать Ñтороннее программное обеÑпечение](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) - - [Как решать: покупать программу или пиÑать Ñвою](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [Как решить: покупать программу или пиÑать Ñвою](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) - [Как раÑти профеÑÑионально](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) - [Как проводить ÑобеÑедованиÑ](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) - [Как понÑть, когда применÑть выÑокие технологии](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) From b8b947ea72132410283f07076364f83c6c900447 Mon Sep 17 00:00:00 2001 From: Pavel Tovchigrechko <99090300+paveltovchigrechko@users.noreply.github.com> Date: Fri, 6 Jan 2023 14:49:32 +0600 Subject: [PATCH 133/149] Russian version, after review. Version 03 (#4) * Changes and improvements in additional files (README, License, Contributions) * Fix typos, rephasing. All files. Version 03 --- .../Personal-Skills/01-Learn-To-Debug.md | 6 +- ...to-Debug-by-Splitting-the-Problem-Space.md | 6 +- .../03-How-to-Remove-an-Error.md | 2 +- .../04-How-to-Debug-Using-a-Log.md | 2 +- ...-How-to-Understand-Performance-Problems.md | 6 +- .../06-How-to-Fix-Performance-Problems.md | 8 +- .../07-How-to-Optimize-Loops.md | 4 +- .../10-How-to-Deal-with-Intermittent-Bugs.md | 8 +- .../12-How-to-Conduct-Experiments.md | 6 +- .../02-How-to-Estimate-Programming-Time.md | 8 +- ...o-Utilize-People-as-Information-Sources.md | 4 +- .../Team-Skills/05-How-to-Document-Wisely.md | 2 +- .../06-How-to-Work-with-Poor-Code.md | 2 +- .../07-How-to-Use-Source-Code-Control.md | 4 +- .../10-How-to-Recognize-When-to-Go-Home.md | 4 +- .../11-How-to-Deal-with-Difficult-People.md | 6 +- ...adeoff-Quality-Against-Development-Time.md | 4 +- ...ow-to-Manage-Software-System-Dependence.md | 2 +- .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 4 +- .../Judgment/05-How-to-Grow-Professionally.md | 2 +- .../06-How-to-Evaluate-Interviewees.md | 2 +- ...ow-When-to-Apply-Fancy-Computer-Science.md | 2 +- .../08-How-to-Talk-to-Non-Engineers.md | 2 +- .../01-How-to-Stay-Motivated.md | 2 +- .../03-How-to-Tradeoff-Time-vs-Space.md | 2 +- .../Personal-Skills/04-How-to-Stress-Test.md | 4 +- ...-How-to-Balance-Brevity-and-Abstraction.md | 2 +- .../06-How-to-Learn-New-Skills.md | 2 +- .../09-Communication-Languages.md | 6 +- .../Personal-Skills/10-Heavy-Tools.md | 2 +- .../Personal-Skills/11-How-to-analyze-data.md | 4 +- ru/2-Intermediate/README.md | 2 +- .../01-How-to-Manage-Development-Time.md | 4 +- ...ow-to-Manage-Third-Party-Software-Risks.md | 2 +- .../03-How-to-Manage-Consultants.md | 2 +- ...-Disagree-Honestly-and-Get-Away-with-It.md | 2 +- .../01-How-to-Fight-Schedule-Pressure.md | 2 +- .../02-How-to-Understand-the-User.md | 2 +- .../03-How-to-Get-a-Promotion.md | 2 +- ru/3-Advanced/README.md | 4 +- .../01-How-to-Develop-Talent.md | 2 +- .../08-How-to-Communicate-Well.md | 2 +- .../10-How-to-Deal-with-Managerial-Myths.md | 2 +- ...1-How-to-Deal-with-Organizational-Chaos.md | 2 +- .../02-How-to-Utilize-Embedded-Languages.md | 2 +- .../03-Choosing-Languages.md | 6 +- ru/5-Bibliography.md | 2 +- ru/6-History.md | 2 +- ru/7-Contributions.md | 39 ++--- ru/GLOSSARY.md | 8 +- ru/LICENSE.md | 7 +- ru/README.md | 22 +-- ru/SUMMARY.md | 159 +++++++++--------- 53 files changed, 198 insertions(+), 199 deletions(-) diff --git a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index 763811a..991c78b 100644 --- a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -4,9 +4,9 @@ Те идеалиÑты, которые Ñчитают, что дизайн, анализ, Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений и подобное более фундаментальны, чем отладка, врÑд ли ÑвлÑÑŽÑ‚ÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰Ð¸Ð¼Ð¸ программиÑтами. Работающий программиÑÑ‚ не живет в идеальном мире. Даже еÑли вы идеальны, вы окружены и вынуждены работать Ñ ÐºÐ¾Ð´Ð¾Ð¼, который напиÑан в больших корпорациÑÑ…, организациÑÑ… вроде GNU и вашими коллегами. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть Ñтого кода неидеальна, и она неидеально задокументирована. Без ÑпоÑобноÑти видеть иÑполнение Ñтого кода, малейший баг выбьет Ð²Ð°Ñ Ð¸Ð· колеи. ЧаÑто увидеть иÑполнение можно только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑкÑперимента, то еÑть, отладки. -Отладка больше каÑаетÑÑ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼, чем Ñамих программ. ЕÑли вы купите программное обеÑпечение от большой компании, то как правило вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Обычно вы при работе Ñоздаете баг, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, как он возник. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. +Отладка больше каÑаетÑÑ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼, чем Ñамих программ. ЕÑли вы купите программное обеÑпечение от большой компании, то как правило вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программы. Обычно вы при работе Ñоздаете баг, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, как он возник. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. -Чтобы понÑть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, вы должны иметь возможноÑть запуÑтить ее и наблюдать ход иÑполнениÑ. Иногда баг виден визуально, например, еÑли он отображаетÑÑ Ð½Ð° Ñкране или между ÑобытиÑми в программе очевидна непредуÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°. Во многих других ÑлучаÑÑ…, баг ÑвÑзан Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÑŒ непоÑредÑтвенно, например, Ñ ÑоÑтоÑнием переменных, конкретными Ñтроками кода, иÑполнÑющиеÑÑ Ð² данный момент, либо Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñми внутри Ñложной Ñтруктуры данных. Эти Ñкрытые факторы надо выÑÑнить. +Чтобы понÑть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, вы должны иметь возможноÑть запуÑтить ее и наблюдать за ее ходом иÑполнениÑ. Иногда баг виден визуально, например, еÑли он отображаетÑÑ Ð½Ð° Ñкране или между ÑобытиÑми в программе очевидна непредуÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°. Во многих других ÑлучаÑÑ…, баг ÑвÑзан Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÑŒ непоÑредÑтвенно, например, Ñ ÑоÑтоÑнием переменных, конкретными Ñтроками кода, иÑполнÑющиеÑÑ Ð² данный момент, либо Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñми внутри Ñложной Ñтруктуры данных. Эти Ñкрытые факторы надо выÑÑнить. РаÑпроÑтраненные методы Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸Ñ "внутренноÑтей" программы можно поделить на: @@ -16,6 +16,6 @@ Отладчики Ñто прекраÑное ÑредÑтво, когда они Ñтабильны и доÑтупны, но вывод в конÑоль и логирование гораздо важнее. Отладчики чаÑто отÑтают от Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð¸Ñ Ñзыков программированиÑ, так что они могут быть доÑтупны не в каждый момент времени. К тому же, некоторые отладчики могут незначительно изменÑть ход иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, поÑтому применÑть их в Ñтих ÑлучаÑÑ… непрактично. Ðаконец, ÑущеÑтвуют виды отладки, такие как проверка утверждений в большой Ñтруктуре данных, которые требуют напиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кода и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð° иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. Так что важно знать, как пользоватьÑÑ Ð¾Ñ‚Ð»Ð°Ð´Ñ‡Ð¸ÐºÐ°Ð¼Ð¸, когда они доÑтупны, но критично важно уметь иÑпользовать два оÑтавшихÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð°. -Ðекоторые начинающие программиÑта боÑÑ‚ÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, еÑли та требует Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°. Это можно понÑть, ведь Ñто немного похоже на вÑкрытие Ñ Ð¸ÑÑледовательÑкими целÑми. Ðо вы должны научитьÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ñвой код, ÑкÑпериментировать Ñ Ð½Ð¸Ð¼ и понимать, что ничего из того, что вы временно делаете Ñ Ð½Ð¸Ð¼, не Ñделает его хуже. ЕÑли у Ð²Ð°Ñ ÐµÑть такой Ñтрах, найдите наÑтавника. Мы терÑем множеÑтво хороших программиÑтов в Ñамом начале их Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·-за Ñтого Ñтраха. +Ðекоторые начинающие программиÑта боÑÑ‚ÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸, еÑли та требует Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°. Их можно понÑть, ведь Ñто немного похоже на вÑкрытие Ñ Ð¸ÑÑледовательÑкими целÑми. Ðо вы должны научитьÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ñвой код, ÑкÑпериментировать Ñ Ð½Ð¸Ð¼ и понимать, что ничего из того, что вы временно делаете Ñ Ð½Ð¸Ð¼, не Ñделает его хуже. ЕÑли у Ð²Ð°Ñ ÐµÑть такой Ñтрах, найдите наÑтавника. Мы терÑем множеÑтво хороших программиÑтов в Ñамом начале их Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·-за Ñтого Ñтраха. Следующее: [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md index 6f7c1db..ab80909 100644 --- a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md +++ b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -1,14 +1,14 @@ # Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы [//]: # (Version:1.0.0) -Отладка Ñто интереÑно, потому что она начинаетÑÑ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð’Ñ‹ думаете, что программа делает одно, но на Ñамом деле она делает что-то другое. Ðе вÑегда Ñто наÑтолько проÑто, но вÑе примеры, которые Ñ Ð¼Ð¾Ð³ бы привеÑти, будут надуманными по Ñравнению Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ÑлучаÑми. Отладка требует творчеÑтва и изобретательноÑти. ЕÑли и еÑть какой-то один ключ к отладке, то он заключаетÑÑ Ð² приеме "разделÑй и влаÑтвуй" в отношении проблемы. +Отладка Ñто интереÑно, потому что она начинаетÑÑ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹. Ð’Ñ‹ думаете, что программа делает одно, но на Ñамом деле она делает что-то другое. Ðе вÑегда Ñто наÑтолько проÑто, но вÑе примеры, которые Ñ Ð¼Ð¾Ð³ бы привеÑти, будут надуманными по Ñравнению Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ÑлучаÑми. Отладка требует творчеÑтва и Ñмекалки. ЕÑли и еÑть какой-то один ключ к отладке, то он заключаетÑÑ Ð² приеме "разделÑй и влаÑтвуй" в отношении проблемы. Предположим, к примеру, что вы напиÑали программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° выполнÑть деÑÑть инÑтрукций подрÑд. Затем вы запуÑкаете ее, и она вылетает. ПоÑкольку вы не планировали вылет программы, у Ð²Ð°Ñ Ð¿Ð¾ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Когда вы Ñмотрите на вывод программы, вы видите, что первые Ñемь инÑтрукций были выполнены уÑпешно. ОÑтавшиеÑÑ Ñ‚Ñ€Ð¸ инÑтрукции не видны в выводе, поÑтому проÑтранÑтво проблемы ÑужаетÑÑ: программа вылетает либо на воÑьмой, либо на девÑтой, либо на деÑÑтой инÑтрукции. Сможете ли вы поÑтавить ÑкÑперимент, чтобы увидеть, где вылетает программа? Конечно. Ð’Ñ‹ можете иÑпользовать отладчик или добавить вывод в конÑоль (либо их Ñквивалент на вашем Ñзыке программированиÑ) поÑле воÑьмой и девÑтой инÑтрукций. Когда вы запуÑтите программу Ñнова, проÑтранÑтво проблемы Ñтанет еще уже, например, вы увидите, что программа вылетает на девÑтой инÑтрукции. Я Ñчитаю, что помнить о точном определении проблемы помогает ÑоÑредоточитьÑÑ Ð½Ð° ее решении. Когда неÑколько человек работают под давлением и ÑтреÑÑом над задачей, очень легко забыть о том, что в ней ÑвлÑетÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой. -Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, напополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° и которое Ñледует поделить пополам? Именно здеÑÑŒ на помощь приходÑÑ‚ изобретательноÑть и опыт. +Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, напополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° и которое Ñледует поделить пополам? Именно здеÑÑŒ на помощь приходÑÑ‚ Ñмекалка и опыт. -Ðачинающим программиÑтам кажетÑÑ, что ошибка может быть в каждой Ñтроке кода. У них еще нет того Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, которое поÑвитÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼. Они не видÑÑ‚ вÑе ÑвойÑтва и факторы программы, такие как проÑтранÑтво иÑполнÑемого кода, Ñтруктура данных, управление памÑтью, взаимодейÑтвие Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¼ кодом, риÑкованный код, проÑтой код. Ð”Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ð¾Ð³Ð¾ программиÑта Ñти факторы ÑоÑтавлÑÑŽÑ‚ неполную, но крайне полезную модель вÑего того, что может пойти не так. Ðаличие такой модели в голове очень Ñффективно помогает обнаружить точное меÑто проблемы. +Ðачинающим программиÑтам кажетÑÑ, что ошибка может быть в каждой Ñтроке кода. У них еще нет того Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, которое поÑвитÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼. Они не видÑÑ‚ вÑе ÑвойÑтва и факторы программы, такие как проÑтранÑтво иÑполнÑемого кода, Ñтруктура данных, управление памÑтью, взаимодейÑтвие Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼ кодом, риÑкованный код, проÑтой код. Ð”Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ð¾Ð³Ð¾ программиÑта Ñти факторы ÑоÑтавлÑÑŽÑ‚ неполную, но крайне полезную модель вÑего того, что может пойти не так. Ðаличие такой модели в голове очень Ñффективно помогает обнаружить точное меÑто проблемы. Когда вы разделили вÑе проÑтранÑтво программы на вÑе меÑта, где может быть ошибка, вам предÑтоит определить, где именно она находитÑÑ. Ð’ проÑтом Ñлучае, когда Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñтоит как "Ð’ какой неизвеÑтной мне Ñтроке падает программа?", вы можете ÑпроÑить ÑебÑ: "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¼Ð½Ðµ Ñтрока Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ находитÑÑ Ð´Ð¾ или поÑле Ñтой Ñтроки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾ моему мнению должна иÑполнÑтьÑÑ Ð² Ñередине программы?" Как правило, вы будете не наÑтолько удачливы, чтобы обнаружить, что ошибка кроетÑÑ Ð² одной Ñтроке или даже в одном блоке кода. Чаще проблема будет звучать как "Либо в Ñтом графе еÑть указатель на некорректный объект, либо мой алгоритм некорректно Ñкладывает переменные в Ñтом графе". Ð’ Ñтом Ñлучае, возможно, вам придетÑÑ Ð½Ð°Ð¿Ð¸Ñать небольшую программу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ указателей, чтобы решить, какую из чаÑтей Ñтого проÑтранÑтва проблемы можно иÑключить. diff --git a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index 9531023..6e49d68 100644 --- a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -4,6 +4,6 @@ При иÑправлении бага важно внеÑти наименьшие изменениÑ, которые его уÑтранÑÑ‚. Ð’Ñ‹ можете заметить другие меÑта в коде, которые потребуют улучшений, но не вноÑите их одновременно Ñ Ð¸Ñправлением ошибки. СтарайтеÑÑŒ применÑть научный метод: изменÑть только одно зараз. Лучший ÑпоÑоб Ð´Ð»Ñ Ñтого: воÑпроизвеÑти баг, внеÑти иÑправлениÑ, затем перезапуÑтить программу и убедитьÑÑ, что бага больше нет. Конечно, иногда придетÑÑ Ð¼ÐµÐ½Ñть не одну, а неÑколько Ñтрок кода, но концептуально вÑе равно ÑтарайтеÑÑŒ вноÑить точечные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. -Иногда в программе приÑутÑтвует неÑколько багов, очень похожих друг на друга. Определить их и иÑправить по одному - Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае, вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир чаÑто бывает беÑпорÑдочен. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. +Иногда в программе приÑутÑтвует неÑколько багов, очень похожих друг на друга. Определить их и иÑправить по одному - Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае, вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать, и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир чаÑто бывает беÑпорÑдочен. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. Следующее: [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 6933061..5ae285d 100644 --- a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -6,7 +6,7 @@ - Логи могут давать ÑтатиÑтику и данные о производительноÑти, такие как Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ выполнением команд - ЕÑли логи наÑтраиваемы, то они помогают Ñобрать общую информацию Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ñ‹Ñ… ÑпецифичеÑких проблем без необходимоÑти модифицировать или перезапуÑкать код -КоличеÑтво выводимой в лог информации Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ информативноÑтью и краткоÑтью. Избыток информации Ñделает лог Ñ‚Ñжелым и вызовет *Ñлепоту прокрутки*, уÑложнÑÑ Ð¿Ð¾Ð¸Ñк нужного. ÐедоÑтаток информации может проÑто Ñделать лог беÑполезным. По Ñтой причине полезно делать логи наÑтраиваемыми. Как правило, ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в логе отображает Ñвое меÑто в иÑходном коде, иÑполнÑющий ее поток, еÑли он еÑть, точное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸, обычно, дополнительную информацию вроде значений переменных, объем Ñвободной памÑти, чиÑло объектов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и так далее. Эти запиÑи покрывают веÑÑŒ иÑходный код, оÑобенно оÑновные функциональные узлы и риÑкованный код. ЗапиÑи можно раÑпределить по уровнÑм, и наÑтраивать в конфигурации вывод только запиÑей определенного уровнÑ. Лог Ñледует проектировать таким образом, чтобы его запиÑи помогали решать проблемы программы, которые вы предвидите. ПредуÑматривайте и проблему Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти. +КоличеÑтво выводимой в лог информации Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ информативноÑтью и краткоÑтью. Избыток информации Ñделает лог Ñ‚Ñжелым и вызовет *Ñлепоту прокрутки*, уÑложнÑÑ Ð¿Ð¾Ð¸Ñк нужного. ÐедоÑтаток информации может проÑто Ñделать лог беÑполезным. По Ñтой причине полезно делать логи наÑтраиваемыми. Как правило, ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в логе отображает Ñвое меÑто в иÑходном коде, иÑполнÑющий ее поток, еÑли он еÑть, точное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸, обычно, дополнительную информацию вроде значений переменных, объем Ñвободной памÑти, чиÑло объектов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и так далее. Эти запиÑи покрывают веÑÑŒ иÑходный код, оÑобенно оÑновные функциональные узлы и риÑкованный код. ЗапиÑи можно раÑпределÑть по уровнÑм, и наÑтраивать в конфигурации вывод только запиÑей определенного уровнÑ. Лог Ñледует проектировать таким образом, чтобы его запиÑи помогали решать проблемы программы, которые вы предвидите. ПредуÑматривайте и проблему Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти. ЕÑли у Ð²Ð°Ñ ÐµÑть поÑтоÑнный лог, вывод в конÑоль можно выполнить в рамках запиÑей лога, и некоторые из отладочных Ñообщений Ñтоит перманентно включить в ÑиÑтему логированиÑ. diff --git a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index bb3ba1f..1fe7800 100644 --- a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -1,11 +1,11 @@ # Как определÑть проблемы производительноÑти [//]: # (Version:1.0.0) -Изучение проблем производительноÑти так же неизбежно, как оÑвоение отладки. Даже еÑли вы в точноÑти и ÑовершенÑтве понимаете затраты на иÑполнение вашего кода, он будет взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ программным обеÑпечением, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ будет такого ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¸Ð»Ð¸ пониманиÑ. Как бы то ни было, на практике проблемы производительноÑти немного отличаютÑÑ Ð¸ проще, чем отладка в целом. +Изучение проблем производительноÑти так же неизбежно, как и оÑвоение отладки. Даже еÑли вы в точноÑти и ÑовершенÑтве понимаете затраты на иÑполнение вашего кода, он будет взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ программным обеÑпечением, над которым у Ð²Ð°Ñ Ð½ÐµÑ‚ будет такого ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¸Ð»Ð¸ пониманиÑ. Как бы то ни было, на практике проблемы производительноÑти немного отличаютÑÑ Ð¸ проще, чем отладка в целом. -Предположим, что вы или ваши клиенты Ñчитают ÑиÑтему или одну из подÑиÑтем Ñлишком медленной. Перед тем, как вы попытаетеÑÑŒ уÑкорить ее, вам Ñтоит поÑтроить мыÑленную модель и определить, почему она медленнаÑ. Ð’Ñ‹ можете иÑпользовать профилировщик или хороший лог, чтобы определить, где именно затрачиваетÑÑ Ð²Ñ€Ð²Ð¼Ñ Ð¸Ð»Ð¸ иной реÑÑƒÑ€Ñ ÑиÑтемы. СущеÑтвует извеÑтное утверждение, что 90% времени затрачиваетÑÑ Ð½Ð° 10% кода. Я бы добавил к Ñтому важноÑть затрат на чтение и запиÑÑŒ в оценке проблем производительноÑти. ЧаÑто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð»Ð¸Ð±Ð¾ на чтение информации, либо на ее запиÑÑŒ. Хорошим первым шагом в поÑтроении мыÑленной модели проблемы будет нахождение затратных операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и 10% кода, занимающих большую чаÑть реÑурÑа. +Предположим, что вы или ваши клиенты Ñчитают ÑиÑтему или одну из подÑиÑтем Ñлишком медленной. Перед тем, как вы попытаетеÑÑŒ уÑкорить ее, вам Ñтоит поÑтроить ее мыÑленную модель и определить, почему она медленнаÑ. Ð’Ñ‹ можете иÑпользовать профилировщик или хороший лог, чтобы определить, где именно затрачиваетÑÑ Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð»Ð¸ иной реÑÑƒÑ€Ñ ÑиÑтемы. СущеÑтвует извеÑтное утверждение, что 90% времени затрачиваетÑÑ Ð½Ð° 10% кода. Я бы добавил к Ñтому важноÑть затрат на чтение и запиÑÑŒ в оценке проблем производительноÑти. ЧаÑто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð»Ð¸Ð±Ð¾ на чтение информации, либо на ее запиÑÑŒ. Хорошим первым шагом в поÑтроении мыÑленной модели проблемы будет нахождение затратных операций Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи и 10% кода, занимающих большую чаÑть реÑурÑа. СущеÑтвует множеÑтво измерений в производительноÑти компьютерной ÑиÑтемы и множеÑтво потреблÑемых реÑурÑов. Первое, что Ñтоит измерить, Ñто реальное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение программы. Логирование Ñтого времени оÑобенно полезно тем, что оно может указать на непредвиденные обÑтоÑтельÑтва, которые возникают в ÑитуациÑÑ…, когда иÑпользовать профилировщик непрактично. Однако, Ñтот параметр не вÑегда дает полную картину проиÑходÑщего. Иногда вычиÑлениÑ, которые требуют чуть больше общего времени, но занимают меньше процеÑÑорного времени, покажут ÑÐµÐ±Ñ Ð»ÑƒÑ‡ÑˆÐµ в реальном окружении. Ðналогично, памÑть, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети, доÑтуп к базе данных или другому Ñерверу могут оказатьÑÑ, в конечном Ñчете, гораздо дороже, чем процеÑÑорное времÑ. -ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° - Ñто невозможноÑть продолжить иÑпонение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод - Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли загруженноÑть не произойдет, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. +ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° - Ñто невозможноÑть продолжить иÑпонение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод - Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли загруженноÑти не будет, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. Следующее: [Как уÑтранÑть проблемы производительноÑти](06-How-to-Fix-Performance-Problems.md) diff --git a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index 0dca667..57a78cb 100644 --- a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -1,12 +1,12 @@ # Как уÑтранÑть проблемы производительноÑти [//]: # (Version:1.0.0) -БольшинÑтво проектов можно Ñ Ð¾Ñ‚Ð½Ð¾Ñительно небольшими уÑилиÑми уÑкорить в 10-100 раз отноÑительно их первой верÑии. Ð’ уÑловиÑÑ… Ñжатых Ñроков ыыхода на рынок разумно и Ñффективно выбирать ту реализацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ñ‰Ðµ и быÑтрее оÑтальных. Однако, производительноÑть Ñто чаÑть удобÑтва иÑпользованиÑ, поÑтому чаÑто ее Ñтоит оценивать более внимательно. +БольшинÑтво проектов можно Ñ Ð¾Ñ‚Ð½Ð¾Ñительно небольшими уÑилиÑми уÑкорить в 10-100 раз отноÑительно их первой верÑии. Ð’ уÑловиÑÑ… Ñжатых Ñроков выхода на рынок разумно и Ñффективно выбирать ту реализацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ñ‰Ðµ и быÑтрее оÑтальных. Однако, производительноÑть Ñто чаÑть удобÑтва иÑпользованиÑ, поÑтому чаÑто ее Ñтоит оценивать более внимательно. -Главное в улучшении производительноÑти Ñложной ÑиÑтемы - Ñто проанализировать ее доÑтаточно тщательно, чтобы найти "узкие меÑта", то еÑть те меÑта, где запрашиваетÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¹ объем реÑурÑов. Ðет большого ÑмыÑла оптимизировать функцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ только 1% процеÑÑорного времени. ЕÑли вы не уверены, что изменение уÑкорит ÑиÑтему или ее значительную чаÑть Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ в два раза, то Ñтоит хорошо подумать, Ñтоит ли Ñто вообще делать. Как правило, такие ÑпоÑобы уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ ÐµÑть. Оценивайте также затраты на теÑтирование и проверки, которые потребует ваше изменение кода. Каждое изменение кода влечет за Ñобой необходимоÑть теÑтированиÑ, поÑтому лучше иметь немного больших изменений. +Главное в улучшении производительноÑти Ñложной ÑиÑтемы - Ñто проанализировать ее доÑтаточно тщательно, чтобы найти "узкие меÑта", то еÑть те меÑта, где запрашиваетÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¹ объем реÑурÑов. Ðет большого ÑмыÑла оптимизировать функцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ только 1% процеÑÑорного времени. ЕÑли вы не уверены, что изменение уÑкорит ÑиÑтему или ее значительную чаÑть Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ в два раза, то Ñтоит хорошо подумать, Ñтоит ли Ñто вообще делать. Как правило, такие ÑпоÑобы уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ ÐµÑть. Оценивайте также затраты на теÑтирование и проверки, которые потребует ваше изменение кода. Каждое изменение кода влечет за Ñобой необходимоÑть теÑтированиÑ, поÑтому лучше иметь небольшое чиÑло значительных изменений. -ПоÑле того, как вы добилиÑÑŒ двукратного ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти в одном меÑте, Ñтоит Ñнова провеÑти анализ программы и определить Ñледующее по затратам узкое меÑто. Тогда можно занÑтьÑÑ Ð¸Ð¼. +ПоÑле того, как вы добилиÑÑŒ двукратного ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти в одном меÑте, Ñтоит Ñнова проанализировать программу и определить Ñледующее по затратам узкое меÑто. Тогда можно занÑтьÑÑ Ð¸Ð¼. -ЧаÑто узкие меÑта в производительноÑти будут предÑтавлÑть Ñобой что-то вроде подÑчета коров по ногам и делению на четыре вмеÑто обычного подÑчета по головам. Ðапример, Ñ Ñ‡Ð°Ñто забывал дать ÑобÑтвенный Ð¸Ð½Ð´ÐµÐºÑ Ñ‡Ð°Ñто запрашиваемому Ñтолбцу в релÑционной базе ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, что замедлÑло веÑÑŒ процеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ в 20 раз. Среди других примеров: ненужные операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в циклах, отладочные ÑообщениÑ, Ñтавшие неактуальными, избыточное выделение памÑти и в оÑобенноÑти неумелое иÑпользование библиотек и Ñторонних фреймворков, которые плохо документированы в чаÑти производительноÑти. Такой вид улучшений легко определить и Ñ Ñ…Ð¾Ð´Ñƒ внеÑти в программу. +ЧаÑто узкие меÑта в производительноÑти будут предÑтавлÑть Ñобой что-то вроде подÑчета коров по ногам и поÑледующего Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° четыре вмеÑто обычного подÑчета по головам. Ðапример, Ñ Ñ‡Ð°Ñто забывал дать ÑобÑтвенный Ð¸Ð½Ð´ÐµÐºÑ Ñ‡Ð°Ñто запрашиваемому Ñтолбцу в релÑционной базе ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, что замедлÑло веÑÑŒ процеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ в 20 раз. Среди других примеров: ненужные операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в циклах, отладочные ÑообщениÑ, Ñтавшие неактуальными, избыточное выделение памÑти и в оÑобенноÑти неумелое иÑпользование библиотек и Ñторонних фреймворков, которые плохо документированы в чаÑти производительноÑти. Такой вид улучшений легко определить и Ñ Ñ…Ð¾Ð´Ñƒ внеÑти в программу. Что делать, когда очевидных меÑÑ‚ Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ð¹ не оÑталоÑÑŒ? Ð’Ñ‹ можете продолжать иÑкать узкие меÑта на более глубоком уровне или переÑмотреть веÑÑŒ дизайн ÑиÑтемы. ПоÑледнее дает прекраную возможноÑть продемонÑтрировать Ñвои ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта не только в реализации нового дизайна ÑиÑтемы, но и в умении убедить Ñвоего боÑÑа в том, что Ñто необходимо. Тем не менее, перед тем, как вы начнете убеждать его в необходимоÑти коренных изменений, ÑпроÑите ÑебÑ, уÑкорит ли ваше решение ÑиÑтему в 5-10 раз. diff --git a/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md index 34c39f5..63e387f 100644 --- a/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md +++ b/ru/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -1,6 +1,6 @@ # Как оптимизировать циклы [//]: # (Version:1.0.0) -Иногда вам будут вÑтречатьÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ñ‹Ðµ по времени циклы или рекурÑивные функции, которые окажутÑÑ ÑƒÐ·ÐºÐ¸Ð¼Ð¸ меÑтами в вашей программе. Перед тем, как вы попытаетеÑÑŒ уÑкорить цикл, потратьте некоторое Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° то, чтобы понÑть, можно ли избавитьÑÑ Ð¾Ñ‚ него полноÑтью. Сработает ли здеÑÑŒ какой-нибудь другой алгоритм? Можно ли вычиÑлить Ñто параллельно Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ вычиÑлением? ЕÑли вам не удалоÑÑŒ найти обходной путь, тогда оптимизируйте цикл. Это проÑто: вынеÑите из него вÑе, что можно. Ð’ конце концов, Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ не только изобретательноÑти, но и пониманиÑ, Ñколько затрачиваетÑÑ Ð½Ð° каждое выражение и операцию. Вот неÑколько предложений: +Иногда вам будут вÑтречатьÑÑ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ñ‹Ðµ по времени циклы или рекурÑивные функции, которые окажутÑÑ ÑƒÐ·ÐºÐ¸Ð¼Ð¸ меÑтами в вашей программе. Перед тем, как вы попытаетеÑÑŒ уÑкорить цикл, потратьте некоторое Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° то, чтобы понÑть, можно ли избавитьÑÑ Ð¾Ñ‚ него полноÑтью. Сработает ли здеÑÑŒ какой-нибудь другой алгоритм? Можно ли вычиÑлить Ñто параллельно Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ вычиÑлением? ЕÑли вам не удалоÑÑŒ найти обходной путь, тогда оптимизируйте цикл. Это проÑто: вынеÑите из него вÑе, что можно. Ð’ конце концов, Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ не только Ñмекалки, но и пониманиÑ, Ñколько затрачиваетÑÑ Ð½Ð° каждое выражение и операцию. Вот неÑколько предложений: - Уберите операции Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой - Ðе выделÑйте впуÑтую новые блоки памÑти @@ -10,6 +10,6 @@ - СтарайтеÑÑŒ не иÑпользовать затратные Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² данных - Перемещайте указатель вмеÑто того, чтобы переÑчитывать индекÑÑ‹ -СтоимоÑть каждой из Ñтих операций завиÑит от вашей конкретной ÑиÑтемы. Где-то компилÑторы и аппаратное обеÑпечение выполнит их вмеÑто ваÑ. РазумеетÑÑ, чиÑтый и Ñффективный код лучше, чем тот, который требует Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñпецифичной платформы. +СтоимоÑть каждой из Ñтих операций завиÑит от вашей конкретной ÑиÑтемы. Где-то компилÑторы и аппаратное обеÑпечение выполнÑÑ‚ их вмеÑто ваÑ. РазумеетÑÑ, чиÑтый и Ñффективный код лучше, чем тот, который требует Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñпецифичной платформы. Следующее: [Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи](08-How-to-Deal-with-IO-Expense.md) diff --git a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index aae3578..661861a 100644 --- a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -1,6 +1,6 @@ # Как уÑтранÑть плавающие баги [//]: # (Version:1.0.0) -Плавающий баг Ñто родÑтвенник пÑтидеÑÑтиметрового невидимого Ñкорпиона из глубокого коÑмоÑа. Этот кошмар воÑпроизводитÑÑ Ñ‚Ð°Ðº редко, что его трудно наблюдать, но доÑтаточно чаÑти его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ñто игнорировать. Ð’Ñ‹ не можете отладить баг, потому что вы не можете его найти. +Плавающий баг Ñто родÑтвенник пÑтидеÑÑтиметрового невидимого Ñкорпиона из глубокого коÑмоÑа. Этот кошмар воÑпроизводитÑÑ Ñ‚Ð°Ðº редко, что его трудно наблюдать, но доÑтаточно чаÑто его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¾Ñто игнорировать. Ð’Ñ‹ не можете отладить баг, потому что вы не можете его найти. Ð¥Ð¾Ñ‚Ñ Ð¿Ð¾Ñле воÑьми чаÑов отладки вы начнете ÑомневатьÑÑ Ð² Ñтом, плавающие баги подчинÑÑŽÑ‚ÑÑ Ñ‚ÐµÐ¼ же Ñамым законам логики, что и вÑе оÑтальное. Что делает их трудными, Ñто неизвеÑтные обÑтоÑтельÑтва, в которых они воÑпроизводÑÑ‚ÑÑ. ПоÑтарайтеÑÑŒ запиÑать вÑе уÑловиÑ, при которых проиÑходит плавающий баг, чтобы вы могли предположить, в чем на Ñамом деле заключаетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñ‡Ð¸Ð²Ð¾Ñть бага. Баг может быть ÑвÑзан Ñо значениÑми данных, например, воÑпроизводитьÑÑ, только когда переменной приÑваиваетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ "Вайоминг". ЕÑли причина изменчивоÑти не в Ñтом, то Ñледующим пунктом Ñтоит проверить Ñинхронизацию конкуррентноÑти. @@ -8,10 +8,10 @@ Самый глупый плавающий баг, который Ñоздал Ñ, заключалÑÑ Ð² многопоточной реализации одного функционального Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¾Ð³Ð¾ проекта. Я тщательно обеÑпечил корректную оценку параллельноÑти программы, правильное иÑпользование Ñдер процеÑÑора (вÑех воÑьми в данном Ñлучае). Я проÑто-напроÑто забыл Ñинхронизировать Ñборщик муÑора. Программа могла работать безошибочно долгое времÑ, Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ñ Ð²Ñе заданиÑ, которые Ñ ÐµÐ¹ назначал. Со Ñтыдом признаюÑÑŒ, Ñ Ð½Ð°Ñ‡Ð°Ð» подозревать аппаратное обеÑпечение, прежде чем Ð¼ÐµÐ½Ñ Ð¾Ñенило, в чем проблема. -Ðедавно на работе у Ð½Ð°Ñ Ð±Ñ‹Ð» плавающий баг, на который мы потратили неÑколько недель. У Ð½Ð°Ñ ÐµÑть многопоточное Ñерверное приложение на Java, размещенное на Apache-Ñерверах. Чтобы поддержать быÑтрую Ñмену веб-Ñтраниц, мы выполнÑли вÑе операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в небольшом наборе из четырех потоков, отделенных от потоков, ответÑтвенных за Ñмену Ñтраниц. Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени они "замораживалиÑÑŒ" и, наÑколько мы могли понÑть из логов, прекращали делать что-либо полезное на неÑколько чаÑов. ПоÑкольку у Ð½Ð°Ñ Ð±Ñ‹Ð»Ð¾ выделено четыре потока, Ñамо по Ñебе Ñто не было большой проблемой. До тех пор, пока не замораживалиÑÑŒ вÑе четыре потока одновременно. Тогда очереди запроÑов, оÑвобожденные замороженными потоками, забивали вÑÑŽ Ñвободную памÑть и крашили наш Ñервер. Ðам потребовалаÑÑŒ неделÑ, чтобы проÑто выÑвить баг, и за Ñто Ð²Ñ€ÐµÐ¼Ñ Ð¼Ñ‹ не Ñмогли понÑть, в чем причина, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñтот баг, и даже что именно проиÑходило в потоках в тот момент, когда они "заÑтревали". +Ðедавно на работе у Ð½Ð°Ñ Ð±Ñ‹Ð» плавающий баг, на который мы потратили неÑколько недель. У Ð½Ð°Ñ ÐµÑть многопоточное Ñерверное приложение на Java, размещенное на Apache-Ñерверах. Чтобы поддержать быÑтрую Ñмену веб-Ñтраниц, мы выполнÑли вÑе операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в небольшом наборе из четырех потоков, отделенных от потоков, ответÑтвенных за Ñмену Ñтраниц. Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени некоторые из Ñтих четырех потоков "замораживалиÑÑŒ" и, наÑколько мы могли понÑть из логов, прекращали делать что-либо полезное на неÑколько чаÑов. ПоÑкольку у Ð½Ð°Ñ Ð±Ñ‹Ð»Ð¾ выделено четыре потока, Ñамо по Ñебе Ñто не было большой проблемой. До тех пор, пока не замораживалиÑÑŒ вÑе четыре потока одновременно. Тогда очереди запроÑов, оÑвобожденные замороженными потоками, забивали вÑÑŽ Ñвободную памÑть и крашили наш Ñервер. Ðам потребовалаÑÑŒ неделÑ, чтобы проÑто выÑвить баг, и за Ñто Ð²Ñ€ÐµÐ¼Ñ Ð¼Ñ‹ не Ñмогли понÑть, в чем причина, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñтот баг, и даже что именно проиÑходило в потоках в тот момент, когда они "заÑтревали". -Этот пример демонÑтрирует риÑк, ÑвÑзанный Ñ Ð¸Ñпользованием Ñтороннего программного обеÑпечениÑ. Мы иÑпользовали лицензионный код, который убирал теги HTML из текÑта. ХотÑ, к ÑчаÑтью, у Ð½Ð°Ñ Ð±Ñ‹Ð» иÑходный код, мы не изучали его доÑконально, пока мы не включили логирование на нашем Ñервере и не увидели, что потоки почтовых Ñообщений забивалиÑÑŒ из-за Ñтого лиценционного кода. +Этот пример демонÑтрирует риÑк, ÑвÑзанный Ñ Ð¸Ñпользованием Ñтороннего программного обеÑпечениÑ. Мы иÑпользовали лицензионный код, который убирал теги HTML из текÑта. ХотÑ, к ÑчаÑтью, у Ð½Ð°Ñ Ð±Ñ‹Ð» иÑходный код, мы не изучали его доÑконально, пока мы не включили логирование на нашем Ñервере и не увидели, что потоки почтовых Ñообщений забивалиÑÑŒ из-за Ñтого лиценционного кода. -Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае, Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта ÑтановилоÑÑŒ пропорционально квадрату его длины. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как Ñто бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. +Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае, Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта ÑтановилоÑÑŒ пропорциональным квадрату его длины. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как Ñто бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. Следующее: [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](11-How-to-Learn-Design-Skills.md) diff --git a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index 271d8bf..ba7c792 100644 --- a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -1,10 +1,10 @@ # Как ÑкÑпериментировать [//]: # (Version:1.0.0) -Великий ЭдÑгер ДейкÑтра краÑноречиво объеÑнил, что информатика не ÑвлÑетÑÑ ÑкÑпериментальной наукой[ExpCS] и не завиÑит от Ñлектронных уÑтройÑтв. Как он выразилÑÑ Ð² 1960-е годы [Knife]: +Великий ЭдÑгер ДейкÑтра краÑноречиво объÑÑнил, что информатика не ÑвлÑетÑÑ ÑкÑпериментальной наукой[ExpCS] и не завиÑит от Ñлектронных уÑтройÑтв. Как он выразилÑÑ Ð² 1960-е годы [Knife]: > ...произошло худшее: предмет Ñтал извеÑтен как “computer scienceâ€, что, ÑобÑтвенно говорÑ, то же Ñамое, что называть хирургию “knife scienceâ€. И в Ñознании людей прочно укоренилоÑÑŒ, что “computer science†- Ñто наука о машинах и периферийном оборудовании. -Программирование может и не быть ÑкÑпериментальной наукой, но у большинÑтва программиÑтов не возможноÑти заниматьÑÑ Ñ‚ÐµÐ¼, что ДейкÑтра определил как “computer scienceâ€. Мы должны работать в облаÑти Ñкперимента подобно некоторым (но не вÑем) физикам. ЕÑли ÑпуÑÑ‚Ñ 30 лет можно будет заниматьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ без ÑкÑпериментированиÑ, то Ñто будет великим доÑтижением информатики. +Программирование может и не быть ÑкÑпериментальной наукой, но у большинÑтва программиÑтов нет возможноÑти заниматьÑÑ Ñ‚ÐµÐ¼, что ДейкÑтра определил как “computer scienceâ€. Мы должны работать в облаÑти ÑкÑперимента подобно некоторым (но не вÑем) физикам. ЕÑли ÑпуÑÑ‚Ñ 30 лет можно будет заниматьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ без ÑкÑпериментированиÑ, то Ñто будет великим доÑтижением информатики. ЭкÑперименты, которые вам придетÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒÑÑ, включают: @@ -18,6 +18,6 @@ Первое: ÑтарайтеÑÑŒ четко обозначать Ñвои иÑходные Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ утверждениÑ, которые вы ÑобираетеÑÑŒ проверить. Очень полезно запиÑывать их, оÑобенно, еÑли вы работаете в коллективе. -ЧаÑто вам придетÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñерию ÑкÑпериментов, каждый из которых опираетÑÑ Ð½Ð° знаниÑ, полученные в результате предыдущего. Таким образом, Ñледует проектировать ÑкÑперименты таким образом, чтобы получать как можно больше информации. К Ñожалению, Ñто противоречит принципу проÑтоты ÑкÑпериментов. Вам придетÑÑ Ñ€Ð°Ð·Ð²Ð¸Ð²Ð°Ñ‚ÑŒ Ñвою ÑкÑпертизу в Ñтой облаÑти ÑамоÑтоÑтельно. +ЧаÑто вам придетÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñерию ÑкÑпериментов, каждый из которых опираетÑÑ Ð½Ð° знаниÑ, полученные в результате предыдущего. Таким образом, Ñледует проектировать ÑкÑперименты так, чтобы получать как можно больше информации. К Ñожалению, Ñто противоречит принципу проÑтоты ÑкÑпериментов. Вам придетÑÑ Ñ€Ð°Ð·Ð²Ð¸Ð²Ð°Ñ‚ÑŒ Ñвою ÑкÑпертизу в Ñтой облаÑти ÑамоÑтоÑтельно. Следующее: [Командные навыки. Почему важно оценивать задачи](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md index 5ad5101..f34e0c9 100644 --- a/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md +++ b/ru/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -2,13 +2,13 @@ [//]: # (Version:1.0.0) Оценка времени требует практики и труда. Иногда так много труда, что имеет ÑмыÑл отдельно оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° оценку задачи, оÑобенно, еÑли речь идет об оценке большой задачи. -Когда Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ оценивать большую задачу, Ñамое чеÑтное - потÑнуть времÑ. БольшинÑтво инженеров полны Ñнтузиазма и Ñклонны угождать, а задержка ответа не обрадует Ñпрашивающего. Ðо Ð²Ñ‹Ð´Ð°Ð½Ð½Ð°Ñ Ñ Ñ…Ð¾Ð´Ñƒ оценка врÑд ли будет точной и чеÑтной. +Когда Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ оценить большую задачу, Ñамое чеÑтное - потÑнуть времÑ. БольшинÑтво инженеров полны Ñнтузиазма и Ñклонны угождать, а задержка ответа не обрадует Ñпрашивающего. Ðо Ð²Ñ‹Ð´Ð°Ð½Ð½Ð°Ñ Ñ Ñ…Ð¾Ð´Ñƒ оценка врÑд ли будет точной и чеÑтной. Пока вы думаете над ответом, возможно, получитÑÑ Ñделать прототип задачи. ЕÑли обÑтоÑтельÑтва позволÑÑŽÑ‚, то Ñто Ñамый точный ÑпоÑоб оценки, и он позволÑет добитьÑÑ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ прогреÑÑа. -Когда взÑть Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° некоторое иÑÑледование задачи невозможно, то Ñначала вы должны четко и ÑÑно уÑтановить, что именно означает ваша оценка. Сформулируйте Ñто значение как первое и заключительное чаÑти вашей оценки в пиÑьменном виде. Подготовьте пиÑьменный ответ, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ на более мелкие заданиÑ, в идеальном Ñлучае, требующие не больше одного рабочего днÑ. Самое важное здеÑÑŒ - ничего не забыть. Ðапример, очень важно Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° документирование, теÑтирование, планирование, взаимодейÑтвие Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ командами, отпуÑка. ЕÑли вы каждый день тратите чаÑть времени на общение Ñ Ð½ÐµÑƒÐ¼Ð½Ñ‹Ð¼Ð¸ людьми, добавьте отдельную Ñтроку на Ñто в общую оценку времени. Это даÑÑ‚ вашему боÑÑу общее видение того, что отнимает у Ð²Ð°Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ времени, а на что вам требуетÑÑ ÐµÐ³Ð¾ гораздо больше. +Когда взÑть Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° некоторое иÑÑледование задачи невозможно, то Ñначала вы должны четко и ÑÑно уÑтановить, что именно означает ваша оценка. Сформулируйте Ñто значение как первое и заключительное чаÑти вашей оценки в пиÑьменном виде. Подготовьте пиÑьменный ответ, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ñƒ на более мелкие заданиÑ, в идеальном Ñлучае, требующие не больше одного рабочего днÑ. Самое важное здеÑÑŒ - ничего не забыть. Ðапример, очень важно Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° документирование, теÑтирование, планирование, взаимодейÑтвие Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ командами, отпуÑка. ЕÑли вы каждый день тратите чаÑть времени на общение Ñ Ð½ÐµÑƒÐ¼Ð½Ñ‹Ð¼Ð¸ людьми, добавьте отдельную Ñтроку на Ñто в общую оценку времени. Это даÑÑ‚ вашему боÑÑу общее видение того, что отнимает у Ð²Ð°Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ времени, а на что вам его требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. -Я знаком Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, которые включают такие временные затраты в общую оценку в неÑвном виде, то еÑть проÑто прибавлÑÑŽÑ‚ их к общему времени работы. Я не Ñоветую так делать. Одним из Ñффектов такого подхода может Ñтать Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ. Ðапример, программиÑÑ‚ может заложить три Ð´Ð½Ñ Ð½Ð° задачу, которую он на Ñамом деле ÑобираетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ за день. ПрограммиÑÑ‚ планирует потратить еще два Ð´Ð½Ñ Ð½Ð° документирование Ñвоей работы или на другой полезный проект. Ðо тот факт, что работа была выполнена только за один день, очень проÑто выÑÑнить. И тогда может возникнуть впечатление, что программиÑÑ‚ бездельничал или переоценил задачу. Ðамного лучше дать четкое опиÑание того, что вы реально ÑобираетеÑÑŒ делать в рамках задачи. ЕÑли документирование занимает в два раза больше времени, чем напиÑание кода, и в оценке Ñказано об Ñтом, то Ñто дает преимущеÑтва, еÑли Ñто донеÑти до вашего менеджера. +Я знаком Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, которые включают такие временные затраты в общую оценку в неÑвном виде, то еÑть проÑто прибавлÑÑŽÑ‚ их к общему времени работы. Я не Ñоветую так делать. Одним из Ñффектов такого подхода может Ñтать Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð¾Ð²ÐµÑ€Ð¸Ñ. Ðапример, программиÑÑ‚ может заложить три Ð´Ð½Ñ Ð½Ð° задачу, которую он на Ñамом деле ÑобираетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ за день. ПрограммиÑÑ‚ планирует потратить еще два Ð´Ð½Ñ Ð½Ð° документирование Ñвоей работы или на другой полезный проект. Ðо тот факт, что работа была выполнена только за один день, очень проÑто выÑÑнить. И тогда может возникнуть впечатление, что программиÑÑ‚ бездельничал или переоценил задачу. Ðамного лучше дать четкое опиÑание того, что вы реально ÑобираетеÑÑŒ делать в рамках задачи. ЕÑли документирование занимает в два раза больше времени, чем напиÑание кода, и в оценке Ñказано об Ñтом, то Ñто дает Ñвои преимущеÑтва, еÑли Ñто донеÑти до вашего менеджера. Включайте вÑе временные затраты в оценку в Ñвном виде. ЕÑли задача Ñкорее вÑего займет один день, но может раÑÑ‚ÑнутьÑÑ Ð½Ð° деÑÑть дней, еÑли ваш первоначальный подход не Ñработает, отметьте Ñто в вашей оценке. Либо укажите Ñреднее Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ ÑоглаÑно вашим оценкам вероÑтноÑтей разных иÑходов. Любые риÑки, ÑвÑзанные Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½ÐµÐ¼ на задачу, должны быть включены в оценку. Ð’Ñ€Ñд ли конкретный человек заболеет в конкретный момент времени. Ðо в большом проекте Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвом программиÑтов обÑзательно будут те, кто возьмет больничный. То же Ñамое каÑаетÑÑ Ð¾Ñ‚Ð¿ÑƒÑков. Ркакова вероÑтноÑть обÑзательного обучающего Ñеминара в рамках вÑей компании? ЕÑли ее можно оценить, включите ее в общую оценку. Кроме Ñтого, еще еÑть неизвеÑтные факторы. Их по определению не получитÑÑ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ по отдельноÑти. Ð’Ñ‹ можете заложить Ð´Ð»Ñ Ð½Ð¸Ñ… отдельную Ñтроку в общей оценке, либо учеÑть их как-то по-другому. Чего Ð½ÐµÐ»ÑŒÐ·Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ, так Ñто позволÑть Ñвоему боÑÑу забыть об их ÑущеÑтвовании. Очень легко превратить оценку времени в раÑпиÑание, еÑли не учитывать неизвеÑтные факторы. @@ -16,6 +16,6 @@ ЕÑли в задаче приÑутÑтвуют большие риÑки, которые невозможно оценить, ваша обÑзанноÑть донеÑти Ñто до менеджера так, чтобы тот не брал на ÑÐµÐ±Ñ Ð¾Ð±ÑзательÑтва, ÑвÑзанные Ñ Ð½Ð¸Ð¼Ð¸. Ð’ Ñтом Ñлучае Ñтоит Ñделать вÑе возможное, чтобы Ñнизить Ñти риÑки. -ЕÑли вы Ñможете убедить Ñвою компанию иÑользовать *ÑкÑтремальное программирование*, то вам придетÑÑ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°Ñ‚ÑŒ только отноÑительно небольшие задачи. Это гораздо интереÑнее и продуктивнее. +ЕÑли вы Ñможете убедить Ñвою компанию иÑпользовать *ÑкÑтремальное программирование*, то вам придетÑÑ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°Ñ‚ÑŒ только отноÑительно небольшие задачи. Это гораздо интереÑнее и продуктивнее. Следующее: [Как иÑкать информацию](03-How-to-Find-Out-Information.md) diff --git a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index 5c97e85..f03f22a 100644 --- a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -2,9 +2,9 @@ [//]: # (Version:1.0.0) Уважайте Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ человека и ÑоизмерÑйте его Ñо Ñвоим. Ð’Ð¾Ð¿Ñ€Ð¾Ñ Ð´Ð°ÐµÑ‚ гораздо больше, чем проÑто ответ. Человек, которого вы Ñпрашиваете, узнает Ð²Ð°Ñ ÐºÐ°Ðº проÑто из вашего приÑутÑтвиÑ, так и по вашему вопроÑу. Ð’Ñ‹ узнаете о человеке то же Ñамое, и вдобавок, возможно, вы получаете ответ на ваш вопроÑ. Как правило, Ñто гораздо важнее, чем ваш вопроÑ. -Однако, ценноÑть вопроÑов умешьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретны выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может оказатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñо вÑеми вашими руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. +Однако, ценноÑть вопроÑов умешьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретные выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может оказатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñо вÑеми вашими руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. -Главное правило: вÑе получают пользу от небольшой беÑеды Ñ Ð²Ð°Ð¼Ð¸. И чем чаще проиÑходит беÑеда, тем меньше пользы они получают. Ваша работа ÑоÑтоит в том, чтобы дать Ñтим людÑм полезу от разговора Ñ Ð²Ð°Ð¼Ð¸ и получить ее Ñамому, ÑохранÑÑ Ð±Ð°Ð»Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñƒ нею и потраченным временем. +Главное правило: вÑе получают пользу от небольшой беÑеды Ñ Ð²Ð°Ð¼Ð¸. И чем чаще проиÑходит беÑеда, тем меньше пользы они получают. Ваша работа ÑоÑтоит в том, чтобы дать Ñтим людÑм пользу от разговора Ñ Ð²Ð°Ð¼Ð¸ и получить ее Ñамому, ÑохранÑÑ Ð±Ð°Ð»Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñƒ нею и потраченным временем. Важно уважать Ñвое ÑобÑтвенное времÑ. ЕÑли разговор Ñ ÐºÐµÐ¼-то, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что он займет Ð²Ñ€ÐµÐ¼Ñ Ñтого человека, поможет Ñохранить вам ваше времÑ, то вам Ñтоит провеÑти Ñтот разговор. ЕÑли только вы не Ñчитаете, что потраченное на разговор Ð²Ñ€ÐµÐ¼Ñ Ñтого человека более важно Ð´Ð»Ñ Ð²Ñей организации. diff --git a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index a3c24d5..4d57c30 100644 --- a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -1,6 +1,6 @@ # Как документировать правильно [//]: # (Version:1.0.0) -Жизнь Ñлишком коротка, чтобы пиÑать ерунду, которую никто не будет читать. ЕÑли вы пишите плохо, никто не будет Ñто читать. Так что лучше вÑего документировать хорошо и немного. Менеджеры чаÑто не понимают Ñтого, потому что даже Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð°ÐµÑ‚ им ложное чувÑтво уверенноÑти, что они не завиÑÑÑ‚ от Ñвоих программиÑтов. ЕÑли кто-то абÑолютно наÑтаивает, чтобы вы пиÑали никому не нужную документацию, Ñкажите "да" и начинайте Ñпокойно иÑкать новую работу. +Жизнь Ñлишком коротка, чтобы пиÑать ерунду, которую никто не будет читать. ЕÑли вы пишите плохо, никто не будет Ñто читать. Так что лучше вÑего документировать хорошо и немного. Менеджеры чаÑто не понимают Ñтого, потому что даже Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð°ÐµÑ‚ им ложное чувÑтво уверенноÑти, что они не завиÑÑÑ‚ от Ñвоих программиÑтов. ЕÑли кто-то абÑолютно наÑтаивает, чтобы вы пиÑали никому ненужную документацию, Ñкажите "да" и начинайте Ñпокойно иÑкать новую работу. Чтобы Ñнизить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° документирование, нет ничего более Ñффективного, чем дать точную оценку времени, которое на него потребуетÑÑ. Реалии жизни холодны и Ñуровы: документирование, как и теÑтирование, может занÑть гораздо больше времени, чем разработка. diff --git a/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md index 7036276..7f72475 100644 --- a/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md +++ b/ru/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -8,4 +8,4 @@ Важно помнить, что абÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ Ð¸ инкапÑулÑциÑ, два лучших ÑредÑтва программиÑта, оÑобенно применимы к плохому коду. Возможно, вы не Ñможете переделать целиком большой блок кода, но еÑли вы добавите новый уровень абÑтракции к нему, то Ñможете добитьÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… преимущеÑтв без переделки вÑего кода. Ð’ чаÑтноÑти, вы можете отделить оÑобенно плохие чаÑти кода, чтобы отрефакторить их незавиÑимо от оÑтального кода. -Следующее: [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð°](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file +Следующее: [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md index ca20628..dd2752f 100644 --- a/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md +++ b/ru/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -1,9 +1,9 @@ # Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий [//]: # (Version:1.0.0) -СиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий (также извеÑтные как ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð°) позволÑÑŽÑ‚ вам Ñффективно управлÑть проектами. Они очень полезны Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта-одиночки и жизненно важны Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разработчиков. Они отÑлеживают вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑех верÑиÑÑ… кода, так что ни одна Ñтрока кода не может быть потерÑна навÑегда. Кроме Ñтого, они позволÑÑŽÑ‚ приÑвоить оÑмыÑленное название изменениÑм. С помощью таких ÑиÑтем можно пиÑать отладочный код Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью, ведь веÑÑŒ модифицируемый код можно хранить отдельно от иÑходного работающего. Ðовый код потом можно показать вÑей команде или Ñразу выпуÑтить. +СиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий (также извеÑтные как ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÐºÐ¾Ð´Ð°) позволÑÑŽÑ‚ вам Ñффективно управлÑть проектами. Они очень полезны Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта-одиночки и жизненно необходимы Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разработчиков. Они отÑлеживают вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑех верÑиÑÑ… кода, так что ни одна Ñтрока кода не может быть потерÑна навÑегда. Кроме Ñтого, они позволÑÑŽÑ‚ приÑвоить оÑмыÑленное название изменениÑм. С помощью таких ÑиÑтем можно пиÑать отладочный код Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью, ведь веÑÑŒ модифицируемый код можно хранить отдельно от иÑходного работающего. Ðовый код потом можно показать вÑей команде или Ñразу выпуÑтить. Я довольно поздно оценил вÑе преимущеÑтва ÑиÑтем ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий, но теперь без них Ñ Ð½Ðµ начну даже небольшой личный проект. Вообще они нужны, когда вы работаете в команде Ñ Ð¾Ð´Ð½Ð¾Ð¹ кодовой базой. Ðо у них еÑть другое важное преимущеÑтво: они поощрÑÑŽÑ‚ думать о коде как о раÑтущей ÑиÑтеме. ПоÑкольку каждое изменение отмечено Ñвоим именем или номером, поÑтепенно приходишь к мыÑли, что программное обеÑпечение Ñто Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑÐµÑ€Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в коде. Я думаю, что Ñто оÑобенно полезно Ð´Ð»Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð¸Ñ… программиÑтов. -Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ñ‚ÐµÑ…Ð½Ð¸ÐºÐ° иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий заключаетÑÑ Ð² том, чтобы поÑтоÑнно держать Ñвой код в пределах неÑкольких дней от актуальноÑти. Код, который не может быть закончен за неÑколько дней, проверÑетÑÑ, но таким образом, чтобы он был неактивным и не вызывалÑÑ Ð² дейÑтвующей ÑиÑтеме, а значит, не Ñоздавал проблем Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…. Ошибки, замедлÑющие работу товарищей по команде, непроÑтительны и чаÑто ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð°Ð±Ñƒ. +Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ñ‚ÐµÑ…Ð½Ð¸ÐºÐ° иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий заключаетÑÑ Ð² том, чтобы поÑтоÑнно держать Ñвой ÑобÑтвенный код в пределах неÑкольких дней от актуального. Код, который не может быть закончен за неÑколько дней, проверÑетÑÑ, но таким образом, чтобы он был неактивным и не вызывалÑÑ Ð² дейÑтвующей ÑиÑтеме, а значит, не Ñоздавал проблем Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…. Ошибки, замедлÑющие работу товарищей по команде, непроÑтительны и чаÑто ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð°Ð±Ñƒ. Следующее: [Как пиÑать юнит-теÑты](08-How-to-Unit-Test.md) diff --git a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index 8950abf..9356b6b 100644 --- a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -1,6 +1,6 @@ # Как понÑть, когда идти домой [//]: # (Version:1.0.0) -Программирование Ñто деÑтельноÑть, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑвлÑетÑÑ ÐºÑƒÐ»ÑŒÑ‚ÑƒÑ€Ð¾Ð¹. К Ñожалению, Ñто не та культура, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ†ÐµÐ½Ð¸Ñ‚ пÑихичеÑкое и физичеÑкое здоровье. По культурно-иÑторичеÑким причинам (например, необходимоÑть работать по ночам на ненагруженных компьютерах) и из-за Ñильного Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑтить продукт на рынок программиÑты традиционно перерабатывают. Ðе думаю, что Ñтоит верить вÑему, что раÑÑказывают, но мне кажетÑÑ, что 60 рабочих чаÑов в неделю Ñто раÑпроÑтраненный график, а 50 чаÑов Ñто практичеÑки минимум. Это значит, что чаÑто требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. И Ñто ÑÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð´Ð»Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐ³Ð¾ программиÑта, который отвечает не только за ÑебÑ, но и за Ñвоих коллег. Ð’Ñ‹ должны понимать, когда идти домой, и иногда, когда предложить Ñвоим коллегам пойти домой. ЗдеÑÑŒ не может быть четких правил Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹, так же, как не может быть однозначных правил о том, как воÑпитывать детей. Ð’Ñе люди разные. +Программирование Ñто деÑтельноÑть, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑвлÑетÑÑ ÐºÑƒÐ»ÑŒÑ‚ÑƒÑ€Ð¾Ð¹. К Ñожалению, Ñто не та культура, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ†ÐµÐ½Ð¸Ñ‚ пÑихичеÑкое и физичеÑкое здоровье. По культурно-иÑторичеÑким причинам (например, необходимоÑть работать по ночам на ненагруженных компьютерах) и из-за Ñильного Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑтить продукт на рынок программиÑты традиционно перерабатывают. Ðе думаю, что Ñтоит верить вÑему, что раÑÑказывают, но мне кажетÑÑ, что 60 рабочих чаÑов в неделю Ñто раÑпроÑтраненный график, а 50 чаÑов Ñто практичеÑки минимум. Это значит, что чаÑто требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. И Ñто ÑÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð´Ð»Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐ³Ð¾ программиÑта, который отвечает не только за ÑебÑ, но и за Ñвоих коллег. Ð’Ñ‹ должны понимать, когда идти домой, и иногда, когда предложить пойти домой Ñвоим коллегам. ЗдеÑÑŒ не может быть четких правил Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹, так же, как не может быть однозначных правил о том, как воÑпитывать детей. Ð’Ñе люди разные. Свыше 60 рабочих чаÑов в неделю Ð´Ð»Ñ Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð°Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°, которую Ñ Ð¼Ð¾Ð³Ñƒ выдержать лишь небольшое Ð²Ñ€ÐµÐ¼Ñ (около недели). Ðо иногда от Ð¼ÐµÐ½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñтолько. Ðе знаю, Ñправедливо ли ожидать от человека 60 чаÑов работы в неделю. Я не уверен, что даже 40 чаÑов Ñто Ñправедливо. Однако, Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что глупо работать так много, чтобы почти не извлекать пользы от дополнительных чаÑов работы. Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñтот предел лежит за 60 чаÑами в неделю. Я лично Ñчитаю, что программиÑÑ‚ должен проÑвлÑть благородÑтво и неÑти Ñту Ñ‚Ñжелую ношу. Однако, быть козлом Ð¾Ñ‚Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ - не обÑзанноÑть программиÑта. Печальный факт заключаетÑÑ Ð² том, что чаÑто программиÑтов проÑÑÑ‚ быть козлами отпущениÑ, чтобы уÑтроить Ð´Ð»Ñ ÐºÐ¾Ð³Ð¾-то предÑтавление, например, когда менеджер пытаетÑÑ Ð²Ð¿ÐµÑ‡Ð°Ñ‚Ð»Ð¸Ñ‚ÑŒ руководителÑ. ПрограммиÑты чаÑто идут на Ñто, потому что они хотÑÑ‚ угодить и не умеют говорить "нет". ЕÑть четыре ÑпоÑоба защиты от такого отношениÑ: @@ -9,7 +9,7 @@ - ÐаучитеÑÑŒ говорить "нет", говорите "нет" вÑей командой, еÑли Ñто необходимо - УвольнÑйтеÑÑŒ, еÑли нет других выходов -БольшинÑтво программиÑтов Ñто хорошие программиÑты, а хорошие программиÑты хотÑÑ‚ Ñделать как можно больше. Чтобы доÑтичь Ñтого, они должны Ñффективно управлÑть Ñвоим временем. Между разогревом перед работой и глубоким погружением в нее вÑегда должно пройти некоторое времÑ. Многие программиÑты лучше вÑего работают, когда они раÑполагают длинными, никем не прерываемыми отрезками времени, в течение которых они могут ÑоÑредоточитьÑÑ Ð¸ погрузитьÑÑ Ð² работу. Ðо люди должны еще и Ñпать, и выполнÑть множеÑтво других вещей. Каждый должен найти ÑпоÑоб ÑбаланÑировать Ñвой рабочий ритм и ритм жизни. Каждый программиÑÑ‚ должен делать вÑе возможное, чтобы обеÑпечить ÑÐµÐ±Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð°Ð¼Ð¸ Ñффективной работы, например, Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€ÑƒÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ дни, когда он может отвлекатьÑÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на Ñамые важные ÑобраниÑ. +БольшинÑтво программиÑтов Ñто хорошие программиÑты, а хорошие программиÑты хотÑÑ‚ Ñделать как можно больше. Чтобы доÑтичь Ñтого, они должны Ñффективно управлÑть Ñвоим временем. Между разогревом перед работой и глубоким погружением в нее вÑегда должно пройти некоторое времÑ. Многие программиÑты лучше вÑего работают, когда они раÑполагают длинными, никем не прерываемыми отрезками времени, в течение которых они могут ÑоÑредоточитьÑÑ Ð¸ погрузитьÑÑ Ð² работу. Ðо люди должны еще и Ñпать, и делать множеÑтво других вещей. Каждый должен найти ÑпоÑоб ÑбаланÑировать Ñвой рабочий ритм и ритм жизни. Каждый программиÑÑ‚ должен делать вÑе возможное, чтобы обеÑпечить ÑÐµÐ±Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð°Ð¼Ð¸ Ñффективной работы, например, Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€ÑƒÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ дни, когда он может отвлекатьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на Ñамые важные ÑобраниÑ. ПоÑкольку у Ð¼ÐµÐ½Ñ ÐµÑть дети, Ñ ÑтараюÑÑŒ проводить вечера Ñ Ð½Ð¸Ð¼Ð¸. Лучше вÑего мне подходит очень долгий рабочий день, затем поÑпать в офиÑе или Ñ€Ñдом (Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ очень далеко от дома), затем на Ñледующий день уйти домой доÑтаточно рано, чтобы провеÑти Ð²Ñ€ÐµÐ¼Ñ Ñ Ð¼Ð¾Ð¸Ð¼Ð¸ детьми до того, как они отправÑÑ‚ÑÑ Ñпать. Этот ритм не очень удобен Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, но Ñто лучшее, что Ñ Ñмог найти. ОтправлÑйтеÑÑŒ домой, еÑли у Ð²Ð°Ñ Ð·Ð°Ñ€Ð°Ð·Ð½Ð°Ñ Ð±Ð¾Ð»ÐµÐ·Ð½ÑŒ. Ð’Ñ‹ должны идти домой, еÑли у Ð²Ð°Ñ Ñуицидальные мыÑли. Ð’Ñ‹ должны Ñделать перерыв или идти домой, еÑли вы думаете об убийÑтве больше, чем неÑколько Ñекунд. Ð’Ñ‹ должны отправить домой человека, еÑли он демонÑтрирует признаки Ñерьезного умÑтвенного раÑÑтройÑтва или депреÑÑии. ЕÑли из-за уÑталоÑти у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ‚ Ñоблазн быть более нечеÑтным или вредным, чем вам обычно ÑвойÑтвенно, Ñделайте перерыв. Ðе иÑпользуйте кокаин или амфетамины Ð´Ð»Ñ Ð±Ð¾Ñ€ÑŒÐ±Ñ‹ Ñ ÑƒÑталоÑтью. Ðе злоупотреблÑйте кофеином. diff --git a/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md index cb4c5df..34706ea 100644 --- a/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md +++ b/ru/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -4,12 +4,12 @@ Это может Ñтать проблемой Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… программиÑтов, у которых нет опыта подобных Ñитуаций, и чей предыдущий жизненный опыт научил моделÑм поведениÑ, которые не годÑÑ‚ÑÑ Ð² рабочем окружении. Трудные люди чаÑто привыкают к разноглаÑиÑм, и на них меньше, чем на оÑтальных, дейÑтвует Ñоциальное давление идти на компромиÑÑ. Главное - уважать их должным образом, что больше, чем захотите вы, и меньше, чем могут захотеть подобные люди. -ПрограммиÑты вынуждены работать вмеÑте в команде. Когда возникает разноглаÑие, его надо как-то решить, его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñлишком долго. Трудные люди чаÑто бывают чрезвычайно умны, и им еÑть, что полезного выÑказать. Очень важно Ñлушать их и понимать без предубеждениÑ, которое может вызывать их личноÑть. ТрудноÑти в общении чаÑто ÑтановÑÑ‚ÑÑ Ð¸Ñточником разноглаÑий, но их можно преодолеть терпением. СтарайтеÑÑŒ держать общение в Ñпокойном и вежливом тоне, не поддавайтеÑÑŒ на уловки увеличить конфликт. ПоÑле того, как вы потратите разумное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° попытки понÑть оппонента, примите решение. +ПрограммиÑты вынуждены работать вмеÑте в команде. Когда возникает конфликт, его надо как-то решить, его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñлишком долго. Трудные люди чаÑто бывают чрезвычайно умны, и им еÑть, что полезного выÑказать. Очень важно Ñлушать их и понимать без предубеждениÑ, которое может вызывать их личноÑть. ТрудноÑти в общении чаÑто ÑтановÑÑ‚ÑÑ Ð¸Ñточником разноглаÑий, но их можно преодолеть терпением. СтарайтеÑÑŒ держать общение в Ñпокойном и вежливом тоне, не поддавайтеÑÑŒ на уловки увеличить конфликт. ПоÑле того, как вы потратите разумное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° попытки понÑть оппонента, примите решение. Ðе позволÑйте грубой Ñиле заÑтавлÑть Ð²Ð°Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ то, Ñ Ñ‡ÐµÐ¼ вы неÑоглаÑны. ЕÑли вы лидер команды, принимайте то решение, которое вы Ñчитаете лучшим. Ðе принимайте Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ÑÑ…Ð¾Ð´Ñ Ð¸Ð· личных причин, какими они бы ни были. Будьте готовы объÑÑнить Ñвое решение. ЕÑли вы в команде Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼ человеком, не позволÑйте, чтобы решение лидера было вызвано любым личным мнением. ЕÑли решение не в вашу пользу, примите его. -Трудные люди менÑÑŽÑ‚ÑÑ Ð¸ ÑтановÑÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ в общении. Я Ñам был Ñвидетелем Ñтому, но такое ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. Как бы то ни было, у вÑех бывают периоды взлетов и падений. +Трудные люди менÑÑŽÑ‚ÑÑ Ð¸ ÑтановÑÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ в общении. Я Ñам был тому Ñвидетелем, но такое ÑлучаетÑÑ Ñ€ÐµÐ´ÐºÐ¾. Как бы то ни было, у вÑех бывают периоды взлетов и падений. Один из Ñамых больших вызовов, вÑтречающихÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñƒ программиÑту, оÑобенно лидерам, Ñто держать трудного человека вовлеченным в общую работу. Такие люди больше Ñклонны уклонÑтьÑÑ Ð¾Ñ‚ нее и паÑÑивно ÑопротивлÑтьÑÑ. -Следующее: [Разработчик Ñреднего уровнÑ](../../2-Intermediate) +Следующее: [ПрограммиÑÑ‚ Ñреднего уровнÑ](../../2-Intermediate) diff --git a/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md index 9d6b380..7047cff 100644 --- a/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md +++ b/ru/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -2,12 +2,12 @@ [//]: # (Version:1.0.0) Разработка программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ - Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ тем, что делает Ñамо программное обеÑпечение, и тем, чтобы проект был завершен. Ð’Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ попроÑить пожертвовать качеÑтвом разработки, чтобы уÑкорить запуÑк проекта. Причем жертва может оказатьÑÑ Ñ‚Ð°ÐºÐ¾Ð¹, что Ñто Ñерьезно заденет вашу инженерную или бизнеÑ-ответÑтвенноÑть. Ðапример, Ð²Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ попроÑить применить Ñлабое или неоправданное техничеÑкое решение, которое в дальнейшем приведет к множеÑтву проблем. -Ð’ таком Ñлучае ваша Ð¿ÐµÑ€Ð²Ð°Ñ Ð¾Ð±ÑзанноÑть Ñообщить о таком требовании Ñвоей команде и ÑÑно объÑÑнить, чем обернетÑÑ Ñнижение качеÑтва. Ð’ конце концов, ваше техничеÑкое понимание проекта должно быть гораздо лучше Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Подчеркните, что терÑет проект, что приобретает, и какой ценой потери на текущем Ñтапе придетÑÑ Ð²Ð¾ÑполнÑть на Ñледующем цикле разработки. ЗдеÑÑŒ очень пригодитÑÑ Ð¾Ð±Ñ‰ÐµÐµ понимание, которое дает хороший проектный план. ЕÑли жертвование качеÑтвом влиÑет на уÑÐ¸Ð»Ð¸Ñ Ð¿Ð¾ обеÑпечению качеÑтва, укажите на Ñто боÑÑу и команде по качеÑтву. ЕÑли жертвование качеÑтвом приведет к увеличению найденных багов поÑле теÑтированиÑ, укажите и на Ñто. +Ð’ таком Ñлучае ваша Ð¿ÐµÑ€Ð²Ð°Ñ Ð¾Ð±ÑзанноÑть Ñообщить о таком требовании Ñвоей команде и четко объÑÑнить, чем обернетÑÑ Ñнижение качеÑтва. Ð’ конце концов, ваше техничеÑкое понимание проекта должно быть гораздо лучше Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Подчеркните, что терÑет проект, что приобретает, и какой ценой потери на текущем Ñтапе придетÑÑ Ð²Ð¾ÑполнÑть на Ñледующем цикле разработки. ЗдеÑÑŒ очень пригодитÑÑ Ð¾Ð±Ñ‰ÐµÐµ понимание, которое дает хороший проектный план. ЕÑли жертвование качеÑтвом влиÑет на уÑÐ¸Ð»Ð¸Ñ Ð¿Ð¾ обеÑпечению качеÑтва, укажите на Ñто боÑÑу и команде по качеÑтву. ЕÑли жертвование качеÑтвом приведет к увеличению найденных багов поÑле теÑтированиÑ, укажите и на Ñто. ЕÑли жертвы неизбежны, вам Ñтоит попытатьÑÑ Ð¾Ñ‚Ð´ÐµÐ»Ð¸Ñ‚ÑŒ некачеÑтвенный в результате такого Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ в отдельные компоненты, чтобы в дальнейшем вернутьÑÑ Ðº нему и перепиÑать. РазъÑÑните Ñто Ñвоей команде, чтобы они могли запланировать такой подход. NinjaProgrammer на Slashdot приÑлал на Ñту тему такой шедевр: -> Помните, что Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° будет уÑтойчива к плохой реализации к коде. ЕÑли в коде приÑутÑтвуют правильные интерфейÑÑ‹ и абÑтракции, тогда поÑледующий рефакторинг будет менее болезненным. ЕÑли вам Ñложно напиÑать чиÑтый код, который легко поправить, подумайте, в чем проблема архитектуры, из-за которой возникает Ñта ÑложноÑть. +> Помните, что Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° уÑтойчива к плохой реализации к коде. ЕÑли в коде приÑутÑтвуют правильные интерфейÑÑ‹ и абÑтракции, тогда поÑледующий рефакторинг будет менее болезненным. ЕÑли вам Ñложно напиÑать чиÑтый код, который легко поправить, подумайте, в чем проблема архитектуры, из-за которой возникает Ñта ÑложноÑть. Следующее: [Как управлÑть завиÑимоÑÑ‚Ñми](02-How-to-Manage-Software-System-Dependence.md) diff --git a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index ce013c8..af8c34e 100644 --- a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -3,7 +3,7 @@ Современное программное обеÑпечение имеет тенденцию завиÑеть от множеÑтва компонентов, которые могут не быть под вашим непоÑредÑтвенным контролем. Это повышает продуктивноÑть за Ñчет Ñинергии и повторного иÑпользованиÑ. Однако, каждый такой компонент приноÑит Ñ Ñобой некоторые проблемы: - Как вы будете иÑправлÑть баги в компоненте? -- Ограничивает ли компонент Ð²Ð°Ñ Ð¸Ñпользовать определенное аппаратное обеÑпечение или ÑиÑтему? +- Вынуждает ли компонент Ð²Ð°Ñ Ð¸Ñпользовать определенное аппаратное обеÑпечение или ÑиÑтему? - Что вы будете делать, еÑли компонент полноÑтью откажет? Ð’Ñегда лучше инкапÑулировать компонент таким образом, чтобы он был отделен от оÑновной ÑиÑтемы, и его можно было легко заменить. ЕÑли компонент покажет Ñвою неработоÑпоÑобноÑть, вы замените его на другой или напишите Ñвой ÑобÑтвенный. ИнкапÑулÑÑ†Ð¸Ñ Ð½Ðµ улучшает переноÑимоÑть, но делает перепиÑывание кода проще, что почти также здорово. diff --git a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index e4b3eaf..5bb0c16 100644 --- a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -2,12 +2,12 @@ [//]: # (Version:1.0.0) ПредпринимательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проект, которые пытаютÑÑ Ð´Ð¾Ð±Ð¸Ñ‚ÑŒÑÑ Ñ‡ÐµÐ³Ð¾-то Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ программного отбеÑпечениÑ, поÑтоÑнно вынуждены принимать Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° *покупать программу или пиÑать Ñвою*. Это выражение неудачно по двум причинам. Оно как будто игнорирует ÑущеÑтвование Ñвободного и открытого программного обеÑпечениÑ, которое необÑзательно покупать. И, что более важно, его Ñтоит переформулировать в *приобреÑти и интегрировать или напиÑать Ñвое и интегрировать*, потому что затраты на интеграцию обÑзательны надо учеÑть. Такие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ редкого ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´ÐµÐ»Ð¾Ð²Ð¾Ð¹, управленчеÑкой и инженерной Ñмекалки. -- ÐаÑколько полно ваши Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ñовпадают Ñ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñми под которые было Ñоздано программное обеÑпечение, раÑÑматривающееÑÑ Ðº покупке? +- ÐаÑколько полно ваши Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ñовпадают Ñ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñми, под которые было Ñоздано программное обеÑпечение, раÑÑматривающееÑÑ Ðº покупке? - ÐšÐ°ÐºÐ°Ñ Ñ‡Ð°Ñть программы, которую вы можете купить, дейÑтвительно вам нужна? - Каковы затраты на оценку интеграции? - Каковы затраты на интеграцию? - Приобретение Ñтой программы увеличит или уменьшит затраты на долгоÑрочную поддержку? -- ЕÑли вы напишите Ñвое программное обеÑпечение под Ñвои цели, поÑтавить ли Ñто вашу компанию в нежелательную бизнеÑ-Ñитуацию? +- ЕÑли вы напишите Ñвое программное обеÑпечение под Ñвои цели, поÑтавит ли Ñто вашу компанию в нежелательную бизнеÑ-Ñитуацию? Следует как минимум дважды хорошо подумать, прежде чем начинать Ñоздавать программу, доÑтаточно большую, чтобы Ñтать оÑновой чьего-то бизнеÑа. Подобные идеи чаÑто предлагают Ñркие и оптимиÑтичные люди, которые могут внеÑти большой вклад в вашу команду. ЕÑли их Ð¸Ð´ÐµÑ Ð¾ÐºÐ°Ð¶ÐµÑ‚ÑÑ ÑƒÐ±ÐµÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹, возможно вы захотите изменить Ñвой бизнеÑ-план. Ðо не инвеÑтируйте необдуманно в решение, которое больше, чем ваш ÑобÑтвенный бизнеÑ. diff --git a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index e1a828b..8395deb 100644 --- a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -1,6 +1,6 @@ # Как раÑти профеÑÑионально [//]: # (Version:1.0.0) -Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте роль, которую вы хотите. Выражайте признательноÑть и благодарноÑть людÑи за их вклад в уÑпех организации и за помощь лично вам. +Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте ту роль, которую вы хотите, чтобы вам поручили. Выражайте признательноÑть и благодарноÑть людÑи за их вклад в уÑпех организации и за помощь лично вам. ЕÑли вы хотите Ñтать лидером команды, ÑпоÑобÑтвуйте формированию общего ÑоглаÑÐ¸Ñ Ð² работе. ЕÑли вы хотите Ñтать менеджером, возьмите ответÑтвенноÑть за график. Обычно вы Ñпокойно можете Ñделать Ñто, Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ñ Ð»Ð¸Ð´ÐµÑ€Ð¾Ð¼ или менеджером, так как Ñто Ñнимет Ñ Ð½Ð¸Ñ… большую нагрузку. ЕÑли Ñто Ñлишком ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, возьмите на ÑÐµÐ±Ñ Ð¾Ð±ÑзанноÑти поменьше. diff --git a/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md index aa222a1..40381a3 100644 --- a/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md +++ b/ru/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -6,7 +6,7 @@ Как минимум, вам Ñтоит выделить два чаÑа на уÑтное ÑобеÑедование по техничеÑким навыкам каждого кандидата. С опытом вы научитеÑÑŒ быÑтро выÑÑнÑть, что они знают, и быÑтро проводить границу Ñ Ñ‚ÐµÐ¼, чего они не знают. Кандидаты Ñ ÑƒÐ²Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ отноÑÑÑ‚ÑÑ Ðº Ñтому. Мне доводилоÑÑŒ неÑколько раз Ñлышать от кандидатов, что качеÑтво ÑобеÑÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ñ‹Ð»Ð¾ одной из причин выбрать компанию. Хорошие профеÑÑионалы хотÑÑ‚, чтобы их нанимали за навыки, а не за поÑледнее меÑто работы, колледж или другие неÑущеÑтвенные характериÑтики. -При ÑобеÑедовании также Ñтоит оценивать ÑпоÑобноÑть кандидата учитьÑÑ, что гораздо важнее того, что он уже знает. Также Ñтоит обратить внимание на признаки трудного человека. Их можно раÑпознать, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸ о ÑобеÑедовании, но во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽ быть трудно их заметить. Умение кандидата общатьÑÑ Ð¸ взаимодейÑтвовать Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ гораздо важнее Ð·Ð½Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÐµÐ¹ÑˆÐµÐ³Ð¾ Ñзыка программированиÑ. +При ÑобеÑедовании также Ñтоит оценивать ÑпоÑобноÑть кандидата учитьÑÑ, она гораздо важнее того, что он уже знает. Также Ñтоит обратить внимание на признаки трудного человека. Их можно раÑпознать, Ñ€Ð°Ð·Ð±Ð¸Ñ€Ð°Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¸ о ÑобеÑедовании, но во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²ÑŒÑŽ может быть трудно их заметить. Умение кандидата общатьÑÑ Ð¸ взаимодейÑтвовать Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ гораздо важнее Ð·Ð½Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÐµÐ¹ÑˆÐµÐ³Ð¾ Ñзыка программированиÑ. Один из читателей рекомендует давать кандидатам теÑтовое задание на дом. ПреимущеÑтво Ñтого теÑта в том, что он позволÑет выÑвить кандидата, который хорошо презентует ÑебÑ, но не может пиÑать код. Таких людей немало. Я лично не пробовал Ñтот метод, но он кажетÑÑ Ñ€Ð°Ð·ÑƒÐ¼Ð½Ñ‹Ð¼. diff --git a/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md index 9f97e8a..416e5d7 100644 --- a/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md +++ b/ru/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -1,6 +1,6 @@ # Как понÑть, когда применÑть выÑокие технологии [//]: # (Version:1.0.0) -СущеÑтвует Ñвод знаний об алгоритмах, Ñтруктурах данных, математике и других вещах, о которых программиÑты знают, но довольно редко иÑпользуют в работе. Ðа практике Ñти замечательные вещи Ñлишком Ñложны и, как правило, ненужны. Ðет ÑмыÑла улучшать алгоритм, когда Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð½Ð° неÑффективный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº базе данных. ДоÑÐ°Ð´Ð½Ð°Ñ Ñ‡Ð°Ñть Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ð² том, чтобы заÑтавить ÑиÑтемы общатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ и иÑпользовать очень проÑтые Ñтруктуры данных Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ ÐºÑ€Ð°Ñивого пользовательÑкого интерфейÑа. +СущеÑтвует Ñвод знаний об алгоритмах, Ñтруктурах данных, математике и других вещах, о которых программиÑты знают, но довольно редко иÑпользуют в работе. Ðа практике Ñти замечательные вещи Ñлишком Ñложны и, как правило, ненужны. Ðет ÑмыÑла улучшать алгоритм, когда Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть времени тратитÑÑ Ð½Ð° неÑффективный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº базе данных. ИзрÑÐ´Ð½Ð°Ñ Ñ‡Ð°Ñть Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ð² том, чтобы заÑтавить ÑиÑтемы общатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ и иÑпользовать очень проÑтые Ñтруктуры данных Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ ÐºÑ€Ð°Ñивого пользовательÑкого интерфейÑа. Когда Ñледует применÑть выÑокие технологии? Когда Ñледует открывать Ñерьезные книги, чтобы найти альтернативу обычному алгоритму? Иногда полезно Ñто делать, но такие технологии Ñледует тщательно оценивать. diff --git a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md index d2b3c70..d6e987b 100644 --- a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md +++ b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -16,4 +16,4 @@ Иногда неинженеры из доброты и ÑÑ‚Ñ€ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð½Ñть правильное решение предлагают вещи, которые по их мнению Ñделают нашу жизнь проще, тогда как в дейÑтвительноÑти ÑущеÑтвует решение гораздо лучше, которое можно найти, объединив взглÑд неинженера Ñ Ð²Ð°ÑˆÐµÐ¹ техничеÑкой ÑкÑпертизой. Я лично люблю ÑкÑтремальное программирование, поÑкольку оно решает Ñту проблему неÑффективноÑти. БыÑтрое ÑоглаÑование оценки Ñ Ð¸Ð´ÐµÐµÐ¹ упрощает поиÑк новой идеи, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой лучшее Ñочетание затрат и выгод. -Следующее: [Продвинутые навыки](../../3-Advanced) +Следующее: [Продвинутый программиÑÑ‚](../../3-Advanced) diff --git a/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md index 733e631..b71b698 100644 --- a/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md +++ b/ru/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -10,6 +10,6 @@ - ИÑкать возможноÑти применить новые технологии, Ñзыки Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ техники - СтаратьÑÑ Ð»Ð¸Ð±Ð¾ научить кого-то, либо научитьÑÑ Ñамому в каждом проекте, как был мал он ни был -Ðаконец, еÑли возможно, ÑтарайтеÑÑŒ измерÑть Ñвой вклад в работу в том, что Ð´Ð»Ñ Ð²Ð°Ñ Ð¿ÐµÑ€Ñонально имеет значение. Ðапример, когда Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ над багами, общее чиÑло уже иÑправленных мною багов мне Ñовершенно неинтереÑно, ведь оно не завиÑит от общего чиÑла багов, которые вÑе еще возможно ÑущеÑтвуют. Кроме того, Ñто чиÑло отражает мой вклад в Ñамом малом из вÑех возможных ракурÑов. Ðо ÑоотноÑить каждый иÑправленный баг Ñо ÑчаÑтливым клиентом Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, наоборот, очень ценно, и Ñлужит мотивацией в работе. +Ðаконец, еÑли возможно, ÑтарайтеÑÑŒ измерÑть Ñвой вклад в работу в том, что Ð´Ð»Ñ Ð²Ð°Ñ Ð¿ÐµÑ€Ñонально имеет значение. Ðапример, когда Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽ над багами, чиÑло уже иÑправленных мною багов мне Ñовершенно неинтереÑно, ведь оно не завиÑит от общего чиÑла багов, которые вÑе еще возможно ÑущеÑтвуют. Кроме того, Ñто чиÑло отражает мой вклад в Ñамом малом из вÑех возможных ракурÑов. Ðо ÑоотноÑить каждый иÑправленный баг Ñо ÑчаÑтливым клиентом Ð´Ð»Ñ Ð¼ÐµÐ½Ñ, наоборот, очень ценно, и Ñлужит мотивацией в работе. Следующее: [Как заÑлужить доверие](02-How-to-be-Widely-Trusted.md) diff --git a/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md index b81cebf..c326233 100644 --- a/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md +++ b/ru/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -10,6 +10,6 @@ Улучшение компромиÑÑа между объемом памÑти и ÑкороÑтью вычиÑлений чаÑто может привеÑти к кардинальному изменению одного из Ñтих параметров. Перед тем, как начать работу, ÑпроÑите ÑебÑ, дейÑтвительно ли то, что вы ÑобираетеÑÑŒ улучшить, нуждаетÑÑ Ð² Ñтом. Работать Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð°Ð¼Ð¸ интереÑно, но не забывайте, что улучшение того, что не ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹, не принеÑет заметной разницы в программу и увеличит нагрузку на теÑтирование. -Ð’ Ñовременных компьютерах памÑть кажетÑÑ Ð´ÐµÑˆÐµÐ²Ñ‹Ð¼ реÑурÑом, потому что в отличие от процеÑÑорного времени вы не видите, как она иÑпользуетÑÑ, пока не упретеÑÑŒ в потолок. Ðо тогда Ñбой может оказатьÑÑ ÐºÐ°Ñ‚Ð°ÑтрофичеÑким. СущеÑтвуют и другие Ñкрытые затраты на иÑпользование памÑти, такие как ваш Ñффект на Ñторонние программы, который должен быть поÑтоÑнным, и Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° ее выделение и оÑвобождение. Обдумайте Ñти моменты перед тем, как вы пожертвуете памÑтью ради уÑкорениÑ. +Ð’ Ñовременных компьютерах памÑть кажетÑÑ Ð´ÐµÑˆÐµÐ²Ñ‹Ð¼ реÑурÑом, потому что в отличие от процеÑÑорного времени вы не видите, как она иÑпользуетÑÑ, пока не иÑчерпаете целиком. Ðо тогда Ñбой может оказатьÑÑ ÐºÐ°Ñ‚Ð°ÑтрофичеÑким. СущеÑтвуют и другие Ñкрытые затраты на иÑпользование памÑти, такие как ваш Ñффект на Ñторонние программы, который должен быть поÑтоÑнным, и Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° ее выделение и оÑвобождение. Обдумайте Ñти моменты перед тем, как вы пожертвуете памÑтью ради уÑкорениÑ. Следующее: [Как проводить ÑтреÑÑ-теÑтирование](04-How-to-Stress-Test.md) diff --git a/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md index ef47144..5a02664 100644 --- a/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md +++ b/ru/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -4,10 +4,10 @@ План Ð´Ð»Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñледует разрабатывать на ранних ÑтадиÑÑ… проекта, так как чаÑто он помогает в точноÑти проÑÑнить, что именно ожидаетÑÑ Ð¾Ñ‚ ÑиÑтемы. Две Ñекунды на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²ÐµÐ±-Ñтраницы Ñто позорный провал или оглушительный уÑпех? ДоÑтаточно ли 500 одновременных пользователей? Ответы завиÑÑÑ‚ от ÑиÑтемы, но перед началом ее Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ… уже Ñтоит знать. Чтобы быть полезным, ÑтреÑÑ-теÑтирование должно доÑтаточно хорошо имитировать дейÑтвительную нагрузку. Ð’Ñ€Ñд ли возможно Ñмоделировать 500 одновременных хаотичных и непредÑказуемых пользователей, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñть ÑиÑтемы, но как минимум можно Ñоздать 500 ÑимулÑций и попытатьÑÑ Ñмоделировать некоторую чаÑть того, что будут делать реальные пользователи. -Во Ð²Ñ€ÐµÐ¼Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð½Ð¸Ñ‚Ðµ Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ нагрузки и увеличивайте ее по одному параметру ÑиÑтемы, например, по чаÑтоте входных запроÑов или по величине входных данных, пока вы не доÑтигнете потолка ÑиÑтемы. ЕÑли вы доÑтигли его Ñлишком рано, чтобы удовлетворить требованиÑм к ÑиÑтеме, выÑÑните, какой реÑÑƒÑ€Ñ ÑвлÑетÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом в ÑиÑтеме (как правило, Ñильно не хватает чего-то одного). Что Ñто: памÑть, процеÑÑор, операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети или задержка данных? Затем выÑÑните, как вы можете отодвинуть потолок. Заметьте, что повышение потолка или увеличение нагрузки, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ÑправлÑетÑÑ ÑиÑтема, может не помочь или даже Ñнизить производительноÑть Ð´Ð»Ñ Ð»ÐµÐ³ÐºÐ¾Ð½Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемы. Обычно производительноÑть под большой нагрузкой важнее производительноÑти под маленькой. +Во Ð²Ñ€ÐµÐ¼Ñ ÑтреÑÑ-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð½Ð¸Ñ‚Ðµ Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ нагрузки и увеличивайте ее по одному параметру ÑиÑтемы, например, по чаÑтоте входных запроÑов или по величине входных данных, пока вы не доÑтигнете потолка ÑиÑтемы. ЕÑли вы доÑтигли его Ñлишком рано, чтобы удовлетворить требованиÑм к ÑиÑтеме, выÑÑните, какой реÑÑƒÑ€Ñ ÑвлÑетÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом в ÑиÑтеме (как правило, Ñильно не хватает чего-то одного). Что Ñто: памÑть, процеÑÑор, операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети или задержка данных? Затем выÑÑните, как вы можете отодвинуть потолок. Обратите внимание, что повышение потолка или увеличение нагрузки, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ÑправлÑетÑÑ ÑиÑтема, может не помочь или даже Ñнизить производительноÑть Ð´Ð»Ñ Ð»ÐµÐ³ÐºÐ¾Ð½Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемы. Обычно производительноÑть под большой нагрузкой важнее производительноÑти под маленькой. Возможно, вам придетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ предÑтавление о неÑкольких разных параметрах ÑиÑтемы, чтобы поÑтроить ее мыÑленную модель. ЗдеÑÑŒ не обойтиÑÑŒ какой-то одной техникой. Ðапример, логирование чаÑто дает хорошую картину о реальном времени на иÑполнение команд между Ð´Ð²ÑƒÐ¼Ñ ÑобытиÑми в ÑиÑтеме, но еÑли оно внедрено небрежно, то не дает Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¾Ð± иÑпользовании памÑти или даже о размере Ñтруктур данных. Ðналогично, в Ñовременных ÑиÑтемах могут взаимодейÑтвовать неÑколько компьютеров и множеÑтво программных ÑиÑтем. Когда вы упираетеÑÑŒ в потолок (то еÑть производительноÑть нелинейно завиÑит от размера входных данных), Ñти Ñторонние программы могут оказатьÑÑ ÑƒÐ·ÐºÐ¸Ð¼ меÑтом. ПредÑтавление о работе Ñтих программ, даже в виде проÑтого Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ процеÑÑоров на вÑех задейÑтвованных машинах, может оказатьÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ полезным. -Знать потолок ÑиÑтемы важно не только Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы отодвинуть его, но и Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑказуемоÑти, чтобы Ñффективно управлÑть ÑвÑзанным Ñ Ð½ÐµÐ¹ бизнеÑ-процеÑÑами. +Знать потолок ÑиÑтемы важно не только Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы отодвинуть его, но и Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑказуемоÑти, чтобы Ñффективно управлÑть ÑвÑзанными Ñ ÑиÑтемой бизнеÑ-процеÑÑами. Следующее: [Как баланÑировать краткоÑть и абÑтракцию](05-How-to-Balance-Brevity-and-Abstraction.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index ad758d3..7361e3b 100644 --- a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -1,6 +1,6 @@ # Как баланÑировать краткоÑть и абÑтракцию [//]: # (Version:1.0.0) -ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто ключ к программированию. Следует тщательно выбирать, наÑколько абÑтрактны вам Ñледует быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракций, чем в дейÑтвительноÑти необходимо. Один из признаков такой Ñитуации: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат только Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода надо ÑоизмерÑть Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаюмую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и кажетÑÑ, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которое чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. Ðа Ñту тему Ñ Ð¾Ñ‡ÐµÐ½ÑŒ рекомендую прочеÑть Ñтатью Пола ГрÑхема ['Succinctness is Power'](http://www.paulgraham.com/power.html). +ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто оÑнова программированиÑ. Следует тщательно выбирать, наÑколько абÑтрактным вам Ñледует быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракций, чем в дейÑтвительноÑти необходимо. Один из признаков такой Ñитуации: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат только Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода надо ÑоизмерÑть Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаюмую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и кажетÑÑ, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которое чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. Ðа Ñту тему Ñ Ð¾Ñ‡ÐµÐ½ÑŒ рекомендую прочеÑть Ñтатью Пола ГрÑхема ['Succinctness is Power'](http://www.paulgraham.com/power.html). СущеÑтвует определенные догмы, ÑвÑзанные Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ полезными техниками как *Ñокрытие информации* и *объектно-ориентированное программирование*, применение которых иногда заходит Ñлишком далеко. Они позволÑÑŽÑ‚ пиÑать код более абÑтрактно и предвидеть возможные в нем изменениÑ. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что не Ñледует пиÑать Ñлишком много ÑпекулÑтивного кода. Ðапример, принÑто прÑтать целочиÑленные переменные в объектах за публичными методами клаÑÑа, так что Ñама Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ видна, а доÑтупен только Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº ней. Это позволÑет изменить реализацию Ñтой переменной без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ³Ð¾ Ñти методы кода. Возможно, Ñто подходит Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ библиотек, где необходимо предоÑтавить уÑтойчивый API. Ðо Ñ Ð½Ðµ думаю, что преимущеÑтва Ñтого подхода перевешивают избыток кода, потраченного на него, оÑобенно, когда Ð¼Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° владеет вызывающим кодом и может перепиÑать как его, так и вызываемый код. Четыре или пÑть Ñтрок кода - Ñто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ†ÐµÐ½Ð° за такое умозрительное преимущеÑтво. diff --git a/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md index 06e774a..d7cd842 100644 --- a/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md +++ b/ru/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -6,7 +6,7 @@ Хороший учитель не заменит практику, но гораздо лучше книги. Что вы можете предложить потенциальному учителю в обмен на его знаниÑ? Как минимум, вы можете предложить уÑердно учитьÑÑ, так что Ð²Ñ€ÐµÐ¼Ñ Ñтого человека не будет потрачено впуÑтую. -ПоÑтарайтеÑÑŒ уговорить Ñвоего боÑÑа оплатить вам формальное обучение, но помните, что чаще вÑего гораздо полезнее потратить то же Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° Ñвободную игру Ñ Ñ‚ÐµÐ¼ навыком, который вы хотите оÑвоить. Однако, в нашем неÑовершенном мире легче попроÑить об обучении, чем о времени на Ñвободное полуизучение-полуигру, хоть множеÑтво обучений и ÑводÑÑ‚ÑÑ ÐºÐ¾ Ñну на лекциÑÑ… в ожидании обеда. +ПоÑтарайтеÑÑŒ уговорить Ñвоего боÑÑа оплатить вам формальное обучение, но помните, что чаще вÑего гораздо полезнее потратить то же Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° Ñвободную игру Ñ Ñ‚ÐµÐ¼ навыком, который вы хотите оÑвоить. Однако, в нашем неÑовершенном мире легче попроÑить об обучении, чем о времени на Ñвободное полуизучение-полуигру, хоть множеÑтво формальных обучений и ÑводÑÑ‚ÑÑ ÐºÐ¾ Ñну на лекциÑÑ… в ожидании обеда. ЕÑли вы руководитель, поÑтарайтеÑÑŒ понÑть, как учатÑÑ Ð²Ð°ÑˆÐ¸ подчиненные и помогите им, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°Ñ Ð¸Ð¼ такие проекты и заданиÑ, которые им по плечу и одновременно позволÑÑ‚ развить интереÑные им навыки. Ðе забывайте, что Ñамые важные навыки программиÑта вовÑе не техничеÑкие. Дайте Ñвоей команде Ð²Ñ€ÐµÐ¼Ñ ÑкÑпериментировать и практикуйте в команде ÑмелоÑть, чеÑтноÑть и взаимодейÑтвие. diff --git a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md index 6609d44..e624185 100644 --- a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -2,10 +2,10 @@ [//]: # (Version:1.0.0) СущеÑтвуют Ñзыки, то еÑть формально определенные ÑинтакÑичеÑкие ÑиÑтемы, которые ÑвлÑÑŽÑ‚ÑÑ Ð½Ðµ Ñзыками программированиÑ, а Ñзыками взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем, Ñоздаными Ñпециально Ð´Ð»Ñ Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Ñтандартизацию. Ð’ 2003 году Ñамые важные из них Ñто UML, XML и SQL. Ð’Ñ‹ должны быть знакомы Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ из них, чтобы уметь иÑпользовать их и понимать, когда их Ñледует применÑть. -UML - Ñто Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñхем и диаграмм, опиÑывающих архитектуру. Ее прелеÑть в том, что она одновременно и визуальна, и формальна, и ÑпоÑобна передать огромное количеÑтво информации, еÑли автор и его Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽÑ‚ UML. Вам Ñледует знать UML, потому что иногда архитектуру опиÑывают Ñ ÐµÐµ помощью. СущеÑтвуют очень полезные инÑтрументы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÑÑионально выглÑдÑщих Ñхем UML. Во многих ÑлучаÑÑ…, UML Ñлишком ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема, и Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° находил, что Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… Ñхем проще иÑпользовать Ñтрелки и прÑмоугольники. Ðо Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что изучение UML полезно так же, как и изучение латыни. +UML - Ñто Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñхем и диаграмм, опиÑывающих архитектуру. Ее прелеÑть в том, что она одновременно и визуальна, и формальна, и ÑпоÑобна передать огромное количеÑтво информации, еÑли автор и его Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽÑ‚ UML. Вам Ñледует знать UML, потому что иногда архитектуру опиÑывают Ñ ÐµÐµ помощью. СущеÑтвуют очень полезные инÑтрументы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ„ÐµÑÑионально выглÑдÑщих Ñхем UML. Во многих ÑлучаÑÑ…, UML Ñлишком ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема, и Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° находил, что Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… Ñхем проще иÑпользовать Ñтрелки и прÑмоугольники. Ðо Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что изучение UML полезно так же, как и изучение латыни. -XML - Ñто Ñтандарт Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… Ñтандартов. Это не решение проблем передачи данных, Ñ…Ð¾Ñ‚Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° вы увидите, что XML предÑтавлÑÑŽÑ‚ именно так. Ðо Ñкорее, Ñто ÑредÑтво автоматизации Ñамой Ñкучной работы по обмену данных, а именно Ñтруктурное предÑтавление данных в линейной поÑледовательноÑти и обратный ÑинтакÑичеÑкий анализ Ñтого поÑледовательноÑти в Ñтруктуру данных. UML предоÑтавлÑет неплохую проверку типов и правильноÑти данных, Ñ…Ð¾Ñ‚Ñ Ñто лишь Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть того, что вам понадобитÑÑ Ð² работе. +XML - Ñто Ñтандарт Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… Ñтандартов. Это не решение проблем передачи данных, Ñ…Ð¾Ñ‚Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° вы увидите, что XML предÑтавлÑÑŽÑ‚ именно так. Ðо Ñкорее, Ñто ÑредÑтво автоматизации Ñамой Ñкучной работы по обмену данных, а именно Ñтруктурное предÑтавление данных в линейной поÑледовательноÑти и обратное преобразование Ñтой поÑледовательноÑти в Ñтруктуру данных. UML предоÑтавлÑет неплохую проверку типов и правильноÑти данных, Ñ…Ð¾Ñ‚Ñ Ñто лишь Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть того, что вам понадобитÑÑ Ð² работе. -SQL - Ñто очень мощный и богатый Ñзык запроÑов и Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. Это не ÑовÑем Ñзык программированиÑ. У него еÑть много вариаций, в оÑновном завиÑимых от конкретного продукта, который его иÑпользует. Они не так важны как Ñтандартное Ñдро Ñзыка. SQL - Ñто оÑнова вÑех релÑционных баз данных. Ð’Ñ‹ можете не работать в облаÑти, где требуетÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ такого типа баз данных, но вам вÑе равно Ñледует иметь базовое предÑтавление о них и о ÑинтакÑиÑе и назначении SQL. +SQL - Ñто очень мощный и богатый Ñзык запроÑов и Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. Это не ÑовÑем Ñзык программированиÑ. У него еÑть много вариаций, в оÑновном завиÑимых от конкретного продукта, который его иÑпользует. Они не так важны как Ñтандартное Ñдро Ñзыка. SQL - Ñто оÑнова вÑех релÑционных баз данных. Ð’Ñ‹ можете не работать в облаÑти, где требуетÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ такого типа баз данных, но вам вÑе равно Ñледует иметь базовое предÑтавление о них, о ÑинтакÑиÑе и о назначении SQL. Следующее: [Стандартные технологии](10-Heavy-Tools.md) diff --git a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index 6233a81..f93871e 100644 --- a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -9,6 +9,6 @@ - МатематичеÑкие бибилиотеки - OpenGL - XML-парÑеры -- Элеткронные таблицы +- Электронные таблицы Следующее: [Как анализировать данные](11-How-to-analyze-data.md) diff --git a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index 8bc7d0d..fd83cb3 100644 --- a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -6,6 +6,8 @@ Ðеважно, на каком Ñтапе вы начинаете работать Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, они вÑегда оÑтаютÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ заботой в хорошо Ñпроектированном приложении. ЕÑли вы внимательно поÑмотрите, как бизнеÑ-аналитик извлекает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· запроÑов клиентов, то поймете, что данные играют фундаментальную роль. Ðналитик Ñоздает так называемые диаграммы потоков данных, где указаны иÑточники данных, и обозначен поток информации. Определив, какие данные будут чаÑтью ÑиÑтемы, архитектор начнет формировать иÑточники данных Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð°Ð· данных, протоколов обмена данными и форматов файлов. ПоÑле Ñтого задачу можно передавать программиÑту. Ðо процеÑÑ Ð½Ð° Ñтом не заканчиваетÑÑ, потому что вы (программиÑÑ‚) даже поÑле подобной тщательной обработки данных должны проанализировать их, чтобы выполнить задачу оптимальным ÑпоÑобом. Ð’ оÑнове вашей работы лежит Ð¸Ð´ÐµÑ ÐиклауÑа Вирта, ÑÐ¾Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑкольких Ñзыков программированиÑ. "Ðлгоритмы + Структуры данных = Программы". Ðлгоритм никогда не ÑущеÑтвует отдельно, Ð´ÐµÐ»Ð°Ñ Ñ‡Ñ‚Ð¾-то Ñам по Ñебе. Каждый алгоритм обÑзательно взаимодейÑтвует как минимум Ñ ÐºÐ°ÐºÐ¾Ð¹-то чаÑтью данных. -Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Преположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знанием нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтокнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. +Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. + +Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Преположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знанием нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтокнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. Следующее: [Командные навыки. Как управлÑть временем разработки](../Team-Skills/01-How-to-Manage-Development-Time.md) \ No newline at end of file diff --git a/ru/2-Intermediate/README.md b/ru/2-Intermediate/README.md index ea278b1..537a370 100644 --- a/ru/2-Intermediate/README.md +++ b/ru/2-Intermediate/README.md @@ -1,4 +1,4 @@ -# 2. Разработчик Ñреднего ÑƒÑ€Ð¾Ð²Ð½Ñ +# 2. ПрограммиÑÑ‚ Ñреднего ÑƒÑ€Ð¾Ð²Ð½Ñ [//]: # (Version:1.0.0) - Личные навыки - [Как ÑохранÑть мотивацию](Personal-Skills/01-How-to-Stay-Motivated.md) diff --git a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index 28bb771..377ded9 100644 --- a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -1,8 +1,8 @@ # Как управлÑть временем разработки [//]: # (Version:1.0.0) -Чтобы управлÑть временем разработки, поддерживайте четкий и актуальный проектный план. Проектный план - Ñто оценка временных затрат, график, набор промежуточных Ñтапов Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑÑа и раÑпределение времени вашей команды на каждое задание. Он также должен включать другие вещи, о которых важно помнить, такие как вÑтречи Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ теÑтированиÑ, подготовка документации, заказ рабочего оборудованиÑ. ЕÑли вы работаете в команде, проектный план должен быть ÑоглаÑованным решением, как на Ñтарте проекта, там и по его ходу. +Чтобы управлÑть временем разработки, поддерживайте четкий и актуальный проектный план. Проектный план - Ñто оценка временных затрат, график, набор промежуточных Ñтапов Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑÑа и раÑпределение времени вашей команды на каждое задание. Он также должен включать другие вещи, о которых важно помнить: вÑтречи Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ теÑтированиÑ, подготовка документации, заказ рабочего оборудованиÑ. ЕÑли вы работаете в команде, проектный план должен быть ÑоглаÑованным решением, как на Ñтарте проекта, там и по его ходу. -Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком подробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñти Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ°ÑаютÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… людей. План и ваша ÑкÑпертиза позволÑть вам понÑть, Ñледует ли передать чаÑть задач одного члена команды другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте трекер, чтобы поддерживать емкоÑть и актуальноÑть задач. +Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком подробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñти Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ°ÑаютÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… людей. План и ваша ÑкÑпертиза позволÑÑ‚ вам понÑть, Ñледует ли передать чаÑть задач одного члена команды другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте трекер, чтобы поддерживать емкоÑть и актуальноÑть задач. ЕÑли вы не уÑпеваете выполнить Ñтап, Ñледует немедленно предпринÑть что-то, как минимум проинформировать боÑÑа о том, что запланированное завершение проекта ÑмеÑтитÑÑ Ð½Ð° некоторое времÑ. Стоило бы начать Ñ Ñ‚Ð¾Ð³Ð¾, что оценка и раÑпиÑание никогда не будут идеальны, но они дают иллюзию, что вы Ñможете наверÑтать пропущенные дни в конце проекта. Может быть. Ðо так же вероÑтно, что вы недооценили Ñту чаÑть проекта, как и то, что вы ее переоценили. Так что запланированное завершение проекта уже ÑмеÑтилоÑÑŒ, нравитÑÑ Ð²Ð°Ð¼ Ñто или нет. diff --git a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index 04723a5..1c62c8b 100644 --- a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -6,6 +6,6 @@ ЕÑли Ñтороннее программное обеÑпечение вÑе же ÑущеÑтвует, оно по-прежнему неÑет Ñ Ñобой риÑки, но по крайней мере Ñти риÑки можно преодолеть. ЕÑли вы предполагаете иÑпользование Ñторонних программ, уже на ранней Ñтадии проекта Ñледует поÑвÑтить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° их оценку. Ðикому не понравитÑÑ ÑƒÑлышать, что потребуетÑÑ Ð´Ð²Ðµ недели, а то и два меÑÑца на оценку пригодноÑти вÑех трех Ñторонних программ, но Ñто то, что надо Ñделать как можно раньше. СтоимоÑть интеграции Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ без надлежащей оценки задейÑтвованных Ñторонних программ. -Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно, и в оÑновном им владеют ÑкÑперты. Ð’Ñ‹ можете ÑÑкономить кучу времени, еÑли Ñможете найти ÑкÑпертов. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. Ðикогда не вноÑите в график еще не выпущенное Ñтороннее прграммное обеÑпечение. +Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно, и в оÑновном им владеют ÑкÑперты. Ð’Ñ‹ можете ÑÑкономить кучу времени, еÑли Ñможете их найти. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. Ðикогда не вноÑите в график еще не выпущенное Ñтороннее программное обеÑпечение. Следующее: [Как руководить конÑультантами](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md index 8e5c43b..9320741 100644 --- a/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md +++ b/ru/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -1,6 +1,6 @@ # Как руководить конÑультантами [//]: # (Version:1.0.0) -ИÑпользуйте конÑультантов, но не полагайтеÑÑŒ на них. Эти замечательные люди заÑлуживают вÑÑчеÑкого уважениÑ. ПоÑкольку они наблюдали множеÑтво проектов, они зачаÑтую знают больше о ÑпецифичеÑких технологиÑÑ… или даже техниках программированиÑ, чем вы. Лучший ÑпоÑоб иÑпользовать их как штатных преподавателей, которые могут научить на ÑобÑтвенном примере. +ИÑпользуйте конÑультантов, но не полагайтеÑÑŒ на них. Эти замечательные люди заÑлуживают вÑÑчеÑкого уважениÑ. ПоÑкольку они наблюдали множеÑтво проектов, они зачаÑтую знают больше о ÑпецифичеÑких технологиÑÑ… или даже техниках программированиÑ, чем вы. Лучший ÑпоÑоб иÑпользовать их - в качеÑтве штатных преподавателей, которые могут научить на ÑобÑтвенном примере. Однако, обычно конÑультанты не могут Ñтать чаÑтью команды в том ÑмыÑле, что и обычные Ñотрудники, Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ потому, что у Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ не хватить времени изучить их Ñильные и Ñлабые Ñтороны. Их финанÑовые обÑзательÑтва гораздо ниже. Они могут легко уйти. Они меньше выигрывают, еÑли ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð² целом процветает. Ðекоторые из них будут хороши, некоторые Ñредними, некоторые плохими конÑультантами. ПоÑкольку ваш выбор конÑультантов будет не так тщателен, как подбор Ñотрудников, чаще вы будете вÑтречать плохих. diff --git a/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md index 2df240f..d8ad7c1 100644 --- a/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md +++ b/ru/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -1,6 +1,6 @@ # Как чеÑтно выражать неÑоглаÑие [//]: # (Version:1.0.0) -ÐеÑоглаÑие Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть принÑть хорошее решение, но его Ñледует выражать аккуратно. ÐадеюÑÑŒ, обычно вы Ñпокойно выражаете Ñвою точку зрениÑ, Ð²Ð°Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñлушают, а затем принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. Ð’ Ñтом Ñлучае больше нечего Ñказать, и вам только оÑтаетÑÑ Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ, поддерживаете ли вы решение, даже еÑли вы Ñ Ð½Ð¸Ð¼ неÑоглаÑны. ЕÑли вы можете поддержать решение неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñвое неÑоглаÑие, Ñкажите об Ñтом. Так вы покажете Ñвоб ценноÑть: вы незавиÑимы, имеете Ñвое мнение и не идете на поводу, но одновременно уважаете принÑтое решение и вÑÑŽ команду. +ÐеÑоглаÑие Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть принÑть хорошее решение, но его Ñледует выражать аккуратно. ÐадеюÑÑŒ, обычно вы Ñпокойно выражаете Ñвою точку зрениÑ, Ð²Ð°Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ñлушают, а затем принимаетÑÑ Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ. Ð’ Ñтом Ñлучае больше нечего Ñказать, и вам только оÑтаетÑÑ Ñ€ÐµÑˆÐ¸Ñ‚ÑŒ, поддерживать ли решение неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñвое неÑоглаÑие Ñ Ð½Ð¸Ð¼. ЕÑли вы вÑе же можете поддержать решение, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы неÑоглаÑны, Ñкажите об Ñтом. Так вы покажете Ñвою ценноÑть: вы незавиÑимы, имеете Ñвое мнение и не идете на поводу, но одновременно уважаете принÑтое решение и вÑÑŽ команду. Иногда решение, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы неÑоглаÑны, принимаетÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ñƒ, что те, кто его принимает, не имели возможноÑти полноÑтью оценить ваше мнение. Ð’ Ñтом Ñлучае, иÑÑ…Ð¾Ð´Ñ Ð¸Ð· пользы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ или команды вам Ñтоит прикинуть, поднимать ли вопроÑ. ЕÑли Ñто Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð½Ð° ваш взглÑд ошибка, то, возможно, не Ñтоит переÑматривать решение. ЕÑли же речь идет о Ñерьезной ошибке, то Ñтоит выдвинуть возражениÑ. diff --git a/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md index 59996bb..519eefd 100644 --- a/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md +++ b/ru/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -1,6 +1,6 @@ # Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика [//]: # (Version:1.0.0) -Давление выхода на рынок - Ñто необходимоÑть быÑтро выпуÑтить хороший продукт. Это хорошо, поÑкольку отражает финанÑовую дейÑтвительноÑть и до некоторой Ñтепени Ñто полезное давление. Давление графика - Ñто давление выпуÑтить что-то быÑтрее, чем Ñто возможно, и подобное давление опуÑтошает, оно нездоровое и вÑтречаетÑÑ Ñлишком чаÑто. +Давление выхода на рынок - Ñто необходимоÑть быÑтро выпуÑтить хороший продукт. Это хорошо, поÑкольку отражает финанÑовую дейÑтвительноÑть, и до некоторой Ñтепени Ñто полезное давление. Давление графика - Ñто давление выпуÑтить что-то быÑтрее, чем Ñто возможно, и подобное давление опуÑтошает, оно нездоровое и вÑтречаетÑÑ Ñлишком чаÑто. Давление графика ÑущеÑтвует по неÑкольким причинам. Люди, дающие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтам не до конца ценÑÑ‚ нашу рабочую Ñтику и любовь к профеÑÑии. Возможно, поÑкольку они проецируют ÑобÑтвенное поведение на наÑ, они ожидают, что проÑьба Ñделать задачу быÑтрее заÑтавит Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ уÑерднее. Возможно, Ñто так, но Ñффект от такой проÑьбы очень мал, а ущерб велик. Вдобавок, они не понимают, что в дейÑтвительноÑти значит разработать программное обеÑпечение. Они не могут Ñтого понÑть, не могут разработать ÑиÑтему ÑамоÑтоÑтельно, поÑтому единÑтвенное, что им оÑтаетÑÑ, Ñто наблюдать за давлением выхода на рынок и подталкивать программиÑтов. diff --git a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index bc5528c..b5b9cac 100644 --- a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -6,7 +6,7 @@ - У пользователей еÑть ÑÐ²Ð¾Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°, они будут Ñкорее думать о небольших доработках в вашем продукте, чем о больших улучшениÑÑ… - Мнение одного конкретного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ может предÑтавлÑть общее мнение вÑех пользователей вашего продукта -Ваша обÑзанноÑть - дать пользователÑм не то, что они говорÑÑ‚, что хотÑÑ‚, а то, что они хотÑÑ‚ в деÑтвительноÑти. Однако, лучше вÑего Ñто Ñформулировать и получить от ваших пользователей ответ, что ваше предложение дейÑтвительно отвечает их реальных желаниÑм. Ð¥Ð¾Ñ‚Ñ Ñƒ пользователей может не хватит полного Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ñей картины Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°. Ваша уверенноÑть в ÑобÑтвенных идеÑÑ… на Ñтот Ñчет должна варьироватьÑÑ. Следует одинаково опаÑатьÑÑ ÐºÐ°Ðº ÑамоуверенноÑти, так и ложной ÑкромноÑти, когда речь идет о нуждах вашего пользователÑ. ПрограммиÑты нацелены на проектирование и Ñоздание. ИÑÑледователи рынка нацелены на выÑвление нужд потребителей. Эти два типа людей или два типа Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ñ Ð² одном человеке, гармонично Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ð² ÑвÑзке, дают наилучший ÑˆÐ°Ð½Ñ Ñформировать правильное понимание пользователÑ. +Ваша обÑзанноÑть - дать пользователÑм не то, что они говорÑÑ‚, что хотÑÑ‚, а то, что они хотÑÑ‚ в дейÑтвительноÑти. Однако, лучше вÑего Ñто Ñформулировать и получить от ваших пользователей ответ, что ваше предложение дейÑтвительно отвечает их реальным желаниÑм. Ð¥Ð¾Ñ‚Ñ Ñƒ пользователей может не хватит полного Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ñей картины Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°. Ваша уверенноÑть в ÑобÑтвенных идеÑÑ… на Ñтот Ñчет должна варьироватьÑÑ. Следует одинаково опаÑатьÑÑ ÐºÐ°Ðº ÑамоуверенноÑти, так и ложной ÑкромноÑти, когда речь идет о нуждах вашего пользователÑ. ПрограммиÑты нацелены на проектирование и Ñоздание. ИÑÑледователи рынка нацелены на выÑвление нужд потребителей. Эти два типа людей или два типа Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ñ Ð² одном человеке, гармонично Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ð² ÑвÑзке, дают наилучший ÑˆÐ°Ð½Ñ Ñформировать правильное понимание пользователÑ. Чем больше времени вы проведете Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми, тем лучше вы Ñможете понÑть, что будет лучшим Ð´Ð»Ñ Ð½Ð¸Ñ…. Вам Ñтоит проверÑть Ñвои идеи на пользователÑÑ… так чаÑто, наÑколько Ñто вообще возможно. Вам Ñтоит обедать Ñ Ð½Ð¸Ð¼Ð¸, еÑли Ñто возможно. diff --git a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index d646634..1809c04 100644 --- a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -8,6 +8,6 @@ ЕÑли вы чуÑтвуете, что Ð²Ð°Ñ Ð¾Ð±Ð¾ÑˆÐ»Ð¸ Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸ÐµÐ¼, поговорите Ñ Ð±Ð¾ÑÑом об Ñтом. СпроÑите его в Ñвном виде, что вы должны делать, чтобы получить повышение, и поÑтарайтеÑÑŒ Ñделать Ñто. Это кажетÑÑ Ð±Ð°Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼, но чаÑто ваше предÑтавление того, что вам надо делать, отличаетÑÑ Ð¾Ñ‚ предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Кроме того, такой разговор в некотором ÑмыÑле подтолкнет вашего боÑÑа. -БольшинÑтво программиÑтов Ñкорее вÑего имеют преувеличенное предÑтавление о ÑобÑтвенных ÑпоÑобноÑÑ‚ÑÑ…, в конце концов, мы вÑе не можем входить в 10% лучших программиÑтов. Однако, Ñ Ð²Ñтречал и людей, которые были очень Ñильно недооценены. ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ, что оценка каждого будет на 100% Ñовпадать Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью, но Ñ Ð´ÑƒÐ¼Ð°ÑŽ, что в общем люди довольно Ñправедливо ÑÐµÐ±Ñ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°ÑŽÑ‚. С одной оговоркой: Ð²Ð°Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ñправедливо оценить без видимоÑти вашей работы. Иногда из-за обÑтоÑтельÑтв или личных качеÑтв кто-то будет не наÑтолько Ñильно заметен. Работа из дома или географичеÑки удаленно от вашей команды и боÑÑа делает Ñто оÑобенно трудным. +БольшинÑтво программиÑтов Ñкорее вÑего имеют преувеличенное предÑтавление о ÑобÑтвенных ÑпоÑобноÑÑ‚ÑÑ…. Ð’ конце концов, мы вÑе не можем входить в 10% лучших программиÑтов. Однако, Ñ Ð²Ñтречал и людей, которые были очень Ñильно недооценены. ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ, что оценка каждого будет на 100% Ñовпадать Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью, но Ñ Ð´ÑƒÐ¼Ð°ÑŽ, что в общем люди довольно Ñправедливо ÑÐµÐ±Ñ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°ÑŽÑ‚. С одной оговоркой: Ð²Ð°Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ñправедливо оценить без видимоÑти вашей работы. Иногда из-за обÑтоÑтельÑтв или личных качеÑтв кто-то будет не наÑтолько Ñильно заметен. Работа из дома или географичеÑки удаленно от вашей команды и боÑÑа делает Ñто оÑобенно трудным. Следующее: [Управление командой. Как развивать таланты](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/ru/3-Advanced/README.md b/ru/3-Advanced/README.md index 3e314ce..c0b4f7b 100644 --- a/ru/3-Advanced/README.md +++ b/ru/3-Advanced/README.md @@ -1,6 +1,6 @@ -# 3. Advanced +# 3. Продвинутый программиÑÑ‚ [//]: # (Version:1.0.0) -- ТехнологичеÑÐºÐ°Ñ ÑкÑпертиза +- ТехничеÑÐºÐ°Ñ ÑкÑпертиза - [Как отличить Ñложное от невозможного](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - [Как иÑпользовать вÑтроенные Ñзыки](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - [Выбор Ñзыка программированиÑ](Technical-Judgment/03-Choosing-Languages.md) diff --git a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index 950aa56..c4bb3ce 100644 --- a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -1,6 +1,6 @@ # Как развивать таланты -Ðицше преувеличил, когда Ñказал [Stronger]: +Ðицше преувеличил, когда Ñказал[Stronger]: > Ð’ÑÑ‘, что Ð¼ÐµÐ½Ñ Ð½Ðµ убивает, делает Ð¼ÐµÐ½Ñ Ñильнее. diff --git a/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md index 01708c6..8f23481 100644 --- a/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md +++ b/ru/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -4,7 +4,7 @@ ПрограммиÑÑ‚ - Ñто Ñоциальное ÑущеÑтво, и его выживание завиÑит от коммуникации Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹. Продвинутый программиÑÑ‚ - Ñто Ñоциальное ÑущеÑтво, чье удовлетворение завиÑит от коммуникации Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸ за пределами команды. -ПрограммиÑты приноÑÑÑ‚ порÑдок в хаоÑ. Один из интереÑных ÑпоÑобов делать Ñто - внеÑти какое-нибудь предложение за пределами вашей команды. Это можно Ñделать в виде черновика или уÑтно. Такой подход имеет огромное преимущеÑтво в том, что очерчивает рамки диÑкуÑÑии. Он также Ñтавит Ð²Ð°Ñ Ð² позицию критикуемого и может привеÑти к отвержению и пренебрежению. Продвинутый программиÑÑ‚ должен быть готов к Ñтому, ведь у него еÑть уникальные возможноÑти, а значит, и ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть. Предприниматели, которые не ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, нуждаютÑÑ Ð² том, чтобы программиÑты проÑвлÑли инициативу хоть в каком-то виде. ПрограммиÑты - Ñто та чаÑть моÑта между идеÑми и дейÑтвительноÑтью, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ð¸Ñ€Ð°ÐµÑ‚ÑÑ Ð½Ð° поÑледнее. +ПрограммиÑты приноÑÑÑ‚ порÑдок в хаоÑ. Один из интереÑных ÑпоÑобов делать Ñто - внеÑти какое-нибудь предложение за пределами вашей команды. Это можно Ñделать в виде черновика или уÑтно. Такой подход имеет огромное преимущеÑтво в том, что очерчивает рамки диÑкуÑÑии. Он также Ñтавит Ð²Ð°Ñ Ð² позицию критикуемого и может привеÑти к отказу и игнорированию. Продвинутый программиÑÑ‚ должен быть готов к Ñтому, ведь у него еÑть уникальные возможноÑти, а значит, и ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть. Предприниматели, которые не ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтами, нуждаютÑÑ Ð² том, чтобы программиÑты проÑвлÑли инициативу хоть в каком-то виде. ПрограммиÑты - Ñто та чаÑть моÑта между идеÑми и дейÑтвительноÑтью, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ð¸Ñ€Ð°ÐµÑ‚ÑÑ Ð½Ð° поÑледнее. Я вÑе еще не оÑвоил до конца навык взаимодейÑтвиÑ, но что Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ делать, можно выразить как четырехÑторонний подход. ПоÑле того, как Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð¶Ñƒ Ñвои идеи в порÑдок и полноÑтью готов, Ñ ÑтараюÑÑŒ Ñообщить о них уÑтно, вручаю нужным людÑм черновой наброÑок (на бумаге или в Ñлектронном виде), показываю демо и затем терпеливо повторÑÑŽ процеÑÑ. Я думаю, что чаÑто мы недоÑтаточно терпеливы Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñложного общениÑ. Ðе Ñтоит раÑÑтраиватьÑÑ, еÑли ваши идеи не были принÑты Ñразу. ЕÑли вы вложили много уÑилий в их подготовку, никто не будет думать о Ð²Ð°Ñ Ð¿Ð»Ð¾Ñ…Ð¾ из-за отказа. diff --git a/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md index 78bc895..67fc4fd 100644 --- a/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md +++ b/ru/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -6,7 +6,7 @@ - ПрограммиÑтов можно Ñравнивать. (ПрограммиÑты очень Ñильно отличаютÑÑ Ð´Ñ€ÑƒÐ³ от друга) - Ð’ проект можно добавить реÑурÑов, чтобы уÑкорить его. (ÐšÐ¾Ð¼Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ людьми в проекте почти вÑегда Ñкорее ведет к замедлению проекта, чем к уÑкорению) - Разработку программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ надежно оценить по времени и затратам. (Это невозможно даже теоретичеÑки) -- ПроизводительноÑть программиÑтов можно измерить в рамках одной проÑтой метрики, например, в Ñтроках кода. (ЕÑли качеÑтво в емкоÑти, то избыточные Ñтроки кода Ñто плохо, а не хорошо) +- ПроизводительноÑть программиÑтов можно измерить одной проÑтой метрикой, например, в Ñтроках кода. (ЕÑли качеÑтво в емкоÑти, то избыточные Ñтроки кода Ñто плохо, а не хорошо) ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть, вы можете попытатьÑÑ Ð¾Ð±ÑŠÑÑнить Ñти мифы, но не раÑÑтраивайтеÑÑŒ, еÑли у Ð²Ð°Ñ Ð½Ðµ получитÑÑ. Ðе портьте Ñебе репутацию воинÑтвенным противоÑтоÑнием Ñтим мифам. Каждый из них поддерживает идею менеджеров о том, что у них еÑть реальный контроль над тем, что проиÑходит в проекте. Ðо правда в том, что менеджеры только упрощают процеÑÑ, еÑли они хороши, и мешают ему в противном Ñлучае. diff --git a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md index b423ba2..d97c9d8 100644 --- a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md +++ b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -1,6 +1,6 @@ # Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом -Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организционный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, размещение компании на бирже, маÑÑовый наем Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. +Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организционный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, размещение компании на бирже, маÑÑовый найм Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. > ПрограммиÑты могут Ñоздавать и поддерживать продукт. diff --git a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index 717992f..0017993 100644 --- a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -2,7 +2,7 @@ Ð’Ñтраивание Ñзыка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑиÑтему обладает почти ÑротичеÑким притÑжением Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта. Это одно из Ñамых творчеÑких Ñвершений, которые он может Ñделать. Ð’Ñтроенный Ñзык делает ÑиÑтему невероÑтно мощной и позволит вам иÑпользовать ее Ñамые творчеÑкие возможноÑти. Это превратит ÑиÑтему в вашего друга. -У лучших теÑтовых редакторов еÑть вÑтроенные Ñзыки программированиÑ. Это можно иÑпользовать в той мере, в какой Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ овладеть Ñтими Ñзыками. Конечно, можно Ñделать иÑпользование вÑтроенного Ñзыка необÑзательным, как Ñто делаетÑÑ Ð² текÑтовых редакторах, так что ими пользуютÑÑ Ð¾Ð¿Ñ‹Ñ‚Ð½Ñ‹Ðµ пользователи, а оÑтальным они и не нужны. +У лучших теÑтовых редакторов еÑть вÑтроенные Ñзыки программированиÑ. Это можно иÑпользовать в той мере, в какой Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ овладеть Ñтими Ñзыками. Конечно, можно Ñделать иÑпользование вÑтроенного Ñзыка необÑзательным, как Ñто и делаетÑÑ Ð² текÑтовых редакторах, так что ими пользуютÑÑ Ð¾Ð¿Ñ‹Ñ‚Ð½Ñ‹Ðµ пользователи, а оÑтальным они и не нужны. Я и многие другие программиÑты попадали в ловушку ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñтроенных Ñзыков Ñо Ñпециальным назначением. Я попадалÑÑ Ð½Ð° Ñто дважды. Ð’ мире уже ÑущеÑтвует множеÑтво Ñзыков, которые Ñпроектированы Ñпециально Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ñ… целей. Подумайте дважды, прежде чем Ñоздавать еще один. diff --git a/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md index e7efda5..6ea9c91 100644 --- a/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md +++ b/ru/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -12,8 +12,4 @@ Ðекоторые из Ñтих преимущеÑтв чиÑто пÑихологичеÑкие, но пÑÐ¸Ñ…Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñ‚Ð¾Ð¶Ðµ важна. Ð’ конце концов, издержки Ñзыковой тирании перевешивают любые преимущеÑтва, которые она дает. -<<<<<<< HEAD -Следующее: [Правильные компромиÑÑÑ‹. Как ÑправлÑтьÑÑ Ð² давлением графика](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) -======= -Следующее: [Ðахождение компромиÑÑов. Как ÑправлÑтьÑÑ Ð² давлением графика](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) ->>>>>>> 86a634dfe293c0eb66dc413384b0fe7cb1306ea3 +Следующее: [Правильные компромиÑÑÑ‹. Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/ru/5-Bibliography.md b/ru/5-Bibliography.md index a04fc94..874cc14 100644 --- a/ru/5-Bibliography.md +++ b/ru/5-Bibliography.md @@ -14,7 +14,7 @@ [Prag99] Andrew Hunt, David Thomas, and Ward Cunningham. 1999. 020161622X. Addison-Wesley. The Pragmatic Programmer: From Journeyman to Master. -[Stronger] Friedrich Nietzsche. 1889. Twilight of the Idols, "Maxims and Arrows", section 8.. +[Stronger] Friedrich Nietzsche. 1889. Twilight of the Idols, "Maxims and Arrows", section 8. ## Сайты diff --git a/ru/6-History.md b/ru/6-History.md index 165bf7a..40f030c 100644 --- a/ru/6-History.md +++ b/ru/6-History.md @@ -30,7 +30,7 @@ ÐžÑ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтого документа была начата Робртом Л. Ридом в 2000 году и впервые опубликована в Ñлектронном вида в Samizdat Press(http://Samizdat.mines.edu) в 2002 году. Он поÑвÑщен программиÑтам Hire.com. -ПоÑле того, как ÑÑ‚Ð°Ñ‚ÑŒÑ Ð±Ñ‹Ð»Ð° упомÑнута на Slashdot в 2003 году, около 75 человек приÑлали мне пиÑьма Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми и найденными ошибками. Я ценю помощь и вклад каждого из них. Было немало повторов, но Ñти люди внеÑли значимые Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ первые заметили ошибки, которые Ñ Ð¿Ð¾Ð·Ð¶Ðµ иÑправил: Морган МакГуайр, ДÑвид МейÑон, Том Мортел, ninja Programmer на Slashdot, Бен Верк, Роб Хаферник, Марк Хоув, Питер Парейт, Брайан ГрейÑон, Зед Ð. Шоу, Стив, Бенц, МакÑим Йоффе, Эндрю Ву, ДÑвид Джецке и Том Коркоран. +ПоÑле того, как ÑÑ‚Ð°Ñ‚ÑŒÑ Ð±Ñ‹Ð»Ð° упомÑнута на Slashdot в 2003 году, около 75 человек приÑлали мне пиÑьма Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми и найденными ошибками. Я ценю помощь и вклад каждого из них. Было немало повторов, но Ñти люди внеÑли значимые Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ первые заметили ошибки, которые Ñ Ð¿Ð¾Ð·Ð¶Ðµ иÑправил: Морган МакГуайр, ДÑвид МейÑон, Том Мортел, Ninja Programmer на Slashdot, Бен Верк, Роб Хаферник, Марк Хоув, Питер Парейт, Брайан ГрейÑон, Зед Ð. Шоу, Стив, Бенц, МакÑим Йоффе, Эндрю Ву, ДÑвид Джецке и Том Коркоран. Ðаконец, Ñ Ñ…Ð¾Ñ‚ÐµÐ» бы поблагодарить КриÑтину Валлери, Ñ‡ÑŒÑ Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¸ вычитка ÑущеÑтвенно улучшили второй черновик, и УÑйна Ðллена, который побудил мне начать Ñто ÑÑÑе. diff --git a/ru/7-Contributions.md b/ru/7-Contributions.md index d40ba50..db78808 100644 --- a/ru/7-Contributions.md +++ b/ru/7-Contributions.md @@ -1,31 +1,32 @@ -# УчаÑтеи в проекте +# УчаÑтие в проекте [//]: # (Version:1.0.0) -This repository aims to be a community driven project, and your involvement will ultimately help improve the quality of this guide. +Данный репозиторий предназначен Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° Ñ ÑƒÑ‡Ð°Ñтием широкого общеÑтва. Ваш личный вклад ÑущеÑтвенно улучшит качеÑтва данного ÑÑÑе. -## What can I do to contribute? -There are a number of ways to contribute to "How to be a Programmer". +## Как Ñ Ð¼Ð¾Ð³Ñƒ внеÑти Ñвой вклад в проект? +ЕÑть неÑколько ÑпоÑобов внеÑти Ñвой вклад в проект. -- Ideas for new sections -- Improvements to existing sections -- Identifying typos or other issues in sections -- Contributing additional links to resources for sections -- General suggestions for improving the project -- Provide translations of the guide +- Идеи по новым разделам +- Ð£Ð»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² +- Ð’Ñ‹Ñвление опечаток или иных ошибок в разделах +- Добавление новых ÑÑылок на иÑточники в разделах +- Общие Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ улучшению проекта +- Переводы на другие Ñзыки -## Translations +## Переводы -Currently this guide has been translated from English into the following languages: +Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñто ÑÑÑе переведено Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкого на Ñледующие Ñзыки: -- Chinese by [ahangchen](https://github.com/ahangchen) +- КитайÑкий. Переводчик [ahangchen](https://github.com/ahangchen) +- РуÑÑкий. Переводчик [paveltovchigrechko](https://github.com/paveltovchigrechko) -**If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** +**ЕÑли вы предоÑтавлÑете начальный перевод ÑÑÑе на другой Ñзык, то вы получаете право Ñтать Ñоавтором проекта Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ и ревью изменений в вашем переводе.** -## Contributors +## УчаÑтники проекта -Github holds a list of all [contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) to this project. +Github Ñодержит ÑпиÑок вÑех [учаÑтников](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) данного проекта. -## Editorship and Move to GitHub +## Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¸ переезд на Github -[Braydie Grove](https://www.github.com/braydie) has agreed to serve as editor-in-chief. +[Braydie Grove](https://www.github.com/braydie) ÑоглаÑилÑÑ Ð±Ñ‹Ñ‚ÑŒ главным редактором проекта. -Braydie transposed the original essay into MarkDown and created the repository. +Он перевел оригинальное ÑÑÑе в MarkDown и Ñоздал данный репозиторий. diff --git a/ru/GLOSSARY.md b/ru/GLOSSARY.md index 02549ed..a8a956f 100644 --- a/ru/GLOSSARY.md +++ b/ru/GLOSSARY.md @@ -1,6 +1,6 @@ # ГлоÑÑарий [//]: # (Version:1.0.0) -Ð’ данном глоÑÑарии Ñобраны термирны, иÑпользующиеÑÑ Ð² ÑÑÑе. Термины необÑзательно имеют Ñтандартное Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва людей значение. Eric S. Raymond Ñобрал маÑÑивный и информативный глоÑÑарий[HackerDict], оценив малую чаÑть которого, можно Ñ ÑƒÐ´Ð¾Ð²Ð¾Ð»ÑŒÑтвием прочеÑть от корки до корки, как бы Ñто Ñтранно ни звучало. +Ð’ данном глоÑÑарии Ñобраны термирны, иÑпользующиеÑÑ Ð² ÑÑÑе. Термины необÑзательно имеют Ñтандартное Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва людей значение. Эрик С. РÑймонд Ñобрал маÑÑивный и информативный глоÑÑарий[HackerDict], оценив малую чаÑть которого, можно Ñ ÑƒÐ´Ð¾Ð²Ð¾Ð»ÑŒÑтвием прочеÑть от корки до корки, как бы Ñто Ñтранно ни звучало. ### Вывод в конÑоль @@ -16,7 +16,7 @@ ### Клан -Люди, которые разделÑÑŽÑ‚ Ñ Ð²Ð°Ð¼Ð¸ верноÑть некой общей цели. +Люди, которые разделÑÑŽÑ‚ Ñ Ð²Ð°Ð¼Ð¸ верноÑть некой общей цели или профеÑÑии. ### Ð‘Ð¸Ð·Ð½ÐµÑ @@ -30,9 +30,9 @@ ÐевозможноÑть найти нужную информацию из-за того, что она ÑпрÑтана в большом количеÑтве другой, менее интереÑной, информации. -### wall-clock +### Реальное Ð²Ñ€ÐµÐ¼Ñ -ФактичеÑкое времÑ, измерÑемое наÑтенными чаÑами, противоположноÑть процеÑÑорного времени. +ФактичеÑкое Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, измерÑемое наÑтенными чаÑами, противоположноÑть процеÑÑорного времени. ### Узкое меÑто diff --git a/ru/LICENSE.md b/ru/LICENSE.md index 3e18a1a..7c36621 100644 --- a/ru/LICENSE.md +++ b/ru/LICENSE.md @@ -1,12 +1,11 @@ ## Creative Commons Attribution Share-Alike -"How To Be A Programmer: Community Version" by Robert L. Read with Community is licensed under Creative Commons Attribution Share-Alike Internal v 4.0. +"Как быть программиÑтом: Community Version", авторы Robert L. Read и Community, издано под лицензией Creative Commons Attribution Share-Alike Internal v 4.0. -At present this work will be edited by Braydie Grove and Robert L. Read. - -We will make reasonable attempts to maintain proper attributions of contributions in the section entittle "Contributions". If you make a pull-request with a significant contribution, please add a very brief description of your contribution to that section. +Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð´Ð°Ð½Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° находитÑÑ Ð¿Ð¾Ð´ редакцией Брейди Гроува и Роберта Л. Рида. +Мы поддерживаем разумные попытки поддержать вклад Ñо Ñтороны общеÑтва, так как Ñто опиÑано в разделе "УчаÑтие в проекте". ЕÑли вы Ñоздаете пулл-реквеÑÑ‚ Ñо значительными изменениÑми, пожалуйÑта, добавьте краткое опиÑание вашего вклада в данной Ñекции. Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/ru/README.md b/ru/README.md index e5de3de..d6ae0df 100644 --- a/ru/README.md +++ b/ru/README.md @@ -1,25 +1,25 @@ -# How to be a Programmer: Community Version +# Как быть программиÑтом: Community Version [//]: # (Version:1.0.0) Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read -Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). +Выпущено под лицензией [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). ## Введение -Быть хорошим программиÑтом трудно и благородно. Самое Ñложное в коллективной разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñто взаимодейÑтвие Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и клиентами. ПиÑать компьютерные программы важно и требует многих знаний и навыков, но Ñто лишь детÑкий лепет по Ñравнению Ñ Ñ‚ÐµÐ¼ прочим, что хороший программиÑÑ‚ должен делать, чтобы Ñоздать программное обеÑпечение, уÑпешное и Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð², и Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва коллег, за которых он неÑет чаÑтичную ответÑтвенноÑть. Ð’ данном ÑÑÑе Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ как можно более кратко изложить вÑе те нюанÑÑ‹ и детали, которые Ñ Ñам бы хотел, чтобы кто-нибудь мне объÑÑнил, когда мне был двадцать один год. +Быть хорошим программиÑтом трудно и благородно. Самое Ñложное в коллективной разработке программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñто взаимодейÑтвие Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и клиентами. ПиÑать компьютерные программы важно и требует многих знаний и навыков, но Ñто лишь детÑкий лепет по Ñравнению Ñ Ñ‚ÐµÐ¼ прочим, что хороший программиÑÑ‚ должен делать, чтобы Ñоздать программное обеÑпечение, уÑпешное как Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð², так Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва коллег, за которых он неÑет чаÑтичную ответÑтвенноÑть. Ð’ данном ÑÑÑе Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°ÑŽÑÑŒ как можно более кратко изложить вÑе те нюанÑÑ‹ и детали, которые Ñ Ñам бы хотел, чтобы кто-нибудь мне объÑÑнил, когда мне был двадцать один год. -Это очень ÑÑƒÐ±ÑŠÐµÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð°, поÑтому данное ÑÑÑе неизбежно будет отражением моих перÑональных взглÑдов и убеждений. Я ограничу ÑÐµÐ±Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸, Ñкорее вÑего, ÑтолкнетÑÑ Ð¿Ð¾Ñ‡Ñ‚Ð¸ каждый программиÑÑ‚ во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Многие из них, а также их Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ Ð½Ð°Ñтолько общечеловечеÑкими, что вероÑтно, мой тон покажетÑÑ Ð½Ð°Ð·Ð¸Ð´Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼. ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñто, Ñ Ð½Ð°Ð´ÐµÑŽÑÑŒ, что ÑÑÑе окажетÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ‹Ð¼. +Это очень ÑÑƒÐ±ÑŠÐµÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð°, поÑтому данное ÑÑÑе неизбежно будет отражать мои личные взглÑды и убеждениÑ. Я ограничу ÑÐµÐ±Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸, Ñкорее вÑего, ÑтолкнетÑÑ Ð¿Ð¾Ñ‡Ñ‚Ð¸ каждый программиÑÑ‚ во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹. Многие из них, а также их Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ Ð½Ð°Ñтолько общечеловечеÑкими, что вероÑтно, мой тон покажетÑÑ Ð½Ð°Ð·Ð¸Ð´Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼. ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñто, Ñ Ð½Ð°Ð´ÐµÑŽÑÑŒ, что ÑÑÑе окажетÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ‹Ð¼. -Программирование преподаетÑÑ Ð½Ð° курÑах. Великолепные книги The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96] и Extreme Programming Explained [XP99]: вÑе обучают программированию и более общим вопроÑам о том, как быть хорошим программиÑтом. До или вмеÑте Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñтатьей непременно Ñтоит ознакомитьÑÑ Ñ‚Ð°ÐºÐ¶Ðµ Ñ ÑÑÑе Paul Graham [PGSite] и Eric Raymond [Hacker]. Данное ÑÑÑе Ñлегка отличаетÑÑ Ð¾Ñ‚ Ñтих великолепных работ тем, что акцентирует внимание на Ñоциальных проблемах и обобщает набор необходимых программиÑту навыков так Ñ Ð¼Ð¾ÐµÐ¹ личной точки зрениÑ. +Программирование преподаетÑÑ Ð½Ð° курÑах. Великолепные книги The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96] и Extreme Programming Explained [XP99]: вÑе обучают программированию и более общим вопроÑам о том, как быть хорошим программиÑтом. До или вмеÑте Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñтатьей непременно Ñтоит ознакомитьÑÑ Ñ‚Ð°ÐºÐ¶Ðµ Ñ ÑÑÑе Пола ГрехÑма [PGSite] и Эрика РÑймонда [Hacker]. Данное ÑÑÑе Ñлегка отличаетÑÑ Ð¾Ñ‚ Ñтих великолепных работ тем, что акцентирует внимание на Ñоциальных проблемах и обобщает набор навыков, необходимых программиÑту, Ñ Ð¼Ð¾ÐµÐ¹ личной точки зрениÑ. -Ð’ данном ÑÑÑе Ñ Ð½Ð°Ð·Ñ‹Ð²Ð°ÑŽ "боÑÑом" любого, кто Ñтавит перед вами задачи. Слова "бизнеÑ", "компаниÑ" и "племÑ" Ñ Ð¸Ñпользую как Ñинонимы, кроме тех Ñлучаев, когда "бизнеÑ" означает генерирование прибыли, "компаниÑ" - меÑто работы, а "клан" - людей, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ вы разделÑете преданноÑть. +Ð’ данном ÑÑÑе Ñ Ð½Ð°Ð·Ñ‹Ð²Ð°ÑŽ "боÑÑом" любого, кто Ñтавит перед вами задачи. Слова "бизнеÑ", "компаниÑ" и "клан" Ñ Ð¸Ñпользую как Ñинонимы, кроме тех Ñлучаев, когда "бизнеÑ" означает генерирование прибыли, "компаниÑ" - меÑто работы, а "клан" - людей, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ вы разделÑете преданноÑть общему делу или профеÑÑии. Добро пожаловать в клан. ## Содержание -1. [Ðачинающий разработчик](1-Beginner) +1. [Ðачинающий программиÑÑ‚](1-Beginner) - Личные навыки - [ÐаучитеÑÑŒ отлаживать](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) - [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) @@ -45,7 +45,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [Делайте перерывы, когда вы в тупике](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) - [Как понÑть, когда идти домой](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) - [Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) -2. [Разработчик Ñреднего уровнÑ](2-Intermediate) +2. [ПрограммиÑÑ‚ Ñреднего уровнÑ](2-Intermediate) - Личные навыки - [Как ÑохранÑть мотивацию](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) - [Как заÑлужить доверие](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) @@ -73,8 +73,8 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens - [Как проводить ÑобеÑедованиÑ](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) - [Как понÑть, когда применÑть выÑокие технологии](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) - [Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) -3. [Продвинутый разработчик](3-Advanced) - - ТехнологичеÑÐºÐ°Ñ ÑкÑпертиза +3. [Продвинутый программиÑÑ‚](3-Advanced) + - ТехничеÑÐºÐ°Ñ ÑкÑпертиза - [Как отличить Ñложное от невозможного](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - [Как иÑпользовать вÑтроенные Ñзыки](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - [Выбор Ñзыка программированиÑ](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) @@ -97,7 +97,7 @@ Licensed under [Creative Commons Attribution-ShareAlike 4.0 International Licens 4. [ГлоÑÑарий](GLOSSARY.md) 5. [Приложение A - БиблиографиÑ/СпиÑок Ñайтов](5-Bibliography.md) 6. [Приложение B - ИÑÑ‚Ð¾Ñ€Ð¸Ñ (на Ñнварь 2016)](6-History.md) -6. [Приложение C - УчаÑтие в проекте (на Ñнварь 2016)](7-Contributions.md) +7. [Приложение C - УчаÑтие в проекте (на Ñнварь 2016)](7-Contributions.md) Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/ru/SUMMARY.md b/ru/SUMMARY.md index e442482..4f01b51 100644 --- a/ru/SUMMARY.md +++ b/ru/SUMMARY.md @@ -1,80 +1,81 @@ -# Summary +# Содержание [//]: # (Version:1.0.0) -* [Beginner](1-Beginner/README.md) - * Personal Skills - * [Learn to Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) - * [How to Debug by Splitting the Problem Space](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) - * [How to Remove an Error](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) - * [How to Debug Using a Log](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) - * [How to Understand Performance Problems](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) - * [How to Fix Performance Problems](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) - * [How to Optimize Loops](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) - * [How to Deal with I/O Expense](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) - * [How to Manage Memory](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) - * [How to Deal with Intermittent Bugs](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) - * [How to Learn Design Skills](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) - * [How to Conduct Experiments](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) - * Team Skills - * [Why Estimation is Important](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) - * [How to Estimate Programming Time](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) - * [How to Find Out Information](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) - * [How to Utilize People as Information Sources](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) - * [How to Document Wisely](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) - * [How to Work with Poor Code](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) - * [How to Use Source Code Control](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) - * [How to Unit Test](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) - * [Take Breaks when Stumped](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) - * [How to Recognize When to Go Home](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) - * [How to Deal with Difficult People](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) -* [Intermediate](2-Intermediate/README.md) - * Personal Skills - * [How to Stay Motivated](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) - * [How to be Widely Trusted](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) - * [How to Tradeoff Time vs. Space](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) - * [How to Stress Test](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) - * [How to Balance Brevity and Abstraction](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) - * [How to Learn New Skills](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) - * [Learn to Type](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) - * [How to Do Integration Testing](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) - * [Communication Languages](2-Intermediate/Personal-Skills/09-Communication-Languages.md) - * [Heavy Tools](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) - * [How to analyze data](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) - * Team Skills - * [How to Manage Development Time](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) - * [How to Manage Third-Party Software Risks](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) - * [How to Manage Consultants](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) - * [How to Communicate the Right Amount](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) - * [How to Disagree Honestly and Get Away with It](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) - * Judgment - * [How to Tradeoff Quality Against Development Time](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) - * [How to Manage Software System Dependence](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) - * [How to Decide if Software is Too Immature](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) - * [How to Make a Buy vs. Build Decision](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) - * [How to Grow Professionally](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) - * [How to Evaluate Interviewees](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) - * [How to Know When to Apply Fancy Computer Science](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) - * [How to Talk to Non-Engineers](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) -* [Advanced](3-Advanced/README.md) - * Technological Judgment - * [How to Tell the Hard From the Impossible](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) - * [How to Utilize Embedded Languages](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) - * [Choosing Languages](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) - * Compromising Wisely - * [How to Fight Schedule Pressure](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) - * [How to Understand the User](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) - * [How to Get a Promotion](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) - * Serving Your Team - * [How to Develop Talent](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) - * [How to Choose What to Work On](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) - * [How to Get the Most From Your Team-mates](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) - * [How to Divide Problems Up](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) - * [How to Handle Boring Tasks](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) - * [How to Gather Support for a Project](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) - * [How to Grow a System](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) - * [How to Communicate Well](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) - * [How to Tell People Things They Don't Want to Hear](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) - * [How to Deal with Managerial Myths](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) - * [How to Deal with Organizational Chaos](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) -* [Appendix A * Bibliography/Websiteography](5-Bibliography.md) -* [Appendix B * History (As of January 2016)](6-History.md) -* [Appendix C * Contributions (As of January 2016)](7-Contributions.md) +* [Ðачинающий программиÑÑ‚](1-Beginner/README.md) + * Личные навыки + * [ÐаучитеÑÑŒ отлаживать](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [Как отлаживать, разделÑÑ Ð¿Ñ€Ð¾ÑтранÑтво проблемы](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [Как уÑтранÑть баги](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [Как определÑть проблемы производительноÑти](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [Как уÑтранÑть проблемы производительноÑти](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [Как оптимизировать циклы](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [Как ÑправитьÑÑ Ñ Ñ€Ð°Ñходами на операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [Как управлÑть памÑтью](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [Как уÑтранÑть плавающие баги](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [Как ÑкÑпериментировать](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + * Командные навыки + * [Почему важно оценивать задачи](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [Как оценивать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [Как иÑкать информацию](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [Как Ñпрашивать людей](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [Как документировать правильно](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [Как работать Ñ Ð¿Ð»Ð¾Ñ…Ð¸Ð¼ кодом](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [Как иÑпользовать ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [Как пиÑать юнит-теÑты](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Делайте перерывы, когда вы в тупике](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [Как понÑть, когда идти домой](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [Как веÑти ÑÐµÐ±Ñ Ñ Ñ‚Ñ€ÑƒÐ´Ð½Ñ‹Ð¼Ð¸ людьми](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +* [ПрограммиÑÑ‚ Ñреднего уровнÑ](2-Intermediate/README.md) + * Личные навыки + * [Как ÑохранÑть мотивацию](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [Как заÑлужить доверие](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [Как баланÑировать процеÑÑорное Ð²Ñ€ÐµÐ¼Ñ Ð¸ памÑть](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [Как проводить ÑтреÑÑ-теÑтирование](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [Как баланÑировать краткоÑть и абÑтракцию](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [Как оÑваивать новые навыки](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [ÐаучитеÑÑŒ печатать вÑлепую](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [Как проводить интеграционное теÑтирование](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Стандартные технологии](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [Как анализировать данные](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + * Командные навыки + * [Как управлÑть временем разработки](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [Как управлÑть риÑками, ÑвÑзанными Ñо Ñторонним программным обеÑпечением](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [Как руководить конÑультантами](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [Как ÑоизмерÑть количеÑтво общениÑ](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [Как чеÑтно выражать неÑоглаÑие](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + * ЭкÑпертиза + * [Как баланÑировать качеÑтво и Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [Как управлÑть завиÑимоÑÑ‚Ñми](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [Как оценивать Ñтороннее программное обеÑпечение](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [Как решить: покупать программу или пиÑать Ñвою](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [Как раÑти профеÑÑионально](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [Как проводить ÑобеÑедованиÑ](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [Как понÑть, когда применÑть выÑокие технологии](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [Как разговаривать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +* [Продвинутый программиÑÑ‚](3-Advanced/README.md) + * ТехничеÑÐºÐ°Ñ ÑкÑпертиза + * [Как отличить Ñложное от невозможного](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [Как иÑпользовать вÑтроенные Ñзыки](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Выбор Ñзыка программированиÑ](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + * Правильные компромиÑÑÑ‹ + * [Как ÑправлÑтьÑÑ Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ графика](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [Как понÑть пользователÑ](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [Как получить повышение](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + * Управление командой + * [Как развивать таланты](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [Как выбрать, над чем работать](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [Как получить наибольшую отдачу от коллег](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [Как разделÑть задачи](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [Как раÑпределÑть Ñкучные заданиÑ](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [Как получить поддержку Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [Как развивать ÑиÑтему](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [Как качеÑтвенно взаимодейÑтвовать](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [Как Ñообщать неприÑтное](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + * [Как ÑправлÑтьÑÑ Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ñкими мифами](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +* [ГлоÑÑарий](GLOSSARY.md) +* [Приложение A - БиблиографиÑ/СпиÑок Ñайтов](5-Bibliography.md) +* [Приложение B - ИÑÑ‚Ð¾Ñ€Ð¸Ñ (на Ñнварь 2016)](6-History.md) +* [Приложение C - УчаÑтие в проекте (на Ñнварь 2016)](7-Contributions.md) From 041b3c680217fa37ebd6939441d8fd4ba116dc9c Mon Sep 17 00:00:00 2001 From: Pavel Tovchigrechko <99090300+paveltovchigrechko@users.noreply.github.com> Date: Sat, 7 Jan 2023 14:22:08 +0600 Subject: [PATCH 134/149] Spell checking, edit non-russian files. Version 04 (#5) --- LANGS.md | 1 + README.md | 2 +- en/7-Contributions.md | 1 + jp/7-Contributions.md | 1 + ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md | 4 ++-- .../02-How-to-Debug-by-Splitting-the-Problem-Space.md | 2 +- .../Personal-Skills/03-How-to-Remove-an-Error.md | 2 +- .../Personal-Skills/04-How-to-Debug-Using-a-Log.md | 2 +- .../05-How-to-Understand-Performance-Problems.md | 2 +- .../06-How-to-Fix-Performance-Problems.md | 2 +- .../Personal-Skills/09-How-to-Manage-Memory.md | 2 +- .../10-How-to-Deal-with-Intermittent-Bugs.md | 4 ++-- .../Personal-Skills/12-How-to-Conduct-Experiments.md | 4 ++-- .../Team-Skills/01-Why-Estimation-is-Important.md | 2 +- .../Team-Skills/03-How-to-Find-Out-Information.md | 2 +- .../04-How-to-Utilize-People-as-Information-Sources.md | 2 +- ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md | 2 +- .../Team-Skills/10-How-to-Recognize-When-to-Go-Home.md | 2 +- .../02-How-to-Manage-Software-System-Dependence.md | 2 +- .../Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md | 2 +- .../Judgment/05-How-to-Grow-Professionally.md | 2 +- .../Judgment/08-How-to-Talk-to-Non-Engineers.md | 2 +- .../Personal-Skills/02-How-to-be-Widely-Trusted.md | 2 +- .../05-How-to-Balance-Brevity-and-Abstraction.md | 2 +- ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md | 2 +- .../Personal-Skills/09-Communication-Languages.md | 2 +- ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md | 2 +- .../Personal-Skills/11-How-to-analyze-data.md | 4 ++-- .../Team-Skills/01-How-to-Manage-Development-Time.md | 2 +- .../02-How-to-Manage-Third-Party-Software-Risks.md | 2 +- .../04-How-to-Communicate-the-Right-Amount.md | 2 +- .../02-How-to-Understand-the-User.md | 2 +- .../Compromising-Wisely/03-How-to-Get-a-Promotion.md | 2 +- .../Serving-Your-Team/01-How-to-Develop-Talent.md | 2 +- .../02-How-to-Choose-What-to-Work-On.md | 2 +- .../Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md | 2 +- .../Serving-Your-Team/07-How-to-Grow-a-System.md | 2 +- .../11-How-to-Deal-with-Organizational-Chaos.md | 2 +- .../01-How-to-Tell-the-Hard-From-the-Impossible.md | 4 ++-- .../02-How-to-Utilize-Embedded-Languages.md | 2 +- ru/5-Bibliography.md | 10 +++++----- ru/6-History.md | 4 ++-- 42 files changed, 52 insertions(+), 49 deletions(-) diff --git a/LANGS.md b/LANGS.md index e5f1c5e..aad4fdf 100644 --- a/LANGS.md +++ b/LANGS.md @@ -1,3 +1,4 @@ * [English](en/) * [Chinese](zh/) * [Japanese](jp/) +* [Russian](ru/) diff --git a/README.md b/README.md index 4ba92c2..857a01d 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Welcome to the tribe. ## Contents -**Also available in [Chinese](zh/README.md) and [Japanese](jp/README.md)** +**Also available in [Chinese](zh/README.md), [Japanese](jp/README.md), and [Russian](ru/README.md)** 1. [Beginner](en/1-Beginner) - Personal Skills diff --git a/en/7-Contributions.md b/en/7-Contributions.md index 30dc8af..58b91d5 100644 --- a/en/7-Contributions.md +++ b/en/7-Contributions.md @@ -17,6 +17,7 @@ There are a number of ways to contribute to "How to be a Programmer". Currently this guide has been translated from English into the following languages: - Chinese by [ahangchen](https://github.com/ahangchen) +- Russian by [paveltovchigrechko](https://github.com/paveltovchigrechko) **If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** diff --git a/jp/7-Contributions.md b/jp/7-Contributions.md index 30dc8af..58b91d5 100644 --- a/jp/7-Contributions.md +++ b/jp/7-Contributions.md @@ -17,6 +17,7 @@ There are a number of ways to contribute to "How to be a Programmer". Currently this guide has been translated from English into the following languages: - Chinese by [ahangchen](https://github.com/ahangchen) +- Russian by [paveltovchigrechko](https://github.com/paveltovchigrechko) **If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** diff --git a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md index 991c78b..a9fb4d2 100644 --- a/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md +++ b/ru/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -1,10 +1,10 @@ # ÐаучитеÑÑŒ отлаживать [//]: # (Version:1.0.0) -Отладка Ñто краеугольный камень профеÑÑии программиÑта. ОÑновное значение Ñлова "debug" Ñто "уÑтранÑть ошибки", но значение, которое имеет реальный веÑ, Ñто "видеть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, Ð¸Ð·ÑƒÑ‡Ð°Ñ ÐµÐµ код". ПрограммиÑÑ‚, который не умеет Ñффективно отлаживать, Ñлеп. +Отладка - Ñто краеугольный камень профеÑÑии программиÑта. ОÑновное значение Ñлова "debug" Ñто "уÑтранÑть ошибки", но значение, которое имеет реальный веÑ, Ñто "видеть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, Ð¸Ð·ÑƒÑ‡Ð°Ñ ÐµÐµ код". ПрограммиÑÑ‚, который не умеет Ñффективно отлаживать, Ñлеп. Те идеалиÑты, которые Ñчитают, что дизайн, анализ, Ñ‚ÐµÐ¾Ñ€Ð¸Ñ ÑложноÑти вычиÑлений и подобное более фундаментальны, чем отладка, врÑд ли ÑвлÑÑŽÑ‚ÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰Ð¸Ð¼Ð¸ программиÑтами. Работающий программиÑÑ‚ не живет в идеальном мире. Даже еÑли вы идеальны, вы окружены и вынуждены работать Ñ ÐºÐ¾Ð´Ð¾Ð¼, который напиÑан в больших корпорациÑÑ…, организациÑÑ… вроде GNU и вашими коллегами. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть Ñтого кода неидеальна, и она неидеально задокументирована. Без ÑпоÑобноÑти видеть иÑполнение Ñтого кода, малейший баг выбьет Ð²Ð°Ñ Ð¸Ð· колеи. ЧаÑто увидеть иÑполнение можно только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑкÑперимента, то еÑть, отладки. -Отладка больше каÑаетÑÑ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼, чем Ñамих программ. ЕÑли вы купите программное обеÑпечение от большой компании, то как правило вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программы. Обычно вы при работе Ñоздаете баг, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, как он возник. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. +Отладка больше каÑаетÑÑ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼, чем Ñамих программ. ЕÑли вы купите программное обеÑпечение от большой компании, то, как правило, вам не доведетÑÑ ÑƒÐ²Ð¸Ð´ÐµÑ‚ÑŒ Ñам код. Ðо вÑе равно будут моменты, когда программа не ÑоответÑтвует документации, либо Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñто ничего не говорит о конкретном поведении программы. РаÑпроÑтраненный и Ñркий пример: Ñбой вÑей операционной ÑиÑтемы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ программы. Обычно вы при работе Ñоздаете баг, изучаете ÑобÑтвенный код и понÑÑ‚Ð¸Ñ Ð½Ðµ имеете, как он возник. Ðеизбежно Ñто ведет к мыÑли о том, что вы делаете что-то не то, либо возникает некое обÑтоÑтельÑтво, которое вы не учитываете в программе. Иногда трюк Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸ÐµÐ¼ иÑходного кода помогает. Иногда нет, и тогда вы должны перейти к отладке. Чтобы понÑть, как иÑполнÑетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, вы должны иметь возможноÑть запуÑтить ее и наблюдать за ее ходом иÑполнениÑ. Иногда баг виден визуально, например, еÑли он отображаетÑÑ Ð½Ð° Ñкране или между ÑобытиÑми в программе очевидна непредуÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°. Во многих других ÑлучаÑÑ…, баг ÑвÑзан Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð°Ð¼Ð¸, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÑŒ непоÑредÑтвенно, например, Ñ ÑоÑтоÑнием переменных, конкретными Ñтроками кода, иÑполнÑющиеÑÑ Ð² данный момент, либо Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñми внутри Ñложной Ñтруктуры данных. Эти Ñкрытые факторы надо выÑÑнить. diff --git a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md index ab80909..90beab8 100644 --- a/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md +++ b/ru/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -6,7 +6,7 @@ Сможете ли вы поÑтавить ÑкÑперимент, чтобы увидеть, где вылетает программа? Конечно. Ð’Ñ‹ можете иÑпользовать отладчик или добавить вывод в конÑоль (либо их Ñквивалент на вашем Ñзыке программированиÑ) поÑле воÑьмой и девÑтой инÑтрукций. Когда вы запуÑтите программу Ñнова, проÑтранÑтво проблемы Ñтанет еще уже, например, вы увидите, что программа вылетает на девÑтой инÑтрукции. Я Ñчитаю, что помнить о точном определении проблемы помогает ÑоÑредоточитьÑÑ Ð½Ð° ее решении. Когда неÑколько человек работают под давлением и ÑтреÑÑом над задачей, очень легко забыть о том, что в ней ÑвлÑетÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ проблемой. -Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, напополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° и которое Ñледует поделить пополам? Именно здеÑÑŒ на помощь приходÑÑ‚ Ñмекалка и опыт. +Ключ к отладке по принципу "разделÑй и влаÑтвуй" такой же, как и при разработке алгоритмов. Ð’Ñ‹ разделÑете проÑтранÑтво программы, в котором может быть проблема, пополам. Вам не придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñто Ñлишком долго, и вы быÑтро будете продвигатьÑÑ Ð² отладке. Ðо что такое то проÑтранÑтво, где находитÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° и которое Ñледует поделить пополам? Именно здеÑÑŒ на помощь приходÑÑ‚ Ñмекалка и опыт. Ðачинающим программиÑтам кажетÑÑ, что ошибка может быть в каждой Ñтроке кода. У них еще нет того Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, которое поÑвитÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ñ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼. Они не видÑÑ‚ вÑе ÑвойÑтва и факторы программы, такие как проÑтранÑтво иÑполнÑемого кода, Ñтруктура данных, управление памÑтью, взаимодейÑтвие Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼ кодом, риÑкованный код, проÑтой код. Ð”Ð»Ñ Ð¾Ð¿Ñ‹Ñ‚Ð½Ð¾Ð³Ð¾ программиÑта Ñти факторы ÑоÑтавлÑÑŽÑ‚ неполную, но крайне полезную модель вÑего того, что может пойти не так. Ðаличие такой модели в голове очень Ñффективно помогает обнаружить точное меÑто проблемы. diff --git a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md index 6e49d68..9153408 100644 --- a/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md +++ b/ru/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -4,6 +4,6 @@ При иÑправлении бага важно внеÑти наименьшие изменениÑ, которые его уÑтранÑÑ‚. Ð’Ñ‹ можете заметить другие меÑта в коде, которые потребуют улучшений, но не вноÑите их одновременно Ñ Ð¸Ñправлением ошибки. СтарайтеÑÑŒ применÑть научный метод: изменÑть только одно зараз. Лучший ÑпоÑоб Ð´Ð»Ñ Ñтого: воÑпроизвеÑти баг, внеÑти иÑправлениÑ, затем перезапуÑтить программу и убедитьÑÑ, что бага больше нет. Конечно, иногда придетÑÑ Ð¼ÐµÐ½Ñть не одну, а неÑколько Ñтрок кода, но концептуально вÑе равно ÑтарайтеÑÑŒ вноÑить точечные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸. -Иногда в программе приÑутÑтвует неÑколько багов, очень похожих друг на друга. Определить их и иÑправить по одному - Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае, вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать, и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир чаÑто бывает беÑпорÑдочен. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. +Иногда в программе приÑутÑтвует неÑколько багов, очень похожих друг на друга. Определить их и иÑправить по одному - Ñто ваша задача. Иногда неÑÑно, что должна делать программа или к чему ÑтремилÑÑ Ð°Ð²Ñ‚Ð¾Ñ€ иÑходного кода. Ð’ Ñтом Ñлучае вы должны применить Ñвой опыт и Ð·Ð½Ð°Ð½Ð¸Ñ Ð¸ придать Ñвой ÑобÑтвенный ÑмыÑл коду. Решите, что он должен делать, и добавьте комментарии об Ñтом, либо обозначьте Ñто иным ÑпоÑобом. Затем иÑправьте код ÑоглаÑно Ñвоему пониманию. Это навык разработчика Ñреднего или продвинутого уровнÑ, и иногда он гораздо Ñложнее, чем напиÑание оригинальной функции Ñ Ð½ÑƒÐ»ÑŽ, но реальный мир чаÑто бывает беÑпорÑдочен. Иногда вам придетÑÑ Ð¸ÑправлÑть ÑиÑтемы, которые вы не можете перепиÑать Ñ Ð½ÑƒÐ»Ñ. Следующее: [Как отлаживать, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md index 5ae285d..6260571 100644 --- a/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md +++ b/ru/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -4,7 +4,7 @@ - Логи могут дать полезную информацию о багах, которые трудно воÑпроизвеÑти (например, такие, которые воÑпроизводÑÑ‚ÑÑ Ð½Ð° боевом окружении, но не на теÑтовом) - Логи могут давать ÑтатиÑтику и данные о производительноÑти, такие как Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ выполнением команд -- ЕÑли логи наÑтраиваемы, то они помогают Ñобрать общую информацию Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ñ‹Ñ… ÑпецифичеÑких проблем без необходимоÑти модифицировать или перезапуÑкать код +- ЕÑли логи можно наÑтраивать, то они помогают Ñобрать общую информацию Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ñ‹Ñ… ÑпецифичеÑких проблем без необходимоÑти модифицировать или перезапуÑкать код КоличеÑтво выводимой в лог информации Ñто вÑегда компромиÑÑ Ð¼ÐµÐ¶Ð´Ñƒ информативноÑтью и краткоÑтью. Избыток информации Ñделает лог Ñ‚Ñжелым и вызовет *Ñлепоту прокрутки*, уÑложнÑÑ Ð¿Ð¾Ð¸Ñк нужного. ÐедоÑтаток информации может проÑто Ñделать лог беÑполезным. По Ñтой причине полезно делать логи наÑтраиваемыми. Как правило, ÐºÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в логе отображает Ñвое меÑто в иÑходном коде, иÑполнÑющий ее поток, еÑли он еÑть, точное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸, обычно, дополнительную информацию вроде значений переменных, объем Ñвободной памÑти, чиÑло объектов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и так далее. Эти запиÑи покрывают веÑÑŒ иÑходный код, оÑобенно оÑновные функциональные узлы и риÑкованный код. ЗапиÑи можно раÑпределÑть по уровнÑм, и наÑтраивать в конфигурации вывод только запиÑей определенного уровнÑ. Лог Ñледует проектировать таким образом, чтобы его запиÑи помогали решать проблемы программы, которые вы предвидите. ПредуÑматривайте и проблему Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти. diff --git a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md index 1fe7800..78576f8 100644 --- a/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md +++ b/ru/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -6,6 +6,6 @@ СущеÑтвует множеÑтво измерений в производительноÑти компьютерной ÑиÑтемы и множеÑтво потреблÑемых реÑурÑов. Первое, что Ñтоит измерить, Ñто реальное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° иÑполнение программы. Логирование Ñтого времени оÑобенно полезно тем, что оно может указать на непредвиденные обÑтоÑтельÑтва, которые возникают в ÑитуациÑÑ…, когда иÑпользовать профилировщик непрактично. Однако, Ñтот параметр не вÑегда дает полную картину проиÑходÑщего. Иногда вычиÑлениÑ, которые требуют чуть больше общего времени, но занимают меньше процеÑÑорного времени, покажут ÑÐµÐ±Ñ Ð»ÑƒÑ‡ÑˆÐµ в реальном окружении. Ðналогично, памÑть, пропуÑÐºÐ½Ð°Ñ ÑпоÑобноÑть Ñети, доÑтуп к базе данных или другому Ñерверу могут оказатьÑÑ, в конечном Ñчете, гораздо дороже, чем процеÑÑорное времÑ. -ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° - Ñто невозможноÑть продолжить иÑпонение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод - Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли загруженноÑти не будет, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. +ЗагруженноÑть общих реÑурÑов, которые Ñинхронизированы между Ñобой, может привеÑти к взаимной блокировке и реÑурÑному голоду. Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ° - Ñто невозможноÑть продолжить иÑполнение программы из-за недоÑтаточной Ñинхронизации запрашиваемых реÑурÑов. РеÑурÑный голод - Ñто невозможноÑть правильно запланировать работу компонента. ЕÑли Ñто можно предуÑмотреть, то лучше вÑего Ñ Ñамого Ñтарта проекта иметь ÑпоÑоб Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ñти реÑурÑов. Даже еÑли загруженноÑти не будет, очень полезно иметь возможноÑть утверждать Ñто Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью. Следующее: [Как уÑтранÑть проблемы производительноÑти](06-How-to-Fix-Performance-Problems.md) diff --git a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md index 57a78cb..384480c 100644 --- a/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md +++ b/ru/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -8,6 +8,6 @@ ЧаÑто узкие меÑта в производительноÑти будут предÑтавлÑть Ñобой что-то вроде подÑчета коров по ногам и поÑледующего Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° четыре вмеÑто обычного подÑчета по головам. Ðапример, Ñ Ñ‡Ð°Ñто забывал дать ÑобÑтвенный Ð¸Ð½Ð´ÐµÐºÑ Ñ‡Ð°Ñто запрашиваемому Ñтолбцу в релÑционной базе ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, что замедлÑло веÑÑŒ процеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ в 20 раз. Среди других примеров: ненужные операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в циклах, отладочные ÑообщениÑ, Ñтавшие неактуальными, избыточное выделение памÑти и в оÑобенноÑти неумелое иÑпользование библиотек и Ñторонних фреймворков, которые плохо документированы в чаÑти производительноÑти. Такой вид улучшений легко определить и Ñ Ñ…Ð¾Ð´Ñƒ внеÑти в программу. -Что делать, когда очевидных меÑÑ‚ Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ð¹ не оÑталоÑÑŒ? Ð’Ñ‹ можете продолжать иÑкать узкие меÑта на более глубоком уровне или переÑмотреть веÑÑŒ дизайн ÑиÑтемы. ПоÑледнее дает прекраную возможноÑть продемонÑтрировать Ñвои ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта не только в реализации нового дизайна ÑиÑтемы, но и в умении убедить Ñвоего боÑÑа в том, что Ñто необходимо. Тем не менее, перед тем, как вы начнете убеждать его в необходимоÑти коренных изменений, ÑпроÑите ÑебÑ, уÑкорит ли ваше решение ÑиÑтему в 5-10 раз. +Что делать, когда очевидных меÑÑ‚ Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ð¹ не оÑталоÑÑŒ? Ð’Ñ‹ можете продолжать иÑкать узкие меÑта на более глубоком уровне или переÑмотреть веÑÑŒ дизайн ÑиÑтемы. ПоÑледнее дает прекраÑную возможноÑть продемонÑтрировать Ñвои ÑƒÐ¼ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñта не только в реализации нового дизайна ÑиÑтемы, но и в умении убедить Ñвоего боÑÑа в том, что Ñто необходимо. Тем не менее перед тем, как вы начнете убеждать его в необходимоÑти коренных изменений, ÑпроÑите ÑебÑ, уÑкорит ли ваше решение ÑиÑтему в 5-10 раз. Следующее: [Как оптимизировать циклы](07-How-to-Optimize-Loops.md) diff --git a/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md index 5c812d4..9ed8376 100644 --- a/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md +++ b/ru/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -4,7 +4,7 @@ ПроÑтранÑтво памÑти, которое должно ÑохранÑтьÑÑ Ð·Ð° пределами одной подпрограммы, чаÑто называетÑÑ *выделенной кучей*. УчаÑток памÑти без указателей на него беÑполезен и называетÑÑ *муÑором*. Ð’ завиÑимоÑти от ÑиÑтемы, которую вы иÑпользуете, вы можете решить удалить в Ñвном виде памÑть, выделенную под данные, которые вот-вот Ñтанут муÑором. Ðо чаще вÑего у Ð²Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ возможноÑть иÑпользовать *Ñборщик муÑора*. Он определÑет муÑорную памÑть и оÑвобождает ее автоматичеÑки, без вмешательÑтва программиÑта. Сборщик муÑора Ñто прекраÑное ÑредÑтво, оно уменьшает чиÑло ошибок в коде, позволÑет пиÑать его короче и понÑтнее Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ затратами. ИÑпользуйте его, когда Ñто возможно. -Ðо даже Ñо Ñборщиком муÑора вы можете забить вÑÑŽ памÑть муÑорными данными. КлаÑÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° - иÑпользовать Ñ…Ñш-таблицу в качеÑтве кÑша и забыть удалить ÑÑылки в ней. ПоÑкольку ÑÑылка оÑтаетÑÑ, данные по ней недоÑÑгаемы, и ÑÑылка беÑполезна. Это называетÑÑ *утечкой памÑти*. С Ñамого начала разработки Ñледует Ñледить за утечками памÑти и уÑтранÑть их. ЕÑли у Ð²Ð°Ñ ÐµÑть долгоработающие ÑиÑтемы, то памÑть может никогда не заканчиватьÑÑ Ð¿Ñ€Ð¸ теÑтировании, но будет иÑчерпана пользователÑми при реальной работе. +Ðо даже Ñо Ñборщиком муÑора вы можете забить вÑÑŽ памÑть муÑорными данными. КлаÑÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° - иÑпользовать хеш-таблицу в качеÑтве кÑша и забыть удалить ÑÑылки в ней. ПоÑкольку ÑÑылка оÑтаетÑÑ, данные по ней недоÑÑгаемы, и ÑÑылка беÑполезна. Это называетÑÑ *утечкой памÑти*. С Ñамого начала разработки Ñледует Ñледить за утечками памÑти и уÑтранÑть их. ЕÑли у Ð²Ð°Ñ ÐµÑть долгоработающие ÑиÑтемы, то памÑть может никогда не заканчиватьÑÑ Ð¿Ñ€Ð¸ теÑтировании, но будет иÑчерпана пользователÑми при реальной работе. Создание новых объектов Ñто отноÑительно Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð² любых ÑиÑтемах. ПамÑть, Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ð¿Ñ€Ñмую под локальные переменные подпрограммы, однако, обычно дешевле из-за проÑтой политики ее выÑвобождениÑ. Избегайте ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÐ½ÑƒÐ¶Ð½Ñ‹Ñ… объектов. diff --git a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md index 661861a..81bf3a3 100644 --- a/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md +++ b/ru/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -10,8 +10,8 @@ Ðедавно на работе у Ð½Ð°Ñ Ð±Ñ‹Ð» плавающий баг, на который мы потратили неÑколько недель. У Ð½Ð°Ñ ÐµÑть многопоточное Ñерверное приложение на Java, размещенное на Apache-Ñерверах. Чтобы поддержать быÑтрую Ñмену веб-Ñтраниц, мы выполнÑли вÑе операции Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи в небольшом наборе из четырех потоков, отделенных от потоков, ответÑтвенных за Ñмену Ñтраниц. Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени некоторые из Ñтих четырех потоков "замораживалиÑÑŒ" и, наÑколько мы могли понÑть из логов, прекращали делать что-либо полезное на неÑколько чаÑов. ПоÑкольку у Ð½Ð°Ñ Ð±Ñ‹Ð»Ð¾ выделено четыре потока, Ñамо по Ñебе Ñто не было большой проблемой. До тех пор, пока не замораживалиÑÑŒ вÑе четыре потока одновременно. Тогда очереди запроÑов, оÑвобожденные замороженными потоками, забивали вÑÑŽ Ñвободную памÑть и крашили наш Ñервер. Ðам потребовалаÑÑŒ неделÑ, чтобы проÑто выÑвить баг, и за Ñто Ð²Ñ€ÐµÐ¼Ñ Ð¼Ñ‹ не Ñмогли понÑть, в чем причина, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñтот баг, и даже что именно проиÑходило в потоках в тот момент, когда они "заÑтревали". -Этот пример демонÑтрирует риÑк, ÑвÑзанный Ñ Ð¸Ñпользованием Ñтороннего программного обеÑпечениÑ. Мы иÑпользовали лицензионный код, который убирал теги HTML из текÑта. ХотÑ, к ÑчаÑтью, у Ð½Ð°Ñ Ð±Ñ‹Ð» иÑходный код, мы не изучали его доÑконально, пока мы не включили логирование на нашем Ñервере и не увидели, что потоки почтовых Ñообщений забивалиÑÑŒ из-за Ñтого лиценционного кода. +Этот пример демонÑтрирует риÑк, ÑвÑзанный Ñ Ð¸Ñпользованием Ñтороннего программного обеÑпечениÑ. Мы иÑпользовали лицензионный код, который убирал теги HTML из текÑта. ХотÑ, к ÑчаÑтью, у Ð½Ð°Ñ Ð±Ñ‹Ð» иÑходный код, мы не изучали его доÑконально, пока мы не включили логирование на нашем Ñервере и не увидели, что потоки почтовых Ñообщений забивалиÑÑŒ из-за Ñтого лицензионного кода. -Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае, Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта ÑтановилоÑÑŒ пропорциональным квадрату его длины. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как Ñто бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. +Программа работала прекраÑно, за иÑключением некоторых длинных и необычных текÑтов. Ð’ Ñтом Ñлучае Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ текÑта ÑтановилоÑÑŒ пропорциональным квадрату его длины. ЕÑли бы такие текÑты вÑтречалиÑÑŒ бы регулÑрно, мы бы Ñразу нашли баг. ЕÑли бы они вообще не попадалиÑÑŒ бы, бага проÑто не было бы. Как Ñто бывает, мы потратили неÑколько недель, чтобы наконец понÑть и решить проблему. Следующее: [Как научитьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ программы](11-How-to-Learn-Design-Skills.md) diff --git a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md index ba7c792..d383923 100644 --- a/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md +++ b/ru/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -8,11 +8,11 @@ ЭкÑперименты, которые вам придетÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°Ñ‚ÑŒÑÑ, включают: -- ТеÑтирование ÑиÑтем на небольших примерах данных, чтобы убедитьÑÑ Ð² их ÑоответÑтвии документации, либо чтобы понÑть их ответы, еÑли документации нет +- ТеÑтирование ÑиÑтем на небольших примерах данных, чтобы убедитьÑÑ Ð² их ÑоответÑтвии документации, либо, чтобы понÑть их ответы, еÑли документации нет - ТеÑтирование небольших изменений в коде, чтобы удоÑтоверитьÑÑ, что они уÑтранÑÑŽÑ‚ баг в программе - Измерение производительноÑти ÑиÑтемы в двух различных окружениÑÑ… из-за неÑовершенÑтва знаний о их характериÑтиках производительноÑти - Проверка целоÑтноÑти данных -- Сбор ÑтатиÑтики, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ помочь Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ð¸ Ñложных и трудновоÑпроизводимых багов +- Сбор ÑтатиÑтики, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ помочь в разрешении Ñложных и трудновоÑпроизводимых багов Я не думаю, что в Ñтом ÑÑÑе Ñ Ñмогу объÑÑнить, как проектировать ÑкÑперименты. Вам придетÑÑ Ð½Ð°ÑƒÑ‡Ð¸Ñ‚ÑŒÑÑ Ñтому ÑамоÑтоÑтельно и практиковатьÑÑ. Я могу предложить два небольших Ñовета. diff --git a/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md index d7b89bb..ddacc04 100644 --- a/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md +++ b/ru/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) Чтобы как можно быÑтрее выпуÑтить программное обеÑпечение, нужно планировать не только ее разработку, но и документирование, запуÑк и продвижение. Ð’ коммерчеÑких проектах также важны продажи и финанÑÐ¾Ð²Ð°Ñ ÑоÑтавлÑющаÑ. Без предÑказуемоÑти времени разработки невозможно вÑе Ñто запланировать Ñффективно. -Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° времени на разработку дает предÑказуемоÑть. Менеджеры очень любÑÑ‚ Ñто. Тот факт, что теоретичеÑки и практичеÑки невозможно точно предÑказать, Ñколько времени уйдет на рзработку, чаÑто упуÑкаетÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð°Ð¼Ð¸. ÐÐ°Ñ Ð²Ñе Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ Ñделать Ñту невыполнимую вещь, и мы должны Ñебе чеÑтно в Ñтом признатьÑÑ. Однако, будет нечеÑтно не признать невыполнимоÑть Ñтого Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¸, когда необходимо, не объÑÑнить Ñто. Вокруг временных оценок много недопониманий, так как люди Ñклонны принимать Ñлова +Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° времени на разработку дает предÑказуемоÑть. Менеджеры очень любÑÑ‚ Ñто. Тот факт, что теоретичеÑки и практичеÑки невозможно точно предÑказать, Ñколько времени уйдет на разработку, чаÑто упуÑкаетÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð°Ð¼Ð¸. ÐÐ°Ñ Ð²Ñе Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ Ñделать Ñту невыполнимую вещь, и мы должны Ñебе чеÑтно в Ñтом признатьÑÑ. Однако, будет нечеÑтно не признать невыполнимоÑть Ñтого Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¸, когда необходимо, не объÑÑнить Ñто. Вокруг временных оценок много недопониманий, так как люди Ñклонны принимать Ñлова > Я думаю, что еÑли Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ понимаю проблему, то около 50% вероÑтноÑти, что мы Ñделаем Ñто за пÑть недель. При уÑловии, что никто не будет нам мешать вÑе Ñто времÑ. diff --git a/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md index 3e6ceac..5139677 100644 --- a/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md +++ b/ru/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -4,7 +4,7 @@ ЕÑли вы ищете информацию о *конкретных знаниÑÑ…*, которые объективны и легко проверить, например, поÑледнÑÑ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ð°Ñ‚Ñ‡Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ, то лучше вежливо ÑпроÑить об Ñтом в интернете или в диÑкуÑÑионной группе. Ðе ищите в интернете то, что ÑвÑзано Ñ Ð¼Ð½ÐµÐ½Ð¸ÐµÐ¼ или Ñубъективной интерпретацией, количеÑтво бреда здеÑÑŒ Ñлишком велико. -ЕÑли вы ищете *общие Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ чем-то Ñубъективном*, иÑторию мнений людей о предмете, то идите в библиотеку (Ñ Ð¸Ð¼ÐµÑŽ ввиду наÑтоÑщее здание Ñ ÐºÐ½Ð¸Ð³Ð°Ð¼Ð¸). Ðапример, идите туда, чтобы узнать что-нибудь о математике, грибах или миÑтицизме. +ЕÑли вы ищете *общие Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ чем-то Ñубъективном*, иÑторию мнений людей о предмете, то идите в библиотеку (Ñ Ð¸Ð¼ÐµÑŽ в виду наÑтоÑщее здание Ñ ÐºÐ½Ð¸Ð³Ð°Ð¼Ð¸). Ðапример, идите туда, чтобы узнать что-нибудь о математике, грибах или миÑтицизме. ЕÑли вам нужно узнать, *как Ñделать что-то нетривиальное*, доÑтаньте две-три книги, поÑвÑщенные Ñтой теме, и прочтите их. Ð’ интернете вы можете узнать, как Ñделать тривиальные вещи, вроде уÑтановки пакета программного обеÑпечениÑ. Ð’Ñ‹ даже можете узнать Ñерьезные вещи, например, хорошие техники программированиÑ, но здеÑÑŒ легко потратить гораздо больше времени на поиÑк и отбор результатов и попытки определить, наÑколько авторитетен иÑточник, чем на чтение ÑоответÑтвующей чаÑти в Ñерьезной книге. diff --git a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md index f03f22a..725ed7e 100644 --- a/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md +++ b/ru/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) Уважайте Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ человека и ÑоизмерÑйте его Ñо Ñвоим. Ð’Ð¾Ð¿Ñ€Ð¾Ñ Ð´Ð°ÐµÑ‚ гораздо больше, чем проÑто ответ. Человек, которого вы Ñпрашиваете, узнает Ð²Ð°Ñ ÐºÐ°Ðº проÑто из вашего приÑутÑтвиÑ, так и по вашему вопроÑу. Ð’Ñ‹ узнаете о человеке то же Ñамое, и вдобавок, возможно, вы получаете ответ на ваш вопроÑ. Как правило, Ñто гораздо важнее, чем ваш вопроÑ. -Однако, ценноÑть вопроÑов умешьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретные выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может оказатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñо вÑеми вашими руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. +Однако, ценноÑть вопроÑов уменьшаетÑÑ Ñ‚ÐµÐ¼ больше, чем чаще вы их задаете. Ð’ конце концов, вы отнимаете у человека Ñамое важное: времÑ. Выгоды от Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñтоит ÑоизмерÑть Ñ Ð·Ð°Ñ‚Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ на него. Более того, конкретные выгоды и затраты отличаютÑÑ Ð¾Ñ‚ человека к человеку. Я убежден, что руководитель 100 человек должен тратить 5 минут в меÑÑц на разговор Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в организации. Это займет 5% вÑего времени руководителÑ. Ðо 10 минут может быть Ñлишком много Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ чиÑла, а 5 минут может быть много, еÑли в компании 1000 Ñотрудников. ЧиÑло времени, которое вы тратите на беÑеды Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ человеком в вашей компании, завиÑит от роли человека (больше, чем от должноÑти). Вам Ñледует разговаривать Ñ Ð²Ð°ÑˆÐ¸Ð¼ боÑÑом чаще, чем Ñ Ð±Ð¾ÑÑом вашего боÑÑа, но и Ñ Ð½Ð¸Ð¼ вам Ñтоит немного разговаривать. Это может оказатьÑÑ Ð½ÐµÐºÐ¾Ð¼Ñ„Ð¾Ñ€Ñ‚Ð½Ñ‹Ð¼, но Ñ Ñчитаю, что ваша обÑзанноÑть каждый меÑÑц немного разговаривать Ñо вÑеми вашими руководителÑми, неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð¸ на что. Главное правило: вÑе получают пользу от небольшой беÑеды Ñ Ð²Ð°Ð¼Ð¸. И чем чаще проиÑходит беÑеда, тем меньше пользы они получают. Ваша работа ÑоÑтоит в том, чтобы дать Ñтим людÑм пользу от разговора Ñ Ð²Ð°Ð¼Ð¸ и получить ее Ñамому, ÑохранÑÑ Ð±Ð°Ð»Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñƒ нею и потраченным временем. diff --git a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md index 4d57c30..72088f0 100644 --- a/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md +++ b/ru/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -1,6 +1,6 @@ # Как документировать правильно [//]: # (Version:1.0.0) -Жизнь Ñлишком коротка, чтобы пиÑать ерунду, которую никто не будет читать. ЕÑли вы пишите плохо, никто не будет Ñто читать. Так что лучше вÑего документировать хорошо и немного. Менеджеры чаÑто не понимают Ñтого, потому что даже Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð°ÐµÑ‚ им ложное чувÑтво уверенноÑти, что они не завиÑÑÑ‚ от Ñвоих программиÑтов. ЕÑли кто-то абÑолютно наÑтаивает, чтобы вы пиÑали никому ненужную документацию, Ñкажите "да" и начинайте Ñпокойно иÑкать новую работу. +Жизнь Ñлишком коротка, чтобы пиÑать ерунду, которую никто не будет читать. ЕÑли вы пишете плохо, никто не будет Ñто читать. Так что лучше вÑего документировать хорошо и немного. Менеджеры чаÑто не понимают Ñтого, потому что даже Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð´Ð°ÐµÑ‚ им ложное чувÑтво уверенноÑти, что они не завиÑÑÑ‚ от Ñвоих программиÑтов. ЕÑли кто-то абÑолютно наÑтаивает, чтобы вы пиÑали никому ненужную документацию, Ñкажите "да" и начинайте Ñпокойно иÑкать новую работу. Чтобы Ñнизить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° документирование, нет ничего более Ñффективного, чем дать точную оценку времени, которое на него потребуетÑÑ. Реалии жизни холодны и Ñуровы: документирование, как и теÑтирование, может занÑть гораздо больше времени, чем разработка. diff --git a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md index 9356b6b..2b9be7b 100644 --- a/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md +++ b/ru/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -1,6 +1,6 @@ # Как понÑть, когда идти домой [//]: # (Version:1.0.0) -Программирование Ñто деÑтельноÑть, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑвлÑетÑÑ ÐºÑƒÐ»ÑŒÑ‚ÑƒÑ€Ð¾Ð¹. К Ñожалению, Ñто не та культура, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ†ÐµÐ½Ð¸Ñ‚ пÑихичеÑкое и физичеÑкое здоровье. По культурно-иÑторичеÑким причинам (например, необходимоÑть работать по ночам на ненагруженных компьютерах) и из-за Ñильного Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑтить продукт на рынок программиÑты традиционно перерабатывают. Ðе думаю, что Ñтоит верить вÑему, что раÑÑказывают, но мне кажетÑÑ, что 60 рабочих чаÑов в неделю Ñто раÑпроÑтраненный график, а 50 чаÑов Ñто практичеÑки минимум. Это значит, что чаÑто требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. И Ñто ÑÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð´Ð»Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐ³Ð¾ программиÑта, который отвечает не только за ÑебÑ, но и за Ñвоих коллег. Ð’Ñ‹ должны понимать, когда идти домой, и иногда, когда предложить пойти домой Ñвоим коллегам. ЗдеÑÑŒ не может быть четких правил Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹, так же, как не может быть однозначных правил о том, как воÑпитывать детей. Ð’Ñе люди разные. +Программирование - Ñто деÑтельноÑть, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑвлÑетÑÑ ÐºÑƒÐ»ÑŒÑ‚ÑƒÑ€Ð¾Ð¹. К Ñожалению, Ñто не та культура, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ†ÐµÐ½Ð¸Ñ‚ пÑихичеÑкое и физичеÑкое здоровье. По культурно-иÑторичеÑким причинам (например, необходимоÑть работать по ночам на ненагруженных компьютерах) и из-за Ñильного Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑтить продукт на рынок программиÑты традиционно перерабатывают. Ðе думаю, что Ñтоит верить вÑему, что раÑÑказывают, но мне кажетÑÑ, что 60 рабочих чаÑов в неделю Ñто раÑпроÑтраненный график, а 50 чаÑов Ñто практичеÑки минимум. Это значит, что чаÑто требуетÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ больше. И Ñто ÑÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ð´Ð»Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐ³Ð¾ программиÑта, который отвечает не только за ÑебÑ, но и за Ñвоих коллег. Ð’Ñ‹ должны понимать, когда идти домой, и иногда, когда предложить пойти домой Ñвоим коллегам. ЗдеÑÑŒ не может быть четких правил Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹, так же, как не может быть однозначных правил о том, как воÑпитывать детей. Ð’Ñе люди разные. Свыше 60 рабочих чаÑов в неделю Ð´Ð»Ñ Ð¼ÐµÐ½Ñ Ð¾Ð³Ñ€Ð¾Ð¼Ð½Ð°Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°, которую Ñ Ð¼Ð¾Ð³Ñƒ выдержать лишь небольшое Ð²Ñ€ÐµÐ¼Ñ (около недели). Ðо иногда от Ð¼ÐµÐ½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñтолько. Ðе знаю, Ñправедливо ли ожидать от человека 60 чаÑов работы в неделю. Я не уверен, что даже 40 чаÑов Ñто Ñправедливо. Однако, Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что глупо работать так много, чтобы почти не извлекать пользы от дополнительных чаÑов работы. Ð”Ð»Ñ Ð¼ÐµÐ½Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñтот предел лежит за 60 чаÑами в неделю. Я лично Ñчитаю, что программиÑÑ‚ должен проÑвлÑть благородÑтво и неÑти Ñту Ñ‚Ñжелую ношу. Однако, быть козлом Ð¾Ñ‚Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ - не обÑзанноÑть программиÑта. Печальный факт заключаетÑÑ Ð² том, что чаÑто программиÑтов проÑÑÑ‚ быть козлами отпущениÑ, чтобы уÑтроить Ð´Ð»Ñ ÐºÐ¾Ð³Ð¾-то предÑтавление, например, когда менеджер пытаетÑÑ Ð²Ð¿ÐµÑ‡Ð°Ñ‚Ð»Ð¸Ñ‚ÑŒ руководителÑ. ПрограммиÑты чаÑто идут на Ñто, потому что они хотÑÑ‚ угодить и не умеют говорить "нет". ЕÑть четыре ÑпоÑоба защиты от такого отношениÑ: diff --git a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md index af8c34e..0455ab0 100644 --- a/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md +++ b/ru/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -8,6 +8,6 @@ Ð’Ñегда лучше инкапÑулировать компонент таким образом, чтобы он был отделен от оÑновной ÑиÑтемы, и его можно было легко заменить. ЕÑли компонент покажет Ñвою неработоÑпоÑобноÑть, вы замените его на другой или напишите Ñвой ÑобÑтвенный. ИнкапÑулÑÑ†Ð¸Ñ Ð½Ðµ улучшает переноÑимоÑть, но делает перепиÑывание кода проще, что почти также здорово. -ЕÑли у Ð²Ð°Ñ ÐµÑть иÑходный код компонента, то риÑки ÑнижаютÑÑ Ð²Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð¾. С иÑходным кодом вы можете быÑтрее оценивать компонент, отлаживать, находить новые Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ вноÑить иÑправлениÑ. ЕÑли вы вноÑите иÑправлениÑ, то о них Ñледует Ñообщить владельцу компонента, чтобы он включил их в официальный релиз. Ð’ противном Ñлучае, вам придетÑÑ ÑамоÑтоÑтельно поддерживать неофициальную верÑию компонента. +ЕÑли у Ð²Ð°Ñ ÐµÑть иÑходный код компонента, то риÑки ÑнижаютÑÑ Ð²Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð¾. С иÑходным кодом вы можете быÑтрее оценивать компонент, отлаживать, находить новые Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ вноÑить иÑправлениÑ. ЕÑли вы вноÑите иÑправлениÑ, то о них Ñледует Ñообщить владельцу компонента, чтобы он включил их в официальный релиз. Ð’ противном Ñлучае вам придетÑÑ ÑамоÑтоÑтельно поддерживать неофициальную верÑию компонента. Следующее: [Как оценивать Ñтороннее программное обеÑпечение](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md index 5bb0c16..37b4aa1 100644 --- a/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md +++ b/ru/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -1,6 +1,6 @@ # Как решить: покупать программу или пиÑать Ñвою [//]: # (Version:1.0.0) -ПредпринимательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проект, которые пытаютÑÑ Ð´Ð¾Ð±Ð¸Ñ‚ÑŒÑÑ Ñ‡ÐµÐ³Ð¾-то Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ программного отбеÑпечениÑ, поÑтоÑнно вынуждены принимать Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° *покупать программу или пиÑать Ñвою*. Это выражение неудачно по двум причинам. Оно как будто игнорирует ÑущеÑтвование Ñвободного и открытого программного обеÑпечениÑ, которое необÑзательно покупать. И, что более важно, его Ñтоит переформулировать в *приобреÑти и интегрировать или напиÑать Ñвое и интегрировать*, потому что затраты на интеграцию обÑзательны надо учеÑть. Такие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ редкого ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´ÐµÐ»Ð¾Ð²Ð¾Ð¹, управленчеÑкой и инженерной Ñмекалки. +ПредпринимательÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проект, которые пытаютÑÑ Ð´Ð¾Ð±Ð¸Ñ‚ÑŒÑÑ Ñ‡ÐµÐ³Ð¾-то Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ программного обеÑпечениÑ, поÑтоÑнно вынуждены принимать Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° *покупать программу или пиÑать Ñвою*. Это выражение неудачно по двум причинам. Оно как будто игнорирует ÑущеÑтвование Ñвободного и открытого программного обеÑпечениÑ, которое необÑзательно покупать. И, что более важно, его Ñтоит переформулировать в *приобреÑти и интегрировать или напиÑать Ñвое и интегрировать*, потому что затраты на интеграцию обÑзательны надо учеÑть. Такие Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ редкого ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´ÐµÐ»Ð¾Ð²Ð¾Ð¹, управленчеÑкой и инженерной Ñмекалки. - ÐаÑколько полно ваши Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ñовпадают Ñ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñми, под которые было Ñоздано программное обеÑпечение, раÑÑматривающееÑÑ Ðº покупке? - ÐšÐ°ÐºÐ°Ñ Ñ‡Ð°Ñть программы, которую вы можете купить, дейÑтвительно вам нужна? diff --git a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md index 8395deb..d911a6d 100644 --- a/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md +++ b/ru/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -1,6 +1,6 @@ # Как раÑти профеÑÑионально [//]: # (Version:1.0.0) -Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте ту роль, которую вы хотите, чтобы вам поручили. Выражайте признательноÑть и благодарноÑть людÑи за их вклад в уÑпех организации и за помощь лично вам. +Возьмите на ÑÐµÐ±Ñ Ñ€Ð¾Ð»ÑŒ, превышающую вашу ответÑтвенноÑть. ВыполнÑйте ту роль, которую вы хотите, чтобы вам поручили. Выражайте признательноÑть и благодарноÑть людÑм за их вклад в уÑпех организации и за помощь лично вам. ЕÑли вы хотите Ñтать лидером команды, ÑпоÑобÑтвуйте формированию общего ÑоглаÑÐ¸Ñ Ð² работе. ЕÑли вы хотите Ñтать менеджером, возьмите ответÑтвенноÑть за график. Обычно вы Ñпокойно можете Ñделать Ñто, Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ Ñ Ð»Ð¸Ð´ÐµÑ€Ð¾Ð¼ или менеджером, так как Ñто Ñнимет Ñ Ð½Ð¸Ñ… большую нагрузку. ЕÑли Ñто Ñлишком ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, возьмите на ÑÐµÐ±Ñ Ð¾Ð±ÑзанноÑти поменьше. diff --git a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md index d6e987b..514934f 100644 --- a/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md +++ b/ru/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -10,7 +10,7 @@ При разговоре Ñ Ð²Ð°ÑˆÐµÐ¹ командой вы, не думаÑ, иÑпользуете ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñленг, которые гораздо короче и Ñффективнее, так как у вÑех Ð²Ð°Ñ Ñхожий опыт Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñми и вашим продуктом в чаÑтноÑти. ПотребуетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶Ð¸Ñ‚ÑŒ уÑилие, чтобы не иÑпользовать Ñтот Ñленг Ñ Ñ‚ÐµÐ¼Ð¸, у кого нет подобного опыта, оÑобенно, еÑли приÑутÑтвуют члены вашей команды. Такой Ñленг Ñоздает Ñтену между вами и оÑтальными и даже хуже, заÑтавлÑет их беÑÑмыÑленно тратить времÑ. -С вашей командой базовый контекÑÑ‚ и цели Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑны и не нуждаютÑÑ Ð² чаÑтом повторении, вы фокуÑируетеÑÑŒ на деталÑÑ…. С неинженерами нужен другой подход. Они могут не понимать то, что вы Ñчитаете разумеещимÑÑ. И поÑкольку вы Ñчитаете Ñто очевидным и не объÑÑнÑете детали, поÑле разговора Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¾Ð¼ вам может показатьÑÑ, что вы прекраÑно понÑли друг друга, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº в дейÑтвительноÑти образовалоÑÑŒ большое недопонимание. Вам Ñледует предполагать, что будет недопонимание, и внимательно Ñледить, где в разговоре оно может поÑвитьÑÑ. ПоÑтарайтеÑÑŒ, чтобы ваш ÑобеÑедник повторил или переформулировал Ñвоими Ñловами то, что вы ему Ñказали, чтобы убедитьÑÑ, что он правильно вÑе понÑл. ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть чаÑто вÑтречатьÑÑ Ñ Ñтим человеком, потратьте времÑ, чтобы узнать, наÑколько Ñффективно вы выражаете ÑÐµÐ±Ñ Ð¸ как вы можете Ñто делать лучше. ЕÑли в общении возникает проблема, ÑтремитеÑÑŒ изменить ÑобÑтвенный подход вмеÑто того, чтобы разочаровыватьÑÑ Ð² подходе ÑобеÑедников. +С вашей командой базовый контекÑÑ‚ и цели Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑны и не нуждаютÑÑ Ð² чаÑтом повторении, вы фокуÑируетеÑÑŒ на деталÑÑ…. С неинженерами нужен другой подход. Они могут не понимать то, что вы Ñчитаете разумеющимÑÑ. И поÑкольку вы Ñчитаете Ñто очевидным и не объÑÑнÑете детали, поÑле разговора Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð¾Ð¼ вам может показатьÑÑ, что вы прекраÑно понÑли друг друга, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº в дейÑтвительноÑти образовалоÑÑŒ большое недопонимание. Вам Ñледует предполагать, что будет недопонимание, и внимательно Ñледить, где в разговоре оно может поÑвитьÑÑ. ПоÑтарайтеÑÑŒ, чтобы ваш ÑобеÑедник повторил или переформулировал Ñвоими Ñловами то, что вы ему Ñказали, чтобы убедитьÑÑ, что он правильно вÑе понÑл. ЕÑли у Ð²Ð°Ñ ÐµÑть возможноÑть чаÑто вÑтречатьÑÑ Ñ Ñтим человеком, потратьте времÑ, чтобы узнать, наÑколько Ñффективно вы выражаете ÑÐµÐ±Ñ Ð¸ как вы можете Ñто делать лучше. ЕÑли в общении возникает проблема, ÑтремитеÑÑŒ изменить ÑобÑтвенный подход вмеÑто того, чтобы разочаровыватьÑÑ Ð² подходе ÑобеÑедников. Я обожаю работать Ñ Ð½ÐµÐ¸Ð½Ð¶ÐµÐ½ÐµÑ€Ð°Ð¼Ð¸. Это дает прекраÑные возможноÑти учить других и учитьÑÑ Ñамому. Ð’Ñ‹ можете подавать пример в ÑмыÑле ÑÑноÑти и четкоÑти в общении. Инженеры привыкли вноÑить порÑдок в хаоÑ, вноÑить ÑÑноÑть в неразбериху, и неинженеры очень ценÑÑ‚ Ñто качеÑтво в наÑ. ПоÑкольку мы владеем техничеÑкой ÑкÑпертизой и чаÑто понимаем проблемы бизнеÑа, чаÑто мы можем найти проÑтое решение проблем. diff --git a/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md index 3e85096..96657ef 100644 --- a/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md +++ b/ru/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -1,6 +1,6 @@ # Как заÑлужить доверие [//]: # (Version:1.0.0) -Чтобы вам доверÑли, вы должны заÑлуживать доверие. Ð’Ñ‹ также должны быть на виду. ЕÑли никто не знает Ð²Ð°Ñ Ñ‚Ð¾Ð»ÐºÐ¾Ð¼, то никто до конца вам не поверит. С теми, кто близок к вам, например, Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами по команде, такой проблемы не будет. ЗаÑлужить доверие за пределами Ñвоего отдела или команды можно будучи отзывчивым и информативным. Иногда кто-нибудь попробует злоупотребить Ñтим доверием и попроÑит о необоÑнованных уÑтупках. Ðе бойтеÑÑŒ, проÑто объÑÑните, чем вам придетÑÑ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ñ‚ÑŒ, чтобы выполнить проÑьбу. +Чтобы вам доверÑли, вы должны заÑлуживать довериÑ. Ð’Ñ‹ также должны быть на виду. ЕÑли никто не знает Ð²Ð°Ñ Ñ‚Ð¾Ð»ÐºÐ¾Ð¼, то никто до конца вам не поверит. С теми, кто близок к вам, например, Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ коллегами по команде, такой проблемы не будет. ЗаÑлужить доверие за пределами Ñвоего отдела или команды можно будучи отзывчивым и информативным. Иногда кто-нибудь попробует злоупотребить Ñтим доверием и попроÑит о необоÑнованных уÑтупках. Ðе бойтеÑÑŒ, проÑто объÑÑните, чем вам придетÑÑ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ñ‚ÑŒ, чтобы выполнить проÑьбу. Ðе притворÑйтеÑÑŒ, что знаете то, что вы на Ñамом деле не знаете. С людьми, которые не ÑвлÑÑŽÑ‚ÑÑ Ñ‡Ð°Ñтью вашей команды, вам придетÑÑ Ñ‡ÐµÑ‚ÐºÐ¾ объÑÑнить разницу между ответами "не могу ответить на Ñто Ñходу" и "не могу Ñтого знать в принципе". diff --git a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md index 7361e3b..8be4c0c 100644 --- a/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md +++ b/ru/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -1,6 +1,6 @@ # Как баланÑировать краткоÑть и абÑтракцию [//]: # (Version:1.0.0) -ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто оÑнова программированиÑ. Следует тщательно выбирать, наÑколько абÑтрактным вам Ñледует быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракций, чем в дейÑтвительноÑти необходимо. Один из признаков такой Ñитуации: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат только Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода надо ÑоизмерÑть Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаюмую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и кажетÑÑ, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которое чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. Ðа Ñту тему Ñ Ð¾Ñ‡ÐµÐ½ÑŒ рекомендую прочеÑть Ñтатью Пола ГрÑхема ['Succinctness is Power'](http://www.paulgraham.com/power.html). +ÐбÑÑ‚Ñ€Ð°ÐºÑ†Ð¸Ñ - Ñто оÑнова программированиÑ. Следует тщательно выбирать, наÑколько абÑтрактным вам Ñледует быть. Ðачинающие программиÑты в Ñвоем Ñнтузиазме чаÑто Ñоздают больше абÑтракций, чем в дейÑтвительноÑти необходимо. Один из признаков такой Ñитуации: вы Ñоздаете клаÑÑÑ‹, которые почти не Ñодержат код и Ñлужат только Ð´Ð»Ñ Ð°Ð±Ñтрактного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ³Ð¾-то. ПривлекательноÑть Ñтого подхода понÑтна, но ценноÑть краткоÑти кода надо ÑоизмерÑть Ñ Ñ†ÐµÐ½Ð½Ð¾Ñтью абÑтракции. Иногда можно видеть ошибку, Ñовершаемую воÑторженными идеалиÑтами: на Ñтарте проекта ÑоздаетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво клаÑÑов, которые кажутÑÑ Ð²Ð¾Ñхитительно абÑтрактными, и кажетÑÑ, что они ÑправÑÑ‚ÑÑ Ñо вÑеми ÑитуациÑми, которые только могут возникнуть. По мере Ð¿Ñ€Ð¾Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÑƒÑталоÑти код ÑтановитÑÑ Ð±ÐµÑпорÑдочным. Тела функций ÑтановÑÑ‚ÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ, чем они должны быть. ПуÑтые клаÑÑÑ‹ Ñто еще и Ð±Ñ€ÐµÐ¼Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, которое чаÑто игнорируетÑÑ Ð¿Ð¾Ð´ давлением. Итоговый результат был бы лучше, еÑли бы ÑнергиÑ, Ð¿Ð¾Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð½Ð° абÑтракцию, была бы потрачена на то, чтобы Ñохранить код кратким и проÑтым. Это разновидноÑть *ÑпекулÑтивного программированиÑ*. Ðа Ñту тему Ñ Ð¾Ñ‡ÐµÐ½ÑŒ рекомендую прочеÑть Ñтатью Пола ГрÑхема ['Succinctness is Power'](http://www.paulgraham.com/power.html). СущеÑтвует определенные догмы, ÑвÑзанные Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ полезными техниками как *Ñокрытие информации* и *объектно-ориентированное программирование*, применение которых иногда заходит Ñлишком далеко. Они позволÑÑŽÑ‚ пиÑать код более абÑтрактно и предвидеть возможные в нем изменениÑ. Однако, Ñ Ð»Ð¸Ñ‡Ð½Ð¾ Ñчитаю, что не Ñледует пиÑать Ñлишком много ÑпекулÑтивного кода. Ðапример, принÑто прÑтать целочиÑленные переменные в объектах за публичными методами клаÑÑа, так что Ñама Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ видна, а доÑтупен только Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº ней. Это позволÑет изменить реализацию Ñтой переменной без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰ÐµÐ³Ð¾ Ñти методы кода. Возможно, Ñто подходит Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ библиотек, где необходимо предоÑтавить уÑтойчивый API. Ðо Ñ Ð½Ðµ думаю, что преимущеÑтва Ñтого подхода перевешивают избыток кода, потраченного на него, оÑобенно, когда Ð¼Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° владеет вызывающим кодом и может перепиÑать как его, так и вызываемый код. Четыре или пÑть Ñтрок кода - Ñто Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ†ÐµÐ½Ð° за такое умозрительное преимущеÑтво. diff --git a/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md index f0fb89e..3049d62 100644 --- a/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md +++ b/ru/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -1,5 +1,5 @@ # ÐаучитеÑÑŒ печатать вÑлепую [//]: # (Version:1.0.0) -ÐаучитеÑÑŒ печатать вÑлепую. Это навык Ñреднего уровнÑ, потому что пиÑать код наÑтолько Ñложно, что ÑкороÑть его набора неважна и неÑильно влиÑет на затраченное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку, наÑколько бы хорошим программиÑтом вы не ÑвлÑлиÑÑŒ. Однако, к тому времени, как вы Ñтанете программиÑтом Ñреднего уровнÑ, Ñкорее вÑего вы потратите кучу времени на пиÑьменное общение Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и вÑеми оÑтальными. Этот навык - интереÑÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° вашей целеуÑтемленноÑти. Он требует поÑвÑтить на ÑÐµÐ±Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ðµ времÑ, которое вовÑе не так интереÑно потратить именно на него. Легенда глаÑит, что когда Майкл Тименн работал в Microelectronics and Computer Technology Corporation, его коллеги ÑобиралиÑÑŒ у двери его кабинета поÑлушать гул, производимый им при нажатии клавиш. Они были наÑтолько быÑтры, что были практичеÑки неразличимы. +ÐаучитеÑÑŒ печатать вÑлепую. Это навык Ñреднего уровнÑ, потому что пиÑать код наÑтолько Ñложно, что ÑкороÑть его набора неважна и неÑильно влиÑет на затраченное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° разработку, наÑколько бы хорошим программиÑтом вы не ÑвлÑлиÑÑŒ. Однако, к тому времени, как вы Ñтанете программиÑтом Ñреднего уровнÑ, Ñкорее вÑего вы потратите кучу времени на пиÑьменное общение Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ и вÑеми оÑтальными. Этот навык - интереÑÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° вашей целеуÑтремленноÑти. Он требует поÑвÑтить на ÑÐµÐ±Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ðµ времÑ, которое вовÑе не так интереÑно потратить именно на него. Легенда глаÑит, что когда Майкл Тименн работал в Microelectronics and Computer Technology Corporation, его коллеги ÑобиралиÑÑŒ у двери его кабинета поÑлушать гул, производимый им при нажатии клавиш. Они были наÑтолько быÑтры, что были практичеÑки неразличимы. Следующее: [Как проводить интеграционное теÑтирование](08-How-to-Do-Integration-Testing.md) diff --git a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md index e624185..47a0bb6 100644 --- a/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md +++ b/ru/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -1,6 +1,6 @@ # Языки взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем [//]: # (Version:1.0.0) -СущеÑтвуют Ñзыки, то еÑть формально определенные ÑинтакÑичеÑкие ÑиÑтемы, которые ÑвлÑÑŽÑ‚ÑÑ Ð½Ðµ Ñзыками программированиÑ, а Ñзыками взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем, Ñоздаными Ñпециально Ð´Ð»Ñ Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Ñтандартизацию. Ð’ 2003 году Ñамые важные из них Ñто UML, XML и SQL. Ð’Ñ‹ должны быть знакомы Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ из них, чтобы уметь иÑпользовать их и понимать, когда их Ñледует применÑть. +СущеÑтвуют Ñзыки, то еÑть формально определенные ÑинтакÑичеÑкие ÑиÑтемы, которые ÑвлÑÑŽÑ‚ÑÑ Ð½Ðµ Ñзыками программированиÑ, а Ñзыками взаимодейÑÑ‚Ð²Ð¸Ñ ÑиÑтем, Ñозданными Ñпециально Ð´Ð»Ñ Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Ñтандартизацию. Ð’ 2003 году Ñамые важные из них Ñто UML, XML и SQL. Ð’Ñ‹ должны быть знакомы Ñ ÐºÐ°Ð¶Ð´Ñ‹Ð¼ из них, чтобы уметь иÑпользовать их и понимать, когда их Ñледует применÑть. UML - Ñто Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñхем и диаграмм, опиÑывающих архитектуру. Ее прелеÑть в том, что она одновременно и визуальна, и формальна, и ÑпоÑобна передать огромное количеÑтво информации, еÑли автор и его Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑŽÑ‚ UML. Вам Ñледует знать UML, потому что иногда архитектуру опиÑывают Ñ ÐµÐµ помощью. СущеÑтвуют очень полезные инÑтрументы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ„ÐµÑÑионально выглÑдÑщих Ñхем UML. Во многих ÑлучаÑÑ…, UML Ñлишком ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑиÑтема, и Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° находил, что Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… Ñхем проще иÑпользовать Ñтрелки и прÑмоугольники. Ðо Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что изучение UML полезно так же, как и изучение латыни. diff --git a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md index f93871e..4585f86 100644 --- a/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md +++ b/ru/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -6,7 +6,7 @@ - РелÑционные базы данных - ПолнотекÑтовые поиÑковые ÑиÑтемы -- МатематичеÑкие бибилиотеки +- МатематичеÑкие библиотеки - OpenGL - XML-парÑеры - Электронные таблицы diff --git a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md index fd83cb3..eb44dc6 100644 --- a/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md +++ b/ru/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -6,8 +6,8 @@ Ðеважно, на каком Ñтапе вы начинаете работать Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, они вÑегда оÑтаютÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ заботой в хорошо Ñпроектированном приложении. ЕÑли вы внимательно поÑмотрите, как бизнеÑ-аналитик извлекает Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· запроÑов клиентов, то поймете, что данные играют фундаментальную роль. Ðналитик Ñоздает так называемые диаграммы потоков данных, где указаны иÑточники данных, и обозначен поток информации. Определив, какие данные будут чаÑтью ÑиÑтемы, архитектор начнет формировать иÑточники данных Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð°Ð· данных, протоколов обмена данными и форматов файлов. ПоÑле Ñтого задачу можно передавать программиÑту. Ðо процеÑÑ Ð½Ð° Ñтом не заканчиваетÑÑ, потому что вы (программиÑÑ‚) даже поÑле подобной тщательной обработки данных должны проанализировать их, чтобы выполнить задачу оптимальным ÑпоÑобом. Ð’ оÑнове вашей работы лежит Ð¸Ð´ÐµÑ ÐиклауÑа Вирта, ÑÐ¾Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑкольких Ñзыков программированиÑ. "Ðлгоритмы + Структуры данных = Программы". Ðлгоритм никогда не ÑущеÑтвует отдельно, Ð´ÐµÐ»Ð°Ñ Ñ‡Ñ‚Ð¾-то Ñам по Ñебе. Каждый алгоритм обÑзательно взаимодейÑтвует как минимум Ñ ÐºÐ°ÐºÐ¾Ð¹-то чаÑтью данных. -Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. +Таким образом, раз алгоритмы не функционируют в вакууме, вы должны анализировать и данные, которые кто-то передал вам Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸, и данные, которые надо воплотить в коде. Вот проÑтой пример. Ð’Ñ‹ пишите программу Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка книг в библиотеки. СоглаÑно вашей Ñпецификации пользователь может выбрать книги по Ñочетанию жанра, автора, названию, издателю, году Ð¸Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ чиÑлу Ñтраниц. ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ вашего Ð¼Ð¾Ð´ÑƒÐ»Ñ - Ñоздать корректный Ð·Ð°Ð¿Ñ€Ð¾Ñ SQL Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ в базе данных. ОÑновываÑÑÑŒ на Ñтих требованиÑÑ…, вы можете выбирать варианты. Можно проверÑть каждый параметр по очереди, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ "switch" или неÑколько поÑледовательных "if". Можно Ñоздать маÑÑив параметров и проверÑть, еÑть ли в нем каждый параметр. Можно Ñоздать (или иÑпользовать) абÑтрактный объект Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, от которого унаÑледовать конкретные параметры и ÑвÑзать их Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑобытиÑми. ЕÑли в требованиÑÑ… еÑть наÑтройка производительноÑти запроÑа через проверку параметров в определенном порÑдке, то вы можете раÑÑмотреть применение дерева компонентов Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ SQL-запроÑа. Как видно, выбор алгоритма завиÑит от данных, которые вы решите иÑпользовать или Ñоздать. Подобные Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто отделÑÑŽÑ‚ Ñффективные алгоритмы от провальных. Однако, ÑффективноÑть здеÑÑŒ не единÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Ð’Ñ‹ можете Ñоздать деÑÑток переменных и Ñделать их макÑимально Ñффективными. Ðо такой код не будет легко поддерживаемым. Возможно, выбор подходÑщего контейнера Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñех ваших переменных поможет Ñохранить ту же ÑкороÑть алгоритма и вдобавок Ñделает код более понÑтным Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… коллег, когда они вернутÑÑ Ðº нему в Ñледующем году. Более того, хорошо Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтруктура данных позволит им легко раÑширить функциональноÑть вашего кода без перепиÑÑ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ имеющихÑÑ Ñ‡Ð°Ñтей. Ð’ конечном Ñчете ваш выбор данных определÑет, как долго проÑущеÑтвует ваш код. -Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Преположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знанием нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтокнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. +Еще один пример Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð¸Ð¹. Предположим, у Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° найти вÑе Ñлова в Ñловаре Ñ Ñ‚Ñ€ÐµÐ¼Ñ Ð¸ более анаграммами. При Ñтом анаграмма должна быть другим Ñловом в Ñтом же Ñловаре. ЕÑли вы будете думать об Ñтой задаче, как о задаче на вычиÑление, то вы придете к беÑконечным вычиÑлениÑм в попытке вычиÑлить вÑе комбинации анаграмм Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова и Ñравнить их Ñо вÑеми оÑтальными Ñловами в Ñловаре. Однако, Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð¸Ñходные данные, вы можете заметить, что каждое Ñлово можно предÑтавить как запиÑÑŒ Ñ Ñамим Ñловом и Ñортированным маÑÑивом из его букв в виде ID. С Ñтим знанием нахождение анаграмм превращаетÑÑ Ð² Ñортировку Ñтого маÑÑива и нахождение Ñлов Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼ ID. ПрÑмой алгоритм может потребовать неÑколько дней на выполнение, тогда как более хитрый выполнÑетÑÑ Ð·Ð° неÑколько Ñекунд. Ð’Ñпомните Ñтот пример, когда в Ñледующий раз вы ÑтолкнетеÑÑŒ Ñ Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ð¹ проблемой. Следующее: [Командные навыки. Как управлÑть временем разработки](../Team-Skills/01-How-to-Manage-Development-Time.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md index 377ded9..1f21cfd 100644 --- a/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md +++ b/ru/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) Чтобы управлÑть временем разработки, поддерживайте четкий и актуальный проектный план. Проектный план - Ñто оценка временных затрат, график, набор промежуточных Ñтапов Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑÑа и раÑпределение времени вашей команды на каждое задание. Он также должен включать другие вещи, о которых важно помнить: вÑтречи Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ теÑтированиÑ, подготовка документации, заказ рабочего оборудованиÑ. ЕÑли вы работаете в команде, проектный план должен быть ÑоглаÑованным решением, как на Ñтарте проекта, там и по его ходу. -Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком подробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñти Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ°ÑаютÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… людей. План и ваша ÑкÑпертиза позволÑÑ‚ вам понÑть, Ñледует ли передать чаÑть задач одного члена команды другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте трекер, чтобы поддерживать емкоÑть и актуальноÑть задач. +Проектный план Ñлужит Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, а не Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½Ñтрации того, наÑколько вы организованы. ЕÑли он Ñлишком подробный или неактуальный, к нему беÑполезно обращатьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹. Ð’ реальноÑти, вÑе Ñти Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐºÐ°ÑаютÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… людей. План и ваша ÑкÑпертиза позволÑÑ‚ вам понÑть, Ñледует ли передать чаÑть задач одного члена команды другому. Этапы проекта отмечают его прогреÑÑ. ЕÑли вы иÑпользуете модный Ñовременный трекер задач Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, не поддавайтеÑÑŒ Ñоблазну Ñходу раÑпиÑать большой предварительный план. Лучше иÑпользуйте трекер, чтобы поддерживать емкоÑть и актуальноÑть задач. ЕÑли вы не уÑпеваете выполнить Ñтап, Ñледует немедленно предпринÑть что-то, как минимум проинформировать боÑÑа о том, что запланированное завершение проекта ÑмеÑтитÑÑ Ð½Ð° некоторое времÑ. Стоило бы начать Ñ Ñ‚Ð¾Ð³Ð¾, что оценка и раÑпиÑание никогда не будут идеальны, но они дают иллюзию, что вы Ñможете наверÑтать пропущенные дни в конце проекта. Может быть. Ðо так же вероÑтно, что вы недооценили Ñту чаÑть проекта, как и то, что вы ее переоценили. Так что запланированное завершение проекта уже ÑмеÑтилоÑÑŒ, нравитÑÑ Ð²Ð°Ð¼ Ñто или нет. diff --git a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md index 1c62c8b..2e17b5d 100644 --- a/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md +++ b/ru/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -6,6 +6,6 @@ ЕÑли Ñтороннее программное обеÑпечение вÑе же ÑущеÑтвует, оно по-прежнему неÑет Ñ Ñобой риÑки, но по крайней мере Ñти риÑки можно преодолеть. ЕÑли вы предполагаете иÑпользование Ñторонних программ, уже на ранней Ñтадии проекта Ñледует поÑвÑтить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð° их оценку. Ðикому не понравитÑÑ ÑƒÑлышать, что потребуетÑÑ Ð´Ð²Ðµ недели, а то и два меÑÑца на оценку пригодноÑти вÑех трех Ñторонних программ, но Ñто то, что надо Ñделать как можно раньше. СтоимоÑть интеграции Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ без надлежащей оценки задейÑтвованных Ñторонних программ. -Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно, и в оÑновном им владеют ÑкÑперты. Ð’Ñ‹ можете ÑÑкономить кучу времени, еÑли Ñможете их найти. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. Ðикогда не вноÑите в график еще не выпущенное Ñтороннее программное обеÑпечение. +Понимание пригодноÑти ÑущеÑтвующих Ñторонних программ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… задач - Ñто очень отраÑлевое знание. Оно Ñубъективно, и в оÑновном им владеют ÑкÑперты. Ð’Ñ‹ можете ÑÑкономить кучу времени, еÑли Ñможете их найти. ЧаÑто проект наÑтолько завиÑит от Ñтороннего программного обеÑпечениÑ, что еÑли Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»Ð¸Ñ‚ÑÑ, то провалитÑÑ Ð²ÐµÑÑŒ проект. Выразите вÑе подобные риÑки в проектном плане. ПоÑтарайтеÑÑŒ иметь план на Ñлучай непредвиденных обÑтоÑтельÑтв, например, альтернативные Ñторонние программы или возможноÑть реализовать чаÑть их функциональноÑти ÑамоÑтоÑтельно. Ðикогда не вноÑите в график еще невыпущенное Ñтороннее программное обеÑпечение. Следующее: [Как руководить конÑультантами](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md index 00d4402..241810a 100644 --- a/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md +++ b/ru/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -1,6 +1,6 @@ # Как ÑоизмерÑть количеÑтво Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ [//]: # (Version:1.0.0) -Тщательно ÑоизмерÑйте ÑтоимоÑть ÑовещаниÑ. Оно равно *его длительноÑти, умноженной на чиÑлу учаÑтников*. Иногда ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹, но небольшие ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ Ð»ÑƒÑ‡ÑˆÐµ. КачеÑтво Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° небольших ÑовещаниÑÑ… лучше, и на них уходит меньше времени. ЕÑли на Ñовещании кто-нибудь Ñкучает, то Ñто знак, что Ñледующее Ñобрание должно быть меньше. +Тщательно ÑоизмерÑйте ÑтоимоÑть ÑовещаниÑ. Оно равно *его длительноÑти, умноженной на чиÑло учаÑтников*. Иногда ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹, но небольшие ÑÐ¾Ð²ÐµÑ‰Ð°Ð½Ð¸Ñ Ð»ÑƒÑ‡ÑˆÐµ. КачеÑтво Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° небольших ÑовещаниÑÑ… лучше, и на них уходит меньше времени. ЕÑли на Ñовещании кто-нибудь Ñкучает, то Ñто знак, что Ñледующее Ñобрание должно быть меньше. Ðеобходимо Ñледует вÑе возможное, чтобы поощрÑть неформальное общение. Во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±ÐµÐ´Ð° Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ делаетÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ полезной работы, чем в любое другое времÑ. Жаль, что многие компании не признают и не поддерживают Ñтот факт. diff --git a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md index b5b9cac..768efbb 100644 --- a/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md +++ b/ru/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -12,6 +12,6 @@ Гай КаваÑаки [Rules] подчеркивает важноÑть *наблюдениÑ* того, чем занÑты ваши пользователи, дополнительно к выÑлушиванию их пожеланий. -Я думаю, что у подрÑдчиков и конÑультантов чаÑто возникают большие проблемы Ñ Ñ‚ÐµÐ¼, чтобы их клиенты проÑÑнили в Ñвоем Ñознаннии, что они хотÑÑ‚ в дейÑтвительноÑти. ЕÑли вы намерены быть конÑультантом, Ñ Ð±Ñ‹ предложил вам выбирать клиентов по четкоÑти их мыÑлей и по кошельку. +Я думаю, что у подрÑдчиков и конÑультантов чаÑто возникают большие проблемы Ñ Ñ‚ÐµÐ¼, чтобы их клиенты проÑÑнили в Ñвоем Ñознании, что они хотÑÑ‚ в дейÑтвительноÑти. ЕÑли вы намерены быть конÑультантом, Ñ Ð±Ñ‹ предложил вам выбирать клиентов по четкоÑти их мыÑлей и по кошельку. Следующее: [Как получить повышение](03-How-to-Get-a-Promotion.md) \ No newline at end of file diff --git a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md index 1809c04..176e94e 100644 --- a/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md +++ b/ru/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -6,7 +6,7 @@ Чтобы получить прибавку к зарплате, обговорите ее, Ð¸Ð¼ÐµÑ Ð½Ð° руках веÑкие аргументы в Ñвою пользу. -ЕÑли вы чуÑтвуете, что Ð²Ð°Ñ Ð¾Ð±Ð¾ÑˆÐ»Ð¸ Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸ÐµÐ¼, поговорите Ñ Ð±Ð¾ÑÑом об Ñтом. СпроÑите его в Ñвном виде, что вы должны делать, чтобы получить повышение, и поÑтарайтеÑÑŒ Ñделать Ñто. Это кажетÑÑ Ð±Ð°Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼, но чаÑто ваше предÑтавление того, что вам надо делать, отличаетÑÑ Ð¾Ñ‚ предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Кроме того, такой разговор в некотором ÑмыÑле подтолкнет вашего боÑÑа. +ЕÑли вы чувÑтвуете, что Ð²Ð°Ñ Ð¾Ð±Ð¾ÑˆÐ»Ð¸ Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸ÐµÐ¼, поговорите Ñ Ð±Ð¾ÑÑом об Ñтом. СпроÑите его в Ñвном виде, что вы должны делать, чтобы получить повышение, и поÑтарайтеÑÑŒ Ñделать Ñто. Это кажетÑÑ Ð±Ð°Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼, но чаÑто ваше предÑтавление того, что вам надо делать, отличаетÑÑ Ð¾Ñ‚ предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ боÑÑа. Кроме того, такой разговор в некотором ÑмыÑле подтолкнет вашего боÑÑа. БольшинÑтво программиÑтов Ñкорее вÑего имеют преувеличенное предÑтавление о ÑобÑтвенных ÑпоÑобноÑÑ‚ÑÑ…. Ð’ конце концов, мы вÑе не можем входить в 10% лучших программиÑтов. Однако, Ñ Ð²Ñтречал и людей, которые были очень Ñильно недооценены. ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð¶Ð¸Ð´Ð°Ñ‚ÑŒ, что оценка каждого будет на 100% Ñовпадать Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ñтью, но Ñ Ð´ÑƒÐ¼Ð°ÑŽ, что в общем люди довольно Ñправедливо ÑÐµÐ±Ñ Ð¾Ñ†ÐµÐ½Ð¸Ð²Ð°ÑŽÑ‚. С одной оговоркой: Ð²Ð°Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ñправедливо оценить без видимоÑти вашей работы. Иногда из-за обÑтоÑтельÑтв или личных качеÑтв кто-то будет не наÑтолько Ñильно заметен. Работа из дома или географичеÑки удаленно от вашей команды и боÑÑа делает Ñто оÑобенно трудным. diff --git a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md index c4bb3ce..085e239 100644 --- a/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md +++ b/ru/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -4,7 +4,7 @@ > Ð’ÑÑ‘, что Ð¼ÐµÐ½Ñ Ð½Ðµ убивает, делает Ð¼ÐµÐ½Ñ Ñильнее. -Ваша ÑÐ°Ð¼Ð°Ñ Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть - Ñто ваша команда. Ð’Ñ‹ должны хорошо знать каждого из членов команды. Ð’Ñ‹ должны нагружать Ñвою команду, но не перегружать. Следует разговаривать Ñ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ вашей команды об их нагрузке. ЕÑли они ÑоглаÑны Ñ Ð½ÐµÐ¹, то они будут хорошо мотивированы. Ð’ каждом проекте ÑтарайтеÑÑŒ нагружать их таким образом, чтобы они были ÑоглаÑны Ñо Ñвоей нагрузкой, и одновременно, чтобы она Ñовпадала Ñ Ð²Ð°ÑˆÐ¸Ð¼ ÑобÑтвенным мнением о том, что нужно членам вашей команды. Ðагружайте их не объемом работы, а оÑвоением новых навыков или Ñлегка иной ролью в команде. +Ваша ÑÐ°Ð¼Ð°Ñ Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‚ÑтвенноÑть - Ñто ваша команда. Ð’Ñ‹ должны хорошо знать каждого из членов команды. Ð’Ñ‹ должны нагружать Ñвою команду, но не перегружать. Следует разговаривать Ñ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ команды об их нагрузке. ЕÑли они ÑоглаÑны Ñ Ð½ÐµÐ¹, то они будут хорошо мотивированы. Ð’ каждом проекте ÑтарайтеÑÑŒ нагружать их таким образом, чтобы они были ÑоглаÑны Ñо Ñвоей нагрузкой, и одновременно, чтобы она Ñовпадала Ñ Ð²Ð°ÑˆÐ¸Ð¼ ÑобÑтвенным мнением о том, что нужно членам вашей команды. Ðагружайте их не объемом работы, а оÑвоением новых навыков или Ñлегка иной ролью в команде. Вам Ñледует позволÑть людÑм (и Ñебе тоже) иногда ошибатьÑÑ. ПредуÑматривайте Ñти неудачи в графике. ЕÑли ошибки и неудачи никогда не ÑлучаютÑÑ, то нет и чувÑтва приключениÑ. ЕÑли иногда в работе нет ошибок и неудач, значит, вы недоÑтаточно ÑтараетеÑÑŒ. Когда кто-то ошибаетÑÑ, вам Ñледует веÑти ÑÐµÐ±Ñ Ñ‚Ð°Ðº вежливо, как вы можете, одновременно не отноÑÑÑÑŒ к человеку так, Ñловно он преуÑпел. diff --git a/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md index 5b759f7..046f8a2 100644 --- a/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md +++ b/ru/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -1,5 +1,5 @@ # Как выбрать, над чем работать -Ð’Ñ‹ баланÑируете Ñвои ÑобÑтвенные потребноÑти Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ÑÑ‚Ñми команды через выбор того аÑпекта проекта, над которым вы работаете. Вам Ñледует делать то, что у Ð²Ð°Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÐµÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ вÑего, но ищите ÑпоÑобы занÑть ÑÐµÐ±Ñ Ð½Ðµ увеличением работы, а применением новых навыков. ЛидерÑтво и навыки Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ важны, чем техничеÑкие навыки. ЕÑли вы очень Ñильный программиÑÑ‚, берите на ÑÐµÐ±Ñ Ñамые Ñложные или риÑкованные задачи и выполнÑйте их как можно раньше, чтобы Ñнизить риÑки. +Ð’Ñ‹ баланÑируете Ñвои ÑобÑтвенные потребноÑти Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ÑÑ‚Ñми команды через выбор того аÑпекта проекта, над которым вы работаете. Вам Ñледует делать то, что у Ð²Ð°Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÐµÑ‚ÑÑ Ð»ÑƒÑ‡ÑˆÐµ вÑего, но ищите ÑпоÑобы занÑть ÑÐµÐ±Ñ Ð½Ðµ увеличением работы, а применением новых навыков. ЛидерÑтво и навыки Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ важны, чем техничеÑкие навыки. ЕÑли вы очень Ñильный программиÑÑ‚, берите на ÑÐµÐ±Ñ Ñамые Ñложные или риÑкованные задачи и выполнÑйте их как можно раньше, чтобы Ñнизить риÑки. Следующее: [Как получить наибольшую отдачу от коллег](03-How-to-Get-the-Most-From-Your-Teammates.md) \ No newline at end of file diff --git a/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md index e9c6ead..281b917 100644 --- a/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md +++ b/ru/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -1,6 +1,6 @@ # Как раÑпределÑть Ñкучные Ð·Ð°Ð´Ð°Ð½Ð¸Ñ -Иногда невозможно избежать Ñкучных задач, которые критичны Ð´Ð»Ñ ÑƒÑпеха компании или проекта. Такие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñильно подорвать дух тех, кому придетÑÑ Ð¸Ð¼Ð¸ заниматьÑÑ. Лучше вÑего поÑтратьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ ÑпоÑоб заÑтавить компьютер выполнÑть Ñти задачи вмеÑто ваших коллег, либо заÑтавить его помочь им. Работа в течение недели над программой, выполнÑющей задачу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ займет ту же неделю, имеет то огромное выгоду, что она учит большему и иногда более повторÑема. +Иногда невозможно избежать Ñкучных задач, которые критичны Ð´Ð»Ñ ÑƒÑпеха компании или проекта. Такие Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñильно подорвать дух тех, кому придетÑÑ Ð¸Ð¼Ð¸ заниматьÑÑ. Лучше вÑего поÑтратьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ ÑпоÑоб заÑтавить компьютер выполнÑть Ñти задачи вмеÑто ваших коллег, либо заÑтавить его помочь им. Работа в течение недели над программой, выполнÑющей задачу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ займет ту же неделю, имеет то огромное выгоду, что она учит большему и иногда более повторÑемаÑ. ЕÑли ничего из Ñтого не Ñработает, извинитеÑÑŒ перед теми, кому придетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñкучные задачи, но ни при каких обÑтоÑтельÑтвах не позволÑйте заниматьÑÑ Ð¸Ð¼Ð¸ в одиночку. Как минимум назначьте двоих на Ñту работу и поощрÑйте командную работу в выполнении таких задач. diff --git a/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md index 6c49c31..c4dfef2 100644 --- a/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md +++ b/ru/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -1,6 +1,6 @@ # Как развивать ÑиÑтему -Ð¡ÐµÐ¼Ñ Ñодержит в Ñебе идею дерева, но не имеет форму и мощь взроÑлого раÑтениÑ. Ð¡ÐµÐ¼Ñ Ð²Ñ‹Ñ€Ð°Ñтает в Ñаженец. Он ÑтановитÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ. Он вÑе больше похож на взроÑлое дерево. Дерево начичает приноÑить плоды. Ðаконец, оно умирает и Ñлужит пищей Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… организмов. +Ð¡ÐµÐ¼Ñ Ñодержит в Ñебе идею дерева, но не имеет форму и мощь взроÑлого раÑтениÑ. Ð¡ÐµÐ¼Ñ Ð²Ñ‹Ñ€Ð°Ñтает в Ñаженец. Он ÑтановитÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ. Он вÑе больше похож на взроÑлое дерево. Дерево начинает приноÑить плоды. Ðаконец, оно умирает и Ñлужит пищей Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… организмов. У Ð½Ð°Ñ ÐµÑть роÑкошь отноÑитьÑÑ Ðº программному обеÑпечению похожим образом. МоÑÑ‚ не похож на программное обеÑпечение. Ðе бывает моÑтов-детей, бывают недоÑтроенные моÑты. Они гораздо проще, чем программное обеÑпечение. diff --git a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md index d97c9d8..e44c3ed 100644 --- a/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md +++ b/ru/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -1,6 +1,6 @@ # Как ÑправлÑтьÑÑ Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ хаоÑом -Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организционный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, размещение компании на бирже, маÑÑовый найм Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. +Иногда ÑлучаютÑÑ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ðµ периоды времени, когда царит организационный хаоÑ: такие как маÑÑовые увольнениÑ, покупка компании другой, размещение компании на бирже, маÑÑовый найм Ñотрудников и так далее. Такие времена неÑпокойны Ð´Ð»Ñ Ð²Ñех, но возможно программиÑтам здеÑÑŒ проще, так как их Ñамооценка оÑнована на чем-то большем, чем проÑто должноÑть. Организационный Ñ…Ð°Ð¾Ñ Ñто прекраÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñтов проÑвить Ñвою ÑуперÑилу. Я Ñпециально говорю об Ñтом в Ñамом конце ÑÑÑе, потому что Ñто тайна вÑех программиÑтов. ЕÑли вы не программиÑÑ‚, пожалуйÑта, прекратите чтение прÑмо ÑейчаÑ. > ПрограммиÑты могут Ñоздавать и поддерживать продукт. diff --git a/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md index 21006f2..9b024e2 100644 --- a/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md +++ b/ru/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -1,9 +1,9 @@ # Как отличить Ñложное от невозможного [//]: # (Version:1.0.1) -Ваша работа заключаетÑÑ Ð² том, чтобы делать Ñложное и отличать невозможное. С точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñтва программиÑтов невозможное Ñто то, что невозможно получить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ одной ÑиÑтемы или то, что невозможно оценить. По Ñтому определению научное иÑÑледование невозможно выполнить. Большой объем работы Ñто Ñложно, не необÑзательно невозможно. +Ваша работа заключаетÑÑ Ð² том, чтобы делать Ñложное и отличать невозможное. С точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва программиÑтов невозможное Ñто то, что Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ одной ÑиÑтемы или то, что Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ†ÐµÐ½Ð¸Ñ‚ÑŒ. По Ñтому определению научное иÑÑледование невозможно выполнить. Большой объем работы Ñто Ñложно, но необÑзательно невозможно. Это нешуточное различие, потому что чаÑто Ð²Ð°Ñ Ð±ÑƒÐ´ÑƒÑ‚ проÑить Ñделать то, что невозможно практичеÑки, будь то Ñ Ð½Ð°ÑƒÑ‡Ð½Ð¾Ð¹ точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ программного обеÑпечениÑ. Тогда ваша задача помочь найти разумное решение, которое будет проÑто Ñложным и позволит реализовать большую чаÑть запроÑов. Решение ÑвлÑетÑÑ Ñложным, еÑли его можно Ñ ÑƒÐ²ÐµÑ€ÐµÐ½Ð½Ð¾Ñтью раÑпланировать, и понÑтны ÑвÑзанные Ñ Ð½Ð¸Ð¼ риÑки. -Ðевозможно выполнить туманные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ€Ð¾Ð´Ðµ "ПоÑтроить ÑиÑтему, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ вычиÑлÑть Ñамую привлекательную причеÑку и цвет Ð²Ð¾Ð»Ð¾Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клиента". ЕÑли требование можно Ñделать более четким, оно зачаÑтую Ñтанет Ñложнее, например, "ПоÑтроить ÑиÑтему, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ вычиÑлÑть Ñамую привлекательную причеÑку и цвет Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°, позволÑть им предварительно проÑматривать решение, изменÑть его и наÑтолько хорошо удовлетворÑть клиента, что мы будет получать от Ñтого кучу денег". ЕÑли нет четкого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑƒÑпеха, то вы не добьетеÑÑŒ его. +Ðевозможно выполнить туманные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ€Ð¾Ð´Ðµ "ПоÑтроить ÑиÑтему, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ вычиÑлÑть Ñамую привлекательную причеÑку и цвет Ð²Ð¾Ð»Ð¾Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клиента". ЕÑли требование можно Ñделать более четким, оно зачаÑтую Ñтанет Ñложнее, например, "ПоÑтроить ÑиÑтему, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ вычиÑлÑть Ñамую привлекательную причеÑку и цвет Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°, позволÑть им предварительно проÑматривать решение, изменÑть его и наÑтолько хорошо удовлетворÑть клиента, что мы будем получать от Ñтого кучу денег". ЕÑли нет четкого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑƒÑпеха, то вы не добьетеÑÑŒ его. Следующее: [Как иÑпользовать вÑтроенные Ñзыки](02-How-to-Utilize-Embedded-Languages.md) diff --git a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md index 0017993..e1e43ab 100644 --- a/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md +++ b/ru/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -6,6 +6,6 @@ Я и многие другие программиÑты попадали в ловушку ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñтроенных Ñзыков Ñо Ñпециальным назначением. Я попадалÑÑ Ð½Ð° Ñто дважды. Ð’ мире уже ÑущеÑтвует множеÑтво Ñзыков, которые Ñпроектированы Ñпециально Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ‹Ñ… целей. Подумайте дважды, прежде чем Ñоздавать еще один. -ВопроÑ, который Ñтоит задать Ñебе перед вÑтраиванием Ñзыка, звучит так: входит ли иÑпользование таких Ñзыков в культуру моих пользователей или нет? ЕÑли ваша Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит иÑключительно из непрограммиÑтов, то наÑколько поможет внедрение Ñзыка в ÑиÑтему? ЕÑли Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит из программиÑтов, то не предпочтут ли они API? И какой Ñзык вы ÑобираетеÑÑŒ вÑтраивать? ПрограммиÑты не очень любÑÑ‚ изучать новый Ñзык, еÑли у него узкое применение. Ðо еÑли он похож на то, Ñ Ñ‡ÐµÐ¼ они уже работают, то они быÑтро оÑвоÑÑ‚ его. Создавать новый Ñзык Ñто огромное удовольÑтвие и радоÑть. Ðо мы не должны позволÑть Ñтой радоÑти оÑлеплÑть Ð½Ð°Ñ Ð¸ затмевать потребноÑти пользователÑ. ЕÑли только у Ð²Ð°Ñ Ð½Ðµ по-наÑтоÑщему оригинальные запроÑÑ‹ и идеи, то почему бы не иÑпользовать уже ÑущеÑтвующий Ñзык, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ знакома Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‡Ð°Ñть ваших пользователей? +ВопроÑ, который Ñтоит задать Ñебе перед вÑтраиванием Ñзыка, звучит так: входит ли иÑпользование таких Ñзыков в культуру моих пользователей или нет? ЕÑли ваша Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит иÑключительно из непрограммиÑтов, то наÑколько поможет внедрение Ñзыка в ÑиÑтему? ЕÑли Ñ†ÐµÐ»ÐµÐ²Ð°Ñ Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ ÑоÑтоит из программиÑтов, то не предпочтут ли они API? И какой Ñзык вы ÑобираетеÑÑŒ вÑтраивать? ПрограммиÑты не очень любÑÑ‚ изучать новый Ñзык, еÑли у него узкое применение. Ðо еÑли он похож на то, Ñ Ñ‡ÐµÐ¼ они уже работают, то они быÑтро оÑвоÑÑ‚ его. Создавать новый Ñзык - Ñто огромное удовольÑтвие и радоÑть. Ðо мы не должны позволÑть Ñтой радоÑти оÑлеплÑть Ð½Ð°Ñ Ð¸ затмевать потребноÑти пользователÑ. ЕÑли только у Ð²Ð°Ñ Ð½Ðµ по-наÑтоÑщему оригинальные запроÑÑ‹ и идеи, то почему бы не иÑпользовать уже ÑущеÑтвующий Ñзык, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ знакома Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‡Ð°Ñть ваших пользователей? Следующее: [Выбор Ñзыка программированиÑ](03-Choosing-Languages.md) diff --git a/ru/5-Bibliography.md b/ru/5-Bibliography.md index 874cc14..8274f28 100644 --- a/ru/5-Bibliography.md +++ b/ru/5-Bibliography.md @@ -18,14 +18,14 @@ ## Сайты -[PGSite] Paul Graham. 2002. Статьи на его вебÑайте: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). Рекомендую вÑе Ñтатьи, оÑобенно "Beating the Averages". +[PGSite] Пол ГрÑхем. 2002. Статьи на его вебÑайте: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). Рекомендую вÑе Ñтатьи, оÑобенно "Beating the Averages". -[Hacker] Eric S. Raymond. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). +[Hacker] Эрик С. РÑймонд. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). -[HackDict] Eric S. Raymond. 2003. The New Hacker Dictionary. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). +[HackDict] Эрик С. РÑймонд. 2003. The New Hacker Dictionary. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). -[ExpCS] Edsger W. Dijkstra. 1986. How Experimental is Computing Science?. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). +[ExpCS] ЭдÑгер Ð’. ДейкÑтра. 1986. How Experimental is Computing Science?. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). -[Knife] Edsger W. Dijkstra. 1984. On a Cultural Gap. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). +[Knife] ЭдÑгер Ð’. ДейкÑтра. 1984. On a Cultural Gap. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). Следующее: [ИÑториÑ](6-History.md) \ No newline at end of file diff --git a/ru/6-History.md b/ru/6-History.md index 40f030c..59676e1 100644 --- a/ru/6-History.md +++ b/ru/6-History.md @@ -2,7 +2,7 @@ [//]: # (Version:1.0.0) ## Переезд на Github -Это ÑÑÑе было перемещено в репозиторий Gihub Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ проÑтого раÑпроÑтранениÑ, обновлени и улучшениÑ. Оно было Ñкопировано [Braydie Grove](https://github.com/braydie) Ñ [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm). ЭÑÑе переехало на Github в Ñнваре 2016 года. +Это ÑÑÑе было перемещено в репозиторий Gihub Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ проÑтого раÑпроÑтранениÑ, обновлени и улучшениÑ. Оно было Ñкопировано [Брейди Гроувом](https://github.com/braydie) Ñ [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm). ЭÑÑе переехало на Github в Ñнваре 2016 года. ## ПроÑьба об обратной ÑвÑзи и дополнениÑÑ… @@ -28,7 +28,7 @@ ## ÐžÑ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ -ÐžÑ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтого документа была начата Робртом Л. Ридом в 2000 году и впервые опубликована в Ñлектронном вида в Samizdat Press(http://Samizdat.mines.edu) в 2002 году. Он поÑвÑщен программиÑтам Hire.com. +ÐžÑ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтого документа была начата Робертом Л. Ридом в 2000 году и впервые опубликована в Ñлектронном вида в Samizdat Press(http://Samizdat.mines.edu) в 2002 году. Он поÑвÑщен программиÑтам Hire.com. ПоÑле того, как ÑÑ‚Ð°Ñ‚ÑŒÑ Ð±Ñ‹Ð»Ð° упомÑнута на Slashdot в 2003 году, около 75 человек приÑлали мне пиÑьма Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми и найденными ошибками. Я ценю помощь и вклад каждого из них. Было немало повторов, но Ñти люди внеÑли значимые Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ первые заметили ошибки, которые Ñ Ð¿Ð¾Ð·Ð¶Ðµ иÑправил: Морган МакГуайр, ДÑвид МейÑон, Том Мортел, Ninja Programmer на Slashdot, Бен Верк, Роб Хаферник, Марк Хоув, Питер Парейт, Брайан ГрейÑон, Зед Ð. Шоу, Стив, Бенц, МакÑим Йоффе, Эндрю Ву, ДÑвид Джецке и Том Коркоран. From 703bcd356f3d8605fa589469898265f1238f389e Mon Sep 17 00:00:00 2001 From: Maximiliano Murua Date: Mon, 4 Dec 2023 17:07:07 -0300 Subject: [PATCH 135/149] feat: Support for the Spanish language has been added. --- .DS_Store | Bin 0 -> 6148 bytes LANGS.md | 1 + README.md | 2 +- en/7-Contributions.md | 1 + .../Personal-Skills/01-Learn-To-Debug.md | 21 +++ ...to-Debug-by-Splitting-the-Problem-Space.md | 16 +++ .../03-How-to-Remove-an-Error.md | 9 ++ .../04-How-to-Debug-Using-a-Log.md | 13 ++ ...-How-to-Understand-Performance-Problems.md | 11 ++ .../06-How-to-Fix-Performance-Problems.md | 13 ++ .../07-How-to-Optimize-Loops.md | 15 ++ .../08-How-to-Deal-with-IO-Expense.md | 13 ++ .../09-How-to-Manage-Memory.md | 15 ++ .../10-How-to-Deal-with-Intermittent-Bugs.md | 17 +++ .../11-How-to-Learn-Design-Skills.md | 9 ++ .../12-How-to-Conduct-Experiments.md | 23 +++ es/1-Beginner/README.md | 27 ++++ .../01-Why-Estimation-is-Important.md | 15 ++ .../02-How-to-Estimate-Programming-Time.md | 21 +++ .../03-How-to-Find-Out-Information.md | 19 +++ ...o-Utilize-People-as-Information-Sources.md | 15 ++ .../Team-Skills/05-How-to-Document-Wisely.md | 20 +++ .../06-How-to-Work-with-Poor-Code.md | 11 ++ .../07-How-to-Use-Source-Code-Control.md | 9 ++ .../Team-Skills/08-How-to-Unit-Test.md | 9 ++ .../09-Take-Breaks-when-Stumped.md | 5 + .../10-How-to-Recognize-When-to-Go-Home.md | 16 +++ .../11-How-to-Deal-with-Difficult-People.md | 15 ++ ...adeoff-Quality-Against-Development-Time.md | 14 ++ ...ow-to-Manage-Software-System-Dependence.md | 13 ++ ...w-to-Decide-if-Software-is-Too-Immature.md | 18 +++ .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 15 ++ .../Judgment/05-How-to-Grow-Professionally.md | 11 ++ .../06-How-to-Evaluate-Interviewees.md | 15 ++ ...ow-When-to-Apply-Fancy-Computer-Science.md | 15 ++ .../08-How-to-Talk-to-Non-Engineers.md | 19 +++ .../01-How-to-Stay-Motivated.md | 15 ++ .../02-How-to-be-Widely-Trusted.md | 7 + .../03-How-to-Tradeoff-Time-vs-Space.md | 15 ++ .../Personal-Skills/04-How-to-Stress-Test.md | 17 +++ ...-How-to-Balance-Brevity-and-Abstraction.md | 9 ++ .../06-How-to-Learn-New-Skills.md | 13 ++ .../Personal-Skills/07-Learn-to-Type.md | 5 + .../08-How-to-Do-Integration-Testing.md | 7 + .../09-Communication-Languages.md | 11 ++ .../Personal-Skills/10-Heavy-Tools.md | 14 ++ .../Personal-Skills/11-How-to-analyze-data.md | 11 ++ es/2-Intermediate/README.md | 29 ++++ .../01-How-to-Manage-Development-Time.md | 11 ++ ...ow-to-Manage-Third-Party-Software-Risks.md | 11 ++ .../03-How-to-Manage-Consultants.md | 9 ++ .../04-How-to-Communicate-the-Right-Amount.md | 7 + ...-Disagree-Honestly-and-Get-Away-with-It.md | 11 ++ .../01-How-to-Fight-Schedule-Pressure.md | 11 ++ .../02-How-to-Understand-the-User.md | 17 +++ .../03-How-to-Get-a-Promotion.md | 13 ++ es/3-Advanced/README.md | 22 +++ .../01-How-to-Develop-Talent.md | 23 +++ .../02-How-to-Choose-What-to-Work-On.md | 5 + ...How-to-Get-the-Most-From-Your-Teammates.md | 15 ++ .../04-How-to-Divide-Problems-Up.md | 9 ++ .../05-How-to-Handle-Boring-Tasks.md | 7 + .../06-How-to-Gather-Support-for-a-Project.md | 5 + .../07-How-to-Grow-a-System.md | 21 +++ .../08-How-to-Communicate-Well.md | 11 ++ ...ll-People-Things-They-Dont-Want-to-Hear.md | 9 ++ .../10-How-to-Deal-with-Managerial-Myths.md | 13 ++ ...1-How-to-Deal-with-Organizational-Chaos.md | 11 ++ ...ow-to-Tell-the-Hard-From-the-Impossible.md | 9 ++ .../02-How-to-Utilize-Embedded-Languages.md | 11 ++ .../03-Choosing-Languages.md | 15 ++ es/5-Bibliography.md | 32 +++++ es/6-History.md | 43 ++++++ es/7-Contributions.md | 33 +++++ es/GLOSSARY.md | 131 ++++++++++++++++++ es/LICENSE.md | 10 ++ es/README.md | 103 ++++++++++++++ es/SUMMARY.md | 80 +++++++++++ jp/7-Contributions.md | 1 + zh/7-Contributions.md | 1 + 80 files changed, 1343 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 es/1-Beginner/Personal-Skills/01-Learn-To-Debug.md create mode 100644 es/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md create mode 100644 es/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md create mode 100644 es/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md create mode 100644 es/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md create mode 100644 es/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md create mode 100644 es/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md create mode 100644 es/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md create mode 100644 es/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md create mode 100644 es/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md create mode 100644 es/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md create mode 100644 es/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md create mode 100644 es/1-Beginner/README.md create mode 100644 es/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md create mode 100644 es/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md create mode 100644 es/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md create mode 100644 es/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md create mode 100644 es/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md create mode 100644 es/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md create mode 100644 es/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md create mode 100644 es/1-Beginner/Team-Skills/08-How-to-Unit-Test.md create mode 100644 es/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md create mode 100644 es/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md create mode 100644 es/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md create mode 100644 es/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md create mode 100644 es/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md create mode 100644 es/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md create mode 100644 es/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md create mode 100644 es/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md create mode 100644 es/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md create mode 100644 es/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md create mode 100644 es/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md create mode 100644 es/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md create mode 100644 es/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md create mode 100644 es/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md create mode 100644 es/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md create mode 100644 es/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md create mode 100644 es/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md create mode 100644 es/2-Intermediate/Personal-Skills/07-Learn-to-Type.md create mode 100644 es/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md create mode 100644 es/2-Intermediate/Personal-Skills/09-Communication-Languages.md create mode 100644 es/2-Intermediate/Personal-Skills/10-Heavy-Tools.md create mode 100644 es/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md create mode 100644 es/2-Intermediate/README.md create mode 100644 es/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md create mode 100644 es/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md create mode 100644 es/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md create mode 100644 es/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md create mode 100644 es/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md create mode 100644 es/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md create mode 100644 es/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md create mode 100644 es/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md create mode 100644 es/3-Advanced/README.md create mode 100644 es/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md create mode 100644 es/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md create mode 100644 es/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md create mode 100644 es/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md create mode 100644 es/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md create mode 100644 es/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md create mode 100644 es/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md create mode 100644 es/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md create mode 100644 es/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md create mode 100644 es/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md create mode 100644 es/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md create mode 100644 es/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md create mode 100644 es/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md create mode 100644 es/3-Advanced/Technical-Judgment/03-Choosing-Languages.md create mode 100644 es/5-Bibliography.md create mode 100644 es/6-History.md create mode 100644 es/7-Contributions.md create mode 100644 es/GLOSSARY.md create mode 100644 es/LICENSE.md create mode 100644 es/README.md create mode 100644 es/SUMMARY.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..143d929c0992db7a9a4bd7dca1400ffb94dfc9ae GIT binary patch literal 6148 zcmeHK!EVz)5S?`cU8_RM0R%@&aI9z$lpMIYAr(R@9BSGg0EHMw)ZlufI3a4INWRiD z|H23KANmV?Mmw`Rsp_P;A_Ozi?3>-0S!>_eyIufLtx@s>pbh{UmC*CCxk1QJx*#5p zkWM@6eUcu&1|#$@r#?#BCRZ``TheQEMxH_dwkn~)|w z4Eb=7=7|}%%qUL^n;SWY_O;)s-=9o2o9n@|r_JelFljb6$$mba`ug6(jTgI}Z`o09 zez=M#d}XcNVVuD!8bnF)JsRYh$-iKqVmDJFo?B;T1&i7>*#Bi$9x- z_hA>dF{2G{5O2t!4@v#36ygL9tFr-P7!U^jDF#%n9kpAy zBtBag7Ds1ofcgoQgyKqvS1D-NqZni9D1Lxy1;+z25JSe&A&#KPkAS5?8e!m%GH?k| CX_x8% literal 0 HcmV?d00001 diff --git a/LANGS.md b/LANGS.md index e5f1c5e..f300bca 100644 --- a/LANGS.md +++ b/LANGS.md @@ -1,3 +1,4 @@ * [English](en/) +* [Spanish](es/) * [Chinese](zh/) * [Japanese](jp/) diff --git a/README.md b/README.md index 4ba92c2..c08e929 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Welcome to the tribe. ## Contents -**Also available in [Chinese](zh/README.md) and [Japanese](jp/README.md)** +**Also available in [Chinese](zh/README.md), [Japanese](jp/README.md) and [Spanish](es/README.md)** 1. [Beginner](en/1-Beginner) - Personal Skills diff --git a/en/7-Contributions.md b/en/7-Contributions.md index 30dc8af..d727e3e 100644 --- a/en/7-Contributions.md +++ b/en/7-Contributions.md @@ -17,6 +17,7 @@ There are a number of ways to contribute to "How to be a Programmer". Currently this guide has been translated from English into the following languages: - Chinese by [ahangchen](https://github.com/ahangchen) +- Spanish by [Maximiliano Murua](https://gitlab.com/maximiliano.murua) **If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** diff --git a/es/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/es/1-Beginner/Personal-Skills/01-Learn-To-Debug.md new file mode 100644 index 0000000..9dffcec --- /dev/null +++ b/es/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -0,0 +1,21 @@ +# Aprende a depurar +[//]: # (Version:1.0.0) +Depurar es la piedra angular de ser un programador. El primer significado del verbo "depurar" es eliminar errores, pero el significado que realmente importa es ver la ejecución de un programa examinándolo. Un programador que no puede depurar de manera efectiva está ciego. + +Los idealistas, aquellos que creen que el diseño, el análisis, la teoría de la complejidad y cosas por el estilo son más fundamentales que la depuración, no son programadores en activo. El programador en activo no vive en un mundo ideal. Incluso si eres perfecto, estás rodeado y debes interactuar con código escrito por grandes empresas de software, organizaciones como GNU y tus colegas. La mayoría de este código es imperfecto y está imperfectamente documentado. Sin la capacidad de obtener visibilidad en la ejecución de este código, el menor tropiezo te dejará permanentemente atrás. A menudo, esta visibilidad solo se puede obtener mediante experimentación, es decir, depuración. + +La depuración se trata de la ejecución de programas, no de los programas en sí mismos. Si compras algo a una gran empresa de software, por lo general no llegas a ver el programa. Pero aún así, surgirán situaciones en las que el código no cumple con la documentación (hacer que tu máquina entera se bloquee es un ejemplo común y espectacular) o donde la documentación no dice nada. Más comúnmente, cometes un error, examinas el código que escribiste y no tienes idea de cómo puede estar ocurriendo el error. Inevitablemente, esto significa que alguna suposición que estás haciendo no es del todo correcta o que surge alguna condición que no anticipaste. A veces, el truco mágico de mirar fijamente el código fuente funciona. Cuando no lo hace, debes depurar. + +Para obtener visibilidad en la ejecución de un programa, debes ser capaz de ejecutar el código y observar algo al respecto. A veces esto es visible, como lo que se muestra en una pantalla o el intervalo de tiempo entre dos eventos. En muchos otros casos, implica cosas que no están destinadas a ser visibles, como el estado de algunas variables dentro del código, qué líneas de código se están ejecutando realmente o si ciertas afirmaciones se mantienen en una estructura de datos complicada. Estas cosas ocultas deben ser reveladas. + +Las formas comunes de examinar el "interior" de un programa en ejecución se pueden categorizar de la siguiente manera: + +- Usando una herramienta de depuración, +- Printlining: Haciendo una modificación temporal al programa, generalmente agregando líneas que imprimen información, y +- Logging: Creando una ventana permanente en la ejecución del programa en forma de un registro. + +Las herramientas de depuración son maravillosas cuando son estables y están disponibles, pero la inserción de líneas de impresión (printlining) y el registro (logging) son aún más importantes. Las herramientas de depuración a menudo quedan rezagadas con respecto al desarrollo del lenguaje, por lo que es posible que no estén disponibles en un momento dado. Además, debido a que la herramienta de depuración puede cambiar sutilmente la forma en que se ejecuta el programa, puede que no siempre sea práctica. Finalmente, hay algunos tipos de depuración, como verificar una afirmación contra una estructura de datos grande, que requieren escribir código y cambiar la ejecución del programa. Es bueno saber cómo usar herramientas de depuración cuando son estables, pero es fundamental poder emplear los otros dos métodos. + +Algunos principiantes temen la depuración cuando requiere modificar el código. Esto es comprensible, es un poco como una cirugía exploratoria. Pero debes aprender a tocar el código y hacerlo saltar; debes aprender a experimentar con él y comprender que nada de lo que hagas temporalmente lo empeorará. Si sientes este miedo, busca a un mentor; perdemos a muchos buenos programadores en el delicado inicio de su aprendizaje debido a este miedo. + +Siguiente [¿Cómo depurar dividiendo el espacio del problema?](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/es/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/es/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md new file mode 100644 index 0000000..11e06cf --- /dev/null +++ b/es/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -0,0 +1,16 @@ +# ¿Cómo depurar dividiendo el espacio del problema? +[//]: # (Version:1.0.0) + +Depurar es divertido, porque comienza con un misterio. Piensas que debería hacer algo, pero en cambio hace algo diferente. No siempre es tan simple; cualquier ejemplo que pueda dar será más artificial en comparación con lo que a veces sucede en la práctica. Depurar requiere creatividad e ingenio. Si hay una clave única para depurar, es utilizar la técnica de dividir y conquistar en el misterio. + +Supongamos, por ejemplo, que creaste un programa que debería realizar diez cosas en una secuencia. Cuando lo ejecutas, se bloquea. Como no lo programaste para que se bloqueara, ahora tienes un misterio. Cuando miras la salida, ves que las primeras siete cosas de la secuencia se ejecutaron con éxito. Las últimas tres no son visibles en la salida, así que ahora tu misterio es más pequeño: 'Se bloqueó en la cosa #8, #9 o #10'. + +¿Puedes diseñar un experimento para ver en qué cosa se bloqueó? Claro. Puedes usar un depurador o podemos agregar declaraciones de impresión (o su equivalente en el lenguaje en el que estás trabajando) después de #8 y #9. Cuando lo ejecutemos nuevamente, nuestro misterio será más pequeño, como 'Se bloqueó en la cosa #9'. Encuentro que tener en cuenta exactamente cuál es el misterio en cualquier momento ayuda a mantener el enfoque. Cuando varias personas trabajan juntas bajo presión en un problema, es fácil olvidar cuál es el misterio más importante. + +La clave para dividir y conquistar como técnica de depuración es la misma que para el diseño de algoritmos: siempre y cuando dividas bien el misterio por la mitad, no tendrás que dividirlo muchas veces y depurarás rápidamente. Pero, ¿cuál es la mitad de un misterio? Aquí es donde entra la verdadera creatividad y experiencia. + +Para un principiante real, el espacio de todos los posibles errores parece abarcar cada línea del código fuente. No tienes la visión que desarrollarás más adelante para ver las otras dimensiones del programa, como el espacio de las líneas ejecutadas, la estructura de datos, la gestión de memoria, la interacción con el código externo, el código riesgoso y el código simple. Para el programador experimentado, estas otras dimensiones forman un modelo mental imperfecto pero muy útil de todas las cosas que pueden salir mal. Contar con ese modelo mental es lo que ayuda a encontrar efectivamente el punto medio del misterio. + +Una vez que hayas subdividido equitativamente el espacio de todo lo que puede salir mal, debes tratar de decidir en qué espacio se encuentra el error. En el caso sencillo en el que el misterio es: "¿Qué línea desconocida hace que mi programa se bloquee?", puedes preguntarte: "¿Se ejecuta la línea desconocida antes o después de esta línea que juzgo que se ejecuta en el medio del programa en ejecución?" Por lo general, no tendrás la suerte de saber que el error existe en una sola línea, o incluso en un solo bloque. A menudo, el misterio será más como: "O bien hay un puntero en ese gráfico que apunta al nodo incorrecto, o mi algoritmo que suma las variables en ese gráfico no funciona". En ese caso, es posible que debas escribir un pequeño programa para verificar que los punteros en el gráfico sean correctos y así decidir qué parte del misterio subdividido se puede eliminar. + +Siguiente [¿Cómo eliminar un error?](03-How-to-Remove-an-Error.md) diff --git a/es/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/es/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md new file mode 100644 index 0000000..ea940fa --- /dev/null +++ b/es/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -0,0 +1,9 @@ +# ¿Cómo eliminar un error? +[//]: # (Version:1.0.0) +He separado intencionalmente el acto de examinar la ejecución de un programa del acto de corregir un error. Pero, por supuesto, depurar también significa eliminar el error. Idealmente, tendrás un entendimiento perfecto del código y llegarás a un momento de "¡Ajá!" donde verás perfectamente el error y cómo solucionarlo. Pero dado que tu programa a menudo utilizará sistemas insuficientemente documentados en los que no tienes visibilidad, esto no siempre es posible. En otros casos, el código es tan complicado que tu comprensión no puede ser perfecta. + +Al corregir un error, quieres hacer el cambio más pequeño que solucione el error. Puedes notar otras cosas que necesitan mejoras, pero no las corrijas al mismo tiempo. Intenta emplear el método científico de cambiar solo una cosa a la vez. El mejor proceso para esto es poder reproducir fácilmente el error, luego implementar tu corrección y volver a ejecutar el programa para observar que el error ya no existe. Por supuesto, a veces es necesario cambiar más de una línea, pero aún así debes aplicar conceptualmente un cambio único y atómico para corregir el error. + +A veces, hay varios errores que parecen ser uno solo. Depende de ti definir los errores y corregirlos uno a la vez. En ocasiones, no está claro qué debería hacer el programa o cuál era la intención del autor original. En este caso, debes ejercitar tu experiencia y juicio, asignar tu propio significado al código. Decide qué debería hacer y coméntalo o acláralo de alguna manera, luego haz que el código se ajuste a tu interpretación. Esta es una habilidad intermedia o avanzada que a veces es más difícil que escribir la función original en primer lugar, pero el mundo real a menudo es complicado. Puedes tener que corregir un sistema que no puedes reescribir. + +Siguiente [¿Cómo depurar utilizando un registro (Log)?](04-How-to-Debug-Using-a-Log.md) \ No newline at end of file diff --git a/es/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/es/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md new file mode 100644 index 0000000..fa6dd2b --- /dev/null +++ b/es/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -0,0 +1,13 @@ +# ¿Cómo depurar utilizando un registro (Log)? +[//]: # (Version:1.0.0) +*Registro* es la práctica de escribir un sistema de manera que produzca una secuencia de registros informativos, llamada un registro. *Printlining* es simplemente producir un registro simple, generalmente temporal. Los principiantes absolutos deben comprender y utilizar registros porque su conocimiento de programación es limitado; los arquitectos del sistema deben comprender y utilizar registros debido a la complejidad del sistema. La cantidad de información proporcionada por el registro debería ser configurable, idealmente mientras el programa se está ejecutando. En general, los registros ofrecen tres ventajas básicas: + +- Los logs pueden proporcionar información útil sobre errores que son difíciles de reproducir, como aquellos que ocurren en el entorno de producción pero que no pueden reproducirse en el entorno de prueba. +- Los logs pueden proporcionar estadísticas y datos relevantes para el rendimiento, como el tiempo transcurrido entre declaraciones. +- Cuando son configurables, los logs permiten capturar información general para depurar problemas específicos no anticipados sin tener que modificar y/o volver a implementar el código solo para abordar esos problemas específicos. + +La cantidad de información que se incluye en el log es siempre un compromiso entre la información y la concisión. Demasiada información hace que el log sea costoso y produce una *ceguera al desplazamiento*, dificultando encontrar la información necesaria. Muy poca información puede hacer que no contenga lo necesario. Por esta razón, hacer configurable lo que se produce en el log es muy útil. Típicamente, cada registro en el log identificará su posición en el código fuente, el hilo que lo ejecutó si es aplicable, el tiempo exacto de ejecución y, comúnmente, una pieza adicional de información útil, como el valor de alguna variable, la cantidad de memoria libre, el número de objetos de datos, etc. Estas declaraciones de log están distribuidas por todo el código fuente, especialmente en los puntos de funcionalidad principales y alrededor del código riesgoso. Cada declaración puede recibir un nivel y solo producirá un registro si el sistema está configurado actualmente para producir ese nivel. Debe diseñar las declaraciones de log para abordar problemas que anticipa. Anticipe la necesidad de medir el rendimiento. + +Si tiene un log permanente, la impresión temporal ahora se puede hacer en términos de los registros del log, y algunas de las declaraciones de depuración probablemente se agregarán permanentemente al sistema de registro. + +Siguiente [¿Cómo entender problemas de rendimiento?](05-How-to-Understand-Performance-Problems.md) diff --git a/es/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/es/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md new file mode 100644 index 0000000..73e3dc2 --- /dev/null +++ b/es/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -0,0 +1,11 @@ +# ¿Cómo entender problemas de rendimiento? +[//]: # (Version:1.0.0) +Aprender a entender el rendimiento de un sistema en ejecución es inevitable por la misma razón que aprender a depurar. Incluso si comprendes perfectamente el costo preciso del código que escribes, tu código hará llamadas a otros sistemas de software sobre los que tienes poco control o visibilidad. Sin embargo, en la práctica, los problemas de rendimiento son un poco diferentes y un poco más fáciles que la depuración en general. + +Supongamos que tú o tus clientes consideran que un sistema o un subsistema es demasiado lento. Antes de intentar acelerarlo, debes construir un modelo mental de por qué es lento. Para hacer esto, puedes utilizar una herramienta de perfilado o un buen registro para descubrir dónde se está gastando realmente el tiempo u otros recursos. Existe un famoso dicho que establece que el 90% del tiempo se gastará en el 10% del código. Añadiría a eso la importancia del gasto de entrada/salida (E/S) en los problemas de rendimiento. A menudo, la mayor parte del tiempo se gasta de alguna manera en la E/S. Encontrar la E/S costosa y el 10% costoso del código es un buen primer paso para construir tu modelo mental. + +Hay muchas dimensiones para medir el rendimiento de un sistema informático y muchos recursos consumidos. El primer recurso a medir es el tiempo del reloj de pared, el tiempo total que pasa para la computación. Registrar el tiempo del reloj de pared es particularmente valioso porque puede informar sobre circunstancias impredecibles que surgen en situaciones donde otro perfilado es impracticable. Sin embargo, esto no siempre representa toda la imagen. A veces, algo que tarda un poco más pero no consume tantos segundos del procesador será mucho mejor en el entorno informático con el que realmente tienes que lidiar. De manera similar, la memoria, el ancho de banda de red, el acceso a la base de datos u otros servidores pueden, al final, ser mucho más costosos que los segundos del procesador. + +La competencia por recursos compartidos que están sincronizados puede causar bloqueo y privación. El bloqueo es la imposibilidad de avanzar debido a una sincronización incorrecta o demandas de recursos. La privación es la incapacidad para programar adecuadamente un componente. Si se puede anticipar de alguna manera, es mejor tener una forma de medir esta competencia desde el inicio de tu proyecto. Incluso si esta competencia no ocurre, es muy útil poder afirmar eso con confianza. + +Siguiente [¿Cómo solucionar problemas de rendimiento?](06-How-to-Fix-Performance-Problems.md) diff --git a/es/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/es/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md new file mode 100644 index 0000000..1282b64 --- /dev/null +++ b/es/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -0,0 +1,13 @@ +# ¿Cómo solucionar problemas de rendimiento? +[//]: # (Version:1.0.0) +La mayoría de los proyectos de software pueden acelerarse de 10 a 100 veces con relativamente poco esfuerzo en comparación con la velocidad que tienen al momento de su lanzamiento inicial. Bajo la presión del tiempo de llegada al mercado, es sabio y efectivo elegir una solución que haga el trabajo de manera simple y rápida, aunque menos eficientemente que alguna otra solución. Sin embargo, el rendimiento es parte de la usabilidad y a menudo debe considerarse más cuidadosamente en algún momento. + +La clave para mejorar el rendimiento de un sistema muy complicado es analizarlo lo suficientemente bien como para encontrar los *cuellos de botella*, o los lugares donde se consumen la mayoría de los recursos. No tiene mucho sentido optimizar una función que representa solo el 1% del tiempo de computación. Como regla general, debe pensarlo detenidamente antes de hacer cualquier cosa a menos que piense que hará que el sistema o una parte significativa de él sea al menos el doble de rápido. Por lo general, hay una manera de hacerlo. Considere el esfuerzo de prueba y aseguramiento de la calidad que requerirá su cambio. Cada cambio conlleva una carga de prueba, por lo que es mucho mejor tener algunos cambios importantes. + +Después de haber logrado una mejora del doble en algo, es necesario al menos reconsiderar y tal vez volver a analizar para descubrir el siguiente cuello de botella más costoso en el sistema y abordarlo para obtener otra mejora del doble. + +A menudo, los cuellos de botella en el rendimiento son un ejemplo de contar vacas contando patas y dividiendo por cuatro, en lugar de contar cabezas. Por ejemplo, he cometido errores como no proporcionar a un sistema de base de datos relacional un índice adecuado en una columna que consulto con frecuencia, lo que probablemente lo hizo al menos 20 veces más lento. Otros ejemplos incluyen realizar E/S innecesaria en bucles internos, dejar declaraciones de depuración que ya no son necesarias, asignación de memoria innecesaria y, en particular, el uso inexperto de bibliotecas y otros subsistemas que a menudo están mal documentados en cuanto al rendimiento. Este tipo de mejora a veces se llama *fruto de bajo hanging*, lo que significa que se puede recoger fácilmente para proporcionar algún beneficio. + +¿Qué haces cuando comienzas a quedarte sin "fruto de bajo colgado"? Bueno, puedes alcanzar más alto o derribar el árbol. Puedes seguir haciendo pequeñas mejoras o puedes rediseñar seriamente un sistema o un subsistema. (Esta es una gran oportunidad para usar tus habilidades como buen programador, no solo en el nuevo diseño sino también en convencer a tu jefe de que es una buena idea). Sin embargo, antes de argumentar a favor del rediseño de un subsistema, debes preguntarte si tu propuesta lo mejorará cinco a diez veces. + +Siguiente [¿Cómo optimizar bucles?](07-How-to-Optimize-Loops.md) diff --git a/es/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/es/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md new file mode 100644 index 0000000..ecbc672 --- /dev/null +++ b/es/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -0,0 +1,15 @@ +# ¿Cómo optimizar bucles? +[//]: # (Version:1.0.0) +En ocasiones, te encontrarás con bucles o funciones recursivas que tardan mucho tiempo en ejecutarse y son cuellos de botella en tu producto. Antes de intentar hacer que el bucle sea un poco más rápido, tómate unos minutos para considerar si hay alguna manera de eliminarlo por completo. ¿Podría funcionar con un algoritmo diferente? ¿Podrías calcular eso mientras calculas algo más? Si no encuentras una forma de evitarlo, entonces puedes optimizar el bucle. Esto es simple; mueve cosas hacia afuera. Al final, esto requerirá no solo ingenio sino también una comprensión del costo de cada tipo de declaración y expresión. Aquí tienes algunas sugerencias: + +- Elimina operaciones de punto flotante. +- No asignes bloques de memoria nuevos innecesariamente. +- Combina constantes. +- Mueve la entrada/salida (I/O) a un búfer. +- Evita las divisiones. +- Evita las conversiones de tipo costosas. +- Muévete con un puntero en lugar de recalcular índices. + +El costo de cada una de estas operaciones depende de tu sistema específico. En algunos sistemas, los compiladores y el hardware realizan estas acciones por ti. Un código claro y eficiente es mejor que un código que requiere entender una plataforma particular. + +Siguiente [¿Cómo manejar el costo de la entrada/salida (E/S)?](08-How-to-Deal-with-IO-Expense.md) diff --git a/es/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/es/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md new file mode 100644 index 0000000..abc708d --- /dev/null +++ b/es/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -0,0 +1,13 @@ +# ¿Cómo manejar el costo de la entrada/salida (E/S)? +[//]: # (Version:1.0.0) +Para muchos problemas, los procesadores son rápidos en comparación con el costo de comunicarse con un dispositivo de hardware. Este costo se suele abreviar como E/S y puede incluir el costo de red, E/S de disco, consultas a la base de datos, E/S de archivos y otros usos de hardware que no están muy cerca del procesador. Por lo tanto, construir un sistema rápido a menudo es más una cuestión de mejorar la E/S que mejorar el código en un bucle ajustado, o incluso mejorar un algoritmo. + +Hay dos técnicas muy fundamentales para mejorar la E/S: el almacenamiento en caché y la representación. El almacenamiento en caché consiste en evitar la E/S (generalmente evitando la lectura de algún valor abstracto) almacenando una copia de ese valor localmente para que no se realice ninguna E/S para obtener el valor. La primera clave para la caché es dejar en claro cuál es el dato principal y cuáles son copias. Solo hay un dato principal, punto. El almacenamiento en caché conlleva el peligro de que la copia a veces no puede reflejar los cambios en el dato principal instantáneamente. + +La representación es el enfoque de hacer que la E/S sea más económica mediante la representación más eficiente de los datos. Esto a menudo entra en tensión con otras demandas, como la legibilidad humana y la portabilidad. + +Las representaciones a menudo se pueden mejorar en un factor de dos o tres desde su primera implementación. Las técnicas para hacer esto incluyen el uso de una representación binaria en lugar de una legible por humanos, transmitir un diccionario de símbolos junto con los datos para que no sea necesario codificar símbolos largos, y, en el extremo, cosas como la codificación de Huffman. + +Una tercera técnica que a veces es posible es mejorar la localidad de referencia acercando la computación a los datos. Por ejemplo, si estás leyendo algunos datos de una base de datos y calculando algo simple a partir de ellos, como una suma, intenta que el servidor de la base de datos lo haga por ti. Esto depende en gran medida del tipo de sistema con el que estás trabajando, pero deberías explorarlo. + +Siguiente [¿Cómo gestionar la memoria?](09-How-to-Manage-Memory.md) \ No newline at end of file diff --git a/es/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/es/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md new file mode 100644 index 0000000..babc86c --- /dev/null +++ b/es/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -0,0 +1,15 @@ +# ¿Cómo gestionar la memoria? +[//]: # (Version:1.0.0) +La memoria es un recurso precioso del cual no te puedes permitir quedarse sin. Puedes ignorarlo por un tiempo, pero eventualmente tendrás que decidir cómo gestionar la memoria. + +El espacio que necesita persistir más allá del alcance de una única subrutina se llama a menudo asignado en el montón (*heap allocated*). Un trozo de memoria es inútil, de ahí *basura*, cuando nada se refiere a él. Dependiendo del sistema que uses, es posible que debas desasignar explícitamente la memoria tú mismo cuando esté a punto de convertirse en basura. Con mayor frecuencia, puedes usar un sistema que proporciona un recolector de basura (*garbage collector*). Un recolector de basura se da cuenta de la basura y libera su espacio sin ninguna acción requerida por el programador. La recolección de basura es maravillosa: disminuye los errores y aumenta la brevedad y concisión del código de manera económica. Úsalo cuando puedas. + +Pero incluso con la recolección de basura, puedes llenar toda la memoria con basura. Un error clásico es usar una tabla hash como caché y olvidar quitar las referencias en la tabla hash. Dado que la referencia permanece, el referente no es recopilable pero es inútil. Esto se llama una fuga de memoria (memory leak). Deberías buscar y corregir las fugas de memoria temprano. Si tienes sistemas de larga duración, la memoria puede nunca agotarse durante las pruebas, pero se agotará durante el uso del usuario. + +La creación de nuevos objetos es moderadamente costosa en cualquier sistema. Sin embargo, la memoria asignada directamente en las variables locales de una subrutina suele ser barata porque la política para liberarla puede ser muy simple. Deberías evitar la creación innecesaria de objetos. + +Un caso importante ocurre cuando puedes definir un límite superior en el número de objetos que necesitarás al mismo tiempo. Si todos estos objetos ocupan la misma cantidad de memoria, es posible que puedas asignar un solo bloque de memoria, o un búfer, para contenerlos a todos. Los objetos que necesitas pueden asignarse y liberarse dentro de este búfer en un patrón de rotación establecido, por lo que a veces se le llama búfer circular. Esto suele ser más rápido que la asignación en el montón (heap allocation). + +A veces, debes liberar explícitamente el espacio asignado para que pueda volver a asignarse en lugar de depender de la recolección de basura. Luego, debes aplicar inteligencia cuidadosa a cada fragmento de memoria asignada y diseñar una forma de liberarla en el momento adecuado. El método puede diferir para cada tipo de objeto que creas. Debes asegurarte de que cada ejecución de una operación de asignación de memoria sea coincidente con una operación de desasignación de memoria eventualmente. Esto es tan difícil que los programadores a menudo simplemente implementan una forma rudimentaria de recolección de basura, como el recuento de referencias, para hacer esto por ellos. + +Siguiente [¿Cómo manejar errores intermitentes?](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/es/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/es/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md new file mode 100644 index 0000000..1556db3 --- /dev/null +++ b/es/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -0,0 +1,17 @@ +# ¿Cómo manejar errores intermitentes? +[//]: # (Version:1.0.0) +El error intermitente es un primo del tipo de error del escorpión invisible de 50 pies de altura del espacio exterior. Esta pesadilla ocurre tan raramente que es difícil de observar, pero lo suficientemente seguido como para no poder ignorarla. No se puede depurar porque no se puede encontrar. + +Aunque después de 8 horas empezarás a dudarlo, el error intermitente tiene que obedecer las mismas leyes de la lógica que todo lo demás. Lo que lo hace difícil es que ocurre solo bajo condiciones desconocidas. Intenta registrar las circunstancias bajo las cuales ocurre el error para que puedas adivinar cuál es la variabilidad real. La condición puede estar relacionada con los valores de los datos, como ‘Esto solo sucede cuando ingresamos *Wyoming* como un valor’. Si eso no es la fuente de la variabilidad, el siguiente sospechoso debería ser una concurrencia mal sincronizada. + +Intenta, intenta, intenta reproducir el error de manera controlada. Si no puedes reproducirlo, coloca una trampa para él construyendo un sistema de registro, uno especial si es necesario, que pueda registrar lo que crees que necesitas cuando realmente ocurra. Resignate a que si el error solo ocurre en producción y no a tu antojo, este puede ser un proceso largo. Las pistas que obtienes del registro pueden no proporcionar la solución, pero pueden darte suficiente información para mejorar el registro. El sistema de registro mejorado puede tardar mucho tiempo en implementarse en producción. Luego, debes esperar a que el error vuelva a ocurrir para obtener más información. Este ciclo puede continuar durante algún tiempo. + +El error intermitente más estúpido que creé fue en una implementación multiproceso de un lenguaje de programación funcional para un proyecto de clase. Me aseguré muy cuidadosamente de la evaluación concurrente correcta del programa funcional, buena utilización de todas las CPU disponibles (ocho, en este caso). Simplemente olvidé sincronizar el recolector de basura. El sistema podía ejecutarse durante mucho tiempo, a menudo terminando cualquier tarea que comenzará, antes de que algo notable saliera mal. Me da vergüenza admitir que había empezado a cuestionar el hardware antes de que mi error se hiciera evidente. + +En el trabajo, recientemente tuvimos un error intermitente que nos llevó varias semanas encontrar. Tenemos servidores de aplicaciones multiproceso en Javaâ„¢ detrás de servidores web Apacheâ„¢. Para mantener vueltas de página rápidas, realizamos todas las operaciones de entrada/salida en un pequeño conjunto de cuatro subprocesos separados de los subprocesos de cambio de página. De vez en cuando, estos aparentemente se ‘quedaban atascados’ y dejaban de hacer algo útil, hasta donde nuestras bitácoras nos permitían saber, durante horas. Dado que teníamos cuatro subprocesos, esto no era en sí mismo un problema gigante, a menos que los cuatro se quedarán atascados. Luego, las colas vaciadas por estos subprocesos llenarían rápidamente toda la memoria disponible y harían que nuestro servidor se bloqueará. Nos llevó aproximadamente una semana entender esto, y aún no sabíamos qué lo causaba, cuándo o incluso qué estaban haciendo los subprocesos cuando se quedaban ‘atascados’. + +Esto ilustra algunos riesgos asociados con el software de terceros. Estábamos utilizando un código con licencia que elimina las etiquetas HTML del texto. Aunque teníamos el código fuente (¡gracias a Dios!), no lo habíamos estudiado detenidamente hasta que, al aumentar el registro en nuestros servidores, finalmente nos dimos cuenta de que los subprocesos de correo electrónico se quedaban atascados en este problemático código con licencia. + +El programa funcionaba bien excepto en algunos textos largos y poco comunes. En estos textos, el código era cuadrático o peor. Esto significa que el tiempo de procesamiento era proporcional al cuadrado de la longitud del texto. Si estos textos ocurrieran comúnmente, habríamos encontrado el error de inmediato. Si nunca hubieran ocurrido en absoluto, nunca habríamos tenido un problema. Como sucedió, nos llevó semanas finalmente entender y resolver el problema. + +Siguiente [¿Cómo aprender habilidades de diseño?](11-How-to-Learn-Design-Skills.md) diff --git a/es/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/es/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md new file mode 100644 index 0000000..c13ca39 --- /dev/null +++ b/es/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -0,0 +1,9 @@ +# ¿Cómo aprender habilidades de diseño? +[//]: # (Version:1.0.0) +Para aprender a diseñar software, estudia la acción de un mentor al estar físicamente presente cuando están diseñando. Luego, estudia software bien escrito. Después de eso, puedes leer algunos libros sobre las últimas técnicas de diseño. + +Luego, debes hacerlo tú mismo. Comienza con un proyecto pequeño. Cuando finalmente hayas terminado, considera cómo falló o tuvo éxito el diseño y en qué te desviaste de tu concepción original. Luego pasa a proyectos más grandes, idealmente en colaboración con otras personas. El diseño es una cuestión de juicio que lleva años adquirir. Un programador inteligente puede aprender los conceptos básicos adecuadamente en dos meses y puede mejorar a partir de ahí. + +Es natural y útil desarrollar tu propio estilo, pero recuerda que el diseño es un arte, no una ciencia. Las personas que escriben libros sobre el tema tienen un interés personal en hacer que parezca científico. No te vuelvas dogmático sobre estilos de diseño particulares. + +Siguiente [¿Cómo realizar experimentos?](12-How-to-Conduct-Experiments.md) diff --git a/es/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/es/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md new file mode 100644 index 0000000..dbd8c5d --- /dev/null +++ b/es/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -0,0 +1,23 @@ +# ¿Cómo realizar experimentos? +[//]: # (Version:1.0.0) +El difunto y gran Edsger Dijkstra ha explicado elocuentemente que la informática no es una ciencia experimental [ExpCS] y no depende de las computadoras electrónicas. Como él lo expresa refiriéndose a la década de 1960 [Knife], + +> ...se hizo el daño: el tema se dio a conocer como "ciencia de la computación", que, en realidad, es como referirse a la cirugía como "ciencia del cuchillo", y se implantó firmemente en la mente de las personas que la ciencia informática trata sobre máquinas y su equipo periférico. + +La programación no debería ser una ciencia experimental, pero la mayoría de los programadores en activo no tienen el lujo de participar en lo que Dijkstra entiende por ciencia informática. Debemos trabajar en el ámbito de la experimentación, al igual que algunos, pero no todos, los físicos lo hacen. Si treinta años después se puede programar sin experimentación, será un gran logro de la Ciencia de la Computación. + +Los tipos de experimentos que tendrás que realizar incluyen: + +- Probar sistemas con ejemplos pequeños para verificar que se ajustan a la documentación o para entender su respuesta cuando no hay documentación, +- Probar pequeños cambios de código para ver si realmente soluciona un error. +- Medir el rendimiento de un sistema bajo dos condiciones diferentes debido al conocimiento imperfecto de sus características de rendimiento, +- Verificar la integridad de los datos y +- Recopilar estadísticas que puedan dar pistas sobre la solución a errores difíciles o difíciles de repetir. + +No creo que en este ensayo pueda explicar el diseño de experimentos; tendrás que estudiar y practicar. Sin embargo, puedo ofrecer dos consejos. + +En primer lugar, trata de ser muy claro acerca de tu hipótesis o la afirmación que estás tratando de probar. También ayuda escribir la hipótesis, especialmente si te encuentras confundido o estás trabajando con otras personas. + +A menudo te encontrarás teniendo que diseñar una serie de experimentos, cada uno de los cuales se basa en el conocimiento adquirido del último experimento. Por lo tanto, debes diseñar tus experimentos para proporcionar la mayor información posible. + +Siguiente [Habilidades de equipo: ¿Por qué es importante la estimación?](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/es/1-Beginner/README.md b/es/1-Beginner/README.md new file mode 100644 index 0000000..733389a --- /dev/null +++ b/es/1-Beginner/README.md @@ -0,0 +1,27 @@ +# 1. Principiante +[//]: # (Version:1.0.0) +- Habilidades Personales + - [Aprender a Depurar](Personal-Skills/01-Learn-To-Debug.md) + - [¿Cómo depurar dividiendo el espacio del problema?](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [¿Cómo eliminar un error?](Personal-Skills/03-How-to-Remove-an-Error.md) + - [¿Cómo Depurar Utilizando un Registro (Log)?](Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [¿Cómo Entender Problemas de Rendimiento?](Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [¿Cómo Solucionar Problemas de Rendimiento?](Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [¿Cómo Optimizar Bucles?](Personal-Skills/07-How-to-Optimize-Loops.md) + - [¿Cómo Manejar el Costo de la Entrada/Salida (E/S)?](Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [¿Cómo Gestionar la Memoria?](Personal-Skills/09-How-to-Manage-Memory.md) + - [¿Cómo Manejar Errores Intermitentes?](Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [¿Cómo Aprender Habilidades de Diseño?](Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [¿Cómo Realizar Experimentos?](Personal-Skills/12-How-to-Conduct-Experiments.md) +- Habilidades de Equipo + - [¿Por qué es importante la estimación?](Team-Skills/01-Why-Estimation-is-Important.md) + - [¿Cómo estimar el tiempo de programación?](Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [¿Cómo encontrar información?](Team-Skills/03-How-to-Find-Out-Information.md) + - [¿Cómo utilizar a las personas como fuentes de información?](Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [¿Cómo documentar de manera inteligente?](Team-Skills/05-How-to-Document-Wisely.md) + - [¿Cómo trabajar con un código deficiente?](Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [¿Cómo Utilizar el Control de Código Fuente?](Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [¿Cómo realizar pruebas unitarias?](Team-Skills/08-How-to-Unit-Test.md) + - [Tomarse descansos cuando te sientes bloqueado](Team-Skills/09-Take-Breaks-when-Stumped.md) + - [¿Cómo reconocer cuándo es hora de ir a casa?](Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [¿Cómo lidiar con personas difíciles?](Team-Skills/11-How-to-Deal-with-Difficult-People.md) diff --git a/es/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/es/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md new file mode 100644 index 0000000..138953d --- /dev/null +++ b/es/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -0,0 +1,15 @@ +# ¿Por qué es importante la estimación? +[//]: # (Version:1.0.0) +Para obtener un sistema de software en funcionamiento y en uso activo lo más rápido posible, se requiere no solo planificar el desarrollo, sino también planificar la documentación, la implementación y la comercialización. En un proyecto comercial, también se necesitan ventas y finanzas. Sin previsibilidad del tiempo de desarrollo, es imposible planificar eficazmente estos aspectos. + +Una buena estimación proporciona previsibilidad. A los gerentes les encanta, como debería ser. El hecho de que sea imposible, tanto teórica como prácticamente, predecir con precisión cuánto tiempo tomará desarrollar software a menudo se pasa por alto. Nos piden hacer esta tarea imposible todo el tiempo, y debemos enfrentarla honestamente. Sin embargo, sería deshonesto no admitir la imposibilidad de esta tarea y, cuando sea necesario, explicarla. Existe mucho margen para la falta de comunicación sobre las estimaciones, ya que las personas tienden a pensar con optimismo en la frase: [aquí deberías completar la oración si es parte del texto original: + +> Estimo que, si realmente entiendo el problema, hay aproximadamente un 50% de probabilidad de que hayamos terminado en cinco semanas (si nadie nos molesta durante ese tiempo). + +really means: + +> Prometo tener todo listo dentro de cinco semanas a partir de ahora. + +Este problema común de interpretación requiere que discutas explícitamente lo que significa la estimación con tu jefe o cliente, como si fueran una persona no familiarizada con el tema. Vuelve a expresar tus suposiciones, por más obvias que parezcan para ti. + +Siguiente [¿Cómo estimar el tiempo de programación?](02-How-to-Estimate-Programming-Time.md) diff --git a/es/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/es/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md new file mode 100644 index 0000000..dbcd670 --- /dev/null +++ b/es/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -0,0 +1,21 @@ +# ¿Cómo estimar el tiempo de programación? +[//]: # (Version:1.0.0) +La estimación requiere práctica. También requiere trabajo. Requiere tanto trabajo que puede ser una buena idea estimar el tiempo que tomará hacer la estimación, especialmente si te piden que estimes algo grande. + +Cuando te piden que proporciones una estimación de algo grande, lo más honesto es hacer una pausa. La mayoría de los ingenieros son entusiastas y ansían complacer, y hacer una pausa ciertamente desagradará a quienes están a la espera. Pero una estimación instantánea probablemente no será precisa ni honesta. + +Mientras te tomas tu tiempo, puede ser posible considerar hacer o prototipar la tarea. Si la presión política lo permite, esta es la forma más precisa de producir la estimación y hace un progreso real. + +Cuando no es posible tomarse el tiempo para una investigación, debes establecer claramente el significado de la estimación. Reafirma ese significado como la primera y última parte de tu estimación por escrito. Prepara una estimación por escrito descomponiendo la tarea en subtareas progresivamente más pequeñas hasta que cada tarea pequeña no sea de más de un día; idealmente, la mayoría debería durar solo un día. Lo más importante es no dejar nada afuera. Por ejemplo, la documentación, las pruebas, el tiempo de planificación, el tiempo de comunicación con otros grupos y el tiempo de vacaciones son todos muy importantes. Si pasas parte de cada día lidiando con situaciones difíciles, incluye un ítem para eso en la estimación. Esto le brinda a tu jefe visibilidad sobre en qué estás utilizando tu tiempo como mínimo, y podría conseguirte más tiempo. + +Conozco a buenos ingenieros que inflan las estimaciones implícitamente, pero recomiendo que no lo hagas. Uno de los resultados de inflar es que la confianza en ti puede disminuir. Por ejemplo, un ingeniero podría estimar tres días para una tarea que realmente cree que tomará un día. El ingeniero puede planear pasar dos días documentándolo o dos días trabajando en algún otro proyecto útil. Pero será detectable que la tarea se hizo en solo un día (si resulta ser así), y surgirá la apariencia de descuido o sobreestimación. Es mucho mejor dar una visibilidad adecuada a lo que realmente estás haciendo. Si la documentación lleva el doble de tiempo que la codificación y la estimación lo refleja, se obtiene una ventaja tremenda al hacer esto visible para el gerente. + +Realiza un ajuste explícito en lugar de forma implícita. Si una tarea probablemente llevará un día, pero podría llevar diez días si tu enfoque no funciona, indícalo de alguna manera en la estimación si es posible; si no, al menos haz un promedio ponderado según tus estimaciones de las probabilidades. Cualquier factor de riesgo que puedas identificar y al que puedas asignar una estimación debe incluirse en el cronograma. Es poco probable que una persona se enferme en una semana específica. Pero un proyecto grande con muchos ingenieros tendrá algún tiempo de enfermedad, al igual que tiempo de vacaciones. ¿Cuál es la probabilidad de un seminario de capacitación obligatorio para toda la empresa? Si se puede estimar, inclúyelo. Por supuesto, hay incertidumbres *unk-unks* (desconocidas), o unknown unknowns (Desconocidos desconocidos). Por definición, los unknown unknowns no se pueden estimar individualmente. Puedes intentar crear un ítem global para todos los unknown unknowns, o manejarlos de alguna otra manera que comuniques a tu jefe. Sin embargo, no puedes permitir que tu jefe olvide que existen, y es increíblemente fácil que una estimación se convierta en un cronograma sin tener en cuenta los unknown unknowns. + +En un entorno de equipo, debes intentar que las personas que realizarán el trabajo realicen la estimación, y debes buscar el consenso en toda el equipo sobre las estimaciones. Las habilidades, la experiencia, la preparación y la confianza de las personas varían ampliamente. Ocurre una calamidad cuando un programador hábil estima para sí misma y luego se espera que los programadores menos hábiles cumplan con esa estimación. El hecho de que todo el equipo esté de acuerdo, línea por línea, en la estimación aclara la comprensión del equipo, además de permitir la oportunidad de reasignación táctica de recursos (por ejemplo, aliviar la carga de los miembros más débiles). + +Si hay riesgos importantes que no se pueden evaluar, es tu responsabilidad afirmarlo con la suficiente fuerza para que tu gerente no se comprometa con ellos y luego se sienta avergonzado cuando ocurra el riesgo. Con suerte, en tal caso, se hará todo lo necesario para disminuir el riesgo. + +Si logras convencer a tu empresa de utilizar *Extreme Programming*, solo tendrás que estimar cosas relativamente pequeñas, lo cual es más divertido y más productivo. + +Siguiente [¿Cómo encontrar información?](03-How-to-Find-Out-Information.md) diff --git a/es/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/es/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md new file mode 100644 index 0000000..7368ab0 --- /dev/null +++ b/es/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -0,0 +1,19 @@ +# ¿Cómo encontrar información? +[//]: # (Version:1.0.0) +La naturaleza de lo que necesitas saber determina la forma en que debes buscarlo. + +Si necesitas información *sobre cosas concretas* que son objetivas y fáciles de verificar, como el último nivel de parche de un producto de software, pregunta a un gran número de personas de manera educada buscándolo en internet o publicando en un grupo de discusión. No busques en internet nada que tenga un tinte de opinión o interpretación subjetiva: la proporción de tonterías a verdad es demasiado alta. + +Si necesitas *conocimiento general sobre algo subjetivo*, como la historia de lo que la gente ha pensado al respecto, ve a la biblioteca (el edificio físico donde se almacenan libros). Por ejemplo, para aprender sobre matemáticas, setas o misticismo, acude a la biblioteca. + +Si necesitas saber *cómo hacer algo que no es trivial*, consigue dos o tres libros sobre el tema y léelos. Puedes aprender a hacer algo trivial, como instalar un paquete de software, desde Internet. Incluso puedes aprender cosas importantes, como buenas técnicas de programación, pero fácilmente puedes pasar más tiempo buscando y clasificando los resultados y tratando de discernir la autoridad de los resultados que el que tomaría leer la parte pertinente de un libro sólido. + +Si necesitas *información que no se espera que nadie más conozca*, por ejemplo, '¿este software completamente nuevo funciona con conjuntos de datos gigantes?', aún debes buscar en internet y en la biblioteca. Después de agotar por completo esas opciones, puedes diseñar un experimento para confirmarlo. + +Si deseas una opinión o un juicio de valor que tenga en cuenta alguna circunstancia única, habla con un experto. Por ejemplo, si quieres saber si es buena idea construir un sistema moderno de gestión de bases de datos en LISP, deberías hablar con un experto en LISP y un experto en bases de datos. + +Si quieres saber *qué tan probable es* que exista un algoritmo más rápido para una aplicación específica que aún no se ha publicado, habla con alguien que trabaje en ese campo. + +Si quieres tomar una *decisión personal que solo tú puedes tomar*, como si deberías o no iniciar un negocio, intenta poner por escrito una lista de argumentos a favor y en contra de la idea. Si eso falla, considera la adivinación. Supongamos que has estudiado la idea desde todos los ángulos, has hecho toda tu tarea, y has analizado todas las consecuencias y pros y contras en tu mente, y aún así sigues indeciso. Ahora debes seguir tu corazón y decirle a tu cerebro que se calle. La multitud de técnicas de adivinación disponibles son muy útiles para determinar tus propios deseos semi-conscientes, ya que cada una presenta un patrón completo, ambiguo y aleatorio al que tu propio subconsciente asignará significado. + +Siguiente [¿Cómo utilizar a las personas como fuentes de información?](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/es/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/es/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md new file mode 100644 index 0000000..adc4ab2 --- /dev/null +++ b/es/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -0,0 +1,15 @@ +# ¿Cómo utilizar a las personas como fuentes de información? +[//]: # (Version:1.0.0) +Respetar el tiempo de cada persona y equilibrarlo con el tuyo es fundamental. Hacer una pregunta a alguien logra mucho más que simplemente recibir la respuesta. La persona aprende acerca de ti, tanto disfrutando de tu presencia como escuchando la pregunta en particular. De la misma manera, tú aprendes acerca de la persona y es posible que obtengas la respuesta que buscas. Esto suele ser mucho más importante que la propia pregunta. + +Sin embargo, el valor de esto disminuye a medida que lo haces más frecuentemente. Estás utilizando el bien más preciado que tiene una persona: su tiempo. Los beneficios de la comunicación deben sopesarse contra los costos. Además, los costos y beneficios particulares obtenidos difieren de una persona a otra. Creo firmemente que un ejecutivo con 100 personas a cargo debería pasar cinco minutos al mes hablando con cada persona en su organización, lo que sería aproximadamente el 5% de su tiempo. Pero diez minutos podrían ser demasiado, y cinco minutos son demasiados si tienen mil empleados. La cantidad de tiempo que dedicas a hablar con cada persona en tu organización depende de su función (más que de su posición). Deberías hablar más con tu jefe que con el jefe de tu jefe, pero deberías hablar un poco con el jefe de tu jefe. Puede ser incómodo, pero creo que tienes el deber de hablar un poco con todos tus superiores cada mes, sin importar qué. + +La regla básica es que todos se benefician al hablar contigo un poco, y cuanto más hablen contigo, menos beneficio obtendrán. Es tu trabajo proporcionarles este beneficio y obtener el beneficio de comunicarte con ellos, manteniendo un equilibrio con el tiempo invertido. + +Es importante respetar tu propio tiempo. Si hablar con alguien, incluso si les costará tiempo, te ahorrará mucho tiempo, entonces deberías hacerlo a menos que creas que su tiempo es más valioso que el tuyo, para la tribu, por ese factor. + +Un ejemplo extraño de esto es el becario de verano. No se espera que un becario de verano en una posición altamente técnica logre mucho; se espera que moleste a todos. Entonces, ¿por qué se tolera esto? Porque los molestados están recibiendo algo importante del becario. Tienen la oportunidad de lucirse un poco. Tienen la oportunidad de escuchar algunas ideas nuevas, tal vez; tienen la oportunidad de ver las cosas desde una perspectiva diferente. También pueden estar intentando reclutar al becario, pero incluso si no es el caso, hay mucho que ganar. + +Deberías pedirle a la gente un poco de su sabiduría y juicio siempre que honestamente creas que tienen algo que decir. Esto los halaga y aprenderás algo y les enseñarás algo. Un buen programador no suele necesitar el consejo de un Vicepresidente de Ventas, pero si alguna vez lo necesitas, asegúrate de pedirlo. Una vez pedí escuchar algunas llamadas de ventas para entender mejor el trabajo de nuestro personal de ventas. Esto no llevó más de 30 minutos, pero creo que ese pequeño esfuerzo dejó una impresión en el equipo de ventas. + +Siguiente [¿Cómo documentar de manera inteligente?](05-How-to-Document-Wisely.md) \ No newline at end of file diff --git a/es/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/es/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md new file mode 100644 index 0000000..55a972e --- /dev/null +++ b/es/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -0,0 +1,20 @@ +# ¿Cómo documentar de manera inteligente? +[//]: # (Version:1.0.0) +La vida es demasiado corta para escribir basura que nadie va a leer; si escribes basura, nadie la leerá. Por lo tanto, un poco de buena documentación es lo mejor. Los gerentes a menudo no entienden esto, porque incluso una mala documentación les da una falsa sensación de seguridad de que no dependen de sus programadores. Si alguien insiste absolutamente en que escribas documentación verdaderamente inútil, di 'sí' y comienza discretamente a buscar un trabajo mejor. + +No hay nada tan efectivo como incluir una estimación precisa del tiempo que tomará producir buena documentación en una estimación para reducir la demanda de documentación. La verdad es fría y dura: la documentación, al igual que las pruebas, puede llevar muchas veces más tiempo que desarrollar código. + +Escribir buena documentación es, ante todo, escribir bien. Te sugiero que encuentres libros sobre escritura, los estudies y practiques. Pero incluso si eres un mal escritor o tienes poco dominio del idioma en el que debes documentar, la Regla de Oro es todo lo que realmente necesitas: 'Haz a los demás lo que te gustaría que te hicieran a ti'. Tómate el tiempo para pensar realmente en quién leerá tu documentación, lo que necesitan obtener de ella y cómo puedes enseñárselo. Si haces eso, serás un escritor de documentación por encima del promedio y un buen programador. + +Cuando se trata de documentar el código en sí, en lugar de producir documentos que realmente puedan ser leídos por no programadores, los mejores programadores que he conocido comparten un sentimiento universal: escribe código autoexplicativo y documenta el código solo en los lugares en los que no puedes hacerlo claro escribiendo el código mismo. Hay dos buenas razones para esto. En primer lugar, cualquier persona que necesite ver documentación a nivel de código, en la mayoría de los casos, podrá y preferirá leer el código de todos modos. Es cierto que esto parece más fácil para el programador experimentado que para el principiante. Más importante aún, sin embargo, es que el código y la documentación no pueden ser inconsistentes si no hay documentación. El código fuente puede ser, en el peor de los casos, incorrecto y confuso. La documentación, si no está escrita perfectamente, puede mentir, y eso es mil veces peor. + +Esto no facilita las cosas al programador responsable. ¿Cómo se escribe código autoexplicativo? ¿Qué significa eso siquiera? Significa: + +- Escribir código sabiendo que alguien tendrá que leerlo. +- Aplicar la regla de oro. +- Elegir una solución que sea directa, incluso si podrías usar otra solución más rápida. +- Sacrificar pequeñas optimizaciones que oscurecen el código. +- Pensar en el lector y dedicar parte de tu tiempo precioso para facilitarle la comprensión. +- Nunca usar un nombre de función como foo, bar o doIt. + +Siguiente [¿Cómo trabajar con un código deficiente?](06-How-to-Work-with-Poor-Code.md) \ No newline at end of file diff --git a/es/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/es/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md new file mode 100644 index 0000000..bcc39d5 --- /dev/null +++ b/es/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -0,0 +1,11 @@ +# ¿Cómo trabajar con un código deficiente? +[//]: # (Version:1.0.0) +Es muy común tener que trabajar con código de baja calidad que alguien más ha escrito. No pienses demasiado mal de ellos, sin embargo, hasta que hayas estado en su lugar. Es posible que les hayan pedido muy conscientemente que hagan algo rápidamente para cumplir con la presión del cronograma. Independientemente, para trabajar con código poco claro, debes entenderlo. Entenderlo lleva tiempo de aprendizaje, y ese tiempo tendrá que salir de algún cronograma, en algún lugar, y debes insistir en ello. Para entenderlo, tendrás que leer el código fuente. Probablemente tendrás que experimentar con él. + +Este es un buen momento para documentar, incluso si es solo para ti, porque el acto de intentar documentar el código te obligará a considerar ángulos que quizás no hayas tenido en cuenta, y el documento resultante puede ser útil. Mientras haces esto, considera qué sería necesario para reescribir parte o todo el código. ¿Realmente ahorraría tiempo reescribir parte de él? ¿Podrías confiar más en él si lo reescribieras? Ten cuidado con la arrogancia aquí. Si lo reescribes, será más fácil para ti manejarlo, pero ¿realmente será más fácil para la siguiente persona que tenga que leerlo? Si lo reescribes, ¿cuál será la carga de pruebas? ¿Superará la necesidad de volver a probarlo cualquier beneficio que se pueda obtener? + +En cualquier estimación que hagas para trabajar con código que no escribiste, la calidad de ese código debería afectar tu percepción del riesgo de problemas y desconocidos. + +Es importante recordar que la abstracción y la encapsulación, dos de las mejores herramientas de un programador, son particularmente aplicables al código deficiente. Es posible que no puedas rediseñar un bloque grande de código, pero si puedes agregar cierta cantidad de abstracción, puedes obtener algunos de los beneficios de un buen diseño sin rehacer todo el desorden. En particular, puedes intentar aislar las partes que son especialmente malas para que puedan ser rediseñadas de forma independiente. + +Siguiente [¿Cómo Utilizar el Control de Código Fuente?](07-How-to-Use-Source-Code-Control.md) \ No newline at end of file diff --git a/es/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/es/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md new file mode 100644 index 0000000..8740658 --- /dev/null +++ b/es/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -0,0 +1,9 @@ +# ¿Cómo Utilizar el Control de Código Fuente? +[//]: # (Version:1.0.0) +Los sistemas de control de código fuente (también conocidos como sistemas de control de versiones) te permiten gestionar proyectos de manera efectiva. Son muy útiles para una persona y esenciales para un grupo. Siguen todos los cambios en diferentes versiones para que nunca se pierda código y se pueda asignar significado a los cambios. Con un sistema de control de código fuente, puedes crear código temporal y de depuración con confianza, ya que el código que modificas se mantiene cuidadosamente separado del código oficial comprometido que se compartirá con el equipo o se lanzará. + +Tardé en apreciar los beneficios de los sistemas de control de código fuente, pero ahora no viviría sin uno, incluso en un proyecto individual. Generalmente son necesarios cuando tienes un equipo trabajando en la misma base de código. Sin embargo, tienen otra gran ventaja: fomentan pensar en el código como un sistema orgánico en crecimiento. Dado que cada cambio se marca como una nueva revisión con un nuevo nombre o número, uno comienza a pensar en el software como una serie visible y progresiva de mejoras. Creo que esto es especialmente útil para principiantes. + +Una buena técnica para utilizar un sistema de control de código fuente es mantenerse actualizado en todo momento, dentro de unos pocos días. El código que no se puede terminar en unos pocos días se registra, pero de una manera inactiva que no se llamará y, por lo tanto, no creará problemas para nadie más. Cometer un error que ralentiza a tus compañeros de equipo es un error grave; a menudo es tabú. + +Siguiente [¿Cómo realizar pruebas unitarias?](08-How-to-Unit-Test.md) diff --git a/es/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/es/1-Beginner/Team-Skills/08-How-to-Unit-Test.md new file mode 100644 index 0000000..1adc4ba --- /dev/null +++ b/es/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -0,0 +1,9 @@ +# ¿Cómo realizar pruebas unitarias? +[//]: # (Version:1.0.0) +Las pruebas unitarias, que consisten en probar una funcionalidad individual codificada por el equipo que la escribió, son parte del proceso de codificación, no algo diferente. Parte del diseño del código es diseñar cómo se probará. Deberías escribir un plan de pruebas, incluso si es solo una oración. A veces, la prueba será simple: '¿Se ve bien el botón?' A veces será compleja: '¿Este algoritmo de coincidencia devolvió coincidencias precisas?' + +Utiliza la verificación de afirmaciones y los controladores de prueba siempre que sea posible. Esto no solo detecta errores temprano, sino que también es muy útil más adelante y te permite eliminar misterios sobre los que de lo contrario tendrías que preocuparte. + +Los desarrolladores de Extreme Programming escriben extensamente sobre cómo realizar pruebas unitarias de manera efectiva; no puedo hacer más que recomendar sus escritos. + +Siguiente [Tomarse descansos cuando te sientes bloqueado](09-Take-Breaks-when-Stumped.md) \ No newline at end of file diff --git a/es/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/es/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md new file mode 100644 index 0000000..0a857c2 --- /dev/null +++ b/es/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -0,0 +1,5 @@ +# Tomarse descansos cuando te sientes bloqueado +[//]: # (Version:1.0.0) +Cuando te sientas bloqueado, toma un descanso. A veces, medito durante 15 minutos cuando estoy bloqueado y el problema se desentraña mágicamente cuando regreso a él. Una noche de sueño a veces hace lo mismo a una escala más amplia. Es posible que cambiar temporalmente a cualquier otra actividad también funcione. + +Siguiente [¿Cómo reconocer cuándo es hora de ir a casa?](10-How-to-Recognize-When-to-Go-Home.md) diff --git a/es/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/es/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md new file mode 100644 index 0000000..ca765f7 --- /dev/null +++ b/es/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -0,0 +1,16 @@ +# ¿Cómo reconocer cuándo es hora de ir a casa? +[//]: # (Version:1.0.0) +La programación de computadoras es una actividad que también es una cultura. El lamentable hecho es que no es una cultura que valore mucho la salud mental o física. Por razones culturales/históricas (la necesidad de trabajar por la noche en computadoras sin carga, por ejemplo) y debido a la abrumadora presión de tiempo para llegar al mercado y a la escasez de programadores, los programadores de computadoras suelen estar tradicionalmente sobrecargados. No creo que se puedan confiar todas las historias que escuchas, pero creo que 60 horas a la semana es común, y 50 es prácticamente un mínimo. Esto significa que a menudo se requiere mucho más que eso. Esto es un problema grave para un buen programador, que es responsable no solo de sí mismo sino también de sus compañeros de equipo. Tienes que reconocer cuándo irte a casa, y a veces cuándo sugerir que otras personas se vayan a casa. No puede haber reglas fijas para resolver este problema, al igual que no puede haber reglas fijas para criar a un niño, por la misma razón: cada ser humano es diferente. + +Más de 60 horas a la semana es un esfuerzo extraordinario para mí, que puedo aplicar durante períodos cortos de tiempo (aproximadamente una semana), y a veces se espera eso de mí. No sé si es justo esperar 60 horas de trabajo de una persona; ni siquiera sé si 40 horas es justo. Estoy seguro, sin embargo, de que es estúpido trabajar tanto que obtienes poco de esa hora extra de trabajo. Personalmente, para mí, eso es más de 60 horas a la semana. Personalmente, creo que un programador debería ejercer la nobleza y cargar con una carga pesada. Sin embargo, no es deber de un programador ser un tonto útil. El triste hecho es que a menudo se les pide a los programadores que sean tontos útiles para hacer un espectáculo para alguien, por ejemplo, un gerente que intenta impresionar a un ejecutivo. Los programadores a menudo sucumben a esto porque están ansiosos por complacer y no son muy buenos para decir no. Hay cuatro defensas contra esto: + +- Comunica tanto como sea posible con todos en la empresa para que nadie pueda engañar a los ejecutivos sobre lo que está sucediendo. +- Aprende a estimar y programar de manera defensiva y explícita y brinda a todos visibilidad sobre cuál es el cronograma y dónde se encuentra. +- Aprende a decir no, y dilo como equipo cuando sea necesario, y +- Renuncia si es necesario. + +La mayoría de los programadores son buenos programadores, y los buenos programadores quieren hacer mucho. Para lograrlo, tienen que gestionar su tiempo de manera efectiva. Existe una cierta cantidad de inercia mental asociada con calentarse para resolver un problema y sumergirse profundamente en él. Muchos programadores encuentran que trabajan mejor cuando tienen bloques largos e ininterrumpidos de tiempo para calentarse y concentrarse. Sin embargo, las personas deben dormir y realizar otras tareas. Cada persona debe encontrar una manera de satisfacer tanto su ritmo humano como su ritmo de trabajo. Cada programador debe hacer lo que sea necesario para obtener períodos eficientes de trabajo, como reservar ciertos días en los que solo asistirás a las reuniones más críticas. + +Desde que tengo hijos, trato de pasar algunas noches con ellos. El ritmo que mejor funciona para mí es trabajar un día muy largo, dormir en la oficina o cerca de la oficina (tengo un largo viaje de casa al trabajo), luego irme a casa lo suficientemente temprano al día siguiente para pasar tiempo con mis hijos antes de que se vayan a la cama. No me siento cómodo con esto, pero es el mejor compromiso que he podido encontrar. Ve a casa si tienes una enfermedad contagiosa. Deberías irte a casa si estás pensando en pensamientos suicidas. Deberías tomar un descanso o irte a casa si piensas en pensamientos homicidas durante más de unos segundos. Deberías enviar a alguien a casa si muestra un mal funcionamiento mental grave o signos de enfermedad mental más allá de una depresión leve. Si sientes la tentación de ser deshonesto o engañoso de una manera que normalmente no lo eres debido a la fatiga, deberías tomar un descanso. No uses cocaína o anfetaminas para combatir la fatiga. No abuses de la cafeína. + +Siguiente [¿Cómo lidiar con personas difíciles?](11-How-to-Deal-with-Difficult-People.md) diff --git a/es/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/es/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md new file mode 100644 index 0000000..a94f20f --- /dev/null +++ b/es/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -0,0 +1,15 @@ +# ¿Cómo lidiar con personas difíciles? +[//]: # (Version:1.0.0) +Es probable que tengas que lidiar con personas difíciles. Incluso tú mismo podrías ser una persona difícil. Si eres el tipo de persona que tiene muchos conflictos con compañeros de trabajo y figuras de autoridad, deberías apreciar la independencia que esto implica, pero trabaja en tus habilidades interpersonales sin sacrificar tu inteligencia o principios. + +Esto puede ser muy perturbador para algunos programadores que no tienen experiencia en este tipo de situaciones y cuya experiencia de vida anterior les ha enseñado patrones de comportamiento que no son útiles en el lugar de trabajo. Las personas difíciles a menudo están acostumbradas al desacuerdo y son menos afectadas por la presión social para llegar a compromisos que otros. La clave es respetarlos apropiadamente, más de lo que quisieras, pero no tanto como ellos podrían desear. + +Los programadores tienen que trabajar juntos como equipo. Cuando surge un desacuerdo, debe resolverse de alguna manera, no se puede esquivar durante mucho tiempo. Las personas difíciles a menudo son extremadamente inteligentes y tienen algo muy útil que decir. Es crucial que escuches y comprendas a la persona difícil sin prejuicios causados por la persona. La falta de comunicación es a menudo la base del desacuerdo, pero a veces se puede eliminar con mucha paciencia. Intenta mantener esta comunicación tranquila y cordial, y no aceptes provocaciones para un mayor conflicto que puedan ofrecer. Después de un período razonable de intentar entender, toma una decisión. + +No dejes que un matón te obligue a hacer algo con lo que no estás de acuerdo. Si eres el líder, haz lo que creas que es mejor. No tomes decisiones por razones personales y prepárate para explicar las razones de tu decisión. Si eres un compañero de equipo con una persona difícil, no dejes que la decisión del líder tenga un impacto personal. Si no va en tu dirección, hazlo de la otra manera de todo corazón. + +Las personas difíciles cambian y mejoran. Lo he visto con mis propios ojos, pero es muy raro. Sin embargo, todos tienen altibajos transitorios. + +Uno de los desafíos que enfrenta cada programador, pero especialmente los líderes, es mantener a la persona difícil completamente comprometida. Son más propensos a esquivar el trabajo y resistirse pasivamente que otros. + +Siguiente [Habilidades intermedias](../../2-Intermediate) diff --git a/es/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/es/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md new file mode 100644 index 0000000..370e417 --- /dev/null +++ b/es/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -0,0 +1,14 @@ +# ¿Cómo equilibrar la calidad contra el tiempo de desarrollo? +[//]: # (Version:1.0.0) + +El desarrollo de software siempre es un compromiso entre lo que hace el proyecto y lograr que el proyecto se complete. Sin embargo, puede que te pidan que sacrifiques la calidad para acelerar la implementación de un proyecto de una manera que vaya en contra de tus sensibilidades técnicas o comerciales. Por ejemplo, podrían pedirte que hagas algo que sea una mala práctica de ingeniería de software y que conduzca a muchos problemas de mantenimiento. + +Si esto sucede, tu primera responsabilidad es informar a tu equipo y explicar claramente el costo de la disminución de la calidad. Después de todo, tu comprensión debería ser mucho mejor que la de tu jefe. Deja claro lo que se está perdiendo y lo que se está ganando, y a qué costo se recuperará el terreno perdido en el próximo ciclo. En esto, la visibilidad proporcionada por un buen plan de proyecto debería ser útil. Si el compromiso de calidad afecta al esfuerzo de aseguramiento de calidad, señálalo (tanto a tu jefe como a las personas encargadas de la calidad). Si el compromiso de calidad conduce a que se informen más errores después del período de aseguramiento de calidad, señálalo. + +Si aún así insiste, deberías tratar de aislar la falta de calidad en componentes específicos que puedas planear reescribir o mejorar en el próximo ciclo. Explícaselo a tu equipo para que puedan planificarlo. + +NinjaProgrammer en Slashdot envió esta joya: + +> Recuerda que un buen diseño será resistente frente a implementaciones de código deficientes. Si existen buenas interfaces y abstracciones en todo el código, las reescrituras eventualmente serán mucho menos dolorosas. Si es difícil escribir código claro que sea difícil de corregir, considera qué hay de malo en el diseño central que está causando esto. + +Siguiente [¿Cómo gestionar la dependencia del sistema de software?](02-How-to-Manage-Software-System-Dependence.md) diff --git a/es/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/es/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md new file mode 100644 index 0000000..436add3 --- /dev/null +++ b/es/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -0,0 +1,13 @@ +# ¿Cómo gestionar la dependencia del sistema de software? +[//]: # (Version:1.0.0) +Los sistemas de software modernos tienden a depender de un gran número de componentes que pueden no estar directamente bajo tu control. Esto aumenta la productividad a través de la sinergia y la reutilización. Sin embargo, cada componente trae consigo algunos problemas: + +- ¿Cómo solucionarás errores en el componente? +- ¿El componente te limita a hardware o sistemas de software específicos? +- ¿Qué harás si el componente falla completamente? + +Siempre es mejor encapsular el componente de alguna manera para que esté aislado y pueda ser reemplazado. Si resulta ser completamente infuncional, es posible que puedas obtener uno diferente, pero es posible que debas escribir el tuyo propio. La encapsulación no es portabilidad, pero facilita el proceso de portabilidad, lo cual es casi tan bueno. + +Tener el código fuente de un componente reduce el riesgo en un factor de cuatro. Con el código fuente, puedes evaluarlo fácilmente, depurarlo con mayor facilidad, encontrar soluciones alternativas más fácilmente y realizar correcciones más fácilmente. Si haces correcciones, debes proporcionarlas al propietario del componente y lograr que se incorporen a una versión oficial; de lo contrario, tendrás que mantener incómodamente una versión no oficial. + +Siguiente [¿Cómo decidir si el software es demasiado inmaduro?](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/es/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/es/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md new file mode 100644 index 0000000..d772457 --- /dev/null +++ b/es/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -0,0 +1,18 @@ +# ¿Cómo decidir si el software es demasiado inmaduro? +[//]: # (Version:1.0.0) +Usar software escrito por otras personas es una de las formas más efectivas de construir rápidamente un sistema sólido. No debería desalentarse, pero los riesgos asociados deben ser examinados. Uno de los mayores riesgos es el período de errores y casi inoperabilidad que a menudo está asociado con el software antes de que madure, a través del uso, en un producto utilizable. Antes de considerar la integración con un sistema de software, ya sea creado internamente o por un tercero, es muy importante considerar si realmente está lo suficientemente maduro como para ser utilizado. Aquí hay diez preguntas que deberías hacerte al respecto: + +1. ¿Es solo promesas? (Las promesas son muy inmaduras). +2. ¿Hay un cuerpo accesible de conocimientos sobre el software? +3. ¿Eres el primer usuario? +4. ¿Hay un fuerte incentivo para continuar? +5. ¿Ha tenido un esfuerzo de mantenimiento? +6. ¿Sobrevivirá a la defección de los actuales encargados del mantenimiento? +7. ¿Hay una alternativa experimentada al menos tan buena? +8. ¿Es conocido por tu tribu o empresa? +9. ¿Es deseable para tu tribu o empresa? +10. ¿Puedes contratar personas para trabajar en él incluso si es malo? + +Un poco de consideración de estos criterios demuestra el gran valor del software libre y del código abierto bien establecido para reducir el riesgo para el emprendedor. + +Siguiente [¿Cómo tomar una decisión de compra frente a desarrollo interno?](04-How-to-Make-a-Buy-vs-Build-Decision.md) \ No newline at end of file diff --git a/es/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/es/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md new file mode 100644 index 0000000..2d93060 --- /dev/null +++ b/es/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -0,0 +1,15 @@ +# ¿Cómo tomar una decisión de compra frente a desarrollo interno? +[//]: # (Version:1.0.0) +Una empresa o proyecto empresarial que intenta lograr algo con software tiene que tomar constantemente decisiones llamadas *comprar vs. construir*. Esta expresión es desafortunada por dos razones: parece ignorar el software de código abierto y gratuito que no es necesariamente *comprado*. Aún más importante, quizás debería llamarse una decisión de *obtener e integrar vs. construir aquí e integrar*, porque se debe considerar el costo de la integración. Esto requiere una gran combinación de perspicacia empresarial, de gestión e ingenieril. + +- ¿Qué tan bien se ajustan tus necesidades a aquellas para las que fue diseñado? +- ¿Qué parte de lo que compras necesitarás? +- ¿Cuál es el costo de evaluar la integración? +- ¿Cuál es el costo de la integración? +- ¿Comprar aumentará o disminuirá los costos de mantenimiento a largo plazo? +- ¿Construirlo te colocará en una posición comercial en la que no quieres estar? + +Deberías pensarlo dos veces antes de construir algo lo suficientemente grande como para servir como base para todo otro negocio. Tales ideas a menudo son propuestas por personas brillantes y optimistas que tendrán mucho que aportar a tu equipo. Si su idea es convincente, es posible que desees cambiar tu plan de negocios; pero no inviertas en una solución más grande que tu propio negocio sin pensarlo conscientemente. + +Después de considerar estas preguntas, deberías preparar dos planes de proyecto preliminares, uno para construir y otro para comprar. Esto te obligará a considerar los costos de integración. También debes considerar los costos de mantenimiento a largo plazo de ambas soluciones. Para estimar los costos de integración, tendrás que hacer una evaluación exhaustiva del software antes de comprarlo. Si no puedes evaluarlo, asumirás un riesgo irrazonable al comprar ese producto y deberías decidir no comprar ese producto en particular. Si hay varias decisiones de compra en consideración, se deberá dedicar algo de energía a evaluar cada una. +Siguiente [¿Cómo crecer profesionalmente?](05-How-to-Grow-Professionally.md) diff --git a/es/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/es/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md new file mode 100644 index 0000000..bea847c --- /dev/null +++ b/es/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -0,0 +1,11 @@ +# ¿Cómo crecer profesionalmente? +[//]: # (Version:1.0.0) +Asume responsabilidades por encima de tu autoridad. Desempeña el papel que deseas. Expresa agradecimiento por la contribución de las personas al éxito de la organización en general, así como por las cosas que te ayudan personalmente. + +Si quieres convertirte en líder de equipo, instiga la formación de consensos. Si quieres ser un gerente, asume la responsabilidad del cronograma. Normalmente, puedes hacer esto cómodamente mientras trabajas con un líder o gerente, ya que esto les libera para asumir una mayor responsabilidad. Si eso es demasiado, hazlo poco a poco. + +Evalúate a ti mismo. Si deseas convertirte en un mejor programador, pregúntale a alguien a quien admires cómo puedes llegar a ser como ellos. También puedes preguntarle a tu jefe, quien sabrá menos pero tendrá un mayor impacto en tu carrera. + +Planifica formas de aprender nuevas habilidades, tanto las técnicas triviales, como aprender un nuevo sistema de software, como las difíciles habilidades sociales, como escribir bien, integrándolas en tu trabajo. + +Siguiente [¿Cómo evaluar a los candidatos en una entrevista?](06-How-to-Evaluate-Interviewees.md) \ No newline at end of file diff --git a/es/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/es/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md new file mode 100644 index 0000000..e3fa3dc --- /dev/null +++ b/es/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -0,0 +1,15 @@ +# ¿Cómo evaluar a los candidatos en una entrevista? +[//]: # (Version:1.0.0) +Evaluar a posibles empleados no recibe la atención que merece. Una mala contratación, al igual que un mal matrimonio, es terrible. Una parte significativa de la energía de todos debería dedicarse al reclutamiento, aunque esto rara vez se hace. + +Existen diferentes estilos de entrevistas. Algunas son tortuosas, diseñadas para poner al candidato bajo una gran presión. Esto sirve para revelar posibles defectos de carácter y debilidades bajo estrés. Los candidatos no son más honestos con los entrevistadores de lo que son consigo mismos, y la capacidad humana para la autoengaño es asombrosa. + +Deberías, como mínimo, dar al candidato el equivalente a un examen oral sobre habilidades técnicas durante dos horas. Con práctica, podrás cubrir rápidamente lo que saben y retirarte rápidamente de lo que no saben para marcar los límites. Los entrevistados respetarán esto. Varias veces he escuchado a entrevistados decir que la calidad del examen fue una de sus motivaciones para elegir una empresa. Las personas talentosas quieren ser contratadas por sus habilidades, no por donde trabajaron anteriormente o a qué escuela asistieron, o alguna otra característica prescindible. + +Al hacer esto, también debes evaluar su capacidad para aprender, que es mucho más importante que lo que saben. También debes observar el olor a azufre que emiten las personas difíciles. Puedes reconocerlo comparando notas después de la entrevista, pero en el calor de la entrevista es difícil de reconocer. La forma en que las personas se comunican y trabajan con los demás es más importante que estar actualizado con el último lenguaje de programación. + +Un lector ha tenido buenos resultados utilizando un examen práctico para los entrevistados. Esto tiene la ventaja de que puede descubrir al entrevistado que puede presentarse bien pero que realmente no sabe programar, y hay muchas personas así. Personalmente, no he probado esta técnica, pero suena sensata. + +Finalmente, la entrevista también es un proceso de venta. Deberías estar vendiendo tu empresa o proyecto al candidato. Sin embargo, estás hablando con un programador, así que no trates de colorear la verdad. Comienza con lo malo y luego termina fuerte con lo bueno. + +Siguiente [¿Cómo saber cuándo aplicar conceptos avanzados de ciencias de la computación?](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/es/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/es/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md new file mode 100644 index 0000000..95f6e4f --- /dev/null +++ b/es/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -0,0 +1,15 @@ +# ¿Cómo saber cuándo aplicar conceptos avanzados de ciencias de la computación? +[//]: # (Version:1.0.0) +Hay un cuerpo de conocimiento sobre algoritmos, estructuras de datos, matemáticas y otras cosas sorprendentes que la mayoría de los programadores conocen pero rara vez utilizan. En la práctica, estas maravillas son demasiado complicadas y generalmente innecesarias. No tiene sentido mejorar un algoritmo cuando la mayor parte del tiempo se gasta haciendo llamadas ineficientes a la base de datos, por ejemplo. Una cantidad lamentable de programación consiste en hacer que los sistemas se comuniquen entre sí y usar estructuras de datos muy simples para construir una interfaz de usuario agradable. + +¿Cuándo es apropiada la tecnología de alta gama? ¿Cuándo debes consultar un libro para obtener algo más que un algoritmo corriente? A veces es útil hacerlo, pero debe evaluarse cuidadosamente. + +Las tres consideraciones más importantes para la técnica potencial de ciencias de la computación son: + +- ¿Está bien encapsulado para que el riesgo para otros sistemas sea bajo y el aumento general en complejidad y costo de mantenimiento sea bajo? +- ¿Es el beneficio sorprendente (por ejemplo, un factor de dos en un sistema maduro o un factor de diez en un sistema nuevo)? +- ¿Podrás probarlo y evaluarlo de manera efectiva? + +Si un algoritmo bien aislado que utiliza un algoritmo ligeramente avanzado puede disminuir el costo del hardware o aumentar el rendimiento en un factor de dos en todo un sistema, entonces sería criminal no considerarlo. Una de las claves para argumentar a favor de este enfoque es mostrar que el riesgo es realmente bastante bajo, ya que la tecnología propuesta probablemente ha sido bien estudiada; el único problema es el riesgo de integración. Aquí es donde la experiencia y el juicio de un programador pueden realmente potenciarse con la tecnología avanzada para facilitar la integración. + +Siguiente [¿Cómo hablar con personas no ingenieras?](08-How-to-Talk-to-Non-Engineers.md) \ No newline at end of file diff --git a/es/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/es/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md new file mode 100644 index 0000000..1b0ae88 --- /dev/null +++ b/es/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -0,0 +1,19 @@ +# ¿Cómo hablar con personas no ingenieras? +[//]: # (Version:1.0.0) +Los ingenieros y, en particular, los programadores, generalmente son reconocidos por la cultura popular como diferentes de otras personas. Esto implica que los demás son diferentes de nosotros. Esto es algo que vale la pena recordar al comunicarnos con no ingenieros; siempre debes entender a la audiencia. + +Los no ingenieros son inteligentes, pero no están tan centrados en crear cosas técnicas como nosotros. Nosotros creamos cosas. Ellos venden cosas y manejan cosas y cuentan cosas y gestionan cosas, pero no son expertos en hacer cosas. No son tan buenos para trabajar en equipos como los ingenieros (sin duda hay excepciones). Sus habilidades sociales generalmente son tan buenas o mejores que las de los ingenieros en entornos no de equipo, pero su trabajo no siempre exige que practiquen el tipo de comunicación íntima, precisa y cuidadosa que nosotros hacemos. + +Los no ingenieros pueden estar demasiado ansiosos por complacer y pueden intimidarse contigo. Al igual que nosotros, pueden decir "sí" sin realmente querer decirlo para complacerte o porque tienen un poco de miedo de ti y luego no cumplen con sus palabras. + +Los no programadores pueden entender cosas técnicas, pero no tienen esa cosa que es tan difícil incluso para nosotros: el juicio técnico. Entienden cómo funciona la tecnología, pero no pueden entender por qué un enfoque tomaría tres meses y otro tres días. (Después de todo, anecdóticamente, los programadores son horribles en este tipo de estimaciones también). Esto representa una gran oportunidad para sinergizar con ellos. + +Cuando hablas con tu equipo, usarás sin pensar un tipo de lenguaje abreviado, un lenguaje abreviado que es efectivo porque tendrás mucha experiencia compartida sobre tecnología en general y tu producto en particular. Se necesita un poco de esfuerzo para no usar este lenguaje abreviado con aquellos que no tienen esa experiencia compartida, especialmente cuando miembros de tu propio equipo están presentes. Este vocabulario crea una barrera entre tú y aquellos que no lo comparten y, lo que es peor, desperdicia su tiempo. + +Con tu equipo, las suposiciones y metas básicas no necesitan repetirse a menudo, y la mayor parte de la conversación se centra en los detalles. Con los externos, debe ser al revés. Es posible que no comprendan cosas que das por sentadas. Como las das por sentadas y no las repites, puedes salir de una conversación con un externo pensando que se entienden mutuamente cuando realmente hay un gran malentendido. Debes asumir que habrá una mala comunicación y observar cuidadosamente para encontrar este malentendido. Trata de hacer que resuman o parafraseen lo que estás diciendo para asegurarte de que comprendan. Si tienes la oportunidad de reunirte con ellos con frecuencia, dedica un poco de tiempo a preguntar si estás comunicándote eficazmente y cómo puedes hacerlo mejor. Si hay un problema de comunicación, busca cambiar tus propias prácticas antes de frustrarte con las suyas. + +Me encanta trabajar con no ingenieros. Ofrece grandes oportunidades para aprender y enseñar. A menudo puedes liderar con el ejemplo en términos de claridad de tu comunicación. Los ingenieros están entrenados para traer orden del caos, para aportar claridad a la confusión, y a los no ingenieros les gusta esto de nosotros. Como tenemos juicio técnico y generalmente podemos entender los problemas comerciales, a menudo podemos encontrar una solución simple a un problema. + +A menudo, los no ingenieros proponen soluciones que creen que nos facilitarán las cosas por amabilidad y el deseo de hacer lo correcto, cuando de hecho existe una solución general mucho mejor que solo puede verse al sinergizar la vista del externo con tu juicio técnico. Personalmente, me gusta Extreme Programming porque aborda esta ineficiencia; al vincular rápidamente la estimación con la idea, facilita encontrar la idea que es la mejor combinación de costo y beneficio. + +Siguiente [habilidades avanzadas](../../3-Advanced) diff --git a/es/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/es/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md new file mode 100644 index 0000000..25f6903 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -0,0 +1,15 @@ +# ¿Cómo mantenerse motivado? +[//]: # (Version:1.0.0) +Es un hecho maravilloso y sorprendente que los programadores estén altamente motivados por el deseo de crear artefactos que sean hermosos, útiles o ingeniosos. Este deseo no es único de los programadores ni universal, pero es tan fuerte y común entre ellos que los separa de otros en diferentes roles. + +Esto tiene consecuencias prácticas e importantes. Si se le pide a los programadores que hagan algo que no sea hermoso, útil o ingenioso, su moral será baja. Hay mucho dinero que ganar haciendo cosas feas, estúpidas y aburridas; pero al final, la diversión generará más dinero para la empresa. + +Obviamente, existen industrias enteras organizadas alrededor de técnicas motivacionales, algunas de las cuales se aplican aquí. Las cosas específicas de la programación que puedo identificar son: + +- Utiliza el mejor lenguaje para el trabajo. +- Busca oportunidades para aplicar nuevas técnicas, lenguajes y tecnologías. +- Trata de aprender o enseñar algo, por pequeño que sea, en cada proyecto. + +Finalmente, si es posible, mide el impacto de tu trabajo en términos de algo que sea personalmente motivador. Por ejemplo, al corregir errores, contar la cantidad de errores que he corregido no es motivador para mí en absoluto, porque es independiente de la cantidad que aún puede existir, y también afecta el valor total que estoy agregando a los clientes de mi empresa solo de la manera más pequeña posible. Relacionar cada error con un cliente satisfecho, sin embargo, *sí* es personalmente motivador para mí. + +Siguiente [¿Cómo ser ampliamente confiado?](02-How-to-be-Widely-Trusted.md) diff --git a/es/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/es/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md new file mode 100644 index 0000000..1067bc1 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -0,0 +1,7 @@ +# ¿Cómo ser ampliamente confiado? +[//]: # (Version:1.0.0) +Para ser confiable, debes ser digno de confianza. También debes ser visible. Si nadie sabe de ti, no se depositará confianza en ti. Con aquellos cercanos a ti, como tus compañeros de equipo, esto no debería ser un problema. Estableces la confianza siendo receptivo e informativo con aquellos fuera de tu departamento o equipo. Ocasionalmente, alguien puede abusar de esta confianza y pedir favores irrazonables. No tengas miedo de esto, simplemente explica lo que tendrías que dejar de hacer para cumplir el favor. + +No finjas saber algo que no sabes. Con personas que no son compañeros de equipo, es posible que debas hacer una clara distinción entre 'no saber de inmediato' y 'no poder averiguarlo nunca'. + +Siguiente [¿Cómo hacer equilibrio entre tiempo y espacio?](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/es/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/es/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md new file mode 100644 index 0000000..3632513 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -0,0 +1,15 @@ +# ¿Cómo hacer equilibrio entre tiempo y espacio? +[//]: # (Version:1.0.0) +Puedes ser un buen programador sin ir a la universidad, pero no puedes ser un buen programador intermedio sin conocer la teoría básica de complejidad computacional. No es necesario que conozcas la notación 'big O', pero personalmente creo que deberías poder entender la diferencia entre 'tiempo constante', 'n log n' y 'n al cuadrado'. Puedes intuir cómo negociar el tiempo contra el espacio sin este conocimiento, pero en su ausencia no tendrás una base sólida para comunicarte con tus colegas. + +En el diseño o comprensión de un algoritmo, la cantidad de tiempo que tarda en ejecutarse a veces es una función del tamaño de la entrada. Cuando eso es cierto, podemos decir que el tiempo de ejecución del peor/caso esperado/mejor de un algoritmo es 'n log n' si es proporcional al tamaño ($n$) multiplicado por el logaritmo del tamaño. La notación y la forma de hablar también se pueden aplicar al espacio ocupado por una estructura de datos. + +Para mí, la teoría de complejidad computacional es tan hermosa y profunda como la física, ¡y un poco va un largo camino! + +El tiempo (ciclos del procesador) y el espacio (memoria) se pueden intercambiar entre sí. La ingeniería se trata de compromisos, y este es un buen ejemplo. No siempre es sistemático. En general, sin embargo, se puede ahorrar espacio codificando las cosas de manera más ajustada, a expensas de más tiempo de computación cuando tienes que decodificarlas. Puedes ahorrar tiempo almacenando en caché, es decir, gastando espacio para almacenar una copia local de algo, a expensas de tener que mantener la consistencia de la caché. A veces puedes ahorrar tiempo manteniendo más información en una estructura de datos. Esto generalmente cuesta una pequeña cantidad de espacio, pero puede complicar el algoritmo. + +Mejorar el intercambio de espacio/tiempo a menudo puede cambiar uno u otro dramáticamente. Sin embargo, antes de trabajar en esto, deberías preguntarte si lo que estás mejorando es realmente lo que necesita más mejoras. Es divertido trabajar en un algoritmo, pero no puedes dejar que eso te ciegue ante el hecho frío y duro de que mejorar algo que no es un problema no hará ninguna diferencia notable y creará una carga de pruebas. + +La memoria en las computadoras modernas parece barata, porque a diferencia del tiempo del procesador, no puedes ver que se esté utilizando hasta que te encuentras con el límite; pero luego el fallo es catastrófico. También hay otros costos ocultos al usar memoria, como tu efecto en otros programas que deben residir en ella y el tiempo para asignarla y desasignarla. Considera esto cuidadosamente antes de intercambiar espacio para ganar velocidad. + +Siguiente [¿Cómo realizar pruebas de resistencia?](04-How-to-Stress-Test.md) diff --git a/es/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/es/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md new file mode 100644 index 0000000..5f82330 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -0,0 +1,17 @@ +# ¿Cómo realizar pruebas de resistencia? +[//]: # (Version:1.0.0) +Las pruebas de estrés son divertidas. Al principio, parece que el propósito de las pruebas de estrés es descubrir si el sistema funciona bajo carga. En realidad, es común que el sistema funcione bajo carga pero falle de alguna manera cuando la carga es lo suficientemente pesada. Llamo a esto chocar *contra la pared* o *bonking*[1]. Puede haber algunas excepciones, pero casi siempre hay una ‘pared’. El propósito de las pruebas de estrés es descubrir dónde está la pared y luego averiguar cómo moverla más hacia afuera. + +Un plan para las pruebas de estrés debe desarrollarse temprano en el proyecto, porque a menudo ayuda a aclarar exactamente lo que se espera. ¿Dos segundos para una solicitud de página web son un fracaso miserable o un éxito rotundo? ¿Son suficientes 500 usuarios concurrentes? Eso, por supuesto, depende, pero uno debe saber la respuesta al diseñar el sistema que responde a la solicitud. La prueba de estrés necesita modelar la realidad lo suficientemente bien como para ser útil. No es realmente posible simular fácilmente a 500 humanos erráticos e impredecibles usando un sistema al mismo tiempo, pero al menos se pueden crear 500 simulaciones e intentar modelar alguna parte de lo que podrían hacer. + +En las pruebas de estrés, comienza con una carga ligera y carga el sistema a lo largo de alguna dimensión, como la tasa de entrada o el tamaño de la entrada, hasta que choques contra la pared. Si la pared está demasiado cerca para satisfacer tus necesidades, averigua cuál es el recurso limitante (generalmente hay uno dominante). ¿Es la memoria, el procesador, la E/S, el ancho de banda de la red o la contención de datos? Luego, descubre cómo puedes mover la pared. Ten en cuenta que mover la pared, es decir, aumentar la carga máxima que el sistema puede manejar, podría no ayudar o incluso perjudicar el rendimiento de un sistema ligeramente cargado. Por lo general, el rendimiento bajo carga pesada es más importante que el rendimiento bajo carga ligera. + +Es posible que debas obtener visibilidad en varias dimensiones diferentes para construir un modelo mental de ello; ninguna técnica única es suficiente. Por ejemplo, el registro a menudo da una buena idea del tiempo de reloj entre dos eventos en el sistema, pero a menos que esté cuidadosamente construido, no proporciona visibilidad en la utilización de la memoria ni siquiera en el tamaño de la estructura de datos. De manera similar, en un sistema moderno, varios equipos y muchos sistemas de software pueden estar cooperando. Especialmente cuando chocas contra la pared (es decir, el rendimiento no es lineal en el tamaño de la entrada), estos otros sistemas de software pueden ser un cuello de botella. La visibilidad en estos sistemas, incluso si solo mides la carga del procesador en todas las máquinas participantes, puede ser muy útil. + +Saber dónde está la pared es esencial no solo para moverla, sino también para proporcionar previsibilidad para que el negocio se pueda gestionar de manera efectiva. + +-- + +[1] "chocar" + +Siguiente [¿Cómo equilibrar brevedad y abstracción?](05-How-to-Balance-Brevity-and-Abstraction.md) \ No newline at end of file diff --git a/es/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/es/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md new file mode 100644 index 0000000..f2d5e15 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -0,0 +1,9 @@ +# ¿Cómo equilibrar brevedad y abstracción? +[//]: # (Version:1.0.0) +La abstracción es clave en la programación. Debes elegir cuidadosamente cuánta abstracción necesitas. Los programadores principiantes, en su entusiasmo, a menudo crean más abstracción de la realmente útil. Una señal de esto es si creas clases que realmente no contienen ningún código y no hacen nada más que servir para abstraer algo. La atracción de esto es comprensible, pero el valor de la brevedad del código debe medirse contra el valor de la abstracción. Ocasionalmente, uno ve un error cometido por idealistas entusiastas: al comienzo del proyecto se definen muchas clases que parecen maravillosamente abstractas y se puede especular que manejarán todas las eventualidades que puedan surgir. A medida que avanza el proyecto y se instala la fatiga, el código en sí mismo se vuelve desordenado. Los cuerpos de las funciones son más largos de lo que deberían ser. Las clases vacías son una carga para la documentación que se ignora cuando hay presión. El resultado final habría sido mejor si la energía gastada en la abstracción se hubiera gastado en mantener las cosas cortas y simples. Esto es una forma de programación especulativa. Recomiendo encarecidamente el artículo ['La concisión es poder' de Paul Graham.](http://www.paulgraham.com/power.html). + +Hay un cierto dogma asociado con técnicas útiles como *ocultamiento de información* y *programación orientada a objetos* que a veces se llevan demasiado lejos. Estas técnicas permiten codificar de manera abstracta y anticipar cambios. Personalmente, sin embargo, creo que no deberías producir mucho código especulativo. Por ejemplo, es un estilo aceptado ocultar una variable entera en un objeto detrás de mutadores y accesores, de modo que la variable misma no se expone, solo la pequeña interfaz a ella. Esto permite que la implementación de esa variable se cambie sin afectar el código de llamada y es quizás apropiado para un escritor de bibliotecas que debe publicar una API muy estable. Pero no creo que el beneficio de esto compense el costo de la prolijidad cuando mi equipo posee el código de llamada y, por lo tanto, puede recodificar el llamante tan fácilmente como al llamado. Cuatro o cinco líneas extra de código son un precio alto a pagar por este beneficio especulativo. + +La portabilidad plantea un problema similar. ¿Debería el código ser portátil a una computadora, compilador, sistema de software o plataforma diferente, o simplemente fácilmente portable? Creo que un código no portátil, corto y fácilmente portable es mejor que uno largo y portátil. Es relativamente fácil y ciertamente una buena idea confinar el código no portátil a áreas designadas, como una clase que realiza consultas a la base de datos específicas de un determinado sistema de gestión de bases de datos (DBMS). + +Siguiente [¿Cómo aprender nuevas habilidades?](06-How-to-Learn-New-Skills.md) diff --git a/es/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/es/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md new file mode 100644 index 0000000..ba5ae19 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -0,0 +1,13 @@ +# ¿Cómo aprender nuevas habilidades? +[//]: # (Version:1.0.0) +Aprender nuevas habilidades, especialmente las no técnicas, es la mayor diversión de todas. La mayoría de las empresas tendrían un mejor ambiente si comprendieran cuánto motiva a los programadores esto. + +Los humanos aprenden haciendo. Leer libros y asistir a clases es útil. Pero, ¿podrías tener respeto por un programador que nunca ha escrito un programa? Para aprender cualquier habilidad, debes ponerte en una posición tolerante donde puedas ejercitar esa habilidad. Al aprender un nuevo lenguaje de programación, trata de hacer un pequeño proyecto en él antes de tener que hacer uno grande. Al aprender a gestionar un proyecto de software, intenta gestionar uno pequeño primero. + +Un buen mentor no reemplaza hacer las cosas por ti mismo, pero es mucho mejor que un libro. ¿Qué puedes ofrecer a un mentor potencial a cambio de sus conocimientos? Como mínimo, deberías ofrecerte a estudiar arduamente para que su tiempo no sea desperdiciado. + +Intenta que tu jefe te permita recibir formación formal, pero comprende que a menudo no es mucho mejor que la misma cantidad de tiempo simplemente jugando con la nueva habilidad que quieres aprender. Sin embargo, es más fácil pedir capacitación que tiempo de juego en nuestro mundo imperfecto, aunque mucha formación formal consiste en dormir durante conferencias esperando la fiesta. + +Si lideras personas, comprende cómo aprenden y ayúdalos asignándoles proyectos del tamaño adecuado y que ejerciten habilidades en las que estén interesados. No olvides que las habilidades más importantes para un programador no son las técnicas. Da a tus colaboradores la oportunidad de jugar y practicar la valentía, honestidad y comunicación. + +Siguiente [Aprender a escribir](07-Learn-to-Type.md) diff --git a/es/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/es/2-Intermediate/Personal-Skills/07-Learn-to-Type.md new file mode 100644 index 0000000..3e5f611 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -0,0 +1,5 @@ +# Aprender a escribir +[//]: # (Version:1.0.0) +Aprende a escribir a máquina sin mirar el teclado (touch-type). Esta es una habilidad intermedia porque escribir código es tan difícil que la velocidad a la que puedes escribir es irrelevante y no puede marcar mucha diferencia en el tiempo que lleva escribir código, sin importar cuán bueno seas. Sin embargo, cuando eres un programador intermedio, probablemente pasarás mucho tiempo escribiendo en lenguaje natural para tus colegas y otros. Esto es una prueba divertida de tu compromiso; toma tiempo dedicado que no es muy divertido aprender algo así. Se cuenta la leyenda de que cuando Michael Tiemann estaba en MCC, la gente se paraba fuera de su puerta para escuchar el zumbido generado por sus pulsaciones de teclas, que eran tan rápidas que eran indistinguibles. + +Siguiente [¿Cómo hacer pruebas de integración?](08-How-to-Do-Integration-Testing.md) \ No newline at end of file diff --git a/es/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/es/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md new file mode 100644 index 0000000..0daaa95 --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -0,0 +1,7 @@ +# ¿Cómo hacer pruebas de integración? +[//]: # (Version:1.0.0) +La prueba de integración es la prueba de la integración de varios componentes que han sido probados unitariamente. La integración es costosa y se refleja en las pruebas. Debes incluir tiempo para esto en tus estimaciones y tu cronograma. + +Idealmente, deberías organizar un proyecto de manera que no haya una fase al final donde la integración deba tener lugar explícitamente. Es mucho mejor integrar gradualmente las cosas a medida que se completan a lo largo del proyecto. Si no se puede evitar, estima cuidadosamente. + +Siguiente [Idiomas de comunicación](09-Communication-Languages.md) \ No newline at end of file diff --git a/es/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/es/2-Intermediate/Personal-Skills/09-Communication-Languages.md new file mode 100644 index 0000000..301826a --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -0,0 +1,11 @@ +# Idiomas de comunicación +[//]: # (Version:1.0.0) +Existen algunos lenguajes, es decir, sistemas sintácticos formalmente definidos, que no son *lenguajes de programación*, sino lenguajes de comunicación; están diseñados específicamente para facilitar la comunicación a través de la estandarización. En 2003, los más importantes de estos son UML, XML y SQL. Deberías tener cierta familiaridad con todos ellos para poder comunicarte bien y decidir cuándo usarlos. + +UML es un sistema formal rico para realizar dibujos que describen diseños. Su belleza radica en que es visual y formal al mismo tiempo, capaz de transmitir mucha información si tanto el autor como la audiencia conocen UML. Necesitas conocerlo porque a veces los diseños se comunican en él. Hay herramientas muy útiles para hacer dibujos UML que lucen muy profesionales. En muchos casos, UML es demasiado formal, y me encuentro usando un estilo más simple de *cuadros y flechas* para dibujos de diseño. Pero estoy bastante seguro de que UML es al menos tan beneficioso como estudiar latín. + +XML es un estándar para definir nuevos estándares. No es una solución para problemas de intercambio de datos, aunque a veces se presenta como tal. Más bien, es una automatización bienvenida de la parte más aburrida del intercambio de datos, es decir, estructurar la representación en una secuencia lineal y analizar de nuevo en una estructura. Proporciona algunas verificaciones agradables de tipo y corrección, aunque nuevamente solo una fracción de lo que es probable que necesites en la práctica. + +SQL es un lenguaje de consulta y manipulación de datos muy potente y completo que no es exactamente un lenguaje de programación. Tiene muchas variaciones, típicamente bastante dependientes del producto, que son menos importantes que el núcleo estandarizado. SQL es la *lingua franca* de las bases de datos relacionales. Puede que trabajes o no en un campo que se beneficie de la comprensión de las bases de datos relacionales, pero deberías tener un entendimiento básico de ellas y de la sintaxis y el significado de SQL. + +Siguiente [Herramientas pesadas](10-Heavy-Tools.md) diff --git a/es/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/es/2-Intermediate/Personal-Skills/10-Heavy-Tools.md new file mode 100644 index 0000000..f4caa0a --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -0,0 +1,14 @@ +# Herramientas pesadas + [//]: # (Version:1.0.0) +A medida que nuestra cultura tecnológica avanza, la tecnología del software pasa de ser inconcebible, a investigación, a nuevos productos, a productos estandarizados, a productos ampliamente disponibles e económicos. Estas herramientas robustas pueden manejar grandes cargas, pero pueden resultar intimidantes y requieren una gran inversión en comprensión. El programador intermedio debe saber cómo gestionarlas y cuándo deben ser utilizadas o consideradas. + +En mi opinión, en este momento, algunas de las mejores herramientas robustas son: + +- Bases de datos relacionales, +- Motores de búsqueda de texto completo, +- Bibliotecas matemáticas, +- OpenGL, +- Analizadores XML, y +- Hojas de cálculo. + +Siguiente [¿Cómo analizar datos?](11-How-to-analyze-data.md) diff --git a/es/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/es/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md new file mode 100644 index 0000000..ea0f45d --- /dev/null +++ b/es/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -0,0 +1,11 @@ +# ¿Cómo analizar datos? +[//]: # (Version:1.0.0) +El análisis de datos es un proceso en las primeras etapas del desarrollo de software, cuando examinas una actividad comercial y encuentras los requisitos para convertirla en una aplicación de software. Esta es una definición formal que puede llevarte a pensar que el análisis de datos es una acción que sería mejor dejar en manos de los analistas de sistemas, mientras que tú, el programador, deberías enfocarte en codificar lo que alguien más ha diseñado. Si seguimos estrictamente el paradigma de ingeniería de software, esto podría ser correcto. Los programadores experimentados se convierten en diseñadores y los diseñadores más agudos se convierten en analistas de negocios, teniendo así derecho a pensar en todos los requisitos de datos y darte una tarea bien definida para llevar a cabo. Sin embargo, esto no es del todo preciso, porque los datos son el valor central de cada actividad de programación. Sea lo que sea que hagas en tus programas, ya sea mover o modificar datos. El analista de negocios está analizando las necesidades en una escala más grande, y el diseñador de software está apretando aún más esa escala para que, cuando el problema llegue a tu escritorio, parezca que todo lo que necesitas hacer es aplicar algoritmos inteligentes y empezar a mover datos existentes. + +Pero no es así. + +No importa en qué etapa empieces a mirarlo, los datos son la principal preocupación de una aplicación bien diseñada. Si observas de cerca cómo un analista de negocios obtiene los requisitos de las solicitudes del cliente, te darás cuenta de que los datos desempeñan un papel fundamental. El analista crea los llamados Diagramas de Flujo de Datos, donde se identifican todas las fuentes de datos y se da forma al flujo de información. Una vez que se han definido claramente qué datos deben formar parte del sistema, el diseñador dará forma a las fuentes de datos en términos de relaciones de base de datos, protocolos de intercambio de datos y formatos de archivo, para que la tarea esté lista para ser entregada al programador. Sin embargo, el proceso no ha terminado, porque tú (el programador), incluso después de este exhaustivo proceso de refinamiento de datos, debes analizar los datos para realizar la tarea de la mejor manera posible. La línea de fondo de tu tarea es el mensaje central de Niklaus Wirth, el padre de varios lenguajes. "Algoritmos + Estructuras de Datos = Programas". Nunca hay un algoritmo que esté solo, haciendo algo por sí mismo. Se supone que cada algoritmo debe hacer algo al menos a un fragmento de datos. + +Por lo tanto, dado que los algoritmos no giran sus ruedas en el vacío, necesitas analizar tanto los datos que alguien más ha identificado para ti como los datos necesarios para escribir tu código. Un ejemplo trivial aclarará el asunto. Estás implementando un procedimiento de búsqueda para una biblioteca. Según tus especificaciones, el usuario puede seleccionar libros por una combinación de género, autor, título, editorial, año de impresión y número de páginas. El objetivo final de tu rutina es producir una declaración SQL válida para buscar en la base de datos del servidor. Según estos requisitos, tienes varias opciones: verificar cada control a su vez, usando una declaración "switch" o varias declaraciones "if"; hacer un array de controles de datos, verificando cada elemento para ver si está establecido; crear (o usar) un objeto de control abstracto del cual heredar todos tus controles específicos y conectarlos a un motor de eventos. Si tus requisitos incluyen también ajustar el rendimiento de la consulta, asegurándote de que los elementos se verifiquen en un orden específico, puedes considerar el uso de un árbol de componentes para construir tu declaración SQL. Como puedes ver, la elección del algoritmo depende de los datos que decidas usar o crear. Tales decisiones pueden marcar la diferencia entre un algoritmo eficiente y uno desastroso. Sin embargo, la eficiencia no es la única preocupación. Puedes usar una docena de variables nombradas en tu código y hacerlo tan eficiente como sea posible. Pero dicho código puede no ser fácilmente mantenible. Quizás elegir un contenedor adecuado para tus variables podría mantener la misma velocidad y, además, permitir que tus colegas comprendan mejor el código cuando lo vean el próximo año. Además, elegir una estructura de datos bien definida puede permitirles ampliar la funcionalidad de tu código sin tener que reescribirlo. A largo plazo, tus elecciones de datos determinan cuánto tiempo sobrevivirá tu código después de que hayas terminado con él. Permíteme darte otro ejemplo, solo un poco más de comida para el pensamiento. Supongamos que tu tarea es encontrar todas las palabras en un diccionario con más de tres anagramas, donde un anagrama debe ser otra palabra en el mismo diccionario. Si lo piensas como una tarea computacional, terminarás con un esfuerzo interminable, tratando de trabajar todas las combinaciones de cada palabra y luego comparándolas con las demás palabras en la lista. Sin embargo, si analizas los datos disponibles, te darás cuenta de que cada palabra puede estar representada por un registro que contiene la palabra en sí y una matriz ordenada de sus letras como ID. Armado con dicho conocimiento, encontrar anagramas significa simplemente ordenar la lista en función del campo adicional y recoger aquellos que comparten el mismo ID. El algoritmo de fuerza bruta puede llevar varios días en ejecutarse, mientras que el inteligente es solo cuestión de segundos. Recuerda este ejemplo la próxima vez que te enfrentes a un problema intratable. + +Siguiente [Habilidades de Equipo - ¿Cómo gestionar el tiempo de desarrollo?](../Team-Skills/01-How-to-Manage-Development-Time.md) \ No newline at end of file diff --git a/es/2-Intermediate/README.md b/es/2-Intermediate/README.md new file mode 100644 index 0000000..aa766b7 --- /dev/null +++ b/es/2-Intermediate/README.md @@ -0,0 +1,29 @@ +# 2. Intermedio +[//]: # (Version:1.0.0) +- Habilidades Personales + - [¿Cómo Mantenerse Motivado?](Personal-Skills/01-How-to-Stay-Motivated.md) + - [¿Cómo Ser Ampliamente Confiado?](Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [¿Cómo Hacer Equilibrio Entre Tiempo y Espacio?](Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [¿Cómo Realizar Pruebas de Resistencia?](Personal-Skills/04-How-to-Stress-Test.md) + - [¿Cómo Equilibrar Brevedad y Abstracción?](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [¿Cómo Aprender Nuevas Habilidades?](Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Aprender a Escribir](Personal-Skills/07-Learn-to-Type.md) + - [¿Cómo Hacer Pruebas de Integración?](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Idiomas de Comunicación](Personal-Skills/09-Communication-Languages.md) + - [Herramientas Pesadas](Personal-Skills/10-Heavy-Tools.md) + - [¿Cómo analizar datos?](Personal-Skills/11-How-to-analyze-data.md) +- Habilidades de Equipo + - [¿Cómo Gestionar el Tiempo de Desarrollo?](Team-Skills/01-How-to-Manage-Development-Time.md) + - [¿Cómo Gestionar los Riesgos del Software de Terceros?](Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [¿Cómo Gestionar a los Consultores?](Team-Skills/03-How-to-Manage-Consultants.md) + - [¿Cómo Comunicar la Cantidad Adecuada?](Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [¿Cómo Disentir Honradamente y Salir Airosos?](Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) +- Juicio + - [¿Cómo Equilibrar la Calidad contra el Tiempo de Desarrollo?](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [¿Cómo Gestionar la Dependencia del Sistema de Software?](Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [¿Cómo Decidir si el Software es Demasiado Inmaduro?](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [¿Cómo Tomar una Decisión de Compra frente a Desarrollo Interno?](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [¿Cómo Crecer Profesionalmente?](Judgment/05-How-to-Grow-zProfessionally.md) + - [¿Cómo Evaluar a los Candidatos en una Entrevista?](Judgment/06-How-to-Evaluate-Interviewees.md) + - [¿Cómo Saber Cuándo Aplicar Conceptos Avanzados de Ciencias de la Computación?](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [¿Cómo Hablar con Personas No Ingenieras?](Judgment/08-How-to-Talk-to-Non-Engineers.md) diff --git a/es/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/es/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md new file mode 100644 index 0000000..0e00b2b --- /dev/null +++ b/es/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -0,0 +1,11 @@ +# ¿Cómo gestionar el tiempo de desarrollo? +[//]: # (Version:1.0.0) +Para gestionar el tiempo de desarrollo, mantén un plan de proyecto conciso y actualizado. Un plan de proyecto es una estimación, un cronograma, un conjunto de hitos para marcar el progreso y una asignación del tiempo de tu equipo o el tuyo propio para cada tarea en la estimación. También debería incluir otras cosas que debes recordar hacer, como reunirte con el equipo de aseguramiento de calidad, preparar documentación o solicitar equipos. Si estás en un equipo, el plan de proyecto debería ser un acuerdo consensuado, tanto al principio como a medida que avanzas. + +El plan de proyecto existe para ayudar a tomar decisiones, no para mostrar cuán organizado estás. Si el plan de proyecto es demasiado largo o no está actualizado, será inútil para tomar decisiones. En realidad, estas decisiones se refieren a personas individuales. El plan y tu juicio te permiten decidir si debes trasladar tareas de una persona a otra. Los hitos marcan tu progreso. Si utilizas una herramienta de planificación de proyectos sofisticada, no te dejes seducir por crear un Gran Diseño Desde el Principio (BDUF, por sus siglas en inglés) para el proyecto, sino úsalo para mantener la concisión y la actualización. + +Si te saltas un hito, debes tomar medidas inmediatas, como informar a tu jefe que la finalización programada de ese proyecto se ha retrasado esa cantidad. La estimación y el cronograma nunca podrían haber sido perfectos desde el principio; esto crea la ilusión de que podrías recuperar los días que perdiste en la última parte del proyecto. Puede que sí. Pero es tan probable que hayas subestimado esa parte como que la hayas sobreestimado. Por lo tanto, la finalización programada del proyecto ya se ha retrasado, te guste o no. + +Asegúrate de que tu plan incluya tiempo para: reuniones internas del equipo, demostraciones, documentación, actividades periódicas programadas, pruebas de integración, trato con personas externas, enfermedades, vacaciones, mantenimiento de productos existentes y mantenimiento del entorno de desarrollo. El plan de proyecto puede servir como una forma de brindar a personas externas o a tu jefe una visión de lo que tú o tu equipo están haciendo. Por esta razón, debería ser corto y estar actualizado. + +Siguiente [¿Cómo gestionar los riesgos del software de terceros?](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/es/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/es/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md new file mode 100644 index 0000000..a244fa9 --- /dev/null +++ b/es/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -0,0 +1,11 @@ +# ¿Cómo gestionar los riesgos del software de terceros? +[//]: # (Version:1.0.0) +Un proyecto a menudo depende del software producido por organizaciones que no controla. Hay grandes riesgos asociados con el software de terceros que deben ser reconocidos por todos los involucrados. + +Nunca, bajo ninguna circunstancia, deposites esperanzas en *vapor*. El vapor es cualquier software supuestamente prometido pero que aún no está disponible. Esta es la manera más segura de ir a la quiebra. No es prudente ser simplemente escéptico ante la promesa de una empresa de software de lanzar un producto específico con una función específica en una fecha determinada; es mucho más sabio ignorarlo por completo y olvidar que alguna vez lo escuchaste. Nunca dejes que se escriba en documentos utilizados por tu empresa. + +Si el software de terceros no es vapor, aún así conlleva riesgos, pero al menos es un riesgo que se puede abordar. Si estás considerando usar software de terceros, debes dedicar energía desde el principio a evaluarlo. A la gente puede que no le guste escuchar que llevará dos semanas o dos meses evaluar cada uno de los tres productos en cuanto a su idoneidad, pero se debe hacer tan pronto como sea posible. El costo de la integración no se puede estimar con precisión sin una evaluación adecuada. + +Entender la idoneidad del software de terceros existente para un propósito específico es un conocimiento muy tribal. Es muy subjetivo y generalmente reside en expertos. Puedes ahorrar mucho tiempo si puedes encontrar a esos expertos. Muchas veces, un proyecto dependerá tan completamente de un sistema de software de terceros que si falla la integración, el proyecto también fallará. Expresa claramente riesgos como ese por escrito en el cronograma. Intenta tener un plan de contingencia, como otro sistema que se pueda utilizar o la capacidad de escribir la funcionalidad tú mismo si el riesgo no se puede eliminar temprano. Nunca hagas que un cronograma dependa del vapor. + +Siguiente [¿Cómo gestionar a los consultores?](03-How-to-Manage-Consultants.md) \ No newline at end of file diff --git a/es/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/es/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md new file mode 100644 index 0000000..6b15655 --- /dev/null +++ b/es/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -0,0 +1,9 @@ +# ¿Cómo gestionar a los consultores? +[//]: # (Version:1.0.0) +Usa consultores, pero no dependas de ellos. Son personas maravillosas y merecen mucho respeto. Dado que tienen la oportunidad de ver muchos proyectos diferentes, a menudo saben más sobre tecnologías específicas e incluso técnicas de programación que tú. La mejor manera de utilizarlos es como educadores internos que pueden enseñar mediante el ejemplo. + +Sin embargo, por lo general, no pueden formar parte del equipo de la misma manera que los empleados regulares, si solo porque es posible que no tengas suficiente tiempo para conocer sus fortalezas y debilidades. Su compromiso financiero es mucho menor. Pueden moverse con más facilidad. Es posible que tengan menos que ganar si a la empresa le va bien. Algunos serán buenos, algunos serán promedio y algunos serán malos, pero con suerte, la selección de consultores no será tan cuidadosa como la selección de empleados, así que obtendrás más malos. + +Si los consultores van a escribir código, debes revisarlo cuidadosamente a medida que avanzas. No puedes llegar al final de un proyecto con el riesgo de tener un gran bloque de código que no ha sido revisado. Esto es cierto para todos los miembros del equipo, realmente, pero generalmente tendrás más conocimiento de los miembros del equipo más cercanos a ti. + +Siguiente [¿Cómo comunicar la cantidad adecuada?](04-How-to-Communicate-the-Right-Amount.md) \ No newline at end of file diff --git a/es/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/es/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md new file mode 100644 index 0000000..65690bc --- /dev/null +++ b/es/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -0,0 +1,7 @@ +# ¿Cómo comunicar la cantidad adecuada? +[//]: # (Version:1.0.0) +Considera cuidadosamente el costo de una reunión; cuesta *su duración multiplicada por el número de participantes*. Las reuniones son a veces necesarias, pero por lo general, menos personas son mejores. La calidad de la comunicación en reuniones pequeñas es mejor, y se desperdicia menos tiempo en general. Si alguien se aburre en una reunión, tómalo como una señal de que la reunión debería ser más pequeña. + +Debería hacerse todo lo posible para fomentar la comunicación informal. Se realiza más trabajo útil durante los almuerzos con colegas que en cualquier otro momento. Es una lástima que más empresas no reconozcan ni respalden este hecho. + +Siguiente [¿Cómo disentir honradamente y salir airosos?](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/es/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/es/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md new file mode 100644 index 0000000..7ef7b32 --- /dev/null +++ b/es/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -0,0 +1,11 @@ +# ¿Cómo disentir honradamente y salir airosos? +[//]: # (Version:1.0.0) +La discrepancia es una gran oportunidad para tomar una buena decisión, pero debe manejarse delicadamente. Con suerte, sientes que has expresado adecuadamente tus pensamientos y que te han escuchado antes de que se tome la decisión. En ese caso, no hay nada más que decir, y debes decidir si respaldarás la decisión aunque estés en desacuerdo. Si puedes respaldar esta decisión a pesar de tu desacuerdo, dilo. Esto demuestra cuán valioso eres porque eres independiente y no eres un sí-hombre, pero eres respetuoso con la decisión y un jugador de equipo. + +A veces, se tomará una decisión con la que no estás de acuerdo cuando los tomadores de decisiones no tuvieron el beneficio completo de tu opinión. Debes evaluar si plantear el problema en función del beneficio para la empresa o la tribu. Si es un pequeño error en tu opinión, puede que no valga la pena reconsiderarlo. Si es un gran error en tu opinión, entonces, por supuesto, debes presentar un argumento. + +Por lo general, esto no es un problema. En algunas circunstancias estresantes y con algunos tipos de personalidad, esto puede llevar a que las cosas se tomen de manera personal. Por ejemplo, algunos programadores muy buenos carecen de la confianza necesaria para cuestionar una decisión incluso cuando tienen buenas razones para creer que está equivocada. En las peores circunstancias, el tomador de decisiones es inseguro y lo toma como un desafío personal a su autoridad. Lo mejor es recordar que en tales circunstancias, las personas reaccionan con la parte reptiliana de sus cerebros. Debes presentar tu argumento en privado e intentar mostrar cómo el nuevo conocimiento cambia la base sobre la cual se tomó la decisión. + +Ya sea que la decisión se revierta o no, debes recordar que nunca podrás decir '¡Te lo dije!' ya que la decisión alternativa fue completamente explorada. + +Siguiente [Juicio - ¿Cómo equilibrar la calidad contra el tiempo de desarrollo?](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/es/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/es/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md new file mode 100644 index 0000000..b6de927 --- /dev/null +++ b/es/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -0,0 +1,11 @@ +# ¿Cómo Combatir la Presión del Cronograma? +[//]: # (Version:1.0.0) +La presión del "time-to-market" es la presión por entregar un buen producto rápidamente. Es positiva porque refleja una realidad financiera y es saludable hasta cierto punto. La presión del cronograma es la presión por entregar algo más rápido de lo que se puede hacer, y es derrochadora, perjudicial y demasiado común. + +La presión del cronograma existe por varias razones. Las personas que asignan tareas a los programadores no aprecian completamente la ética laboral sólida que tenemos y lo divertido que es ser un programador. Tal vez porque proyectan su propio comportamiento en nosotros, creen que pedirlo antes hará que trabajemos más para entregarlo más rápido. Esto probablemente sea cierto, pero el efecto es muy pequeño y el daño es muy grande. Además, no tienen visibilidad sobre lo que realmente implica producir software. Al no poder verlo y no poder crearlo ellos mismos, lo único que pueden hacer es ver la presión del "time-to-market" y molestar a los programadores al respecto. + +La clave para combatir la presión del cronograma es simplemente convertirla en presión del "time-to-market". La forma de hacer esto es brindar visibilidad sobre la relación entre la mano de obra disponible y el producto. Producir una estimación honesta, detallada y, sobre todo, comprensible de todo el trabajo involucrado es la mejor manera de lograrlo. Tiene la ventaja adicional de permitir tomar decisiones de gestión acertadas sobre posibles compensaciones de funcionalidad. + +La idea clave que la estimación debe dejar clara es que la mano de obra es un fluido casi incompresible. No se puede empacar más en un período de tiempo, al igual que no se puede empacar más agua en un recipiente más allá del volumen de ese recipiente. En cierto sentido, un programador nunca debería decir "no", sino más bien decir "¿Qué estás dispuesto a renunciar para obtener eso que quieres?". El efecto de producir estimaciones claras será aumentar el respeto por los programadores. Así es como se comportan otros profesionales. El arduo trabajo de los programadores será visible. Establecer un cronograma poco realista también será dolorosamente obvio para todos. Los programadores no pueden ser engañados. Es irrespetuoso y desmoralizante pedirles que hagan algo irrealista. La Programación Extrema amplifica esto y construye un proceso en torno a ello; espero que cada lector tenga la suerte de usarlo. + +Siguiente [¿Cómo Entender al Usuario?](02-How-to-Understand-the-User.md) \ No newline at end of file diff --git a/es/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/es/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md new file mode 100644 index 0000000..00c31ba --- /dev/null +++ b/es/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -0,0 +1,17 @@ +# ¿Cómo Entender al Usuario? +[//]: # (Version:1.0.0) +Es tu deber entender al usuario y ayudar a tu jefe a comprender al usuario. Debido a que el usuario no está tan íntimamente involucrado en la creación de tu producto como tú, se comportan de manera un poco diferente: + +- El usuario generalmente hace afirmaciones cortas. +- El usuario tiene su propio trabajo; principalmente pensarán en pequeñas mejoras en tu producto, no en grandes mejoras. +- El usuario no puede tener una visión que represente a todos los usuarios de tu producto. + +Es tu deber darles lo que realmente quieren, no lo que dicen que quieren. Sin embargo, es mejor proponérselo y lograr que estén de acuerdo en que tu propuesta es lo que realmente quieren antes de comenzar, pero pueden no tener la visión para hacerlo. Tu confianza en tus propias ideas al respecto debería variar. Debes cuidarte tanto de la arrogancia como de la falsa modestia en cuanto a saber lo que el cliente realmente desea. Los programadores están entrenados para diseñar y crear. Los investigadores de mercado están entrenados para averiguar lo que la gente quiere. Estos dos tipos de personas, o dos modos de pensamiento en la misma persona, trabajando armoniosamente juntos, ofrecen la mejor oportunidad de formular la visión correcta. + +Cuanto más tiempo pases con los usuarios, mejor podrás entender qué será realmente exitoso. Deberías intentar probar tus ideas con ellos tanto como puedas. Deberías comer y beber con ellos si puedes. + +Guy Kawasaki [Rules] ha enfatizado la importancia de *observar* lo que hacen tus usuarios además de escucharlos. + +Creo que los contratistas y consultores a menudo tienen problemas tremendos para que sus clientes aclaren en sus mentes lo que realmente quieren. Si tienes la intención de ser consultor, te sugiero que elijas a tus clientes en función de su claridad mental, así como de sus billeteras. + +Siguiente [¿Cómo Obtener un Ascenso?](03-How-to-Get-a-Promotion.md) \ No newline at end of file diff --git a/es/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/es/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md new file mode 100644 index 0000000..3d31814 --- /dev/null +++ b/es/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -0,0 +1,13 @@ +# ¿Cómo Obtener un Ascenso? +[//]: # (Version:1.0.0) +Para ser ascendido a un puesto, actúa como si ya ocuparas ese puesto. + +Para ser promovido a un cargo, descubre qué se espera de ese cargo y hazlo. + +Para obtener un aumento salarial, negocia armado con información. + +Si sientes que ya es hora de recibir un ascenso, habla con tu jefe al respecto. Pregúntale explícitamente qué necesitas hacer para ser ascendido e intenta hacerlo. Esto puede sonar trivial, pero a menudo tu percepción de lo que necesitas hacer diferirá considerablemente de la de tu jefe. Además, esto comprometerá a tu jefe de cierta manera. + +La mayoría de los programadores probablemente tienen una percepción exagerada de sus habilidades relativas en algunos aspectos, ¡después de todo, no todos podemos estar en el top 10%! Sin embargo, he visto a algunas personas que eran seriamente subestimadas. No se puede esperar que la evaluación de todos coincida perfectamente con la realidad en todo momento, pero creo que las personas son generalmente moderadamente justas, con una advertencia: no puedes ser apreciado sin visibilidad en tu trabajo. A veces, debido a circunstancias fortuitas o hábitos personales, alguien puede pasar desapercibido. Trabajar mucho desde casa o estar geográficamente separado de tu equipo y jefe hace que esto sea especialmente difícil. + +Siguiente [Sirviendo a tu Equipo - ¿Cómo Desarrollar el Talento?](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/es/3-Advanced/README.md b/es/3-Advanced/README.md new file mode 100644 index 0000000..dcd81fc --- /dev/null +++ b/es/3-Advanced/README.md @@ -0,0 +1,22 @@ +# 3. Avanzado +[//]: # (Version:1.0.0) +- Juicio Tecnológico + - [¿Cómo Distinguir lo Difícil de lo Imposible?](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [¿Cómo Utilizar Lenguajes Incorporados?](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Elección de Lenguajes](Technical-Judgment/03-Choosing-Languages.md) +- Comprometerse Sabiamente + - [¿Cómo Combatir la Presión del Cronograma?](Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [¿Cómo Entender al Usuario?](Compromising-Wisely/02-How-to-Understand-the-User.md) + - [¿Cómo Obtener un Ascenso?](Compromising-Wisely/03-How-to-Get-a-Promotion.md) +- Sirviendo a tu Equipo + - [¿Cómo Desarrollar el Talento?](Serving-Your-Team/01-How-to-Develop-Talent.md) + - [¿Cómo Elegir en Qué Trabajar?](Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [¿Cómo Obtener lo Mejor de tus Compañeros de Equipo?](Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [¿Cómo Dividir Problemas?](Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [¿Cómo Manejar Tareas Aburridas?](Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [¿Cómo Obtener Apoyo para un Proyecto?](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [¿Cómo Hacer Crecer un Sistema?](Serving-Your-Team/07-How-to-Grow-a-System.md) + - [¿Cómo Comunicarse Bien?](Serving-Your-Team/08-How-to-Communicate-Well.md) + - [¿Cómo Decir Cosas que la Gente no Quiere Escuchar?](Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [¿Cómo Lidiar con Mitos Gerenciales?](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [¿Cómo Lidiar con el Caos Organizacional?](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/es/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/es/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md new file mode 100644 index 0000000..bab85ed --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -0,0 +1,23 @@ +# ¿Cómo Desarrollar el Talento? +[//]: # (Version:1.0.1) +Nietzsche exageró cuando dijo [Stronger]: + +> Lo que no me destruye, me hace más fuerte. + +Tu mayor responsabilidad es con tu equipo. Debes conocer bien a cada uno de ellos. Debes desafiar a tu equipo, pero no sobrecargarlos. Por lo general, debes hablar con ellos sobre la forma en que están siendo desafiados. Si aceptan el desafío, estarán bien motivados. En cada proyecto, o cada dos proyectos, intenta desafiarlos tanto de la manera que sugieren como de la manera que crees que será buena para ellos. No los desafíes dándoles más trabajo, sino dándoles una nueva habilidad o, mejor aún, un nuevo rol en el equipo. + +Debes permitir que las personas (incluyéndote a ti mismo) fallen ocasionalmente y debes planificar cierto margen de error en tu cronograma. Si nunca hay fallos, no puede haber un sentido de aventura. Si no hay fallas ocasionales, no estás esforzándote lo suficiente. Cuando alguien falla, debes ser lo más comprensivo posible con ellos, sin tratarlos como si hubieran tenido éxito. + +Intenta que cada miembro del equipo participe y esté bien motivado. Pregúntales explícitamente a cada uno de ellos qué necesitan para estar bien motivados si no lo están. Es posible que tengas que dejarlos insatisfechos, pero debes conocer los deseos de todos. + +No puedes rendirte con alguien que intencionalmente no está cumpliendo con su parte de la carga debido a baja moral o insatisfacción y simplemente dejar que hagan el mínimo esfuerzo. Debes intentar motivarlos y hacerlos productivos. Mientras tengas paciencia, sigue haciéndolo. Cuando se agote tu paciencia, despídelos. No puedes permitir que alguien que trabaja intencionalmente por debajo de su nivel permanezca en el equipo, ya que no es justo para el equipo. + +Hazles saber a los miembros fuertes de tu equipo que crees que son fuertes diciéndolo en público. Los elogios deben ser públicos y las críticas privadas. + +Los miembros fuertes del equipo naturalmente tendrán tareas más difíciles que los miembros débiles del equipo. Esto es perfectamente natural y a nadie le molestará siempre y cuando todos trabajen arduamente. + +Es un hecho extraño que no se refleja en los salarios que un buen programador es más productivo que 10 malos programadores. Esto crea una situación extraña. A menudo será cierto que podrías avanzar más rápido si tus programadores débiles simplemente se apartaran. De hecho, harías más progresos a corto plazo. Sin embargo, tu tribu perdería algunos beneficios importantes, como la capacitación de los miembros más débiles, la difusión del conocimiento tribal y la capacidad de recuperarse de la pérdida de los miembros fuertes. Los fuertes deben ser comprensivos en este sentido y considerar el problema desde todos los ángulos. + +A menudo puedes asignar tareas desafiantes pero cuidadosamente delimitadas a los miembros más fuertes del equipo. + +Siguiente [¿Cómo Elegir en Qué Trabajar?](02-How-to-Choose-What-to-Work-On.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/es/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md new file mode 100644 index 0000000..3cc75ff --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -0,0 +1,5 @@ +# ¿Cómo Elegir en Qué Trabajar? +[//]: # (Version:1.0.1) +Equilibras tus necesidades personales con las necesidades del equipo al elegir en qué aspecto de un proyecto trabajar. Debes hacer lo que haces mejor, pero intenta encontrar una forma de desafiarte a ti mismo no asumiendo más trabajo, sino desarrollando una nueva habilidad. Las habilidades de liderazgo y comunicación son más importantes que las habilidades técnicas. Si eres muy competente, asume la tarea más difícil o arriesgada y hazlo lo antes posible en el proyecto para disminuir el riesgo. + +Siguiente [¿Cómo Obtener lo Mejor de tus Compañeros de Equipo?](03-How-to-Get-the-Most-From-Your-Teammates.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/es/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md new file mode 100644 index 0000000..2e0593a --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -0,0 +1,15 @@ +# ¿Cómo Obtener lo Mejor de tus Compañeros de Equipo? +[//]: # (Version:1.0.1) +Para obtener lo mejor de tus compañeros de equipo, desarrolla un buen espíritu de equipo y procura mantener a cada individuo tanto personalmente desafiado como comprometido. + +Para desarrollar el espíritu de equipo, cosas cursis como ropa con logotipos y fiestas son buenas, pero no tan buenas como el respeto personal. Si todos se respetan mutuamente, nadie querrá decepcionar a nadie. El espíritu de equipo se crea cuando las personas hacen sacrificios por el equipo y piensan en términos del bien del equipo antes que en su propio bien personal. Como líder, no puedes pedir más de lo que das tú mismo en este aspecto. + +Una de las claves para el liderazgo de equipo es facilitar el consenso para que todos estén comprometidos. Esto ocasionalmente significa permitir que tus compañeros de equipo se equivoquen. Es decir, si no perjudica demasiado al proyecto, debes permitir que algunos de tus compañeros hagan las cosas a su manera, basándose en el consenso, incluso si crees con gran confianza que es lo incorrecto. Cuando esto sucede, no estés de acuerdo, simplemente discrepa abiertamente y acepta el consenso. No suenes herido ni como si te estuvieran obligando, simplemente expresa que estás en desacuerdo pero que crees que el consenso del equipo es más importante. Esto a menudo los hará retroceder. No insistas en que continúen con su plan inicial si retroceden. + +Si hay una persona que no consiente después de haber discutido los problemas desde todos los lados apropiados, simplemente afirma que tienes que tomar una decisión y eso es lo que decides. Si hay una manera de juzgar si tu decisión será incorrecta o si más tarde se demuestra que es incorrecta, cambia tan rápido como puedas y reconoce a las personas que tenían razón. + +Pregunta a tu equipo, tanto como grupo como individualmente, qué piensan que crearía espíritu de equipo y haría que el equipo fuera efectivo. + +Elogia con frecuencia en lugar de hacerlo de manera extravagante. Elogia especialmente a aquellos que no están de acuerdo contigo cuando son dignos de elogio. Elogia en público y critica en privado; con una excepción: a veces, el crecimiento o la corrección de un defecto no se puede elogiar sin llamar la atención de manera embarazosa sobre el defecto original, así que el crecimiento debe elogiarse en privado. + +Siguiente [¿Cómo Dividir Problemas?](04-How-to-Divide-Problems-Up.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/es/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md new file mode 100644 index 0000000..6118c82 --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -0,0 +1,9 @@ +# ¿Cómo Dividir Problemas? +[//]: # (Version:1.0.1) +Es divertido tomar un proyecto de software y dividirlo en tareas que serán realizadas por individuos. Esto debería hacerse temprano. A veces, a los gerentes les gusta pensar que se puede hacer una estimación sin tener en cuenta a las personas que realizarán el trabajo. Esto es imposible, ya que la productividad de las personas varía considerablemente. Quién tiene conocimientos particulares sobre un componente también cambia constantemente y puede tener un efecto de magnitud en el rendimiento. + +Así como un compositor considera el timbre del instrumento que tocará una parte o un entrenador de un equipo deportivo considera las fortalezas de cada jugador, el líder de equipo experimentado generalmente no podrá separar la división del proyecto en tareas de los miembros del equipo a los que se les asignarán. Esta es parte de la razón por la cual un equipo de alto rendimiento no debería ser desmantelado. + +Hay un cierto peligro en esto, dado que las personas pueden aburrirse al construir sobre sus fortalezas y nunca mejorar sus debilidades o aprender nuevas habilidades. Sin embargo, la especialización es una herramienta de productividad muy útil cuando no se usa en exceso. + +Siguiente [¿Cómo Manejar Tareas Aburridas?](05-How-to-Handle-Boring-Tasks.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/es/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md new file mode 100644 index 0000000..27be52f --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -0,0 +1,7 @@ +# ¿Cómo Manejar Tareas Aburridas? +[//]: # (Version:1.0.1) +A veces no es posible evitar tareas aburridas que son críticas para el éxito de la empresa o el proyecto. Estas tareas realmente pueden afectar el ánimo de quienes tienen que realizarlas. La mejor técnica para lidiar con esto es invocar o promover la virtud de la pereza del programador según Larry Wall. Trata de encontrar alguna manera de hacer que la computadora realice la tarea por ti o ayudar a tus compañeros de equipo a hacerlo. Trabajar durante una semana en un programa para realizar una tarea que llevaría una semana hacer manualmente tiene la gran ventaja de ser más educativo y a veces más repetible. + +Si todo lo demás falla, discúlpate con aquellos que tienen que realizar la tarea aburrida, pero bajo ninguna circunstancia permitas que lo hagan solos. Como mínimo, asigna un equipo de dos personas para realizar el trabajo y fomenta un trabajo en equipo saludable para completar la tarea. + +Siguiente [¿Cómo Obtener Apoyo para un Proyecto?](06-How-to-Gather-Support-for-a-Project.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/es/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md new file mode 100644 index 0000000..b62022c --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -0,0 +1,5 @@ +# ¿Cómo Obtener Apoyo para un Proyecto? +[//]: # (Version:1.0.1) +Para obtener apoyo para un proyecto, crea y comunica una visión que demuestre un valor real para toda la organización. Intenta permitir que otros participen en la creación de tu visión. Esto les brinda una razón para apoyarte y te beneficia con sus ideas. Recluta individualmente a partidarios clave para tu proyecto. Siempre que sea posible, muestra en lugar de decir. Si es posible, construye un prototipo o un modelo para demostrar tus ideas. Un prototipo siempre es poderoso, pero en software es mucho más efectivo que cualquier descripción escrita. + +Siguiente [¿Cómo Hacer Crecer un Sistema?](07-How-to-Grow-a-System.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/es/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md new file mode 100644 index 0000000..231771d --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -0,0 +1,21 @@ +# ¿Cómo Hacer Crecer un Sistema? +[//]: # (Version:1.0.1) +La semilla de un árbol contiene la idea del adulto pero no realiza completamente la forma y potencia del adulto. El embrión crece. Se vuelve más grande. Se parece más al adulto y tiene más usos. Eventualmente da fruto. Más tarde, muere y su cuerpo alimenta a otros organismos. + +Tenemos el lujo de tratar el software de esa manera. Un puente no es así; nunca hay un puente bebé, sino simplemente un puente sin terminar. Los puentes son mucho más simples que el software. + +Es bueno pensar en el software como algo que crece, porque nos permite hacer un progreso útil antes de tener una imagen mental perfecta. Podemos obtener retroalimentación de los usuarios y usarla para corregir el crecimiento. Podar las ramas débiles es saludable. + +El programador debe diseñar un sistema terminado que se pueda entregar y usar. Pero el programador avanzado debe hacer más. Debes diseñar un camino de crecimiento que termine en el sistema terminado. Es tu trabajo tomar un germen de una idea y construir un camino que lo lleve de la manera más suave posible a un artefacto útil. + +Para hacer esto, debes visualizar el resultado final y comunicarlo de una manera que el equipo de ingeniería pueda emocionarse. Pero también debes comunicarles un camino que vaya desde donde están ahora hasta donde quieren estar sin grandes saltos. El árbol debe permanecer vivo todo el tiempo; no puede estar muerto en un momento y resucitar más tarde. + +Este enfoque se captura en el desarrollo en espiral. Se utilizan hitos que nunca están demasiado lejos para marcar el progreso a lo largo del camino. En el entorno ultra competitivo de los negocios, es mejor si los hitos se pueden lanzar y ganar dinero lo antes posible, incluso si están lejos de un punto final bien diseñado. Uno de los trabajos del programador es equilibrar la recompensa inmediata contra la recompensa futura eligiendo sabiamente un camino de crecimiento expresado en hitos. + +El programador avanzado tiene la triple responsabilidad de hacer crecer el software, los equipos y las personas. + +> Creo que subestimas la importancia aquí. No se trata solo de sistemas, sino también de algoritmos, interfaces de usuario, modelos de datos, y así sucesivamente. Es absolutamente *vital* tener un progreso medible hacia objetivos intermedios mientras trabajas en un sistema grande. Nada es tan malo como el horror especial de llegar al final y descubrir que todo simplemente no va a funcionar (mira el reciente desastre del Sistema de Noticias para Votantes). Incluso iría más allá y lo declararía como una ley de la naturaleza: ningún sistema grande y complejo puede implementarse desde cero, solo puede evolucionar de un sistema simple a un sistema complejo en una serie de pasos intencionales. + +A lo cual solo se puede responder *Fiat lux* (hágase la luz). + +Siguiente [¿Cómo Comunicarse Bien?](08-How-to-Communicate-Well.md) diff --git a/es/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/es/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md new file mode 100644 index 0000000..32cad7e --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -0,0 +1,11 @@ +# ¿Cómo Comunicarse Bien? +[//]: # (Version:1.0.1) +Para comunicarse bien, debes reconocer lo difícil que es. Es una habilidad por sí misma. Se complica por el hecho de que las personas con las que tienes que comunicarte son imperfectas. No se esfuerzan mucho en comprenderte. Hablan y escriben mal. A menudo están sobrecargados de trabajo o aburridos, y, como mínimo, están algo enfocados en su propio trabajo en lugar de los problemas más amplios que puedas estar abordando. Una de las ventajas de tomar clases y practicar la escritura, la oratoria y la escucha es que, si te vuelves hábil en ello, puedes ver más fácilmente dónde están los problemas y cómo corregirlos. + +El programador es un animal social cuya supervivencia depende de la comunicación con su equipo. El programador avanzado es un animal social cuya satisfacción depende de la comunicación con personas fuera de su equipo. + +El programador aporta orden al caos. Una forma interesante de hacerlo es iniciar una propuesta de algún tipo fuera del equipo. Esto se puede hacer en formato de *propuesta inicial* o *documento técnico* o simplemente verbalmente. Este liderazgo tiene la tremenda ventaja de establecer los términos del debate. También te expone a la crítica y, lo que es peor, al rechazo y al olvido. El programador avanzado debe estar preparado para aceptar esto, porque tiene un poder único y, por lo tanto, una responsabilidad única. Los emprendedores que no son programadores necesitan programadores para proporcionar liderazgo de alguna manera. Los programadores son la parte del puente entre las ideas y la realidad que descansa sobre la realidad. + +No he dominado la comunicación efectiva, pero lo que estoy intentando actualmente es lo que llamo un enfoque de cuatro puntas: después de tener mis ideas en orden y estar completamente preparado, intento hablar verbalmente, entregarles un documento técnico (en papel real, así como electrónicamente), mostrarles una demostración y luego repetir pacientemente este proceso. Creo que muchas veces no somos lo suficientemente pacientes en este tipo de comunicación difícil. No debes desanimarte si tus ideas no son aceptadas de inmediato. Si has invertido energía en su preparación, nadie pensará mal de ti por ello. + +Siguiente [¿Cómo Decir Cosas que la Gente no Quiere Escuchar?](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/es/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md b/es/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md new file mode 100644 index 0000000..2b1564e --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md @@ -0,0 +1,9 @@ +# ¿Cómo Decir Cosas que la Gente no Quiere Escuchar? +[//]: # (Version:1.0.1) +A menudo tendrás que decirles a las personas cosas que las harán sentir incómodas. Recuerda que estás haciendo esto por una razón. Incluso si no se puede hacer nada respecto al problema, se lo estás diciendo lo antes posible para que estén bien informados. + +La mejor manera de informar a alguien sobre un problema es ofrecer una solución al mismo tiempo. La segunda mejor manera es pedirles ayuda con el problema. Si hay peligro de que no te crean, deberías obtener algún respaldo para tu afirmación. + +Una de las cosas más desagradables y comunes que tendrás que decir es: 'El cronograma tendrá que retrasarse'. El programador consiente odia decir esto, pero debe hacerlo lo antes posible. No hay nada peor que posponer la acción cuando se retrasa un hito, incluso si la única acción es informar a todos. Al hacer esto, es mejor hacerlo como equipo, al menos en espíritu, si no físicamente. Querrás la opinión de tu equipo tanto sobre la situación actual como sobre lo que se puede hacer al respecto, y el equipo tendrá que enfrentar las consecuencias contigo. + +Siguiente [¿Cómo Lidiar con Mitos Gerenciales?](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/es/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/es/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md new file mode 100644 index 0000000..a38de21 --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -0,0 +1,13 @@ +# ¿Cómo Lidiar con Mitos Gerenciales? +[//]: # (Version:1.0.1) +La palabra *mito* a veces significa ficción, pero tiene una connotación más profunda. También se refiere a una historia de significado religioso que explica el universo y la relación del ser humano con él. Los gerentes tienden a olvidar lo que aprendieron como programadores y creen en ciertos mitos. Sería tan grosero e infructuoso tratar de convencerlos de que estos mitos son falsos como intentar desilusionar a una persona devotamente religiosa de sus creencias. Por esa razón, debes reconocer estas creencias como mitos: + +- Siempre es mejor tener más documentación. (La quieren, pero no quieren que gastes tiempo en ello). +- Los programadores pueden ser equiparados. (Los programadores varían en un orden de magnitud). +- Se pueden agregar recursos a un proyecto atrasado para acelerarlo. (El costo de la comunicación con las nuevas personas suele ser más agotador que útil). +- Es posible estimar el desarrollo de software de manera confiable. (Ni siquiera es teóricamente posible). +- La productividad de los programadores se puede medir en términos de algún métrico simple, como líneas de código. (Si la concisión es poder, las líneas de código son malas, no buenas). + +Si tienes la oportunidad, puedes intentar explicar estas cosas, pero no te sientas mal si no tienes éxito y no dañes tu reputación enfrentando estos mitos de manera beligerante. Cada uno de estos mitos refuerza la idea del gerente de que tienen algún control real sobre lo que está sucediendo. La verdad es que los gerentes facilitan si son buenos y obstaculizan si son malos. + +Siguiente [¿Cómo Lidiar con el Caos Organizacional?](11-How-to-Deal-with-Organizational-Chaos.md) \ No newline at end of file diff --git a/es/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/es/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md new file mode 100644 index 0000000..3b57ccf --- /dev/null +++ b/es/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -0,0 +1,11 @@ +# ¿Cómo Lidiar con el Caos Organizacional? +[//]: # (Version:1.0.1) +A menudo hay breves períodos de gran caos organizativo, como despidos, compras, salidas a bolsa, despidos, nuevas contrataciones, y así sucesivamente. Esto desconcierta a todos, pero quizás un poco menos al programador cuya autoestima personal se basa en la capacidad en lugar de en el puesto. El caos organizativo es una gran oportunidad para que los programadores ejerzan su poder mágico. He guardado esto para el final porque es un profundo secreto tribal. Si no eres programador, por favor, deja de leer ahora. + +> Los ingenieros tienen el poder de crear y sostener. + +Las personas no ingenieras pueden dar órdenes, pero en una empresa de software típica, no pueden crear ni mantener nada sin ingenieros, al igual que los ingenieros generalmente no pueden vender un producto o administrar un negocio de manera efectiva. Este poder es resistente a casi todos los problemas asociados con el caos organizativo temporal. Cuando lo tienes, deberías ignorar completamente el caos y continuar como si nada estuviera sucediendo. Puede que, por supuesto, te despidan, pero si eso sucede, probablemente puedas conseguir un nuevo trabajo gracias al poder mágico. Más comúnmente, alguna persona estresada que no tiene el poder mágico entrará en tu espacio de trabajo y te pedirá que hagas algo estúpido. Si realmente estás seguro de que es estúpido, es mejor sonreír y asentir hasta que se vayan y luego continuar haciendo lo que sabes que es lo mejor para la empresa. + +Si eres un líder, dile a tu equipo que haga lo mismo y diles que ignoren lo que les diga cualquier otra persona. Este curso de acción es lo mejor para ti personalmente y lo mejor para tu empresa o proyecto. + +Siguiente [Glosario](../../GLOSSARY.md) diff --git a/es/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/es/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md new file mode 100644 index 0000000..d77b9f3 --- /dev/null +++ b/es/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -0,0 +1,9 @@ +# ¿Cómo Distinguir lo Difícil de lo Imposible? +[//]: # (Version:1.0.1) +Es nuestra labor realizar lo difícil y discernir lo imposible. Desde el punto de vista de la mayoría de los programadores en activo, algo es imposible si no puede crecer a partir de un sistema simple o no puede estimarse. Bajo esta definición, lo que se llama investigación es imposible. Un gran volumen de simple trabajo es difícil, pero no necesariamente imposible. + +La distinción no es caprichosa, porque es posible que se te pida hacer lo que es prácticamente imposible, ya sea desde un punto de vista científico o de ingeniería de software. En ese caso, tu labor es ayudar al emprendedor a encontrar una solución razonable, que sea simplemente difícil y que logre la mayor parte de lo que deseaban. Una solución es simplemente difícil cuando puede programarse con confianza y se comprenden los riesgos. + +Es imposible satisfacer un requisito vago, como "Construir un sistema que calcule el peinado y color de cabello más atractivo para cualquier persona". Si el requisito puede definirse con más precisión, a menudo se convierte en simplemente difícil, como "Construir un sistema para calcular un peinado y color de cabello atractivos para una persona, permitirles previsualizarlo y realizar cambios, y lograr que la satisfacción del cliente basada en el estilo original sea tan grande que ganemos mucho dinero". Si no hay una definición clara del éxito, no tendrás éxito. + +Siguiente [¿Cómo Utilizar Lenguajes Incorporados?](02-How-to-Utilize-Embedded-Languages.md) diff --git a/es/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/es/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md new file mode 100644 index 0000000..2a30f8d --- /dev/null +++ b/es/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -0,0 +1,11 @@ +# ¿Cómo Utilizar Lenguajes Incorporados? +[//]: # (Version:1.0.1) +Incrustar un lenguaje de programación en un sistema tiene una fascinación casi erótica para un programador. Es uno de los actos más creativos que se pueden realizar. Hace que el sistema sea tremendamente poderoso. Te permite ejercer tus habilidades más creativas y prometeicas. Convierte al sistema en tu amigo. + +Los mejores editores de texto del mundo tienen todos lenguajes incrustados. Esto se puede utilizar en la medida en que la audiencia prevista pueda dominar el lenguaje. Por supuesto, el uso del lenguaje puede ser opcional, como ocurre en los editores de texto, para que los iniciados lo utilicen y los demás no tengan que hacerlo. + +Yo y muchos otros programadores hemos caído en la trampa de crear lenguajes incrustados con propósitos especiales. Caí en ella dos veces. Ya existen muchos lenguajes diseñados específicamente para ser lenguajes incrustados. Deberías pensarlo dos veces antes de crear uno nuevo. + +La verdadera pregunta que uno debe hacerse antes de incrustar un lenguaje es: ¿Esto funciona con o en contra de la cultura de mi audiencia? Si tu audiencia prevista es exclusivamente no programadores, ¿cómo les ayudará? Si tu audiencia prevista es exclusivamente programadores, ¿preferirían una interfaz de programación de aplicaciones (API)? ¿Y qué lenguaje será? Los programadores no quieren aprender un nuevo lenguaje que se use de manera estrecha; pero si se integra con su cultura, no tendrán que pasar mucho tiempo aprendiéndolo. Es un placer crear un nuevo lenguaje. Pero no deberíamos dejar que eso nos ciegue a las necesidades del usuario. A menos que tengas algunas necesidades e ideas verdaderamente originales, ¿por qué no usar un lenguaje existente para aprovechar la familiaridad que los usuarios ya tienen con él? + +Siguiente [Elección de Lenguajes](03-Choosing-Languages.md) diff --git a/es/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/es/3-Advanced/Technical-Judgment/03-Choosing-Languages.md new file mode 100644 index 0000000..cc8715e --- /dev/null +++ b/es/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -0,0 +1,15 @@ +# Elección de Lenguajes +[//]: # (Version:1.0.1) +El programador solitario que ama su trabajo (un hacker) puede elegir el mejor lenguaje para la tarea. La mayoría de los programadores que trabajan tienen muy poco control sobre el lenguaje que usarán. Generalmente, este tema lo dictan jefes de cabello puntiagudo que toman decisiones políticas en lugar de decisiones tecnológicas y carecen del valor para promover una herramienta no convencional incluso cuando saben, a menudo con conocimiento de primera mano, que la herramienta menos aceptada es la mejor. En otros casos, el beneficio muy real de la unidad entre el equipo, y en cierta medida con una comunidad más amplia, excluye la elección por parte del individuo. A menudo, los gerentes se ven impulsados por la necesidad de poder contratar programadores con experiencia en un determinado lenguaje. Sin duda, están sirviendo lo que perciben como los mejores intereses del proyecto o la empresa, y deben ser respetados por eso. Sin embargo, personalmente creo que esta es la práctica común más derrochadora y errónea que es probable que encuentres. + +Pero, por supuesto, las cosas nunca son unidimensionales. Incluso si se impone un lenguaje central y está fuera de tu control, a menudo ocurre que las herramientas y otros programas se pueden y deben escribir en un lenguaje diferente. Si se va a incrustar un lenguaje (¡y siempre debes considerarlo!), la elección del lenguaje dependerá en gran medida de la cultura de los usuarios. Uno debería aprovechar esto para servir a su empresa o proyecto utilizando el mejor lenguaje para el trabajo, y al hacerlo, hacer que el trabajo sea más interesante. + +Los lenguajes de programación realmente deberían llamarse notaciones, ya que aprender uno no es tan difícil como aprender un lenguaje natural. Para principiantes y algunos externos, 'aprender un nuevo lenguaje' parece una tarea desalentadora; pero después de tener tres bajo el cinturón, realmente es solo cuestión de familiarizarse con las bibliotecas disponibles. Uno tiende a pensar en un sistema grande que tiene componentes en tres o cuatro lenguajes como una mezcla desordenada; pero sostengo que dicho sistema es en muchos casos más fuerte que un sistema de un solo lenguaje en varios aspectos: + +- Necesariamente hay un acoplamiento débil entre los componentes escritos en diferentes notaciones (aunque quizás no interfaces limpias). +- Puedes evolucionar a un nuevo lenguaje/plataforma fácilmente reescribiendo cada componente individualmente. +- Un lenguaje puede no ser adecuado para el sistema en general; tener varios lenguajes para tus módulos te permite elegir la herramienta adecuada para el trabajo. + +Algunos de estos efectos pueden ser solo psicológicos, pero la psicología importa. Al final, los costos de la tiranía del lenguaje superan cualquier ventaja que pueda proporcionar. + +Siguiente [Comprometerse Sabiamente - ¿Cómo Combatir la Presión del Cronograma?](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/es/5-Bibliography.md b/es/5-Bibliography.md new file mode 100644 index 0000000..7a89400 --- /dev/null +++ b/es/5-Bibliography.md @@ -0,0 +1,32 @@ +# Apéndice A - Bibliografía/Sitografía + +[//]: # (Version:1.0.0) +## Libros + +[Rules00] Guy Kawasaki, Michelle Moreno y Gary Kawasaki. 2000. HarperBusiness. "Reglas para los Revolucionarios: El Manifiesto Capitalista para Crear y Comercializar Nuevos Productos y Servicios." + +[RDev96] Steve McConnell. 1996. Microsoft Press. Redmond, Washington. "Desarrollo Rápido: Domando Programas de Software Descontrolados." + +[CodeC93] Steve McConnell. 1993. Microsoft Press. Redmond, Washington. "Código Completo." + +[XP99] Kent Beck. 1999. 0201616416. Addison-Wesley. "Programación Extrema Explicada: Aceptar el Cambio." + +[PlanXP00] Kent Beck y Martin Fowler. 2000. 0201710919. Addison-Wesley. "Planificación de la Programación Extrema." + +[Prag99] Andrew Hunt, David Thomas y Ward Cunningham. 1999. 020161622X. Addison-Wesley. "El Programador Pragmático: Del Aprendiz al Maestro." + +[Stronger] Friedrich Nietzsche. 1889. "Crepúsculo de los ídolos", "Máximas y Flechas", sección 8.. + +## Sitios web + +[PGSite] Paul Graham. 2002. Artículos en su sitio web: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). Todos ellos, pero especialmente "Venciendo a los Promedios". + +[Hacker] Eric S. Raymond. 2003. Cómo Convertirse en un Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). + +[HackDict] Eric S. Raymond. 2003. El Nuevo Diccionario del Hacker. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). + +[ExpCS] Edsger W. Dijkstra. 1986. ¿Qué tan experimental es la Ciencia de la Computación? [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). + +[Knife] Edsger W. Dijkstra. 1984. Sobre una brecha cultural. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). + +Siguiente [Historia](6-History.md) \ No newline at end of file diff --git a/es/6-History.md b/es/6-History.md new file mode 100644 index 0000000..8278c5b --- /dev/null +++ b/es/6-History.md @@ -0,0 +1,43 @@ +# Apéndice B - Historia +[//]: # (Version:1.0.0) +## Mudarse a Github + +Esta redacción se ha creado como un repositorio en Github para que pueda compartirse, actualizarse y mejorarse fácilmente. Se copió de [http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie). Se trasladó a Github en enero de 2016. + +## Solicitud de comentarios o ampliación + +Por favor, envíame cualquier comentario que tengas sobre este ensayo. Considero todas las sugerencias, muchas de las cuales ya han mejorado este ensayo. + +He colocado este ensayo bajo la Licencia de Documentación Libre de GNU. Esta licencia no está específicamente diseñada para ensayos. Los ensayos suelen tener la intención de ser argumentos coherentes y convincentes escritos desde un solo punto de vista con una sola voz. Espero que este ensayo sea una lectura corta y agradable. + +También espero que sea instructivo. Aunque no es un libro de texto, está dividido en muchas secciones pequeñas a las que se pueden agregar libremente nuevas secciones. Si así lo desea, se le anima a expandir este ensayo según lo considere necesario, sujeto a las disposiciones de la Licencia. + +Puede ser arrogancia imaginar que este documento merece ser ampliado, pero la esperanza es eterna. Estaría feliz si se ampliara de las siguientes maneras: + +La adición de una lista de lecturas completa para cada sección. +La adición de más y mejores secciones. +Traducción a otros idiomas, incluso si es solo por sección. +Críticas o comentarios incrustados en el texto. +La capacidad de construir en diferentes formatos, como formatos de palma y HTML mejorado. + +Si me informa sobre su trabajo, lo consideraré y puedo incluirlo en versiones posteriores que produzca, sujeto a las disposiciones de la Licencia. Por supuesto, puede producir sus propias versiones de este documento sin mi conocimiento, como se explica en la Licencia. + +Gracias. + +Robert L. Read + +## Versión original + +La versión original de este documento fue iniciada por Robert L. Read en el año 2000 y publicada por primera vez electrónicamente en Samizdat Press.(http://Samizdat.mines.edu) en 2002. Está dedicado a los programadores de Hire.com. + +Después de que este artículo fue mencionado en Slashdot en 2003, alrededor de 75 personas me enviaron correos electrónicos con sugerencias y correcciones. Agradezco a todos ellos. Hubo mucha duplicación, pero las siguientes personas hicieron sugerencias importantes o fueron las primeras en encontrar un error que corregí: Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) en Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke y Tom Corcoran. + +Finalmente, me gustaría agradecer a Christina Vallery, cuya edición y corrección de pruebas mejoraron significativamente el segundo borrador, y a Wayne Allen, quien me animó a iniciar esto. + +## Biografía del Autor Original + +Robert L. Read vive en Austin, Texas, con su esposa y sus dos hijos. Actualmente es Ingeniero Principal en Hire.com, donde ha trabajado durante cuatro años. Antes de eso, fundó 4R Technology, que creó una herramienta de control de calidad basada en el análisis de imágenes por escáner para la industria papelera. + +Rob obtuvo un doctorado de la Universidad de Texas en Austin en 1995 en Ciencias de la Computación relacionada con la teoría de bases de datos. En 1987 recibió una licenciatura en Ciencias de la Computación de la Universidad Rice. Ha sido programador remunerado desde la edad de 16 años. + +Siguiente [Licencia](LICENSE.md) diff --git a/es/7-Contributions.md b/es/7-Contributions.md new file mode 100644 index 0000000..cfd31da --- /dev/null +++ b/es/7-Contributions.md @@ -0,0 +1,33 @@ +# Contribuciones +[//]: # (Version:1.0.0) +Este repositorio tiene como objetivo ser un proyecto impulsado por la comunidad, y tu participación en última instancia ayudará a mejorar la calidad de esta guía. + +## ¿Qué puedo hacer para contribuir? + +Hay varias formas de contribuir a "Cómo ser un programador". + +- Ideas para nuevas secciones +- Mejoras en secciones existentes +- Identificación de errores tipográficos u otros problemas en las secciones +- Contribuir con enlaces adicionales a recursos para las secciones +- Sugerencias generales para mejorar el proyecto +- Proporcionar traducciones de la guía + +## Traducciones + +Actualmente, esta guía ha sido traducida del inglés a los siguientes idiomas: + +- Chino por [ahangchen](https://github.com/ahangchen) +- Español por [Maximiliano Murua](https://gitlab.com/maximiliano.murua) + +**Si proporcionas la traducción inicial de la guía a otro idioma, eres elegible para convertirte en colaborador de este proyecto para ayudar a mantener y revisar los cambios realizados en la traducción.** + +## Colaboradores + +GitHub tiene una lista de todos los [colaboradores](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) a este proyecto. + +## Editorial y traslado a GitHub + +[Braydie Grove](https://www.github.com/braydie) ha aceptado servir como editor en jefe. + +Braydie trasladó el ensayo original a MarkDown y creó el repositorio. \ No newline at end of file diff --git a/es/GLOSSARY.md b/es/GLOSSARY.md new file mode 100644 index 0000000..15d5cae --- /dev/null +++ b/es/GLOSSARY.md @@ -0,0 +1,131 @@ +# Glossary +[//]: # (Version:1.0.0) +Este es un glosario de términos tal como se usan en este ensayo. Estos términos no tienen necesariamente un significado estandarizado para otras personas. Eric S. Raymond ha compilado un glosario[HackerDict] masivo e informativo que sorprendentemente puede leerse con placer de principio a fin una vez que se puede apreciar una fracción de él. + +### unk-unk + +Jerga que significa desconocido-desconocido. Problemas que actualmente ni siquiera pueden ser conceptualizados y que robarán tiempo al proyecto y arruinarán el cronograma. + +### printlining + +La inserción temporal de declaraciones en un programa que imprime información sobre la ejecución del programa con el fin de depurarlo. + +### logging + +La práctica de escribir un programa de manera que pueda producir un registro de salida configurable que describa su ejecución. + +### divide and conquer + +Una técnica de diseño top-down y, lo que es más importante, de depuración, que consiste en la subdivisión de un problema o misterio en problemas o misterios progresivamente más pequeños. + +### vapour + +Promesas ilusorias y a menudo engañosas de software que aún no está a la venta y, con la misma frecuencia, nunca se materializará en algo sólido. + +### boss + +La persona que asigna tus tareas. En algunos casos, el usuario es el jefe. + +### tribe + +Las personas con las que compartes lealtad hacia un objetivo común. + +### low-hanging fruit + +Grandes mejoras que cuestan poco. + +### Entrepreneur + +El iniciador de proyectos. + +### business + +Un grupo de personas organizado para ganar dinero. + +### company + +Un grupo de personas organizado para ganar dinero. + +### scroll blindness + +El efecto de no poder encontrar la información que necesitas porque está enterrada en demasiada información, menos interesante. + +### wall-clock + +El tiempo real medido por un reloj en la pared, en contraposición al tiempo de CPU. + +### bottleneck + +La limitación más importante en el rendimiento de un sistema. Una constricción que limita el rendimiento. + +### master + +Una pieza única de información de la cual se derivan todas las copias en caché y que sirve como la definición oficial de esos datos. + +### heap allocated + +La memoria se puede decir que está asignada en el montículo (heap) cuando el mecanismo para liberarla es complicado. + +### garbage + +Memoria que está siendo ocupada por objetos que tu aplicación ya no necesita. + +### garbage collector + +Sistema de reciclaje de basura. + +### memory leak + +La colección no deseada de referencias a objetos que impide la recolección de basura (¡o un error en el recolector de basura o en el sistema de gestión de memoria!) y que provoca que el programa aumente gradualmente sus demandas de memoria con el tiempo. + +### Extreme Programming + +Un estilo de programación que hace hincapié en la comunicación con el cliente y en las pruebas automatizadas. + +### hitting the wall + +Quedarse sin un recurso específico, causando una degradación abrupta del rendimiento en lugar de gradual. + +### speculative programming + +Producir una característica antes de saber realmente si esa característica será útil. + +### information hiding + +Un principio de diseño que busca mantener las cosas independientes y desacopladas mediante el uso de interfaces que exponen la menor cantidad de información posible. + +### object-oriented programming + +Un estilo de programación que enfatiza la gestión del estado dentro de los objetos. + +### communication languages + +Un lenguaje diseñado principalmente para la estandarización en lugar de la ejecución. + +### boxes and arrows + +Un estilo relajado e informal para hacer diagramas que consiste en cajas y flechas dibujadas entre esas cajas para mostrar las relaciones. Esto contrasta con las metodologías de diagramas formales, como UML. + +### lingua franca + +Un lenguaje tan popular que se convierte en un estándar de facto para su campo, como lo fue el francés para la diplomacia internacional en algún momento. + +### buy vs. build + +Un adjetivo que describe una elección entre gastar dinero en software o escribirlo tú mismo. + +### mere work + +Trabajo que requiere poca creatividad y conlleva poco riesgo. El simple trabajo se puede estimar fácilmente. + +### programming notation + +Un sinónimo de lenguaje de programación que enfatiza la naturaleza matemática de los lenguajes de programación y su relativa simplicidad en comparación con los lenguajes naturales. + +### strawman + +Un documento destinado a ser el punto de partida de una discusión técnica. Un "strawman" puede llevar a un "stickman", "tinman", "woodman", "ironman", etc. + +### white-paper + +Un documento informativo que a menudo tiene la intención de explicar o vender un producto o idea a una audiencia diferente de los programadores de ese producto o idea. diff --git a/es/LICENSE.md b/es/LICENSE.md new file mode 100644 index 0000000..529d2e4 --- /dev/null +++ b/es/LICENSE.md @@ -0,0 +1,10 @@ + +## Licencia Creative Commons Atribución-CompartirIgual + +"How To Be A Programmer: Community Version" de Robert L. Read con la comunidad está bajo la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional. + +En la actualidad, este trabajo será editado por Braydie Grove y Robert L. Read. + +Haremos intentos razonables para mantener las atribuciones adecuadas de las contribuciones en la sección titulada "Contribuciones". Si realizas una solicitud de extracción (pull request) con una contribución significativa, por favor, agrega una descripción muy breve de tu contribución en esa sección. + +Creative Commons License
Cómo ser un programador: Versión Comunitaria de Robert L. Read con la Comunidad está bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional. diff --git a/es/README.md b/es/README.md new file mode 100644 index 0000000..403a286 --- /dev/null +++ b/es/README.md @@ -0,0 +1,103 @@ +# Cómo ser un Programador: Versión Comunitaria +[//]: # (Version:1.0.0) +Robert L. Read con la Comunidad + +Copyright 2002, 2003, 2016 Robert L. Read + +Bajo licencia [Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional](http://creativecommons.org/licenses/by-sa/4.0/). + +## Introducción +Ser un buen programador es difícil y noble. La parte más difícil de hacer realidad la visión colectiva de un proyecto de software es lidiar con los compañeros de trabajo y los clientes. Escribir programas de computadora es importante y requiere gran inteligencia y habilidad. Pero realmente es un juego de niños en comparación con todo lo demás que un buen programador debe hacer para lograr que un sistema de software sea exitoso tanto para el cliente como para los numerosos colegas de los que es parcialmente responsable. En este ensayo, intento resumir lo más concisamente posible las cosas que desearía que alguien me hubiera explicado cuando tenía veintiún años. + +Esto es muy subjetivo y, por lo tanto, este ensayo está destinado a ser personal y algo subjetivo. Me limito a problemas que un programador es muy probable que tenga que enfrentar en su trabajo. Muchos de estos problemas y sus soluciones son tan generales para la condición humana que probablemente pareceré moralista. Espero que, a pesar de esto, este ensayo sea útil. + +La programación de computadoras se enseña en cursos. Los excelentes libros: "The Pragmatic Programmer" [Prag99], "Code Complete" [CodeC93], "Rapid Development" [RDev96] y "Extreme Programming Explained" [XP99] enseñan programación de computadoras y los problemas más amplios de ser un buen programador. Los ensayos de Paul Graham [PGSite] y Eric Raymond [Hacker] deben ser leídos antes o junto con este artículo. Este ensayo difiere de esas obras excelentes al enfatizar problemas sociales y resumir de manera integral todo el conjunto de habilidades necesarias según mi punto de vista. + +En este ensayo, el término "jefe" se utiliza para referirse a quien te asigna proyectos. Utilizo las palabras negocio, empresa y tribu de manera sinónima, excepto que negocio denota hacer dinero, empresa denota el entorno laboral moderno y tribu es generalmente la gente con la que compartes lealtad. + +Bienvenido a la tribu. + +## Contenidos + +1. [Principiante](1-Beginner) + - Habilidades Personales + - [Aprender a Depurar](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [¿Cómo depurar dividiendo el espacio del problema?](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [¿Cómo eliminar un error?](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [¿Cómo Depurar Utilizando un Registro (Log)?](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [¿Cómo Entender Problemas de Rendimiento?](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [¿Cómo Solucionar Problemas de Rendimiento?](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [¿Cómo Optimizar Bucles?](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [¿Cómo Manejar el Costo de la Entrada/Salida (E/S)?](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [¿Cómo Gestionar la Memoria?](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [¿Cómo Manejar Errores Intermitentes?](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [¿Cómo Aprender Habilidades de Diseño?](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [¿Cómo Realizar Experimentos?](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + - Habilidades de Equipo + - [¿Por qué es importante la estimación?](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [¿Cómo estimar el tiempo de programación?](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [¿Cómo encontrar información?](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [¿Cómo utilizar a las personas como fuentes de información?](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [¿Cómo documentar de manera inteligente?](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [¿Cómo trabajar con un código deficiente?](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [¿Cómo Utilizar el Control de Código Fuente?](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [¿Cómo realizar pruebas unitarias?](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [Tomarse descansos cuando te sientes bloqueado](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [¿Cómo reconocer cuándo es hora de ir a casa?](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [¿Cómo lidiar con personas difíciles?](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +2. [Intermedio](2-Intermediate) + - Habilidades Personales + - [¿Cómo mantenerse motivado?](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [¿Cómo ser ampliamente confiado?](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [¿Cómo hacer equilibrio entre tiempo y espacio?](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [¿Cómo realizar pruebas de resistencia?](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [¿Cómo equilibrar brevedad y abstracción?](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [¿Cómo aprender nuevas habilidades?](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [Aprender a escribir](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [¿Cómo Hacer pruebas de integración?](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [Idiomas de comunicación](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [Herramientas pesadas](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [¿Cómo analizar datos?](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + - Habilidades de Equipo + - [¿Cómo gestionar el tiempo de desarrollo?](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [¿Cómo gestionar los riesgos del software de terceros?](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [¿Cómo gestionar a los consultores?](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [¿Cómo comunicar la cantidad adecuada?](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [¿Cómo disentir honradamente y salir airosos?](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + - Juicio + - [¿Cómo equilibrar la calidad contra el tiempo de desarrollo?](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [¿Cómo gestionar la dependencia del sistema de software?](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [¿Cómo decidir si el software es demasiado inmaduro?](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [¿Cómo tomar una decisión de compra frente a desarrollo interno?](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [¿Cómo crecer profesionalmente?](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [¿Cómo evaluar a los candidatos en una entrevista?](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [¿Cómo saber cuándo aplicar conceptos avanzados de ciencias de la computación?](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [¿Cómo hablar con personas no ingenieras?](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +3. [Avanzado](3-Advanced) + - Juicio Tecnológico + - [¿Cómo distinguir lo difícil de lo imposible?](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [¿Cómo utilizar lenguajes incorporados?](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [Elección de lenguajes](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - Comprometerse Sabiamente + - [¿Cómo combatir la presión del cronograma?](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [¿Cómo eentender al usuario?](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [¿Cómo obtener un ascenso?](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - Sirviendo a tu Equipo + - [¿Cómo desarrollar el talento?](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [¿Cómo elegir en qué trabajar?](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [¿Cómo obtener lo mejor de tus compañeros de equipo?](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [¿Cómo dividir problemas?](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [¿Cómo manejar tareas aburridas?](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [¿Cómo obtener apoyo para un proyecto?](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [¿Cómo hacer crecer un sistema?](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [¿Cómo comunicarse bien?](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [¿Cómo decir cosas que la gente no quiere escuchar?](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [¿Cómo lidiar con mitos gerenciales?](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [¿Cómo lidiar con el caos organizacional?](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +4. [Glosario](GLOSSARY.md) +5. [Apéndice A - Bibliografía/Sitios web](5-Bibliography.md) +6. [Apéndice B - Historia (Hasta enero de 2016)](6-History.md) +6. [Apéndice C - Contribuciones (Hasta enero de 2016)](7-Contributions.md) + + +Creative Commons License
Cómo ser un programador: Versión Comunitaria de Robert L. Read con la Comunidad está bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional. diff --git a/es/SUMMARY.md b/es/SUMMARY.md new file mode 100644 index 0000000..20ff270 --- /dev/null +++ b/es/SUMMARY.md @@ -0,0 +1,80 @@ +# Resumen +[//]: # (Version:1.0.0) +* [Principiante](1-Beginner/README.md) + * Habilidades Personales + * [Aprender a Depurar](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + * [¿Cómo depurar dividiendo el espacio del problema?](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + * [¿Cómo eliminar un error?](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + * [¿Cómo depurar utilizando un registro (Log)?](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + * [¿Cómo entender problemas de rendimiento?](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + * [¿Cómo solucionar problemas de rendimiento?](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + * [¿Cómo optimizar bucles?](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + * [¿Cómo manejar el costo de la entrada/salida (E/S)?](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + * [¿Cómo gestionar la memoria?](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + * [¿Cómo manejar errores intermitentes?](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + * [¿Cómo aprender habilidades de diseño?](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + * [¿Cómo realizar experimentos?](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + * Habilidades de Equipo + * [¿Por qué es importante la estimación?](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + * [¿Cómo estimar el tiempo de programación?](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + * [¿Cómo encontrar información?](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + * [¿Cómo utilizar a las personas como fuentes de información?](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + * [¿Cómo documentar de manera inteligente?](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + * [¿Cómo trabajar con un código deficiente?](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + * [¿Cómo Utilizar el Control de Código Fuente?](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + * [¿Cómo realizar pruebas unitarias?](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + * [Tomarse descansos cuando te sientes bloqueado](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + * [¿Cómo reconocer cuándo es hora de ir a casa?](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + * [¿Cómo lidiar con personas difíciles?](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +* [Intermedio](2-Intermediate/README.md) + * Habilidades Personales + * [¿Cómo mantenerse motivado?](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + * [¿Cómo ser ampliamente confiado?](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + * [¿Cómo hacer equilibrio entre tiempo y espacio?](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + * [¿Cómo realizar pruebas de resistencia?](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + * [¿Cómo equilibrar brevedad y abstracción?](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + * [¿Cómo aprender nuevas habilidades?](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + * [Aprender a escribir](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + * [¿Cómo Hacer pruebas de integración?](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + * [Idiomas de comunicación](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + * [Herramientas pesadas](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + * [¿Cómo analizar datos?](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + * Habilidades de Equipo + * [¿Cómo gestionar el tiempo de desarrollo?](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + * [¿Cómo gestionar los riesgos del software de terceros?](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + * [¿Cómo gestionar a los consultores?](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + * [¿Cómo comunicar la cantidad adecuada?](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + * [¿Cómo disentir honradamente y salir airosos?](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + * Juicio + * [¿Cómo equilibrar la calidad contra el tiempo de desarrollo?](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + * [¿Cómo gestionar la dependencia del sistema de software?](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + * [¿Cómo decidir si el software es demasiado inmaduro?](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + * [¿Cómo tomar una decisión de compra frente a desarrollo interno?](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + * [¿Cómo crecer profesionalmente?](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + * [¿Cómo evaluar a los candidatos en una entrevista?](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + * [¿Cómo saber cuándo aplicar conceptos avanzados de ciencias de la computación?](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + * [¿Cómo hablar con personas no ingenieras?](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +* [Avanzado](3-Advanced/README.md) + * Juicio Tecnológico + * [¿Cómo distinguir lo difícil de lo imposible?](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + * [¿Cómo utilizar lenguajes incorporados?](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + * [Elección de lenguajes](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + * Comprometerse Sabiamente + * [¿Cómo combatir la presión del cronograma?](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + * [¿Cómo eentender al usuario?](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + * [¿Cómo obtener un ascenso?](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + * Sirviendo a tu Equipo + * [¿Cómo desarrollar el talento?](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + * [¿Cómo elegir en qué trabajar?](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + * [¿Cómo obtener lo mejor de tus compañeros de equipo?](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + * [¿Cómo dividir problemas?](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + * [¿Cómo manejar tareas aburridas?](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + * [¿Cómo obtener apoyo para un proyecto?](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + * [¿Cómo hacer crecer un sistema?](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + * [¿Cómo comunicarse bien?](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + * [¿Cómo decir cosas que la gente no quiere escuchar?](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + * [¿Cómo lidiar con mitos gerenciales?](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + * [¿Cómo lidiar con el caos organizacional?](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +* [Apéndice A - Bibliografía/Sitios web](5-Bibliography.md) +* [Apéndice B - Historia (Hasta enero de 2016)](6-History.md) +* [Apéndice C - Contribuciones (Hasta enero de 2016)](7-Contributions.md) diff --git a/jp/7-Contributions.md b/jp/7-Contributions.md index 30dc8af..d727e3e 100644 --- a/jp/7-Contributions.md +++ b/jp/7-Contributions.md @@ -17,6 +17,7 @@ There are a number of ways to contribute to "How to be a Programmer". Currently this guide has been translated from English into the following languages: - Chinese by [ahangchen](https://github.com/ahangchen) +- Spanish by [Maximiliano Murua](https://gitlab.com/maximiliano.murua) **If you provide the initial translation of the guide into another language, you become legible to become a contributor on this project to help maintain and review changes made to the translation.** diff --git a/zh/7-Contributions.md b/zh/7-Contributions.md index 3ea8b14..1068ae8 100644 --- a/zh/7-Contributions.md +++ b/zh/7-Contributions.md @@ -18,6 +18,7 @@ 当å‰ï¼Œè¿™ä»½æŒ‡å¯¼å·²ç»ä»Žè‹±æ–‡ç¿»è¯‘为以下语言: - 中文 by [ahangchen](https://github.com/ahangchen) +- Spanish by [Maximiliano Murua](https://gitlab.com/maximiliano.murua) **如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和 review 对翻译版本的修改。** From 397069535da340d1f05dc4f6f15702ea5352701a Mon Sep 17 00:00:00 2001 From: Larry Lo Date: Sun, 7 Jan 2024 09:47:23 +0800 Subject: [PATCH 136/149] feat: first draft --- .idea/.gitignore | 8 ++ .idea/HowToBeAProgrammer.iml | 9 ++ .idea/misc.xml | 6 + .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 + LANGS.md | 1 + .../Personal-Skills/01-Learn-To-Debug.md | 21 ++++ ...to-Debug-by-Splitting-the-Problem-Space.md | 15 +++ .../03-How-to-Remove-an-Error.md | 9 ++ .../04-How-to-Debug-Using-a-Log.md | 13 ++ ...-How-to-Understand-Performance-Problems.md | 11 ++ .../06-How-to-Fix-Performance-Problems.md | 13 ++ .../07-How-to-Optimize-Loops.md | 15 +++ .../08-How-to-Deal-with-IO-Expense.md | 13 ++ .../09-How-to-Manage-Memory.md | 15 +++ .../10-How-to-Deal-with-Intermittent-Bugs.md | 17 +++ .../11-How-to-Learn-Design-Skills.md | 9 ++ .../12-How-to-Conduct-Experiments.md | 22 ++++ zh-traditional/1-Beginner/README.md | 27 +++++ .../01-Why-Estimation-is-Important.md | 14 +++ .../02-How-to-Estimate-Programming-Time.md | 21 ++++ .../03-How-to-Find-Out-Information.md | 19 +++ ...o-Utilize-People-as-Information-Sources.md | 15 +++ .../Team-Skills/05-How-to-Document-Wisely.md | 20 ++++ .../06-How-to-Work-with-Poor-Code.md | 11 ++ .../07-How-to-Use-Source-Code-Control.md | 9 ++ .../Team-Skills/08-How-to-Unit-Test.md | 9 ++ .../09-Take-Breaks-when-Stumped.md | 5 + .../10-How-to-Recognize-When-to-Go-Home.md | 15 +++ .../11-How-to-Deal-with-Difficult-People.md | 15 +++ ...adeoff-Quality-Against-Development-Time.md | 13 ++ ...ow-to-Manage-Software-System-Dependence.md | 13 ++ ...w-to-Decide-if-Software-is-Too-Immature.md | 18 +++ .../04-How-to-Make-a-Buy-vs-Build-Decision.md | 16 +++ .../Judgment/05-How-to-Grow-Professionally.md | 11 ++ .../06-How-to-Evaluate-Interviewees.md | 15 +++ ...ow-When-to-Apply-Fancy-Computer-Science.md | 15 +++ .../08-How-to-Talk-to-Non-Engineers.md | 19 +++ .../01-How-to-Stay-Motivated.md | 14 +++ .../02-How-to-be-Widely-Trusted.md | 7 ++ .../03-How-to-Tradeoff-Time-vs-Space.md | 15 +++ .../Personal-Skills/04-How-to-Stress-Test.md | 17 +++ ...-How-to-Balance-Brevity-and-Abstraction.md | 9 ++ .../06-How-to-Learn-New-Skills.md | 13 ++ .../Personal-Skills/07-Learn-to-Type.md | 5 + .../08-How-to-Do-Integration-Testing.md | 7 ++ .../09-Communication-Languages.md | 11 ++ .../Personal-Skills/10-Heavy-Tools.md | 14 +++ .../Personal-Skills/11-How-to-analyze-data.md | 17 +++ zh-traditional/2-Intermediate/README.md | 29 +++++ .../01-How-to-Manage-Development-Time.md | 11 ++ ...ow-to-Manage-Third-Party-Software-Risks.md | 11 ++ .../03-How-to-Manage-Consultants.md | 9 ++ .../04-How-to-Communicate-the-Right-Amount.md | 7 ++ ...-Disagree-Honestly-and-Get-Away-with-It.md | 11 ++ .../01-How-to-Fight-Schedule-Pressure.md | 11 ++ .../02-How-to-Understand-the-User.md | 17 +++ .../03-How-to-Get-a-Promotion.md | 13 ++ zh-traditional/3-Advanced/README.md | 22 ++++ .../01-How-to-Develop-Talent.md | 23 ++++ .../02-How-to-Choose-What-to-Work-On.md | 5 + ...How-to-Get-the-Most-From-Your-Teammates.md | 15 +++ .../04-How-to-Divide-Problems-Up.md | 9 ++ .../05-How-to-Handle-Boring-Tasks.md | 7 ++ .../06-How-to-Gather-Support-for-a-Project.md | 5 + .../07-How-to-Grow-a-System.md | 23 ++++ .../08-How-to-Communicate-Well.md | 11 ++ ...ll-People-Things-They-Dont-Want-to-Hear.md | 9 ++ .../10-How-to-Deal-with-Managerial-Myths.md | 12 ++ ...1-How-to-Deal-with-Organizational-Chaos.md | 11 ++ ...ow-to-Tell-the-Hard-From-the-Impossible.md | 9 ++ .../02-How-to-Utilize-Embedded-Languages.md | 11 ++ .../03-Choosing-Languages.md | 15 +++ zh-traditional/4-Glossary.md | 110 +++++++++++++++++ zh-traditional/5-Bibliography.md | 31 +++++ zh-traditional/6-History.md | 47 ++++++++ zh-traditional/7-Contributions.md | 33 ++++++ zh-traditional/LICENSE.md | 12 ++ zh-traditional/README.md | 112 ++++++++++++++++++ zh-traditional/SUMMARY.md | 86 ++++++++++++++ 80 files changed, 1377 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/HowToBeAProgrammer.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 zh-traditional/1-Beginner/Personal-Skills/01-Learn-To-Debug.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md create mode 100644 zh-traditional/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md create mode 100644 zh-traditional/1-Beginner/README.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/08-How-to-Unit-Test.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md create mode 100644 zh-traditional/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md create mode 100644 zh-traditional/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md create mode 100644 zh-traditional/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md create mode 100644 zh-traditional/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md create mode 100644 zh-traditional/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md create mode 100644 zh-traditional/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md create mode 100644 zh-traditional/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md create mode 100644 zh-traditional/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md create mode 100644 zh-traditional/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/07-Learn-to-Type.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/09-Communication-Languages.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/10-Heavy-Tools.md create mode 100644 zh-traditional/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md create mode 100644 zh-traditional/2-Intermediate/README.md create mode 100644 zh-traditional/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md create mode 100644 zh-traditional/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md create mode 100644 zh-traditional/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md create mode 100644 zh-traditional/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md create mode 100644 zh-traditional/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md create mode 100644 zh-traditional/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md create mode 100644 zh-traditional/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md create mode 100644 zh-traditional/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md create mode 100644 zh-traditional/3-Advanced/README.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md create mode 100644 zh-traditional/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md create mode 100644 zh-traditional/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md create mode 100644 zh-traditional/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md create mode 100644 zh-traditional/3-Advanced/Technical-Judgment/03-Choosing-Languages.md create mode 100644 zh-traditional/4-Glossary.md create mode 100644 zh-traditional/5-Bibliography.md create mode 100644 zh-traditional/6-History.md create mode 100644 zh-traditional/7-Contributions.md create mode 100644 zh-traditional/LICENSE.md create mode 100644 zh-traditional/README.md create mode 100644 zh-traditional/SUMMARY.md diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/HowToBeAProgrammer.iml b/.idea/HowToBeAProgrammer.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/HowToBeAProgrammer.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..69ace3f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..6d167b4 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LANGS.md b/LANGS.md index e5f1c5e..8678432 100644 --- a/LANGS.md +++ b/LANGS.md @@ -1,3 +1,4 @@ * [English](en/) * [Chinese](zh/) * [Japanese](jp/) +* [Chinese-Traditional](zh-traditional/) diff --git a/zh-traditional/1-Beginner/Personal-Skills/01-Learn-To-Debug.md b/zh-traditional/1-Beginner/Personal-Skills/01-Learn-To-Debug.md new file mode 100644 index 0000000..7a87592 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/01-Learn-To-Debug.md @@ -0,0 +1,21 @@ +# 學習除錯 + + +[//]: # (Version:1.0.0) +除錯是æˆç‚ºç¨‹å¼è¨­è¨ˆå¸«çš„基石。除錯這個詞第一個å«ç¾©æ˜¯ç§»é™¤éŒ¯èª¤,但真正有æ„義的å«ç¾©æ˜¯é€éŽæª¢æŸ¥ä¾†è§€å¯Ÿç¨‹å¼çš„é‹è¡Œã€‚䏀個䏿œƒé™¤éŒ¯çš„程å¼è¨­è¨ˆå¸«ç­‰åŒæ–¼ç›²äººã€‚ + +ç†æƒ³ä¸»ç¾©è€…èªç‚ºè¨­è¨ˆã€åˆ†æžã€è¤‡é›œçš„ç†è«–或其他æ±è¥¿æ¯”實際除錯更基本,他們䏿˜¯ç¾å¯¦çš„程å¼è¨­è¨ˆå¸«ã€‚ç¾å¯¦çš„程å¼è¨­è¨ˆå¸«ä¸æœƒæ´»åœ¨ç†æƒ³çš„世界裡。å³ä½¿ä½ æ˜¯å®Œç¾Žçš„,你也需è¦èˆ‡ä½ å‘¨åœä¸»è¦çš„è»Ÿé«”å…¬å¸æˆ–組織的程å¼ç¢¼,和你åŒäº‹å¯«çš„程å¼ç¢¼æ‰“交é“。這些程å¼ç¢¼å’Œå®ƒå€‘的文件大多數都是ä¸å®Œç¾Žçš„。如果ä¸èƒ½æ´žå¯Ÿç¨‹å¼ç¢¼çš„具體執行éŽç¨‹,最å°çš„変動都會把你永é åœ°æ‹‹å‡ºåŽ»ã€‚é€šå¸¸é€™ç¨®å¯è¦‹æ€§åªèƒ½å¾žå¯¦é©—ç²å¾—,也就是除錯。 + +除錯是與程å¼é‹è¡Œç›¸é—œçš„事情,而éžèˆ‡ç¨‹å¼æœ¬èº«ç›¸é—œã€‚你從主è¦çš„軟體公å¸è³¼è²·ä¸€äº›ç”¢å“,é€šå¸¸ä¸æœƒçœ‹åˆ°ç”¢å“背後的程å¼ç¢¼ã€‚但程å¼ç¢¼ä¸éµå¾ªæ–‡ä»¶çš„æƒ…æ³æˆ–文件沒有說明的情æ³ä»ç„¶æœƒå‡ºç¾ã€‚更常見的是,你的程å¼å‡ºç¾äº†ä¸€å€‹éŒ¯èª¤,當你檢查你寫的程å¼ç¢¼çš„æ™‚候,å»ä¸çŸ¥é“這個錯誤是怎麼發生的。這æ„味著你åšçš„一些å‡è¨­ä¸¦ä¸å°,æˆ–è€…ä¸€äº›ä½ æ²’æœ‰é æ–™åˆ°çš„æƒ…æ³ç™¼ç”Ÿäº†ã€‚有時候,奇妙的修改程å¼ç¢¼çš„æŠ€å·§å¯èƒ½æœƒç”Ÿæ•ˆã€‚當無效時,你必須除錯。 + +為了ç²å¾—程å¼åŸ·è¡ŒéŽç¨‹çš„å¯è¦‹æ€§,你必須能夠執行程å¼ç¢¼ä¸¦å¾žé€™å€‹éŽç¨‹ä¸­è§€å¯Ÿåˆ°ç™¼ç”Ÿäº†ä»€éº¼ã€‚有時候這是顯而易見的,比如一些正在呈ç¾åœ¨èž¢å¹•上的æ±è¥¿,或者兩個事件之間的延é²ã€‚在許多其他的案例中,除錯與一些ä¸ä¸€å®šå¯è¦‹çš„æ±è¥¿ç›¸é—œ,比如程å¼ç¢¼ä¸­ä¸€äº›è®Šé‡çš„狀態,哪一行程å¼ç¢¼æ­£åœ¨è¢«åŸ·è¡Œ,æˆ–è€…ä¸€äº›æ–·è¨€æ˜¯å¦æŒæœ‰äº†ä¸€å€‹è¤‡é›œçš„è³‡æ–™çµæ§‹ã€‚這些隱è—的細節必須被顯露出來。 + +觀察一個正在執行程å¼çš„å…§éƒ¨çš„æ–¹æ³•é€šå¸¸å¯æŒ‰å¦‚下分類: + +- 使用一個除錯工具; +- Logging [(詳情看)](../../4-Glossary.md) - 利用打å°ç¨‹å¼å¥å­é¡¯ç¤ºè®Šæ•¸å€¼ï¼Œæ‰¾å‡ºæµç¨‹å‡ºéŒ¯åœ°æ–¹ã€‚ + +當除錯工具穩定å¯ç”¨æ™‚,它們是éžå¸¸ç¾Žå¦™çš„,但 Printlining 和寫日志甚至是更加é‡è¦çš„。除錯工具通常è½å¾Œæ–¼ç·¨ç¨‹èªžè¨€çš„發展,所以在æŸäº›æ™‚候它們都å¯èƒ½æ˜¯ç„¡æ•ˆçš„。å¦å¤–,除錯工具å¯èƒ½è¼•微改變程å¼å¯¦éš›åŸ·è¡Œçš„æ–¹å¼ã€‚最åŽ,除錯有許多種,æ¯”å¦‚æª¢æŸ¥ä¸€å€‹æ–·è¨€å’Œä¸€å€‹å·¨å¤§çš„è³‡æ–™çµæ§‹,這需è¦å¯«ç¨‹å¼ç¢¼ä¸¦æ”¹è®Šç¨‹å¼çš„é‹è¡Œã€‚當除錯工具å¯ç”¨æ™‚,知é“如何使用除錯工具是一件好事,但學會使用其他兩種方å¼ä¹Ÿæ˜¯è‡³é—œé‡è¦çš„。 + +當除錯需è¦ä¿®æ”¹ç¨‹å¼ç¢¼çš„æ™‚候,一些åˆå­¸è€…會感到害怕。這是å¯ä»¥ç†è§£çš„,é€™æœ‰é»žåƒæŽ¢ç´¢æ€§å¤–ç§‘æ‰‹è¡“ã€‚ä½†ä½ éœ€è¦å­¸æœƒæ‰“破程å¼ç¢¼,讓它跳起來,你需è¦å­¸æœƒåœ¨å®ƒä¸Šé¢åšå¯¦é©—,並需è¦çŸ¥é“你臨時å°å®ƒåšçš„ä»»ä½•äº‹æƒ…éƒ½ä¸æœƒä½¿å®ƒè®Šå¾—更糟。如果你感å—åˆ°äº†é€™ä»½ææ‡¼,找一ä½å°Žå¸« - 正是因為許多人在一開始é¢å°é€™ç¨®ææ‡¼çš„æ™‚候表ç¾çš„太脆弱,我們因此失去了很多本å¯ä»¥è®Šæˆå„ªç§€ç¨‹å¼è¨­è¨ˆå¸«çš„人。 +Next [å¦‚ä½•é€šè¿‡åˆ†ç¦»é—®é¢˜ç©ºé—´æ¥ Debug](02-How-to-Debug-by-Splitting-the-Problem-Space.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md b/zh-traditional/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md new file mode 100644 index 0000000..fd1da41 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md @@ -0,0 +1,15 @@ +# 如何通过分割问题 Debug +[//]: # (Version:1.0.0) +调试是有趣的,因为它一开始是个迷。你认为它应该这样åšï¼Œä½†å®žé™…上它å´é‚£æ ·åšã€‚很多时候并ä¸ä»…是这么简å•---我给出的任何例å­éƒ½ä¼šè¢«è®¾è®¡æ¥ä¸Žä¸€äº›å¶å°”在现实中会å‘生的情况相比较。调试需è¦åˆ›é€ åŠ›ä¸Žæ™ºè°‹ã€‚å¦‚æžœè¯´è°ƒè¯•æœ‰ç®€å•之é“,那就是在这个谜题上使用分治法。 + +å‡å¦‚,你创建了一个程åºï¼Œå®ƒä¼šä¾æ¬¡æ‰§è¡Œå件事情。当你è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œå®ƒå´å´©æºƒäº†ã€‚但你本æ¥çš„ç›®çš„å¹¶ä¸æ˜¯æƒ³è®©å®ƒå´©æºƒï¼Œæ‰€ä»¥çŽ°åœ¨ä¸€ä¸ªè°œé¢˜æ‰”ç»™ä½ äº†ã€‚å½“ä½ æŸ¥çœ‹è¾“å‡ºæ—¶ï¼Œä½ å¯ä»¥çœ‹åˆ°åºåˆ—里å‰ä¸ƒä»¶äº‹æƒ…è¿è¡ŒæˆåŠŸäº†ã€‚æœ€åŽä¸‰ä»¶äº‹æƒ…在输出里å´çœ‹ä¸åˆ°ï¼Œæ‰€ä»¥ä½ çš„谜题å˜å°äº†ï¼šâ€œå®ƒæ˜¯åœ¨æ‰§è¡Œç¬¬8ã€9ã€10件事的时候崩溃的â€ã€‚ + +你是å¦å¯ä»¥è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥è§‚察它是在哪件事情上崩溃呢?当然,你å¯ä»¥ç”¨ä¸€ä¸ªè°ƒè¯•器或者我们å¯ä»¥åœ¨ç¬¬8第9件事åŽé¢åŠ ä¸€äº›[printlining](../../4-Glossary.md)的语å¥ï¼ˆæˆ–è€…ä½ æ­£åœ¨ä½¿ç”¨çš„ä»»ä½•è¯­è¨€é‡Œçš„ç­‰ä»·çš„äº‹æƒ…ï¼‰ï¼Œå½“æˆ‘ä»¬é‡æ–°è¿è¡Œå®ƒçš„æ—¶å€™ï¼Œæˆ‘们的谜题会å˜å¾—æ›´å°ï¼Œæ¯”如“它是在åšç¬¬ä¹ä»¶äº‹çš„æ—¶å€™å´©æºƒçš„â€ã€‚我å‘çŽ°ï¼ŒæŠŠè°œé¢˜æ˜¯æ€Žæ ·çš„ä¸€ç›´æ¸…æ¥šåœ°è®°åœ¨å¿ƒé‡Œèƒ½è®©æˆ‘ä»¬ä¿æŒæ³¨æ„力。当几个人在一个问题的压力下一起工作时,很容易忘记最é‡è¦çš„谜题是什么。 + +调试技术中分治的关键和算法设计里的分治是一样的。你åªè¦ä»Žä¸­é—´å¼€å§‹åˆ’分,就ä¸ç”¨åˆ’分太多次,并且能快速地调试。但问题的中点在哪里?这就是真正需è¦åˆ›é€ åŠ›å’Œç»éªŒçš„地方了。 + +对于一个真正的åˆå­¦è€…æ¥è¯´ï¼Œå¯èƒ½å‘生错误的地方好åƒåœ¨ä»£ç çš„æ¯ä¸€è¡Œé‡Œéƒ½æœ‰ã€‚ä¸€å¼€å§‹ï¼Œä½ çœ‹ä¸åˆ°ä¸€äº›ä½ ç¨åŽå¼€å‘的时候æ‰ä¼šçœ‹åˆ°çš„å…¶å®ƒçº¬åº¦ï¼Œæ¯”å¦‚æ‰§è¡Œè¿‡çš„ä»£ç æ®µï¼Œæ•°æ®ç»“构,内存管ç†ï¼Œä¸Žå¤–部代ç çš„交互,一些有风险的代ç ï¼Œä¸€äº›ç®€å•的代ç ã€‚对于一个有ç»éªŒçš„程åºå‘˜ï¼Œè¿™äº›å…¶ä»–的维度为整个å¯èƒ½å‡ºé”™çš„事情展示了一个ä¸å®Œç¾Žä½†æ˜¯æœ‰ç”¨çš„æ€ç»´æ¨¡åž‹ã€‚æ‹¥æœ‰è¿™æ ·çš„æ€ç»´æ¨¡åž‹èƒ½è®©ä¸€ä¸ªäººæ›´é«˜æ•ˆåœ°æ‰¾åˆ°è°œé¢˜çš„中点。 + +一旦你最终划分出了所有å¯èƒ½å‡ºé”™çš„地方,你必须试ç€åˆ¤æ–­é”™è¯¯èº²åœ¨å“ªä¸ªåœ°æ–¹ã€‚比如:这样一个谜题,哪一行未知的代ç è®©æˆ‘的程åºå´©æºƒäº†ï¼Ÿä½ å¯ä»¥è¿™æ ·é—®è‡ªå·±ï¼Œå‡ºé”™çš„ä»£ç æ˜¯åœ¨æˆ‘åˆšæ‰æ‰§è¡Œçš„程åºä¸­é—´çš„那行代ç çš„å‰é¢è¿˜æ˜¯åŽé¢ï¼Ÿé€šå¸¸ä½ ä¸ä¼šé‚£ä¹ˆå¹¸è¿å°±èƒ½çŸ¥é“错误在哪行代ç ç”šè‡³æ˜¯å“ªä¸ªä»£ç å—。通常谜题更åƒè¿™ä¸ªæ ·å­çš„:“图中的一个指针指å‘了错误的结点还是我的算法里å˜é‡è‡ªå¢žçš„ä»£ç æ²¡æœ‰ç”Ÿæ•ˆï¼Ÿâ€ï¼Œåœ¨è¿™ç§æƒ…况下你需è¦å†™ä¸€ä¸ªå°ç¨‹åºåŽ»ç¡®è®¤å›¾ä¸­çš„æŒ‡é’ˆæ˜¯å¦éƒ½æ˜¯å¯¹çš„,æ¥å†³å®šåˆ†æ²»åŽçš„哪个部分å¯ä»¥è¢«æŽ’除。 + +Next [如何移除错误](03-How-to-Remove-an-Error.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md b/zh-traditional/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md new file mode 100644 index 0000000..34a55c8 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md @@ -0,0 +1,9 @@ +# 如何移除一个错误 +[//]: # (Version:1.0.0) +æˆ‘æ›¾æœ‰æ„æŠŠæ£€æŸ¥ç¨‹åºæ‰§è¡Œå’Œä¿®å¤é”™è¯¯åˆ†å‰²å¼€æ¥ï¼Œä½†æ˜¯å½“然,调试也æ„味ç€ç§»é™¤ bugã€‚ç†æƒ³çŠ¶å†µä¸‹ï¼Œå½“ä½ å®Œç¾Žçš„å‘现了错误以åŠå®ƒçš„ä¿®å¤æ–¹æ³•æ—¶ï¼Œä½ ä¼šå¯¹ä»£ç æœ‰å®Œç¾Žçš„ç†è§£ï¼Œå¹¶ä¸”有一ç§é¡¿æ‚Ÿ(啊哈ï¼)的感觉。但由于你的程åºä¼šç»å¸¸ä½¿ç”¨å…¶ä»–ä¸å…·æœ‰å¯è§†æ€§çš„ã€æ²¡æœ‰ä¸€è‡´æ€§æ³¨é‡Šçš„系统(比如第三方库),所以完美是ä¸å¯èƒ½çš„。在其他情况下,å¯èƒ½ä»£ç æ˜¯å¦‚æ­¤çš„å¤æ‚以至于你的ç†è§£å¯èƒ½å¹¶ä¸å®Œç¾Žã€‚ + +åœ¨ä¿®å¤ bug 时,你å¯èƒ½æƒ³è¦åšæœ€å°çš„æ”¹å˜æ¥ä¿®å¤å®ƒã€‚ä½ å¯èƒ½çœ‹åˆ°ä¸€äº›å…¶ä»–éœ€è¦æ”¹è¿›çš„东西,但ä¸ä¼šåŒæ—¶åŽ»æ”¹è¿›ä»–ä»¬ã€‚è¯·ä½¿ç”¨ç§‘å­¦çš„æ–¹æ³•åŽ»æ”¹è¿›ä¸€ä¸ªä¸œè¥¿ï¼Œå¹¶ä¸”ä¸€æ¬¡åªæ”¹å˜ä¸€ä¸ªä¸œè¥¿ã€‚ä¿®å¤ bug æœ€å¥½çš„æ–¹å¼æ˜¯èƒ½å¤Ÿé‡çް bugï¼Œç„¶åŽæŠŠä½ çš„ä¿®å¤æ›¿æ¢è¿›åŽ»ï¼Œé‡æ–°è¿è¡Œä½ çš„程åºï¼Œè§‚察,直到 bug ä¸å†å‡ºçŽ°ã€‚å½“ç„¶ï¼Œæœ‰æ—¶å€™ä¸æ­¢ä¸€è¡Œä»£ç éœ€è¦ä¿®æ”¹ï¼Œä½†ä½ åœ¨é€»è¾‘上ä»ç„¶éœ€è¦ä½¿ç”¨ä¸€ä¸ªç‹¬ç«‹åŽŸå­(译者注:以å‰äººä»¬è®¤ä¸ºåŽŸå­ä¸å¯å†åˆ†ï¼Œæ‰€ä»¥ç”¨ç”¨åŽŸå­æ¥ä»£è¡¨ä¸å¯å†åˆ†çš„东西)çš„æ”¹å˜æ¥ä¿®å¤è¿™ä¸ª bug。 + +有时候,å¯èƒ½å®žé™…上有几个 bug,但表现出æ¥å¥½åƒæ˜¯ä¸€ä¸ªã€‚è¿™å–决于你怎么定义 bug,你需è¦ä¸€ä¸ªä¸€ä¸ªåœ°ä¿®å¤å®ƒä»¬ã€‚有时候,程åºåº”该åšä»€ä¹ˆæˆ–者原始作者想è¦åšä»€ä¹ˆæ˜¯ä¸æ¸…æ™°çš„ã€‚åœ¨è¿™ç§æƒ…况下,你必须多加练习,增加ç»éªŒï¼Œè¯„判并为代ç èµ‹äºˆä½ è‡ªå·±çš„认知。决定它应该åšä»€ä¹ˆ,并注释或用其他方å¼é˜è¿°æ¸…楚,然åŽä¿®æ”¹ä»£ç ä»¥éµå¾ªä½ èµ‹äºˆçš„å«ä¹‰ã€‚这是一个进阶或高级的技能,有时甚至比一开始用原始的方å¼åˆ›å»ºè¿™äº›ä»£ç è¿˜éš¾ï¼Œä½†çœŸå®žçš„世界ç»å¸¸æ˜¯æ··ä¹±çš„。你必须修å¤ä¸€ä¸ªä½ ä¸èƒ½é‡å†™çš„系统。 + +Next [如何使用日志调试](04-How-to-Debug-Using-a-Log.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md b/zh-traditional/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md new file mode 100644 index 0000000..ac1dddc --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md @@ -0,0 +1,13 @@ +# 如何使用日志调试 +[//]: # (Version:1.0.0) +*Logging*(日志)是一ç§ç¼–写系统的方å¼ï¼Œå¯ä»¥äº§ç”Ÿä¸€ç³»åˆ—ä¿¡æ¯è®°å½•,被称为 log。*Printlining* åªæ˜¯è¾“出简å•的,通常是临时的日志。åˆå­¦è€…一定è¦ç†è§£å¹¶ä¸”使用日志,因为他们对编程的ç†è§£æ˜¯å±€é™çš„ã€‚å› ä¸ºç³»ç»Ÿçš„å¤æ‚性,系统架构必须ç†è§£ä¸Žä½¿ç”¨æ—¥å¿—ã€‚åœ¨ç†æƒ³çš„状æ€ä¸‹ï¼Œç¨‹åºè¿è¡Œæ—¶äº§ç”Ÿçš„æ—¥å¿—ä¿¡æ¯æ•°é‡éœ€è¦æ˜¯å¯é…置的。通常,日志æä¾›äº†ä¸‹é¢ä¸‰ä¸ªåŸºæœ¬çš„优点: + +- 日志å¯ä»¥æä¾›ä¸€äº›éš¾ä»¥é‡çŽ°çš„ bug 的有效信æ¯ï¼Œæ¯”如在产å“环境中å‘生的ã€ä¸èƒ½åœ¨æµ‹è¯•环境é‡çŽ°çš„ bug。 +- 日志å¯ä»¥æä¾›ç»Ÿè®¡å’Œä¸Žæ€§èƒ½ç›¸å…³çš„æ•°æ®ï¼Œæ¯”如语å¥é—´æµé€è¿‡çš„æ—¶é—´ã€‚ +- å¯é…置的情况下,日志å…è®¸æˆ‘ä»¬èŽ·å–æ™®é€šçš„ä¿¡æ¯ï¼Œä½¿å¾—我们å¯ä»¥åœ¨ä¸ä¿®æ”¹æˆ–釿–°éƒ¨ç½²ä»£ç çš„æƒ…况下调试以处ç†å…·ä½“的问题。 + +需è¦è¾“å‡ºçš„æ—¥å¿—æ•°é‡æ€»æ˜¯ä¸€ä¸ªç®€çº¦ä¸Žä¿¡æ¯é‡çš„æƒè¡¡ã€‚å¤ªå¤šçš„ä¿¡æ¯ä¼šä½¿å¾—日志å˜å¾—昂贵,并且造æˆ[*滚动目盲*](../../4-Glossary.md),使得å‘现你想è¦çš„ä¿¡æ¯å˜å¾—很困难。但信æ¯å¤ªå°‘çš„è¯ï¼Œæ—¥å¿—å¯èƒ½ä¸åŒ…å«ä½ éœ€è¦çš„ä¿¡æ¯ã€‚出于这个原因,让日志的输出å¯é…置是éžå¸¸æœ‰ç”¨çš„。通常,日志中的æ¯ä¸ªè®°å½•会标记它在æºä»£ç é‡Œçš„ä½ç½®ï¼Œæ‰§è¡Œå®ƒçš„线程(如果å¯ç”¨çš„è¯ï¼‰ï¼Œæ—¶é—´ç²¾åº¦ï¼Œå¹¶ä¸”通常还有一些é¢å¤–的有效信æ¯ï¼Œæ¯”如一些å˜é‡çš„值,剩余内存大å°ï¼Œæ•°æ®å¯¹è±¡çš„æ•°é‡ï¼Œç­‰ç­‰ã€‚è¿™äº›æ—¥å¿—è¯­å¥æ’’éæºç ï¼Œä½†åªå‡ºçŽ°åœ¨ä¸»è¦çš„功能点和一些å¯èƒ½å‡ºçް屿œºçš„代ç é‡Œã€‚æ¯ä¸ªè¯­å¥å¯ä»¥è¢«èµ‹äºˆä¸€ä¸ªç­‰çº§ï¼Œå¹¶ä¸”åªæœ‰åœ¨ç³»ç»Ÿè¢«é…ç½®æˆè¾“出相应等级的记录的时候æ‰è¾“å‡ºè¿™ä¸ªç­‰çº§çš„è®°å½•ã€‚ä½ åº”è¯¥è®¾è®¡å¥½æ—¥å¿—è¯­å¥æ¥æ ‡è®°ä½ é¢„期的问题。预估测é‡ç¨‹åºè¡¨çŽ°çš„å¿…è¦æ€§ã€‚ + +如果你有一个永久的日志,printling 现在å¯ä»¥ç”¨æ—¥å¿—çš„å½¢å¼æ¥å®Œæˆï¼Œå¹¶ä¸”一些调试语å¥å¯èƒ½ä¼šæ°¸ä¹…地加入日志系统。 + +Next [如何ç†è§£æ€§èƒ½é—®é¢˜](05-How-to-Understand-Performance-Problems.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md b/zh-traditional/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md new file mode 100644 index 0000000..8c0bf70 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md @@ -0,0 +1,11 @@ +# 如何ç†è§£æ€§èƒ½é—®é¢˜ +[//]: # (Version:1.0.0) +学习ç†è§£è¿è¡Œçš„程åºçš„æ€§èƒ½é—®é¢˜ä¸Žå­¦ä¹  debug 是一样ä¸å¯é¿å…的。å³ä½¿ä½ å®Œç¾Žã€ç²¾ç¡®åœ°ç†è§£äº†ä½ çš„代ç è¿è¡Œæ—¶æ‰€äº§ç”Ÿçš„开销,你的代ç ä¹Ÿä¼šè°ƒç”¨å…¶ä»–你几乎ä¸èƒ½æŽ§åˆ¶çš„æˆ–者几乎ä¸å¯çœ‹é€çš„软件系统。然而,实际上,通常性能问题和调试有点ä¸ä¸€æ ·ï¼Œè€Œä¸”å¾€å¾€è¦æ›´ç®€å•些。 + +å‡å¦‚你或你的客户认为你的一个系统或å­ç³»ç»Ÿè¿è¡Œå¤ªæ…¢äº†ã€‚在你把它å˜å¿«ä¹‹å‰ï¼Œä½ å¿…须构建一个它为什么慢的æ€ç»´æ¨¡åž‹ã€‚为了åšåˆ°è¿™ä¸ªï¼Œä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªå›¾è¡¨å·¥å…·æˆ–者一个好的日志,去å‘现时间或资æºçœŸæ­£è¢«èŠ±è´¹åœ¨ä»€ä¹ˆåœ°æ–¹ã€‚æœ‰ä¸€å¥å¾ˆæœ‰å的格言:90%的时间会花费在10%的代ç ä¸Šã€‚在性能这个è¯é¢˜ä¸Šï¼Œæˆ‘想补充的是输入输出开销的é‡è¦æ€§ã€‚通常大部分时间是以æŸç§å½¢å¼èŠ±è´¹åœ¨ I/O 上。å‘现昂贵的 I/O 和昂贵的10%ä»£ç æ˜¯æž„建æ€ç»´æ¨¡åž‹çš„一个好的开始。 + +计算机系统的性能有很多个维度,很多资æºä¼šè¢«æ¶ˆè€—。第一ç§èµ„æºæ˜¯â€œæŒ‚é’Ÿæ—¶é—´â€ï¼Œå³æ‰§è¡Œç¨‹åºçš„æ‰€æœ‰æ—¶é—´ã€‚è®°å½•â€œæŒ‚é’Ÿæ—¶é—´â€æ˜¯ä¸€ä»¶ç‰¹åˆ«æœ‰ä»·å€¼çš„事情,因为它å¯ä»¥å‘Šè¯‰æˆ‘们一些图表工具表现ä¸äº†çš„ä¸å¯é¢„çŸ¥çš„æƒ…å†µã€‚ç„¶è€Œï¼Œè¿™å¹¶ä¸æ€»æ˜¯æç»˜äº†æ•´å¹…å›¾æ™¯ã€‚æœ‰æ—¶å€™æœ‰äº›ä¸œè¥¿åªæ˜¯ç¨å¾®å¤šèŠ±è´¹äº†ä¸€ç‚¹ç‚¹æ—¶é—´ï¼Œå¹¶ä¸”ä¸ä¼šå¼•爆什么问题,所以在你真实è¦å¤„ç†çš„计算机环境中,多一些处ç†å™¨æ—¶é—´å¯èƒ½ä¼šæ˜¯æ›´å¥½çš„选择。相似的,内存,网络带宽,数æ®åº“或其他æœåŠ¡å™¨è®¿é—®ï¼Œå¯èƒ½æœ€åŽéƒ½æ¯”处ç†å™¨æ—¶é—´è¦æ›´åŠ æ˜‚è´µã€‚ + +竞争共享的资æºè¢«åŒæ­¥ä½¿ç”¨ï¼Œå¯èƒ½å¯¼è‡´æ­»é”å’Œäº’æ–¥ã€‚æ­»é”æ˜¯ç”±äºŽä¸æ°å½“çš„åŒæ­¥å’Œè¯·æ±‚资æºå¯¼è‡´çº¿ç¨‹æ‰§è¡Œèƒ½åŠ›çš„ä¸§å¤±ã€‚äº’æ–¥æ˜¯å¯¹äºŽèµ„æºè®¿é—®çš„䏿°å½“安排。如果这是å¯ä»¥é¢„料到的,最好在你的项目开始å‰å°±é‡‡å–措施æ¥åœ°è¡¡é‡çº¿ç¨‹äº‰æŠ¢ã€‚å³ä½¿çº¿ç¨‹äº‰æŠ¢ä¸ä¼šå‘生,对于有效维护它们也是很有帮助的。 + +Next [å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜](06-How-to-Fix-Performance-Problems.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md b/zh-traditional/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md new file mode 100644 index 0000000..69e3f37 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md @@ -0,0 +1,13 @@ +# å¦‚ä½•ä¿®å¤æ€§èƒ½é—®é¢˜ +[//]: # (Version:1.0.0) +大部分软件都å¯ä»¥é€šè¿‡ä»˜å‡ºç›¸å¯¹è¾ƒå°çš„努力,让他们比刚å‘布时快上10到100å€ã€‚在市场的压力下,选择一个简å•而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是å¯ç”¨æ€§çš„一部分,而且通常它也需è¦è¢«æ›´ä»”细地考虑。 + +æé«˜ä¸€ä¸ªéžå¸¸å¤æ‚的系统的性能的关键是,充分分æžå®ƒï¼Œæ¥å‘现其“瓶颈â€ï¼Œæˆ–者其资æºè€—费的地方。优化一个åªå ç”¨1%执行时间的函数是没有多大æ„义的。一个简è¦çš„原则是,你在åšä»»ä½•事情之å‰å¿…须仔细æ€è€ƒï¼Œé™¤éžä½ è®¤ä¸ºå®ƒèƒ½å¤Ÿä½¿ç³»ç»Ÿæˆ–者它的一个é‡è¦éƒ¨åˆ†è‡³å°‘快两å€ã€‚é€šå¸¸ä¼šæœ‰ä¸€ç§æ–¹æ³•æ¥è¾¾åˆ°è¿™ä¸ªæ•ˆæžœã€‚考虑你的修改会带æ¥çš„æµ‹è¯•以åŠè´¨é‡ä¿è¯çš„工作需è¦ã€‚æ¯ä¸ªä¿®æ”¹å¸¦æ¥ä¸€ä¸ªæµ‹è¯•负担,所以最好这个修改能带æ¥ä¸€ç‚¹å¤§çš„优化。 + +当你在æŸä¸ªæ–¹é¢åšäº†ä¸€ä¸ªä¸¤å€æå‡åŽï¼Œä½ éœ€è¦è‡³å°‘釿–°è€ƒè™‘并且å¯èƒ½é‡æ–°åˆ†æžï¼ŒåŽ»å‘çŽ°ç³»ç»Ÿä¸­ä¸‹ä¸€ä¸ªæœ€æ˜‚è´µçš„ç“¶é¢ˆï¼Œå¹¶ä¸”æ”»ç ´é‚£ä¸ªç“¶é¢ˆï¼Œå¾—åˆ°ä¸‹ä¸€ä¸ªä¸¤å€æå‡ã€‚ + +é€šå¸¸ï¼Œæ€§èƒ½çš„ç“¶é¢ˆçš„ä¸€ä¸ªä¾‹å­æ˜¯ï¼Œæ•°ç‰›çš„æ•°ç›®ï¼šé€šè¿‡æ•°è„šçš„æ•°é‡ç„¶åŽé™¤ä»¥4,还是数头的数é‡ã€‚举些例å­ï¼Œæˆ‘曾犯过的一些错误:没能在关系数æ®åº“中,为我ç»å¸¸æŸ¥è¯¢çš„那一列æä¾›é€‚当的索引,这å¯èƒ½ä¼šä½¿å¾—它至少慢了20å€ã€‚其他例å­è¿˜åŒ…括在循环里åšä¸å¿…è¦çš„ I/O æ“作,留下ä¸å†éœ€è¦çš„调试语å¥ï¼Œä¸å†éœ€è¦çš„内存分é…,还有,尤其是,ä¸ä¸“业地使用库和其他的没有为性能充分编写过的å­ç³»ç»Ÿã€‚è¿™ç§æå‡æœ‰æ—¶å€™è¢«å«åšâ€œä½Žåž‚的水果â€ï¼Œæ„æ€æ˜¯å®ƒå¯ä»¥è¢«è½»æ˜“地获å–,然åŽäº§ç”Ÿå·¨å¤§çš„好处。 + +你在用完这些“低垂的水果â€ä¹‹åŽï¼Œåº”该åšäº›ä»€ä¹ˆå‘¢ï¼Ÿä½ å¯ä»¥çˆ¬é«˜ä¸€ç‚¹ï¼Œæˆ–者把树锯倒。你å¯ä»¥ç»§ç»­åšå°çš„æ”¹è¿›æˆ–者你å¯ä»¥ä¸¥è‚ƒåœ°é‡æž„整个系统或者一个å­ç³»ç»Ÿã€‚(ä¸åªæ˜¯åœ¨æ–°çš„设计里,在信任你的 boss 这方é¢ï¼Œä½œä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¿™æ˜¯ä¸€ä¸ªéžå¸¸å¥½çš„ä½¿ç”¨ä½ çš„æŠ€èƒ½çš„æœºä¼šï¼‰ç„¶è€Œï¼Œåœ¨ä½ è€ƒè™‘é‡æž„å­ç³»ç»Ÿä¹‹å‰ï¼Œä½ åº”该问你自己,你的建议是å¦ä¼šè®©å®ƒå¥½äº”å€åˆ°åå€ã€‚ + +Next [如何优化循环](07-How-to-Optimize-Loops.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md b/zh-traditional/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md new file mode 100644 index 0000000..4059d6d --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md @@ -0,0 +1,15 @@ +# 如何优化循环 +[//]: # (Version:1.0.0) +有时候你会é‡åˆ°å¾ªçŽ¯ï¼Œæˆ–è€…é€’å½’å‡½æ•°ï¼Œå®ƒä»¬ä¼šèŠ±è´¹å¾ˆé•¿çš„æ‰§è¡Œæ—¶é—´ï¼Œå¯èƒ½æ˜¯ä½ çš„产å“的瓶颈。在你å°è¯•使循环å˜å¾—快一点之å‰ï¼ŒèŠ±å‡ åˆ†é’Ÿè€ƒè™‘æ˜¯å¦æœ‰å¯èƒ½æŠŠå®ƒæ•´ä¸ªç§»é™¤æŽ‰ï¼Œæœ‰æ²¡æœ‰ä¸€ä¸ªä¸åŒçš„算法?你å¯ä»¥åœ¨è®¡ç®—æ—¶åšä¸€äº›å…¶ä»–的事情å—?如果你ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæ–¹æ³•去绕开它,你å¯ä»¥ä¼˜åŒ–这个循环了。这是很简å•的,move stuff out。最åŽï¼Œè¿™ä¸ä»…éœ€è¦æ™ºæ…§è€Œä¸”需è¦ç†è§£æ¯ä¸€ç§è¯­å¥å’Œè¡¨è¾¾å¼çš„开销。这里是一些建议: + +- 删除浮点è¿ç®—æ“作。 +- éžå¿…è¦æ—¶ä¸è¦åˆ†é…新的内存。 +- 把常é‡éƒ½æ”¾åœ¨ä¸€èµ·å£°æ˜Žã€‚ +- 把 I/O 放在缓冲里åšã€‚ +- å°½é‡ä¸ä½¿ç”¨é™¤æ³•。 +- å°½é‡ä¸é€‚用昂贵的类型转æ¢ã€‚ +- 移动指针而éžé‡æ–°è®¡ç®—索引。 + +这些æ“作的具体代价å–决于你的具体系统。在一些系统中,编译器和硬件会为你åšä¸€äº›äº‹æƒ…ã€‚ä½†å¿…é¡»æ¸…æ¥šï¼Œæœ‰æ•ˆçš„ä»£ç æ¯”需è¦åœ¨ç‰¹æ®Šå¹³å°ä¸‹ç†è§£çš„代ç è¦å¥½ã€‚ + +Next [如何处ç†I/O开销](08-How-to-Deal-with-IO-Expense.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md b/zh-traditional/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md new file mode 100644 index 0000000..1c3e712 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md @@ -0,0 +1,13 @@ +# 如何处ç†I/O代价 +[//]: # (Version:1.0.0) +在很多问题上,处ç†å™¨çš„速度比硬件交æµè¦å¿«å¾—多。这ç§ä»£ä»·é€šå¸¸æ˜¯å°çš„ I/O,å¯èƒ½åŒ…括网络消耗,ç£ç›˜ I/O,数æ®åº“查询,文件 I/O,还有其他与处ç†å™¨ä¸å¤ªæŽ¥è¿‘的硬件使用。所以构建一个快速的系统通常是一个æé«˜ I/O,而éžåœ¨ç´§å‡‘çš„å¾ªçŽ¯é‡Œä¼˜åŒ–ä»£ç æˆ–者甚至优化算法的问题。 + +有两ç§åŸºæœ¬çš„æŠ€æœ¯æ¥ä¼˜åŒ– I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数æ®çš„副本,冿¬¡èŽ·å–æ•°æ®æ—¶å°±ä¸éœ€è¦å†æ‰§è¡Œ I/O,以此æ¥é¿å… I/O(通常é¿å…读å–一些抽象的值)。缓存的关键在于è¦è®©å“ªäº›æ•°æ®æ˜¯ä¸»å¹²çš„ï¼Œå“ªäº›æ•°æ®æ˜¯å‰¯æœ¬å˜å¾—显而易è§ã€‚主干的数æ®åªæœ‰ä¸€ä»½ï¼ˆåœ¨ä¸€ä¸ªæ›´æ–°å‘¨æœŸé‡Œï¼‰ã€‚缓存有这样一ç§å±é™©ï¼šå‰¯æœ¬æœ‰æ—¶å€™ä¸èƒ½ç«‹åˆ»å映主干的修改。 + +ä»£è¡¨æ˜¯é€šè¿‡æ›´é«˜æ•ˆåœ°è¡¨ç¤ºæ•°æ®æ¥è®© I/O 更廉价。这通常会é™åˆ¶å…¶ä»–çš„è¦æ±‚,比如å¯è¯»æ€§å’Œå¯ç§»æ¤æ€§ã€‚ + +代表通常å¯ä»¥ç”¨ä»–ä»¬ç¬¬ä¸€å®žçŽ°ä¸­çš„ä¸¤åˆ°ä¸‰ä¸ªå› å­æ¥åšä¼˜åŒ–。实现这点的技术包括使用二进制表示而éžäººç±»å¯è¯†åˆ«çš„æ–¹å¼,传递数æ®çš„åŒæ—¶ä¹Ÿä¼ é€’一个符å·è¡¨ï¼Œè¿™æ ·é•¿çš„符å·å°±ä¸éœ€è¦è¢«ç¼–ç ï¼Œä¸€ä¸ªæžç«¯çš„例孿˜¯å“ˆå¼—曼编ç ã€‚ + +å¦ä¸€ç§æœ‰æ—¶èƒ½å¤Ÿç”¨æ¥ä¼˜åŒ–本地引用的技术是让计算更接近数æ®ã€‚例如,如果你正在从数æ®åº“读å–一些数æ®å¹¶ä¸”åœ¨å®ƒä¸Šé¢æ‰§è¡Œä¸€äº›ç®€å•的计算,比如求和,试ç€è®©æ•°æ®åº“æœåŠ¡å™¨åŽ»åšè¿™ä»¶äº‹ï¼Œè¿™é«˜åº¦ä¾èµ–于你正在工作的系统的类型,但这个方é¢ä½ å¿…须自己探索。 + +Next [如何管ç†å†…å­˜](09-How-to-Manage-Memory.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md b/zh-traditional/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md new file mode 100644 index 0000000..969f265 --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md @@ -0,0 +1,15 @@ +# 如何管ç†å†…å­˜ +[//]: # (Version:1.0.0) +内存是一ç§ä½ ä¸å¯ä»¥è€—尽的ç贵资æºã€‚在一段时期里,你å¯ä»¥æ— è§†å®ƒï¼Œä½†æœ€ç»ˆä½ å¿…须决定如何管ç†å†…存。 + +堆内存是在å•一å­ç¨‹åºèŒƒå›´å¤–ï¼Œéœ€è¦æŒç»­ï¼ˆä¿ç•™ï¼‰çš„空间。一大å—内存,在没有东西指å‘它的时候,是无用的,因此被称为*垃圾*。根æ®ä½ æ‰€ä½¿ç”¨çš„系统的ä¸åŒï¼Œä½ å¯èƒ½éœ€è¦è‡ªå·±æ˜¾å¼é‡Šæ”¾å°†è¦å˜æˆåžƒåœ¾çš„内存。更多时候你å¯èƒ½ä½¿ç”¨ä¸€ä¸ªæœ‰*垃圾回收器*的系统。一个垃圾回收器会自己注æ„到垃圾的存在并且在ä¸éœ€è¦ç¨‹åºå‘˜åšä»»ä½•事情的情况下释放它的内存空间。垃圾回收器是奇妙的:它å‡å°äº†é”™è¯¯ï¼Œç„¶åŽå¢žåŠ äº†ä»£ç çš„ç®€æ´æ€§ã€‚如果å¯ä»¥çš„è¯ï¼Œä½¿ç”¨åžƒåœ¾å›žæ”¶å™¨ã€‚ + +但是å³ä½¿æœ‰äº†åžƒåœ¾å›žæ”¶æœºåˆ¶ï¼Œä½ è¿˜æ˜¯å¯èƒ½æŠŠæ‰€æœ‰çš„内存填满垃圾。一个典型的错误是把哈希表作为一个缓存,但是忘了删除对哈希表的引用。因为引用ä»ç„¶å­˜åœ¨ï¼Œè¢«å¼•用者是ä¸å¯å›žæ”¶ä½†å´æ— ç”¨çš„。这就å«åš*内存泄露*。你应该尽早å‘现并且修å¤å†…存泄露。如果你有一个长时间è¿è¡Œçš„系统,内存å¯èƒ½åœ¨æµ‹è¯•中ä¸ä¼šè¢«è€—尽,但å¯èƒ½åœ¨ç”¨æˆ·é‚£é‡Œè¢«è€—尽。 + +创建新对象在任何系统里都是有点昂贵的。然而,在å­ç¨‹åºé‡Œç›´æŽ¥ä¸ºå±€éƒ¨å˜é‡åˆ†é…内存通常很便宜,因为释放它的策略很简å•。你应该é¿å…ä¸å¿…è¦çš„对象创建。 + +当你å¯ä»¥å®šä¹‰ä½ ä¸€æ¬¡éœ€è¦çš„æ•°é‡çš„上界的时候,一个é‡è¦çš„æƒ…况出现了:如果这些对象都å ç”¨ç›¸åŒå¤§å°çš„内存,你å¯ä»¥ä½¿ç”¨å•独的一å—å†…å­˜ï¼Œæˆ–ç¼“å­˜ï¼Œæ¥æŒæœ‰æ‰€æœ‰çš„这些对象。你需è¦çš„对象å¯ä»¥åœ¨è¿™ä¸ªç¼“存里以循环的方å¼åˆ†é…å’Œé‡Šæ”¾ï¼Œæ‰€ä»¥å®ƒæœ‰æ—¶å€™è¢«ç§°ä¸ºçŽ¯ç¼“å­˜ã€‚è¿™é€šå¸¸æ¯”å †å†…å­˜åˆ†é…æ›´å¿«ã€‚(译者注:这也被称为对象池。) + +æœ‰æ—¶å€™ä½ éœ€è¦æ˜¾å¼é‡Šæ”¾å·²åˆ†é…的内存,所以它å¯ä»¥è¢«é‡æ–°åˆ†é…而éžä¾èµ–于垃圾回收机制。然åŽä½ å¿…é¡»è°¨æ…Žæœºæ™ºåœ°åˆ†é…æ¯ä¸€å—内存,并且为它设计一ç§åœ¨åˆé€‚çš„æ—¶å€™é‡æ–°åˆ†é…的方å¼ã€‚è¿™ç§é”€æ¯çš„æ–¹å¼å¯èƒ½éšç€ä½ åˆ›å»ºçš„对象的ä¸åŒè€Œä¸åŒã€‚ä½ å¿…é¡»ä¿è¯æ¯ä¸ªå†…å­˜åˆ†é…æ“作都与一个内存释放æ“作相匹é…。(译者注:在C里é¢ï¼Œno malloc no free,在C++里é¢ï¼Œno new no delete)。这通常是很困难的,所以程åºå‘˜é€šå¸¸ä¼šå®žçް䏀ç§ç®€å•çš„æ–¹å¼æˆ–者垃圾回收机制,比如引用计数,æ¥ä¸ºå®ƒä»¬åšè¿™ä»¶äº‹æƒ…。 + +Next [如何处ç†å¶çŽ°çš„ Bug](10-How-to-Deal-with-Intermittent-Bugs.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md b/zh-traditional/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md new file mode 100644 index 0000000..3fb5f8a --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md @@ -0,0 +1,17 @@ +# 如何处ç†å¶çŽ°çš„ Bugs +[//]: # (Version:1.0.0) +å¶çް bug 是一ç§ç±»ä¼¼äºŽå¤–太空50è¶³éšèº«èŽå­çš„东西。这ç§å™©æ¢¦æ˜¯å¦‚此稀少以至于它很难观察,但其出现频率使得它ä¸èƒ½è¢«å¿½è§†ã€‚ä½ ä¸èƒ½è°ƒè¯•因为你ä¸èƒ½æ‰¾åˆ°å®ƒã€‚ + +尽管在8ä¸ªå°æ—¶åŽä½ ä¼šå¼€å§‹æ€€ç–‘,å¶çŽ°çš„ bug å¿…é¡»åƒå…¶ä»–事情一样éµå¾ªç›¸åŒçš„逻辑规律。但困难的是它åªå‘生在一些未知的情形。å°è¯•ç€åŽ»è®°å½•è¿™ä¸ª bug 出现时的情景,这样你å¯ä»¥åŽ»æŽ¨æµ‹åˆ°åº•æ˜¯ä»€ä¹ˆæ ·çš„å¯å˜æ€§ã€‚情况å¯èƒ½è·Ÿæ•°æ®çš„å€¼ç›¸å…³ï¼Œæ¯”å¦‚â€œè¿™åªæ˜¯åœ¨æˆ‘们把*Wyoming*作为一个值输入时å‘生â€ï¼Œå¦‚æžœè¿™ä¸æ˜¯å¯å˜æ€§çš„æ ¹æºï¼Œä¸‹ä¸€ä¸ªæ€€ç–‘应该是ä¸åˆé€‚çš„åŒæ­¥å¹¶å‘。 + +å°è¯•,å°è¯•,å°è¯•去在一ç§å¯æŽ§çš„æ–¹å¼ä¸‹é‡çŽ°è¿™ä¸ª bug。如果你ä¸èƒ½é‡çŽ°å®ƒï¼Œç”¨æ—¥å¿—ç³»ç»Ÿç»™å®ƒè®¾ç½®ä¸€ä¸ªåœˆå¥—ï¼Œæ¥åœ¨ä½ éœ€è¦çš„æ—¶å€™ï¼Œåœ¨å®ƒçœŸçš„å‘生的时候,记录你猜想的,需è¦çš„ä¸œè¥¿ã€‚é‡æ–°è®¾è®¡è¿™ä¸ªåœˆå¥—,如果这个bugåªå‘生在产å“中,且ä¸åœ¨ä½ çš„猜想中的è¯ï¼Œè¿™å¯èƒ½æ˜¯ä¸€ä¸ªæ¼«é•¿çš„过程。你从日志中得到的(信æ¯ï¼‰å¯èƒ½ä¸èƒ½æä¾›è§£å†³æ–¹æ¡ˆï¼Œä½†å¯èƒ½ç»™ä½ è¶³å¤Ÿçš„ä¿¡æ¯åŽ»ä¼˜åŒ–è¿™ä¸ªæ—¥å¿—ã€‚ä¼˜åŒ–åŽçš„æ—¥å¿—系统å¯èƒ½èŠ±å¾ˆé•¿æ—¶é—´æ‰èƒ½è¢«æ”¾å…¥äº§å“中使用。然åŽï¼Œä½ å¿…须等待 bug 釿–°å‡ºçŽ°ä»¥èŽ·å¾—æ›´å¤šçš„ä¿¡æ¯ã€‚这个循环å¯èƒ½ä¼šç»§ç»­å¥½å‡ æ¬¡ã€‚ + +我曾创建过的最愚蠢的å¶çް bug 是在用一个函数å¼ç¼–程语言里为类工程åšå¤šçº¿ç¨‹å®žçŽ°çš„æ—¶å€™ã€‚æˆ‘éžå¸¸ä»”细地ä¿è¯äº†å‡½æ•°å¼ç¨‹åºçš„å¹¶å‘估计, CPU 的充分使用(在这个例å­é‡Œï¼Œæ˜¯8个 CPU)。我å´ç®€å•åœ°å¿˜è®°äº†åŽ»åŒæ­¥åžƒåœ¾å›žæ”¶å™¨ã€‚系统å¯èƒ½è¿è¡Œäº†å¾ˆé•¿ä¸€æ®µæ—¶é—´ï¼Œç»å¸¸ç»“æŸåœ¨æˆ‘开始任何一个任务的时候,在任何能被注æ„到的事情出错之å‰ã€‚æˆ‘å¾ˆé—æ†¾åœ°æ‰¿è®¤åœ¨æˆ‘ç†è§£æˆ‘的错误之å‰ï¼Œæˆ‘甚至开始怀疑硬件了。 + +在工作中我们最近有这样一个å¶çŽ°çš„ bug 让我们花了几个星期æ‰å‘现。我们有一个多线程的基于 Apacheâ„¢ çš„ Javaâ„¢web æœåС噍,在维护第一个页é¢è·³è½¬çš„æ—¶å€™ï¼Œæˆ‘们在四个独立线程而éžé¡µé¢è·³è½¬çº¿ç¨‹é‡Œï¼Œä¸ºä¸€ä¸ªå°çš„é›†åˆæ‰§è¡Œæ‰€æœ‰çš„ I/O æ“作。æ¯ä¸€æ¬¡è·³è½¬ä¼šäº§ç”Ÿæ˜Žæ˜¾çš„å¡é¡¿ç„¶åŽåœæ­¢åšä»»ä½•æœ‰ç”¨çš„äº‹æƒ…ï¼Œç›´åˆ°å‡ ä¸ªå°æ—¶åŽï¼Œæˆ‘们的日志æ‰è®©æˆ‘们了解到底å‘生了什么。因为我们有四个线程,在一个线程内部å‘ç”Ÿè¿™ç§æƒ…况并䏿˜¯ä»€ä¹ˆå¤§é—®é¢˜ï¼Œé™¤éžæ‰€æœ‰çš„四个线程都阻塞了。然åŽè¢«è¿™äº›çº¿ç¨‹æŽ’空的队列会迅速填充所有å¯ç”¨çš„内存,然åŽå¯¼è‡´æˆ‘们的æœåŠ¡å™¨å´©æºƒã€‚è¿™ä¸ª bug 花了我们一个星期去æªå‡ºè¿™ä¸ªé—®é¢˜ï¼Œä½†æˆ‘们ä»ç„¶ä¸çŸ¥é“什么导致了这个现象,ä¸çŸ¥é“它什么时候会å‘生,甚至ä¸çŸ¥é“它们阻塞的时候,线程们在干什么。 + +这表明了有关使用第三方软件的一些风险。我们在使用一段授æƒçš„代ç ï¼Œä»Žæ–‡æœ¬ä¸­ç§»é™¤HTML标签。å—它的起æºçš„å½±å“,我们把它å«åšæ³•å›½è„±è¡£èˆžè€…ã€‚å°½ç®¡æˆ‘ä»¬æœ‰æºä»£ç ï¼ˆç”±è¡·æ„Ÿè°¢ï¼ï¼‰ï¼Œæˆ‘们没有仔细研究它,直到查看我们æœåŠ¡å™¨çš„æ—¥å¿—çš„æ—¶å€™ï¼Œæˆ‘ä»¬æœ€ç»ˆæ„识到是“法国脱衣舞者â€ä½¿é‚®ä»¶çº¿ç¨‹é˜»å¡žäº†ã€‚ + +这个工具在大多数时候工作得很好,除了处ç†ä¸€äº›é•¿è€Œä¸å¸¸è§çš„æ–‡æœ¬æ—¶ã€‚在那些文本里,代ç å¤æ‚度是 N 的平方或者更糟。这æ„味ç€å¤„ç†æ—¶é—´ä¸Žæ–‡æœ¬çš„é•¿åº¦çš„å¹³æ–¹æˆæ­£æ¯”。正å¼ç”±äºŽè¿™äº›æ–‡æœ¬é€šå¸¸éƒ½ä¼šå‡ºçŽ°ï¼Œæ‰€ä»¥æˆ‘ä»¬æ‰å¯ä»¥é©¬ä¸Šå‘现这个 bug。如果他们从æ¥éƒ½ä¸ä¼šå‡ºçŽ°ï¼Œæˆ‘ä»¬æ°¸è¿œéƒ½ä¸ä¼šå‘现这个问题。当它å‘生时,我们花了几个星期去最终ç†è§£å¹¶ä¸”解决了这个问题。 + +Next [如何学习设计技能](11-How-to-Learn-Design-Skills.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md b/zh-traditional/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md new file mode 100644 index 0000000..8f6498d --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md @@ -0,0 +1,9 @@ +# 如何学习设计技能 +[//]: # (Version:1.0.0) +为了学习如何设计软件,你å¯ä»¥åœ¨å¯¼å¸ˆåšè®¾è®¡çš„æ—¶å€™ï¼Œåœ¨ä»–身边学习他的行为。然åŽå­¦ä¹ ç²¾å¿ƒç¼–写过的软件片段(译者注:比如 android 系统中的谷歌官方应用æºç ï¼‰ã€‚在这之åŽï¼Œä½ å¯ä»¥è¯»ä¸€äº›å…³äºŽæœ€æ–°è®¾è®¡æŠ€æœ¯çš„书。 + +ç„¶åŽä½ å¿…须自己动手了。从一个å°çš„工程开始,当你最åŽå®Œæˆæ—¶ï¼Œè€ƒè™‘为什么这个设计失败了或æˆåŠŸäº†ï¼Œä½ æ˜¯æ€Žæ ·å离你最åˆçš„设想的。然åŽç»§ç»­åŽ»ç€æ‰‹å¤§ä¸€ç‚¹çš„工程,在与其他人åˆä½œæ—¶ä¼šæ›´æœ‰å¸Œæœ›ã€‚设计是一ç§éœ€è¦èŠ±å¾ˆå¤šå¹´åŽ»å­¦ä¹ çš„å…³äºŽè¯„åˆ¤çš„äº‹æƒ…ã€‚ä¸€ä¸ªèªæ˜Žçš„程åºå‘˜å¯ä»¥åœ¨ä¸¤ä¸ªæœˆå†…充分打好这ç§åŸºç¡€ï¼Œç„¶åŽä»Žè¿™é‡Œå¼€å§‹è¿›æ­¥ã€‚ + +å‘展出你自己的风格是自然而有用的,但记ä½ï¼Œè®¾è®¡æ˜¯ä¸€ç§è‰ºæœ¯ï¼Œè€Œä¸æ˜¯ä¸€ç§æŠ€æœ¯ã€‚人们写的关于这个主题的书都有一ç§ä½¿å¾—å®ƒå¥½åƒæ˜¯æŠ€æœ¯çš„æ—¢å®šçš„兴趣。ä¸è¦æ­¦æ–­å¯¹å¾…特定的设计风格。 + +Next [如何进行实验](12-How-to-Conduct-Experiments.md) diff --git a/zh-traditional/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md b/zh-traditional/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md new file mode 100644 index 0000000..c9fedec --- /dev/null +++ b/zh-traditional/1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md @@ -0,0 +1,22 @@ +# 如何进行实验 +[//]: # (Version:1.0.0) +已故的伟大的 Edsger Dijkstra 曾ç»å……åˆ†è§£é‡Šè¿‡ï¼šè®¡ç®—æœºç§‘å­¦ä¸æ˜¯ä¸€é—¨å®žéªŒç§‘å­¦[ExpCS],并且ä¸ä¾èµ–于电å­è®¡ç®—机。当他æå‡ºè¿™ä¸ªè§‚点时,他指的是19世纪60年代。[Knife] + +> ...å±å®³å·²ç»å‡ºçŽ°ï¼šä¸»é¢˜çŽ°åœ¨å·²ç»å˜æˆäº†â€œè®¡ç®—机科学†- è¿™å®žé™…ä¸Šï¼Œåƒæ˜¯æŠŠå¤–科手术引用为“手术刀科学†- 这在人们心中深深æ¤å…¥äº†è¿™æ ·ä¸€ä¸ªæ¦‚念:计算机科学是关于机器和它们的外围设备的。 + +编程ä¸åº”该是一门实验科学,但大多数èŒä¸šç¨‹åºå‘˜å¹¶æ²¡æœ‰ä¿å« Dijkstra 对于计算机科学的解释的è£è€€ã€‚æˆ‘ä»¬å¿…é¡»åœ¨å®žéªŒçš„é¢†åŸŸé‡Œå·¥ä½œï¼Œæ­£å¦‚ä¸€éƒ¨åˆ†ï¼Œä½†éžæ‰€æœ‰çš„物ç†å­¦å®¶åšçš„那样。如果三åå¹´åŽï¼Œç¼–程å¯ä»¥åœ¨ä¸è¿›è¡Œä»»ä½•å®žéªŒçš„å‰æä¸‹è¿›è¡Œï¼Œè¿™å°†æ˜¯è®¡ç®—æœºç§‘å­¦çš„ä¸€ä¸ªå·¨å¤§æˆå°±ã€‚ + +你需è¦è¿›è¡Œçš„实验包括: +- 用å°çš„例孿µ‹è¯•系统以验è¯å®ƒä»¬éµå¾ªæ–‡æ¡£ï¼Œæˆ–者在没有文档时,ç†è§£å®ƒä»¬çš„å应; +- 测试一些å°çš„代ç ä¿®æ”¹åŽ»éªŒè¯å®ƒä»¬æ˜¯å¦ç¡®å®žä¿®å¤äº†ä¸€ä¸ª bugï¼› +- 由于对一个系统ä¸å®Œå…¨çš„ç†è§£ï¼Œéœ€è¦åœ¨ä¸¤ç§ä¸åŒæƒ…况下测é‡å®ƒä»¬çš„æ€§èƒ½è¡¨çŽ°ï¼› +- 检查数æ®çš„完整性; +- 对困难的或者难以é‡çŽ°çš„ bug,收集解决方案中å¯èƒ½æç¤ºçš„统计数æ®ã€‚ + +我ä¸è®¤ä¸ºåœ¨è¿™ç¯‡æ–‡ç« é‡Œæˆ‘å¯ä»¥è®²è¿°å®žéªŒçš„设计,你会在实践中学习到这方é¢çš„知识。然而,我å¯ä»¥æä¾›ä¸¤ç‚¹å»ºè®®ï¼š + +第一,对你的å‡è®¾æˆ–è€…ä½ è¦æµ‹è¯•的断言è¦éžå¸¸æ¸…楚。把å‡è®¾å†™ä¸‹æ¥ä¹Ÿæ˜¯å¾ˆæœ‰ç”¨çš„,尤其是如果你有点迷惑或者与其他人åˆä½œæ—¶ã€‚ + +第二,你会ç»å¸¸å‘现你必须设计一系列的实验,它们中的æ¯ä¸ªéƒ½åŸºäºŽå¯¹æœ€åŽä¸€ä¸ªå®žéªŒçš„ç†è§£ã€‚所以,你应该设计你的实验尽é‡åŽ»æä¾›æœ€å¤šçš„ä¿¡æ¯ã€‚但ä¸å¹¸çš„æ˜¯ï¼Œè¿™ä¼šè®©å®žéªŒä¿æŒç®€å•å˜çš„å›°éš¾ - 你必须通过ç»éªŒæ¥æå‡è¿™ç§æƒè¡¡çš„能力。 + +Next [团队技能 - 为什么评估很é‡è¦](../Team-Skills/01-Why-Estimation-is-Important.md) diff --git a/zh-traditional/1-Beginner/README.md b/zh-traditional/1-Beginner/README.md new file mode 100644 index 0000000..d5dc54c --- /dev/null +++ b/zh-traditional/1-Beginner/README.md @@ -0,0 +1,27 @@ +# 1. 入门 +[//]: # (Version:1.0.0) +- 个人技能 + - [学会 Debug](Personal-Skills/01-Learn-To-Debug.md) + - [如何通过分割问题 Debug](Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [如何移除一个错误](Personal-Skills/03-How-to-Remove-an-Error.md) + - [如何使用日志调试](Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [如何解决性能问题](Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [如何优化循环](Personal-Skills/07-How-to-Optimize-Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [如何管ç†å†…å­˜](Personal-Skills/09-How-to-Manage-Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [如何学习设计技能](Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [如何进行实验](Personal-Skills/12-How-to-Conduct-Experiments.md) +- 团队技能 + - [为什么预估很é‡è¦](Team-Skills/01-Why-Estimation-is-Important.md) + - [如何预估编程时间](Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [如何æœç´¢ä¿¡æ¯](Team-Skills/03-How-to-Find-Out-Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [如何优雅地写文档](Team-Skills/05-How-to-Document-Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [如何进行å•元测试](Team-Skills/08-How-to-Unit-Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](Team-Skills/09-Take-Breaks-when-Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](Team-Skills/11-How-to-Deal-with-Difficult-People.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md b/zh-traditional/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md new file mode 100644 index 0000000..e3cdb96 --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md @@ -0,0 +1,14 @@ +# 为什么评估很é‡è¦ +[//]: # (Version:1.0.0) +为了尽快获得一个å¯ä»¥é«˜æ•ˆä½¿ç”¨çš„工作软件系统,ä¸ä»…需è¦ä¸ºå¼€å‘åšè®¡åˆ’,还需è¦ä¸ºæ–‡æ¡£ï¼Œéƒ¨ç½²ï¼Œå¸‚场åšè®¡åˆ’。在一个商业工程里,这还需è¦é”€å”®å’Œé‡‘èžè®¡åˆ’ã€‚æ²¡æœ‰å¯¹å¼€å‘æ—¶é—´çš„预测能力,是ä¸å¯èƒ½é«˜æ•ˆé¢„测以上这些东西的。 + +好的估计æä¾›äº†é¢„测能力。管ç†è€…喜欢,而且应该这么åšã€‚事实是这ä¸å¯èƒ½ï¼Œä¸è®ºæ˜¯ç†è®ºä¸Šè¿˜æ˜¯å®žè·µä¸Šï¼Œå‡†ç¡®é¢„测开å‘软件所消耗的时间总是被管ç†è€…æ‰€å¿½è§†ã€‚æˆ‘ä»¬æ€»æ˜¯è¢«è¦æ±‚åšé‚£äº›ä¸å¯èƒ½çš„事情,而且我们必须诚实地é¢å¯¹å®ƒã€‚ä¸è®ºå¦‚ä½•ï¼Œä¸æ‰¿è®¤è¿™ä¸ªä»»åŠ¡çš„ä¸å¯èƒ½æ€§ä¹Ÿæ˜¯ä¸è¯šå®žçš„,必è¦çš„æ—¶å€™ï¼Œéœ€è¦è§£é‡Šã€‚对于评估æ¥è¯´ï¼Œä¼šäº§ç”Ÿå¾ˆå¤šæ²Ÿé€šä¸ç•…çš„æƒ…å†µï¼Œå› ä¸ºäººä»¬ä»¤äººåƒæƒŠåœ°å€¾å‘于一厢情愿地认为下é¢è¿™å¥è¯ï¼š +> 我估计,如果我确实ç†è§£äº†è¿™ä¸ªé—®é¢˜ï¼Œæˆ‘们在5周内有50%çš„å¯èƒ½å®Œæˆä»»åŠ¡ï¼ˆå¦‚æžœåœ¨æ­¤æœŸé—´æ²¡æœ‰äººå¹²æ‰°æˆ‘ä»¬çš„è¯ï¼‰ã€‚ + +的真实的å«ä¹‰æ˜¯ï¼š + +> 我ä¿è¯ä»ŽçŽ°åœ¨å¼€å§‹äº”ä¸ªæ˜ŸæœŸå†…å®Œæˆä»»åŠ¡ã€‚ + +这个常è§çš„解读问题需è¦ä½ ä¸Žä½ çš„ boss å’Œå®¢æˆ·æ˜Žç¡®åœ°è®¨è®ºï¼ˆå°±å¥½åƒæŠŠä»–ä»¬å½“åšå‚»å­é‚£æ ·ï¼‰ã€‚釿–°é˜è¿°ä½ çš„解释,ä¸ç®¡å¯¹ä½ æ¥è®²å®ƒä»¬æœ‰å¤šä¹ˆæ˜¾è€Œæ˜“è§ã€‚ + +Next [如何估计编程时间](02-How-to-Estimate-Programming-Time.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md b/zh-traditional/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md new file mode 100644 index 0000000..a2764bf --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md @@ -0,0 +1,21 @@ +# 如何评估编程时间 +[//]: # (Version:1.0.0) +评估需è¦å®žè·µï¼Œä¹Ÿéœ€è¦åŠ³åŠ¨ã€‚å› ä¸ºå®ƒéœ€è¦èŠ±å¦‚æ­¤é•¿çš„æ—¶é—´ï¼Œä»¥è‡³äºŽè¯„ä¼°è¯„ä¼°æœ¬èº«çš„æ—¶é—´å¯èƒ½æ˜¯ä¸€ä¸ªå¥½ä¸»æ„ï¼Œå°¤å…¶æ˜¯ä½ è¢«è¦æ±‚去评估一些巨大的事情。 + +å½“è¢«è¦æ±‚评估一些比较大的事情的时候,该åšçš„æœ€å¯é çš„事情是先åœä¸‹æ¥ã€‚大多数工程师是充满热情并且是渴望愉悦的,而åœä¸‹æ¥å½“然会让他们ä¸å¼€å¿ƒã€‚但对一个进行中的事情åšè¯„估一般是ä¸å‡†ç¡®ä¸”ä¸å¯é çš„。 + +åœä¸‹æ¥ï¼Œä½¿å¾—è€ƒè™‘ä¸€äº›äº‹æƒ…æˆ–è€…ä¸ºä»»åŠ¡é‡æ–°å®šåž‹æˆä¸ºå¯èƒ½ã€‚如果政策压力å…许,这是执行评估的最准确的方å¼ï¼Œå¹¶ä¸”它会产生确实的进度。 + +在没有时间åšè°ƒæŸ¥çš„æ—¶å€™ï¼Œä½ é¦–先应该éžå¸¸æ¸…晰地建立评估的å«ä¹‰ã€‚é¦–å…ˆé‡æ–°é˜è¿°è¦è¯„估的内容和你编写的评估的最åŽéƒ¨åˆ†ã€‚在你准备编写评估的时候应该把这项任务分解为一个个更å°çš„å¾ªåºæ¸è¿›çš„任务,并且使æ¯ä¸ªå°ä»»åŠ¡éœ€è¦çš„æ—¶é—´ä¸è¶…è¿‡ä¸€å¤©ï¼ˆç†æƒ³æƒ…况是æ¯ä¸ªä»»åŠ¡çš„é•¿åº¦æœ€å¤šä¸ºä¸€å¤©ï¼‰ã€‚æœ€é‡è¦çš„事情是ä¸è¦æ¼æŽ‰ä»»ä½•事情。例如,文档,测试,规划的时间,与其他å°ç»„交æµçš„æ—¶é—´ï¼Œè¿˜æœ‰åº¦å‡æ—¶é—´ï¼Œè¿™äº›éƒ½æ˜¯å¾ˆé‡è¦çš„。如果你æ¯å¤©éƒ½è¦èŠ±æ—¶é—´å’Œä¸€äº›å‚»é€¼äº¤æµï¼Œåœ¨è¯„估里为这件事情划一个明确的时间界é™ã€‚这能让你的boss对于你将è¦èŠ±è´¹çš„æœ€å°‘æ—¶é—´æœ‰äº†ä¸€ä¸ªè®¤è¯†ï¼Œå¹¶ä¸”å¯èƒ½ç»™ä½ æ›´å¤šçš„æ—¶é—´ã€‚ + +我认识一些会éšå¼åœ°å¡«å……评估时间的好的程åºå‘˜ï¼Œä½†æˆ‘推èä½ ä¸è¦è¿™æ ·åšã€‚填充的一个结果是你å¯èƒ½ä¼šè€—尽别人对你的信任。例如,一个工程师å¯èƒ½ä¸ºä¸€ä¸ªå°†è¦èŠ±è´¹ä¸€å¤©çš„å·¥ä½œè¯„ä¼°ä¸ºä¸‰å¤©ã€‚è¿™ä¸ªå·¥ç¨‹å¸ˆå¯èƒ½è®¡åˆ’花两天去为代ç å†™æ–‡æ¡£ï¼Œæˆ–者花两天去åšä¸€äº›å…¶ä»–æœ‰ç”¨çš„å·¥ç¨‹ã€‚ä½†å½“ä»»åŠ¡åœ¨ä¸€å¤©å†…å®Œæˆæ—¶ï¼Œå¦‚果它在那天暴露出æ¥çš„è¯ï¼Œè¿™æ˜¯å¯ä»¥å¯Ÿè§‰çš„ï¼Œå¹¶ä¸”æ¾æ‡ˆæˆ–高估的表现会出现。为你确实è¦åšçš„事情åšåˆé€‚的剖æžè¦å¥½å¾—多。如果写文档需è¦èб䏤å€äºŽç¼–程的时间,并且评估的结果就是这样的,让这对管ç†è€…å¯è§å°±èƒ½å¾—到巨大的好处。 + +相å,显å¼å¡«å……。如果一个任务å¯èƒ½èŠ±ä¸€å¤©ï¼Œä½†å¦‚æžœä½ çš„æ–¹æ³•æ²¡æœ‰ç”Ÿæ•ˆï¼Œå¯èƒ½èбå天 - 用æŸç§æ–¹å¼åœ¨ä½ çš„评估里记下这个情况,å¦åˆ™ï¼Œè‡³å°‘为这个å¯èƒ½æ€§ï¼Œè¯„估一个æƒé‡è®¡ç®—å¯èƒ½çš„æ—¶é—´ã€‚任何你å¯ä»¥è¯†åˆ«å’Œè¿›è¡Œè¯„估的风险因素应该在时间表里被体现。一个人ä¸å¤ªå¯èƒ½åœ¨ç»™å®šçš„任何星期都生病。但一个有很多工程师的大项目å¯èƒ½ä¼šæœ‰ä¸€äº›ç–¾ç—…æ—¶é—´ï¼Œè¿˜æœ‰ä¼‘å‡æ—¶é—´ã€‚或者,是å¦ä¼šæœ‰å…¬å¸å†…部的强制培训研讨会的å¯èƒ½æ€§å‘¢ï¼Ÿå¦‚果这å¯ä»¥é¢„估,也把它算进æ¥ã€‚当然,还有一些未知的未知,或者 [unk-unk](../../4-Glossary.md) 。Unk-unk 在定义上是ä¸èƒ½è¢«ç‹¬ç«‹è¯„估的。你å¯ä»¥å°è¯•为所有 unk-unk 创建一个全局的界线,或者用你与你的 boss 交æµå¥½çš„å…¶ä»–æ–¹å¼å޻处ç†å®ƒä»¬ã€‚然而,你ä¸èƒ½è®©ä½ çš„ boss å¿˜è®°å®ƒä»¬çš„å­˜åœ¨ã€‚åœ¨æŠŠè¯„ä¼°å˜æˆæ—¶é—´è¡¨çš„过程中,把它们é—忘是超级容易的。 + +在一个团队环境里,你应该让任务的执行者去åšè¿™ç§è¯„估,而且你们应该在团队范围内对评估的结果达æˆä¸€è‡´ã€‚人与人在技术,ç»éªŒï¼Œå‡†å¤‡å’Œä¿¡å¿ƒä¸Šéƒ½æœ‰å¾ˆå¤šçš„ä¸åŒã€‚当一个牛逼的程åºå‘˜ä¸ºä»–自己评估了时间,然åŽä¸€äº›å¼±ä¸€ç‚¹çš„程åºå‘˜è¢«è¿™ç§è¯„ä¼°çº¦æŸæ—¶ï¼Œç¾éš¾å°±ä¼šé™ä¸´ã€‚整个团队在一个一行一行的细致的评估计划上å–得的一致,é˜è¿°äº†å›¢é˜Ÿçš„ç†è§£ï¼Œä»¥åŠå…许在策略上对资æºçš„釿–°åˆ†é…的机会(比如,把负担从弱一点的团队æˆå‘˜é‚£é‡Œç§»åˆ°å¼ºä¸€ç‚¹çš„æˆå‘˜é‚£é‡Œï¼‰ã€‚ + +如果有ä¸èƒ½è¯„ä¼°çš„å¤§é£Žé™©ï¼Œä½ åº”è¯¥æ— è®ºå¦‚ä½•éƒ½è¦æå‡ºæ¥ï¼Œè¿™æ˜¯ä½ çš„责任,这让æ‰èƒ½è®©ç®¡ç†è€…ä¸ä¼šåœ¨è¿™ä¸ªé—®é¢˜ä¸Šåšæ‰¿è¯ºï¼Œä»¥å…在风险å‘生时让管ç†è€…éš¾å ªã€‚è¿™ç§æƒ…况下,任何需è¦çš„事情都有希望被执行æ¥å‡å°è¿™ä¸ªé£Žé™©ã€‚ + +如果你å¯ä»¥è¯´æœä½ çš„å…¬å¸åŽ»ä½¿ç”¨*æžé™ç¼–程*,ä½ åªéœ€è¦è¯„估相当å°çš„事情,这也是更加有趣和有效率的。 + +Next [如何å‘现信æ¯](03-How-to-Find-Out-Information.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md b/zh-traditional/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md new file mode 100644 index 0000000..b9613fa --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md @@ -0,0 +1,19 @@ +# 如何å‘çŽ°ä¿¡æ¯ +[//]: # (Version:1.0.0) +你所æœå¯»çš„事情的本质决定了你应该如何去寻找它。 + +如果你需è¦å®¢è§‚的而且容易辨认的*关于具体事物*的信æ¯ï¼Œä¾‹å¦‚一个软件的最新补ä¸ç‰ˆæœ¬ï¼Œå¯ä»¥åœ¨Internetæœç´¢ï¼Œç¤¼è²Œçš„询问很多的人,或者å‘起一个讨论组。ä¸è¦åœ¨ç½‘上æœç´¢ä»»ä½•带有观点或主观解释的东西:能够抵达真相的概率太低了。 + +如果你需è¦â€œä¸€äº›ä¸»è§‚的普é知识â€ï¼Œäººä»¬å¯¹è¿™äº›ä¸œè¥¿å·²æœ‰çš„æ€è€ƒåŽ†å²ï¼Œé‚£å°±å޻图书馆å§ã€‚例如,想è¦äº†è§£æ•°å­¦ï¼Œè˜‘è‡æˆ–ç€ç¥žç§˜ä¸»ä¹‰ï¼Œå°±å޻图书馆å§ã€‚ + +如果你需è¦çŸ¥é“*如何åšä¸€äº›ç碎的事情*,找两三本关于这个主题的书,仔细阅读。你å¯ä»¥ä»Žç½‘络上学到如何åšå¥½è¿™äº›ç碎的事情,比如安装一个软件包。你甚至å¯ä»¥å­¦åˆ°ä¸€äº›é‡è¦çš„东西,例如好的编程技术,但相比读一本纸质书的相关部分,你很容易花更多时间在æœç´¢å’Œå¯¹ç»“果排åºï¼Œä»¥åŠè¯„估结果的æƒå¨æ€§ã€‚ + +如果你需è¦*å¯èƒ½æ²¡æœ‰äººçŸ¥é“的信æ¯*,例如,“这个新å“ç‰Œçš„è½¯ä»¶åœ¨æµ·é‡æ•°æ®çš„æƒ…况下能工作å—â€ï¼Œä½ ä»ç„¶å¿…须在网络和图书馆里æœç´¢ã€‚在这些选项都完全竭尽åŽï¼Œä½ å¯èƒ½éœ€è¦è®¾è®¡ä¸€ä¸ªå®žéªŒæ¥æžæ¸…楚这个问题。 + +如果你需è¦ä¸€äº›è€ƒè™‘了æŸäº›ç‰¹æ®ŠçŽ¯å¢ƒçš„è§‚ç‚¹æˆ–ä¼°å€¼ï¼Œå’Œä¸€ä¸ªä¸“å®¶èŠèŠã€‚例如,如果你想è¦çŸ¥é“用 Lisp 构建一个现代数æ®åº“管ç†ç³»ç»Ÿæ˜¯å¦æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,你应该和一个 Lisp 专家和一个数æ®åº“专家èŠä¸€èŠã€‚ + +如果你想è¦çŸ¥é“*它具体是怎样的*,比如一个还未å‘布的在一个特定程åºä¸Šæ›´å¿«çš„算法,跟一些在这个领域工作的人èŠèŠã€‚ + +如果你想è¦åšä¸€ä¸ª*åªæœ‰ä½ è‡ªå·±èƒ½åšçš„个人决定*,比如你是å¦åº”该开始æŸä¸ªäº‹ä¸šï¼Œå°è¯•把一些对这个想法有益和有害的点列出æ¥ã€‚如果这没有什么用,åšä¸€äº›é¢„测。å‡è®¾ä½ å·²ç»ä»Žå„个角度研究了这个想法,并且åšäº†æ‰€æœ‰è¯¥åšçš„å‡†å¤‡ï¼Œåœ¨å¿ƒé‡Œåˆ—ä¸¾æ‰€æœ‰çš„åŽæžœï¼ŒåŒ…括好的和å的,但你ä»å¯èƒ½çŠ¹è±«ä¸å†³ã€‚你现在应该éµå¾ªä½ è‡ªå·±å†…心的想法,然åŽè®©ä½ çš„å¤§è„‘åœæ­¢æ€è€ƒã€‚大多数å¯ç”¨çš„预测技术都对决定你内心一åŠçš„æ¬²æœ›æœ‰ä½œç”¨ï¼Œå› ä¸ºå®ƒä»¬åœ¨ä½“çŽ°ä½ è‡ªå·±å®Œå…¨å¤šä¹‰å’Œéšæœºæ¨¡å¼çš„æ½œæ„识都很有用。 + +Next [å¦‚ä½•å°†äººä»¬ä½œä¸ºä¿¡æ¯æº](04-How-to-Utilize-People-as-Information-Sources.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md b/zh-traditional/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md new file mode 100644 index 0000000..73723cb --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md @@ -0,0 +1,15 @@ +# å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº +[//]: # (Version:1.0.0) +å°Šé‡å…¶ä»–æ¯ä¸ªäººçš„æ—¶é—´ï¼Œä¸Žä½ çš„æ—¶é—´ç›¸å¹³è¡¡ã€‚问别人问题比得到答案能获得更多。人们会从你的存在和倾å¬ç‰¹å®šçš„问题从你身上学到东西。你也å¯ä»¥ç”¨åŒæ ·çš„æ–¹å¼ä»Žåˆ«äººèº«ä¸Šå­¦ä¹ åˆ°ä¸œè¥¿ï¼Œä½ å¯èƒ½å­¦åˆ°ä½ æ­£åœ¨æœå¯»çš„东西的答案。这通常比你的问题更加é‡è¦å¾—多。 + +然而,这个问题的价值会å‡å°‘你在上é¢åšçš„事情。你毕竟使用了一个人拥有的最ç贵的商å“:时间。交æµçš„好处必须与代价相æƒè¡¡ã€‚更进一步,特定的代价和好处在人与人之间都ä¸ä¸€æ ·ã€‚我强烈相信一个100人的管ç†è€…æ¯ä¸ªæœˆåº”该花五分钟与他所在的组织的æ¯ä¸ªäººè°ˆè¯ï¼Œå¤§æ¦‚是它们的时间的5%。但å分钟å¯èƒ½å¤ªå¤šäº†ï¼Œå¦‚果他们有1000个员工,5分钟也å¯èƒ½å¤ªå¤šäº†ã€‚你与组织中æ¯ä¸ªäººäº¤è°ˆèŠ±è´¹çš„æ—¶é—´å–决于他们的角色(而éžä»–们的ä½ç½®ï¼‰ã€‚你应该和你的 boss 交谈而éžå’Œä½  boss çš„ boss 交谈,但你å¶å°”也å¯ä»¥å’Œä½  boss çš„ boss 交谈啦。这å¯èƒ½ä¸å¤ªèˆ’æœï¼Œä½†æˆ‘相信你有责任æ¯ä¸ªæœˆå’Œä½ çš„上上级ç¨å¾®èŠèŠï¼Œä»€ä¹ˆéƒ½è¡Œã€‚ + +基本的规则是,æ¯ä¸ªä¸Žä½ äº¤è°ˆçš„人都能ç¨å¾®å—益,他们与你èŠå¾—更多,他们能获得的收益越少。你的应该给他们æä¾›è¿™ç§å¥½å¤„,还有得到与他们交æµçš„好处,平衡这ç§å¥½å¤„与花费的时间。 + +å°Šé‡ä½ è‡ªå·±çš„æ—¶é—´æ˜¯å¾ˆé‡è¦çš„。如果和一些人èŠå¤©ï¼Œå³ä½¿è¿™ä¼šæ¶ˆè€—他们的时间,结果会节çœä½ å¾ˆå¤šçš„æ—¶é—´ï¼Œé‚£ä¹ˆä½ åº”该这样åšï¼Œé™¤éžä½ è®¤ä¸ºä»–们的时间在这个因素上,对整个集体,比你的时间更加有价值。 + +ä¸€ä¸ªå¥‡æ€ªçš„ä¾‹å­æ˜¯æš‘期实习生。一个处于高技术å«é‡ä½ç½®çš„æš‘期实习生ä¸èƒ½è¢«æœŸæœ›åŽ»å®Œæˆå¤ªå¤šä¸œè¥¿ï¼›ä»–们å¯èƒ½ä¼šæŠŠæ¯ä¸ªäººçº ç¼ åˆ°åœ°ç‹±ã€‚但为什么这是被å…许的呢?因为被纠缠的人从实习生身上å¯ä»¥æŽ¥æ”¶åˆ°ä¸€äº›é‡è¦çš„东西。他们得到了一点炫耀的机会,他们å¯èƒ½æœ‰æœºä¼šåŽ»å¬åˆ°ä¸€äº›æ–°çš„æ€æƒ³ï¼Œä»–ä»¬æœ‰æœºä¼šå¯ä»¥ä»Žä¸åŒçš„角度去看问题。他们å¯èƒ½ä¼šå°è¯•æ‹›è˜è¿™ä¸ªå®žä¹ ç”Ÿï¼Œä½†å³ä½¿ä¸æ˜¯è¿™æ ·ï¼Œä»–们也获得了很多。 + +如果你真诚地相信别人有一些东西å¯ä»¥å‘Šè¯‰ä½ ï¼Œæ— è®ºåˆé€‚,应该询问他们的æ„è§ä¸Žæ™ºæ…§ã€‚这能让他们高兴并且你å¯ä»¥ä»Žä»–们身上学到一些东西,也å¯ä»¥æ•™ä¼šä»–们一些东西。一个好的程åºå‘˜ä¸ä¼šç»å¸¸éœ€è¦é”€å”®å‰¯ç»ç†çš„建议,但如果你需è¦ï¼Œä½ å½“然应该询问这个问题。我曾ç»è¢«è¦æ±‚去倾å¬ä¸€äº›é”€å”®ç”µè¯ä»¥ä¾¿æ›´å¥½åœ°ç†è§£æˆ‘们的销售员工的工作。这ä¸ä¼šè€—费超过30分钟,但å´è®©æˆ‘通过这么å°çš„付出就对公å¸çš„é”€å”®é˜Ÿä¼æœ‰äº†æ·±åˆ»çš„å°è±¡ã€‚ + +Next [如何优雅地写文档](05-How-to-Document-Wisely.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md b/zh-traditional/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md new file mode 100644 index 0000000..caccfbc --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/05-How-to-Document-Wisely.md @@ -0,0 +1,20 @@ +# å¦‚ä½•ç¿æ™ºåœ°å†™æ–‡æ¡£ +[//]: # (Version:1.0.0) +人生太短,ä¸èƒ½å†™æ²¡äººä¼šè¯»çš„废è¯ï¼Œå¦‚果你写了废è¯ï¼Œæ²¡äººä¼šåŽ»è¯»ã€‚æ‰€ä»¥å¥½ä¸€ç‚¹çš„æ–‡æ¡£æ˜¯æœ€å¥½çš„ã€‚ç»ç†ä¸ä¼šåŽ»ç†è§£è¿™äº›ä¸œè¥¿ï¼Œå› ä¸ºä¸å¥½çš„æ–‡æ¡£ä¼šç»™ä»–ä»¬é”™è¯¯çš„å®‰å…¨æ„Ÿä»¥è‡³äºŽä»–ä»¬ä¸æ•¢ä¾èµ–他们的程åºå‘˜ã€‚如果一些人ç»å¯¹åšæŒä½ çœŸçš„在写没用的文档,就告诉他们“是的â€ï¼Œç„¶åŽå®‰é™çš„æ‰¾ä¸€ä»½æ›´å¥½çš„工作。 + +没有其他事情比精确估计 æŠŠå¥½çš„æ–‡æ¡£è½¬ä¸ºæ”¾æ¾æ–‡æ¡£è¦æ±‚的估计 æ›´ä¸ºæœ‰æ•ˆçŽ‡ã€‚çœŸç›¸æ˜¯å†·é…·è€Œè‰°éš¾çš„ï¼šæ–‡æ¡£ï¼Œå°±åƒæµ‹è¯•,会花比开å‘代ç å¤šå‡ å€çš„æ—¶é—´ã€‚ + +首先,写好的文档是好的写作。我建议你找一些关于写作的事情,学习,练习他们。但å³ä½¿ä½ æ˜¯ä¸€ä¸ªç³Ÿç³•的写手或者对你需è¦å†™æ–‡æ¡£çš„语言掌æ¡ä¸å¥½ï¼Œè¿™æ¡é»„金规则是你真正需è¦çš„ï¼šå·±æ‰€ä¸æ¬²ï¼Œå‹¿æ–½äºŽäººã€‚花时间去确实地æ€è€ƒè°ä¼šè¯»ä½ çš„æ–‡æ¡£ï¼Œä»–们从文档中想è¦èŽ·å¾—çš„çœŸæ­£çš„ä¸œè¥¿æ˜¯ä»€ä¹ˆï¼Œå¹¶ä¸”ä½ å¯ä»¥å¦‚何把这些东西交给他们。如果你这样åšï¼Œä½ å°†ä¼šå˜æˆä¸€ä¸ªè¶…è¿‡å¹³å‡æ°´å¹³çš„æ–‡æ¡£ç¼–写者,和一个好的程åºå‘˜ã€‚ + +当代ç å¯ä»¥è‡ªæˆæ–‡æ¡£æ—¶ï¼Œä¸Žæä¾›æ–‡æ¡£ç»™éžç¨‹åºå‘˜çœ‹ç›¸å,我认识的最好的程åºå‘˜ä»¬æœ‰è¿™æ ·ä¸€ä¸ªæ™®é的观点:编写具有自我解释功能的代ç ï¼Œä»…在你ä¸èƒ½é€šè¿‡ä»£ç æ¸…晰解释其å«ä¹‰çš„地方,æ‰å†™æ³¨é‡Šã€‚æœ‰ä¸¤ä¸ªå¥½çš„åŽŸå› ï¼šç¬¬ä¸€ï¼Œä»»ä½•äººéœ€è¦æŸ¥çœ‹ä»£ç çº§åˆ«çš„æ–‡æ¡£å¤§å¤šæ•°æƒ…况下都能够并且更喜欢阅读代ç ã€‚ä¸å¯å¦è®¤çš„,有ç»éªŒçš„程åºå‘˜ä¼¼ä¹Žæ¯”åˆå­¦è€…更容易åšåˆ°è¿™ä»¶äº‹ï¼Œç„¶è€Œï¼Œæ›´é‡è¦çš„æ˜¯ï¼Œæ²¡æœ‰æ–‡æ¡£çš„è¯ï¼Œä»£ç å’Œæ–‡æ¡£ä¸ä¼šæ˜¯è‡ªç›¸çŸ›ç›¾çš„。æºä»£ç æœ€ç³Ÿç³•的情况下å¯èƒ½æ˜¯é”™è¯¯å¹¶ä¸”令人困惑的。没有完美编写的文档,å¯èƒ½è¯´è°Žï¼Œè¿™å¯ç³Ÿç³•一åƒå€ã€‚ + +负责任的程åºå‘˜ä¹Ÿä¸èƒ½è®©è¿™ä»¶äº‹å˜å¾—更简å•些。如何写自解释的代ç ï¼Ÿé‚£æ„味ç€ä»€ä¹ˆï¼Ÿå®ƒæ„味ç€ï¼š + +- 编写知é“别人会去阅读的代ç (译者注:编写给人看的代ç ) +- è¿ç”¨é»„金法则 +- 选择直接的解决方案,å³ä½¿ä½ å¯ä»¥æ›´å¿«åœ°èŽ·å¾—å¦ä¸€ä¸ªè§£å†³æ–¹æ¡ˆ +- 牺牲那些å¯èƒ½æ··æ·†ä»£ç çš„å°çš„优化 +- 为读者考虑,把你ç贵的时间花在让她更加容易阅读的事情上,并且 +- 永远ä¸è¦ä½¿ç”¨è¿™æ ·çš„å‡½æ•°åæ¯”如 `foo`,`bar`, 或 `doIt`! + +Next [如何在糟糕的代ç ä¸Šå·¥ä½œ](06-How-to-Work-with-Poor-Code.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md b/zh-traditional/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md new file mode 100644 index 0000000..a7ecd95 --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md @@ -0,0 +1,11 @@ +# 如何在糟糕的代ç ä¸Šå·¥ä½œ +[//]: # (Version:1.0.0) +工作在别人写的糟糕的代ç ä¸Šæ˜¯å¸¸æœ‰çš„事。ä¸è¦æŠŠä»–们想得太糟,直到你用他们的鞋å­èµ°è·¯æ—¶ã€‚他们å¯èƒ½è¢«è¦æ±‚éžå¸¸è‡ªè§‰åœ°å¿«é€Ÿå®Œæˆä¸€äº›ä¸œè¥¿æ¥æ»¡è¶³æ—¶é—´è¡¨çš„压力。ä¸ç®¡ä¹‹å‰å‘ç”Ÿäº†ä»€ä¹ˆï¼Œä¸ºäº†åœ¨ä¸æ¸…晰的代ç ä¸Šå·¥ä½œï¼Œä½ å¿…é¡»ç†è§£å®ƒã€‚ç†è§£å®ƒéœ€è¦èŠ±è´¹ä¸€äº›å­¦ä¹ æ—¶é—´ï¼Œä½ å¿…é¡»åšæŒä»Žæ—¶é—´è¡¨ä¸­æŸäº›éƒ¨åˆ†åˆ’出一部分时间æ¥åšè¿™ä»¶äº‹ã€‚为了ç†è§£å®ƒä»¬ï¼Œä½ å¿…须读æºä»£ç ï¼Œä½ å¯èƒ½éœ€è¦åœ¨ä¸Šé¢åšä¸€äº›å®žéªŒã€‚ + +å³ä½¿æ˜¯ä¸ºä½ è‡ªå·±ï¼Œç¼–写文档也是一个好的时机,因为å°è¯•为你的代ç ç¼–写文档会强迫你从你å¯èƒ½æ²¡æœ‰è€ƒè™‘过的角度æ€è€ƒï¼Œå¹¶ä¸”完æˆçš„æ–‡æ¡£å¯èƒ½ä¼šæœ‰ç”¨ã€‚当你在åšè¿™ä¸ªæ—¶ï¼Œè€ƒè™‘é‡å†™éƒ¨åˆ†æˆ–所有代ç ä¼šæ¶ˆè€—你什么东西。是å¦é‡å†™ä¸€éƒ¨åˆ†ä»£ç äº‹å®žä¸ŠçœŸçš„ä¼šèŠ‚çœæ—¶é—´ï¼Ÿä½ é‡å†™ä»£ç åŽä½ ä¼šæ›´ä¿¡ä»»å®ƒå—?在这里å°å¿ƒä½ çš„傲慢。如果你é‡å†™å®ƒï¼Œä½ å¤„ç†å®ƒä¼šæ›´å®¹æ˜“,但下一个必须阅读它的人是å¦çœŸçš„æ›´åŠ å®¹æ˜“ï¼Ÿå¦‚æžœä½ é‡å†™äº†ï¼Œæµ‹è¯•çš„è´Ÿæ‹…åœ¨å“ªé‡Œï¼Ÿé‡æ–°æµ‹è¯•çš„éœ€è¦æ˜¯å¦å¤§äºŽå¯èƒ½èŽ·å¾—çš„å¥½å¤„ï¼Ÿ + +在任何对你没有编写的代ç çš„评估中,代ç çš„è´¨é‡ä¼šå½±å“你对风险问题的认识以åŠä¸€äº›æœªçŸ¥çš„事情。 + +铭记抽象和å°è£…是很é‡è¦çš„,这两个程åºå‘˜æœ€å¥½çš„å·¥å…·ï¼Œå¯¹ç³Ÿç³•çš„ä»£ç æ˜¯ç‰¹åˆ«å¥½ç”¨çš„。你å¯èƒ½ä¸èƒ½å¤Ÿé‡æ–°è®¾è®¡ä¸€å¤§å—代ç ï¼Œä½†å¦‚果你å¯ä»¥ä¸ºå®ƒå¢žåŠ ä¸€å®šé‡çš„æŠ½è±¡ï¼Œä½ ä¸ç”¨é‡æ–°åœ¨è¿™æ•´å›¢è¿·é›¾ä¸Šå·¥ä½œå°±å¯ä»¥èŽ·ä¸€äº›å¥½çš„è®¾è®¡æ‰€å¸¦æ¥çš„好处。特别的,你å¯ä»¥å°è¯•去隔离尤其糟糕的代ç ï¼Œè¿™æ ·ä»–们就å¯ä»¥è¢«ç‹¬ç«‹é‡æž„。 + +Next [如何使用æºä»£ç æŽ§åˆ¶](07-How-to-Use-Source-Code-Control.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md b/zh-traditional/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md new file mode 100644 index 0000000..0d923ba --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md @@ -0,0 +1,9 @@ +# 如何使用æºä»£ç æŽ§åˆ¶ +[//]: # (Version:1.0.0) +æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼ˆåˆç§°ç‰ˆæœ¬æŽ§åˆ¶ç³»ç»Ÿï¼‰è®©ä½ é«˜æ•ˆåœ°ç®¡ç†å·¥ç¨‹ã€‚他们对一个人是很有用的,对一个团队是至关é‡è¦çš„。它们追踪ä¸åŒç‰ˆæœ¬é‡Œçš„æ‰€æœ‰æ”¹å˜ï¼Œä»¥è‡³äºŽæ‰€æœ‰ä»£ç éƒ½æœªæ›¾ä¸¢å¤±ï¼Œå…¶å«ä¹‰å¯ä»¥å½’属于改å˜ã€‚有了æºä»£ç æŽ§åˆ¶ç³»ç»Ÿï¼Œä¸€ä¸ªäººå¯ä»¥è‡ªä¿¡åœ°å†™ä¸€äº›è€ŒåŠé€”而废的代ç å’Œè°ƒè¯•的代ç ï¼Œå› ä¸ºä½ ä¿®æ”¹çš„代ç è¢«ä»”细地与æäº¤çš„ã€å®˜æ–¹çš„å³å°†ä¸Žå›¢é˜Ÿå…±äº«æˆ–å‘布的代ç åˆ†å‰²å¼€ã€‚ + +我挺晚æ‰å¼€å§‹æ„识到æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„好处,但现在å³ä½¿æ˜¯ä¸€ä¸ªäººçš„工程,我也ä¸èƒ½ç¦»å¼€æºä»£ç æŽ§åˆ¶ç³»ç»Ÿã€‚å½“ä½ ä»¬å›¢é˜Ÿåœ¨åŒæ ·çš„代ç åŸºç¡€ä¸Šå·¥ä½œæ—¶ï¼Œé€šå¸¸å®ƒä»¬æ˜¯å¿…è¦çš„。然而,它们有å¦ä¸€ä¸ªå·¨å¤§çš„优点:它们鼓励我们把代ç å½“åšä¸€ä¸ªæˆé•¿çš„æœ‰æœºç³»ç»Ÿã€‚因为æ¯ä¸ªæ”¹å˜éƒ½ä¼šè¢«æ ‡è®°ä¸ºå¸¦æœ‰å字或数字的修正,一个人会开始认为软件是一ç§å¯è§çš„一系列æ¸è¿›çš„æå‡ã€‚我认为这对åˆå­¦è€…是尤其有用的。 + +使用æºä»£ç æŽ§åˆ¶ç³»ç»Ÿçš„ä¸€ä¸ªå¥½çš„æŠ€æœ¯æ˜¯ä¸€ç›´ä¿æŒåœ¨å‡ å¤©åŽæäº¤æ›´æ–°ã€‚åœ¨æäº¤åŽï¼Œä¸€å®šç¨‹åº¦ä¸Šä¸æ´»è·ƒï¼Œä¸è¢«è°ƒç”¨çš„代ç åœ¨å‡ å¤©å†…都ä¸ä¼šå®Œæˆï¼Œå› æ­¤ä¹Ÿä¸ä¼šå¯¹å…¶ä»–任何人产生任何问题。因æäº¤é”™è¯¯çš„代ç è€Œé™ä½Žä½ é˜Ÿå‹çš„å¼€å‘速度是一个严é‡çš„错误,这往往是一ç§ç¦å¿Œã€‚ + +Next [如何进行å•元测试](08-How-to-Unit-Test.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/08-How-to-Unit-Test.md b/zh-traditional/1-Beginner/Team-Skills/08-How-to-Unit-Test.md new file mode 100644 index 0000000..54c105a --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/08-How-to-Unit-Test.md @@ -0,0 +1,9 @@ +# 如何进行å•元测试 +[//]: # (Version:1.0.0) +å•元测试,对独立的代ç åŠŸèƒ½ç‰‡æ®µï¼Œç”±ç¼–å†™ä»£ç çš„团队进行测试,也是一ç§ç¼–ç ï¼Œè€Œéžä¸Žä¹‹ä¸åŒçš„一些事情。设计代ç çš„一部分就是设计它该如何被测试。你应该写一个测试计划,å³ä½¿å®ƒåªæ˜¯ä¸€å¥è¯ã€‚有时候测试很简å•:“这个按钮看起æ¥å¥½å—?â€,æœ‰æ—¶å€™å®ƒå¾ˆå¤æ‚:“这个匹é…算法å¯ä»¥ç²¾ç¡®åœ°è¿”回正确的匹é…结果?â€ã€‚ + +无论任何å¯èƒ½çš„æ—¶å€™ï¼Œä½¿ç”¨æ–­è¨€æ£€æŸ¥ä»¥åŠæµ‹è¯•驱动。这ä¸ä»…能尽早å‘现 bug,而且在之åŽä¹Ÿå¾ˆæœ‰ç”¨ï¼Œè®©ä½ åœ¨å…¶ä»–æ–¹é¢æ‹…心的谜题得到解决。 + +æžé™ç¼–程开å‘者广泛高效地编写å•元测试,除了推è他们的作å“,我ä¸èƒ½åšæ›´å¥½çš„äº‹æƒ…äº†ã€‚ + +Next [毫无头绪?休æ¯ä¸€ä¸‹](09-Take-Breaks-when-Stumped.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md b/zh-traditional/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md new file mode 100644 index 0000000..c79ff59 --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md @@ -0,0 +1,5 @@ +# 毫无头绪?,休æ¯ä¸€ä¸‹ +[//]: # (Version:1.0.0) +没有æ€è·¯æ—¶ï¼Œä¼‘æ¯ä¸€ä¸‹ã€‚我有时候没有æ€è·¯æ—¶ä¼šå†¥æ€15分钟,当我回æ¥çœ‹é—®é¢˜æ—¶ï¼Œå®ƒå°±ç¥žå¥‡åœ°è§£å¼€äº†ã€‚更大尺度上,一个晚上的ç¡çœ èƒ½åšåˆ°ä¸€æ ·çš„事情,临时切æ¢åˆ°å…¶ä»–活动上å¯èƒ½ä¹Ÿä¼šæœ‰æ•ˆã€‚ + +Next [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](10-How-to-Recognize-When-to-Go-Home.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md b/zh-traditional/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md new file mode 100644 index 0000000..0845f8e --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md @@ -0,0 +1,15 @@ +# å¦‚ä½•è¯†åˆ«ä¸‹ç­æ—¶é—´ +[//]: # (Version:1.0.0) +è®¡ç®—æœºç¼–ç¨‹æ˜¯ä¸€ç§æ´»åŠ¨ä¹Ÿæ˜¯ä¸€ç§æ–‡åŒ–。ä¸å¹¸çš„äº‹å®žæ˜¯å®ƒä¸æ˜¯ä¸€ç§çœ‹é‡èº«å¿ƒå¥åº·çš„æ–‡åŒ–。从文化/历å²ç¼˜ç”±çœ‹ï¼ˆä¾‹å¦‚,在机器空载的晚上工作的需è¦ï¼‰ï¼Œè¿˜æœ‰å› ä¸ºè¶…过市场时间的压力和程åºå‘˜çš„缺ä¹ï¼Œè®¡ç®—机程åºå‘˜ä¼ ç»Ÿä¸Šæ€»æ˜¯è¿‡åº¦å·¥ä½œã€‚我ä¸è®¤ä¸ºä½ å¯ä»¥ç›¸ä¿¡ä½ å¬åˆ°çš„æ‰€æœ‰æ•…事,但我认为一周工作60å°æ—¶æ˜¯å¸¸è§çš„,50å°æ—¶æ›´å¤šçš„åƒä¸€ä¸ªæœ€å°å€¼ã€‚è¿™æ„味ç€å®žé™…总是比需è¦çš„æ—¶é—´èŠ±è´¹å¾—æ›´å¤šã€‚è¿™å¯¹ä¸€ä¸ªå¥½çš„ï¼Œä¸ä»…为他们自己负责而且为他们的åŒäº‹è´Ÿè´£çš„程åºå‘˜æ¥è¯´æ˜¯ä¸€ä¸ªä¸¥é‡çš„问题。你需è¦è¯†åˆ«ä»€ä¹ˆæ—¶å€™ä¸‹ç­ï¼Œæœ‰æ—¶å€™è¿˜è¦å»ºè®®å…¶ä»–人回家的时间。解决这个问题的固定规则ä¸å­˜åœ¨ï¼ŒæŠšå…»ä¸€ä¸ªå­©å­çš„å›ºå®šè§„åˆ™ä¹Ÿæ˜¯ï¼Œå‡ºäºŽåŒæ ·çš„原因---æ¯ä¸ªäººéƒ½æ˜¯ä¸åŒçš„。 + +一周超过60ä¸ªå°æ—¶å·¥ä½œå¯¹æˆ‘æ¥è¯´æ˜¯éžå¸¸è¾›è‹¦çš„,我å¯ä»¥ç”³è¯·æŒºçŸ­çš„一段时间(大概是一周),有时候在我的预料中。我ä¸çŸ¥é“对一个人æ¥è¯´ä¸€å‘¨å·¥ä½œè¶…过60å°æ—¶æ˜¯å¦å…¬å¹³ï¼Œæˆ‘甚至ä¸çŸ¥é“40å°æ—¶æ˜¯å¦æ˜¯å…¬å¹³çš„。然而,我确定,如果你努力工作,å´åœ¨ä½ é¢å¤–工作的时间里获得了很少东西,这是很愚蠢的。对我个人æ¥è¯´ï¼Œæˆ‘认为åšä¸€ä¸ªæ‡¦å¤«ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜è¯¥åšçš„äº‹ã€‚é—æ†¾çš„æ˜¯ï¼Œäº‹å®žä¸Šï¼Œç¨‹åºå‘˜ç»å¸¸*被*è¦æ±‚åšä¸€ä¸ªæ‡¦å¤«æ¥ä¸ºä¸€äº›äººè¡¨æ¼”,例如一个ç»ç†æƒ³è¦ç»™æ€»ç»ç†ç•™ä¸‹æ·±åˆ»å°è±¡ã€‚程åºå‘˜ç»å¸¸å¯¹æ­¤å±ˆæœï¼Œå› ä¸ºä»–们希望开心,并且ä¸å–„æ‹’ç»ï¼Œä¸Žæ­¤ç›¸å的有四é“防护墙: +- å°½å¯èƒ½ä¸Žå…¬å¸é‡Œçš„任何人交æµï¼Œè¿™æ ·æ²¡äººå¯ä»¥è¯¯å¯¼æ€»ç»ç†æ­£åœ¨å‘生的事情; +- 学习明确而防御性地评估和规划,让æ¯ä¸ªäººçœ‹åˆ°æ—¶é—´è¡¨çš„内容以åŠå®ƒçš„立场; +- 学会拒ç»ï¼Œåœ¨å¿…è¦æ—¶ä½œä¸ºä¸€ä¸ªå›¢é˜Ÿæ‹’ç»ï¼Œå¹¶ä¸” +- 如果必须的è¯ï¼Œé€€å‡ºå›¢é˜Ÿ + +大多数程åºå‘˜æ˜¯å¥½çš„程åºå‘˜ï¼Œå¥½çš„程åºå‘˜æƒ³è¦åšå¾ˆå¤šä¸œè¥¿ã€‚为了åšåˆ°è¿™ç‚¹ï¼Œä»–们需è¦é«˜æ•ˆç®¡ç†ä»–们的时间。从一个问题中兴奋和深陷其中都有一定é‡çš„å¿ƒç†æƒ¯æ€§ã€‚许多程åºå‘˜å‘现他们在长久ä¸è¢«æ‰“æ‰°çš„ä¸€æ®µæ—¶é—´é‡Œèƒ½å¤Ÿä¿æŒå…´å¥‹å’Œé›†ä¸­æ³¨æ„力,这让他们能最好地工作。然而,人们必须ç¡è§‰ï¼Œå¹¶ä¸”有其他的责任。æ¯ä¸ªäººéœ€è¦æ‰¾åˆ°ä¸€ç§æ–¹å¼åŽ»æ»¡è¶³ä»–ä»¬çš„ç”Ÿç‰©èŠ‚å¥å’Œå·¥ä½œèŠ‚å¥ã€‚æ¯ä¸ªç¨‹åºå‘˜éœ€è¦åšä»»ä½•å¿…é¡»çš„äº‹æƒ…æ¥æä¾›é«˜æ•ˆçš„å·¥ä½œå‘¨æœŸï¼Œæ¯”å¦‚åªå‚加的æŸäº›æœ€å…³é”®çš„会议,以此ä¿ç•™ä¸€å®šçš„æ—¶é—´ã€‚ + +因为我有孩å­ï¼Œæˆ‘å°è¯•å’Œä»–ä»¬åœ¨æ™šä¸Šç›¸å¤„ã€‚æˆ‘è‡ªå·±æœ€å¥½çš„å·¥ä½œèŠ‚å¥æ˜¯å·¥ä½œå¾ˆé•¿çš„一天,在办公室或办公室附近ç¡è§‰ï¼ˆä»Žå®¶åˆ°å·¥ä½œæˆ‘需è¦å¾ˆé•¿çš„è½¬æ¢æ—¶é—´ï¼‰ç„¶åŽè¶³å¤Ÿæ—©åœ°å›žå®¶ï¼Œåœ¨æˆ‘的孩å­ä»¬ç¡è§‰å‰ä¸Žä»–们相处。我觉得这并ä¸èˆ’æœï¼Œä½†è¿™æ˜¯æˆ‘å¯ä»¥å·¥ä½œçš„æœ€å¥½çš„妥å。如果你得了传染病,回家。如果你有自æ€çš„æƒ³æ³•,回家。如果你有超过几秒的凶æ€çš„æƒ³æ³•,回家。如果有人有严é‡çš„心ç†éšœç¢æˆ–者超出心情低è½çš„心ç†ç–¾ç—…的标志,把他é€å›žå®¶ã€‚如果你由于疲劳å˜å¾—与平时ä¸åŒåœ°åœ¨æŸç§ç¨‹åº¦ä¸Šè¶‹äºŽä¸è¯šå®žæˆ–失望,休æ¯ä¸€ä¸‹ã€‚ä¸è¦ä½¿ç”¨è¯ç‰©ç¼“解疲劳。ä¸è¦æ»¥ç”¨å’–啡因。 + +Next [如何与ä¸å¥½ç›¸å¤„的人相处](11-How-to-Deal-with-Difficult-People.md) diff --git a/zh-traditional/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md b/zh-traditional/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md new file mode 100644 index 0000000..6d20e15 --- /dev/null +++ b/zh-traditional/1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md @@ -0,0 +1,15 @@ +# 如何与ä¸å¥½ç›¸å¤„的人相处 +[//]: # (Version:1.0.0) +ä½ å¯èƒ½å¿…须和ä¸å¥½ç›¸å¤„的人相处。甚至å¯èƒ½ä½ æœ¬èº«å°±æ˜¯ä¸€ä¸ªä¸å¥½ç›¸å¤„的人。如果你是那ç§ä¸ŽåŒäº‹å’Œæƒå¨äººç‰©æœ‰è®¸å¤šçŸ›ç›¾çš„äººï¼Œä½ åº”è¯¥çæƒœè¿™ç§ç‹¬ç«‹æ‰€æš—示的东西,但需è¦åœ¨ä¸ç‰ºç‰²ä½ çš„æ™ºåŠ›æˆ–åŽŸåˆ™çš„å‰æä¸‹æé«˜ä½ çš„人际交往能力。 + +åœ¨è¿™æ–¹é¢æ²¡æœ‰ä»€ä¹ˆç»éªŒ,或者先å‰ç”Ÿæ´»çš„行为模å¼åœ¨å·¥ä½œåœºåˆçš„ç»éªŒä¸èƒ½é€‚用的一些程åºå‘˜,对这ç§äº‹æƒ…会éžå¸¸å›°æ‰°ã€‚ä¸å¥½ç›¸å¤„的人ç»å¸¸ä¹ æƒ¯äºŽæ‹’ç»ï¼Œå¹¶ä¸”与他人相比,他们更ä¸å®¹æ˜“å—社交压力所影å“。关键是åˆé€‚地尊é‡ä»–们,而éžä½ å¯èƒ½æƒ³åšçš„事,但ä¸è¦å……分地满足他们想è¦çš„(译者注:他们想è¦çš„往往是过分的)。 + +程åºå‘˜å¿…须作为一个团队一起工作。当分歧出现时,它必须用æŸç§æ–¹å¼è§£å†³ï¼Œå®ƒä¸èƒ½è¢«é•¿æ—¶é—´æŒ‚起。ä¸å¥½ç›¸å¤„的人通常是æžåº¦èªæ˜Žçš„,并且有一些很有用的æ„è§å¯ä»¥å‘表。ä¸å¸¦å¯¹è¿™ä¸ªäººçš„åè§ï¼Œå€¾å¬å¹¶ç†è§£ä¸å¥½ç›¸å¤„的人是至关é‡è¦çš„。失败的交æµé€šå¸¸æ˜¯åˆ†æ­§çš„基础,但它有时候å¯ä»¥è¢«å·¨å¤§çš„è€å¿ƒç§»é™¤ã€‚å°è¯•冷é™è¯šæ³åœ°ä¿æŒäº¤æµï¼Œå¹¶ä¸”䏿ޥå—任何å¯èƒ½äº§ç”Ÿæ›´å¤§çŸ›ç›¾çš„引诱。在一个åˆç†çš„å°è¯•ç†è§£çš„周期åŽï¼Œå†åšå†³å®šã€‚ + +ä¸è¦è®©ä¸€ä¸ªæ¶éœ¸å¼ºè¿«ä½ åšä½ æ‰€ä¸åŒæ„的事情。如果你是è€å¤§ï¼Œåšä½ è®¤ä¸ºæœ€å¥½çš„事情。ä¸è¦ä¸ºä»»ä½•个人因素åšå‡ºå†³å®šï¼Œå¹¶æ—¶åˆ»å‡†å¤‡å¥½ä¸ºä½ çš„决定åšå‡ºè§£é‡Šã€‚如果你是一个有ç€ä¸å¥½ç›¸å¤„çš„åŒäº‹çš„团队æˆå‘˜ï¼Œä¸è¦è®©è€å¤§çš„决定有任何个人影å“。如果没有按你的想法å‘展,全身心地按(已æˆäº‹å®žçš„)å¦ä¸€ç§æ–¹æ³•去åšã€‚ + +ä¸å¥½ç›¸å¤„的人能够改å˜ä¸Žè¿›æ­¥ã€‚我曾亲眼目ç¹è¿™ç§æƒ…况,但这很稀少。然而,æ¯ä¸ªäººéƒ½æœ‰æš‚æ—¶çš„é«˜å…´ä¸Žå¤±è½æƒ…绪。 + +æ¯ä¸ªç¨‹åºå‘˜ä½†å°¤å…¶æ˜¯é¢†å¯¼éƒ½ä¼šé¢ä¸´è¿™æ ·ä¸€ä¸ªæŒ‘战:让ä¸å¥½ç›¸å¤„çš„äººä¿æŒå®Œå…¨çš„忙碌。他们比别人更倾å‘于枯燥的工作,并且更能被动地å¿å—。 + +Next [进阶技能](../../2-Intermediate) diff --git a/zh-traditional/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md b/zh-traditional/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md new file mode 100644 index 0000000..315f40f --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md @@ -0,0 +1,13 @@ +# 如何在开å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´æƒè¡¡ +[//]: # (Version:1.0.0) +è½¯ä»¶å¼€å‘æ€»æ˜¯åœ¨å·¥ç¨‹è¯¥åšä»€ä¹ˆä¸Žå®Œæˆå·¥ç¨‹é—´å¦¥å。但你å¯èƒ½è¢«è¦æ±‚以牺牲你的工程适用性或商业适用性的方å¼ï¼ŒåŽ»äº¤æ¢å·¥ç¨‹çš„å¼€å‘速度。例如,你å¯èƒ½è¢«è¦æ±‚åšä¸€äº›ç³Ÿç³•的软件工程实践,但这将会导致大é‡ç»´æŠ¤é—®é¢˜ã€‚ + +如果这å‘生了,你的首è¦ä»»åŠ¡æ˜¯é€šçŸ¥ä½ çš„å›¢é˜Ÿï¼Œç„¶åŽæ¸…楚地解释é™ä½Žè´¨é‡çš„代价。在这之åŽï¼Œä½ å¯¹è¿™ä¸ªé—®é¢˜çš„ç†è§£ä¼šæ¯”ä½ çš„ boss çš„ç†è§£è¿˜è¦æ›´æ¸…晰。明白将会失去什么以åŠå°†è¦å¾—到什么,以åŠåœ¨è¿™æ¬¡å¤±åŽ»çš„ä¸œè¥¿ï¼Œèƒ½åœ¨ä¸‹ä¸€è½®ä¸­å¾—åˆ°ä»€ä¹ˆã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­ï¼Œç”±ä¸€ä¸ªå¥½å·¥ç¨‹æä¾›çš„å¯è§æ€§åº”è¯¥ä¼šå¾ˆæœ‰ç”¨ã€‚å¦‚æžœç”¨è´¨é‡æ¢æ—¶é—´å½±å“了质é‡ä¿è¯å·¥ä½œï¼Œ(å‘ä½ çš„ boss 和质é‡ä¿è¯äººå‘˜)æŒ‡å‡ºè¿™ä¸ªé—®é¢˜ã€‚å¦‚æžœç”¨è´¨é‡æ¢æ—¶é—´ä¼šå¯¼è‡´åœ¨ä¹‹åŽçš„è´¨é‡ä¿è¯å‘¨æœŸä¸­å‡ºçŽ°æ›´å¤šçš„ bug,指出æ¥ã€‚ + +如果她ä»ç„¶åšæŒï¼Œä½ åº”该把劣质部分隔离到特殊的你å¯ä»¥åœ¨ä¸‹ä¸€ä¸ªå¼€å‘周期计划é‡å†™æˆ–优化的组件中。å‘你的团队解释这个问题,这样他们å¯ä»¥ä¸ºæ­¤åšäº›è®¡åˆ’。 + +å¿è€…程åºå‘˜åœ¨ Slashdot 写下了这样的格言: + +> è®°ä½ï¼Œä¸€ä¸ªå¥½çš„设计会被糟糕的代ç å®žçŽ°å¼¹å›žã€‚å¦‚æžœå¥½çš„æŽ¥å£å’ŒæŠ½è±¡åœ¨ä»£ç ä¸­åˆ°å¤„存在,最åŽçš„é‡å†™ä¼šæ›´åŠ ç—›è‹¦ã€‚å¦‚æžœå†™éš¾ä»¥ä¿®å¤çš„æ¸…晰代ç å¾ˆå›°éš¾ï¼Œè€ƒè™‘是什么与核心设计冲çªçš„东西导致了这个问题。 + +Next [如何管ç†è½¯ä»¶ä¾èµ–](02-How-to-Manage-Software-System-Dependence.md) diff --git a/zh-traditional/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md b/zh-traditional/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md new file mode 100644 index 0000000..635f956 --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md @@ -0,0 +1,13 @@ +# 如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ– +[//]: # (Version:1.0.0) +现代软件系统趋å‘于ä¾èµ–大é‡çš„éžç›´æŽ¥å¯æŽ§çš„组件。通过ååŒä¸Žé‡ç”¨ï¼Œè¿™å¢žåŠ äº†ç”Ÿäº§æ•ˆçŽ‡ã€‚ç„¶è€Œï¼Œæ¯ä¸ªç»„件会带æ¥ä¸€äº›é—®é¢˜ï¼š + +- 你该如何修å¤ç»„件中的 bug? +- 组件é™åˆ¶ä½ ä½¿ç”¨ç‰¹æ®Šçš„硬件或软件系统了å—? +- å¦‚æžœç»„ä»¶å®Œå…¨åæŽ‰äº†ï¼Œä½ è¯¥åšä»€ä¹ˆï¼Ÿ + +æŸäº›ç¨‹åº¦ä¸Šè§£è€¦ç»„件,让它独立å¯ä»¥è¢«ç§»é™¤ï¼Œæ€»æ˜¯æœ€å¥½çš„ã€‚å¦‚æžœç»„ä»¶è¢«è¯æ˜Žå®Œå…¨ä¸å¯ç”¨ï¼Œä½ å¯èƒ½èƒ½å¤Ÿä½¿ç”¨ä¸åŒçš„组件,但你å¯èƒ½å¿…é¡»è‡ªå·±å†™ä¸€ä¸ªç»„ä»¶ã€‚è§£è€¦ä¸æ˜¯å¯ç§»æ¤æ€§ï¼Œä½†è¿™è®©ç§»æ¤å˜å¾—简å•,这大多数时候是好事。 + +拥有组件æºä»£ç å¯ä»¥æŠŠé£Žé™©é™åˆ°1/4.有了æºä»£ç ï¼Œä½ å¯ä»¥æ›´å®¹æ˜“地评估它,调试它,找到é¿å…踩å‘çš„æ–¹æ³•ï¼Œå¹¶ä¸”ä½¿å¾—ä¿®å¤æ›´å®¹æ˜“。如果你进行修å¤ï¼Œä½ å¿…须把修å¤çš„内容æäº¤ç»™ç»„件的拥有者,并且让修改åˆå¹¶åˆ°å®˜æ–¹å‘布版中,å¦åˆ™ä½ å°†ä¸é€‚地必须维护一个éžå®˜æ–¹ç‰ˆæœ¬ã€‚ + +Next [如何判断软件是å¦å¤ªä¸æˆç†Ÿäº†](03-How-to-Decide-if-Software-is-Too-Immature.md) diff --git a/zh-traditional/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md b/zh-traditional/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md new file mode 100644 index 0000000..09e7170 --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md @@ -0,0 +1,18 @@ +# 如何判断软件是å¦å¤ªä¸æˆç†Ÿäº† +[//]: # (Version:1.0.0) +ä½¿ç”¨å…¶ä»–äººå†™çš„è½¯ä»¶æ˜¯ä¸€ç§æœ€æœ‰æ•ˆçŽ‡çš„æž„å»ºä¸€ä¸ªåšå®žçš„系统的方法之一。这本ä¸è¯¥è¢«æŽ’斥,但与此相关的风险必须被检验。最大的一ç§é£Žé™©åœ¨äºŽï¼Œå®ƒé€šè¿‡ä½¿ç”¨å˜æˆä¸€ä¸ªå¯ç”¨äº§å“æˆç†Ÿå‰çš„ bug 周期和与软件相关的故障时期。在你考虑将软件系统集æˆå‰ï¼Œä¸è®ºæ˜¯ä½ è‡ªå·±å†™çš„还是第三方的,考虑它是å¦è¶³å¤Ÿæˆç†Ÿä»¥ä½¿ç”¨æ˜¯éžå¸¸é‡è¦çš„。这里有å个你应该自问的相关问题: + +1. 它是蒸汽å—ï¼Ÿï¼ˆé‚£è‚¯å®šæ˜¯ä¸æˆç†Ÿçš„) +2. 有å¯ç”¨çš„æ‡‚这个软件的人å—? +3. 你是第一使用者å—? +4. 有æŒç»­ä½¿ç”¨çš„强烈动机å—? +5. 有维护负担å—? +6. 没有当å‰çš„维护者的è¯ï¼Œå®ƒè¿˜èƒ½ç”¨å—? +7. 有至少和它的一åŠé‚£æ ·å¥½çš„ç»éªŒä¸°å¯Œçš„å…¶ä»–å¯ç”¨é€”径? +8. 你的团队或公å¸äº†è§£å®ƒå—? +9. 你的团队或公å¸å¯¹å®ƒæ»¡æ„å—? +10. å³ä½¿å®ƒä¸å¥½ï¼Œä½ å¯ä»¥é›‡äººåœ¨å®ƒä¸Šé¢å·¥ä½œå—? + +对这些标准的一点考虑论è¯äº†è‰¯å¥½æž„建的自由软件和开æºè½¯ä»¶åœ¨å‡å°ä¼ä¸šå®¶é£Žé™©ä¸Šçš„巨大价值 + +Next [如何åšä¸€ä¸ªè´­ä¹°æˆ–构建决定](04-How-to-Make-a-Buy-vs-Build-Decision.md) diff --git a/zh-traditional/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md b/zh-traditional/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md new file mode 100644 index 0000000..764e06f --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md @@ -0,0 +1,16 @@ +# 如何åšè´­ä¹°è¿˜æ˜¯æž„建的决定 +[//]: # (Version:1.0.0) +一个å°è¯•用软件完æˆä¸€äº›ä»»åŠ¡çš„ä¼ä¸šçº§å…¬å¸æˆ–å·¥ç¨‹å¿…é¡»ä¸æ–­åšæ‰€è°“çš„ *buy vs. build* 的决定。这个问题的ä¸å¹¸åœ¨ä¸¤ä¸ªæ–¹é¢ï¼šä¼¼ä¹Žå¿½è§†äº†ä¸å¿…*被购买*的开æºè½¯ä»¶å’Œè‡ªç”±è½¯ä»¶ã€‚æ›´é‡è¦çš„æ˜¯ï¼Œè¿™å¯èƒ½åº”该被称作*获å–ä¸Žé›†æˆ vs. 购买与集æˆ*决定,因为集æˆçš„代价需è¦è¢«è€ƒè™‘。这需è¦å•†ä¸šä¸Šï¼Œç®¡ç†ä¸Šï¼Œå·¥ç¨‹ç†è§£ä¸Šçš„大é‡ç»“åˆã€‚ + +- 你的需è¦ä¸Žå®ƒçš„设计æ„图有多接近? +- å¯¹äºŽä½ è´­ä¹°çš„è½¯ä»¶ï¼Œä½ æƒ³è¦æ€Žæ ·çš„å¯ç§»æ¤æ€§ï¼Ÿ +- 评估集æˆçš„代价是什么? +- 集æˆçš„代价是什么? +- 购买会增加还是å‡å°‘长期维护代价? +- æž„å»ºä¼šæŠŠä½ æ”¾åœ¨ä¸€ä¸ªä½ ä¸æƒ³è¦çš„商业ä½ç½®å—? + +在你构建一些大到足够æˆä¸ºå¦ä¸€æ•´ä¸ªå•†å“的基础的东西å‰è¯·ä¸‰æ€ã€‚这样的想法通常是ä¹è§‚积æžçš„将会对你的团队åšå‡ºè®¸å¤šè´¡çŒ®çš„人æå‡ºæ¥çš„。如果他们的想法很引人注目,你å¯èƒ½ä¼šæƒ³è¦æ”¹å˜ä½ çš„商业计划,但ä¸è¦åœ¨æ²¡æœ‰å‘¨å…¨è€ƒè™‘å‰å°±æŠ•资一个比你自己的商业还大的解决方案。 + +在考虑了这些问题åŽï¼Œä½ å¯èƒ½åº”å½“å‡†å¤‡ä¸¤ä¸ªå·¥ç¨‹è®¡åˆ’è‰æ¡ˆï¼Œä¸€ä¸ªç»™è´­ä¹°ï¼Œä¸€ä¸ªç»™æž„建。这会强迫你考虑集æˆä»£ä»·ã€‚ä½ ä¹Ÿåº”å½“è€ƒè™‘ä¸¤ç§æŽªæ–½çš„é•¿æœŸç»´æŠ¤ä»£ä»·ã€‚ä¸ºäº†è¯„ä¼°é›†æˆä»£ä»·ï¼Œä½ å¿…须在购买软件å‰å¯¹å®ƒåšä¸€ä¸ªå½»åº•的评估。如果你ä¸èƒ½è¯„估好它,你å¯ä»¥å‡è®¾è´­ä¹°å®ƒä¼šæœ‰ä¸€ä¸ªä¸å¯é¢„料的风险,你应该以此决定是å¦è´­ä¹°ç‰¹å®šçš„产å“ã€‚å¦‚æžœè€ƒè™‘åŽæœ‰å‡ ä¸ªè´­ä¹°å†³å®šï¼Œéœ€è¦èŠ±ä¸€äº›ç²¾åŠ›åŽ»è¯„ä¼°æ¯ä¸ªå†³å®šã€‚ + +Next [如何专业地æˆé•¿](05-How-to-Grow-Professionally.md) diff --git a/zh-traditional/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md b/zh-traditional/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md new file mode 100644 index 0000000..779f1de --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/05-How-to-Grow-Professionally.md @@ -0,0 +1,11 @@ +# 如何专业地æˆé•¿ +[//]: # (Version:1.0.0) +承担超过你的æƒåŠ›çš„è´£ä»»ã€‚æ‰®æ¼”ä½ æƒ³è¦æ‰®æ¼”的角色。对那些对更大组织的æˆåŠŸåšå‡ºè¿‡è´¡çŒ®ä»¥åŠå¯¹ä½ ä¸ªäººæä¾›è¿‡å¸®åŠ©çš„äººè¡¨ç¤ºæ„Ÿè°¢ä¸Žæ¬£èµã€‚ + +如果你想æˆä¸ºå›¢é˜Ÿçš„领导,去激励与团结。如果你想æˆä¸ºä¸€ä¸ªç»ç†ï¼Œæ‹…起规划的责任。你通常å¯ä»¥åœ¨å’Œé¢†å¯¼æˆ–ç»ç†åœ¨ä¸€èµ·æ—¶ï¼Œèˆ’æœåœ°å®Œæˆè¿™äº›äº‹æƒ…,因为这使得他们å¯ä»¥æŠ½ç©ºåŽ»æ‰¿æ‹…æ›´å¤§çš„è´£ä»»ã€‚å¦‚æžœè¿™å¤ªå¤šäº†ä»¥è‡³äºŽä½ ä¸èƒ½å°è¯•,一次åªåšä¸€ç‚¹ç‚¹ã€‚ + +评估你自己。如果你想è¦å˜æˆä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œè¯¢é—®ä¸€äº›ä½ æ¬£èµçš„人你怎样æ‰èƒ½å˜æˆä»–们那样。你也å¯ä»¥é—®ä½ çš„ boss,他å¯ä»¥å‘Šè¯‰ä½ çš„东西会少一些,但对你的事业会有更大的影å“。 + +计划学习新技能的方å¼ï¼ŒåŒ…括çç¢Žçš„æŠ€æœ¯ç±»åž‹ï¼Œæ¯”å¦‚å­¦ä¹ ä¸€ä¸ªæ–°çš„è½¯ä»¶ç³»ç»Ÿï¼Œå’Œå›°éš¾çš„ç¤¾äº¤ç±»åž‹ï¼Œåƒæ¼‚亮的写作,把它们集æˆåˆ°ä½ çš„工作中。 + +Next [如何评估é¢è¯•者](06-How-to-Evaluate-Interviewees.md) diff --git a/zh-traditional/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md b/zh-traditional/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md new file mode 100644 index 0000000..743bb37 --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md @@ -0,0 +1,15 @@ +# 如何评估é¢è¯•者 +[//]: # (Version:1.0.0) +评估å¯èƒ½çš„å‘˜å·¥ï¼Œå´æ²¡æœ‰å¾—到它应得的能é‡ã€‚一个糟糕的雇佣,就åƒç³Ÿç³•的婚姻,是éžå¸¸ç³Ÿç³•的。æ¯ä¸ªäººé¦–è¦çš„一部分精力应该投入到招è˜ä¸Šï¼Œå°½ç®¡è¿™å¾ˆå°‘å‘生。 + +有ä¸åŒçš„é¢è¯•é£Žæ ¼ã€‚æœ‰çš„æ˜¯æŠ˜ç£¨äººçš„ï¼Œè®¾è®¡ç”¨æ¥æŠŠå€™é€‰äººæ”¾åœ¨å·¨å¤§åŽ‹åŠ›ä¸‹ã€‚è¿™æ˜¯ä¸ºäº†è¿™æ ·ä¸€ä¸ªæœ‰ç”¨çš„ç›®çš„ï¼šåœ¨åŽ‹åŠ›ä¸‹æŠ˜å°„å‡ºæ€§æ ¼ç¼ºé™·å’Œå¼±ç‚¹ã€‚å€™é€‰äººå¯¹å¾…é¢è¯•官ä¸ä¼šæ¯”对待他们自己更诚实,而且,人的自欺能力是令人惊奇的。 + +ä½ åº”å½“ï¼Œæœ€å°‘ï¼Œå¯¹å€™é€‰äººè¿›è¡Œä¸¤ä¸ªå°æ—¶çš„与å£å¤´è€ƒæ ¸ç­‰ä»·çš„æŠ€æœ¯æŠ€èƒ½è€ƒæ ¸ã€‚实践åŽï¼Œä½ ä¼šèƒ½å¤Ÿå¿«é€Ÿäº†è§£ä»–们知é“什么,快速收缩他们ä¸çŸ¥é“çš„æ¥æ ‡æ˜Žè¾¹ç•Œã€‚é¢è¯•者会尊é‡è¿™ä»¶äº‹æƒ…。我有几次å¬é¢è¯•者说é¢è¯•çš„è´¨é‡æ˜¯ä»–们选择公å¸çš„ä¸€ä¸ªåŠ¨æœºã€‚èªæ˜Žäººä¼šå› ä»–们的技能而被雇佣,而éžä»–们之å‰å·¥ä½œè¿‡çš„地方或他们上了哪个学校或者一些无关紧è¦çš„特å¾ã€‚ + +åšè¿™äº›äº‹æƒ…,你也应当评估他们的学习能力,这比他们所知é“çš„è¦æ›´åŠ é‡è¦å¾—多。你也应当留心那些难以相处的人所散å‘出的ç«è¯å‘³ã€‚ä½ å¯èƒ½èƒ½å¤Ÿåœ¨é¢è¯•åŽé€šè¿‡æ¯”较笔记æ¥è¯†åˆ«è¿™ä¸€ç‚¹ï¼Œä½†åœ¨é¢è¯•的热烈环境中这很难分辨。人们交æµçš„能力以åŠä¸Žäººåˆä½œçš„能力比在最新的编程语言上领先更为é‡è¦ã€‚ + +ä¸€ä¸ªè¯»è€…æœ‰â€œåœ¨å®¶â€æµ‹éªŒé¢è¯•çš„ç»éªŒã€‚这有一个优点是æ­éœ²äº†ä¸€äº›é¢è¯•者能良好地自我表现但ä¸èƒ½å†™ä»£ç  - 这样的人是很多的。我个人没有å°è¯•è¿‡è¿™ç§æŠ€æœ¯ï¼Œä½†è¿™å¬èµ·æ¥æŒºåˆé€‚的。 + +最åŽï¼Œé¢è¯•ä¹Ÿæ˜¯ä¸€ä¸ªé”€å”®çš„è¿‡ç¨‹ã€‚ä½ åº”è¯¥æŠŠä½ çš„å…¬å¸æˆ–工程销售给候选人。然而,你是在与程åºå‘˜è°ˆè¯ï¼Œæ‰€ä»¥ä¸è¦å°è¯•改å˜äº‹å®žã€‚从å的事物开始讲起,最åŽä»¥å¥½çš„事物作为强有力的结æŸã€‚ + +Next [怎么决定什么时候使用奇妙的计算机科学](07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) diff --git a/zh-traditional/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md b/zh-traditional/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md new file mode 100644 index 0000000..92e2e94 --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md @@ -0,0 +1,15 @@ +# 如何决定什么时候使用奇妙的计算机科学 +[//]: # (Version:1.0.0) +有这样一些,例如算法,数æ®ç»“构,数学,还有其他æžå®¢èŒƒçš„大多数程åºå‘˜çŸ¥é“但很少使用的东西。实践中,这ç§å¥‡å¦™çš„ä¸œè¥¿å¤ªå¤æ‚了,通常是ä¸éœ€è¦çš„。例如,当你花费大多数时间在低效的数æ®åº“调用上时,æé«˜ç®—法是没有什么用的。ä¸å¹¸çš„大é‡ç¼–程由让系统相互交æµä»¥åŠä½¿ç”¨éžå¸¸ç®€å•的数æ®ç»“构去构建漂亮的用户界é¢ç»„æˆã€‚ + +高科技什么时候是åˆé€‚的科技?你什么时候应当打开一本书去找一些东西而éžä¸€ä¸ªæ¯«ç§’级算法?åšè¿™äº›æœ‰æ—¶å€™æ˜¯æœ‰ç”¨çš„,但这需è¦è¢«å°å¿ƒè¯„估。 + +对于潜在的计算机技术三个最é‡è¦çš„考虑是: + +- 它是å¦å……分å°è£…æ‰€ä»¥å…¶ä»–ä½Žçº§ç³»ç»Ÿé£Žé™©å’Œå¤æ‚度过é‡å¢žåР以åŠç»´æŠ¤ä»£ä»·å¾ˆä½Žï¼Ÿ +- å¥½å¤„æ˜¯å¦æ˜¯ä»¤äººæƒŠå¥‡çš„(例如,æˆç†Ÿç³»ç»Ÿçš„䏤倿ˆ–新系统的åå€ï¼Ÿï¼‰ +- 你能够高效测试和评估它å—? + +如果一个充分独立算法使用了些许奇妙的å¯ä»¥å‡å°‘ç¡¬ä»¶æ¶ˆè€—æˆ–å¢žåŠ æ•´ä¸ªç³»ç»Ÿçš„ä¸¤å€æ€§èƒ½è¡¨çŽ°çš„ç®—æ³•ï¼Œä¸è€ƒè™‘它å¯èƒ½æ˜¯æœ‰ç½ªçš„ã€‚äº‰è®ºè¿™æ ·ä¸€ä¸ªæ–¹æ³•çš„ä¸€ä¸ªå…³é”®æ˜¯ï¼Œè¯æ˜Žé£Žé™©ç¡®å®žæ˜¯ç›¸å½“的低,因为目标技术å¯èƒ½è¢«å……分研究过了,唯一的è¯é¢˜æ˜¯é›†æˆçš„风险。在这里一个程åºå‘˜çš„ç»éªŒå’Œè¯„估能够真的ååŒå¥‡å¦™çš„算法让集æˆå˜å¾—容易。 + +Next [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](08-How-to-Talk-to-Non-Engineers.md) diff --git a/zh-traditional/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md b/zh-traditional/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md new file mode 100644 index 0000000..d336760 --- /dev/null +++ b/zh-traditional/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md @@ -0,0 +1,19 @@ +# 如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ +[//]: # (Version:1.0.0) +工程师和程åºå‘˜ï¼ˆå°¤å…¶æ˜¯ï¼‰é€šå¸¸è¢«ä¸»æµæ–‡åŒ–认为与他人ä¸åŒã€‚è¿™æ„味ç€å…¶ä»–人与我们ä¸åŒã€‚与éžå·¥ç¨‹å¸ˆäº¤æµæ—¶ï¼Œè¿™æ˜¯å€¼å¾—记在心里的,你应该时刻去ç†è§£è§‚众。 + +éžå·¥ç¨‹å¸ˆèªæ˜Žï¼Œä½†åœ¨åˆ›é€ æŠ€æœ¯ç±»çš„东西ä¸åƒæˆ‘们那样è¸å®žã€‚我们制造东西。他们销售,处ç†ï¼Œç»Ÿè®¡ï¼Œç®¡ç†ï¼Œä½†ä»–ä»¬åœ¨åˆ¶é€ ä¸Šä¸æ˜¯ä¸“家。他们ä¸åƒå·¥ç¨‹å¸ˆé‚£æ ·æ“…长团队åˆä½œï¼ˆæ¯«æ— ç–‘问会有例外。)他们的社交技能在éžå›¢é˜ŸçŽ¯å¢ƒé‡Œé€šå¸¸åƒå·¥ç¨‹å¸ˆé‚£æ ·ï¼Œç”šè‡³æ¯”工程师è¦å¥½ï¼Œä½†ä»–ä»¬çš„å·¥ä½œä¸æ€»è¦æ±‚ä»–ä»¬åƒæˆ‘们那样进行亲密,ç贵的交æµï¼Œä»¥åŠç»†è‡´çš„任务划分。 + +éžå·¥ç¨‹å¸ˆå¯èƒ½å¤ªæ¸´æœ›ä»¥è‡³äºŽä¸èƒ½è¢«å–悦和与你亲近,他们å¯èƒ½åœ¨ä¸æ˜¯çœŸçš„对你满æ„的时候å´å¯¹ä½ è¯´â€œæ˜¯â€ï¼Œæˆ–者是因为他们有点怕你,然åŽä¸ä¼šå¯¹ä½ è¯´å®žè¯ã€‚ + +éžå·¥ç¨‹å¸ˆå¯ä»¥ç†è§£æŠ€æœ¯çš„东西,但他们ä¸ä¼šåšé‚£ä»¶ç”šè‡³å¯¹æˆ‘们æ¥è®²éƒ½å¾ˆå›°éš¾çš„事情 - 技术评审。他们确实ç†è§£æŠ€æœ¯æ˜¯å¦‚何工作的,但他们ä¸èƒ½ç†è§£ä¸ºä»€ä¹ˆä¸€ä¸ªç‰¹å®šçš„æ–¹æ³•需è¦èŠ±ä¸‰ä¸ªæœˆè€Œå¦ä¸€ç§æ–¹æ³•è¦èŠ±ä¸‰å¤©ã€‚ï¼ˆæ¯•ç«Ÿï¼Œç¨‹åºå‘˜å¯¹è¿™ç§ä¼°è®¡ä¹Ÿæ„Ÿåˆ°äº‹å¤šå¾—坿€•。)这相当于一个巨大的和他们å作的机会。 + +与你的团队交谈时,你会ä¸å‡æ€ç´¢åœ°ä½¿ç”¨æŸç§ç¨‹åº¦ä¸Šçš„简略表达方å¼ï¼Œä¸€ç§ç®€å•的语言更有效率,因为你通常对技术或者特别是你的产å“会有许多的共享ç»éªŒã€‚对于那些没有这些共享ç»éªŒçš„人ä¸ä½¿ç”¨ç®€ç•¥è¡¨è¾¾æ–¹å¼æ˜¯éœ€è¦ä½œå‡ºä¸€äº›åŠªåŠ›çš„ï¼Œç‰¹åˆ«æ˜¯ä½ å›¢é˜Ÿå†…éƒ¨çš„äººå‘˜ä¹Ÿåœ¨åœºçš„æ—¶å€™ã€‚è¿™äº›ç®€ç•¥çš„è¯æ±‡ä¼šè®©ä½ ä¸Žé‚£äº›æ²¡æœ‰åˆ†äº«åˆ°ç›¸å…³ç»éªŒçš„人之间构建出一é“墙,甚至更糟的是,浪费ç€ä»–们的时间。 + +与你的团队一起,基本的å‡è®¾å’Œç›®æ ‡ä¸éœ€è¦ç»å¸¸é‡ç”³ï¼Œå¤§å¤šæ•°è°ˆè¯é›†ä¸­äºŽç»†èŠ‚ã€‚ä¸Žå¤–äººä¸€èµ·ï¼Œå°±æ˜¯å¦ä¸€å›žäº‹äº†ã€‚他们å¯èƒ½ä¸ç†è§£ä½ è®¤ä¸ºç†æ‰€å½“然的东西。由于你把这当åšç†æ‰€å½“然,并且没有é‡ç”³å®ƒä»¬ï¼Œä½¿å¾—你们的谈è¯é™·å…¥è¿™æ ·ä¸€ç§æƒ…况:你å¯èƒ½è®¤ä¸ºä½ ä»¬ç›¸äº’ç†è§£ï¼Œä½†äº‹å®žä¸Šæœ‰ä¸€ä¸ªå·¨å¤§çš„误解。你应当å‡è®¾ä½ ä¼šæœ‰é”™è¯¯çš„交æµï¼Œå¹¶ä¸”ä»”ç»†è§‚å¯ŸåŽ»æ‰¾å‡ºè¿™æ ·çš„è¯¯è§£ã€‚è¯•ç€æ€»ç»“或将你说的东西分点,æ¥ç¡®ä¿ä»–们能够ç†è§£ã€‚如果你有机会ç»å¸¸ä¸Žä»–们è§é¢ï¼ŒèŠ±ä¸€ç‚¹æ—¶é—´è¯¢é—®ä½ æ˜¯å¦åœ¨æœ‰æ•ˆåœ°äº¤æµï¼Œä»¥åŠä½ å¯ä»¥æ€Žæ ·æŠŠå®ƒåšå¾—æ›´å¥½ã€‚å¦‚æžœäº¤æµæœ‰é—®é¢˜ï¼Œåœ¨å¯¹ä»–们失望å‰ï¼Œå¯»æ‰¾æ–¹æ³•去æé«˜ä½ è‡ªå·±çš„实践。 + +我喜欢与éžå·¥ç¨‹å¸ˆå·¥ä½œã€‚è¿™æä¾›äº†ç»å¤§çš„æœºä¼šæ¥å­¦ä¹ ä¸Žä¼ æŽˆã€‚ä½ å¯ä»¥ç»å¸¸ç”±å®žä¾‹å¾—到关于你的交æµçš„é˜è¿°çš„æŒ‡å¼•。工程师被训练于从混乱中梳ç†ç§©åºï¼Œä»Žå›°æƒ‘中得到解释,éžå·¥ç¨‹å¸ˆä¼šå› æ­¤å–œæ¬¢æˆ‘们。因为我们有技术评审,并且通常å¯ä»¥ç†è§£å•†ä¸šè¯é¢˜ï¼Œæˆ‘们ç»å¸¸å¯ä»¥å‘现一个简å•的方法æ¥è§£å†³é—®é¢˜ã€‚ + +很多时候éžå·¥ç¨‹å¸ˆä¼šå‡ºäºŽå¥½æ„以åŠä¸€ç§æ­£ç¡®åšäº‹æƒ…的欲望去规划他们认为会让我们更容易的事情,事实上存在一个仅能通过借助你的技术评审å助外人的观点看到的好得多的方法。我个人喜欢æžé™ç¼–程因为它处ç†äº†è¿™ç§ä½Žæ•ˆï¼Œé€šè¿‡ä¸Žå¿«é€Ÿè¯„估相结åˆï¼Œä½¿å¾—å‘çŽ°æˆæœ¬ä¸Žå¥½å¤„最佳结åˆçš„æ–¹æ³•更加容易。 + +Next [高级技能](../../3-Advanced) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md b/zh-traditional/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md new file mode 100644 index 0000000..827ee3a --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md @@ -0,0 +1,14 @@ +# å¦‚ä½•ä¿æŒæ´»åŠ› +[//]: # (Version:1.0.0) +åˆ›å»ºç¾Žä¸½ï¼Œæœ‰ç”¨ï¼Œèªæ˜Žçš„东西的欲望能高度调动程åºå‘˜çš„ç§¯æžæ€§ã€‚è¿™æ˜¯å¥‡å¦™è€Œä»¤äººæƒŠå¥‡çš„ã€‚è¿™ç§æ¬²æœ›å¯¹ç¨‹åºå‘˜æ—¢ä¸ç‰¹æ®Šä¹Ÿä¸æ™®é,但在程åºå‘˜ä¸­ï¼Œå®ƒæ˜¯å¦‚此强烈而普é以至于它把程åºå‘˜ä¸Žå…¶ä»–角色的人们分割开æ¥ã€‚ + +这有一个现实而é‡è¦çš„æŽ¨è®ºã€‚如果当程åºå‘˜è¢«è¦æ±‚åšä¸€äº›æ—¢ä¸ç¾Žä¸½ï¼Œä¹Ÿæ²¡æœ‰ç”¨ï¼Œä¹Ÿä¸æ¼‚亮的事情,他们会斗志低è½ã€‚虽然å¯ä»¥é€šè¿‡åšä¸‘陋的,愚蠢的,无èŠçš„东西赚很多的钱,但最åŽï¼Œä¹è¶£æ‰ä¼šä¸ºå…¬å¸èµšæœ€å¤šçš„钱。 + +很明显,有一些完全由动机技术组织起æ¥çš„工业适用这里的情况。这些我å¯ä»¥è¯†åˆ«çš„特定的编程中的事情有: +- 为工作使用最好的语言 +- 寻找机会去使用新技术,新语言,新科技 +- å°è¯•在æ¯ä¸ªå·¥ç¨‹é‡Œå­¦ä¹ æˆ–教授一些东西,å³ä½¿å¾ˆå° + +最åŽï¼Œå¯èƒ½çš„è¯ï¼Œä¼°é‡ä¸ªäººæ¿€åŠ±çš„ä¸œè¥¿å¯¹ä½ å·¥ä½œçš„å½±å“ã€‚ä¾‹å¦‚ï¼Œä¿®å¤ bug æ—¶ï¼Œæ•°ä¸€æ•°æˆ‘å®Œå…¨ä¸æ„Ÿå…´è¶£çš„ bug 的数目,因为这和ä»ç„¶å­˜åœ¨çš„ bug æ•°ç›®æ˜¯ç‹¬ç«‹çš„ï¼Œå¹¶ä¸”è¿™ä¹Ÿæ˜¯å½±å“æˆ‘对公å¸çš„顾客的增值的最å°çš„å¯èƒ½æ–¹å¼ã€‚把æ¯ä¸ª bug 和一个高兴的顾客关è”èµ·æ¥ï¼Œ*是*对我个人的激励。 + +Next [如何被广泛信任](02-How-to-be-Widely-Trusted.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md b/zh-traditional/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md new file mode 100644 index 0000000..14b5240 --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md @@ -0,0 +1,7 @@ +# 如何被广泛信任 +[//]: # (Version:1.0.0) +值得信任,æ‰èƒ½è¢«ä¿¡ä»»ã€‚你也应该让别人了解你。如果没人了解你,没人会为你投票。跟你亲近的人一起,比如队å‹ï¼Œè¿™åº”è¯¥ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚对你部门或团队以外的人,你通过责任和åšçŸ¥å»ºç«‹ä¿¡ä»»ã€‚æœ‰æ—¶æœ‰äººä¼šæ»¥ç”¨ä¿¡ä»»ï¼Œå¹¶è¦æ±‚æ— ç†ç”±çš„赞åŒã€‚ä¸è¦å®³æ€•,解释因这ç§èµžåŒä¼šè®©ä½ å¿…须放弃什么。 + +ä¸è¦ä¸æ‡‚装懂。与队å‹ä»¥å¤–的人一起时,你必须清除地区分“当下在我脑å­é‡Œä¸æ‡‚的东西â€ä»¥åŠâ€œæˆ‘æ›¾ç»æ²¡æœ‰è®¤è¯†åˆ°çš„东西â€ã€‚ + +Next [如何在时间和空间æƒè¡¡](03-How-to-Tradeoff-Time-vs-Space.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md b/zh-traditional/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md new file mode 100644 index 0000000..6b309ed --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md @@ -0,0 +1,15 @@ +# 如何在时间与空间æƒè¡¡ +[//]: # (Version:1.0.0) +没有上过大学的è¯ï¼Œä½ ä¹Ÿå¯ä»¥æˆä¸ºä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œä½†ä½ ä¸çŸ¥é“åŸºæœ¬çš„è®¡ç®—å¤æ‚度ç†è®ºçš„è¯ï¼Œä½ ä¸å¯èƒ½æˆä¸ºä¸€ä¸ªå¥½çš„进阶程åºå‘˜ã€‚ä½ ä¸éœ€è¦çŸ¥é“‘O’的定义,但我个人认为你应该ç†è§£â€˜å¸¸é‡æ—¶é—´â€™ï¼Œâ€˜nlogn’,'n²'的区别。你å¯èƒ½å¯ä»¥ä¸é è¿™æ–¹é¢çš„知识,凭直觉知é“如何在时间和空间之间æƒè¡¡ï¼Œä½†æ²¡æœ‰è¿™ç§çŸ¥è¯†ï¼Œä½ å°†ä¸ä¼šæœ‰ä¸€ä¸ªå’Œä½ åŒäº‹äº¤æµçš„稳固基础。 + +在设计或ç†è§£ç®—法的过程中,算法花费的时间有时候是一个以输入é‡ä¸ºè‡ªå˜é‡çš„å‡½æ•°ã€‚å½“è¿™ç§æƒ…况å‘生时,如果è¿è¡Œæ—¶é—´ä¸Žè¾“å…¥é‡çš„对数的 n 倿ˆæ­£æ¯”,我们å¯ä»¥è¯´ä¸€ä¸ªç®—法的最å/期望/最好情况è¿è¡Œæ—¶é—´æ˜¯'nlogn',这个定义和é˜è¿°çš„æ–¹å¼ä¹Ÿå¯ä»¥è¢«åº”用在数æ®ç»“æž„å ç”¨çš„空间上。 + +å¯¹æˆ‘æ¥æ—¶å€™ï¼Œè®¡ç®—夿‚度ç†è®ºæ˜¯ç¾Žå¦™çš„,并且与物ç†å­¦ä¸€æ ·æ„义深远,并且å¯èƒ½è¿˜æœ‰å¾ˆé•¿çš„è·¯è¦èµ°ï¼ + +时间(处ç†å™¨å‘¨æœŸï¼‰å’Œç©ºé—´ï¼ˆå†…存)å¯ä»¥ç›¸äº’交易。工程是关于妥å的,这就是一个好的例å­ã€‚å®ƒå¹¶ä¸æ€»æ˜¯æœ‰æ¡ç†çš„,然而,编ç ä¸€äº›ä¸œè¥¿æ—¶æ›´åŠ ç´§å‡‘å¯ä»¥èŠ‚çœç©ºé—´ï¼Œä½†è¦ä»¥è§£ç æ—¶èŠ±è´¹æ›´å¤šçš„å¤„ç†æ—¶é—´ä¸ºä»£ä»·ã€‚ä½ å¯ä»¥é€šè¿‡ç¼“å­˜èŠ‚çœæ—¶é—´ï¼Œä¹Ÿå°±æ˜¯ï¼ŒèŠ±è´¹ç©ºé—´åŽ»å­˜å‚¨æŸäº›ä¸œè¥¿çš„一个本地副本,但è¦ä»¥ç»´æŒç¼“存的一致性为代价。你å¶å°”å¯ä»¥é€šè¿‡æŠŠæ›´å¤šä¿¡æ¯æ”¾åœ¨ä¸€ä¸ªæ•°æ®ç»“构里æ¥èŠ‚çœæ—¶é—´ã€‚这通常åªä¼šæœ‰è¾ƒå°çš„空间å ç”¨ï¼Œä½†å¯èƒ½ä¼šä½¿ç®—æ³•å¤æ‚化。 + +æé«˜æ—¶é—´ç©ºé—´è½¬æ¢ç»å¸¸æŠŠå®ƒä»¬ä¸­çš„一个或å¦ä¸€ä¸ªæˆå‰§æ€§åœ°æ”¹å˜ã€‚然而,在你开始åšè¿™ä¸ªå·¥ä½œå‰ï¼Œä½ åº”该问你自己,你将è¦ä¼˜åŒ–çš„æ˜¯å¦æ˜¯æœ€éœ€è¦ä¼˜åŒ–的?研究算法是有趣的,但你ä¸èƒ½è®©è¿™é®è”½äº†ä½ çš„åŒçœ¼è®©ä½ çœ‹ä¸åˆ°è¿™æ ·ä¸€ä¸ªå†·é…·çš„äº‹å®žï¼šä¼˜åŒ–ä¸€äº›ä¸æ˜¯é—®é¢˜çš„问题将ä¸ä¼šå¸¦æ¥ä»»ä½•明显的区别,但å´ä¼šé€ æˆæµ‹è¯•的负担。 + +现代计算机内存越æ¥è¶Šä¾¿å®œï¼Œå› ä¸ºä¸åƒå¤„ç†å™¨æ—¶é—´ï¼Œä½ åœ¨è¾¾åˆ°è¾¹ç•Œå‰ä½ ä¸èƒ½çœ‹è§å®ƒï¼Œä½†è¿™ç§å¤±è´¥æ˜¯ç¾é𾿀§çš„。使用内存也有éšè—的代价,比如你影å“了其他需è¦è¢«ä¿ç•™çš„程åºï¼Œä»¥åŠä½ åˆ†é…和释放内存的时间。在你想è¦èŠ±æ›´å¤šç©ºé—´åŽ»æ¢å–速度之å‰ï¼Œè¯·ä»”细考虑这一点。 + +Next [如何进行压力测试](04-How-to-Stress-Test.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md b/zh-traditional/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md new file mode 100644 index 0000000..888861a --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md @@ -0,0 +1,17 @@ +# 如何进行压力测试 +[//]: # (Version:1.0.0) +压力测试很有趣,一开始好åƒåŽ‹æµ‹çš„ç›®çš„æ˜¯æ‰¾å‡ºç³»ç»Ÿåœ¨è´Ÿè½½ä¸‹èƒ½ä¸èƒ½å·¥ä½œã€‚现实中,系统在负载下确实能工作,但在负载足够é‡çš„æŸäº›æƒ…å†µä¸‹ä¸èƒ½å·¥ä½œã€‚我把这å«åš*碰å£*或*æ’žå“*[1]。å¯èƒ½ä¼šæœ‰ä¾‹å¤–,但大多数情况下会有这么一堵“墙â€ã€‚压测的目的是为了指出墙在哪里,然åŽå¼„清楚怎么把墙移得更远些。 + +压测计划需è¦åœ¨å·¥ç¨‹çš„æ—©æœŸå°±è§„划好,因为它ç»å¸¸æœ‰åŠ©äºŽå¼„æ¸…æ¥šåˆ°åº•ä»€ä¹ˆæ˜¯è¢«æœŸæœ›çš„ã€‚ä¸¤ç§’çš„ç½‘é¡µè¯·æ±‚æ˜¯ä¸€ä¸ªæ‚²ä¼¤çš„å¤±è´¥è¿˜æ˜¯ä¸€ä¸ªäº†ä¸èµ·çš„æˆåŠŸï¼Ÿ500个并å‘用户是å¦è¶³å¤Ÿï¼Ÿè¿™ï¼Œå½“ç„¶ï¼Œè§†æƒ…å†µè€Œå®šï¼Œä½†ä¸€ä¸ªäººåœ¨è®¾è®¡ç³»ç»Ÿæ—¶å°±åº”è¯¥çŸ¥é“æ»¡è¶³éœ€æ±‚的答案。压测需è¦è¶³å¤Ÿå¥½åœ°ä¸ºçŽ°å®žå»ºæ¨¡ï¼Œä½¿ä¹‹è¶³å¤Ÿæœ‰ç”¨ã€‚éžå¸¸å®¹æ˜“地模拟500个ä¸ç¨³å®šå¹¶ä¸”ä¸å¯é¢„æµ‹çš„äººå¹¶è¡Œä½¿ç”¨ç³»ç»Ÿä¸æ˜¯çœŸçš„å¯èƒ½çš„,但我们å¯ä»¥è‡³å°‘创造500个模拟(用户),然åŽå°è¯•模拟他们å¯èƒ½åšçš„部分事情。 + +在压测中,从轻负载开始,然åŽä¸ºç³»ç»Ÿåœ¨ä¸€äº›ç»´åº¦ä¸Šå¢žåР夿‚ - 比如输入频率和输入规模 - 直到你抵达那堵墙。如果墙太近了以至于ä¸èƒ½æ»¡è¶³ä½ çš„需è¦ï¼Œå¼„æ˜Žç™½å“ªä¸ªèµ„æºæ˜¯ç“¶é¢ˆï¼ˆè¿™é€šå¸¸æ˜¯é‚£ä¸ªä¸»è¦çš„资æºï¼‰ã€‚它是内存?处ç†å™¨ï¼ŸI/O?网络带宽?还是数æ®è¿žæŽ¥ï¼Ÿç„¶åŽå¼„明白你å¯ä»¥æ€Žä¹ˆç§»åŠ¨é‚£å µå¢™ã€‚è®°å½•ä¸‹ç§»åŠ¨å¢™çš„é‚£ä¸ªè¦ç´ ï¼Œä¹Ÿå°±æ˜¯å¢žåŠ äº†ç³»ç»Ÿå¯ä»¥å¤„ç†çš„负载的那个è¦ç´ ï¼Œå®ƒå¯èƒ½ä¸èƒ½çœŸæ­£åœ¨ä½Žè´Ÿè½½ç³»ç»Ÿä¸‹äº§ç”Ÿå±å®³ã€‚但通常é‡è´Ÿè½½ä¸‹çš„表现比轻负载下更é‡è¦ã€‚ + +你必须能够观察几个ä¸åŒç»´åº¦ï¼Œä»¥æ­¤æ¥ä¸ºä¹‹æž„建一个æ€ç»´æ¨¡åž‹ï¼›å•一的技术是ä¸å¤Ÿçš„。例如,日志ç»å¸¸æ˜¯ç»™å‡ºç³»ç»Ÿä¸­ä¸¤ä¸ªäº‹ä»¶é—´çš„æŒ‚钟时间的好主æ„。但除éžä»”细构建,日志ä¸ä¼šç»™å‡ºå†…存使用的å¯è§æ€§ç”šè‡³æ˜¯æ•°æ®ç»“构的大å°ã€‚相似的,在现代系统里,大é‡ç”µè„‘和许多软件系统是åˆä½œçš„ã€‚ç‰¹åˆ«æ˜¯åœ¨ä½ ç¢°åˆ°é‚£å µå¢™æ—¶ï¼ˆä¹Ÿå°±æ˜¯ï¼Œè¡¨çŽ°ä¸Žè¾“å…¥ä¸æˆçº¿æ€§æ¯”例时),这些软件系统å¯èƒ½æˆä¸ºç“¶é¢ˆã€‚对这些系统的é€è§†åŠ›ï¼Œç”šè‡³ä»…ä»…å¯¹æ‰€æœ‰å‚与工作的机器的处ç†å™¨å𿵋é‡ï¼Œéƒ½å¯èƒ½æ˜¯éžå¸¸æœ‰å¸®åŠ©çš„ã€‚ + +æ„识到墙在哪里的关键ä¸ä»…是移动这堵墙,而且也是æä¾›å¯¹å…¶çš„预测能力。这样公å¸å¯ä»¥å¾—到更高效的管ç†ã€‚ + +--- + +[1] "æ’žå“" + +Next [如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡](05-How-to-Balance-Brevity-and-Abstraction.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md b/zh-traditional/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md new file mode 100644 index 0000000..183c6e6 --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md @@ -0,0 +1,9 @@ +# 如何在简æ´ä¸ŽæŠ½è±¡é—´å¹³è¡¡ +[//]: # (Version:1.0.0) +æŠ½è±¡æ˜¯ç¼–ç¨‹çš„å…³é”®ã€‚ä½ åº”è¯¥ä»”ç»†é€‰æ‹©ä½ éœ€è¦æŠ½è±¡çš„ç¨‹åº¦ã€‚å……æ»¡æ´»åŠ›çš„åˆå­¦è€…ç»å¸¸åˆ›å»ºè®¸å¤šæ²¡æœ‰ä»€ä¹ˆç”¨çš„æŠ½è±¡ã€‚一个标识是,你是å¦åˆ›å»ºäº†è¿™æ ·ä¸€ä¸ªç±»,ä¸åŒ…å«ä»»ä½•代ç å¹¶ä¸”没有真的åšä»€ä¹ˆäº‹æƒ…,é™¤äº†æŠ½è±¡ä¸€äº›ä¸œè¥¿ã€‚è¿™ç§æŠ½è±¡æ˜¯å¯ä»¥ç†è§£çš„,但代ç çš„ç®€æ´æ€§çš„价值必须与代ç çš„æŠ½è±¡ä»·å€¼ç›¸æƒè¡¡ã€‚有时候,我们å¯ä»¥çœ‹åˆ°ä¸€ç§çƒ­æƒ…çš„ç†æƒ³ä¸»ä¹‰è€…çŠ¯çš„é”™è¯¯ï¼šåœ¨å·¥ç¨‹çš„ä¸€å¼€å§‹ï¼Œå®šä¹‰äº†ä¸€å¤§å †çš„çœ‹èµ·æ¥æŠ½è±¡å¾—å¾ˆç¾Žçš„ç±»ï¼Œç„¶åŽä»–会推测说它们å¯ä»¥å¤„ç†æ¯ä¸€ä¸ªå¯èƒ½å‡ºçŽ°çš„æƒ…å†µã€‚éšç€é¡¹ç›®æŽ¨è¿›åŠç事掺æ‚è¿›æ¥ï¼Œè¿™äº›ä»£ç æœ¬èº«å˜å¾—混乱了。函数体比他们本æ¥è¯¥æœ‰çš„æ ·å­è¿˜è¦é•¿ã€‚空的类是一ç§å†™æ–‡æ¡£çš„è´Ÿæ‹…ï¼Œåœ¨åŽ‹åŠ›ä¹‹ä¸‹ï¼Œå®ƒä»¬ä¼šè¢«å¿½ç•¥ã€‚å¦‚æžœè®©èŠ±åœ¨æŠ½è±¡ä¸Šçš„ç²¾åŠ›åŽ»ä¿æŒå…¶ç®€çŸ­ï¼Œæœ€åŽçš„结果应该会更好。这是一ç§*推测编程*的形å¼ã€‚我强烈推è PAUL gRAHAM[PGSite] 的这篇文章 ['Succinctness is Power' by Paul Graham](http://www.paulgraham.com/power.html)。 + +有这样一ç§å…³äºŽ*ä¿¡æ¯å°è£…*å’Œ*é¢å‘对象编程*的有用技能,但有时候它们被带远了。这些技术让一个人抽象地编ç å¹¶é¢„è®¡å˜æ•°ã€‚然而,我个人认为,你ä¸åº”该写太多推测性的代ç ã€‚例如,在一个对象里用增é‡å™¨å’Œè®¿é—®å™¨éšè—一个整数å˜é‡æ˜¯ä¸€ç§å¯æŽ¥å—的风格,这样å˜é‡æœ¬èº«å°±æ²¡æœ‰æš´éœ²ï¼Œä»…仅暴露了很少的关于它的接å£ã€‚这确实å…许了å˜é‡çš„实现的改å˜ä¸å½±å“调用代ç ï¼Œå¹¶ä¸”å¯èƒ½å¯¹ä¸€ä¸ªå¿…é¡»æä¾›ä¸€ä¸ªç¨³å®š API 的库编写者是åˆé€‚的。我ä¸è®¤ä¸ºè¿™ç§å¥½å¤„会超过其冗长的代价,特别是当我的团队拥有调用代ç å¹¶å› æ­¤å¯ä»¥æŠŠè°ƒç”¨å™¨é‡æž„为比原æ¥çš„æ›´å®¹æ˜“时。四到五行多余的代ç ä¼šæ˜¯è¿™ç§æŽ¨æµ‹æ€§å¥½å¤„的沉é‡ä»£ä»·ã€‚ + +å¯ç§»æ¤æ€§ä¹Ÿæœ‰ç±»ä¼¼çš„é—®é¢˜ã€‚ä»£ç æ˜¯å¦åº”当å¯ç§»æ¤åˆ°ä¸åŒçš„电脑,编译器,软件系统或平å°ï¼Ÿè¿˜æ˜¯ç®€å•地传输?我认为,ä¸å¯ç§»æ¤ï¼ŒçŸ­è€Œç®€å•ä¼ è¾“çš„ä»£ç æ¯”长而å¯ç§»æ¤çš„代ç è¦å¥½ã€‚把ä¸å¯ç§»æ¤ä»£ç é™åˆ¶åœ¨ç‰¹å®šçš„领域是一个想对轻æ¾è€Œä¸”无疑是好的主æ„。比如一个使用了特定 DBMS 的数æ®åº“查询的类。 + +Next [如何学习新技能](06-How-to-Learn-New-Skills.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md b/zh-traditional/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md new file mode 100644 index 0000000..b81efbc --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md @@ -0,0 +1,13 @@ +# 如何学习新技能 +[//]: # (Version:1.0.0) +å­¦ä¹ æ–°æŠ€èƒ½ï¼Œå°¤å…¶æ˜¯éžæŠ€æœ¯ç±»ï¼Œæ˜¯æœ€å¤§çš„ä¸€ç§ä¹è¶£ã€‚大多数公å¸ä¼šæ›´åŠ æœ‰æ–—å¿—å¦‚æžœå®ƒä»¬æ˜Žç™½è¿™å¯¹ç¨‹åºå‘˜æ¥è¯´æ˜¯å¤šå¤§çš„æ¿€åŠ±ã€‚ + +人类通过*åš*æ¥å­¦ã€‚读书和上课是有用的。但你对一个从ä¸å†™ç¨‹åºçš„程åºå‘˜ä¼šæœ‰ä»»ä½•敬æ„å—?学习任何技能,你应该把自己放在一个å¯ä»¥ç»ƒä¹ æŠ€èƒ½çš„宽容的ä½ç½®ã€‚学习一个新的编程语言时,在你必须åšä¸€ä¸ªå¤§å·¥ç¨‹å‰ï¼Œè¯•ç€ç”¨å®ƒåšä¸€ä¸ªå°çš„工程。学习管ç†è½¯ä»¶é¡¹ç›®æ—¶ï¼Œå…ˆè¯•ç€ç®¡ç†ä¸€ä¸ªå°çš„工程。 + +ä¸€ä¸ªå¥½çš„å¯¼å¸ˆä¸æ˜¯ä½ åšäº‹æƒ…的替代å“,而是比一本书更好的存在。你å¯ä»¥æä¾›ä»€ä¹ˆç»™ä¸€ä¸ªæ½œåœ¨çš„导师,作为他的知识的交æ¢ï¼Ÿè‡³å°‘,你应该努力学习这样他们的时间æ‰ä¸ä¼šè¢«æµªè´¹ã€‚ + +试ç€è®©ä½ çš„ boss 给你正规的训练,但必须知é“,这通常并ä¸ä¼šæ¯”把相åŒé‡çš„æ—¶é—´èŠ±åœ¨ç”¨ä½ æƒ³å­¦çš„æŠ€èƒ½æ¥ç®€å•玩è€è¦å¥½ä¸Šå¤šå°‘ã€‚ç„¶è€Œï¼Œè¦æ±‚训练比在我们ä¸å®Œç¾Žä¸–ç•Œé‡Œçš„çŽ©è€æ—¶é—´è¦å®¹æ˜“å¾—å¤šï¼Œå°½ç®¡å¤§é‡æ­£è§„è®­ç»ƒåªæ˜¯åœ¨è¯¾ç¨‹ä¸Šç¡è§‰ï¼Œç­‰ç€æ™šé¤èšä¼šã€‚ + +如果你领导团队,需è¦çŸ¥é“他们是怎么学习的,并且通过给他们安排适é‡çš„和他们感兴趣的技能的工程æ¥é”»ç‚¼ä»–们。ä¸è¦å¿˜è®°ç¨‹åºå‘˜æœ€é‡è¦çš„æŠ€èƒ½ä¸æ˜¯æŠ€æœ¯ã€‚让你的团队æˆå‘˜æœ‰ä¸€ä¸ªæœºä¼šåŽ»çŽ©ï¼Œé”»ç‚¼å‹‡æ°”ï¼Œè¯šå®žï¼Œä»¥åŠäº¤æµã€‚ + +Next [学会打字](07-Learn-to-Type.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/07-Learn-to-Type.md b/zh-traditional/2-Intermediate/Personal-Skills/07-Learn-to-Type.md new file mode 100644 index 0000000..d5e032a --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/07-Learn-to-Type.md @@ -0,0 +1,5 @@ +# 学会打字 +[//]: # (Version:1.0.0) +å­¦ä¼šç›²æ‰“ã€‚è¿™æ˜¯ä¸€ä¸ªè¿›é˜¶æŠ€èƒ½ï¼Œå› ä¸ºå†™ä»£ç æ˜¯å¦‚此困难以至于你的打字速度是ä¸å¤ªç›¸å…³çš„,并且ä¸èƒ½å‰Šå‡å†™ä»£ç èŠ±è´¹çš„æ—¶é—´ï¼Œä¸ç®¡ä½ æ‰“字有多好。但是,到了你是一个进阶程åºå‘˜çš„æ—¶å€™ï¼Œä½ å¯èƒ½èŠ±è´¹å¾ˆå¤šæ—¶é—´åœ¨ç”¨è‡ªç„¶è¯­è¨€ç»™ä½ çš„åŒäº‹æˆ–ä»–äººå†™ä¸œè¥¿ä¸Šã€‚è¿™æ˜¯å¯¹ä½ çš„è´£ä»»æ„Ÿæ˜¯ä¸€ç§æœ‰è¶£çš„æµ‹è¯•,学习这样的东西需è¦ä¸“æ³¨çš„æ—¶é—´ï¼Œä½†ä¸æ€Žä¹ˆæœ‰è¶£ã€‚有这样一个传说,当 Michael Tiemann 在 MCC 的时候,人们会站在他的门外é¢å€¾å¬ä»–击键的声音,这ç§å£°éŸ³æ˜¯å¦‚此的急促以至于难以分辨。 + +Next [如何åšé›†æˆæµ‹è¯•](08-How-to-Do-Integration-Testing.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md b/zh-traditional/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md new file mode 100644 index 0000000..b12a93d --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md @@ -0,0 +1,7 @@ +# 如何åšé›†æˆæµ‹è¯• +[//]: # (Version:1.0.0) +é›†æˆæµ‹è¯•是对已ç»è¿›è¡Œå•元测试的å„ä¸ªéƒ¨åˆ†çš„ä¸€ç§æ•´åˆæµ‹è¯•ã€‚é›†æˆæ˜¯æ˜‚贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 + +ç†æƒ³æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥è¿™æ ·ç»„ç»‡ä¸€ä¸ªé¡¹ç›®ï¼Œä½¿å¾—æœ€åŽæ²¡æœ‰ä¸€ä¸ªé˜¶æ®µæ˜¯å¿…须通过显å¼é›†æˆæ¥è¿›è¡Œçš„。这比在项目过程中,éšç€äº‹æƒ…完æˆé€æ¸é›†æˆäº‹æƒ…è¦å¥½å¾—多。如果这是ä¸å¯é¿å…的,请仔细评估。 + +Next [交æµè¯­è¨€](09-Communication-Languages.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/09-Communication-Languages.md b/zh-traditional/2-Intermediate/Personal-Skills/09-Communication-Languages.md new file mode 100644 index 0000000..e442315 --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/09-Communication-Languages.md @@ -0,0 +1,11 @@ +# 交æµè¯­è¨€ +[//]: # (Version:1.0.0) +在语法系统里,有一些正å¼å®šä¹‰çš„,éžç¼–程语言但是*交æµè¯­è¨€*的语言,它们为促进交æµè€Œéžæ ‡å‡†è€Œç‰¹åˆ«è®¾è®¡ã€‚2003年,最é‡è¦çš„è¿™ç§è¯­è¨€æœ‰ï¼š UML, XML, SQL。你应该熟悉这些东西,这样你就å¯ä»¥å¾ˆå¥½åœ°äº¤æµå¹¶ä¸”决定什么时候去使用它们。 + +UML 是一个丰富的用图表æè¿°è®¾è®¡çš„æ­£å¼ç³»ç»Ÿã€‚å®ƒçš„ç¾Žä¸½ä¹‹å¤„åœ¨äºŽå®ƒæ—¢è™šæ‹Ÿåˆæ­£å¼ï¼Œåœ¨ä½œè€…和观众都了解 UML çš„å‰æä¸‹ï¼Œå¯ä»¥å®¹çº³å¤§é‡çš„ä¿¡æ¯ã€‚你需è¦äº†è§£å®ƒï¼Œå› ä¸ºè®¾è®¡æœ‰æ—¶å€™å°±æ˜¯ç”¨è¿™ç§æ–¹å¼äº¤æµçš„。有一些éžå¸¸æœ‰ç”¨çš„工具å¯ä»¥è®©åˆ¶ä½œ UML 图看起æ¥éžå¸¸ä¸“业。在很多情况下,UML 太正å¼äº†ï¼Œæˆ‘自己会使用更简å•çš„*ç®±å­ä¸Žç®­å¤´*的风格æ¥è®¾è®¡å›¾æ ‡ã€‚但我éžå¸¸ç¡®å®š UML 对你æ¥è¯´è‡³å°‘跟学习拉ä¸è¯­ä¸€æ ·æœ‰ç”¨ï¼ˆè¯‘者注:国外拉ä¸è¯­ä½¿ç”¨å¾ˆå¹¿æ³›ï¼‰ã€‚ + +XML æ˜¯è®¾è®¡æ–°æ ‡å‡†çš„æ ‡å‡†ã€‚è¿™ä¸æ˜¯ä¸€ä¸ªæ•°æ®é—´äº¤æ¢çš„é—®é¢˜çš„è§£å†³æ–¹æ¡ˆï¼Œå°½ç®¡ä½ æœ‰æ—¶å€™ä¼šçœ‹åˆ°å®ƒåœ¨è¿™ç§æƒ…况下出现。更进一步,它是一ç§å—欢迎的对大部分数æ®äº¤æ¢çš„æ— èŠéƒ¨åˆ†çš„自动化,也就是,把表现结构化为线性åºåˆ—,还有将其转回一个结构。它æä¾›äº†ä¸€äº›æ¼‚亮的类型和正确性检查,尽管,åˆä¸€æ¬¡ï¼Œå®žè·µä¸­ä½ å¯èƒ½éœ€è¦çš„åªæ˜¯å…¶ä¸­çš„一部分。 + +SQL 是一ç§éžå¸¸æœ‰åŠ›è€Œä¸°å¯Œçš„æ•°æ®æŸ¥è¯¢å’Œæ“作语言,而éžä¸€ç§ç¼–程语言。它有许多ç§ç±»ï¼Œå…¸åž‹åœ°ä¾èµ–于产å“,但这没有标准核心那么é‡è¦ã€‚SQL 是关系数æ®åº“çš„*巧舌弗兰å¡*。你å¯èƒ½å¯ä»¥ä¹Ÿå¯èƒ½ä¸å¯ä»¥åœ¨ä»»ä½•领域从对关系数æ®åº“çš„ç†è§£ä¸­å—益,但你必须对它们和 SQL 的语法和å«ä¹‰æœ‰åŸºæœ¬çš„ç†è§£ã€‚ + +Next [é‡åž‹å·¥å…·](10-Heavy-Tools.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/10-Heavy-Tools.md b/zh-traditional/2-Intermediate/Personal-Skills/10-Heavy-Tools.md new file mode 100644 index 0000000..3843661 --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/10-Heavy-Tools.md @@ -0,0 +1,14 @@ +# é‡åž‹å·¥å…· +[//]: # (Version:1.0.0) +éšç€æˆ‘们的科技文化的进步,软件技术从ä¸å¯æƒ³è±¡ï¼Œåˆ°ç ”究,到新的产å“,到标准化产å“,到广泛å¯ç”¨å’Œå»‰ä»·äº§å“。这些é‡åž‹å·¥å…·å¯ä»¥æ‹‰åŠ¨å¾ˆå¤§çš„è´Ÿè½½ï¼Œä½†å¯èƒ½æ˜¯è¿›é˜¶çš„,并且需è¦èŠ±å¤§é‡æŠ•èµ„åŽ»ç†è§£ã€‚进阶程åºå‘˜å¿…须知é“如何管ç†å®ƒä»¬ä»¥åŠå®ƒä»¬ä»€ä¹ˆæ—¶å€™åº”该被使用或考虑。 + +现在在我看æ¥ï¼Œä¸€äº›æœ€å¥½çš„é‡åž‹å·¥å…·æ˜¯ï¼š + +- 关系数æ®åº“ï¼› +- 全文æœç´¢å¼•擎; +- 数学库; +- OpenGL; +- XML è§£æžå™¨ï¼› +- 电å­è¡¨æ ¼ã€‚ + +Next [å¦‚ä½•åˆ†æžæ•°æ®](11-How-to-analyze-data.md) diff --git a/zh-traditional/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md b/zh-traditional/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md new file mode 100644 index 0000000..2f970d8 --- /dev/null +++ b/zh-traditional/2-Intermediate/Personal-Skills/11-How-to-analyze-data.md @@ -0,0 +1,17 @@ +# å¦‚ä½•åˆ†æžæ•°æ® +[//]: # (Version:1.0.0) +当你检查一个商业活动并且å‘现了把它转æ¢ä¸ºè½¯ä»¶åº”用程åºçš„需求时,数æ®åˆ†æžæ˜¯è½¯ä»¶å¼€å‘早期的一个过程。这是一个官方的定义,当你,一个程åºå‘˜ï¼Œåº”该集中注æ„åŠ›åœ¨å†™åˆ«äººè®¾è®¡çš„ä¸œè¥¿çš„ä»£ç æ—¶ï¼Œè¿™å¯èƒ½ä¼šè®©ä½ ç›¸ä¿¡æ•°æ®åˆ†æžæ˜¯ä¸€ç§æ›´åº”该归入系统分æžçš„行为。如果我们严格éµå¾ªè½¯ä»¶å·¥ç¨‹èŒƒå¼ï¼Œè¿™å¯èƒ½æ˜¯æ­£ç¡®çš„。有ç»éªŒçš„程åºå‘˜ä¼šæˆä¸ºè®¾è®¡è€…,最尖é”çš„è®¾è®¡è€…å˜æˆå•†ä¸šåˆ†æžå¸ˆï¼Œå› æ­¤è¢«å† å去æ€è€ƒæ‰€æœ‰æ•°æ®éœ€è¦ï¼Œå¹¶ä¸”给你充分定义的任务去执行。这ä¸å®Œå…¨æ˜¯å¯¹çš„ï¼Œå› ä¸ºæ•°æ®æ˜¯æ¯ç§ç¼–程活动的核心。ä¸ç®¡ä½ åœ¨ä½ çš„程åºé‡Œåšä»€ä¹ˆï¼Œä½ ä¸æ˜¯åœ¨ç§»åŠ¨æ•°æ®å°±æ˜¯åœ¨ä¿®æ”¹æ•°æ®ã€‚商业分æžå¸ˆåˆ†æžçš„æ˜¯æ›´å¤§å°ºåº¦ä¸Šçš„需è¦ï¼Œè½¯ä»¶è®¾è®¡è€…更加压榨这个比例以至于,当问题在你的桌上è½åœ°æ—¶ï¼Œå¥½åƒä½ éœ€è¦åšçš„æ‰€æœ‰äº‹æƒ…æ˜¯åº”ç”¨èªæ˜Žçš„算法,开始移动已ç»å­˜åœ¨çš„æ•°æ®ã€‚ + +䏿˜¯è¿™æ ·çš„。 + +ä¸ç®¡ä½ å¼€å§‹è§‚å¯Ÿå®ƒçš„æ˜¯å“ªä¸ªé˜¶æ®µï¼Œæ•°æ®æ˜¯ä¸€ä¸ªè‰¯å¥½è®¾è®¡çš„应用程åºä¸»è¦è€ƒè™‘的因素,如果你仔细观察一个数æ®åˆ†æžå¸ˆæ˜¯æ€Žä¹ˆä»Žå®¢æˆ·è¯·æ±‚中获å–需求的,你会æ„è¯†åˆ°ï¼Œæ•°æ®æ‰®æ¼”了一个基本的角色。分æžå¸ˆåˆ›å»ºäº†æ‰€è°“çš„æ•°æ®æµè¡¨ï¼Œæ‰€æœ‰çš„æ•°æ®æºè¢«æ ‡è®°å‡ºæ¥ï¼Œä¿¡æ¯çš„æµåŠ¨è¢«å¡‘é€ å‡ºæ¥ã€‚清晰定义了什么数æ®åº”该是系统的一部分,设计师将会用数æ®å…³ç³»ï¼Œæ•°æ®äº¤æ¢å议,文件格å¼çš„å½¢å¼å¡‘é€ æ•°æ®æºï¼Œè¿™æ ·ä»»åŠ¡å°±å‡†å¤‡å¥½ä¼ é€’ç»™ç¨‹åºå‘˜äº†ã€‚然而,这个过程还没结æŸï¼Œå› ä¸ºä½ ï¼ˆç¨‹åºå‘˜ï¼‰åœ¨è¿™ä¸ªå‘¨å¯†çš„æ•°æ®æå–过程åŽï¼Œéœ€è¦åˆ†æžæ•°æ®ä»¥ç”¨æœ€å¥½çš„å¯èƒ½æ–¹å¼è¡¨çŽ°ä»»åŠ¡ã€‚ä½ çš„ä»»åŠ¡çš„åº•çº¿æ˜¯ Niklaus Wirth,多ç§è¯­è¨€ä¹‹çˆ¶ï¼Œçš„金å¥ï¼šâ€œç®—法+æ•°æ®ç»“æž„=程åºâ€ã€‚è¿™æ°¸è¿œä¸æ˜¯ä¸€ä¸ªç‹¬ç«‹çš„自嗨的算法。æ¯ä¸ªç®—法都至少被设计去åšä¸€äº›è‡³å°‘与一段数æ®ç›¸å…³çš„事情。 + +因此,由于算法ä¸ä¼šåœ¨çœŸç©ºä¸­æ»šåŠ¨è½®å­ï¼Œä½ éœ€è¦åˆ†æžå…¶ä»–人已ç»ä¸ºä½ æ ‡è®°å¥½çš„æ•°æ®å’Œå¿…须写入代ç çš„å¿…è¦çš„æ•°æ®ã€‚ +一个å°ä¾‹å­ä¼šä½¿å¾—事情更清楚。实现一个图书馆的æœç´¢ç¨‹åºæ—¶ï¼Œé€šè¿‡ä½ çš„说明书,用户用类型/作者标题/出版社/出版年份/页数æ¥é€‰æ‹©ä¹¦æœ¬ã€‚你的程åºçš„中级目标是æä¾›ä¸€ä¸ªåˆæ³•çš„ SQL 语å¥åŽ»æœç´¢åŽç«¯æ•°æ®åº“。基于这些需è¦ï¼Œä½ æœ‰å‡ ä¸ªé€‰æ‹©ï¼šæŒ‰é¡ºåºæ£€æŸ¥æ¯ä¸ªæŽ§åˆ¶æ¡ä»¶ï¼Œä½¿ç”¨ä¸€ä¸ª switch 语å¥ï¼Œæˆ–者几个 if 语å¥ï¼›ç”¨ä¸€ä¸ªæ•°æ®æŽ§åˆ¶æ•°ç»„,把它们与一个事件驱动引擎相连。 + +如果你的需求也包括æé«˜æŸ¥è¯¢æ€§èƒ½ï¼Œé€šè¿‡ç¡®è®¤æ¯ä¸ªé¡¹åœ¨ä¸€ä¸ªç‰¹æ®Šé¡ºåºé‡Œï¼Œä½ å¯èƒ½è€ƒè™‘使用组件树去构建你的 SQL 语å¥ã€‚正如你å¯ä»¥çœ‹åˆ°çš„,算法的选择ä¾èµ–于你决定使用或将è¦åˆ›å»ºçš„æ•°æ®ã€‚这样的决定产生高效算法和糟糕算法间的区别。 +然而,æ•ˆçŽ‡ä¸æ˜¯å”¯ä¸€è¦è€ƒè™‘的因素。你å¯èƒ½åœ¨ä½ çš„代ç é‡Œä½¿ç”¨ä¸€æ‰“命åå˜é‡ï¼Œè®©å®ƒå˜å¾—å°½å¯èƒ½é«˜æ•ˆã€‚但这样一段代ç å¯èƒ½ä¸èƒ½å®¹æ˜“地维护。å¯èƒ½ä¸ºä½ çš„å˜é‡é€‰æ‹©ä¸€ç§åˆé€‚的容器å¯ä»¥ä¿æŒç›¸åŒçš„速度,此外,在的你åŒäº‹æ˜Žå¹´çœ‹ä»£ç çš„æ—¶å€™ï¼Œè®©ä»–们能够更好地ç†è§£ä»£ç ã€‚更多的,选择一个良好设计的数æ®ç»“æž„å¯èƒ½å…许他们在ä¸é‡å†™ä»£ç çš„å‰æä¸‹ï¼Œæ‹“å±•ä½ çš„ä»£ç çš„功能。长久看æ¥ï¼Œä½ å¯¹æ•°æ®çš„选择决定了你结æŸä»£ç çš„工作åŽï¼Œå®ƒèƒ½å·¥ä½œå¤šä¹…。 + +让我给你看å¦ä¸€ä¸ªä¾‹å­ï¼Œåªæ˜¯ä¸€äº›æ€æƒ³ç²®é£Ÿï¼Œè®©æˆ‘们å‡è®¾ä½ çš„任务是找到字典里超过三ä½çš„åŒå­—异构è¯ï¼ˆä¸€ä¸ªå¼‚æž„è¯å¿…é¡»åœ¨åŒæ ·çš„字典里有å¦ä¸€ä¸ªè¯ï¼‰ã€‚如果你把这当åšä¸€ä¸ªè®¡ç®—任务,你将会结æŸäºŽæ— å°½çš„,å°è¯•找出æ¯ä¸ªå•è¯çš„æ‰€æœ‰ç»„åˆï¼Œç„¶åŽæ‹¿å®ƒè·Ÿåˆ—表里的所有其他å•è¯æ¯”较,这样一个无尽的努力中。然而,如果你分æžäº†æ‰‹å¤´çš„æ•°æ®ï¼Œä½ ä¼šæ„识到,æ¯ä¸ªå•è¯å¯èƒ½è¢«ä¸€ä¸ªåŒ…å«è¿™ä¸ªè¯æœ¬èº«ä»¥åŠç”¨å®ƒçš„å­—æ¯ä½œä¸º ID çš„æŽ’åºæ•°ç»„的记录所代表,这个蛮力算法å¯èƒ½éœ€è¦è¿è¡Œå‡ å¤©ï¼Œè€Œå°çš„é‚£ä¸ªç®—æ³•åªæ˜¯ä¸€ä»¶å‡ ç§’的事。下次é¢å¯¹ä¸€ä¸ªæ£˜æ‰‹çš„问题时,记ä½è¿™ä¸ªä¾‹å­ã€‚ + +Next [团队技能 - 如何管ç†å¼€å‘æ—¶é—´](../Team-Skills/01-How-to-Manage-Development-Time.md) diff --git a/zh-traditional/2-Intermediate/README.md b/zh-traditional/2-Intermediate/README.md new file mode 100644 index 0000000..32ad0d6 --- /dev/null +++ b/zh-traditional/2-Intermediate/README.md @@ -0,0 +1,29 @@ +# 2. 进阶 +[//]: # (Version:1.0.0) +- 个人技能 + - [å¦‚ä½•ä¿æŒæ´»åŠ›](Personal-Skills/01-How-to-Stay-Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [如何进行压力测试](Personal-Skills/04-How-to-Stress-Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [如何学习新技能](Personal-Skills/06-How-to-Learn-New-Skills.md) + - [学会打字](Personal-Skills/07-Learn-to-Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [交æµè¯­è¨€](Personal-Skills/09-Communication-Languages.md) + - [é‡åž‹å·¥å…·](Personal-Skills/10-Heavy-Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](Personal-Skills/11-How-to-analyze-data.md) +- 团队技能 + - [如何管ç†å¼€å‘æ—¶é—´](Team-Skills/01-How-to-Manage-Development-Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [如何管ç†å’¨è¯¢](Team-Skills/03-How-to-Manage-Consultants.md) + - [如何适度交æµ](Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) +- 评判 + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [如何决定购买还是构建](Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [如何专业地æˆé•¿](Judgment/05-How-to-Grow-Professionally.md) + - [如何评估é¢è¯•者](Judgment/06-How-to-Evaluate-Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](Judgment/08-How-to-Talk-to-Non-Engineers.md) diff --git a/zh-traditional/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md b/zh-traditional/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md new file mode 100644 index 0000000..66d67d9 --- /dev/null +++ b/zh-traditional/2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md @@ -0,0 +1,11 @@ +# 如何管ç†å¼€å‘æ—¶é—´ +[//]: # (Version:1.0.0) +管ç†å¼€å‘时间,需è¦ç»´æŠ¤ä¸€ä¸ªç®€æ˜Žä¸”实时更新的计划。一个工程计划是一个估计,一个时间表,一系列å–得进步的里程碑,还有对你的团队或者你的时间在æ¯ä¸ªä»»åŠ¡çš„ä¼°è®¡å’Œå®‰æŽ’ã€‚è¿™ä¹Ÿåº”è¯¥åŒ…æ‹¬ä½ éœ€è¦è®°å¾—去åšçš„其他事,比如与质é‡ä¿éšœäººå‘˜è§é¢ï¼Œå‡†å¤‡æ–‡æ¡£ï¼Œæˆ–è€…è®¢è´­è®¾å¤‡ã€‚å¦‚æžœä½ åœ¨ä¸€ä¸ªå›¢é˜Ÿé‡Œï¼Œå·¥ç¨‹è®¡åˆ’ä¼šæ˜¯ä¸€ä¸ªå…±åŒæ‰¿è®¤çš„å议,ä¸è®ºæ˜¯åœ¨å¼€å§‹ï¼Œè¿˜æ˜¯è¿›è¡Œçš„过程中。 + +工程计划存在的æ„义是帮助åšå‡ºå†³å®šï¼Œè€Œéžå±•ç¤ºä½ æ˜¯å¦‚ä½•ç»„ç»‡çš„ã€‚å¦‚æžœä¸€ä¸ªå·¥ç¨‹è®¡åˆ’å¤ªé•¿æˆ–è€…ä¸æ˜¯æœ€æ–°çš„,它对åšå‡ºå†³å®šå°†æ˜¯æ— ç”¨çš„。现实中,这些决定通常是关于独立的个人的。计划和你的判断让你决定你是å¦åº”当把任务从一个人身上移到å¦ä¸€ä¸ªäººèº«ä¸Šã€‚里程碑标识了你的进展。如果你有一个奇妙的工程规划工具,ä¸è¦è¢«ä¸ºå·¥ç¨‹åˆ›å»ºä¸€ä¸ªè¡¨é¢å·¨å¤§è®¾è®¡ï¼ˆBig Design Up Front)所迷惑,但å¯ä»¥ç”¨å®ƒä¿æŒæ¸…晰和实时性。 + +如果你没有一个里程碑,你应该采å–峿—¶çš„行动,比如通知你的 boss å·¥ç¨‹å·²ç»æ»‘过的部分中进度的完æˆã€‚è¿™ç§ä¼°è®¡å’Œæ—¶é—´è¡¨å¯èƒ½ä¸ä¼šåœ¨å¼€å§‹æ—¶å¾ˆå®Œç¾Žï¼Œè¿™ä¼šäº§ç”Ÿè¿™æ ·ä¸€ç§å¹»è§‰ï¼Œä½ èƒ½å¤Ÿå¡«è¡¥å·¥ç¨‹çš„上一个部分中错过的日志。你å¯ä»¥ã€‚但这很å¯èƒ½æ˜¯å› ä¸ºä½ ä½Žä¼°äº†é‚£ä¸ªéƒ¨åˆ†æˆ–者高估了一部分。所以工程进度的完æˆå·²ç»æ»‘过了,ä¸ç®¡ä½ æ˜¯å¦å–œæ¬¢ã€‚ + +ç¡®ä¿ä½ çš„计划包括了:内部团队会议,写代ç ï¼Œæ–‡æ¡£ï¼Œè§„åˆ’å‘¨æœŸæ´»åŠ¨ï¼Œé›†æˆæµ‹è¯•,处ç†å¤–部关系,疾病,休å‡ï¼Œå·²æœ‰å·¥ç¨‹ç»´æŠ¤ï¼Œè¿˜æœ‰å¼€å‘环境维护。工程计划å¯ä»¥ä½œä¸ºä¸€ç§ä¸ºå±€å¤–人或你的 boss 准备的关于你或你的团队正在åšçš„äº‹æƒ…çš„è§†å›¾ã€‚å› ä¸ºå¦‚æ­¤ï¼Œæ‰€ä»¥å®ƒåº”è¯¥æ˜¯çŸ­ä¸”åŠæ—¶æ›´æ–°çš„。 + +Next [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº](02-How-to-Manage-Third-Party-Software-Risks.md) diff --git a/zh-traditional/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md b/zh-traditional/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md new file mode 100644 index 0000000..2518db2 --- /dev/null +++ b/zh-traditional/2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md @@ -0,0 +1,11 @@ +# 如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶å±æœº +[//]: # (Version:1.0.0) +一个工程通常ä¾èµ–于其ä¸èƒ½æŽ§åˆ¶çš„ç»„ç»‡æ‰€ç”Ÿäº§çš„è½¯ä»¶ï¼Œç¬¬ä¸‰æ–¹è½¯ä»¶å±æœºæ˜¯æ¯ä¸ªç›¸å…³çš„人都必须æ„识到的。 + +永远也ä¸è¦æŠŠå¸Œæœ›æ”¾åœ¨*蒸汽*上é¢ã€‚蒸汽是任何所谓的尚未å¯ç”¨ç„¶è€Œå£°ç§°å¯ç”¨çš„软件。这是最确定的一ç§ç ´äº§çš„æ–¹å¼ã€‚仅仅怀疑一个软件公å¸åœ¨æŸä¸ªæ—¥æœŸå¯¹äºŽæŸä¸ªè½¯ä»¶äº§å“çš„æŸä¸ªç‰¹æ€§çš„æ‰¿è¯ºæ˜¯ä¸æ˜Žæ™ºçš„ã€‚æ›´æ˜Žæ™ºçš„åšæ³•是完全忽略它,并且忘记你曾å¬è¯´è¿‡è¿™ç§äº‹ã€‚ä¸è¦åœ¨ä½ çš„å…¬å¸ä½¿ç”¨çš„任何文档里写下这些东西。 + +å¦‚æžœä¸€ä¸ªç¬¬ä¸‰æ–¹è½¯ä»¶ä¸æ˜¯è’¸æ±½ï¼Œå®ƒä»ç„¶æ˜¯æœ‰é£Žé™©çš„,但至少它是一个å¯ä»¥å¤„ç†çš„蒸汽。如果你正在考虑使用第三方软件, 你应该早点投入一点精力去评估它。人们å¯èƒ½æ²¡å¬è¯´è¿‡ï¼Œè¯„估三个产å“çš„é€‚åˆæ€§è¦èŠ±ä¸¤ä¸ªæ˜ŸæœŸè¿˜æ˜¯ä¸¤ä¸ªæœˆï¼Œä½†è¿™å¿…é¡»å°½å¯èƒ½åŠæ—©åšã€‚如果没有åˆé€‚的评估,集æˆçš„代价就ä¸èƒ½è¢«å‡†ç¡®è®¡ç®—。 + +ç†è§£å·²æœ‰çš„为æŸä¸ªç‰¹æ®Šç›®çš„的第三方软件的适用性是éžå¸¸è§ä»è§æ™ºçš„东西。这是éžå¸¸å®¢è§‚的,并且通常ä½åœ¨ä¸“家心里。如果你å‘现了那些专家,你å¯ä»¥èŠ‚çœå¾ˆå¤šæ—¶é—´ã€‚很多时候,一个工程会如此完全地ä¾èµ–于第三方软件,以至于如果集æˆå¤±è´¥äº†ï¼Œå·¥ç¨‹å°±å¤±è´¥äº†ã€‚åƒæ—¶é—´è¡¨é‡Œå†™çš„é‚£æ ·æ¸…æ™°åœ°è¡¨è¾¾äº†å±æœºã€‚å¦‚æžœå±æœºä¸èƒ½è¢«å°½æ—©æ¶ˆé™¤ï¼Œè¯•ç€è®¢ä¸€ä¸ªä¸ºæ„外准备的计划,比如å¯ç”¨çš„第二方案,或者自己写下功能点的能力。永远ä¸è¦è®©æ—¶é—´è¡¨ä¾èµ–于蒸汽。 + +Next [如何管ç†å’¨è¯¢å¸ˆ](03-How-to-Manage-Consultants.md) diff --git a/zh-traditional/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md b/zh-traditional/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md new file mode 100644 index 0000000..bd58e19 --- /dev/null +++ b/zh-traditional/2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md @@ -0,0 +1,9 @@ +# 如何管ç†å’¨è¯¢å¸ˆ +[//]: # (Version:1.0.0) +使用咨询师,但ä¸è¦ä¾èµ–他们。他们是神奇的人,éžå¸¸å€¼å¾—尊敬。因为他们看过许多ä¸åŒçš„å·¥ç¨‹ï¼Œä»–ä»¬é€šå¸¸æ¯”ä½ çŸ¥é“æ›´å¤šå…·ä½“æŠ€æœ¯ï¼Œç”šè‡³æ˜¯ç¼–ç¨‹æŠ€æœ¯ã€‚æœ€å¥½çš„ä½¿ç”¨ä»–ä»¬çš„æ–¹å¼æ˜¯åƒå®¶æ•™é‚£æ ·ç”¨ä¾‹å­æ•™å­¦ã€‚ + +然而,他们通常ä¸èƒ½åƒæ­£å¸¸å‘˜å·¥é‚£æ ·ç”¨ç›¸åŒçš„æ„Ÿè§‰èžå…¥å›¢é˜Ÿï¼Œå¯èƒ½ä»…仅是因为你没有足够的时间去学习他们的优点和缺点。他们的工资更低。他们更容易离开。如果公å¸åšå¾—好,他们å¯èƒ½å¾—到的更少。有些å¯èƒ½æ˜¯å¥½çš„,有些å¯èƒ½ä¸Žå¹³å‡æ°´å¹³ä¸€è‡´ï¼Œæœ‰äº›å¯èƒ½æŒºç³Ÿç³•,但希望你对咨询师的选择ä¸ä¼šåƒä½ å¯¹é›‡å‘˜çš„选择那样仔细,这样你会获得更多ä¸å¥½çš„咨询师。 + +如果咨询师è¦å†™ä»£ç ï¼Œä½ å¿…须在你使用它们å‰ä»”细 review。有ç€å¤§æ®µå¸¦é£Žé™©è€Œæ²¡æœ‰è¢« review 的代ç ï¼Œä¼šè®©ä½ å®Œæˆä¸äº†å·¥ç¨‹ã€‚事实上这对所有的团队æˆå‘˜éƒ½æ˜¯æˆç«‹çš„,但你通常有更多与你接近的团队æˆå‘˜çš„知识。 + +Next [如何适é‡äº¤æµ](04-How-to-Communicate-the-Right-Amount.md) diff --git a/zh-traditional/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md b/zh-traditional/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md new file mode 100644 index 0000000..9141eed --- /dev/null +++ b/zh-traditional/2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md @@ -0,0 +1,7 @@ +# 如何适é‡äº¤æµ +[//]: # (Version:1.0.0) +仔细考虑会议的代价:这花费了*éšå‚与者数é‡å€å¢žçš„æ—¶é—´*。会议有时候是必è¦çš„,但越å°è¶Šå¥½ã€‚å°ä¼šè®®çš„交æµè´¨é‡æ›´å¥½ï¼Œè¿‡åº¦æµªè´¹çš„æ—¶é—´æ›´å°‘。如果一个人在会议感到厌烦,把这当åšä¼šè®®åº”该更å°çš„æ ‡è¯†ã€‚ + +éžæ­£å¼äº¤æµå€¼å¾—åšä»»ä½•事情去鼓励。更多有用的沟通工作在åŒäº‹é—´çš„åˆé¥­å¯ä»¥è¿›è¡Œï¼Œè€Œéžå…¶ä»–çš„æ—¶é—´ã€‚è®¸å¤šå…¬å¸æ²¡æœ‰æ„è¯†åˆ°æˆ–è€…ä¸æ”¯æŒè¿™ä¸€ç‚¹ï¼Œè¿™æ˜¯ä¸€ç§é—憾。 + +Next [如何直言异议以åŠå¦‚何é¿å…](05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) diff --git a/zh-traditional/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md b/zh-traditional/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md new file mode 100644 index 0000000..11a2e85 --- /dev/null +++ b/zh-traditional/2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md @@ -0,0 +1,11 @@ +# 如何直言异议以åŠå¦‚何é¿å… +[//]: # (Version:1.0.0) +异议是一个åšå‡ºå¥½å†³å®šçš„ç»ä½³æœºä¼šï¼Œä½†è¿™éœ€è¦è¢«è°¨æ…Žå¤„ç†ã€‚ä½ å¯èƒ½ä¼šè§‰å¾—你充分的表达了你的想法,并且在决定åšå‡ºå‰ï¼Œä½ çš„æ„è§å·²ç»è¢«å¬å–ã€‚è¿™ç§æƒ…况下,没有什么å¯ä»¥å†è¯´çš„,你应该决定你是å¦è¦æ”¯æŒè¿™ä¸ªå†³å®šï¼Œå³ä½¿ä½ ä¸åŒæ„它。如果你å¯ä»¥åœ¨è‡ªå·±ä¸åŒæ„的情况下,支æŒè¿™ä¸ªå†³å®šï¼Œå°±è¿™æ ·è¯´å®žè¯ã€‚è¿™å±•ç¤ºäº†ä½ æ˜¯å¤šä¹ˆæœ‰ä»·å€¼ï¼Œå› ä¸ºä½ æ˜¯ç‹¬ç«‹çš„ï¼Œä¸æ˜¯ä¸€ä¸ªå”¯å”¯è¯ºè¯ºä¹‹äººï¼ŒåŒæ—¶æ˜¯ä¸€ä¸ªå°Šé‡å†³å®šçš„团队æˆå‘˜ã€‚ + +有时候一个你ä¸åŒæ„的决定,会在决策者没有充分å¬å–你的观点å‰åšå‡ºã€‚你应该在公å¸å’Œé›†ä½“的基础上评估是å¦åº”该æå‡ºè¿™ä¸ªè¯é¢˜ã€‚如果在你看æ¥è¿™åªæ˜¯ä¸€ä¸ªå°é”™è¯¯ï¼Œè¿™å¯èƒ½ä¸å€¼å¾—釿–°è€ƒè™‘。如果在你看æ¥è¿™æ˜¯ä¸€ä¸ªå¤§é”™ï¼Œä½ å½“ç„¶å¿…é¡»æå‡ºå¼‚议。 + +é€šå¸¸ï¼Œè¿™ä¸æ˜¯ä¸€ä¸ªé—®é¢˜ã€‚在一些充满压力的环境下,在一些个人因素下,这会导致事情个人化。例如,一些éžå¸¸ç‰›é€¼çš„程åºå‘˜ç¼ºä¹åœ¨æœ‰å¥½çš„ç†ç”±è®¤ä¸ºä¸€ä»¶ä¸œè¥¿æ˜¯é”™çš„æƒ…况下去挑战决议的信心。在最糟的情况下,决策者是ä¸å¯é çš„ï¼Œå¹¶ä¼šæŠŠè¿™å˜æˆä¸€ä¸ªå¯¹æƒå¨çš„æŒ‘战。最好记ä½ï¼Œè¿™ç§æƒ…况下,人们会用他们大脑中爬虫动物的部分æ¥åšå‡ºå应。你应该ç§ä¸‹æå‡ºä½ çš„争议,然åŽå°è¯•展示新的知识是如何改å˜å†³è®®åšå‡ºçš„基础的。 + +ä¸ç®¡å†³è®®æ˜¯å¦è¢«æŽ¨ç¿»ï¼Œä½ å¿…须记ä½ä½ æ°¸è¿œä¸èƒ½è¯´å‡ºâ€œæˆ‘çš„è¯æ’‚这了,我早就这样告诉你了â€è¿™æ ·çš„è¯ï¼Œå› ä¸ºè¿™ä¸ªå†³å®šå·²ç»å¾—到了充分探讨。 + +Next [判断 - 如何在开å‘è´¨é‡å’Œå¼€å‘æ—¶é—´é—´æƒè¡¡](../Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) diff --git a/zh-traditional/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md b/zh-traditional/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md new file mode 100644 index 0000000..6fe2a41 --- /dev/null +++ b/zh-traditional/3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md @@ -0,0 +1,11 @@ +# å¦‚ä½•ä¸Žæ—¶é—´åŽ‹åŠ›åšæ–—争 +[//]: # (Version:1.0.0) +å‘布压力是快速推出好产å“çš„åŽ‹åŠ›ã€‚è¿™æ˜¯å¥½çš„ï¼Œå› ä¸ºå®ƒåæ˜ äº†å¸‚场事实,并且在æŸä¸ªæ„义上是å¥åº·çš„ã€‚æ—¶é—´åŽ‹åŠ›æ˜¯è¿«ä½¿ä¸€ä¸ªäº§å“æ›´å¿«åœ°æŽ¨å‡ºçš„压力,这是浪费的,ä¸å¥åº·çš„,并且太普é了。 + +时间压力的存在是有原因的。给程åºå‘˜ä»»åŠ¡çš„äººä»¬æ²¡æœ‰å®Œå…¨å°Šé‡æˆ‘们的强烈的工作é“德以åŠä½œä¸ºä¸€ä¸ªç¨‹åºå‘˜çš„ä¹è¶£ã€‚å¯èƒ½æ˜¯å› ä¸ºä»–ä»¬æŠŠè‡ªå·±çš„ä¹ æƒ¯æŠ•å°„åˆ°æˆ‘ä»¬èº«ä¸Šï¼Œä»–ä»¬ç›¸ä¿¡ï¼Œè¦æ±‚更快会让我们更加努力工作,使得工程更快完æˆã€‚è¿™å¯èƒ½ç¡®å®žæ˜¯å¯¹çš„,但效果很å°ï¼ŒæŸå®³å¾ˆå¤§ã€‚å¦å¤–,他们看ä¸åˆ°ç”Ÿäº§è½¯ä»¶çœŸå®žéœ€è¦çš„东西。他们看ä¸åˆ°ï¼Œä¹Ÿä¸èƒ½å¤Ÿè‡ªå·±åˆ›é€ ï¼Œä»–们能åšçš„唯一事情就是看ç€å‘布的压力,然åŽçƒ¦ç¨‹åºå‘˜ã€‚ + +与时间压力斗争的方法是简å•地把它当åšå‘布压力,实现的方法是让å¯ç”¨åŠ³åŠ›ä¸Žäº§å“间的关系å˜å¾—逿˜Žã€‚æä¾›ä¸€ä¸ªè¯šå®žï¼Œç»†è‡´ï¼Œå¤§éƒ¨åˆ†å¯ç†è§£çš„å¯¹æ‰€æœ‰ç›¸å…³åŠ³åŠ›çš„ä¼°è®¡ï¼Œæ˜¯ä¸€ç§æœ€å¥½çš„实现方å¼ã€‚å…许åšå‡ºå¥½çš„管ç†å†³å®šä»¥æƒè¡¡å¯èƒ½çš„功能也是一个附加的好处。 + +必须清楚解释的关键是,预算是一ç§å‡ ä¹Žä¸å¯åŽ‹ç¼©çš„æ¶²ä½“ã€‚å°±åƒä½ ä¸èƒ½æŠŠæ°´æ”¾è¿›å……满的瓶å­é‡Œï¼Œä½ ä¸èƒ½å¾€å……满的时间中填入更多任务。æŸç§æ„义上,程åºå‘˜æ°¸è¿œä¸ä¼šæ‹’ç»ï¼Œä½†æ›´å–œæ¬¢è¯´â€œå¾—到你想è¦çš„东西,你会失去什么?â€ï¼Œåšå‡ºæ¸…晰的预算的效果将会是增加对程åºå‘˜çš„尊敬。这也是其专业行为的一ç§è¡¨çŽ°ã€‚ç¨‹åºå‘˜çš„努力工作会被看到。很明显,设置一个ä¸çŽ°å®žçš„æ—¶é—´è¡¨å¯¹æ¯ä¸ªäººéƒ½æ˜¯ç—›è‹¦çš„。程åºå‘˜ä¸èƒ½è¢«æ¬ºéª—ã€‚è¦æ±‚他们åšä¸€äº›ä¸çŽ°å®žçš„ä¸œè¥¿æ˜¯å¯¹ä»–ä»¬çš„ä¸å°Šé‡å’Œä¸é“德。æžé™ç¼–程放大了这个问题,并且围绕它构建了一套æµç¨‹ï¼Œæˆ‘希望æ¯ä¸ªè¯»è€…能足够幸è¿åŽ»ä½¿ç”¨å®ƒã€‚ + +Next [如何ç†è§£ç”¨æˆ·](02-How-to-Understand-the-User.md) diff --git a/zh-traditional/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md b/zh-traditional/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md new file mode 100644 index 0000000..d2c7b33 --- /dev/null +++ b/zh-traditional/3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md @@ -0,0 +1,17 @@ +# 如何ç†è§£ç”¨æˆ· +[//]: # (Version:1.0.0) +ç†è§£ç”¨æˆ·ä»¥åŠå¸®åŠ©ä½ çš„ boss ç†è§£ç”¨æˆ·æ˜¯ä½ çš„责任。因为用户没有åƒä½ ä¸€æ ·å¯†åˆ‡åœ°ä¸Žä½ çš„产å“的制造产生è”系,他们的表现有点ä¸åŒï¼š + +- 用户通常会åšå‡ºç®€çŸ­çš„判断 +- 用户有他们自己的工作,他们主è¦ä¼šæ€è€ƒä½ çš„产å“中å°çš„æ”¹è¿›ï¼Œè€Œéžå¤§çš„æ”¹è¿› +- 用户看ä¸åˆ°ä½ çš„产å“çš„æ•´ä¸ªç”¨æˆ·ç”»åƒ + +你的责任是找出他们真实需è¦çš„东西,而éžä»–们说他们需è¦çš„东西,然而,更好的是在你开始å‰ç»™ä»–们æå‡ºå»ºè®®ï¼Œå¹¶ä¸”让他们认åŒä½ çš„建议就是他们想è¦çš„,但他们也å¯èƒ½æ²¡æœ‰åšè¿™ç§äº‹çš„æ„¿æ™¯ã€‚你对你自己的主æ„的信心是è¦çœ‹æƒ…å†µçš„ã€‚ä½ å¿…é¡»åŒæ—¶ä¸Žè‡ªå¤§å’Œé”™è¯¯çš„è°¦é€Šåšæ–—争去找出什么是人们真实想è¦çš„。这两ç§äººï¼Œæˆ–者åŒä¸€ä¸ªäººèº«ä¸Šä¸¤ç§æ€ç»´æ¨¡å¼ï¼Œä¸€åŒå’Œè°å·¥ä½œä¼šç»™å‡ºæœ€å¥½çš„æœºä¼šæ¥ç»™å‡ºæ­£ç¡®çš„æ„¿æ™¯ã€‚ + +你在用户身上花费的时间越多,你就越能更好地ç†è§£ä»€ä¹ˆèƒ½å¤ŸçœŸæ­£åœ°æˆåŠŸã€‚ä½ åº”å½“å°è¯•在你的用户上尽å¯èƒ½æµ‹è¯•你的想法,如果å¯èƒ½çš„è¯ï¼Œä½ ç”šè‡³åº”当和他们一起åƒé¥­ã€‚ + +Guy Kawasaki [Rules] 强调过在倾å¬ä¹‹å¤–,*观察*你的用户的é‡è¦æ€§ã€‚ + +我相信,åˆä¼™äººå’Œå’¨è¯¢å¸ˆè®©å®¢æˆ·è¯´å‡ºä»–们内心真正想è¦çš„东西有巨大的困难。如果你想æˆä¸ºä¸€ä¸ªå’¨è¯¢å¸ˆï¼Œå»ºè®®ä½ åŸºäºŽç”¨æˆ·æ¸…晰的头脑以åŠä»–们的钱包æ¥é€‰æ‹©å®¢æˆ·ã€‚ + +Next [如何得到晋å‡](03-How-to-Get-a-Promotion.md) diff --git a/zh-traditional/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md b/zh-traditional/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md new file mode 100644 index 0000000..5c73172 --- /dev/null +++ b/zh-traditional/3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md @@ -0,0 +1,13 @@ +# å¦‚ä½•èŽ·å¾—æ™‹å‡ +[//]: # (Version:1.0.0) +想è¦è¢«æå‡ä¸ºæŸç§è§’色,先åšé‚£ä¸ªè§’色该åšçš„事情。 + +为了æå‡åˆ°æŸä¸ªä½ç½®ï¼Œæ‰¾åˆ°é‚£ä¸ªä½ç½®æœŸæœ›åšçš„事情,然åŽåŽ»åšã€‚ + +想è¦å¾—到薪酬的æå‡ï¼Œå¸¦ç€ä¿¡æ¯åŽ»å商。 + +如果你觉得你值得得到æå‡ï¼Œä¸Žä½ çš„ boss èŠä¸€èŠã€‚清楚地问他们你需è¦åšä»€ä¹ˆæ‰èƒ½èŽ·å¾—æå‡ï¼Œç„¶åŽåŠªåŠ›åŽ»åšã€‚è¿™å¬èµ·æ¥å¾ˆè€å¥—,但大多数时候你对你需è¦åšçš„事情的追求与你 boss 的想法是ä¸åŒçš„。这å¯èƒ½ä¼šè®©ä½ çš„ boss 在æŸäº›ç¨‹åº¦ä¸Šæœ‰äº›å¤±è½ã€‚ + +大多数程åºå‘˜å¯èƒ½åœ¨æŸäº›å½¢å¼ä¸Šå¯¹ä»–们的相对能力有夸张的感觉 --- 毕竟,我们ä¸å¯èƒ½éƒ½åœ¨å‰10%里ï¼ç„¶è€Œï¼Œæˆ‘也è§è¿‡ä¸€äº›éžå¸¸ä¸å¾—志的人。人ä¸èƒ½æœŸæœ›æ¯ä¸ªäººçš„评价在什么时候都完美与现实相åŒï¼Œä½†æˆ‘认为人们通常在一定程度上是公平的,有这样一个警告:如果别人看ä¸åˆ°ä½ çš„工作,你就得ä¸åˆ°æ¬£èµã€‚有时候,因为å¶ç„¶æˆ–个人习惯,有些人å¯èƒ½å¾—ä¸åˆ°å¤ªå¤šå…³æ³¨ã€‚在家努力工作或者与你的团队和 boss 地ç†éš”离的è¯ï¼Œè¿™ä¼šå˜å¾—特别困难。 + +Next [æœåŠ¡ä½ çš„å›¢é˜Ÿ - 如何å‘展æ‰èƒ½](../Serving-Your-Team/01-How-to-Develop-Talent.md) diff --git a/zh-traditional/3-Advanced/README.md b/zh-traditional/3-Advanced/README.md new file mode 100644 index 0000000..bc276e8 --- /dev/null +++ b/zh-traditional/3-Advanced/README.md @@ -0,0 +1,22 @@ +# 3. 高级 +[//]: # (Version:1.0.0) +- 技术评判 + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型语言](Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [选择语言](Technical-Judgment/03-Choosing-Languages.md) +- 机智地妥å + - [如何与时间压力作斗争](Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ·](Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何获得晋å‡](Compromising-Wisely/03-How-to-Get-a-Promotion.md) +- æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何选择工作内容](Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何让你队å‹çš„价值最大化](Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何划分问题](Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何å‘展一个系统](Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地沟通](Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md b/zh-traditional/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md new file mode 100644 index 0000000..0812f3a --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md @@ -0,0 +1,23 @@ +# 如何å‘展æ‰èƒ½ +[//]: # (Version:1.0.0) +Nietschze 夸大了他所说的: + +>é‚£äº›æ— æ³•æ‘§æ¯æˆ‘的,åªä¼šè®©æˆ‘更强大 + +你最大的责任是对你的团队负责。你应该éžå¸¸äº†è§£ä»–们中的æ¯ä¸ªäººã€‚你应该激励你的团队,但ä¸è¦è®©ä»–们过劳。你通常应该告诉他们他们被激励的方å¼ã€‚如果他们觉得划算,他们会被很好的激励。æ¯ä¸ªå·¥ç¨‹ä¸­ï¼Œæˆ–者在æ¯ä¸ªå…¶ä»–的工程里,试ç€åŒæ—¶ç”¨ä»–们建议的以åŠä½ è®¤ä¸ºå¯¹ä»–们好的方å¼åŽ»æ¿€åŠ±ä»–ä»¬ã€‚æ¿€åŠ±ä»–ä»¬çš„æ–¹æ³•ä¸æ˜¯ç»™ä»–们更多工作,而是给他们一个新的技能或在团队里扮演一个新的角色。 + +你应该å…许人们(包括你自己)å¶å°”失败,并且应该为一些失败预留一些时间。如果从未有失败,冒险也就没有æ„义。如果没有å¶ç„¶çš„失败,说明其实你没有足够努力。当一个人失败了,你应该尽å¯èƒ½æ¸©æŸ”地对待他,但ä¸è¯¥æŠŠä»–ä»¬åƒæˆåŠŸäº†é‚£æ ·å¯¹å¾…ã€‚ + +为了让æ¯ä¸ªå›¢é˜Ÿæˆå‘˜è¢«å……分激励,问清楚他们中的æ¯ä¸ªäººï¼Œå¦‚果他们没有动力的è¯ï¼Œä»–们需è¦ä»€ä¹ˆæ‰èƒ½è¢«å……分激励。你å¯èƒ½éœ€è¦è®©ä»–ä»¬ä¿æŒä¸æ»¡æ„的状æ€ï¼Œä½†ä½ éœ€è¦çŸ¥é“æ¯ä¸ªäººéœ€è¦çš„æ˜¯ä»€ä¹ˆã€‚ + +ä½ ä¸èƒ½æ”¾å¼ƒå› ä¸ºä½Žè½çš„æƒ…ç»ªæˆ–è€…ä¸æ»¡å°±æ•…æ„䏿‰¿æ‹…工作的那些人,然åŽå°±è®©ä»–们这样懒散下去。你必须试ç€è®©ä»–们充分被激励并且有效率。åªè¦ä½ æœ‰è€å¿ƒï¼ŒåšæŒè¿™æ ·åšã€‚当你的è€å¿ƒè€—尽时,就解雇他们å§ã€‚ä½ ä¸èƒ½å…许故æ„ä¸å¸å…¶èŒçš„员工留在团队里,因为这对团队ä¸å…¬å¹³ã€‚ + +通过在公众场åˆè¿™æ ·è¯´ï¼Œè®©ä½ å›¢é˜Ÿä¸­çš„强大æˆå‘˜æ¸…楚地知é“他们是强大的。表扬应当公开,批评应当ç§å¯†ã€‚ + +团队中的强大æˆå‘˜ä¼šè‡ªç„¶åœ°æ¯”弱的æˆå‘˜æœ‰æ›´å¤šå›°éš¾çš„任务。这是完美而自然的,没人会因此困扰,因为æ¯ä¸ªäººéƒ½åœ¨åŠªåŠ›å·¥ä½œã€‚ + +一个在工资中没有å馈出æ¥çš„奇怪的事实是,好的程åºå‘˜æ¯”å个糟糕的程åºå‘˜è¦æœ‰æ•ˆçŽ‡å¾—å¤šã€‚è¿™å¯¼è‡´äº†ä¸€ç§å¥‡æ€ªçš„现象。通常,如果你们的弱程åºå‘˜ä¸æŒ¡é“çš„è¯ï¼Œä½ èƒ½è·‘的更快。如果你这样åšäº†ï¼Œäº‹å®žä¸Šä½ åœ¨çŸ­æœŸèƒ½å–得更多进度。然而, 你的交易会失去一些é‡è¦çš„好处,å«åšå¯¹å¼±å°æˆå‘˜çš„训练,对集体知识的传递,失去强大程åºå‘˜åŽçš„æ¢å¤èƒ½åŠ›ã€‚å¼ºå¤§çš„ç¨‹åºå‘˜å¯¹è¿™ç§çŽ°è±¡åº”è¯¥æ¸©å’Œäº›ï¼Œå¹¶ä¸”ä»Žå„ç§è§’度去考虑这个问题。 + +ä½ å¯ä»¥ç»å¸¸ç»™å¼ºå¤§çš„团队æˆå‘˜æœ‰æŒ‘战的,但细致æç»˜çš„任务。 + +Next [如何选择工作的内容](02-How-to-Choose-What-to-Work-On.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md b/zh-traditional/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md new file mode 100644 index 0000000..0fa3e6e --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md @@ -0,0 +1,5 @@ +# 如何选择工作的内容 +[//]: # (Version:1.0.0) +你需è¦åœ¨ä½ ä¸ªäººçš„需è¦å’Œå›¢é˜Ÿçš„需è¦é—´æƒè¡¡ï¼Œé€‰æ‹©éœ€è¦åšå·¥ç¨‹ä¸­çš„哪个部分。你应该åšä½ æœ€æ“…长的东西,但是也è¦è¯•ç€åŽ»æ‰¾ä¸€ç§æ–¹å¼æ¥æ¿€åŠ±è‡ªå·±ï¼Œä¸æ˜¯é€šè¿‡æ‰¿æ‹…更多的工作而是通过练习新的技能。领导æ‰èƒ½å’Œäº¤æµèƒ½åŠ›æ¯”æŠ€æœ¯èƒ½åŠ›æ›´é‡è¦ã€‚如果你éžå¸¸å¼ºå¤§ï¼Œæ‰¿æ‹…最困难或最有风险的任务,在工程中尽å¯èƒ½æ—©åœ°å®Œæˆè¿™éƒ¨åˆ†ï¼Œä»¥æ­¤å‡å°‘风险。 + +Next [如何让你队å‹çš„价值最大化](03-How-to-Get-the-Most-From-Your-Teammates.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md b/zh-traditional/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md new file mode 100644 index 0000000..848b62f --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md @@ -0,0 +1,15 @@ +# 如何让你队å‹çš„价值最大化 +[//]: # (Version:1.0.0) +为了让你的队å‹çš„价值最大化,å‘展好的团队精神,试ç€ä¿æŒæ¯ä¸ªäººçš„个人挑战与渴望。 + +为了å‘展团队精神,文化衫与èšä¼šæ˜¯æœ‰ç›Šçš„,但ä¸å¦‚对个人的尊é‡ã€‚如果æ¯ä¸ªäººå°Šé‡å…¶ä»–çš„æ¯ä¸ªäººï¼Œå°±æ²¡æœ‰äººä¼šè®©å…¶ä»–人失望。团队精神产生于人们为团队åšå‡ºç‰ºç‰²ï¼Œä¼˜å…ˆæ€è€ƒå›¢é˜Ÿçš„利益而éžè‡ªå·±åˆ©ç›Šçš„æ—¶å€™ã€‚作为一个领导者,在这个方é¢ï¼Œæ²¡æœ‰ä»˜å‡ºå°±æ²¡æœ‰æ”¶èŽ·ã€‚ + +团队领导力的一个关键是促进团结,这样æ¯ä¸ªäººéƒ½ä¼šå¬ä½ çš„。有时候这æ„味ç€å…许你的队å‹çŠ¯é”™ã€‚ä¹Ÿå°±æ˜¯ï¼ŒåŸºäºŽè¿™ç§å›¢ç»“,如果对项目没有太大的æŸå®³ï¼Œä½ å¿…é¡»å…许你团队的一部分æˆå‘˜ç”¨ä»–们自己的方å¼åšäº‹ï¼Œå³ä½¿ä½ æœ‰å¾ˆå¤§çš„ä¿¡å¿ƒè®¤ä¸ºè¿™æ˜¯ä¸€ä»¶é”™äº‹ã€‚å½“è¿™ç§æƒ…况确实å‘生时,ä¸è¦åŒæ„他们的观点,简å•公开地åå¯¹ä¹‹ï¼Œç„¶åŽæŽ¥å—è¿™ç§å›¢ç»“。ä¸è¦è®©äººè§‰å¾—ä½ å—伤了,或者认为你是被迫的,简å•地陈述你ä¸åŒæ„,但认为团队的团结是更加é‡è¦çš„。这ç»å¸¸ä¼šå¯¼è‡´ä»–们忂”ã€‚å¦‚æžœä»–ä»¬çœŸçš„åæ‚”了,ä¸è¦åšæŒä»–们一开始的计划。 + +如果在你们从所有åˆé€‚的角度讨论了这个è¯é¢˜åŽï¼Œæœ‰ä¸ªäººä¼šå对,简å•地告诉他们,你必须åšä¸€ä¸ªå†³å®šï¼Œå¹¶ä¸”è¿™å°±æ˜¯ä½ çš„å†³å®šã€‚å¦‚æžœæœ‰æ–¹æ³•åŽ»è¯„ä¼°ä½ çš„å†³å®šæ˜¯å¦æ˜¯é”™çš„,或者它ç¨åŽæ˜¯å¦æ˜¯é”™çš„,尽å¯èƒ½å¿«é€Ÿåˆ‡æ¢ï¼Œå¹¶æ„Ÿæ¿€é‚£ä¸ªå¯¹çš„人。 + +询问你的团队,包括集体与个人这样一个问题:他们认为什么能创造团队精神以åŠåˆ›é€ ä¸€ä¸ªé«˜æ•ˆçš„团队。 + +ç»å¸¸è¡¨æ‰¬ï¼Œä½†ä¸è¦æµªè´¹ã€‚尤其是表扬那些å对你且确实值得表扬的人。公开表扬,ç§ä¸‹æ‰¹è¯„。但有这样一ç§ä¾‹å¤–ï¼šæœ‰æ—¶å€™è¿›æ­¥æˆ–è€…çº æ­£ä¸€ä¸ªé”™è¯¯ä½†å´æ²¡æœ‰æ³¨æ„到错误的根æºï¼Œæ˜¯ä¸èƒ½è¢«è¡¨æ‰¬çš„,这ç§è¿›æ­¥åº”该ç§ä¸‹è¡¨æ‰¬ã€‚ + +Next [如何划分问题](04-How-to-Divide-Problems-Up.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md b/zh-traditional/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md new file mode 100644 index 0000000..86f6ed4 --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md @@ -0,0 +1,9 @@ +# 如何划分问题 +[//]: # (Version:1.0.0) +接手一个软件工程并把它分为å¯ä»¥ç”±ä¸ªäººå®žçŽ°çš„ä»»åŠ¡æ˜¯å¾ˆæœ‰è¶£çš„ã€‚è¿™äº‹åº”è¯¥åŠæ—©è¿›è¡Œã€‚有时候ç»ç†å¯èƒ½ä¼šè®¤ä¸ºä¸è€ƒè™‘个人的项目能够起作用。这是ä¸å¯èƒ½çš„,因为æ¯ä¸ªäººçš„生产力是如此广泛地ä¸åŒã€‚对æŸä¸ªç»„件有特殊知识的人也ç»å¸¸æ”¹å˜ï¼Œå¹¶ä¸”å¯ä»¥å¯¹å·¥ä½œæ•ˆæžœæœ‰ä¸€ä¸ªæ•°é‡çº§çš„å½±å“。 + +正如一个作曲家对其演å¥ä¹å™¨çš„音色的考虑,或者è¿åŠ¨é˜Ÿæ•™ç»ƒå¯¹æ¯ä¸ªè¿åŠ¨å‘˜çš„ä½“èƒ½çš„è€ƒè™‘é‚£æ ·ï¼Œæœ‰ç»éªŒçš„团队领导,通常ä¸èƒ½å¤ŸæŠŠå·¥ç¨‹ä¾æ®å›¢é˜Ÿæˆå‘˜éœ€è¦æ‰¿æ‹…的角色那样划分æˆä¸€ä¸ªä¸ªçš„任务。这是好的团队ä¸å®¹æ˜“解散的一个原因。 + +因此有这样一ç§å±é™©ï¼šäººä»¬åœ¨é”»ç‚¼è‡ªå·±çš„能力时会感到无èŠï¼Œå¹¶ä¸”ä¸ä¼šæé«˜ä»–们的弱项或者学习新技能的能力。然而,如果ä¸è¢«è¿‡åº¦ä½¿ç”¨çš„è¯ï¼Œç²¾é€šæ˜¯ä¸€ä¸ªéžå¸¸æœ‰ç”¨çš„生产工具。 + +Next [å¦‚ä½•å¤„ç†æ— èŠçš„任务](05-How-to-Handle-Boring-Tasks.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md b/zh-traditional/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md new file mode 100644 index 0000000..bde52fd --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md @@ -0,0 +1,7 @@ +# å¦‚ä½•å¤„ç†æ— èŠçš„任务 +[//]: # (Version:1.0.0) +有时候é¿å…坹公叿ˆ–工程的æˆåŠŸè‡³å…³é‡è¦å´å¾ˆæ— èŠçš„任务是ä¸å¯èƒ½çš„。这些任务å¯èƒ½çœŸçš„会é™ä½Žé‚£äº›å¿…é¡»æ‰§è¡Œå®ƒä»¬çš„äººçš„æ–—å¿—ã€‚æœ€å¥½çš„å¤„ç†æ–¹æ³•æ˜¯ä½¿ç”¨æˆ–è€…å‘æ‰¬ Larry Wall 的程åºå‘˜æ‡’æƒ°ç¾Žå¾·ã€‚è¯•ç€æ‰¾ä¸€äº›æ–¹æ³•让计算机去åšè¿™ä¸ªä»»åŠ¡ï¼Œæˆ–è€…å¸®åŠ©ä½ çš„é˜Ÿå‹åŽ»åšè¿™ä¸ªã€‚用一个程åºèŠ±ä¸€ä¸ªæ˜ŸæœŸåŽ»å®Œæˆè¦æ‰‹åŠ¨åŽ»ç”¨ä¸€ä¸ªæ˜ŸæœŸå®Œæˆçš„任务能让你懂得更多,并且有时候这是å¯é‡ç”¨çš„。 + +如果所有其他的途径都ä¸èƒ½å·¥ä½œï¼Œä¸ºé‚£äº›å¿…é¡»åšè¿™ä¸ªæ— èŠä»»åŠ¡çš„äººé“æ­‰ï¼Œä½†æ— è®ºä»€ä¹ˆæƒ…况,ä¸è¦è®©ä»–们去å•独完æˆå®ƒã€‚至少安排一个两人团队去åšè¿™ä¸ªäº‹æƒ…,并增强å¥åº·çš„团队å作æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ã€‚ + +Next [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](06-How-to-Gather-Support-for-a-Project.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md b/zh-traditional/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md new file mode 100644 index 0000000..adc8cac --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md @@ -0,0 +1,5 @@ +# å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ +[//]: # (Version:1.0.0) +è¦ç»™å·¥ç¨‹èŽ·å–æ”¯æŒï¼Œéœ€è¦åˆ›å»ºå¹¶äº¤æµä¸€ä¸ªèƒ½å¤Ÿè¯æ˜Žè¿™ä¸ªç»„织整体的真正价值的愿景。试ç€è®©å…¶ä»–人分享他们对你所创造的愿景的观点。这给他们一个ç†ç”±åŽ»æ”¯æŒä½ å¹¶ç»™äºˆä½ ä»–们的观点所带æ¥çš„价值。独立地为你的工程补充关键的支æŒè€…。ä¸è®ºåœ¨ä»€ä¹ˆå¯èƒ½çš„地方,展示,但ä¸å‘Šè¯‰ã€‚如果å¯èƒ½çš„è¯ï¼Œæž„建一个原型或者一个模型æ¥è¯æ˜Žä½ çš„主æ„。一个原型总是有力的,但在软件中,它比任何书é¢çš„æè¿°éƒ½è¦é«˜çº§å¾—多。 + +Next [如何å‘展一个系统](07-How-to-Grow-a-System.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md b/zh-traditional/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md new file mode 100644 index 0000000..c6e06b1 --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md @@ -0,0 +1,23 @@ +# 如何å‘展一个系统 +[//]: # (Version:1.0.0) +æ ‘çš„ç§å­åŒ…å«äº†æˆé•¿çš„æ€æƒ³ï¼Œä½†ä¸å®Œå…¨å®žçްæˆé•¿ä½“的形å¼ä¸ŽåŠ›é‡ã€‚胚胎会æˆé•¿ã€‚它会å˜å¤§ã€‚å®ƒçœ‹èµ·æ¥æ›´åƒæˆé•¿ä½“,并越æ¥è¶Šæœ‰ç”¨ã€‚最终它孕育果实。最åŽï¼Œå®ƒæ­»äº¡å¹¶ä¸”它的躯体喂养了其他的有机体。 + +对待软件我们也应当有这样的è£è€€ã€‚ä¸€æž¶æ¡¥ä¸æ˜¯è¿™æ ·çš„,永远ä¸ä¼šæœ‰ä¸€æž¶å©´å„¿æ¡¥ï¼Œä½†åªæ˜¯æœ‰ä¸€åº§æœªå®Œæˆçš„æ¡¥ã€‚桥比软件è¦ç®€å•得多。 + +认识到软件的æˆé•¿æ˜¯æœ‰ç›Šçš„,因为这å…许我们在有一个完美的æ€ç»´å›¾æ™¯å‰å–得有用的进步。我们å¯ä»¥ä»Žç”¨æˆ·é‚£é‡ŒèŽ·å¾—åé¦ˆï¼Œå¹¶ç”¨ä¹‹çº æ­£è¿™ç§æˆé•¿ã€‚修剪掉疲软的四肢æ‰èƒ½å¥åº·ã€‚ + +程åºå‘˜å¿…须设计一个完æˆçš„å¯åˆ†å‘å¯ä½¿ç”¨çš„系统。但高级程åºå‘˜éœ€è¦åšçš„æ›´å¤šã€‚你必须设计一个终止于完结系统的æˆé•¿è·¯çº¿ã€‚你的工作是,得到一个想法的èŒèŠ½ï¼Œç„¶åŽæŠŠå®ƒå°½å¯èƒ½é¡ºåˆ©åœ°å˜æˆä¸€ä¸ªæœ‰ç”¨çš„人工制å“。 + +因此,你必须模拟最终的结果,用一ç§å·¥ç¨‹å›¢é˜Ÿå¯ä»¥ä¸ºä¹‹é›€è·ƒçš„æ–¹å¼åŽ»äº¤æµã€‚但你也必须和他们交æµä¸€æ¡éžè·³è·ƒå¼çš„è·¯å¾„ï¼Œä»Žä»–ä»¬æ‰€çŸ¥åˆ°ä»–ä»¬æƒ³è¦æˆä¸ºçš„地方去。在整个过程中,这棵树必须活ç€ï¼Œå®ƒä¸èƒ½åœ¨ä»€ä¹ˆæ—¶å€™æ­»åŽ»ï¼Œç„¶åŽåˆå¤æ´»è¿‡æ¥ã€‚ + +è¿™æ¡è·¯å¾„会是螺旋å‘展的。里程碑之间永远ä¸ä¼šå¤ªè¿œï¼Œè¿™å¯¹äºŽåœ¨è·¯ä¸Šå–得进步是有用的。在æžç«¯çš„商业环境里,如果里程碑å¯ä»¥å®žçŽ°å¹¶å°½æ—©èµšé’±æ˜¯æœ€å¥½çš„ã€‚å³ä½¿ä»–们离良好设计的端点还有很远。程åºå‘˜çš„ä¸€ä¸ªå·¥ä½œå°±æ˜¯é€šè¿‡ç†æ™ºçš„选择用里程碑表示的æˆé•¿è·¯å¾„æ¥å¹³è¡¡å³æ—¶çš„æŠ¥é…¬ä¸Žå°†æ¥çš„æŠ¥é…¬ã€‚ + +高级程åºå‘˜å¯¹è½¯ä»¶ï¼Œå›¢é˜Ÿï¼Œä¸ªäººçš„æˆé•¿æœ‰é›†ä½“è´£ä»»ã€‚ + +一个读者,Rob Hafernik,在这一节中写下了这样的评论: + +> 我认为你过低强调了这里的é‡è¦æ€§ã€‚ä¸ä»…是系统,还有算法,用户界é¢ï¼Œæ•°æ®æ¨¡åž‹ï¼Œç­‰ç­‰ã€‚å› ä¸ºä½ å·¥ä½œåœ¨ä¸€ä¸ªåºžå¤§çš„ç³»ç»Ÿä¸­ï¼Œå¿…é¡»æœ‰å³æ—¶ç›®æ ‡ç›¸å…³çš„坿µ‹é‡çš„进步,所以这些也是*至关é‡è¦çš„*。没有什么比抵达终点å´å‘现一切都ä¸èƒ½å·¥ä½œæ›´åŠ ææ€–(看看最近的投票新闻系统的崩溃å§ï¼‰ã€‚我甚至想进一步把这当åšè‡ªç„¶çš„æ³•åˆ™ï¼šæ²¡æœ‰åºžå¤§ï¼Œå¤æ‚的系统å¯ä»¥ç”±ç¢Žç‰‡å®žçŽ°ï¼Œè¿™åªèƒ½ç”±ä¸€ä¸ªç®€å•çš„ç³»ç»Ÿå¾ªåºæ¸è¿›æˆé•¿ä¸ºä¸€ä¸ªå¤æ‚的系统。 + +对此,我们åªèƒ½å›žç­”,*è¦æœ‰å…‰*ï¼ + +Next [如何有效地沟通](08-How-to-Communicate-Well.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md b/zh-traditional/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md new file mode 100644 index 0000000..08d6c6c --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md @@ -0,0 +1,11 @@ +# 如何有效地沟通 +[//]: # (Version:1.0.0) +ä¸ºäº†è‰¯å¥½åœ°æ²Ÿé€šï¼Œä½ å¿…é¡»è®¤è¯†åˆ°å®ƒçš„å›°éš¾ã€‚å®ƒæœ¬èº«å°±æ˜¯ä¸€ç§æŠ€èƒ½ã€‚ä¸Žä½ äº¤æµçš„人本身是有瑕疵的,这一事实使得沟通å˜å¾—更加困难。他们ä¸ä¼šåŠªåŠ›åŽ»ç†è§£ä½ ã€‚他们ä¸å–„言辞。他们ç»å¸¸è¿‡åº¦å·¥ä½œæˆ–者无èŠï¼Œè‡³å°‘,有时候åªå…³æ³¨ä»–们自己的工作而éžä½ è¦å‘表的长篇大论。上课,练习写作,公共演讲,è†å¬ï¼Œè¿™äº›ä¸œè¥¿çš„一个好处是,如果你擅长它们,你å¯ä»¥æ›´å®¹æ˜“看到问题所在以åŠè§£å†³æ–¹æ³•。 + +程åºå‘˜æ˜¯ä¸€ç§ä¾èµ–于与团队交æµè€Œç”Ÿå­˜çš„社会动物。高级程åºå‘˜æ˜¯ä¸€ç§ä¾èµ–于与团队外的人交æµè€Œæ»¡æ„的社会动物。 + +程åºå‘˜ä»Žæ··æ²Œä¸­å¸¦æ¥ç§©åºï¼Œä¸€ç§å®žçŽ°è¿™ä¸€ç›®æ ‡çš„æœ‰è¶£æ–¹æ³•æ˜¯ä»Žå¤–éƒ¨çš„ä¸€ä¸ªæè®®å¼€å§‹ã€‚这能用*稻è‰äºº*或*白纸*æ¨¡å¼æˆ–者å£å¤´çš„æ–¹å¼æ¥å®Œæˆã€‚è¿™ç§é¢†å¯¼å¯¹äºŽè®©å›¢é˜Ÿç½®èº«äºŽè¾©è®ºä¸­æœ‰æžå¤§çš„好处。这也把你暴露到批评,或者拒ç»ä¸Žå¦å®šä¸­ã€‚高级程åºå‘˜å¿…须准备好接å—这些,因为他有特殊的能力,也因此有特殊的责任。éžç¨‹åºå‘˜å‡ºèº«çš„ä¼ä¸šå®¶éœ€è¦ç¨‹åºå‘˜åœ¨æŸäº›æ–¹é¢æä¾›é¢†å¯¼ã€‚程åºå‘˜æ˜¯æ€æƒ³ä¸ŽçŽ°å®žä¹‹é—´çš„ä¸€éƒ¨åˆ†æ¡¥æ¢ã€‚ + +æˆ‘æ²¡æœ‰å¾ˆå¥½åœ°æŽŒæ¡æ²Ÿé€šçš„æŠ€å·§ï¼Œä½†æˆ‘正在å°è¯•的是一ç§å››å‰è·¯å¾„:在我有了一些有åºçš„主æ„并且充分准备好åŽï¼Œæˆ‘试ç€å£å¤´è¡¨è¾¾ï¼Œäº¤ç»™äººä»¬ä¸€å¼ ç™½çº¸ï¼ˆå¯èƒ½æ˜¯çœŸå®žçš„纸,也å¯èƒ½æ˜¯ç”µå­çš„)æ¥ç»™ä»–们展示一个 demo,然åŽè€å¿ƒåœ°é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚很多次我想过,我们在这ç§å›°éš¾çš„æ²Ÿé€šé‡Œè¿˜æ˜¯ä¸å¤Ÿè€å¿ƒã€‚如果你的想法没有马上被接å—,你ä¸åº”该丧气。如果你在准备中投入了精力,没有人会因此看低你。 + +Next [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md b/zh-traditional/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md new file mode 100644 index 0000000..fa4f1b7 --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md @@ -0,0 +1,9 @@ +# å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西 +[//]: # (Version:1.0.0) +你会ç»å¸¸éœ€è¦å‘Šè¯‰äººä»¬ä¸€äº›è®©ä»–们ä¸èˆ’æœçš„事情。记ä½ï¼Œä½ å¿…须为æŸç§åŽŸå› æ‰è¿™æ ·åšã€‚å³ä½¿æ²¡æœ‰ä»€ä¹ˆå¯ä»¥ç”¨æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ ä¹Ÿè¯¥å°½æ—©å‘Šè¯‰ä»–们,这样他们æ‰èƒ½å……分警觉。 + +å‘åˆ«äººæŒ‡å‡ºä¸€ä¸ªé—®é¢˜çš„æœ€å¥½æ–¹æ³•æ˜¯åŒæ—¶æä¾›ä¸€ä¸ªè§£å†³æ–¹æ¡ˆã€‚其次的方法是呼å他们寻求帮助。如果你有ä¸è¢«ä¿¡ä»»çš„å±é™©ï¼Œä½ åº”该为你的主张寻求支æŒã€‚ + +一ç§ä½ å¿…须说的最ä¸èˆ’æœä¸”æ™®é的事情是“时间ä¸å¤Ÿâ€ã€‚尽责的程åºå‘˜è®¨åŽŒè¿™æ ·è¯´ï¼Œä½†å¿…é¡»å°½æ—©è¯´ã€‚æ²¡æœ‰ä»€ä¹ˆæ¯” deadline 抵达,ä¸å¾—ä¸æŽ¨è¿Ÿè¿›åº¦æ›´åŠ ç³Ÿç³•ï¼Œå³ä½¿å”¯ä¸€çš„行动是通知æ¯ä¸ªäººã€‚æ›´å¥½çš„åšæ³•是,作为一个团队整体æ¥åšè¿™ä»¶äº‹ï¼Œå¦‚果物ç†ä¸Šåšä¸åˆ°ï¼Œè‡³å°‘是精神上这样åšã€‚你会想è¦å¾—到你的团队对你的观点以åŠä½ ä¸ºä¹‹æ‰€åšçš„事情的支æŒï¼Œå›¢é˜Ÿå¿…须与你共åŒé¢å¯¹è¿™æ ·çš„åŽæžœã€‚ + +Next [如何处ç†ç®¡ç†ç¥žè¯](10-How-to-Deal-with-Managerial-Myths.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md b/zh-traditional/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md new file mode 100644 index 0000000..3d18a0e --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md @@ -0,0 +1,12 @@ +# 如何处ç†ç®¡ç†ç¥žè¯ +[//]: # (Version:1.0.0) +*神è¯*è¿™ä¸ªè¯æœ‰æ—¶å€™æ„味ç€è™šæž„ã€‚ä½†è¿™æœ‰ç€æ›´æ·±å±‚的内涵。它也æ„味ç€ä¸€äº›è§£é‡Šå®‡å®™ä»¥åŠå’Œäººç±»å’Œå®‡å®™ä¹‹é—´çš„关系的宗教故事。管ç†è€…倾å‘于忘记他们作为一个程åºå‘˜æ—¶å­¦åˆ°çš„东西,并且相信æŸç§ä¼ è¯´ã€‚试ç€è®©ä»–们相信这ç§ä¼ è¯´æ˜¯é”™çš„,正如让一个虔诚的宗教信徒从他们的信仰中醒悟过æ¥ä¸€æ ·ç²—é²è€Œå¤±è´¥ã€‚因此,你应该认å¯è¿™äº›ä¿¡ä»°ï¼š + +- æ–‡æ¡£è¶Šå¤šè¶Šå¥½ã€‚ï¼ˆä»–ä»¬éœ€è¦æ–‡æ¡£ï¼Œä½†ä»–们ä¸ä¼šæƒ³è¦ä½ åœ¨è¿™äº›ä¸œè¥¿ä¸ŠèŠ±æ—¶é—´ã€‚ï¼‰ +- 程åºå‘˜æ˜¯å¹³ç­‰çš„。(程åºå‘˜å¯ä»¥æŒ‰é‡è¦ç¨‹åº¦åˆ†ç±»ã€‚) +- åˆ†é…æ›´å¤šèµ„æºç»™è¿Ÿæ¥çš„项目å¯ä»¥è®©å®ƒåŠ é€Ÿã€‚ï¼ˆä¸Žæ–°äººçš„äº¤æµçš„代价大多数时候很ç¹é‡å¹¶ä¸”无用。) +- 程åºå‘˜çš„æ•ˆçއå¯ä»¥ç”¨ä¸€äº›ç®€å•的标准尺度æ¥åº¦é‡ï¼Œæ¯”如代ç è¡Œæ•°ï¼ˆå¦‚æžœç®€æ´æ‰æ˜¯åŠ›é‡ï¼Œé‚£ä¹ˆä»£ç è¡Œæ•°æ˜¯å的,而éžå¥½çš„。) + +如果有机会,你å¯ä»¥è¯•ç€è§£é‡Šè¿™äº›ä¸œè¥¿ï¼Œä½†å¦‚果你没有æˆåŠŸï¼Œä¸è¦è§‰å¾—悲伤,ä¸è¦å¥½æ–—地å对这些神è¯ä»¥è‡´æŸå®³äº†ä½ çš„声望。æ¯ä¸ªè¿™æ ·çš„神è¯å¢žå¼ºäº†ç®¡ç†è€…关于他们有一些对正在进行的事情的实际控制的想法。真相是,如果管ç†è€…是好的,他们会帮助你,如果他们是å的,他们会妨ç¢ä½ ã€‚ + +Next [如何处ç†ç»„织混乱](11-How-to-Deal-with-Organizational-Chaos.md) diff --git a/zh-traditional/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md b/zh-traditional/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md new file mode 100644 index 0000000..b7236df --- /dev/null +++ b/zh-traditional/3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md @@ -0,0 +1,11 @@ +# 如何处ç†ç»„织混乱 +[//]: # (Version:1.0.0) +ç»å¸¸ä¼šæœ‰çŸ­æš‚的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对æ¯ä¸ªäººæ¥è¯´è¿™éƒ½æ˜¯ä»¤äººä¸å®‰çš„,但å¯èƒ½å¯¹äºŽé‚£äº›å°†è‡ªå°Šå»ºç«‹åœ¨èƒ½åŠ›è€Œéžä½ç½®ä¸Šçš„程åºå‘˜æ¥è®²ï¼Œè¿™ç§ä¸å®‰ä¸ä¼šé‚£ä¹ˆä¸¥é‡ã€‚组织混乱对程åºå‘˜æ¥è®²æ˜¯é”»ç‚¼ä»–ä»¬çš„é­”åŠ›çš„å¥½æœºä¼šã€‚å› ä¸ºè¿™æ˜¯ä¸€ä¸ªé›†ä½“ç§˜å¯†ï¼Œåœ¨æœ€åŽæˆ‘会有所ä¿ç•™ã€‚å¦‚æžœä½ ä¸æ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œå°±ä¸è¦å†è¯»ä¸‹åŽ»äº†ã€‚ + +> 工程师有能力去创造与维æŒã€‚ + +éžå·¥ç¨‹å¸ˆå¯ä»¥å®‰æŽ’人们,但,在典型的软件公å¸ï¼Œå¦‚果没有程åºå‘˜çš„è¯ï¼Œä»–们ä¸èƒ½åˆ›é€ ä¸Žç»´æŒä»»ä½•东西,正如工程师通常ä¸èƒ½æœ‰æ•ˆåœ°é”€å”®äº§å“或者管ç†å•†ä¸šã€‚è¿™ç§åŠ›é‡å¯¹äºŽå¤§å¤šæ•°ä¸Žä¸´æ—¶ç»„ç»‡æ··ä¹±ç›¸å…³çš„é—®é¢˜æ˜¯ä¸€ç§æŠµæŠ—ã€‚å¦‚æžœä½ æœ‰è¿™ç§åŠ›é‡ï¼Œä½ åº”å½“å®Œå…¨å¿½è§†è¿™ç§æ··ä¹±å¹¶å½“åšä»€ä¹ˆéƒ½æ²¡å‘ç”Ÿé‚£æ ·åšæŒä¸‹åŽ»ã€‚ä½ å¯èƒ½ï¼Œå½“然,被解雇,但如果这å‘生了,你å¯èƒ½å› ä¸ºè¿™ç§åŠ›é‡å¾—到新的工作。更普é的,一些紧张的没有这ç§é­”力的人会进入你的空间并告诉你åšä¸€äº›è ¢äº‹ã€‚å¦‚æžœä½ çœŸçš„ç¡®ä¿¡è¿™æ˜¯ä¸€ä»¶è ¢äº‹ï¼Œæœ€å¥½çš„åšæ³•是微笑,点头,直到他们走开,然åŽç»§ç»­åšä½ è®¤ä¸ºå¯¹å…¬å¸æœ€å¥½çš„事情。 + +如果你是一个领导者,告诉你的员工åšä¸€æ ·çš„事情,告诉他们忽视其他任何人告诉他们的东西。这ç§è¡Œä¸ºçš„è¿‡ç¨‹å¯¹ä½ ä¸ªäººæ˜¯æœ€å¥½çš„ï¼Œå¯¹ä½ çš„å…¬å¸æˆ–工程也是最好的。 + +Next [è¯æ±‡è¡¨](../../4-Glossary.md) diff --git a/zh-traditional/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md b/zh-traditional/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md new file mode 100644 index 0000000..494edab --- /dev/null +++ b/zh-traditional/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md @@ -0,0 +1,9 @@ +# 如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分 +[//]: # (Version:1.0.0) +解决困难,识别ä¸å¯èƒ½æ˜¯æˆ‘们的工作。大多数èŒä¸šç¨‹åºå‘˜è®¤ä¸ºï¼Œå¦‚果有些问题ä¸èƒ½ä»Žä¸€ä¸ªç®€å•系统å‘展而æ¥ï¼Œæˆ–者ä¸èƒ½è¯„估,那它就是ä¸å¯èƒ½å®žçŽ°çš„ã€‚ç„¶è€Œï¼Œæ ¹æ®è¿™ä¸ªå®šä¹‰ï¼Œç ”究本身就是ä¸å¯èƒ½çš„。大é‡çš„å·¥ä½œæ˜¯å›°éš¾çš„ï¼Œä½†ä¸æ˜¯å¿…ç„¶ä¸å¯èƒ½çš„。 + +è¿™ç§åŒºåˆ«æ˜¯æ»‘稽的,因为你å¯èƒ½ç»å¸¸è¢«è¦æ±‚åšä¸€äº›äº‹å®žä¸Šä¸å¯èƒ½çš„事情,ä¸è®ºæ˜¯ä»Žç§‘学观点还是从软件工程观点。然åŽä½ çš„å·¥ä½œå°±å˜æˆäº†å¸®åŠ©è€æ¿æ‰¾åˆ°ä¸€ä¸ªåˆç†çš„,仅仅是困难而éžä¸å¯èƒ½çš„解决方案,去满足他们大部分的需è¦ã€‚当一个解决方案å¯ä»¥è¢«è‡ªä¿¡åœ°è§„划且风险å¯ä»¥é¢„æ–™æ—¶ï¼Œå®ƒåªæ˜¯å›°éš¾è€Œå·²ã€‚ + +ç æŽ‰æ¨¡ç³Šçš„éœ€æ±‚æ˜¯ä¸å¯èƒ½çš„ï¼Œæ¯”å¦‚â€œæž„å»ºä¸€ä¸ªç³»ç»Ÿä¸ºä»»ä½•äººè®¡ç®—æœ€å—æ¬¢è¿Žçš„å‘型和颜色â€ã€‚如果需求å¯ä»¥åšå¾—更加细致,它就ç»å¸¸ä¼šå˜æˆä»…仅是困难,比如“构建一个系统去计算æŸä¸ªäººçš„å‘型和颜色,å…许他们预览与åšå‡ºæ”¹å˜ï¼Œè®©é¡¾å®¢åœ¨åŽŸå§‹é£Žæ ¼çš„åŸºç¡€ä¸Šæ»¡æ„度å˜å¤§ï¼Œè¿™æ ·æˆ‘们就å¯ä»¥èµšå¾ˆå¤šé’±â€ã€‚如果没有关于æˆåŠŸçš„æ¸…æ™°å®šä¹‰ï¼Œä½ å°±ä¸ä¼šæˆåŠŸã€‚ + +Next [如何使用嵌入型语言](02-How-to-Utilize-Embedded-Languages.md) diff --git a/zh-traditional/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md b/zh-traditional/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md new file mode 100644 index 0000000..8f7f7b8 --- /dev/null +++ b/zh-traditional/3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md @@ -0,0 +1,11 @@ +# 如何使用嵌入型语言 +[//]: # (Version:1.0.0) +把一ç§ç¼–程语言嵌入到一个系统对程åºå‘˜æ¥è®²æœ‰ç€å‡ ä¹Žä¸Žæ€§ä¸€æ ·çš„é­”åŠ›ã€‚è¿™æ˜¯ä¸€ç§æœ€å…·æœ‰åˆ›é€ åŠ›çš„å¯ä»¥è¡¨çŽ°çš„è¡Œä¸ºã€‚è¿™ä½¿å¾—ç³»ç»ŸæƒŠäººåœ°å¼ºå¤§ã€‚è¿™ä¹Ÿå…è®¸ä½ é”»ç‚¼å¤§å¤šæ•°åˆ›é€ æ€§å’Œæœ‰ç”Ÿå‘½åŠ›çš„èƒ½åŠ›ï¼ŒæŠŠç³»ç»Ÿå˜æˆä½ çš„æœ‹å‹ã€‚ + +世界上最好的文本编辑器都有嵌入性语言。这å¯ä»¥è¢«ç”¨äºŽé¢„计的观众å¯ä»¥æŽŒæ¡çš„语言的范围,语言的使用å¯ä»¥å˜ä¸ºå¯é€‰çš„,正如文本编辑器里那样,这样在一开始å¯ä»¥ä½¿ç”¨å®ƒï¼Œè€Œæ²¡æœ‰å…¶ä»–人必须使用它。 + +我和许多其他的程åºå‘˜æ›¾å å…¥åˆ›é€ ç‰¹æ®Šç›®çš„的嵌入型语言的困境里。我曾ç»åŽ†è¿‡ä¸¤æ¬¡ã€‚å·²ç»å­˜åœ¨äº†è®¸å¤šä¸ºåµŒå…¥åž‹è¯­è¨€è®¾è®¡çš„语言,在创造一个新的语言å‰ï¼Œä½ åº”该三æ€ã€‚ + +使用嵌入型语言å‰ï¼ŒçœŸå®žçš„需è¦è‡ªé—®çš„问题是:这ç§å·¥ä½œä¸Žæˆ‘的观众的文化是一致还是相悖?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œè¿™ä¼šæœ‰å¸®åŠ©å—?如果你的目标观众都是éžç¨‹åºå‘˜ï¼Œä»–们会更喜欢 API å—?他会是什么语言?程åºå‘˜ä¸ä¼šæƒ³è¦å­¦ä¹ ä¸€ç§æ–°çš„使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将ä¸ä¼šèŠ±å¤ªå¤šæ—¶é—´åŽ»å­¦ä¹ å®ƒã€‚åˆ›é€ ä¸€ç§æ–°çš„语言是一ç§å¿«ä¹ã€‚但我们ä¸åº”该让这é®è”½äº†è§‚察用户的åŒçœ¼ã€‚除éžä½ æœ‰ä¸€äº›çœŸæ­£åŽŸå§‹çš„éœ€æ±‚ä¸Žæƒ³æ³•ï¼Œä¸ºä»€ä¹ˆä¸ä½¿ç”¨ä¸€ç§å·²å­˜åœ¨çš„语言呢?这样你就å¯ä»¥åˆ©ç”¨å¥½ç”¨æˆ·å¯¹å®ƒå·²æœ‰çš„è¿™ç§ç†Ÿæ‚‰äº†ã€‚ + +Next [选择语言](03-Choosing-Languages.md) diff --git a/zh-traditional/3-Advanced/Technical-Judgment/03-Choosing-Languages.md b/zh-traditional/3-Advanced/Technical-Judgment/03-Choosing-Languages.md new file mode 100644 index 0000000..09cc157 --- /dev/null +++ b/zh-traditional/3-Advanced/Technical-Judgment/03-Choosing-Languages.md @@ -0,0 +1,15 @@ +# 选择语言 +[//]: # (Version:1.0.0) +喜欢程åºå‘˜è¿™ä»½å·¥ä½œçš„独立的程åºå‘˜å¯ä»¥ä¸ºä»»åŠ¡é€‰æ‹©æœ€å¥½çš„è¯­è¨€ã€‚å¤§å¤šæ•°èŒä¸šç¨‹åºå‘˜æŽ§åˆ¶ä¸äº†ä»–们将è¦ä½¿ç”¨çš„语言。通常,这个è¯é¢˜ä¼šç”±æ‰§è¡Œè¡Œæ”¿å†³è®®è€ŒéžæŠ€æœ¯å†³è®®çš„ boss 说出,他们缺少勇气去æå‡æ–°åž‹å·¥å…·ï¼Œå³ä½¿ä»–们知é“,大多数时候使用最新的知识,最少被接å—的工具是最好的。å¦ä¸€äº›æƒ…况下,这ç§å›¢ä½“ä¸­çœŸå®žçš„å¥½å¤„ï¼Œä»¥åŠæ‹“展一个更大的社区的好处,排除了个人的选择。通常管ç†è€…由能够雇用在给定的语言有些ç»éªŒçš„程åºå‘˜çš„需求所驱动。毫无疑问他们æœåŠ¡äºŽä»–ä»¬æ‰€è¿½æ±‚çš„ï¼Œä»¥æˆä¸ºå·¥ç¨‹æˆ–å…¬å¸çš„æœ€ä½³ä¹è¶£ï¼Œè€Œä¸”ä»–ä»¬ä¼šä»¥æ­¤è¢«å°Šæ•¬ã€‚å¹¶ä¸”ï¼Œæˆ‘ä¸ªäººç›¸ä¿¡ï¼Œè¿™ç§æœ€æµªè´¹è€Œä¸”错误的常è§è¡Œä¸ºï¼Œä½ å¾ˆæœ‰å¯èƒ½é‡åˆ°ã€‚ + +但是,当然,事物永远ä¸ä¼šæ˜¯ä¸€ç»´çš„。å³ä½¿ä¸€ç§æ ¸å¿ƒè¯­è¨€å¦¥å了,超出了你的控制范围,通常的情况是,工具和其他程åºå¯ä»¥ä¸”应该由å¦ä¸€ç§ä¸åŒçš„语言æ¥ç¼–写。如果一ç§è¯­è¨€éœ€è¦ä½œä¸ºåµŒå…¥åž‹çš„(你通常都è¦è€ƒè™‘它ï¼ï¼‰ï¼Œè¯­è¨€çš„选择很大程度上会ä¾èµ–于使用者的文化。一个人应该利用好这个问题æ¥ä¸ºä½ çš„公叿ˆ–工程æœåŠ¡ï¼Œä¸ºä»»åŠ¡ä½¿ç”¨æœ€å¥½çš„è¯­è¨€ï¼Œè¿™æ ·å¯ä»¥è®©å·¥ä½œå˜å¾—有趣。 + +一门编程语言,如果学习它比学习自然语言还è¦éš¾ï¼Œé‚£å®ƒçœŸçš„应该被称为符å·ã€‚对åˆå­¦è€…和一些门外汉æ¥è¯´â€œå­¦ä¹ ä¸€é—¨æ–°è¯­è¨€â€åƒæ˜¯ä¸€ä¸ªä»¤äººç”Ÿç•的任务,但在你掌æ¡äº†ä¸‰ç§è¯­è¨€åŽï¼Œè¿™åªæ˜¯ä¸€ä¸ªç†Ÿæ‚‰å¯ç”¨çš„库的简å•问题。一个程åºå‘˜è¶‹å‘于æ€è€ƒä¸€ä¸ªç”±ä¸‰å››é—¨è¯­è¨€ç»„æˆçš„一个大æ‚烩系统,但我认为这样一个系统在以下几方é¢è¦æ¯”å•一语言系统在很多情况下è¦å¼ºå¤§ï¼š + +- ä¸åŒç¬¦å·ç¼–写的部分间,必è¦çš„æ¾è€¦åˆå­˜åœ¨ï¼ˆè™½ç„¶å¯èƒ½æ²¡æœ‰å¹²å‡€çš„æŽ¥å£ï¼‰ +- 通过独立é‡å†™æ¯ä¸ªç»„件,你å¯ä»¥è½»æ¾åœ°å†™å‡ºä¸€ä¸ªæ–°çš„è¯­è¨€å¹³å° +- åªæœ‰ä¸€é—¨è¯­è¨€å¯èƒ½å¯¹ä¸€ä¸ªåºžå¤§çš„系统ä¸å¤ªé€‚åˆ - 你的多个模å—由多ç§è¯­è¨€ç»„æˆï¼Œèƒ½è®©ä½ ä¸ºä»»åŠ¡æ‰¾åˆ°æ­£ç¡®çš„å·¥å…·ã€‚ + +这些效应å¯èƒ½æœ‰äº›åªæ˜¯å¿ƒç†ä¸Šçš„,但心ç†ä¸Šçš„东西也很é‡è¦ã€‚最åŽè¦è¯´çš„æ˜¯ï¼Œè¯­è¨€æš´æ”¿çš„代价超过了它能æä¾›çš„æ‰€æœ‰å¥½å¤„。 + +Next [明智地妥å - 如何与时间压力斗争](../Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) diff --git a/zh-traditional/4-Glossary.md b/zh-traditional/4-Glossary.md new file mode 100644 index 0000000..de32ba9 --- /dev/null +++ b/zh-traditional/4-Glossary.md @@ -0,0 +1,110 @@ +# è¯æ±‡è¡¨ +[//]: # (Version:1.0.0) +è¿™æ˜¯è¿™ç¯‡æ–‡ç« é‡Œç”¨åˆ°çš„ä¸€äº›çŸ­è¯­çš„è¯æ±‡è¡¨ã€‚它们ä¸ä¸€å®šæ˜¯äººä»¬ç†Ÿæ‚‰çš„æ ‡å‡†å«ä¹‰ï¼ŒEric S. Raymond 曾ç»ç¼–译过一份信æ¯é‡å·¨å¤§çš„è¯æ±‡è¡¨ [HackerDict],如果你能ç†è§£å…¶ä¸­çš„ä¸€äº›ç‰‡æ®µï¼Œé˜…è¯»è¿™ä¸ªè¯æ±‡è¡¨å°†æ˜¯æƒŠå–œè€Œæ„‰æ‚¦çš„。 + +**unk-unk** +: unknown-unknown 的简写。指的是一些暂时ä¸èƒ½è¢«æ¦‚念化的问题,它们会å·èµ°é¡¹ç›®çš„æ—¶é—´å¹¶ä¸”阻塞时间表。 + +**boss** +: 给你任务的人或实体,有些地方å¯èƒ½æ³›æŒ‡å…¬ä¼—。 + +**printlining** +: 在严格的临时机制上,在程åºä¸­æ’入一些语å¥ï¼Œä¸ºè°ƒè¯•è¾“å‡ºä¸€äº›ç¨‹åºæ‰§è¡Œè¿‡ç¨‹ä¸­çš„ä¿¡æ¯ã€‚ + +**logging** +: 实践中编写程åºçš„ä¸€ç§æ–¹å¼ï¼Œä½¿å¾—它能够产生å¯è®¾ç½®çš„输出以æè¿°å®ƒçš„æ‰§è¡Œè¿‡ç¨‹ã€‚ + +**分治** +: 一ç§è‡ªä¸Šè€Œä¸‹è®¾è®¡çš„æŠ€æœ¯ï¼Œæ›´é‡è¦çš„æ˜¯ï¼Œä¸€ç§è°ƒè¯•的技术,划分问题或谜题为å°çš„问题或谜题。 + +**vapour** +: 幻觉,而且通常是对还ä¸èƒ½å‡ºå”®çš„软件虚å‡çš„æ‰¿è¯ºï¼Œå¾€å¾€ä¸ä¼šç‰©è´¨åŒ–为任何固定的东西。 + +**boss** +: 给你设定任务的人,有些时候,也指用户。 + +**tribe** +: 与你一åŒä¸ºç›¸åŒç›®æ ‡å¥‹æ–—的人们。 + +**低垂的水果** +: 轻易能达到的巨大æå‡ã€‚ + +**主办人** +:项目的å‘起人 + +**垃圾** +: ä¸å†éœ€è¦è¢«æ”¾åœ¨å†…存中的对象 + +**商业** +: 一群为财富èšåˆåœ¨ä¸€èµ·çš„人 + +**å…¬å¸** +: 一群为财富èšåˆåœ¨ä¸€èµ·çš„人 + +**集体** +: 一群与你共享文化亲缘与忠诚的人。 + +**滚动目盲** +: 一ç§ç”±äºŽæœ‰æ•ˆä¿¡æ¯è¢«å¤ªå¤šæ— æ•ˆä¿¡æ¯æŽ©ç›–导致你ä¸èƒ½å‘现它的效应 + +**挂钟** +: 由挂钟测é‡çš„现实中真实的时间,与 CPU 时间相对。 + +**瓶颈** +: 系统性能最é‡è¦çš„é™åˆ¶/一个å¯ä»¥é™åˆ¶æ€§èƒ½çš„界é™ã€‚ + +**主线** +: 一个独特的信æ¯å—,所有缓存副本都从它继承而æ¥ï¼Œä½œä¸ºè¿™ä»½æ•°æ®çš„官方版本。 + +**分é…的堆** +: 一份内存在这样的情况下å¯ä»¥è¢«ç§°ä¸ºåˆ†é…了堆:当释放它的机制已ç»å®Œæˆæ—¶ã€‚ + +**垃圾** +: å·²ç»è¢«åˆ†é…但ä¸å†æœ‰æœ‰æ•ˆæ„义的内存。 + +**GC** +: 一个回收垃圾的系统。 + +**内存泄露** +: æ— æ„æŒæœ‰çš„一系列对象的引用,它们é¿å…了垃圾回收(或者垃圾回收器或内存管ç†ç³»ç»Ÿä¸­çš„ bugï¼ï¼‰å¯¼è‡´ç¨‹åºé𿗶间逿¸å¢žåŠ äº†å®ƒçš„å†…å­˜å ç”¨ã€‚ + +**æžé™ç¼–程** +: 一ç§å¼ºè°ƒä¸Žå®¢æˆ·äº¤æµä»¥åŠè‡ªåŠ¨åŒ–æµ‹è¯•çš„ç¼–ç¨‹é£Žæ ¼ã€‚ + +**碰å£** +: 因为耗尽了æŸç§ç‰¹å®šçš„资æºå¯¼è‡´æ€§èƒ½çªç„¶å¤§å¹…度地é™çº§ + +**投机编程** +: 在知é“一个东西有用å‰å°±æŠŠå®ƒåšå‡ºæ¥ã€‚ + +**ä¿¡æ¯éšè—(å°è£…)** +: 通过使用尽å¯èƒ½å°‘暴露信æ¯çš„æŽ¥å£æ¥è®©äº‹æƒ…ä¿æŒç‹¬ç«‹è§£è€¦çš„一ç§è®¾è®¡åŽŸåˆ™ã€‚ + +**é¢å‘对象编程** +: 一ç§å¼ºè°ƒåœ¨å¯¹è±¡å†…部管ç†çжæ€çš„编程风格。 + +**交æµè¯­è¨€** +: 一ç§ä¼˜å…ˆä¸ºæ ‡å‡†åŒ–è€Œéžæ‰§è¡Œè®¾è®¡çš„语言。 + +**ç®±å­ä¸Žç®­å¤´** +: 一ç§å®½æ¾ï¼Œéžæ­£å¼çš„,由箱å­å’Œç®­å¤´ç»„åˆè€Œæˆè¡¨è¾¾å…³ç³»çš„图表制作风格,这与正å¼çš„图表方法论,比如 UML,相对。 + +**通用语** +: 一ç§è¯­è¨€æ˜¯å¦‚æ­¤å—æ¬¢è¿Žä»¥è‡³äºŽå®ƒæˆäº†å®ƒçš„领域中实际上的标准,例如法语一度æˆä¸ºå›½é™…外交的手段。 + +**buy vs. build** +: 用æ¥å½¢å®¹è´­ä¹°è½¯ä»¶è¿˜æ˜¯è‡ªå·±ç¼–写软件这样的选择。 + +**åˆå¹¶å·¥ä½œ** +: 需è¦å¾ˆå°‘创造力并产生很少风险的工作,åˆå¹¶å·¥ä½œå¯ä»¥è¢«å¾ˆå®¹æ˜“地评估。 + +**编程符å·** +: 编程语言的åŒä¹‰è¯ï¼Œå¼ºè°ƒç¼–程语言的数学本质以åŠå®ƒä»¬ä¸Žè‡ªç„¶è¯­è¨€ç›¸æ¯”的简å•之处。 + +**稻è‰äºº** +: 一ç§ç”¨æ¥ä½œä¸ºæŠ€æœ¯è®¨è®ºèµ·ç‚¹çš„æ–‡æ¡£ã€‚稻è‰äººä¹Ÿå¯ä»¥å¼•ç”³å‡ºç«æŸ´äººï¼Œç½å¤´äººï¼Œæœ¨å¤´äººï¼Œé“人,等等。 + +**白纸** +: 一ç§ä¿¡æ¯æ–‡æ¡£ï¼Œé€šå¸¸ç”¨æ¥è§£é‡Šæˆ–å°†äº§å“æˆ–æ€æƒ³å–给观众而éžç¨‹åºå‘˜ã€‚ + +Next [书ç±/网站](5-Bibliography.md) diff --git a/zh-traditional/5-Bibliography.md b/zh-traditional/5-Bibliography.md new file mode 100644 index 0000000..a3e97a6 --- /dev/null +++ b/zh-traditional/5-Bibliography.md @@ -0,0 +1,31 @@ +# 附录 A - 书目/网站目录 +[//]: # (Version:1.0.0) +## 书目 + +[Rules00] Guy Kawasaki, Michelle Moreno, and Gary Kawasaki. 2000. HarperBusiness. Rules for Revolutionaries: The Capitalist Manifesto for Creating and Marketing New Products and Services. + +[RDev96] Steve McConnell. 1996. Microsoft Press. Redmond, Wash. Rapid Development: Taming Wild Software Schedules. + +[CodeC93] Steve McConnell. 1993. Microsoft Press. Redmond, Wash. Code Complete. + +[XP99] Kent Beck. 1999. 0201616416. Addison-Wesley. Extreme Programming Explained: Embrace Change. + +[PlanXP00] Kent Beck and Martin Fowler. 2000. 0201710919. Addison-Wesley. Planning Extreme Programming. + +[Prag99] Andrew Hunt, David Thomas, and Ward Cunningham. 1999. 020161622X. Addison-Wesley. The Pragmatic Programmer: From Journeyman to Master. + +[Stronger] Friedrich Nietzsche. 1889. Twilight of the Idols, "Maxims and Arrows", section 8.. + +## 网站 + +[PGSite] Paul Graham. 2002. Articles on his website: [http://www.paulgraham.com/articles.html](http://www.paulgraham.com/articles.html). All of them, but especially "Beating the Averages". + +[Hacker] Eric S. Raymond. 2003. How to Become a Hacker. [http://www.catb.org/~esr/faqs/hacker-howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html). + +[HackDict] Eric S. Raymond. 2003. The New Hacker Dictionary. [http://catb.org/esr/jargon/jargon.html](http://catb.org/esr/jargon/jargon.html). + +[ExpCS] Edsger W. Dijkstra. 1986. How Experimental is Computing Science?. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD988a.PDF). + +[Knife] Edsger W. Dijkstra. 1984. On a Cultural Gap. [http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF](http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD913.PDF). + +Next [History](6-History.md) diff --git a/zh-traditional/6-History.md b/zh-traditional/6-History.md new file mode 100644 index 0000000..e6edd54 --- /dev/null +++ b/zh-traditional/6-History.md @@ -0,0 +1,47 @@ +# 附录 B - åŽ†å² +[//]: # (Version:1.0.0) +## è¿ç§»åˆ° Github + +这篇文章已ç»åœ¨ github 上作为一个仓库创建了,这样它å¯ä»¥å¾ˆå®¹æ˜“åœ°è¢«åˆ†äº«ã€æ›´æ–°ã€æé«˜ã€‚它是从这里å¤åˆ¶è¿‡æ¥çš„。[http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm](http://samizdat.mines.edu/howto/HowToBeAProgrammer.htm) by [Braydie Grove](https://github.com/braydie)。 2016å¹´1月è¿ç§»åˆ° github。 + +## 希望å馈或扩展。 + +请将你对这篇文章的任何评论å‘给我,我会考虑所有的建议,大部分都会对这篇文章有所帮助。 + +这篇文章处于 GNU å…费文档授æƒä¸‹ã€‚这个授æƒä¸æ˜¯ä¸“门为文章而设计的。文章通常有连贯的令人信æœçš„æœåŠ¡äºŽä¸€ä¸ªä¸­å¿ƒçš„è®ºæ®ã€‚我希望这篇文章尽é‡çŸ­è€Œæ˜“读。 + +æˆ‘å¸Œæœ›å®ƒæ˜¯è¯´æ˜Žæ€§çš„ï¼Œå°½ç®¡ä¸æ˜¯ä¸€æœ¬æ•™ç§‘书,它被划分æˆè®¸å¤šå°èŠ‚ï¼Œè¿™æ ·æ–°çš„ç« èŠ‚å¯ä»¥è¢«è‡ªç”±åœ°æ·»åŠ è¿›åŽ»ã€‚æœ‰äº†è¿™æ ·çš„å€¾å‘,你å¯ä»¥ç”¨ä½ è§‰å¾—åˆé€‚çš„æ–¹å¼æ¥æ‰©å±•这篇文章,且æœä»Žè¿™ä¸ªæŽˆæƒçš„规定。 + +å¯èƒ½è®¤ä¸ºè¿™ä¸ªæ–‡æ¡£å€¼å¾—æ‰©å±•æœ‰ç‚¹è‡ªå¤§ï¼Œä½†å¸Œæœ›ç”Ÿç”Ÿä¸æ¯ã€‚æˆ‘ä¼šå¾ˆé«˜å…´çœ‹åˆ°ä½ ç”¨ä»¥ä¸‹çš„æ–¹å¼æ‰©å±•它: + +对æ¯ä¸ªç« èŠ‚å¢žåŠ ä¸€äº›é˜…è¯»ç†è§£ï¼Œ + +增加更多章节, + +翻译为其他语言,å³ä½¿åªæ˜¯ä¸€å°éƒ¨åˆ†ä¸€å°éƒ¨åˆ†åœ°ç¿»è¯‘,或者 + +在文字间留下批评或评论, + +用ä¸åŒå½¢å¼æž„建的能力:比如 palm æ ¼å¼æˆ–更好的 HTML æ ¼å¼ã€‚ + +å¦‚æžœä½ å‘æˆ‘传达了你的工作,我会考虑把它包括在我的å­ç‰ˆæœ¬é‡Œï¼Œéµå¾ªè¿™ä¸ªè®¸å¯è¯çš„规定。你也å¯ä»¥åœ¨æˆ‘的了解之外制作你自己的版本,正如这个å议所说的。 + +Thank you. + +Robert L. Read + +## 原始版本 + +这个文档的原始版本由 Robert L. Read 在2000年制作,并且以电å­å½¢å¼åœ¨2002年首å‘于 Samizdat Press(http://Samizdat.mines.edu) 。被 Hire.com 的程åºå‘˜æ‰€ä½¿ç”¨ã€‚ + +在这篇文章2003年被 Slashdot 刊载åŽï¼Œå¤§æ¦‚有75个人给我å‘过邮件æè¿‡å»ºè®®ä¸Žé”™è¯¯ä¿®æ”¹ã€‚我感激他们中的所有人。å¯èƒ½æœ‰å¾ˆå¤šé‡å¤ï¼Œä½†è¿™äº›äººä¸æ˜¯æå‡ºæ¥æœ€ä¸»è¦çš„建议就是第一个找到了我的 bug:Morgan McGuire, David Mason, Tom Moertel, Ninja Programmer (145252) at Slashdot, Ben Vierck, Rob Hafernik, Mark Howe, Pieter Pareit, Brian Grayson, Zed A. Shaw, Steve Benz, Maksim Ioffe, Andrew Wu, David Jeschke, ä»¥åŠ Tom Corcoran。 + +最åŽï¼Œæˆ‘想感谢 Christina Vallery,他的编辑和校对巨大地æé«˜äº†ç¬¬äºŒä»½è‰ç¨¿ï¼Œè¿˜æœ‰ Wayne Allen,他鼓励我开始了这件事情。 + +## 原始作者的简介 + +Robert L. Read ç”Ÿæ´»åœ¨å¾·å…‹è¨æ–¯ï¼Œå¥¥æ–¯æ±€, 有一个妻å­å’Œä¸¤ä¸ªå­©å­ï¼Œä»–现在是 Hire.com 的首席工程师。他在那里工作了四年。在这之å‰ä»–建立了 4R 科技,为造纸工业生产基于扫æçš„图åƒåˆ†æžè´¨é‡æŽ§åˆ¶å·¥å…·ã€‚ + +Rob 在1995年在德州大学获得数æ®åº“ç†è®ºæ–¹å‘的计算机åšå£«å­¦ä½ã€‚1987年他在 Rice 大学获得计算机科学学士学ä½ï¼Œåœ¨16岿—¶ï¼Œä»–就是一个带薪程åºå‘˜äº†ã€‚ + +Next [License](LICENSE.md) diff --git a/zh-traditional/7-Contributions.md b/zh-traditional/7-Contributions.md new file mode 100644 index 0000000..3ea8b14 --- /dev/null +++ b/zh-traditional/7-Contributions.md @@ -0,0 +1,33 @@ +# Contributions +[//]: # (Version:1.0.0) +这个仓库目标是æˆä¸ºä¸€ä¸ªç¤¾åŒºé©±åŠ¨çš„å·¥ç¨‹ï¼Œä½ çš„åŠ å…¥ä¼šæžå¤§åœ°ä¿ƒè¿›è¿™ä¸ªå‘导的质é‡ã€‚ + +## 我å¯ä»¥åšä»€ä¹ˆè´¡çŒ®ï¼Ÿ + +有很多方å¼ä¸º "How to be a Programmer" åšè´¡çŒ® + +- æ–°ç« èŠ‚çš„æ€æƒ³ +- æå‡å·²æœ‰çš„章节 +- 识别排版错误或其他章节中的问题 +- 为章节æä¾›é¢å¤–的资æºé“¾æŽ¥ +- 一般的用于æå‡å·¥ç¨‹çš„建议 +- 为这份指导æä¾›ç¿»è¯‘ + +## 翻译 + +当å‰ï¼Œè¿™ä»½æŒ‡å¯¼å·²ç»ä»Žè‹±æ–‡ç¿»è¯‘为以下语言: + +- 中文 by [ahangchen](https://github.com/ahangchen) + + **如果你第一个æä¾›äº†å…¶ä»–语言的翻译,你就是这个工程的一个明确的贡献者,请帮忙维护和 review 对翻译版本的修改。** + + +## 贡献者 + +Github 在这里会维护一个所有贡献者的列表 [contributors](https://github.com/braydie/HowToBeAProgrammer/graphs/contributors) + +## 校正与è¿ç§»åˆ°GitHub + +[Braydie Grove](https://www.github.com/braydie) å·²ç»åŒæ„作为主编。 + +Braydie 把原始的文档转æˆäº† Markdown 的形å¼å¹¶åˆ›å»ºäº†è¿™ä¸ªä»“库。 diff --git a/zh-traditional/LICENSE.md b/zh-traditional/LICENSE.md new file mode 100644 index 0000000..e579b65 --- /dev/null +++ b/zh-traditional/LICENSE.md @@ -0,0 +1,12 @@ + +## Creative Commons Attribution Share-Alike +[//]: # (Version:1.0.0) +"How To Be A Programmer: Community Version" by Robert L. Read with Community is licensed under Creative Commons Attribution Share-Alike Internal v 4.0. + +At present this work will be edited by Braydie Grove and Robert L. Read. + +We will make reasonable attempts to maintain proper attributions of contributions in the section entittle "Contributions". If you make a pull-request with a significant contribution, please add a very brief description of your contribution to that section. + + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/zh-traditional/README.md b/zh-traditional/README.md new file mode 100644 index 0000000..70e34cb --- /dev/null +++ b/zh-traditional/README.md @@ -0,0 +1,112 @@ +# How to be a Programmer 中文版 +Robert L. Read with Community +[//]: # (Version:1.0.0) +Copyright 2002, 2003, 2016 Robert L. Read + +Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +翻译:[梦里风林](https://github.com/ahangchen) + +原文:[HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) + +如果您希望改进这份中文翻译,请å‘这个[分支](https://github.com/ahangchen/HowToBeAProgrammer)æäº¤Pull request。 + +[å¯ä»¥åœ¨gitbook在线阅读或导出PDF。](https://braydie.gitbooks.io/how-to-be-a-programmer/content/zh/index.html) + +æ–‡ç« ä¸­å‡ºçŽ°çš„ä¸€äº›è¯æ±‡å¾€å¾€æœ‰ç‰¹æ®Šçš„å«ä¹‰ï¼Œå¯ä»¥åœ¨[4-è¯æ±‡è¡¨](4-Glossary.md)找到注释。 + +## 引言 +  åšä¸€ä¸ªå¥½çš„程åºå‘˜ï¼Œå›°éš¾è€Œé«˜å°šã€‚将一个软件工程集体愿景å˜ä¸ºçŽ°å®žï¼Œæœ€å›°éš¾çš„åœ°æ–¹åœ¨äºŽä¸Žä½ çš„åŒäº‹å’Œé¡¾å®¢ç›¸å¤„。编程很é‡è¦ï¼Œè¿™éœ€è¦å¼ºå¤§çš„æ™ºåŠ›å’ŒæŠ€èƒ½ã€‚ 但在好的程åºå‘˜çœ‹æ¥ï¼Œç›¸æ¯”构建一个让客户和å„ç§å„æ ·çš„åŒäº‹éƒ½æ»¡æ„çš„è½¯ä»¶ç³»ç»Ÿï¼Œï¼ˆçº¯ç²¹çš„ï¼‰ç¼–ç¨‹çœŸçš„åªæ˜¯å°å­©å­çš„玩æ„。在这篇文章里,我å°è¯•å°½å¯èƒ½ç®€æ´åœ°æ€»ç»“那些当我21岿—¶ï¼Œå¸Œæœ›åˆ«äººå‘Šè¯‰æˆ‘的事。 + +  这å¯èƒ½å¾ˆä¸»è§‚的,所以,这篇文章注定ä¸é€‚用于所有人,并且有的内容有点武断。我尽é‡å†™ä¸€äº›ç¨‹åºå‘˜åœ¨ta的工作中,éžå¸¸å¯èƒ½ä¼šé‡åˆ°çš„事情。大部分这些问题以åŠå®ƒä»¬çš„解决方案在人们的环境中如此普é,以至于我(说的)å¯èƒ½æœ‰ç‚¹å” å¨ã€‚尽管如此,我还是希望这篇文章是有用的。 + +  我们在课堂上学习编程。 那些著作: The Pragmatic Programmer [Prag99], Code Complete [CodeC93], Rapid Development [RDev96], ä»¥åŠ Extreme Programming Explained [XP99] 都传授编程(知识),并é˜è¿°åšä¸€ä¸ªå¥½çš„程åºå‘˜è¿™ä¸ªå¤§è¯é¢˜ã€‚ 在读这篇文章之å‰ï¼Œæˆ–者就是现在,你当然也应该读一读Paul Graham [PGSite] å’Œ Eric Raymond [Hacker] 的文章。 但与那些著作ä¸åŒï¼Œè¿™ç¯‡æ–‡ç« å¼ºè°ƒç¤¾äº¤é—®é¢˜å¹¶ä¸”总结了整套我所知的必须的技能。 + +  在这篇文章里,bossè¿™ä¸ªè¯æŒ‡çš„æ˜¯ä»»ä½•一个交给你工程去åšçš„人。 除了一些语境外,我会åŒä¹‰åœ°ä½¿ç”¨äº¤æ˜“,公å¸ï¼Œé›†ä½“这些è¯ï¼Œæ¯”如,交易æ„味ç€èµšé’±ï¼Œå…¬å¸æ„味ç€çŽ°ä»£çš„å·¥ä½œç©ºé—´ï¼Œé›†ä½“ä¸€èˆ¬æ˜¯é‚£äº›ä½ ä¸€èµ·å·¥ä½œçš„äººã€‚ + +  欢迎æ¥åˆ°è¿™ä¸ªç¾¤ä½“。 + +## 目录 + +1. [入门](1-Beginner) + - 个人技能 + - [学会 Debug](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [如何通过分割问题 Debug](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [如何移除一个错误](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [如何使用日志调试](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何ç†è§£æ€§èƒ½é—®é¢˜](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [如何解决性能问题](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [如何优化循环](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [å¦‚ä½•å¤„ç† I/O 开销](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [如何管ç†å†…å­˜](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [如何处ç†å¶çŽ°çš„ Bug](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [如何学习设计技能](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [如何进行实验](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + - 团队技能 + - [为什么预估很é‡è¦](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [如何预估编程时间](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [å¦‚ä½•æŠŠäººä»¬ä½œä¸ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [如何优雅地写文档](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [如何在垃圾代ç ä¸Šå·¥ä½œ](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [如何使用æºä»£ç æŽ§åˆ¶](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [如何进行å•元测试](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [毫无头绪?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [å¦‚ä½•å†³å®šä¸‹ç­æ—¶é—´](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [如何与ä¸å¥½ç›¸å¤„的人相处](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +2. [进阶](2-Intermediate) + - 个人技能 + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [如何æ‰èƒ½è¢«å¹¿æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [在时间和空间之间该如何æƒè¡¡](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [如何进行压力测试](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [如何æƒè¡¡ç®€æ´ä¸ŽæŠ½è±¡](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [如何学习新技能](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [学会打字](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [å¦‚ä½•è¿›è¡Œé›†æˆæµ‹è¯•](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [交æµè¯­è¨€](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [å¦‚ä½•åˆ†æžæ•°æ®](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + - 团队技能 + - [如何管ç†å¼€å‘æ—¶é—´](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è½¯ä»¶é£Žé™©](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [如何管ç†å’¨è¯¢](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [如何适度交æµ](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [如何直言异议以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + - 评判 + - [如何æƒè¡¡å¼€å‘è´¨é‡ä¸Žå¼€å‘æ—¶é—´](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [如何管ç†è½¯ä»¶ç³»ç»Ÿä¾èµ–](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [如何评判软件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [如何决定购买还是构建](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [如何专业地æˆé•¿](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [如何评估é¢è¯•者](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [如何决定什么时候使用奇妙的计算机科学](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [如何与éžå·¥ç¨‹å¸ˆäº¤è°ˆ](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +3. [高级](3-Advanced) + - 技术评判 + - [如何从ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°éš¾çš„部分](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型语言](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [选择语言](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - 机智地妥å + - [如何与时间压力作斗争](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ·](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何获得晋å‡](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - æœåŠ¡ä½ çš„å›¢é˜Ÿ + - [如何å‘展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何选择工作内容](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何让你队å‹çš„价值最大化](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何划分问题](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [å¦‚ä½•å¤„ç†æ— èŠçš„问题](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [å¦‚ä½•ä¸ºå·¥ç¨‹èŽ·å–æ”¯æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何å‘展一个系统](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地沟通](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¯‰äººä»¬ä»–ä»¬ä¸æƒ³å¬çš„东西](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [如何处ç†ç®¡ç†ç¥žè¯](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•å¤„ç†æ··ä¹±çš„组织](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +4. [è¯æ±‡è¡¨](4-Glossary.md) +5. [附录 A - 书ç±/网站](5-Bibliography.md) +6. [附录 B - åŽ†å² (至2016å¹´1月)](6-History.md) +6. [附录 C - 贡献 (至2016å¹´1月)](7-Contributions.md) + + +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/zh-traditional/SUMMARY.md b/zh-traditional/SUMMARY.md new file mode 100644 index 0000000..34ec39e --- /dev/null +++ b/zh-traditional/SUMMARY.md @@ -0,0 +1,86 @@ +# How to be a Programmer 正體中文版 +[//]: # (Version:1.0.0) +原文出自 https://github.com/braydie/HowToBeAProgrammer +Creative Commons License
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + +## 目錄 + +1. [入門](1-Beginner/README.md) + - 技能 + - [學習除錯](1-Beginner/Personal-Skills/01-Learn-To-Debug.md) + - [如何通éŽåˆ†å‰²å•題 Debug](1-Beginner/Personal-Skills/02-How-to-Debug-by-Splitting-the-Problem-Space.md) + - [如何移除一個錯誤](1-Beginner/Personal-Skills/03-How-to-Remove-an-Error.md) + - [如何使用日誌調試](1-Beginner/Personal-Skills/04-How-to-Debug-Using-a-Log.md) + - [如何ç†è§£æ€§èƒ½å•題](1-Beginner/Personal-Skills/05-How-to-Understand-Performance-Problems.md) + - [如何解決性能å•題](1-Beginner/Personal-Skills/06-How-to-Fix-Performance-Problems.md) + - [如何優化循環](1-Beginner/Personal-Skills/07-How-to-Optimize-Loops.md) + - [å¦‚ä½•è™•ç† I/O 開銷](1-Beginner/Personal-Skills/08-How-to-Deal-with-IO-Expense.md) + - [如何管ç†å…§å­˜](1-Beginner/Personal-Skills/09-How-to-Manage-Memory.md) + - [如何處ç†å¶ç¾çš„ Bug](1-Beginner/Personal-Skills/10-How-to-Deal-with-Intermittent-Bugs.md) + - [如何學習設計技能](1-Beginner/Personal-Skills/11-How-to-Learn-Design-Skills.md) + - [如何進行實驗](1-Beginner/Personal-Skills/12-How-to-Conduct-Experiments.md) + - 團隊技能 + - [為什麼é ä¼°å¾ˆé‡è¦](1-Beginner/Team-Skills/01-Why-Estimation-is-Important.md) + - [如何é ä¼°ç·¨ç¨‹æ™‚é–“](1-Beginner/Team-Skills/02-How-to-Estimate-Programming-Time.md) + - [如何æœç´¢ä¿¡æ¯](1-Beginner/Team-Skills/03-How-to-Find-Out-Information.md) + - [å¦‚ä½•æŠŠäººå€‘ä½œç‚ºä¿¡æ¯æº](1-Beginner/Team-Skills/04-How-to-Utilize-People-as-Information-Sources.md) + - [如何優雅地寫文檔](1-Beginner/Team-Skills/05-How-to-Document-Wisely.md) + - [如何在垃圾代碼上工作](1-Beginner/Team-Skills/06-How-to-Work-with-Poor-Code.md) + - [如何使用æºä»£ç¢¼æŽ§åˆ¶](1-Beginner/Team-Skills/07-How-to-Use-Source-Code-Control.md) + - [如何進行單元測試](1-Beginner/Team-Skills/08-How-to-Unit-Test.md) + - [毫無頭緒?休æ¯ä¸€ä¸‹](1-Beginner/Team-Skills/09-Take-Breaks-when-Stumped.md) + - [å¦‚ä½•æ±ºå®šä¸‹ç­æ™‚é–“](1-Beginner/Team-Skills/10-How-to-Recognize-When-to-Go-Home.md) + - [如何與ä¸å¥½ç›¸è™•的人相處](1-Beginner/Team-Skills/11-How-to-Deal-with-Difficult-People.md) +2. [進階](2-Intermediate/README.md) + - 個人技能 + - [å¦‚ä½•ä¿æŒæ´»åŠ›](2-Intermediate/Personal-Skills/01-How-to-Stay-Motivated.md) + - [如何æ‰èƒ½è¢«å»£æ³›ä¿¡ä»»](2-Intermediate/Personal-Skills/02-How-to-be-Widely-Trusted.md) + - [在時間和空間之間該如何權衡](2-Intermediate/Personal-Skills/03-How-to-Tradeoff-Time-vs-Space.md) + - [如何進行壓力測試](2-Intermediate/Personal-Skills/04-How-to-Stress-Test.md) + - [如何權衡簡潔與抽象](2-Intermediate/Personal-Skills/05-How-to-Balance-Brevity-and-Abstraction.md) + - [如何學習新技能](2-Intermediate/Personal-Skills/06-How-to-Learn-New-Skills.md) + - [學會打字](2-Intermediate/Personal-Skills/07-Learn-to-Type.md) + - [å¦‚ä½•é€²è¡Œé›†æˆæ¸¬è©¦](2-Intermediate/Personal-Skills/08-How-to-Do-Integration-Testing.md) + - [交æµèªžè¨€](2-Intermediate/Personal-Skills/09-Communication-Languages.md) + - [é‡åž‹å·¥å…·](2-Intermediate/Personal-Skills/10-Heavy-Tools.md) + - [å¦‚ä½•åˆ†æžæ•¸æ“š](2-Intermediate/Personal-Skills/11-How-to-analyze-data.md) + - 團隊技能 + - [如何管ç†é–‹ç™¼æ™‚é–“](2-Intermediate/Team-Skills/01-How-to-Manage-Development-Time.md) + - [如何管ç†ç¬¬ä¸‰æ–¹è»Ÿä»¶é¢¨éšª](2-Intermediate/Team-Skills/02-How-to-Manage-Third-Party-Software-Risks.md) + - [如何管ç†è«®è©¢](2-Intermediate/Team-Skills/03-How-to-Manage-Consultants.md) + - [如何é©åº¦äº¤æµ](2-Intermediate/Team-Skills/04-How-to-Communicate-the-Right-Amount.md) + - [如何直言異議以åŠå¦‚何é¿å…](2-Intermediate/Team-Skills/05-How-to-Disagree-Honestly-and-Get-Away-with-It.md) + - 評判 + - [如何權衡開發å“質與開發時間](2-Intermediate/Judgment/01-How-to-Tradeoff-Quality-Against-Development-Time.md) + - [如何管ç†è»Ÿä»¶ç³»çµ±ä¾è³´](2-Intermediate/Judgment/02-How-to-Manage-Software-System-Dependence.md) + - [如何評判一個軟件是å¦å¤ªä¸æˆç†Ÿäº†](2-Intermediate/Judgment/03-How-to-Decide-if-Software-is-Too-Immature.md) + - [如何決定購買還是構建](2-Intermediate/Judgment/04-How-to-Make-a-Buy-vs-Build-Decision.md) + - [如何專業地æˆé•·](2-Intermediate/Judgment/05-How-to-Grow-Professionally.md) + - [如何評估é¢è©¦è€…](2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) + - [如何決定什麼時候使用奇妙的計算機科學](2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) + - [如何與éžå·¥ç¨‹å¸«äº¤è«‡](2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) +3. [高級](3-Advanced/README.md) + - 技術評判 + - [如何從ä¸å¯èƒ½ä¸­æ‰¾åˆ°å›°é›£çš„部分](3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) + - [如何使用嵌入型語言](3-Advanced/Technical-Judgment/02-How-to-Utilize-Embedded-Languages.md) + - [鏿“‡èªžè¨€](3-Advanced/Technical-Judgment/03-Choosing-Languages.md) + - æ©Ÿæ™ºåœ°å¦¥å” + - [如何與時間壓力作鬥爭](3-Advanced/Compromising-Wisely/01-How-to-Fight-Schedule-Pressure.md) + - [如何ç†è§£ç”¨æˆ¶](3-Advanced/Compromising-Wisely/02-How-to-Understand-the-User.md) + - [如何ç²å¾—晉å‡](3-Advanced/Compromising-Wisely/03-How-to-Get-a-Promotion.md) + - æœå‹™ä½ çš„團隊 + - [如何發展æ‰èƒ½](3-Advanced/Serving-Your-Team/01-How-to-Develop-Talent.md) + - [如何鏿“‡å·¥ä½œå…§å®¹](3-Advanced/Serving-Your-Team/02-How-to-Choose-What-to-Work-On.md) + - [如何讓你隊å‹çš„價值最大化](3-Advanced/Serving-Your-Team/03-How-to-Get-the-Most-From-Your-Teammates.md) + - [如何劃分å•題](3-Advanced/Serving-Your-Team/04-How-to-Divide-Problems-Up.md) + - [如何處ç†ç„¡è¶£çš„å•題](3-Advanced/Serving-Your-Team/05-How-to-Handle-Boring-Tasks.md) + - [如何為工程ç²å–支æŒ](3-Advanced/Serving-Your-Team/06-How-to-Gather-Support-for-a-Project.md) + - [如何發展一個系統](3-Advanced/Serving-Your-Team/07-How-to-Grow-a-System.md) + - [如何有效地æºé€š](3-Advanced/Serving-Your-Team/08-How-to-Communicate-Well.md) + - [å¦‚ä½•å‘Šè¨´äººå€‘ä»–å€‘ä¸æƒ³è½çš„æ±è¥¿](3-Advanced/Serving-Your-Team/09-How-to-Tell-People-Things-They-Dont-Want-to-Hear.md) + - [如何處ç†ç®¡ç†ç¥žè©±](3-Advanced/Serving-Your-Team/10-How-to-Deal-with-Managerial-Myths.md) + - [å¦‚ä½•è™•ç†æ··äº‚的組織](3-Advanced/Serving-Your-Team/11-How-to-Deal-with-Organizational-Chaos.md) +4. [詞彙表](4-Glossary.md) +5. [附錄 A - 書ç±/網站](5-Bibliography.md) +6. [附錄 B - æ­·å² (至2016å¹´1月)](6-History.md) +6. [附錄 C - è²¢ç» (至2016å¹´1月)](7-Contributions.md) From ffe7058307e01512e35a0b663f9c414241a26c0d Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:22:10 -0600 Subject: [PATCH 137/149] Create How-To-Be-Mentored --- 2-Intermediate/Mentoring/How-To-Be-Mentored | 1 + 1 file changed, 1 insertion(+) create mode 100644 2-Intermediate/Mentoring/How-To-Be-Mentored diff --git a/2-Intermediate/Mentoring/How-To-Be-Mentored b/2-Intermediate/Mentoring/How-To-Be-Mentored new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/2-Intermediate/Mentoring/How-To-Be-Mentored @@ -0,0 +1 @@ + From 2255095c2674f5c7cd8b087d33674459944e7388 Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:22:54 -0600 Subject: [PATCH 138/149] Create How-to-Mentor-Others --- 2-Intermediate/Mentoring/How-to-Mentor-Others | 1 + 1 file changed, 1 insertion(+) create mode 100644 2-Intermediate/Mentoring/How-to-Mentor-Others diff --git a/2-Intermediate/Mentoring/How-to-Mentor-Others b/2-Intermediate/Mentoring/How-to-Mentor-Others new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/2-Intermediate/Mentoring/How-to-Mentor-Others @@ -0,0 +1 @@ + From 3591e34a06b61aa8d7b59ccd8582e0b12f316a5e Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:24:50 -0600 Subject: [PATCH 139/149] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4ba92c2..85f045e 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,9 @@ Welcome to the tribe. - [How to Evaluate Interviewees](en/2-Intermediate/Judgment/06-How-to-Evaluate-Interviewees.md) - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) + - Mentoring + - [How to be mentored](en/2-Intermediate/Mentoring/How-To-Be-Mentored.md) + - [How to mentor others](en/[2-Intermediate/Mentoring/How-to-Mentor-Others.md) 3. [Advanced](en/3-Advanced) - Technological Judgment - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) From 91c00337d6b03358f4d3ee645d71ee7f3f0f7a9f Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:26:42 -0600 Subject: [PATCH 140/149] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 85f045e..2018a04 100644 --- a/README.md +++ b/README.md @@ -80,8 +80,8 @@ Welcome to the tribe. - [How to Know When to Apply Fancy Computer Science](en/2-Intermediate/Judgment/07-How-to-Know-When-to-Apply-Fancy-Computer-Science.md) - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) - Mentoring - - [How to be mentored](en/2-Intermediate/Mentoring/How-To-Be-Mentored.md) - - [How to mentor others](en/[2-Intermediate/Mentoring/How-to-Mentor-Others.md) + - [How to Be Mentored](en/2-Intermediate/Mentoring/How-To-Be-Mentored.md) + - [How to Mentor Others](en/[2-Intermediate/Mentoring/How-to-Mentor-Others.md) 3. [Advanced](en/3-Advanced) - Technological Judgment - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md) From 8e6c017fb04e0f073af635d16f8bd993a8555876 Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:39:08 -0600 Subject: [PATCH 141/149] Update How-To-Be-Mentored --- 2-Intermediate/Mentoring/How-To-Be-Mentored | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/2-Intermediate/Mentoring/How-To-Be-Mentored b/2-Intermediate/Mentoring/How-To-Be-Mentored index 8b13789..01dcb37 100644 --- a/2-Intermediate/Mentoring/How-To-Be-Mentored +++ b/2-Intermediate/Mentoring/How-To-Be-Mentored @@ -1 +1,25 @@ +

How to Be Mentored

+## Introduction +Being mentored is a vital component in the growth of a programmer. It accelerates learning, provides guidance, and helps in navigating the complexities of the software industry. +This section delves into the essentials of being an effective mentee. + +### 1. Seek Out the Right Mentor + +- Identify your goals and understand what you aim to achieve to find a mentor whose expertise aligns with your objectives. +- Choose someone whose experience complements your learning needs and with whom you can build a rapport by looking for experience and compatibility: + +### 2. Be Proactive and Engaged +- Take initiative and approach your mentor with specific questions and topics for discussion. +- Show commitment! Demonstrate dedication by actively applying the guidance received and sharing progress. + +### 3. Cultivate Open Communication +- Be receptive to feedback. Embrace constructive criticism as a tool for improvement. +- Understand that your mentor is there to help. +- Acknowledge and appreciation their valuable time and effort to foster a positive mentoring relationship. + +### 4. Reflect and Act +- Regularly assess your development and identify areas needing further attention. +- Apply any insights gained to real-world scenarios to solidify your skills. + +Embracing mentorship with an open and proactive mindset can significantly enhance your programming journey, leading to both personal and professional growth. From 6a85ee604c534b444f8601b3be985a9c29b2ea12 Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:39:59 -0600 Subject: [PATCH 142/149] Update How-To-Be-Mentored --- 2-Intermediate/Mentoring/How-To-Be-Mentored | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/2-Intermediate/Mentoring/How-To-Be-Mentored b/2-Intermediate/Mentoring/How-To-Be-Mentored index 01dcb37..0d6c1d8 100644 --- a/2-Intermediate/Mentoring/How-To-Be-Mentored +++ b/2-Intermediate/Mentoring/How-To-Be-Mentored @@ -1,8 +1,6 @@

How to Be Mentored

-## Introduction -Being mentored is a vital component in the growth of a programmer. It accelerates learning, provides guidance, and helps in navigating the complexities of the software industry. -This section delves into the essentials of being an effective mentee. +## Being mentored is a vital component in the growth of a programmer. It accelerates learning, provides guidance, and helps in navigating the complexities of the software and engineering industry. ### 1. Seek Out the Right Mentor From 20945f77add5b8417ed437ca888ea59a2747dcc2 Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:47:59 -0600 Subject: [PATCH 143/149] Update How-to-Mentor-Others --- 2-Intermediate/Mentoring/How-to-Mentor-Others | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/2-Intermediate/Mentoring/How-to-Mentor-Others b/2-Intermediate/Mentoring/How-to-Mentor-Others index 8b13789..0a56ba5 100644 --- a/2-Intermediate/Mentoring/How-to-Mentor-Others +++ b/2-Intermediate/Mentoring/How-to-Mentor-Others @@ -1 +1,20 @@ +

How to Mentor Others

+## Being a mentor is a highly reward endeavor that not only aids the mentee but also enriches the mentor's experience. + +### 1. Establish Clear Objectives +- The first step is to understand the mentee's goals. Discuss and align on what they aim to achieve through the mentorship. +- Set Expectations and define the scope, frequency, and mode of interactions to ensure a structured relationship. + +### 2. Create a Supportive Environment +- Encourage questions and create a safe space for the mentee to express learn and doubts without hesitation. +- Be patient and provide consistent support. Recognize that learning is a process. + +### 3. Provide Constructive Feedback +- Offer honest insights that are truthful yet considerate, focusing on growth areas. +- Acknowledge and reinforce the mentee's capabilities to build confidence and highlight their strengths. + +### 4. Encourage Independence +- Guide them to think critically and develop solutions independently, developing valuable problem-solving skills. +- As the mentee grows in experience and knowledge, create autonomy by shifting from directive guidance to a more advisory role. +One method is to request that they to walk you through a task as if you were a beginner. From 3cb610e3c2b57c9b5b0f47c8230efa50cffaa09f Mon Sep 17 00:00:00 2001 From: Melanie Laporte <107901386+melanielaporte@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:48:14 -0600 Subject: [PATCH 144/149] Update How-To-Be-Mentored --- 2-Intermediate/Mentoring/How-To-Be-Mentored | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Intermediate/Mentoring/How-To-Be-Mentored b/2-Intermediate/Mentoring/How-To-Be-Mentored index 0d6c1d8..6acdf94 100644 --- a/2-Intermediate/Mentoring/How-To-Be-Mentored +++ b/2-Intermediate/Mentoring/How-To-Be-Mentored @@ -5,7 +5,7 @@ ### 1. Seek Out the Right Mentor - Identify your goals and understand what you aim to achieve to find a mentor whose expertise aligns with your objectives. -- Choose someone whose experience complements your learning needs and with whom you can build a rapport by looking for experience and compatibility: +- Choose someone whose experience complements your learning needs and with whom you can build a rapport by looking for experience and compatibility. ### 2. Be Proactive and Engaged - Take initiative and approach your mentor with specific questions and topics for discussion. From faa27d4df47c3847b6669b62846d1f643877314f Mon Sep 17 00:00:00 2001 From: "Robert L. Read" Date: Mon, 20 Jan 2025 23:22:16 -0600 Subject: [PATCH 145/149] some tweaks in grammar --- .../Team-Skills/03-How to Manage Consultants.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md index 94f1835..9e963f7 100644 --- a/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md +++ b/en/2-Intermediate/Team-Skills/03-How to Manage Consultants.md @@ -1,10 +1,10 @@ # How to Manage Consultants If you get appointed as technical leader of some project in a medium/big company, most likely you’ll have to deal with consultants. This is a really delicate matter, because your company is going to pay for those additional resources but the results will mostly depend on how you manage them. -“Your professional reputation depends on consultants’ performance more than consultants’ careers depend on your feedback†+“Your professional reputation depends on consultants’ performance more than consultants’ careers depend on your feedback.†Use consultants, but don't rely on them. They are wonderful people and deserve a great deal of respect. Since they get to see a lot of different projects, they often know more about specific technologies and even programming techniques than you will. The best way to use them is as educators in-house that can teach by example. After all, they are here to do something that regular employees cannot do, either because there is a big workload or because employees actually don't know how to do it. However, they usually cannot become part of the team in the same sense that regular employees are, if only because you may not have enough time to learn their strengths and weaknesses. Their financial commitment is much lower. They can move more easily. They may have less to gain if the company does well. -Formally you are the “customerâ€, so you have the right to pretend what you payed for – results – but this cannot be achieved just by scheduling deadlines. To get the most from consultants, you’ll have to leverage on your social skills more than rely on project management or scrum tools: +Formally you are the “customerâ€, so you have the right to expect what you payed for – results – but this cannot be achieved just by scheduling deadlines. To get the most from consultants, you’ll have to leverage on your social skills more than rely on project management or scrum tools: - start building a seamless team; ask consultants to join for coffee break or lunch with you and the other regular employee team members. - show consideration; start from remember consultants’ names correctly. It’s always unpleasant when someone doesn’t remember your name or spells it wrong, but if this is perceived not as simple mistake but driven by poor consideration by the customer personnel towards the consultant it becomes very annoying. - create empathy; include consultants when you say "we" while talking about the project your team is working on, let them feel that they will be really part of the success you want to achieve. @@ -12,10 +12,10 @@ Formally you are the “customerâ€, so you have the right to pretend what you p Remember that an annoyed consultant will perform very poorly, resulting in an economic damage for your company and a misstep for you as a leader. If consultants are going to write code, you must review it carefully as you go along. You cannot get to the end of the project with the risk of a large block of code that has not been reviewed. This is true of all team members, really, but you will usually have more knowledge of the team members closer to you. -You should always take into account that writing readable and maintainable code is not the main priority of a consultant - its goal is to meet client expectation which are mostly expressed in terms of deadlines and functionalities that shall be implemented. +You should always take into account that writing readable and maintainable code is not the main priority of a consultant - its goal is to meet client expectation which are mostly expressed in terms of deadlines and functionalities that shall be implemented. When deadlines are approaching, consultant are masters in rapidly patching software to make it work quickly – even if that means to embed into source code something like configuration parameters or fake data. -This is why you shall explicitly ask consultant to write good code, more than reviewing every single LOC – let pass the message that the extra effort spent for writing elegant and reusable code will be appreciated. +This is why you should explicitly ask consultant to write good code, more than reviewing every single LOC – establish the expectation that the extra effort spent for writing elegant and reusable code will be appreciated. Another good practice is to make every team member accountable in the same way for the work they produce – e.g. make mandatory for everyone to provide header comment blocks into programming code or editor/reviewers tables into delivered documents so that any file can be attributed to its author. Given the current emphasis about online professional reputation and personal branding, accountability will be a lever for consultants to avoid delivering something that they wouldn’t be proud of, encouraged by the fact that they could be already gone somewhere else when poor quality of their job is revealed. From b8c591438fe4871b7bb62227ddeef6888d4a6bfd Mon Sep 17 00:00:00 2001 From: "Robert L. Read" Date: Tue, 21 Jan 2025 13:33:48 -0600 Subject: [PATCH 146/149] Rename How-To-Be-Mentored to How-To-Be-Mentored.md --- .../Mentoring/{How-To-Be-Mentored => How-To-Be-Mentored.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 2-Intermediate/Mentoring/{How-To-Be-Mentored => How-To-Be-Mentored.md} (100%) diff --git a/2-Intermediate/Mentoring/How-To-Be-Mentored b/2-Intermediate/Mentoring/How-To-Be-Mentored.md similarity index 100% rename from 2-Intermediate/Mentoring/How-To-Be-Mentored rename to 2-Intermediate/Mentoring/How-To-Be-Mentored.md From b089c5bff53704e6b6e5c228cfd1c6b92da3c066 Mon Sep 17 00:00:00 2001 From: "Robert L. Read" Date: Tue, 21 Jan 2025 13:34:06 -0600 Subject: [PATCH 147/149] Rename How-to-Mentor-Others to How-to-Mentor-Others.md --- .../Mentoring/{How-to-Mentor-Others => How-to-Mentor-Others.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 2-Intermediate/Mentoring/{How-to-Mentor-Others => How-to-Mentor-Others.md} (100%) diff --git a/2-Intermediate/Mentoring/How-to-Mentor-Others b/2-Intermediate/Mentoring/How-to-Mentor-Others.md similarity index 100% rename from 2-Intermediate/Mentoring/How-to-Mentor-Others rename to 2-Intermediate/Mentoring/How-to-Mentor-Others.md From 9eaf91118d1b620043af7f00b06e77733266049d Mon Sep 17 00:00:00 2001 From: "Robert L. Read" Date: Tue, 21 Jan 2025 13:41:49 -0600 Subject: [PATCH 148/149] moving erroneous files --- .../2-Intermediate}/Mentoring/How-To-Be-Mentored.md | 0 .../2-Intermediate}/Mentoring/How-to-Mentor-Others.md | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {2-Intermediate => en/2-Intermediate}/Mentoring/How-To-Be-Mentored.md (100%) rename {2-Intermediate => en/2-Intermediate}/Mentoring/How-to-Mentor-Others.md (100%) diff --git a/2-Intermediate/Mentoring/How-To-Be-Mentored.md b/en/2-Intermediate/Mentoring/How-To-Be-Mentored.md similarity index 100% rename from 2-Intermediate/Mentoring/How-To-Be-Mentored.md rename to en/2-Intermediate/Mentoring/How-To-Be-Mentored.md diff --git a/2-Intermediate/Mentoring/How-to-Mentor-Others.md b/en/2-Intermediate/Mentoring/How-to-Mentor-Others.md similarity index 100% rename from 2-Intermediate/Mentoring/How-to-Mentor-Others.md rename to en/2-Intermediate/Mentoring/How-to-Mentor-Others.md From e82cc14e73609b9557a9dab5ddf7ede7b9d627d9 Mon Sep 17 00:00:00 2001 From: "Robert L. Read" Date: Tue, 21 Jan 2025 13:42:42 -0600 Subject: [PATCH 149/149] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 07ee498..e6d93ab 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Welcome to the tribe. - [How to Talk to Non-Engineers](en/2-Intermediate/Judgment/08-How-to-Talk-to-Non-Engineers.md) - Mentoring - [How to Be Mentored](en/2-Intermediate/Mentoring/How-To-Be-Mentored.md) - - [How to Mentor Others](en/[2-Intermediate/Mentoring/How-to-Mentor-Others.md) + - [How to Mentor Others](en/2-Intermediate/Mentoring/How-to-Mentor-Others.md) 3. [Advanced](en/3-Advanced) - Technological Judgment - [How to Tell the Hard From the Impossible](en/3-Advanced/Technical-Judgment/01-How-to-Tell-the-Hard-From-the-Impossible.md)