最近應(yīng)朋友的需要,幫忙寫(xiě)了個(gè)日常賬本管理的小程序,并且在寫(xiě)程序過(guò)程中有了點(diǎn)心得,心得很雜亂,涉及到軟件開(kāi)發(fā)的不同方面,因此統(tǒng)一稱之為“小小軟件工程”。
● 電腦不是萬(wàn)能的。
無(wú)論是客戶還是工程師都覺(jué)得計(jì)算機(jī)可以幫助人做許多事情,對(duì)應(yīng)用程序有著“不切實(shí)際”的期望,希望程序要簡(jiǎn)單好用、同時(shí)又是準(zhǔn)確無(wú)錯(cuò)、及時(shí)響應(yīng)使用者需求等等,在這樣的目標(biāo)驅(qū)動(dòng)下結(jié)果往往是程序一點(diǎn)都不好用(有的時(shí)候覺(jué)得還沒(méi)人來(lái)得簡(jiǎn)單),大部分時(shí)候不出錯(cuò)(但不是100%,還是有時(shí)候會(huì)出錯(cuò),并且不知道什么時(shí)候發(fā)生,錯(cuò)在哪里),程序反應(yīng)越來(lái)越慢(不知道電腦到底是節(jié)約時(shí)間,還是在浪費(fèi)生命…)。
其實(shí),計(jì)算機(jī)就如其他工具一樣只是幫助人延伸自己的能力,只是他們更加像人,因?yàn)樗麄冇泻軓?qiáng)的計(jì)算能力。人因?yàn)槭苌锕δ艿南拗?,管理百條、千條數(shù)據(jù)、計(jì)算幾千、幾萬(wàn)都還可以應(yīng)對(duì),但是信息爆炸造成數(shù)據(jù)量越來(lái)越大,人們關(guān)注的事情越來(lái)越精細(xì),因此通過(guò)計(jì)算機(jī)可以幫助人面對(duì)更大的計(jì)算量,管理更多的數(shù)據(jù)。但是計(jì)算機(jī)本身也受自身?xiàng)l件的限制,并不能解決所有的問(wèn)題,作為工程師一定要去了解電腦與人之間的差異,哪些是人可以做的,哪些是計(jì)算機(jī)可以做的,這樣子寫(xiě)程序時(shí)才不會(huì)陷入程序過(guò)度復(fù)雜的問(wèn)題
● 程序不是用來(lái)簡(jiǎn)化人的工作的。
這個(gè)想法肯定與許多人的觀點(diǎn)有沖突,想法來(lái)源于老婆(計(jì)算機(jī)人士)建議我把使用界面優(yōu)化一下,使得最終使用者用起來(lái)更加方便,最后被我否決了。原因是這里的一個(gè)功能的優(yōu)化可能要寫(xiě)幾十行代碼,而使用者(只有一個(gè))只在輸入過(guò)程中使用一次,而幾十行代碼還會(huì)給我的程序本身增加復(fù)雜性,而使用者完全可以人為調(diào)整一下就能很好的適應(yīng)。
其實(shí),這里也是個(gè)投入產(chǎn)出比的問(wèn)題,這里的優(yōu)化對(duì)于使用者來(lái)說(shuō)價(jià)值不大,而應(yīng)用的首要目標(biāo)是快速交付,因此所有的優(yōu)化工作我只選擇了為增強(qiáng)數(shù)據(jù)正確性而做的一些優(yōu)化,其他使用中不適的地方全部請(qǐng)人來(lái)適應(yīng)計(jì)算機(jī)。
聽(tīng)起來(lái),我做的事情不符合以往的思維,但是這個(gè)想法與上個(gè)想法一樣都認(rèn)為電腦的根本作用是幫助人解決人所不能做的事情,而不是一味的去解決人已經(jīng)擅長(zhǎng)的事情,比如說(shuō):讓程序提供各種功能去支持與未來(lái)的兼容,因?yàn)槿吮入娔X更能適應(yīng)變化,著眼于現(xiàn)在才是程序開(kāi)發(fā)的根本。
于是,一周以內(nèi)我就交付了程序,并且將對(duì)方大部分需求都給予了否決,只提供了最基本的功能就是原始數(shù)據(jù)的輸入和明細(xì)表輸出,并建議對(duì)方在使用過(guò)程中思考一下還需要哪些功能,當(dāng)使用者對(duì)這些需求有了足夠的認(rèn)識(shí),并且現(xiàn)有的數(shù)據(jù)使用者已經(jīng)無(wú)法手工處理時(shí),我再為之提供新的功能,降低了開(kāi)發(fā)成本,同時(shí)也降低了使用成本,因?yàn)槲宜械臄?shù)據(jù)全部是開(kāi)放的,如果他需要修改直接在數(shù)據(jù)上就可以完成。
在開(kāi)發(fā)過(guò)程中,我也受到了更好用的誘惑,因?yàn)橛袛?shù)據(jù)就很容易想到用數(shù)據(jù)庫(kù)來(lái)做,這樣子操作數(shù)據(jù)會(huì)覺(jué)得更加容易,但是后來(lái)還是只用Excel就實(shí)現(xiàn)了,根本原因是使用者對(duì)計(jì)算機(jī)非常不熟悉,也就是對(duì)Excel有所了解,如果我更換了使用習(xí)慣以后,光學(xué)習(xí)新的東西就會(huì)給使用者帶來(lái)成本,學(xué)習(xí)新的工具也會(huì)增加錯(cuò)誤的機(jī)率,如果為了保證數(shù)據(jù)準(zhǔn)確性又會(huì)增加開(kāi)發(fā)的工作量,因此我放棄了數(shù)據(jù)庫(kù)的誘惑,仍然使用Excel保證了功能簡(jiǎn)單,數(shù)據(jù)開(kāi)放。
● 需求采集時(shí)要將人的思維模式轉(zhuǎn)化成電腦的思維模式。
需求采集是應(yīng)用成功的關(guān)鍵,但是客戶大都沿用傳統(tǒng)工作中的思維模式,必須通過(guò)交流轉(zhuǎn)換客戶傳統(tǒng)的思維模式,使之向計(jì)算機(jī)的方式靠攏。比如:這次的客戶他需要謄寫(xiě)原始賬到好幾個(gè)本子,于是他總覺(jué)得數(shù)據(jù)也需要在表單中重復(fù)錄入,因此我向他解釋計(jì)算機(jī)里面所有數(shù)據(jù)最好是統(tǒng)一出口,計(jì)算機(jī)復(fù)制生成這些數(shù)據(jù)都會(huì)非常簡(jiǎn)單。他理解了我的說(shuō)法,自然這個(gè)需求就不用投入開(kāi)發(fā)的精力了。
● 程序再好的靈活性也比不上人。
這個(gè)問(wèn)題如前面所說(shuō)的,不要找計(jì)算機(jī)來(lái)代替人,如果人可以解決的問(wèn)題,千萬(wàn)別急著用計(jì)算機(jī)來(lái)實(shí)現(xiàn),成本高不說(shuō),可能投入產(chǎn)出比不值得才是根本。
● 代碼應(yīng)該通過(guò)重構(gòu)提升優(yōu)雅性和性能。
不想考慮第一次代碼就寫(xiě)得多漂亮,要遵守多少嚴(yán)格的約定(當(dāng)然這不是說(shuō)沒(méi)有規(guī)范,重要的是規(guī)范應(yīng)該遵守最大公約數(shù),只有能夠?yàn)榇蠹覅f(xié)作帶來(lái)便利的規(guī)范才是必須的)。相反不斷的重構(gòu)才是代碼優(yōu)化的最佳辦法,重構(gòu)一定是為滿足更好的管理代碼而做的。