璋﹀崙瀵逛簬杞歡鏋舵瀯甯堟潵璇翠笉鏄竴涓緢甯歌鐨勭壒寰併傚湪鍙備笌榪囦竴浜涜浜烘暚鐣忕殑鏋舵瀯鍚庯紝騫朵笖鏈榪戣繕鍙備笌榪囦竴涓護浜烘剦蹇殑欏圭洰錛屾垜浠ユ瘡涓灦鏋勫笀閮芥瘮杈冨枩嬈㈢殑鏂瑰紡鎬葷粨浜嗕竴浜涚粡楠岋細浣滀負涓濂楄鍒欍?/span>瑙勫垯0錛氫笉瑕佽緋婃秱錛圖on't assume stupidity錛?/strong>
灝卞儚涓浜涙灦鏋勫笀鍋囧畾寮鍙戜漢紱誨紑浠栦滑鑷繁鐨勮澶囷紝琛ㄧ幇鐨勫皢鍍忎釜鐚村瓙銆傚湪鎴戠殑緇忛獙閲岋紝榪欐槸寰堝皯浼氬彂鐢熺殑銆傛垜鍙湅鍒拌繃涓縐嶅紑鍙戜漢鍛樺仛浜嬫椂鐘硦娑傜殑鎯呭喌錛屽氨鏄粯榛樼殑鎶楄鍜屽弽瀵規灦鏋勫笀銆傚鏋滀綘璁ゅ彲榪欎釜瑙勫垯錛屾帴涓嬪氨鏄竴浜涚粏鑺傘?/span>
瑙勫垯1錛氫綘鍙兘鏄敊鐨勶紙You may be wrong錛?/strong>
褰撳闃呬竴浜涗漢鐨勮璁$悊蹇墊椂錛屾垜鏇村枩嬈㈠紑璇氬竷鍏殑灝濊瘯闂竴浜涢棶棰樸傛垜璁や負寮鍙戜漢鍛樺彲鑳藉拷鐣ヤ簡涓涓叧閿偣錛屽騫跺彂銆傝繖鍎挎湁涓浜涘簲瀵硅繖浜涘満鏅殑鏂規硶錛?/span>
1. 鏋舵瀯甯堬細“浣犱笉鑳介偅鏍峰仛錛屽洜涓轟粬鍙兘鐮村潖浠g爜璁捐鍑嗗垯銆?#8221;
2. 鏋舵瀯甯堬細“浣犱笉鑳介偅鏍峰仛錛屽洜涓哄湪澶氱敤鎴鋒儏鍐典笅錛屼粬鏄笉瀹夊叏鐨勩?#8221;
3. 鏋舵瀯甯堬細“浣犳槸鍚︽兂榪囧鐢ㄦ埛鏃訛紝浠栧浣曞伐浣滃憿錛?#8221;
4. 鏋舵瀯甯堬細“浣犵殑鏂規濡備綍搴斾粯澶氱敤鎴峰満鏅憿錛?#8221;
浜茬埍鐨勬灦鏋勫笀錛氳浠庢渶涓嶅彲鑳藉埌鏈鏈夊彲鑳藉緱鍒頒竴涓敖鍙兘濂界殑緋葷粺鐨勮搴︽潵璇勪及榪欎簺鏂規硶銆傦紙鎻愮ず錛氬敖綆℃湁璁稿鏋舵瀯闈㈠榪欎釜闂緇忓父澶辮觸錛屼絾榪欑湡鐨勬槸涓涓」寰堝鏄撶殑宸ヤ綔銆傦級
瑙勫垯2錛氳皚鎱庨夌敤鎶鏈紙Be careful with technology錛?/strong>
姣忕鎶鏈兘浼氬甫鏉ユ垚鏈傚ぇ閮ㄥ垎鎶鏈彧鑳藉甫鏉ュ緢灝忕殑鐩婂銆?/span>
榪欏効鏈変竴涓垜鎵緇忓巻榪囩殑鎴愭湰澶т簬鐩婂鐨勬妧鏈垪琛紝鍥犳灝嗘案涓嶅啀浣跨敤錛堝鏋滀綘涓嶇煡閬撲粬浠紝涔熶笉鐢ㄦ媴蹇冦傚叧閿槸鏁伴噺銆傦級錛欽avaServer Pages, Java Server Faces, JAX-WS, Hibernate, Spring, EJB, Oracle SOA Server, IBM WebSphere, Wicket, Google Web Toolkit, Adobe Flex, JBoss jBPM, JMS錛坅ll implementations錛? JBoss銆?/span>
榪欏効鏈変竴涓垜姣旇緝鎰挎剰浣跨敤鐨勬妧鏈垪琛細JUnit, Jetty, Joda-time, Java Standard Edition銆?/span>
榪欏効鏈変竴涓綘鍙兘鎯寵灝濊瘯鎴栨ā浠跨殑璋﹁櫄鐨勪氦嫻佹柟寮忥細
鏋舵瀯甯堬細浣犲簲璇ヤ嬌鐢╔鎶鏈?/span>
鎴戯細鎴戞敞鎰忚繃X鎶鏈紝鎴戜笉璁や負浠栬兘甯姪鎴戣В鍐充笟鍔¢棶棰樸?/span>
鏋舵瀯甯堬細浣犳兂琛ㄨ揪鐨勬剰鎬濇槸浠涔堝憿錛?/span>
鎴戯細鍝︼紝鎴戦渶瑕佸仛錛?..錛岃繖浜涙槸X鎶鏈亣璁劇殑錛?..錛涙垜涓嶈涓轟粬浠尮閰嶅緱涓娿?/span>
鏋舵瀯甯堬細閭d箞浣犲緩璁嬌鐢ㄤ粈涔堟潵鏇夸唬浠栧憿錛?/span>
鎴戯細鍡?..錛屾垜璁や負鎴戜滑鍙互浣跨敤鏅氱殑Java鏉ヨВ鍐沖畠銆備簨瀹炰笂錛屾垜鏄ㄦ櫄鍋氫簡涓涓潪甯稿ソ鐨刣emo鏉ヨ瘉鏄庡叾鍙鎬э紙I made a pretty good proof-of-concept yesterday evening.錛夈?/span>
鍙椾漢灝婃暚鐨勬灦鏋勫笀錛氬緢閰鳳紝璁╂垜浠敤瀹冨惂銆?/span>
瑙勫垯3錛氫竴鑷存т笉鍍忎綘璁や負鐨勯偅鏍烽噸瑕侊紙Consistency isn't as important as you think錛?/strong>
濡傛灉鎴戞湁涓渚垮+錛屾瘡嬈℃垜閮藉皢浼氬惉鍒?..
鏋舵瀯甯堬細“鏄殑錛屾垜瑙夊緱榪欑鏂瑰紡鍙兘姣旇緝絎紝浣嗕綘蹇呴』榪欐牱鍋氥備綘鏄煡閬撶殑錛屽鏋滀笉榪欐牱鍋氾紝緋葷粺浼氫駭鐢熶笉涓鑷村茍涓旀槸涓嶅彲緇存姢鐨?#8221;
鐩稿綋鐒跺惂錛屾垜涓嶅父甯稿仛緇存姢宸ヤ綔錛屼絾鏄垜澶勭悊浠諱綍緋葷粺鏃訛紝鏈鍥伴毦鐨勯儴鍒嗛氬父鏄悊瑙g郴緇熺殑涓氬姟閫昏緫銆俋緋葷粺錛堟湁涓濂椾笟鍔¢昏緫錛夎繕鏄痀緋葷粺錛堝彟涓濂椾笟鍔¢昏緫錛夋槸涓嶆槸涓鑷存х殑闂鍦ㄨ鎴戝け鐪犵殑浠誨姟鍒楄〃涓紭鍏堢駭閮芥槸琚帓鐨勬瘮杈冧綆鐨勩?/span>
浜嬪疄涓婏紝X緋葷粺鏄潪甯稿鏉傜殑錛屽洜涓轟粬鏈夊崄浜屽眰涓旀瘡灞傞兘瑕佸拰Y緋葷粺涓鑷淬傜幇鍦ㄨ繖璁╂垜鐗瑰埆鐢熸皵銆備笉鍚岀殑涓婁笅鏂囩幆澧冩湁涓嶅悓鐨勬潈琛°?/span>
鍝︼紝鏄殑錛氳繕璁板緱瑙勫垯0鍚楋紵鍋囧鍦ㄤ竴涓粰瀹氱殑鐜涓紝寮鍙戜漢鍛樺皾璇曚負榪欎釜鐜鍒涢犱竴涓ソ鐨勮В鍐蟲柟妗堛?/span>
鍝︼紝鏄殑錛屽彟涓浠朵簨錛氭垜浠庢湭瑙佸埌榪囦竴涓皬鐨勫彲緇存姢鐨勪笢瑗垮鏉傚埌闅句互鐞嗚В銆傚鏉傚彧鏄洜涓烘垜浠浠栧彂灞曞.澶ч犳垚鐨勩?/span>
鍝︼紝濂界殑錛岃繕鏈夊彟澶栦竴浠朵簨錛氬鏋滃洜涓哄紑鍙戜漢鍛樹腑涓浜涗嬌鐢ㄨ繖鏍風殑鑺辨嫭鍙鋒柟寮忥紝鍙﹀涓閮ㄥ垎浣跨敤鍙︿竴縐嶈姳鎷彿鏂瑰紡緙栫▼錛岃屽鑷村紑鍙戜漢鍛樺ぇ鍚電潃榪滅緙栫爜銆傛垜灝嗗け鍘繪墍鏈夊浜烘х殑淇′話銆?/span>
瑙勫垯4錛氳嚜搴曞悜涓婄殑涓鑷存т笉濡備粠涓婂埌涓嬬殑涓鑷達紙Bottom-up consistency beats top-down consistency錛?/strong>
榪欏効鏈変竴縐嶆垜鏈夎兘鍔涘垱寤虹郴緇熷唴閮ㄤ竴鑷存х殑鏂規硶錛?/span>
1. 浣跨敤鏇村鏄撹娌跨敤錛岃屼笉鏄嬌鐢ㄥ叿鏈夌獊鐮存х殑鏋舵瀯鏉ュ垱寤轟竴涓弬鑰冨簲鐢ㄣ傚鏋滀綘榪欐牱鍋氱殑璇濓紝鍦ㄩ亣鍒頒竴浜涘亸紱繪灦鏋勭殑鎯蟲硶鏃訛紝闄ら潪浠栦滑鐪熺殑闇瑕侊紝鍦ㄨ繖縐嶆儏鍐典笅浠栨槸闈炲父濂界殑錛屽惁鍒欏紑鍙戜漢鍛樺皢浼氭憞澶淬?/span>
2. 鍩硅涓縐嶄氦鍙変氦嫻佺殑鏂囧寲錛團oster a culture of cross-pollination錛夛細褰兼浜掔浉鐪嬩唬鐮佺殑寮鍙戜漢鍛樹竴鑷存ц姣斾粎浠呯湅浠栬嚜宸變唬鐮佺殑寮鍙戜漢鍛樻洿濂姐傜粨瀵圭紪紼嬶紙Pair programming錛夛紝浠g爜review錛圕ode reviews錛夊拰鍩硅浜ゅ弶鎶鏈垎浜細錛圱ech sharing sessions all foster cross-pollination錛夈?/span>
瑙勫垯5錛氳法緋葷粺鐨勭瓥鐣ラ噸鐢ㄤ笉鏄渶浼橀夋嫨錛圱actical reuse in across systems is suboptimization錛?/strong>
閲嶇敤灝嗕細浜х敓鑰﹀悎銆傚鏋滅郴緇焁鍜岀郴緇焂閲嶇敤浜嗕竴浜涘姛鑳斤紝緋葷粺X闇瑕佸鍔熻兘榪涜淇敼錛岃繖灝嗕細褰卞搷鍒扮郴緇焂銆備絾鑷沖皯錛屽伐浣滃湪緋葷粺X鐨勫洟闃熷繀欏誨喅瀹氬閲嶇敤鐨勫姛鑳藉仛涓浠界鏈夊壇鏈傞偅鎰忓懗鐫浠栦笉鍐嶈鐪熸鐨勯噸鐢ㄣ傚湪鏋佺鎯呭喌涓嬶紝鐢變簬瀵歸噸鐢ㄥ姛鑳界殑淇敼錛屽皢閫犳垚緋葷粺Y浜х敓bug銆?/span>
褰撲綘璺ㄧ郴緇熼噸鐢ㄦ椂錛岄偅搴旇鏄ǔ瀹氱殑錛堜緥濡傦紝Java SE騫沖彴鎴栧埆鐨勪笢瑗匡紝濡傛紼沖畾錛屼綘涓嶉渶瑕佽嚜宸卞姩鎵嬪仛瀹冿級鎴栫瓥鐣ユх殑鍐呭銆傚叧浜庣瓥鐣ラ噸鐢紝鏄寚鏁村悎淇℃伅浣嗕笉鏄粎浠呭鍒跺姛鑳界殑鏈嶅姟銆?/span>
鎹㈠彞璇濊錛氶噸鐢ㄥ簲璇ユ槸瑕佷笉琚嬌鐢紝瑕佷笉琚泦鎴愩傚壇鏈槸浣犵殑鏈嬪弸銆?/span>
瑙勫垯6錛氬垎杈ㄨ鍒欏拰鏁欐潯錛圫eparate between rules and dogma錛?/strong>
鏈変笁縐嶅師鍥犱嬌鐢ㄨ繖涓換浣曠紪鐮佽鑼冧腑閮芥湁鐨勮鍒欙細
1. 涓嶅畨鍏紙Unsafe錛夛細浠g爜鍦ㄦ煇縐嶅満鏅紙鐪熷疄瀛樺湪錛岄潪鐞嗚涓婏級涓細鍑虹幇bug
2. 浠や漢璐硅В錛圛ncomprehensible錛夛細“鎴?#8221;涓嶇悊瑙h繖鏄庝箞鍥炰簨
3. 鏃侀棬宸﹂亾 錛圚eresy錛夛細浣跨敤浜嗗ぇ瀹墮兘涓嶅枩嬈㈢殑鏂瑰紡鏉ュ啓浠g爜
鎶芥煡嫻嬭瘯錛氭槸鍚︿綘鏈夎繖鏍蜂竴涓鍒欙紝“鎵鏈夊睘鎬у繀欏繪湁娉ㄩ噴”銆傚叧浜庡畨鍏ㄩ棶棰橈紝鍏充簬鏄撶悊瑙i棶棰樻垨鏄梺闂ㄥ乏閬擄紵浣跨敤榪欎釜渚嬪瓙鍋氫負鏍囧噯錛?/span>
/**
* Contains the name value of the object
*/
private String name;
鍏充簬“鍦ㄥ乏鑺辨嫭鍙峰墠闈㈡病鏈夋崲琛?#8221;瑙勫垯錛熷叧浜?#8220;鑺辨嫭鍙鋒牱寮忓簲璇ョ粺涓”鐨勮鍒欙紵鏄惁絎﹀悎涓嶅畨鍏ㄤ唬鐮侊紝涓嶆槗鐞嗚В鎴栨梺闂ㄥ乏閬擄紵
鎴戜滑搴旇鏇村叧娉ㄥ湪鐗瑰畾鍦烘櫙涓嬪啓閫傚綋鐨勪唬鐮侊紝灝戝叧娉ㄤ竴鑷存с?/span>
鏈鍚庯細璋﹀崙錛圔e humble錛?/strong>
鍦ㄦ垜浠庝簨杞歡寮鍙戠殑閭d簺騫撮噷錛屾垜瑙佽繃鍒拌蔣浠舵灦鏋勫笀鐨勪激瀹寵澶氫簬甯姪銆傚仛涓轟竴涓亴涓氳鑹詫紝濡傛灉鎴戜滑瑙i泧浠栦滑錛堟垜浠嚜宸憋級錛屾垜浠皢鑺傜渷寰堝閽便傞偅鎬曟垜浠粛浠樼粰浠栦滑钖按銆?/span>
濡傛灉浣犲伐浣滃湪涓涓粬浠犳垚鐨勪激瀹寵澶氫簬浠栦滑鎵鑳介樆姝紝浣犳湁涓や釜閫夐」錛氫綘鍙互灝濊瘯鏀瑰杽鎴栧湪娌℃湁浜虹殑鏃跺欑紲楓?/span>

]]>