程序員的職業(yè)素養(yǎng)

在微信公眾號(hào)看到這篇文章《示例:逐步提升程序質(zhì)量的演變過(guò)程》,發(fā)現(xiàn)轉(zhuǎn)自博客園的《一個(gè)圖片文件批量重命名工具的質(zhì)量改善過(guò)程》

我沒有細(xì)看那篇文章,個(gè)人已經(jīng)有3年沒逛博客園了,畢竟博客園的大多數(shù)帖子,都是比較初級(jí)的。發(fā)這篇文章,實(shí)在是有感而發(fā)!

先吐槽一下軟件行業(yè)的現(xiàn)狀:大多數(shù)程序員寫的代碼都處于“雛形”階段,也就是說(shuō)大多數(shù)程序員是不合格的!

我認(rèn)為不管是單機(jī)程序、通訊程序、企業(yè)軟件還是互聯(lián)網(wǎng)軟件,最重要的是“健壯性”、“高性能”和“安全性”!能做到這3點(diǎn)的程序員,無(wú)疑是優(yōu)秀的程序員。優(yōu)秀程序員寫的代碼,其質(zhì)量和可讀性可以保持在較高的水平,“可擴(kuò)展性”、“可復(fù)用性”、“可定制性”這些只是附屬品。

“可追蹤性”在企業(yè)軟件和互聯(lián)網(wǎng)軟件中尤其重要,因?yàn)橄到y(tǒng)出問(wèn)題影響的是一群人,而且不可能調(diào)試生產(chǎn)上的服務(wù),甚至有些問(wèn)題無(wú)法重現(xiàn)。有追蹤問(wèn)題的機(jī)制,比如程序日志和服務(wù)器監(jiān)控,就可以快速定位和解決問(wèn)題,爭(zhēng)分奪秒的把損失降到最低。

單元測(cè)試這些年,被軟件行業(yè)捧得過(guò)頭了,一個(gè)優(yōu)秀的程序員,應(yīng)該把軟件功能在自己的大腦中先運(yùn)行起來(lái),再去想怎么寫代碼,這樣可以一氣呵成、暢快淋漓的編寫實(shí)際代碼。

“安全性”大多數(shù)時(shí)候都會(huì)被忽略(當(dāng)然也有軟件設(shè)計(jì)能力的因素),這就是現(xiàn)在大多數(shù)軟件系統(tǒng)容易被入侵和破解的源頭,“安全性”應(yīng)當(dāng)作為架構(gòu)設(shè)計(jì)的一部分,貫穿軟件的整個(gè)生命周期。“可定制性”其實(shí)就是把不應(yīng)該依賴代碼的資源,提取到外部,常見的方式就是使用xml、jsv這樣的配置文件,也有使用數(shù)據(jù)庫(kù)的,典型的就是企業(yè)軟件和互聯(lián)網(wǎng)軟件,不管是國(guó)際化還是業(yè)務(wù)規(guī)則,都可以放到數(shù)據(jù)庫(kù)中,方便統(tǒng)一管理和更新。當(dāng)然也可以自定義二進(jìn)制格式(甚至于加密二進(jìn)制文件),這種方式在單機(jī)軟件中比較常見,主要用來(lái)加強(qiáng)破解軟件的難度。

“可擴(kuò)展性”也被過(guò)度強(qiáng)調(diào)了,還沒開始寫代碼,就想去設(shè)計(jì)未來(lái)的軟件,導(dǎo)致過(guò)度設(shè)計(jì)。“可擴(kuò)展性”在多用戶使用的系統(tǒng)中也體現(xiàn)在縱向擴(kuò)展和橫向擴(kuò)展上,說(shuō)白了加內(nèi)存,升級(jí)cpu和gpu,或者加服務(wù)器,就能服務(wù)更多的用戶。高性能是“可擴(kuò)展性”的一個(gè)重要因素,因?yàn)樾阅茉胶茫馕吨鴨挝粫r(shí)間內(nèi)服務(wù)的用戶越多。

“可復(fù)用性”不能過(guò)于絕對(duì),代碼應(yīng)該適當(dāng)?shù)闹貜?fù),程序員要在代碼量和可讀性之間取得平衡。在C#、python和ruby語(yǔ)言中,有可選參數(shù)和命名參數(shù)的特性,可以很好的解決添加新參數(shù)的需求。命名參數(shù)建議在python和ruby中盡量不要用,因?yàn)橐坏┬螀⒌拿Q改變了,調(diào)用此參數(shù)的所有代碼都得更改,再者由于python和ruby動(dòng)態(tài)語(yǔ)言的特性,即使最先進(jìn)的靜態(tài)分析器,也沒法找出所有的調(diào)用位置,而C#在編譯時(shí)就能報(bào)出所有問(wèn)題。當(dāng)然如果參數(shù)過(guò)多,可以把參數(shù)抽象成類或者結(jié)構(gòu)體。

如果在基于虛擬機(jī)的編程語(yǔ)言中,還要寫“可移植性”代碼,只能說(shuō)框架設(shè)計(jì)得不到位。比如.NET框架中,換行使用的是框架組件中的一個(gè)常量,而這個(gè)常量在linux和windows中,固定對(duì)應(yīng)\n和\r\n,也就是說(shuō)針對(duì)不同的操作系統(tǒng),框架封裝了底層格式、api的差異(其實(shí)框架在構(gòu)建時(shí),就針對(duì)操作系統(tǒng),生成了系統(tǒng)特定的代碼)。

這里贊一下.NET:據(jù)我了解的技術(shù)中,應(yīng)該只有.NET支持遠(yuǎn)程調(diào)試,配合上類似堡壘機(jī)的技術(shù),直接本地調(diào)試生產(chǎn)環(huán)境的代碼!

最后轉(zhuǎn)兩條網(wǎng)摘信息,我非常同意以下觀點(diǎn):

1. 首先,根據(jù)知識(shí)和經(jīng)驗(yàn)把人分為初級(jí)開發(fā)者、中級(jí)開發(fā)者,和高級(jí)開發(fā)者,這是非常一刀切地分類。有些人可能只是在一個(gè)位置上混了十年,然而他的成長(zhǎng)甚至沒有另一個(gè)人一年所學(xué)到和經(jīng)驗(yàn)多。

2. 大公司的好處就是各司其職,只要有合理的制度和流程,只要你按照規(guī)范操作,傻子都能把任務(wù)完成(當(dāng)然這不是說(shuō)大公司的員工都是傻子。我這里是說(shuō)流程和規(guī)范的重要性,當(dāng)然傻子雖然能完成工作,但卻不能成為大牛,同樣,大牛不管在大公司還是小公司,他一樣能成為大牛)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容