進階程式設計語言自問世以來,林林總總加在一起不下一百種,Java能在其中一支獨秀,獨領風騷,除了"Write once, run anywhere"的優勢外,另一個值得關注的是它符合人類心理的需要。Java語言是靜態物,沒有程式員開發出應用程式,它是沒有價值的。在軟體開發過程中,程式設計語言做什麼,語言做什麼,作為人的程式員做什麼,有明確的介面和分工,在工程領域這個介面叫人機工程學,在心理學領域被稱作工程心理學,二者含義接近。
在Java開發的最佳實務提倡用完整的單詞來表示標識符,即使看起來很長,例如資源管理者表示為ResourceManager。別人一看就能明白含義,介面是不是更友好呢。
寫Java語言的人可能都用過C或C++來開發,用C++可能都會瞭解到匈牙利命名規則,它用首碼表示資料類型,例如,a表示Array,c表示Char,等等。類型首碼還可以組合起來用。首碼的使用也推動標識符縮寫的應用,象pDlg用來命名一個對話方塊指標。縮寫規則進一步推廣到應用軟體開發領域,就是另外一番情景了:我看到過DisctMgr表示折扣管理,還有用RsMgr表示資源管理。應用軟體與行業、領域緊密相關,不是所有開發員都很熟悉,不好的縮寫,讓人去猜測縮寫的含義,轉移人的注意力,擠佔了思考代碼邏輯的精力。
心理學研究表明,人的注意力是有限的,人腦同時考慮3個事物是最佳狀態,注意4~5個狀態會下降,注意7個以上事物是相當困難的。有限的注意力可以理解作資源,在同一時間點,注意力應該得到合理的分配。小時候,老師經常會提醒同學們上課不要開小差,小同學的注意力轉移到玩小動作,看窗外的風景,當然不會聽老師在講什麼內容了。我小時候是個聽話的好孩子,不會開小差,大了反而常開小差。
回到正題,在Java開發中的心理學原理體現在哪裡呢?開發軟體是一項很複雜的勞動,要設計類、方法,寫代碼邏輯,寫完了要編譯、調試,還要理解業務需求。開發本身就很難了,在設計類時,就要努力到達低耦合、高內聚。低耦合,緊密關聯的類少了,就不會浪費注意力到別的類上;高內聚,可以把注意力集中在一個類的內部。記憶力越集中,越能產生高品質的成果,為什麼優秀的程式員形銷骨立的多呢?因為工作太投入,注意力太集中,沒有考慮保養身體,過有品質的生活。
用完整的單詞,其心理學意義何在呢?整詞的含義一看就明白,分配較低的注意力水平就能搞定,可以把更多注意力分配到程式結構,分支、迴圈之類的,這樣不是可以做更多有意義的工作嗎?
相對C/C++、PHP等語言來說,Java寫的代碼更容易理解,雖然有時看起來代碼很長,例如Java Bean的Getter/Setter方法,但是它容易理解,有開發工具的支援,程式員還是喜歡用。所以要大力提倡使用整詞,象ResourceManager,getResource()等等,慎用縮寫,沒有把握最好不用。
人的注意力是有限的,項目工期是限定的。從某種意義上看,項目人月也就是注意力與項目工期的乘積。對專案管理者來說,調動開發員的注意力到較高的效率和應用水平,就能縮短項目周期,老闆會有獎勵的。