{"id":1604,"date":"2014-11-16T09:26:59","date_gmt":"2014-11-16T09:26:59","guid":{"rendered":"http:\/\/ixyzero.com\/blog\/?p=1604"},"modified":"2014-11-16T09:26:59","modified_gmt":"2014-11-16T09:26:59","slug":"%e6%b3%a8%e9%87%8d%e5%ae%9e%e6%95%88%e7%9a%84%e7%a8%8b%e5%ba%8f%e5%91%98%e4%b9%8b%e5%bf%ab%e9%80%9f%e5%8f%82%e8%80%83%e6%8c%87%e5%8d%97","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/1604.html","title":{"rendered":"\u6ce8\u91cd\u5b9e\u6548\u7684\u7a0b\u5e8f\u5458\u4e4b\u5feb\u901f\u53c2\u8003\u6307\u5357"},"content":{"rendered":"<p>\u6700\u8fd1\u5728\u770b\u300a\u7a0b\u5e8f\u5458\u4fee\u70bc\u4e4b\u9053\u2014\u2014\u4ece\u5c0f\u5de5\u5230\u4e13\u5bb6\u300b\uff0c\u5f88\u6709\u542f\u53d1\u7684\u4e00\u672c\u4e66\uff08\u867d\u7136\u5230\u73b0\u5728\u4e3a\u6b62\u6211\u8fd8\u6ca1\u4ec0\u4e48\u5927\u578b\u9879\u76ee\u7684\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u4f46\u5c31\u5e73\u65f6\u7684\u4e00\u4e9b\u95ee\u9898\u603b\u7ed3\u6765\u770b\uff0c\u8fd9\u672c\u4e66\u4e5f\u662f\u6781\u597d\u7684\uff01\uff09\uff0c\u4e0b\u9762\u662f\u8be5\u4e66\u6700\u540e\u7684\u9644\u5f55\u4e2d\u7ed9\u51fa\u7684\u4e00\u4e2a\u5feb\u901f\u53c2\u8003\u6307\u5357\uff0c\u503c\u5f97\u4f5c\u4e3atips\u7262\u8bb0\u5728\u5fc3\uff0c\u52a0\u901f\u5347\u7ea7\uff0c\u8fce\u5a36\u767d\u5bcc\u7f8e-\u8d70\u4e0a\u4eba\u751f\u5dc5\u5cf0*^_^* \uff1a<\/p>\n<p><strong>1.\u5173\u5fc3\u4f60\u7684\u6280\u827a<br \/>\nCare About Your Craft<\/strong><br \/>\n\u5982\u679c\u4f60\u4e0d\u5728\u4e4e\u80fd\u5426\u6f02\u4eae\u7684\u5f00\u53d1\u51fa\u8f6f\u4ef6\uff0c\u4f60\u53c8\u4e3a\u4f55\u8981\u8017\u8d39\u751f\u547d\u53bb\u5f00\u53d1\u8f6f\u4ef6\u5462\uff1f<\/p>\n<p><strong>2.\u601d\u8003\uff01\u4f60\u7684\u5de5\u4f5c<br \/>\nThink! About Your Work<\/strong><br \/>\n\u5173\u6389\u81ea\u52a8\u9a7e\u9a76\u4eea\uff0c\u63a5\u7ba1\u64cd\u4f5c\u3002\u4e0d\u65ad\u5730\u6279\u8bc4\u548c\u8bc4\u4f30\u4f60\u7684\u5de5\u4f5c\u3002<\/p>\n<p><strong>3.\u63d0\u4f9b\u5404\u79cd\u9009\u62e9\uff0c\u4e0d\u8981\u627e\u8e69\u811a\u7684\u501f\u53e3<br \/>\nProvide Options, Don&#8217;t Make Lame Excuses<\/strong><br \/>\n\u8981\u63d0\u4f9b\u5404\u79cd\u9009\u62e9\uff0c\u800c\u4e0d\u662f\u627e\u501f\u53e3\u3002\u4e0d\u8981\u8bf4\u4e8b\u60c5\u505a\u4e0d\u5230\uff1b\u8bf4\u660e\u80fd\u591f\u505a\u4ec0\u4e48\u3002<\/p>\n<p><strong>4.\u4e0d\u8981\u5bb9\u5fcd\u7834\u7a97\u6237<br \/>\nDon&#8217;t Live with Broken Windows<\/strong><br \/>\n\u5f53\u4f60\u770b\u5230\u7cdf\u7cd5\u7684\u8bbe\u8ba1\u3001\u9519\u8bef\u7684\u51b3\u7b56\u548c\u7cdf\u7cd5\u7684\u4ee3\u7801\u65f6\uff0c\u4fee\u6b63\u5b83\u4eec\u3002<\/p>\n<p><strong>5.\u505a\u53d8\u5316\u7684\u50ac\u5316\u5242<br \/>\nBe a Catalyst for Change<\/strong><br \/>\n\u4f60\u4e0d\u80fd\u5f3a\u8feb\u4eba\u4eec\u6539\u53d8\u3002\u76f8\u53cd\uff0c\u8981\u5411\u4ed6\u4eec\u5c55\u793a\u672a\u6765\u53ef\u80fd\u4f1a\u600e\u6837\uff0c\u5e76\u5e2e\u52a9\u4ed6\u4eec\u53c2\u4e0e\u5bf9\u672a\u6765\u7684\u521b\u9020\u3002<\/p>\n<p><strong>6.\u8bb0\u4f4f\u5927\u56fe\u666f<br \/>\nRemember the Big Picture<\/strong><br \/>\n\u4e0d\u8981\u592a\u8fc7\u4e13\u6ce8\u4e8e\u7ec6\u8282\uff0c\u4ee5\u81f3\u5fd8\u4e86\u67e5\u770b\u4f60\u5468\u56f4\u6b63\u5728\u53d1\u751f\u4ec0\u4e48\u3002<\/p>\n<p><strong>7.\u4f7f\u8d28\u91cf\u6210\u4e3a\u9700\u6c42\u95ee\u9898<br \/>\nMake Quality a Requirements lssue<\/strong><br \/>\n\u8ba9\u4f60\u7684\u7528\u6237\u53c2\u4e0e\u786e\u5b9a\u9879\u76ee\u771f\u6b63\u7684\u8d28\u91cf\u9700\u6c42\u3002<\/p>\n<p><strong>8.\u5b9a\u671f\u4e3a\u4f60\u7684\u77e5\u8bc6\u8d44\u4ea7\u6295\u8d44<br \/>\nInvest Regularly in Your Knowledge Portfolio<\/strong><br \/>\n\u8ba9\u5b66\u4e60\u6210\u4e3a\u4e60\u60ef\u3002<\/p>\n<p><strong>9.\u6279\u5224\u5730\u5206\u6790\u4f60\u8bfb\u5230\u7684\u548c\u542c\u5230\u7684<br \/>\nCritically Analyze What You Read and Hear<\/strong><br \/>\n\u4e0d\u8981\u88ab\u4f9b\u5e94\u5546\u3001\u5a92\u4f53\u7092\u4f5c\u3001\u6216\u6559\u6761\u5de6\u53f3\u3002\u8981\u4f9d\u7167\u4f60\u81ea\u5df1\u7684\u770b\u6cd5\u548c\u4f60\u7684\u9879\u76ee\u7684\u60c5\u51b5\u53bb\u5bf9\u4fe1\u606f\u8fdb\u884c\u5206\u6790\u3002<\/p>\n<p><strong>10.\u4f60\u8bf4\u4ec0\u4e48\u548c\u4f60\u600e\u4e48\u8bf4\u540c\u6837\u91cd\u8981<br \/>\nIt&#8217;s both What You Say and the Way You Say it<\/strong><br \/>\n\u5982\u679c\u4f60\u4e0d\u80fd\u6709\u6548\u5730\u5411\u4ed6\u4eba\u4f20\u8fbe\u4f60\u7684\u4e86\u4e0d\u8d77\u7684\u60f3\u6cd5\uff0c\u8fd9\u4e9b\u60f3\u6cd5\u5c31\u6beb\u65e0\u7528\u5904\u3002<\/p>\n<p><strong>11.\u4e0d\u8981\u91cd\u590d\u4f60\u81ea\u5df1<br \/>\nDRY &#8211; Don&#8217;t Repeat Yourself<\/strong><br \/>\n\u7cfb\u7edf\u4e2d\u7684\u6bcf\u4e00\u9879\u77e5\u8bc6\u90fd\u5fc5\u987b\u5177\u6709\u5355\u4e00\u3001\u65e0\u6b67\u4e49\u3001\u6743\u5a01\u7684\u8868\u793a\u3002<\/p>\n<p><strong>12.\u8ba9\u590d\u7528\u53d8\u5f97\u5bb9\u6613<br \/>\nMake It Easy to Reuse<\/strong><br \/>\n\u5982\u679c\u590d\u7528\u5f88\u5bb9\u6613\uff0c\u4eba\u4eec\u5c31\u4f1a\u53bb\u590d\u7528\u3002\u521b\u9020\u4e00\u4e2a\u652f\u6301\u590d\u7528\u7684\u73af\u5883\u3002<\/p>\n<p><strong>13.\u6d88\u9664\u65e0\u5173\u4e8b\u7269\u4e4b\u95f4\u7684\u5f71\u54cd<br \/>\nEliminate Effects Between Unrelated Things<\/strong><br \/>\n\u8bbe\u8ba1\u81ea\u8db3\u3001\u72ec\u7acb\u3001\u5e76\u5177\u6709\u5355\u4e00\u3001\u826f\u597d\u5b9a\u4e49\u7684\u76ee\u7684\u7684\u7ec4\u4ef6\u3002<\/p>\n<p><strong>14.\u4e0d\u5b58\u5728\u6700\u7ec8\u51b3\u7b56<br \/>\nThere Are No Final Decisions<\/strong><br \/>\n\u6ca1\u6709\u51b3\u7b56\u662f\u6d47\u94f8\u5728\u77f3\u5934\u4e0a\u7684\u3002\u76f8\u53cd\uff0c\u8981\u628a\u6bcf\u9879\u51b3\u7b56\u90fd\u89c6\u4e3a\u662f\u5199\u5728\u6c99\u6ee9\u4e0a\u7684\uff0c\u5e76\u4e3a\u53d8\u5316\u505a\u597d\u8ba1\u5212\u3002<\/p>\n<p><strong>15.\u7528\u66f3\u5149\u5f39\u627e\u5230\u76ee\u6807<br \/>\nUse Tracer Bullets to Find the Target<\/strong><br \/>\n\u66f3\u5149\u5f39\u80fd\u901a\u8fc7\u8bd5\u9a8c\u5404\u79cd\u4e8b\u7269\u5e76\u68c0\u67e5\u5b83\u4eec\u79bb\u76ee\u6807\u6709\u591a\u8fdc\u6765\u8ba9\u4f60\u8ffd\u8e2a\u76ee\u6807\u3002<\/p>\n<p><strong>16.\u4e3a\u4e86\u5b66\u4e60\u800c\u5236\u4f5c\u539f\u578b<br \/>\nPrototype to Learn<\/strong><br \/>\n\u539f\u578b\u5236\u4f5c\u662f\u4e00\u79cd\u5b66\u4e60\u7ecf\u9a8c\u3002\u5176\u4ef7\u503c\u5e76\u4e0d\u5728\u4e8e\u6240\u4ea7\u751f\u7684\u4ee3\u7801\uff0c\u800c\u5728\u4e8e\u6240\u5b66\u5230\u7684\u7ecf\u9a8c\u6559\u8bad\u3002<\/p>\n<p><strong>17.\u9760\u8fd1\u95ee\u9898\u9886\u57df\u7f16\u7a0b<br \/>\nProgram Close to the Problem domain<\/strong><br \/>\n\u7528\u4f60\u7684\u7528\u6237\u7684\u8bed\u8a00\u8fdb\u884c\u8bbe\u8ba1\u548c\u7f16\u7801\u3002<\/p>\n<p><strong>18.\u4f30\u7b97\uff0c\u4ee5\u907f\u514d\u53d1\u751f\u610f\u5916<br \/>\nEstimate\u00a0to Avoid Surprises<br \/>\n<\/strong>\u5728\u7740\u624b\u4e4b\u524d\u5148\u8fdb\u884c\u4f30\u7b97\u3002\u4f60\u5c06\u63d0\u524d\u53d1\u73b0\u6f5c\u5728\u7684\u95ee\u9898\u3002<\/p>\n<p><strong>19.\u901a\u8fc7\u4ee3\u7801\u5bf9\u8fdb\u5ea6\u8868\u8fdb\u884c\u8fed\u4ee3<br \/>\nIterate the Schedule with the Code<br \/>\n<\/strong>\u7528\u4f60\u5728\u8fdb\u884c\u5b9e\u73b0\u65f6\u83b7\u5f97\u7684\u7ecf\u9a8c\u63d0\u70bc\u9879\u76ee\u7684\u65f6\u95f4\u6807\u5ea6\u3002<\/p>\n<p><strong>20.\u7528\u7eaf\u6587\u672c\u4fdd\u5b58\u77e5\u8bc6<br \/>\nKeep Knowledge in Plain Text<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u7eaf\u6587\u672c\u4e0d\u4f1a\u8fc7\u65f6\u3002\u5b83\u80fd\u591f\u5e2e\u52a9\u4f60\u6709\u6548\u5229\u7528\u4f60\u7684\u5de5\u4f5c\u3002\u5e76\u7b80\u5316\u6389\u65f6\u548c\u6d4b\u8bd5\u3002<\/p>\n<p><strong>21.\u5229\u7528\u547d\u4ee4shell\u7684\u529b\u91cf<br \/>\nUse the Power of Command Shells<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u5f53\u56fe\u5f62\u7528\u6237\u754c\u9762\u65e0\u80fd\u4e3a\u529b\u65f6\u4f7f\u7528shell\u3002<\/p>\n<p><strong>22.\u7528\u597d\u4e00\u79cd\u7f16\u8f91\u5668<br \/>\nUse a Single Editor Well<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u7f16\u8f91\u5668\u5e94\u8be5\u662f\u4f60\u7684\u624b\u7684\u5ef6\u4f38\uff1b\u786e\u4fdd\u4f60\u7684\u7f16\u8f91\u5668\u662f\u53ef\u914d\u7f6e\u3001\u79d1\u6269\u5c55\u548c\u53ef\u7f16\u7a0b\u7684\u3002<\/p>\n<p><strong>23.\u603b\u662f\u4f7f\u7528\u6e90\u7801\u63a7\u5236<br \/>\nAlways Use Source Code Control<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u6e90\u7801\u63a7\u5236\u662f\u4f60\u7684\u5de5\u4f5c\u7684\u65f6\u95f4\u673a\u5668&#8211;\u4f60\u80fd\u591f\u56de\u5230\u8fc7\u53bb\u3002<\/p>\n<p><strong>24.\u8981\u4fee\u6b63\u95ee\u9898\uff0c\u800c\u4e0d\u662f\u53d1\u51fa\u6307\u8d23<br \/>\nFix the Problem, Not the Blame<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>bug\u662f\u4f60\u7684\u8fc7\u9519\u8fd8\u662f\u522b\u4eba\u7684\u8fc7\u9519\uff0c\u5e76\u4e0d\u662f\u771f\u7684\u5f88\u6709\u5173\u7cfb&#8211;\u5b83\u4ecd\u7136\u662f\u4f60\u7684\u95ee\u9898\uff0c\u5b83\u4ecd\u7136\u9700\u8981\u4fee\u6b63\u3002<\/p>\n<p><strong>25.\u8c03\u8bd5\u65f6\u4e0d\u8981\u6050\u614c<br \/>\nDon&#8217;t Panic When Debuging<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u505a\u4e00\u6b21\u6df1\u547c\u5438\uff0c\u601d\u8003\u4ec0\u4e48\u53ef\u80fd\u662fbug\u7684\u539f\u56e0\u3002<\/p>\n<p><strong>26.\u201cSelect\u201d\u6ca1\u6709\u95ee\u9898<br \/>\n&#8220;Select&#8221; Isn&#8217;t Broken<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u5728OS\u6216\u7f16\u8bd1\u5668\u3001\u751a\u6216\u662f\u7b2c\u4e09\u65b9\u4ea7\u54c1\u6216\u5e93\u4e2d\u5f88\u5c11\u53d1\u73b0bug\u3002bug\u5f88\u53ef\u80fd\u5728\u5e94\u7528\u4e2d\u3002<\/p>\n<p><strong>27.\u4e0d\u8981\u5047\u5b9a\uff0c\u8981\u8bc1\u660e<br \/>\nDon&#8217;t Assume It &#8211; Prove It<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u5728\u5b9e\u9645\u73af\u5883\u4e2d&#8211;\u4f7f\u7528\u771f\u6b63\u7684\u6570\u636e\u548c\u8fa9\u89e3\u6761\u4ef6&#8211;\u8bc1\u660e\u4f60\u7684\u5047\u5b9a\u3002<\/p>\n<p><strong>28.\u5b66\u4e60\u4e00\u79cd\u6587\u672c\u64cd\u7eb5\u8bed\u8a00<br \/>\nLearn a Text Manipulation Language<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u4f60\u7528\u6bcf\u5929\u7684\u5f88\u5927\u4e00\u90e8\u5206\u65f6\u95f4\u5904\u7406\u6587\u672c\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u8ba9\u8ba1\u7b97\u673a\u66ff\u4f60\u5b8c\u6210\u90e8\u5206\u5de5\u4f5c\u5462\uff1f<\/p>\n<p><strong>29.\u7f16\u5199\u80fd\u7f16\u5199\u4ee3\u7801\u7684\u4ee3\u7801<br \/>\nWrite Code That Writes Code<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u4ee3\u7801\u751f\u6210\u5668\u80fd\u63d0\u9ad8\u4f60\u7684\u751f\u4ea7\u7387\uff0c\u5e76\u6709\u52a9\u4e8e\u907f\u514d\u91cd\u590d\u3002<\/p>\n<p><strong>30.\u4f60\u4e0d\u53ef\u80fd\u5199\u51fa\u5b8c\u7f8e\u7684\u8f6f\u4ef6<br \/>\nYou Can&#8217;t Write Perfect Software<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u8f6f\u4ef6\u4e0d\u53ef\u80fd\u5b8c\u7f8e\u3002\u4fdd\u62a4\u4f60\u7684\u4ee3\u7801\u548c\u7528\u6237\uff0c\u4f7f\u5b83\uff08\u4ed6\uff09\u4eec\u514d\u4e8e\u80fd\u591f\u9884\u89c1\u7684\u9519\u8bef\u3002<\/p>\n<p><strong>31.\u901a\u8fc7\u5408\u7ea6\u8fdb\u884c\u8bbe\u8ba1<br \/>\nDesign with Contracts<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u4f7f\u7528\u5408\u7ea6\u5efa\u7acb\u6587\u6863\uff0c\u5e76\u68c0\u9a8c\u4ee3\u7801\u6240\u505a\u7684\u4e8b\u60c5\u6b63\u597d\u662f\u5b83\u58f0\u660e\u8981\u505a\u7684\u3002<\/p>\n<p><strong>32.\u65e9\u5d29\u6e83<br \/>\nCrash Early<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u6b7b\u7a0b\u5e8f\u9020\u6210\u7684\u5371\u5bb3\u901a\u5e38\u6bd4\u6709\u95ee\u9898\u7684\u7a0b\u5e8f\u8981\u5c0f\u5f97\u591a\u3002<\/p>\n<p><strong>33.\u7528\u65ad\u8a00\u907f\u514d\u4e0d\u53ef\u80fd\u53d1\u751f\u7684\u4e8b\u60c5<br \/>\nUse Assertions to Prevent the Impossible<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u65ad\u8a00\u9a8c\u8bc1\u4f60\u7684\u5404\u79cd\u5047\u5b9a\u3002\u5728\u4e00\u4e2a\u4e0d\u786e\u5b9a\u7684\u4e16\u754c\u91cc\uff0c\u7528\u65ad\u8a00\u4fdd\u62a4\u4f60\u7684\u4ee3\u7801\u3002<\/p>\n<p><strong>34.\u5c06\u5f02\u5e38\u7528\u4e8e\u5f02\u5e38\u7684\u95ee\u9898<br \/>\nUse Exceptinos for Exceptional Problems<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u5f02\u5e38\u53ef\u80fd\u4f1a\u906d\u53d7\u7ecf\u5178\u7684\u610f\u5927\u5229\u9762\u6761\u5f0f\u4ee3\u7801\u7684\u6240\u6709\u53ef\u8bfb\u6027\u548c\u53ef\u7ef4\u62a4\u6027\u95ee\u9898\u7684\u6298\u78e8\u3002\u5c06\u5f02\u5e38\u4fdd\u7559\u7ed9\u5f02\u5e38\u7684\u4e8b\u7269\u3002<\/p>\n<p><strong>35.\u8981\u6709\u59cb\u6709\u7ec8<br \/>\nFinish What You Start<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u53ea\u8981\u53ef\u80fd\uff0c\u5206\u914d\u67d0\u8d44\u6e90\u7684\u4f8b\u7a0b\u6216\u5bf9\u8c61\u4e5f\u5e94\u8be5\u8d1f\u8d23\u89e3\u9664\u5176\u5206\u914d\u3002<\/p>\n<p><strong>36.\u4f7f\u6a21\u5757\u4e4b\u95f4\u7684\u8026\u5408\u51cf\u81f3\u6700\u5c11<br \/>\nMinimize Coupling Between Modules<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u901a\u8fc7\u7f16\u5199\u201c\u7f9e\u602f\u7684\u201d\u4ee3\u7801\u5e76\u5e94\u7528\u5f97\u58a8\u5fd2\u8033\u6cd5\u5219\u6765\u907f\u514d\u8026\u5408\u3002<\/p>\n<p><strong>37.\u8981\u914d\u7f6e\uff0c\u4e0d\u8981\u96c6\u6210<br \/>\nConfigure, Don&#8217;t Integrate<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u8981\u5c06\u5e94\u7528\u7684\u5404\u79cd\u6280\u672f\u9009\u62e9\u5b9e\u73b0\u4e3a\u914d\u7f6e\u9009\u9879\uff0c\u800c\u4e0d\u662f\u901a\u8fc7\u96c6\u6210\u6216\u5de5\u7a0b\u65b9\u6cd5\u5b9e\u73b0\u3002<\/p>\n<p><strong>38.\u5c06\u62bd\u8c61\u653e\u8fdb\u4ee3\u7801\uff0c\u7ec6\u8282\u653e\u8fdb\u5143\u6570\u636e<br \/>\nPut Abstractions in Code, Details in Metadata<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u4e3a\u4e00\u822c\u60c5\u51b5\u7f16\u7a0b\uff0c\u5c06\u7ec6\u8282\u653e\u5728\u88ab\u7f16\u8bd1\u7684\u4ee3\u7801\u5e93\u4e4b\u5916\u3002<\/p>\n<p><strong>39.\u5206\u6790\u5de5\u4f5c\u6d41\uff0c\u4ee5\u6539\u5584\u5e76\u53d1\u6027<br \/>\nAnalyze Workflow to Imporve Concurrency<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u5229\u7528\u4f60\u7684\u7528\u6237\u7684\u5de5\u4f5c\u6d41\u4e2d\u7684\u5e76\u53d1\u6027\u3002<\/p>\n<p><strong>40.\u7528\u670d\u52a1\u8fdb\u884c\u8bbe\u8ba1<br \/>\nDesign Using Services<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u6839\u636e\u670d\u52a1&#8211;\u72ec\u7acb\u7684\u3001\u5728\u826f\u597d\u5b9a\u4e49\u3001\u4e00\u81f4\u7684\u63a5\u53e3\u4e4b\u540e\u7684\u5175\u6cd5\u5bf9\u8c61&#8211;\u8fdb\u884c\u8bbe\u8ba1\u3002<\/p>\n<p><strong>41.\u603b\u662f\u4e3a\u5e76\u53d1\u8fdb\u884c\u8bbe\u8ba1<br \/>\nAlways Design for Concurrency<br \/>\n<\/strong>\u5bb9\u8bb8\u5e76\u53d1\uff0c\u4f60\u5c06\u4f1a\u8bbe\u8ba1\u51fa\u66f4\u6574\u6d01\u3001\u5177\u6709\u66f4\u5c11\u5047\u5b9a\u7684\u63a5\u53e3\u3002<\/p>\n<p><strong>42.\u4f7f\u89c6\u56fe\u4e0e\u6a21\u578b\u5206\u79bb<br \/>\nSeparate Views from Models<br \/>\n<\/strong>\u8981\u6839\u636e\u6a21\u578b\u548c\u89c6\u56fe\u8bbe\u8ba1\u4f60\u7684\u5e94\u7528\uff0c\u4ece\u800c\u4ee5\u4f4e\u5ec9\u7684\u4ee3\u7801\u83b7\u53d6\u7075\u6d3b\u6027\u3002<\/p>\n<p><strong>43.\u7528\u9ed1\u677f\u534f\u8c03\u5de5\u4f5c\u6d41<br \/>\nUse Blackboards to Coordinate Workflow<br \/>\n<\/strong>\u7528\u9ed1\u677f\u534f\u8c03\u5b8c\u5168\u4e0d\u540c\u7684\u4e8b\u5b9e\u548c\u56e0\u7d20\uff0c\u540c\u65f6\u53c8\u4f7f\u5404\u53c2\u4e0e\u65b9\u4fdd\u6301\u72ec\u7acb\u548c\u9694\u79bb\u3002<\/p>\n<p><strong>44.<span style=\"color: #ff0000;\">\u4e0d\u8981\u9760\u5de7\u5408\u7f16\u7a0b<\/span><br \/>\nDon&#8217;t Program by Coincidence<br \/>\n<\/strong>\u53ea\u4f9d\u9760\u53ef\u9760\u7684\u4e8b\u7269\u3002\u6ce8\u610f\u5076\u53d1\u7684\u590d\u6742\u6027\uff0c\u4e0d\u8981\u628a\u5e78\u8fd0\u7684\u5de7\u5408\u4e0e\u6709\u76ee\u7684\u7684\u8ba1\u5212\u6df7\u4e3a\u4e00\u8c08\u3002<\/p>\n<p><strong>45.\u4f30\u7b97\u4f60\u7684\u7b97\u6cd5\u7684\u9636<br \/>\nEstimate the Order of Your Algorithms<br \/>\n<\/strong>\u5728\u4f60\u7f16\u5199\u4ee3\u7801\u4e4b\u524d\uff0c\u5148\u5927\u81f4\u4f30\u7b97\u4e8b\u60c5\u9700\u8981\u591a\u957f\u65f6\u95f4\u3002<\/p>\n<p><strong>46.\u6d4b\u8bd5\u4f60\u7684\u4f30\u7b97<br \/>\nTest Your Estimates<br \/>\n<\/strong>\u5bf9\u7b97\u6cd5\u7684\u6570\u5b66\u5206\u6790\u5e76\u4e0d\u4f1a\u544a\u8bc9\u4f60\u6bcf\u4e00\u4ef6\u4e8b\u60c5\u3002\u5728\u4f60\u7684\u4ee3\u7801\u7684\u76ee\u6807\u73af\u5883\u4e2d\u6d4b\u5b9a\u5b83\u7684\u901f\u5ea6\u3002<\/p>\n<p><strong>47.\u65e9\u91cd\u6784\uff0c\u5e38\u91cd\u6784<br \/>\nRefactor Early, Refactor Often<br \/>\n<\/strong>\u5c31\u548c\u4f60\u4f1a\u5728\u534e\u56ed\u91cc\u9664\u8349\u3001\u5e76\u91cd\u65b0\u5e03\u7f6e\u4e00\u6837\uff0c\u5728\u9700\u8981\u65f6\u5bf9\u4ee3\u7801\u8fdb\u884c\u91cd\u5199\u3001\u91cd\u505a\u548c\u91cd\u65b0\u67b6\u6784\u3002\u8981\u94f2\u9664\u95ee\u9898\u7684\u6839\u6e90\u3002<\/p>\n<p><strong>48.\u4e3a\u6d4b\u8bd5\u800c\u8bbe\u8ba1<br \/>\nDesign to Test<br \/>\n<\/strong>\u5728\u4f60\u8fd8\u6ca1\u6709\u7f16\u5199\u4ee3\u7801\u65f6\u5c31\u5f00\u59cb\u601d\u8003\u6d4b\u8bd5\u95ee\u9898\u3002<\/p>\n<p><strong>49.\u6d4b\u8bd5\u4f60\u7684\u8f6f\u4ef6\uff0c\u5426\u5219\u4f60\u7684\u7528\u6237\u5c31\u5f97\u6d4b\u8bd5<br \/>\nTest Your Software, or Your Users Will<br \/>\n<\/strong>\u65e0\u60c5\u5730\u6d4b\u8bd5\u3002\u4e0d\u8981\u8ba9\u4f60\u7684\u7528\u6237\u4e3a\u4f60\u67e5\u627ebug\u3002<\/p>\n<p><strong>50.\u4e0d\u8981\u4f7f\u7528\u4f60\u4e0d\u7406\u89e3\u7684\u5411\u5bfc\u4ee3\u7801<br \/>\nDon&#8217;t Use Wizard Code You Don&#8217;t Understand<br \/>\n<\/strong>\u60f3\u5230\u53ef\u4ee5\u751f\u6210\u5927\u91cf\u4ee3\u7801\u3002\u5728\u4f60\u628a\u5b83\u4eec\u5408\u5e76\u8fdb\u4f60\u7684\u9879\u76ee\u4e4b\u524d\uff0c\u786e\u4fdd\u4f60\u7406\u89e3\u5168\u90e8\u8fd9\u4e9b\u4ee3\u7801\u3002<\/p>\n<p><strong>51.\u4e0d\u8981\u641c\u96c6\u9700\u6c42&#8211;\u6316\u6398\u5b83\u4eec<br \/>\nDon&#8217;t Gather Requirements &#8211; Dig for Them<br \/>\n<\/strong>\u9700\u6c42\u5f88\u5c11\u5b58\u5728\u4e8e\u8868\u9762\u4e0a\u3002\u5b83\u4eec\u6df1\u6df1\u5730\u57cb\u85cf\u5728\u5c42\u5c42\u5047\u5b9a\u3001\u8bef\u89e3\u548c\u653f\u6cbb\u624b\u6bb5\u7684\u4e0b\u9762\u3002<\/p>\n<p><strong>52.\u4e0e\u7528\u6237\u4e00\u540c\u5de5\u4f5c\uff0c\u4ee5\u50cf\u7528\u6237\u4e00\u6837\u601d\u8003<br \/>\nWork with a User to Think Like a User<br \/>\n<\/strong>\u8981\u4e86\u89e3\u7cfb\u7edf\u5b9e\u9645\u4e0a\u5c06\u5982\u4f55\u88ab\u4f7f\u7528\uff0c\u8fd9\u662f\u6700\u597d\u7684\u65b9\u6cd5\u3002<\/p>\n<p><strong>53.\u62bd\u8c61\u6bd4\u7ec6\u8282\u6d3b\u5f97\u66f4\u957f\u4e45<br \/>\nAbstractions Live Longer than Details<br \/>\n<\/strong>\u201c\u6295\u8d44\u201d\u4e8e\u62bd\u8c61\uff0c\u800c\u4e0d\u662f\u5b9e\u73b0\u3002<\/p>\n<p><strong>54.\u4f7f\u7528\u9879\u76ee\u8bcd\u6c47\u8868<br \/>\nUse a Project Glossary<br \/>\n<\/strong>\u521b\u5efa\u5e76\u7ef4\u62a4\u9879\u76ee\u4e2d\u4f7f\u7528\u7684\u4e13\u7528\u672f\u8bed\u548c\u8bcd\u6c47\u7684\u5355\u4e00\u4fe1\u606f\u6e90\u3002<\/p>\n<p><strong>55.\u4e0d\u8981\u5728\u76d2\u5b50\u5916\u9762\u601d\u8003&#8211;\u8981\u627e\u5230\u76d2\u5b50<br \/>\nDon&#8217;t Think Outside the Box &#8211; Find the Box<br \/>\n<\/strong>\u5728\u9047\u5230\u4e0d\u53ef\u80fd\u89e3\u51b3\u7684\u95ee\u9898\u65f6\uff0c\u8981\u786e\u5b9a\u771f\u6b63\u7684\u7ea6\u675f\u3002\u95ee\u95ee\u4f60\u81ea\u5df1\uff1a\u201c\u5b83\u5fc5\u987b\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u5b8c\u6210\u5417\uff1f\u5b83\u771f\u7684\u5fc5\u987b\u5b8c\u6210\u5417\uff1f\u201d<\/p>\n<p><strong>56.\u7b49\u4f60\u51c6\u5907\u597d\u518d\u5f00\u59cb<br \/>\nStart When You&#8217;re Ready<br \/>\n<\/strong>\u4f60\u7684\u4e00\u751f\u90fd\u5728\u79ef\u7d2f\u7ecf\u9a8c\u3002\u4e0d\u8981\u5ffd\u89c6\u53cd\u590d\u51fa\u73b0\u7684\u7591\u60d1\u3002<\/p>\n<p><strong>57.\u5bf9\u6709\u4e9b\u4e8b\u60c5\u201c\u505a\u201d\u80dc\u4e8e\u201c\u63cf\u8ff0\u201d<br \/>\nSome Things Are Better Done than Described<br \/>\n<\/strong>\u4e0d\u8981\u6389\u8fdb\u89c4\u8303\u7684\u87ba\u65cb<\/p>\n<p><strong>58.\u4e0d\u8981\u505a\u5f62\u5f0f\u65b9\u6cd5\u7684\u5974\u96b6<br \/>\nDon&#8217;t Be a Slave to Formal Methods<br \/>\n<\/strong>\u5982\u679c\u4f60\u6ca1\u6709\u628a\u67d0\u9879\u6280\u672f\u653e\u8fdb\u4f60\u7684\u5f00\u53d1\u65f6\u95f4\u548c\u80fd\u529b\u7684\u8bed\u5883\u4e2d\uff0c\u4e0d\u8981\u76f2\u76ee\u5730\u91c7\u7528\u5b83\u3002<\/p>\n<p><strong>59.\u6602\u8d35\u7684\u5de5\u5177\u4e0d\u4e00\u5b9a\u80fd\u5236\u4f5c\u51fa\u66f4\u597d\u7684\u8bbe\u8ba1<br \/>\nCostly Tools Don&#8217;t Produce Better Disigns<br \/>\n<\/strong>\u5c0f\u5fc3\u4f9b\u5e94\u5546\u7684\u7092\u4f5c\uff0c\u884c\u4e1a\u6559\u6761\uff0c\u4ee5\u53ca\u4ef7\u683c\u6807\u7b7e\u7684\u8bf1\u60d1\u3002\u8981\u6839\u636e\u5de5\u5177\u7684\u4ef7\u503c\u5224\u65ad\u5b83\u4eec\u3002<\/p>\n<p><strong>60.\u56f4\u7ed5\u529f\u80fd\u7ec4\u7ec7\u56e2\u961f<br \/>\nOrganize Teams Around Fucntionality<br \/>\n<\/strong>\u4e0d\u8981\u628a\u8bbe\u8ba1\u5e08\u4e0e\u7f16\u7801\u5458\u5206\u5f00\uff0c\u4e5f\u4e0d\u8981\u628a\u6d4b\u8bd5\u5458\u4e0e\u6570\u636e\u5efa\u6a21\u5458\u5206\u5f00\u3002\u6309\u7167\u4f60\u6784\u5efa\u4ee3\u7801\u7684\u65b9\u5f0f\u6784\u5efa\u56e2\u961f\u3002<\/p>\n<p><strong>61.\u4e0d\u8981\u4f7f\u7528\u624b\u5de5\u6d41\u7a0b<br \/>\nDon&#8217;t Use Manual Procedures<br \/>\n<\/strong>shell\u811a\u672c\u6216\u6279\u6587\u4ef6\u4f1a\u4e00\u6b21\u6b21\u5730\u4ee5\u540c\u4e00\u987a\u5e8f\u6267\u884c\u540c\u6837\u7684\u6307\u4ee4\u3002<\/p>\n<p><strong>62.\u65e9\u6d4b\u8bd5\uff0c\u5e38\u6d4b\u8bd5\uff0c\u81ea\u52a8\u6d4b\u8bd5\u3002<br \/>\nTest Early. Test Often. Test Automatically<br \/>\n<\/strong>\u4e0e\u5446\u5728\u4e66\u67b6\u4e0a\u7684\u6d4b\u8bd5\u8ba1\u5212\u76f8\u6bd4\uff0c\u6bcf\u6b21\u6784\u5efa\u8bd5\u8fd0\u884c\u7684\u6d4b\u8bd5\u8981\u6709\u6548\u5f97\u591a\u3002<\/p>\n<p><strong>63.\u8981\u5230\u901a\u8fc7\u5168\u90e8\u6d4b\u8bd5\uff0c\u7f16\u7801\u624d\u7b97\u5b8c\u6210\u3002<br \/>\nCoding Ain&#8217;t Done &#8216;Til All the Tests Run<br \/>\n<\/strong>\u5c31\u662f\u8fd9\u6837\u3002<\/p>\n<p><strong>64.\u901a\u8fc7\u201c\u84c4\u610f\u7834\u574f\u201d\u6d4b\u8bd5\u4f60\u7684\u6d4b\u8bd5\u3002<br \/>\nUse Saboteurs to Test Your Testing<br \/>\n<\/strong>\u5728\u5355\u72ec\u7684\u8f6f\u4ef6\u526f\u672c\u4e0a\u6545\u610f\u5f15\u5165bug\uff0c\u4ee5\u68c0\u9a8c\u6d4b\u8bd5\u80fd\u591f\u6293\u4f4f\u5b83\u4eec\u3002<\/p>\n<p><strong>65.\u6d4b\u8bd5\u72b6\u6001\u8986\u76d6\uff0c\u800c\u4e0d\u662f\u4ee3\u7801\u8986\u76d6<br \/>\nTest State Coverage, Not Code Coverage<br \/>\n<\/strong>\u786e\u5b9a\u5e76\u6d4b\u8bd5\u91cd\u8981\u7684\u7a0b\u5e8f\u72b6\u6001\u3002\u53ea\u662f\u6d4b\u8bd5\u4ee3\u7801\u884c\u662f\u4e0d\u591f\u7684\u3002<\/p>\n<p><strong>66.\u4e00\u4e2abug\u53ea\u6293\u4e00\u6b21<br \/>\nFind Bugs Once<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u4e00\u65e6\u6d4b\u8bd5\u5458\u627e\u5230\u4e00\u4e2abug\uff0c\u8fd9\u5e94\u8be5\u662f\u6d4b\u8bd5\u5458\u6700\u540e\u4e00\u6b21\u627e\u5230\u5b83\u3002\u6b64\u540e\u81ea\u52a8\u6d4b\u8bd5\u5e94\u8be5\u5bf9\u5176\u8fdb\u884c\u68c0\u67e5\u3002<\/p>\n<p><strong>67.\u82f1\u8bed\u5c31\u662f\u4e00\u79cd\u7f16\u7a0b\u8bed\u8a00<br \/>\nEnglish is Just a Programming Language<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u50cf\u4f60\u7f16\u5199\u4ee3\u7801\u4e00\u6837\u7f16\u5199\u6587\u6863\uff1a\u9075\u5b88DRY\u539f\u5219\u3001\u4f7f\u7528\u5143\u6570\u636e\u3001MVC\u3001\u81ea\u52a8\u751f\u6210\u3001\u7b49\u7b49\u3002<\/p>\n<p><strong>68.\u628a\u6587\u6863\u5efa\u5728\u91cc\u9762\uff0c\u4e0d\u8981\u6813\u5728\u5916\u9762<br \/>\nBuild Documentation In, Don&#8217;t Bolt It On<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u4e0e\u4ee3\u7801\u5206\u79bb\u7684\u6587\u6863\u4e0d\u592a\u53ef\u80fd\u88ab\u4fee\u6b63\u548c\u66f4\u65b0\u3002<\/p>\n<p><strong>69.\u6e29\u548c\u5730\u8d85\u51fa\u7528\u6237\u7684\u671f\u671b<br \/>\nGently Exceed Your Users&#8217; Expectations<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u8981\u7406\u89e3\u4f60\u7684\u7528\u6237\u7684\u671f\u671b\uff0c\u7136\u540e\u7ed9\u4ed6\u4eec\u7684\u4e1c\u897f\u8981\u591a\u90a3\u4e48\u4e00\u70b9\u3002<\/p>\n<p><strong>70.\u5728\u4f60\u7684\u4f5c\u54c1\u4e0a\u7b7e\u540d<br \/>\nSign Your Work<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u8fc7\u53bb\u65f6\u4ee3\u7684\u624b\u827a\u4eba\u4e3a\u80fd\u5728\u4ed6\u4eec\u4f5c\u54c1\u4e0a\u7b7e\u540d\u800c\u81ea\u8c6a\u3002\u4f60\u4e5f\u5e94\u8be5\u5982\u6b64\u3002<\/p>\n<p><span style=\"font-size: large;\"><em><strong>\u68c0\u67e5\u6e05\u5355<br \/>\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014<\/strong><\/em><\/span><\/p>\n<p><strong>71.\u8981\u5b66\u4e60\u7684\u8bed\u8a00<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u538c\u5026\u4e86C\u3001C++\u548cJAVA\uff1f\u8bd5\u8bd5CLOS\u3001Dylan\u3001Eiffel\u3001Objectve C\u3001Prolog\u3001Smailltalk\u6216TOM\u3002\u5b83\u4eec\u6bcf\u4e00\u79cd\u90fd\u6709\u4e0d\u540c\u7684\u80fd\u529b\u548c\u4e0d\u540c\u7684\u201c\u98ce\u5473\u201d\u3002\u7528\u5176\u4e2d\u7684\u4e00\u79cd\u6216\u591a\u79cd\u8bed\u8a00\u5728\u5bb6\u91cc\u5f00\u53d1\u4e00\u4e2a\u5c0f\u9879\u76ee\u3002<\/p>\n<p><strong>72.WISDOM\u79bb\u5408\u8bd7<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>What do you want them to learn?\u00a0\u00a0 \u4f60\u60f3\u8ba9\u4ed6\u4eec\u5b66\u5230\u4ec0\u4e48\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>What is their interest in what you&#8217;ve got to say?\u00a0\u00a0 \u4ed6\u4eec\u5bf9\u4f60\u8bb2\u7684\u4ec0\u4e48\u611f\u5174\u8da3\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>How sophisticated are they?\u00a0\u00a0 \u4ed6\u4eec\u6709\u591a\u5bcc\u6709\u7ecf\u9a8c\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>How much detail do they want?\u00a0\u00a0 \u4ed6\u4eec\u60f3\u8981\u591a\u5c11\u7ec6\u8282\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>Whom do you want to own the information?\u00a0\u00a0 \u4f60\u60f3\u8981\u8ba9\u8c01\u62e5\u6709\u8fd9\u4e9b\u4fe1\u606f\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>How can you motivate them to listen to you?\u00a0\u00a0 \u4f60\u5982\u4f55\u4fc3\u4f7f\u4ed6\u4eec\u542c\u4f60\u8bf4\u8bdd\uff1f<\/p>\n<p><strong>73.\u600e\u6837\u7ef4\u6301\u6b63\u4ea4\u6027<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u8bbe\u8ba1\u72ec\u7acb\u3001\u826f\u597d\u5b9a\u4e49\u7684\u7ec4\u4ef6\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f7f\u4f60\u7684\u4ee3\u7801\u4fdd\u6301\u89e3\u8026\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u907f\u514d\u4f7f\u7528\u5168\u5c40\u6570\u636e\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u91cd\u6784\u76f8\u4f3c\u7684\u51fd\u6570\u3002<\/p>\n<p><strong>74.\u5e94\u5236\u4f5c\u539f\u578b\u7684\u4e8b\u7269<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u67b6\u6784<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u5df2\u6709\u7cfb\u7edf\u4e2d\u7684\u65b0\u529f\u80fd<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u5916\u90e8\u6570\u636e\u7684\u7ed3\u6784\u6216\u5185\u5bb9<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u7b2c\u4e09\u65b9\u5de5\u5177\u6216\u7ec4\u4ef6<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u6027\u80fd\u95ee\u9898<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u7528\u6237\u754c\u9762\u8bbe\u8ba1<\/p>\n<p><strong>75.\u67b6\u6784\u95ee\u9898<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u8d23\u4efb\u662f\u5426\u5f97\u5230\u4e86\u826f\u597d\u5b9a\u4e49\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u5199\u4f5c\u662f\u5426\u5f97\u5230\u4e86\u826f\u597d\u5b9a\u4e49\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u8026\u5408\u662f\u5426\u5f97\u4ee5\u6700\u5c0f\u5316\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u4f60\u80fd\u5426\u786e\u5b9a\u6f5c\u5728\u7684\u91cd\u590d\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u63a5\u53e3\u5b9a\u4e49\u548c\u5404\u9879\u7ea6\u675f\u662f\u5426\u53ef\u63a5\u53d7\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u6a21\u5757\u80fd\u5426\u5728\u9700\u8981\u65f6\u8bbf\u95ee\u6240\u9700\u6570\u636e\uff1f<\/p>\n<p><strong>76.\u8c03\u8bd5\u68c0\u67e5\u6e05\u5355<\/strong><br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u6b63\u5728\u62a5\u544a\u7684\u95ee\u9898\u662f\u5e95\u5c42bug\u7684\u76f4\u63a5\u7ed3\u679c\uff0c\u8fd8\u662f\u53ea\u662f\u75c7\u72b6\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7bug\u771f\u7684\u5728\u7f16\u8bd1\u5668\u91cc\uff1f\u5728OS\u91cc\uff1f\u6216\u8005\u662f\u5728\u4f60\u7684\u4ee3\u7801\u91cc\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u5982\u679c\u4f60\u5411\u540c\u4e8b\u8be6\u7ec6\u89e3\u91ca\u8fd9\u4e2a\u95ee\u9898\uff0c\u4f60\u4f1a\u8bf4\u4ec0\u4e48\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u5982\u679c\u53ef\u7591\u4ee3\u7801\u901a\u8fc7\u4e86\u5355\u5143\u6d4b\u8bd5\uff0c\u6d4b\u8bd5\u662f\u5426\u8db3\u591f\u5b8c\u6574\uff1f\u5982\u679c\u4f60\u7528\u8be5\u6570\u636e\u8fd0\u884c\u5355\u5143\u6d4b\u8bd5\uff0c\u4f1a\u53d1\u751f\u4ec0\u4e48\uff1f<br \/>\n<strong>\u00a0 \u00a0<\/strong>\u00b7\u9020\u6210\u8fd9\u4e2abug\u7684\u6761\u4ef6\u662f\u5426\u5b58\u5728\u4e8e\u7cfb\u7edf\u4e2d\u7684\u5176\u5b83\u4efb\u4f55\u5730\u65b9\uff1f<\/p>\n<p><strong>77.\u51fd\u6570\u7684\u5f97\u58a8\u5fd2\u8033\u6cd5\u5219<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u67d0\u4e2a\u5bf9\u8c61\u7684\u65b9\u6cd5\u5e94\u8be5\u53ea\u8c03\u7528\u5c5e\u4e8e\u4ee5\u4e0b\u60c5\u51b5\u7684\u65b9\u6cd5\uff1a<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u5b83\u81ea\u8eab<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f20\u5165\u7684\u4efb\u4f55\u53c2\u6570<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u5b83\u521b\u5efa\u7684\u5bf9\u8c61<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u7ec4\u4ef6\u5bf9\u8c61<\/p>\n<p><strong>78.\u600e\u6837\u6df1\u601d\u719f\u8651\u5730\u7f16\u7a0b<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u603b\u662f\u610f\u8bc6\u5230\u4f60\u5728\u505a\u4ec0\u4e48\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4e0d\u8981\u76f2\u76ee\u5730\u7f16\u7a0b\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u6309\u7167\u8ba1\u5212\u884c\u4e8b\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f9d\u9760\u53ef\u9760\u7684\u4e8b\u7269\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4e3a\u4f60\u7684\u5047\u5b9a\u5efa\u7acb\u6587\u6863\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4e0d\u8981\u53ea\u662f\u6d4b\u8bd5\u4f60\u7684\u4ee3\u7801\uff0c\u8fd8\u8981\u6d4b\u8bd5\u4f60\u7684\u5047\u5b9a\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u7ef4\u5c3c\u7684\u5de5\u4f5c\u5212\u5206\u4f18\u5148\u7ea7\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4e0d\u8981\u505a\u5386\u53f2\u7684\u5974\u96b6\u3002<\/p>\n<p><strong>79.\u4f55\u65f6\u8fdb\u884c\u91cd\u6784<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f60\u53d1\u73b0\u4e86\u5bf9DRY\u539f\u5219\u7684\u8fdd\u53cd\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f60\u53d1\u73b0\u4e8b\u7269\u53ef\u4ee5\u66f4\u4e3a\u6b63\u4ea4\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f60\u7684\u77e5\u8bc6\u6269\u5c55\u4e86\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u9700\u6c42\u6f14\u53d8\u4e86\u3002<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u4f60\u9700\u8981\u6539\u5584\u6027\u80fd\u3002<\/p>\n<p><strong>80.\u5288\u5f00\u6208\u5c14\u8fea\u65af\u7ed3<\/strong><br \/>\n<strong>\u00a0\u00a0\u00a0<\/strong>\u5728\u89e3\u51b3\u4e0d\u53ef\u80fd\u89e3\u51b3\u7684\u95ee\u9898\u65f6\uff0c\u95ee\u95ee\u4f60\u81ea\u5df1\uff1a<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u6709\u66f4\u5bb9\u6613\u7684\u65b9\u6cd5\u5417\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u6211\u662f\u5728\u89e3\u51b3\u6b63\u786e\u7684\u95ee\u9898\u5417\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u8fd9\u4ef6\u4e8b\u60c5\u4e3a\u4ec0\u4e48\u662f\u4e00\u4e2a\u95ee\u9898\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u662f\u4ec0\u4e48\u4f7f\u5b83\u5982\u6b64\u96be\u4ee5\u89e3\u51b3\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u5b83\u5fc5\u987b\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u5b8c\u6210\u5417\uff1f<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u5b83\u771f\u7684\u5fc5\u987b\u5b8c\u6210\u5417\uff1f<\/p>\n<p><strong>81.\u6d4b\u8bd5\u7684\u5404\u4e2a\u65b9\u9762<br \/>\n<\/strong>\u00b7\u5355\u5143\u6d4b\u8bd5<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u96c6\u6210\u6d4b\u8bd5<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u708e\u75c7\u548c\u6821\u9a8c<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u8d44\u6e90\u8017\u5c3d\u3001\u9519\u8bef\u53ca\u6062\u590d<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u6027\u80fd\u6d4b\u8bd5<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u53ef\u7528\u6027\u6d4b\u8bd5<br \/>\n<strong>\u00a0\u00a0\u00a0\u00a0 <\/strong>\u00b7\u5bf9\u6d4b\u8bd5\u81ea\u8eab\u8fdb\u884c\u6d4b\u8bd5<\/p>\n<p><span style=\"color: #ff0000;\"><strong>\u53c2\u8003\u94fe\u63a5\uff1a<\/strong><\/span><a href=\"http:\/\/www.blogjava.net\/ranxiang\/articles\/30317.html\" target=\"_blank\">\u6ce8\u91cd\u5b9e\u6548\u7684\u7a0b\u5e8f\u5458\u4e4b\u5feb\u901f\u53c2\u8003\u6307\u5357 &#8211; The Pragmatic Programmer Quick Reference Guide<\/a><\/p>\n<hr \/>\n<h5>\u82f1\u6587\u7248\u5982\u4e0b\uff1a<\/h5>\n<h6><span class=\"Apple-style-span\" style=\"font-family: Simsun; font-size: medium;\">The Pragmatic Programmer Quick Reference Guide<\/span><\/h6>\n<p>This page summarizes the tips and checklists found in\u00a0<a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ASIN\/020161622X\/codinghorror-20\" target=\"_blank\"><i>The Pragmatic Programmer<\/i><\/a>.<\/p>\n<p>For more information about The Pragmatic Programmers LLC, source code for the examples, up-to-date pointers to Web resources, and an online bibiography, visit us at\u00a0<a href=\"http:\/\/www.pragmaticprogrammer.com\/\" target=\"_blank\">www.pragmaticprogrammer.com<\/a><\/p>\n<ol>\n<li><b>Care About Your Craft<\/b><br \/>\nWhy spend your life developing software unless you care about doing it well?<\/li>\n<li><b>Think! About Your Work<\/b><br \/>\nTurn off the autopilot and take control. Constantly critique and appraise your work.<\/li>\n<li><b>Provide Options, Don&#8217;t Make Lame Excuses<\/b><br \/>\nInstead of excuses, provide options. Don&#8217;t say it can&#8217;t be done; explain what can be done.<\/li>\n<li><b>Don&#8217;t Live with Broken Windows<\/b><br \/>\nFix bad designs, wrong decisions, and poor code when you see them.<\/li>\n<li><b>Be a Catalyst for Change<\/b><br \/>\nYou can&#8217;t force change on people. Instead, show them how the future might be and help them participate in creating it.<\/li>\n<li><b>Remember the Big Picture<\/b><br \/>\nDon&#8217;t get so engrossed in the details that you forget to check what&#8217;s happening around you.<\/li>\n<li><b>Make Quality a Requirements Issue<\/b><br \/>\nInvolve your users in determining the project&#8217;s real quality requirements.<\/li>\n<li><b>Invest Regularly in Your Knowledge Portfolio<\/b><br \/>\nMake learning a habit.<\/li>\n<li><b>Critically Analyze What You Read and Hear<\/b><br \/>\nDon&#8217;t be swayed by vendors, media hype, or dogma. Analyze information in terms of you and your project.<\/li>\n<li><b>It&#8217;s Both What You Say and the Way You Say It<\/b><br \/>\nThere&#8217;s no point in having great ideas if you don&#8217;t communicate them effectively.<\/li>\n<li><b>DRY\u2013Don&#8217;t Repeat Yourself<\/b><br \/>\nEvery piece of knowledge must have a single, unambiguous, authoritative representation within a system.<\/li>\n<li><b>Make It Easy to Reuse<\/b><br \/>\nIf it&#8217;s easy to reuse, people will. Create an environment that supports reuse.<\/li>\n<li><b>Eliminate Effects Between Unrelated Things<\/b><br \/>\nDesign components that are self-contained. independent, and have a single, well-defined purpose.<\/li>\n<li><b>There Are No Final Decisions<\/b><br \/>\nNo decision is cast in stone. Instead, consider each as being written in the sand at the beach, and plan for change.<\/li>\n<li><b>Use Tracer Bullets to Find the Target<\/b><br \/>\nTracer bullets let you home in on your target by trying things and seeing how close they land.<\/li>\n<li><b>Prototype to Learn<\/b><br \/>\nPrototyping is a learning experience. Its value lies not in the code you produce, but in the lessons you learn.<\/li>\n<li><b>Program Close to the Problem Domain<\/b><br \/>\nDesign and code in your user&#8217;s language.<\/li>\n<li><b><b>Estimate to Avoid Surprises<\/b><\/b><br \/>\nEstimate before you start. You&#8217;ll spot potential problems up front.<\/li>\n<li><b>Iterate the Schedule with the Code<\/b><br \/>\nUse experience you gain as you implement to refine the project time scales.<\/li>\n<li><b>Keep Knowledge in Plain Text<\/b><br \/>\nPlain text won&#8217;t become obsolete. It helps leverage your work and simplifies debugging and testing.<\/li>\n<li><b>Use the Power of Command Shells<\/b><br \/>\nUse the shell when graphical user interfaces don&#8217;t cut it.<\/li>\n<li><b>Use a Single Editor Well<\/b><br \/>\nThe editor should be an extension of your hand; make sure your editor is configurable, extensible, and programmable.<\/li>\n<li><b>Always Use Source Code Control<\/b><br \/>\nSource code control is a time machine for your work\u2014you can go back.<\/li>\n<li><b>Fix the Problem, Not the Blame<\/b><br \/>\nIt doesn&#8217;t really matter whether the bug is your fault or someone else&#8217;s\u2014it is still your problem, and it still needs to be fixed.<\/li>\n<li><b>Don&#8217;t Panic When Debugging<\/b><br \/>\nTake a deep breath and THINK! about what could be causing the bug.<\/li>\n<li><b>&#8220;select&#8221; Isn&#8217;t Broken.<\/b><br \/>\nIt is rare to find a bug in the OS or the compiler, or even a third-party product or library. The bug is most likely in the application.<\/li>\n<li><b>Don&#8217;t Assume It\u2014Prove It<\/b><br \/>\nProve your assumptions in the actual environment&#8211; with real data and boundary conditions.<\/li>\n<li><b>Learn a Text Manipulation Language.<\/b><br \/>\nYou spend a large part of each day working with text. Why not have the computer do some of it for you?<\/li>\n<li><b>Write Code That Writes Code<\/b><br \/>\nCode generators increase your productivity and help avoid duplication.<\/li>\n<li><b>You Can&#8217;t Write Perfect Software<\/b><br \/>\nSoftware can&#8217;t be perfect. Protect your code and users from the inevitable errors.<\/li>\n<li><b>Design with Contracts<\/b><br \/>\nUse contracts to document and verify that code does no more and no less than it claims to do.<\/li>\n<li><b>Crash Early<\/b><br \/>\nA dead program normally does a lot less damage than a crippled one.<\/li>\n<li><b>Use Assertions to Prevent the Impossible<\/b><br \/>\nAssertions validate your assumptions. Use them to protect your code from an uncertain world.<\/li>\n<li><b>Use Exceptions for Exceptional Problems<\/b><br \/>\nExceptions can suffer from all the readability and maintainability problems of classic spaghetti code. Reserve exceptions for exceptional things.<\/li>\n<li><b>Finish What You Start<\/b><br \/>\nWhere possible, the routine or object that allocates a resource should be responsible for deallocating it.<\/li>\n<li><b>Minimize Coupling Between Modules<\/b><br \/>\nAvoid coupling by writing &#8220;shy&#8221; code and applying the Law of Demeter.<\/li>\n<li><b>Configure, Don&#8217;t Integrate<\/b><br \/>\nImplement technology choices for an application as configuration options, not through integration or engineering.<\/li>\n<li><b>Put Abstractions in Code, Details in Metadata<\/b><br \/>\nProgram for the general case, and put the specifics outside the compiled code base.<\/li>\n<li><b>Analyze Workflow to Improve Concurrency<\/b><br \/>\nExploit concurrency in your user&#8217;s workflow.<\/li>\n<li><b>Design Using Services<\/b><br \/>\nDesign in terms of services\u2014independent, concurrent objects behind well-defined, consistent interfaces.<\/li>\n<li><b>Always Design for Concurrency<\/b><br \/>\nAllow for concurrency, and you&#8217;ll design cleaner interfaces with fewer assumptions.<\/li>\n<li><b>Separate Views from Models<\/b><br \/>\nGain flexibility at low cost by designing your application in terms of models and views.<\/li>\n<li><b>Use Blackboards to Coordinate Workflow<\/b><br \/>\nUse blackboards to coordinate disparate facts and agents, while maintaining independence and isolation among participants.<\/li>\n<li><b>Don&#8217;t Program by Coincidence<\/b><br \/>\nRely only on reliable things. Beware of accidental complexity, and don&#8217;t confuse a happy coincidence with a purposeful plan.<\/li>\n<li><b>Estimate the Order of Your Algorithms<\/b><br \/>\nGet a feel for how long things are likely to take before you write code.<\/li>\n<li><b>Test Your Estimates<\/b><br \/>\nMathematical analysis of algorithms doesn&#8217;t tell you everything. Try timing your code in its target environment.<\/li>\n<li><b>Refactor Early, Refactor Often<\/b><br \/>\nJust as you might weed and rearrange a garden, rewrite, rework, and re-architect code when it needs it. Fix the root of the problem.<\/li>\n<li><b>Design to Test<\/b><br \/>\nStart thinking about testing before you write a line of code.<\/li>\n<li><b>Test Your Software, or Your Users Will<\/b><br \/>\nTest ruthlessly. Don&#8217;t make your users find bugs for you.<\/li>\n<li><b>Don&#8217;t Use Wizard Code You Don&#8217;t Understand<\/b><br \/>\nWizards can generate reams of code. Make sure you understand all of it before you incorporate it into your project.<\/li>\n<li><b>Don&#8217;t Gather Requirements\u2013Dig for Them<\/b><br \/>\nRequirements rarely lie on the surface. They&#8217;re buried deep beneath layers of assumptions, misconceptions, and politics.<\/li>\n<li><b>Workwith a User to Think Like a User<\/b><br \/>\nIt&#8217;s the best way to gain insight into how the system will really be used.<\/li>\n<li><b>Abstractions Live Longer than Details<\/b><br \/>\nInvest in the abstraction, not the implementation. Abstractions can survive the barrage of changes from different implementations and new technologies.<\/li>\n<li><b>Use a Project Glossary<\/b><br \/>\nCreate and maintain a single source of all the specific terms and vocabulary for a project.<\/li>\n<li><b>Don&#8217;t Think Outside the Box\u2013Find the Box<\/b><br \/>\nWhen faced with an impossible problem, identify the real constraints. Ask yourself: &#8220;Does it have to be done this way? Does it have to be done at all?&#8221;<\/li>\n<li><b>Start When You&#8217;re Ready.<\/b><br \/>\nYou&#8217;ve been building experience all your life. Don&#8217;t ignore niggling doubts.<\/li>\n<li><b>Some Things Are Better Done than Described<\/b><br \/>\nDon&#8217;t fall into the specification spiral\u2014at some point you need to start coding.<\/li>\n<li><b>Don&#8217;t Be a Slave to Formal Methods.<\/b><br \/>\nDon&#8217;t blindly adopt any technique without putting it into the context of your development practices and capabilities.<\/li>\n<li><b>Costly Tools Don&#8217;t Produce Better Designs<\/b><br \/>\nBeware of vendor hype, industry dogma, and the aura of the price tag. Judge tools on their merits.<\/li>\n<li><b>Organize Teams Around Functionality<\/b><br \/>\nDon&#8217;t separate designers from coders, testers from data modelers. Build teams the way you build code.<\/li>\n<li><b>Don&#8217;t Use Manual Procedures<\/b><br \/>\nA shell script or batch file will execute the same instructions, in the same order, time after time.<\/li>\n<li><b>Test Early. Test Often. Test Automatically<\/b><br \/>\nTests that run with every build are much more effective than test plans that sit on a shelf.<\/li>\n<li><b>Coding Ain&#8217;t Done &#8216;Til All the Tests Run<\/b><br \/>\n&#8216;Nuff said.<\/li>\n<li><b>Use Saboteurs to Test Your Testing<\/b><br \/>\nIntroduce bugs on purpose in a separate copy of the source to verify that testing will catch them.<\/li>\n<li><b>Test State Coverage, Not Code Coverage<\/b><br \/>\nIdentify and test significant program states. Just testing lines of code isn&#8217;t enough.<\/li>\n<li><b>Find Bugs Once<\/b><br \/>\nOnce a human tester finds a bug, it should be the last time a human tester finds that bug. Automatic tests should check for it from then on.<\/li>\n<li><b>English is Just a Programming Language<\/b><br \/>\nWrite documents as you would write code: honor the DRY principle, use metadata, MVC, automatic generation, and so on.<\/li>\n<li><b>Build Documentation In, Don&#8217;t Bolt It On<\/b><br \/>\nDocumentation created separately from code is less likely to be correct and up to date.<\/li>\n<li><b>Gently Exceed Your Users&#8217; Expectations<\/b><br \/>\nCome to understand your users&#8217; expectations, then deliver just that little bit more.<\/li>\n<li><b>Sign Your Work<\/b><br \/>\nCraftsmen of an earlier age were proud to sign their work. You should be, too.<\/li>\n<\/ol>\n<h3>Languages To Learn<\/h3>\n<blockquote><p>Tired of C, C++, and Java? Try CLOS, Dylan, Eiffel, Objective C, Prolog, Smalltalk, or TOM. Each of these languages has different capabilities and a different &#8220;flavor.&#8221; Try a small project at home using one or more of them.<\/p><\/blockquote>\n<h3>The WISDOM Acrostic<\/h3>\n<blockquote><p><b>W<\/b>hat do you want them to learn?<br \/>\nWhat\u00a0<b>i<\/b>s their interest in what you&#8217;ve got to say?<br \/>\nHow\u00a0<b>s<\/b>ophisticated are they?<br \/>\nHow much\u00a0<b>d<\/b>etail do they want?<br \/>\nWhom do you want to\u00a0<b>o<\/b>wn the information?<br \/>\nHow can you\u00a0<b>m<\/b>otivate them to listen to you?<\/p><\/blockquote>\n<h3>How to Maintain Orthogonality<\/h3>\n<ul>\n<li>Design independent, well-defined components.<\/li>\n<li>Keep your code decoupled.<\/li>\n<li>Avoid global data.<\/li>\n<li>Refactor similar functions.<\/li>\n<\/ul>\n<h3>Things to prototype<\/h3>\n<ul>\n<li>Architecture<\/li>\n<li>New functionality in an existing system<\/li>\n<li>Structure or contents of external data<\/li>\n<li>Third-party tools or components<\/li>\n<li>Performance issues<\/li>\n<li>User interface design<\/li>\n<\/ul>\n<h3>Architectural Questions<\/h3>\n<ul>\n<li>Are responsibilities well defined?<\/li>\n<li>Are the collaborations well defined?<\/li>\n<li>Is coupling minimized?<\/li>\n<li>Can you identify potential duplication?<\/li>\n<li>Are interface definitions and constraints acceptable?<\/li>\n<li>Can modules access needed data\u2014when needed?<\/li>\n<\/ul>\n<h3>Debugging Checklist<\/h3>\n<ul>\n<li>Is the problem being reported a direct result of the underlying bug, or merely a symptom?<\/li>\n<li>Is the bug really in the compiler? Is it in the OS? Or is it in your code?<\/li>\n<li>If you explained this problem in detail to a coworker, what would you say?<\/li>\n<li>If the suspect code passes its unit tests, are the tests complete enough? What happens if you run the unit test with this data?<\/li>\n<li>Do the conditions that caused this bug exist anywhere else in the system?<\/li>\n<\/ul>\n<h3>Law of Demeter for Functions<\/h3>\n<p><span class=\"Apple-style-span\" style=\"font-family: Simsun; font-size: medium;\">An object&#8217;s method should call only methods belonging to:<\/span><\/p>\n<ul>\n<li>Itself<\/li>\n<li>Any parameters passed in<\/li>\n<li>Objects it creates<\/li>\n<li>Component objects<\/li>\n<\/ul>\n<h3>How to Program Deliberately<\/h3>\n<ul>\n<li>Stay aware of what you&#8217;re doing.<\/li>\n<li>Don&#8217;t code blindfolded.<\/li>\n<li>Proceed from a plan.<\/li>\n<li>Rely only on reliable things.<\/li>\n<li>Document your assumptions.<\/li>\n<li>Test assumptions as well as code.<\/li>\n<li>Prioritize your effort.<\/li>\n<li>Don&#8217;t be a slave to history.<\/li>\n<\/ul>\n<h3>When to Refactor<\/h3>\n<ul>\n<li>You discover a violation of the DRY principle.<\/li>\n<li>You find things that could be more orthogonal.<\/li>\n<li>Your knowledge improves.<\/li>\n<li>The requirements evolve.<\/li>\n<li>You need to improve performance.<\/li>\n<\/ul>\n<h3>Cutting the Gordian Knot<\/h3>\n<p><span class=\"Apple-style-span\" style=\"font-family: Simsun; font-size: medium;\">When solving\u00a0<\/span><i>impossible<\/i><span class=\"Apple-style-span\" style=\"font-family: Simsun; font-size: medium;\">\u00a0problems, ask yourself:<\/span><\/p>\n<ul>\n<li>Is there an easier way?<\/li>\n<li>Am I solving the right problem?<\/li>\n<li>Why is this a problem?<\/li>\n<li>What makes it hard?<\/li>\n<li>Do I have to do it this way?<\/li>\n<li>Does it have to be done at all?<\/li>\n<\/ul>\n<h3>Aspects of Testing<\/h3>\n<ul>\n<li>Unit testing<\/li>\n<li>Integration testing<\/li>\n<li>Validation and verification<\/li>\n<li>Resource exhaustion, errors, and recovery<\/li>\n<li>Performance testing<\/li>\n<li>Usability testing<\/li>\n<li>Testing the tests themselves<\/li>\n<\/ul>\n<hr \/>\n<p><span class=\"Apple-style-span\" style=\"font-family: Simsun; font-size: medium;\">Checklists from The Pragmatic Programmer, by Andrew Hunt and David Thomas.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h6>\u4e00\u4e9b\u989d\u5916\u7684\u94fe\u63a5\uff1a<\/h6>\n<ul>\n<li><a href=\"https:\/\/pragprog.com\/the-pragmatic-programmer\/extracts\" target=\"_blank\">The Pragmatic Bookshelf | Extracts from The Pragmatic Programmer<\/a><\/li>\n<li><a href=\"https:\/\/pragprog.com\/the-pragmatic-programmer\/links-and-web-resources\" target=\"_blank\">The Pragmatic Bookshelf | Links and Web Resources<\/a><\/li>\n<li><a href=\"https:\/\/pragprog.com\/the-pragmatic-programmer\/source-code\" target=\"_blank\">The Pragmatic Bookshelf | Source code<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u5728\u770b\u300a\u7a0b\u5e8f\u5458\u4fee\u70bc\u4e4b\u9053\u2014\u2014\u4ece\u5c0f\u5de5\u5230\u4e13\u5bb6\u300b\uff0c\u5f88\u6709\u542f\u53d1\u7684\u4e00\u672c\u4e66\uff08\u867d\u7136\u5230\u73b0\u5728\u4e3a\u6b62\u6211\u8fd8\u6ca1\u4ec0\u4e48\u5927\u578b\u9879\u76ee\u7684\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u4f46\u5c31 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,7],"tags":[320],"class_list":["post-1604","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-programing","tag-reading"],"views":11071,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=1604"}],"version-history":[{"count":0,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1604\/revisions"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=1604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=1604"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=1604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}