高手程序員之間的神對(duì)話(huà)
隨著做軟件的時(shí)間越來(lái)越長(zhǎng),我發(fā)現(xiàn),做軟件越來(lái)越難。難在哪?難在怎么做出一個(gè)好的軟件。好的軟件標(biāo)準(zhǔn)是什么??jī)蓚€(gè)詞,好用,好看!程序員的最大價(jià)值在于做出好用又好看的軟件的能力。
因此,我覺(jué)得程序員的價(jià)值絕對(duì)不在于技術(shù)本身,而在于做出好用且好看軟件的能力。
這是一個(gè)開(kāi)放性的話(huà)題,每一個(gè)人都是菜鳥(niǎo)過(guò)來(lái)的,我希望和祝愿每一個(gè)技術(shù)人員都能盡快成為高手,也希望更多老鳥(niǎo)來(lái)分享經(jīng)驗(yàn)。
在這篇文章,我將根據(jù)自己的經(jīng)驗(yàn)來(lái)分享,期望能給人有更多的有幫助的信息。在這里,我只想從技術(shù)角度來(lái)分析,技術(shù)不一定和收入相關(guān)聯(lián)的。
1 命名
從程序代碼的命名,我們就可以看出一個(gè)人的水平。最差的命名就是使用中文、拼音、拼音縮寫(xiě)、中英混搭,接下來(lái)要么是模仿式命名,要么干脆就隨意命名。
模仿式命名典型的就是“××DAL”,說(shuō)實(shí)話(huà),我覺(jué)得類(lèi)似于“UserDAL”這樣的名字,我覺(jué)得太不美觀了,一般這我就知道這是典型分層架構(gòu)的模仿者,說(shuō)明他是有些經(jīng)驗(yàn)的人了。
隨意命名,就是寫(xiě)代碼的時(shí)候,名字壓根就沒(méi)有意義,比如var list = new List
想要命名的更有意義,你只需要將每一個(gè)類(lèi)、每一個(gè)方法、每一個(gè)單詞的名字都用你開(kāi)發(fā)時(shí)的意思直接描述出來(lái)就行了。
2模型抽象能力
模型決定一個(gè)系統(tǒng)的可用性、穩(wěn)定性、易用性、可維護(hù)性、可擴(kuò)展性!
這個(gè)模型不是UML建模,而是軟件的核心。就是你設(shè)計(jì)一個(gè)軟件時(shí),為其所抽象出來(lái)的原理性的描述。模型決定一個(gè)軟件的質(zhì)量、易用性和擴(kuò)展性。
凡是優(yōu)秀的軟件,都有一個(gè)共同特點(diǎn),就是其模型構(gòu)建的非常漂亮,當(dāng)然也有不怎么優(yōu)秀的軟件,模型也很漂亮。
微軟MEF,我個(gè)人覺(jué)得其模型構(gòu)建非常的漂亮和優(yōu)雅,有興趣同學(xué)可以看看《體驗(yàn)Managed Extensibility Framework精妙的設(shè)計(jì)》這篇文章。
MEF的核心就是組合基元,如下圖所示,它簡(jiǎn)單的定義了動(dòng)態(tài)組合的支持基礎(chǔ),然后一層一層的進(jìn)行擴(kuò)展。
當(dāng)然了,因?yàn)槲恼率俏覍?xiě)的,我也得得瑟的顯擺一下OSGi.NET的設(shè)計(jì)。
可以說(shuō),OSGi.NET的設(shè)計(jì)。OSGi.NET的設(shè)計(jì)也是類(lèi)似于MEF,內(nèi)核很簡(jiǎn)單,只是為了實(shí)現(xiàn)三大功能:動(dòng)態(tài)插件化、面向服務(wù)、擴(kuò)展。
不過(guò),我們卻可以從簡(jiǎn)單的OSGi.NET來(lái)支撐WinForm、ASP.NET、ASP.NET MVC等任意應(yīng)用,從簡(jiǎn)單控制臺(tái)擴(kuò)展到iOpenWorks這樣的自動(dòng)化部署與軟件生產(chǎn)線(xiàn)平臺(tái)。它的擴(kuò)展方式是:
WinForm等桌面插件應(yīng)用 = OSGi.NET + 應(yīng)用插件
ASP.NET應(yīng)用 = OSGi.NET + WebExtension + Web插件
MVC應(yīng)用 = OSGi.NET + WebExtension + MvcWebExtension + Web插件
自動(dòng)部署 = OSGi.NET應(yīng)用 + iOpenWorksBundleRepository + iOpenWorksBootstrap + 自動(dòng)升級(jí)插件
遠(yuǎn)程服務(wù) = OSGi.NET應(yīng)用 + 遠(yuǎn)程服務(wù)宿主插件
負(fù)載均衡 = OSGi.NET應(yīng)用 + 遠(yuǎn)程服務(wù)宿主插件 + 負(fù)載均衡客戶(hù)端插件。
在OSGi.NET之上的任何應(yīng)用,都是基于組合和擴(kuò)展的方式,并沒(méi)有去不斷變更OSGi.NET內(nèi)核本身的代碼。
此外,OSGi.NET內(nèi)核能夠支持.NET Framework、Mono、.NET Compact Framework,因?yàn)樗O(shè)計(jì)的模型非常小,沒(méi)有用過(guò)多的類(lèi)庫(kù)支持。
3 謙虛隨和
我們的客戶(hù)都是一些大的企業(yè),接觸了很多各種類(lèi)型的技術(shù)人員。
你可以發(fā)現(xiàn)一個(gè)非常有趣的現(xiàn)象,那些懂得尊重別人、比較謙虛的人經(jīng)過(guò)深入接觸后,會(huì)發(fā)現(xiàn)他們的技術(shù)往往都很了不起。
而那些說(shuō)話(huà)刻薄無(wú)禮,覺(jué)得這個(gè)技術(shù)也不怎樣,那個(gè)技術(shù)沒(méi)什么了不起的,這個(gè)技術(shù)沒(méi)有什么用,我自己的東西已經(jīng)挺好的,這樣的人水平、經(jīng)驗(yàn)和見(jiàn)識(shí)一般都不怎樣。
軟件的問(wèn)題,并不是簡(jiǎn)簡(jiǎn)單單解決一個(gè)技術(shù)問(wèn)題,從技術(shù)的角度上看,只要學(xué)會(huì)了使用技術(shù),那么我們就已經(jīng)掌握了技術(shù),因此,單純的技術(shù)是很簡(jiǎn)單的。
相反的是,軟件的協(xié)作開(kāi)發(fā)、管理,軟件的易用性,軟件是否美觀,這些東西才是最麻煩的,也往往是技術(shù)水平一般、經(jīng)驗(yàn)短缺的程序員意識(shí)不到的東西。
我曾經(jīng)接觸過(guò)不少一般的程序員,大體都是這一類(lèi),他們覺(jué)得軟件太簡(jiǎn)單了,沒(méi)有什么了不起的。對(duì)于什么思想,也不屑一顧,他們已經(jīng)覺(jué)得自己掌握了很多真正的技術(shù)。
4異常處理與穩(wěn)定健壯
通過(guò)異常處理可以看出一個(gè)程序員程序設(shè)計(jì)的嚴(yán)謹(jǐn)與扎實(shí)的基礎(chǔ)知識(shí)。
對(duì)于Java開(kāi)發(fā)人員而言,會(huì)發(fā)現(xiàn)每一個(gè)方法都有可能需要強(qiáng)制的處理異常和聲明這個(gè)函數(shù)需要處理的異常,這中強(qiáng)制的約束,會(huì)強(qiáng)迫開(kāi)發(fā)人員來(lái)習(xí)慣性的考慮和思考它。
不過(guò),對(duì)于大部分人來(lái)說(shuō),它處理異常的方式就是簡(jiǎn)單的使用try { … } catch(Exception anyException) { // 忽略異常 },用這種方式來(lái)捕捉所有的異常信息。
這樣做的好處就是快,傻,缺點(diǎn)就是一旦出現(xiàn)問(wèn)題,就不知道問(wèn)題在哪發(fā)生,怎么回事,如果有靠譜的QA還好一些,比如外企,他們都有規(guī)范的測(cè)試方法和測(cè)試流程,一旦發(fā)現(xiàn)問(wèn)題,就會(huì)將重現(xiàn)捕捉完整的描述出來(lái)給開(kāi)發(fā)者看。
不過(guò),在國(guó)內(nèi)沒(méi)有嚴(yán)格的測(cè)試是很正常的,那么出現(xiàn)問(wèn)題時(shí),就傻了??蛻?hù)是絕對(duì)不可能把出現(xiàn)問(wèn)題的方式給你完整的Repro的,一旦出現(xiàn)問(wèn)題,客戶(hù)會(huì)干的就是急眼,那接下來(lái)怎么辦?你就老老實(shí)實(shí)加班,老老實(shí)實(shí)的去猜去找問(wèn)題。
當(dāng)“try { … } catch(Exception anyException) { // 忽略異常 }”這樣的代碼充斥整個(gè)軟件系統(tǒng)時(shí),你就可以想象有多可怕,這個(gè)軟件能穩(wěn)定就怪了!
我曾經(jīng)在一個(gè)熱電公司,在半夜12點(diǎn),好幾個(gè)廠(chǎng)家的人聚在熱電,等待0點(diǎn)時(shí)刻數(shù)據(jù)采集,一旦數(shù)據(jù)少了,那么你就麻煩了。
我到現(xiàn)場(chǎng)之后,發(fā)現(xiàn)有很多開(kāi)發(fā)人員拿個(gè)本子,需要不停的看數(shù)據(jù)庫(kù),或者需要將軟件Debug打開(kāi),然后看看每一個(gè)時(shí)刻數(shù)據(jù)是否正常上來(lái)。這真是讓我喜出望外,因?yàn)楦?jìng)爭(zhēng)對(duì)手太弱了!!你們的軟件在此之前,難道對(duì)它7×24小時(shí)不間斷穩(wěn)定運(yùn)行那么沒(méi)有信心?
我們的軟件,我通過(guò)系統(tǒng)運(yùn)行過(guò)程的消息和日志,我就可以看出所有的東西,如下,消息窗口能夠展示系統(tǒng)后臺(tái)運(yùn)行的詳細(xì)過(guò)程。
此外,還有非常完整的日志,任何異常我都可以找到,并想辦法重現(xiàn)。
關(guān)于異常處理,另一面,就是菜鳥(niǎo)程序員在寫(xiě)代碼或者實(shí)現(xiàn)功能的時(shí)候,一般不考慮反面情況,一個(gè)軟件按照正常步驟可能能走通,但是一旦出點(diǎn)意外,就麻煩了。以下就是一個(gè)典型的代碼。
If(*****)
{
// ….do something…
}
這個(gè)代碼處理了if,但是萬(wàn)一出現(xiàn)else的情況呢?可想而知,系統(tǒng)將會(huì)出現(xiàn)無(wú)法意料的情況。
因此,這也是菜鳥(niǎo)程序員做的系統(tǒng)一般都非常不穩(wěn)定的一個(gè)根源,做程序一般只考慮功能實(shí)現(xiàn),忽略掉意外情況。
5優(yōu)雅與美觀
菜鳥(niǎo)程序員并不是缺乏審美,缺乏的是優(yōu)雅和美觀的抽象能力。
一個(gè)好的系統(tǒng),要做到兩點(diǎn),好用,好看!因此,這絕對(duì)不是單單功能上的堆砌。
很多國(guó)產(chǎn)軟件都深深的烙上了技術(shù)人員設(shè)計(jì)的印子,一看就知道這個(gè)軟件是出自一個(gè)技術(shù)人員的設(shè)計(jì)和實(shí)現(xiàn),一看就知道這個(gè)軟件的實(shí)現(xiàn)過(guò)程,這簡(jiǎn)直是慘不忍睹,不過(guò),各位看官,這就是你們的機(jī)遇啊。
菜鳥(niǎo)技術(shù)人員開(kāi)發(fā)功能的時(shí)候,一般都是從實(shí)現(xiàn)的角度進(jìn)行堆砌,怎么簡(jiǎn)單,怎么來(lái)。
不會(huì)去仔細(xì)分析,用戶(hù)在操作這個(gè)功能的時(shí)候,到底還會(huì)做什么事情,各個(gè)功能之間怎么進(jìn)行有機(jī)結(jié)合來(lái)完整的進(jìn)行結(jié)合。
相反,一些技術(shù)比較好的程序員往往都要直面客戶(hù),經(jīng)常被客戶(hù)罵,罵著罵著,也有點(diǎn)覺(jué)悟了。
當(dāng)然,也有一些程序員因?yàn)樽宰?,直接不干了。不過(guò),我覺(jué)得厲害的程序員基本都有用戶(hù)意識(shí),也希望自己的軟件能有很好的評(píng)價(jià),甚至能夠影響社會(huì)。
好用,好看,是軟件能夠被普遍采用的前提,因此,我們需要學(xué)會(huì)抽象優(yōu)雅。
6 基礎(chǔ)扎實(shí)
技術(shù)知識(shí)決定一個(gè)人能做的技術(shù)的層次?;A(chǔ)的知識(shí)有計(jì)算機(jī)組成原理、計(jì)算機(jī)操作系統(tǒng)、網(wǎng)絡(luò)原理、數(shù)據(jù)庫(kù)原理、計(jì)算機(jī)圖形學(xué)、編譯原理、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、人工智能等等很高深的理論知識(shí)。
在這些基礎(chǔ)知識(shí)之上,就是軟件開(kāi)發(fā)語(yǔ)言、類(lèi)庫(kù)、框架,面向過(guò)程、面向?qū)ο?、面向服?wù)等編程思想,架構(gòu)思想等等。
這些知識(shí)不一定會(huì)影響你現(xiàn)在的工作,但一定會(huì)影響到你的格局,那格局肯定也會(huì)影響到你自身的發(fā)展。
我碰到過(guò)有些理論很差的人,但技術(shù)在公司內(nèi)也是有些影響力的,因此,他們對(duì)技術(shù)原理就很不屑,甚至為自己不懂太多理論而擅長(zhǎng)實(shí)戰(zhàn)而沾沾自喜。
這些人會(huì)對(duì)那些懂理論,但動(dòng)手能力一般的人顯示出由內(nèi)而外的鄙夷,但是他們卻不知道那些既有基礎(chǔ)知識(shí),也有動(dòng)手能力的高手做出的東西是怎樣的。
就像我本人,實(shí)在是想不通,那些技術(shù)天才是如何開(kāi)發(fā)出一個(gè)數(shù)據(jù)庫(kù)、操作系統(tǒng)這樣的軟件。因此,如果你已經(jīng)發(fā)覺(jué)自己基礎(chǔ)不夠扎實(shí),那么還是有空就修煉修煉自己的內(nèi)功吧!
7文檔與表達(dá)能力
很多技術(shù)人員都寫(xiě)不了文檔。不過(guò),坦白的將,如果要獲得更好的報(bào)酬,文檔時(shí)絕對(duì)關(guān)鍵的因素。沒(méi)有文檔就沒(méi)有溝通,就沒(méi)有交易。
有人提了,“文檔是第一生產(chǎn)力”,我非常之贊同。文檔的類(lèi)型有很多,針對(duì)的對(duì)象也各不相同。不同的人,對(duì)文檔的理解能力也是完全不一樣的。
因此,你的文檔必須適應(yīng)于你的目標(biāo)。這個(gè)對(duì)于搞技術(shù)的人太難,他覺(jué)得還不如寫(xiě)代碼來(lái)得快。
表達(dá)能力決定了你所做的技術(shù)的影響范圍,決定了你的影響力,決定你的威信。
因此,也絕對(duì)的影響到你的報(bào)酬。因?yàn)檫@個(gè)能力而影響到你的報(bào)酬,你可能會(huì)心里覺(jué)得虧,但沒(méi)有辦法,這是硬傷,可不僅僅是我只是不擅長(zhǎng)寫(xiě)文檔,但我擅長(zhǎng)與搞技術(shù)。
如果哪一天,有一個(gè)擅長(zhǎng)忽悠,技術(shù)不如你的人,爬到你的上面并且領(lǐng)導(dǎo)你,那也是該的。千萬(wàn)不要去怪別人擅長(zhǎng)忽悠,而是要想辦法來(lái)彌補(bǔ)自己的硬傷。
8積極的心態(tài)
技術(shù)好的人,一般人都?jí)牟坏侥娜ァ:芎?jiǎn)單的一句話(huà),想要技術(shù)好,就要投入時(shí)間,有時(shí)間投入到技術(shù),那么就沒(méi)有時(shí)間投入到其它方面,特別是消極的坑蒙拐騙,因此,技術(shù)人員一般也都比較靠譜。
積極的心態(tài),不僅僅對(duì)于技術(shù),對(duì)于生活也是如此。一旦有了積極的心態(tài),那么菜鳥(niǎo)到高手的過(guò)程,僅僅是時(shí)間的問(wèn)題!
9覺(jué)得軟件不值錢(qián)
我特別煩的就是做一個(gè)軟件和一些水平不怎么高的技術(shù)人員談費(fèi)用的問(wèn)題。只要是想要做好,每一個(gè)哪一個(gè)事情是簡(jiǎn)單的。
凡是靠良心和能力謀生的,都是依靠自身的實(shí)力來(lái)獲取合適的報(bào)酬,我們每一個(gè)人都需要有收入。我也一樣的,況且,我還是在技術(shù)人員骨子里面認(rèn)為的那種見(jiàn)錢(qián)眼開(kāi)的“老板”,因此,這就很頭大。
不過(guò),好在,和我見(jiàn)面的人,都能看出來(lái),我也是做技術(shù)的。但是,這依然不能改變一些技術(shù)人員認(rèn)為軟件不值錢(qián)的想法,他們的理論是,這個(gè)功能放我身上,我一天就搞定了,憑什么你要那么多錢(qián)?
可是,咱們的做法一樣嗎?一個(gè)功能的實(shí)現(xiàn)方法有很多種,就像我說(shuō)的數(shù)據(jù)采集。如果你的數(shù)據(jù)采集實(shí)現(xiàn)沒(méi)有以下“1、2、3”這些輔助的功能,后臺(tái)的實(shí)現(xiàn)要簡(jiǎn)單的多。
7.jpg(66.97 KB, 下載次數(shù): 0)
下載附件 保存到相冊(cè)
昨天15:19 上傳
如果沒(méi)有指令重試,沒(méi)有多線(xiàn)程,沒(méi)有異步刷新,沒(méi)有7×24小時(shí)穩(wěn)定運(yùn)行,沒(méi)有采集數(shù)據(jù)丟失,沒(méi)有指令優(yōu)先級(jí)排列,沒(méi)有多線(xiàn)程和分布式集群采集,沒(méi)有支持1天1GB數(shù)據(jù)采集等等這些非功能性的需求。
那么這個(gè)軟件會(huì)更簡(jiǎn)單,我也見(jiàn)過(guò)有人用一個(gè)控制臺(tái),用一個(gè)單線(xiàn)程,顯示的信息都是完全看不懂的二進(jìn)制數(shù)字,運(yùn)行一會(huì)CPU就100%,內(nèi)存不斷升高的采集軟件。這個(gè)也算得上是采集軟件。
不過(guò),菜鳥(niǎo)程序員一般都會(huì)按照自己的做事方法來(lái)對(duì)軟件進(jìn)行評(píng)估,如果沒(méi)有好的經(jīng)驗(yàn),一般都會(huì)認(rèn)為軟件很不值錢(qián)。
事實(shí)上,做好看的、好用的軟件非常難,做好看、好用、還要好維護(hù)以擴(kuò)展的軟件那就是難上加難。
還有一個(gè)幾年前碰到的軟件定制,有一個(gè)人直接說(shuō)了,這是簡(jiǎn)單的CRUD,一個(gè)頁(yè)面200元,你算算這個(gè)系統(tǒng)值多少吧,我現(xiàn)在都害怕跟這些人打交道,也害怕做業(yè)務(wù)軟件定制了。
曾經(jīng)也見(jiàn)到一個(gè)數(shù)據(jù)采集軟件,軟件負(fù)責(zé)人說(shuō),他們這個(gè)軟件一個(gè)月3個(gè)人就實(shí)現(xiàn)了,而我告訴他我們需要更多人手,更多時(shí)間,然后他非常不屑。
最后,我就想看看他們的軟件,他打開(kāi)讓我看看,我在一個(gè)TextBox里面沒(méi)有輸入信息就點(diǎn)擊一個(gè)按鈕,然后系統(tǒng)竟然直接崩潰,拋出異常。
看完我就笑著說(shuō)了,我們不做這種通過(guò)拖拉控件直接數(shù)據(jù)綁定的軟件,我們需要做出一個(gè)好用且好看的軟件,能夠容易追溯、容易跟蹤狀態(tài)且支持多線(xiàn)程和分布式集群部署的軟件。
軟件是一個(gè)充滿(mǎn)智慧結(jié)晶的勞動(dòng)成果,如果說(shuō)的高尚一點(diǎn),有些軟件時(shí)無(wú)價(jià)的,當(dāng)然我做的軟件不是這樣的層次!
10 工資
這點(diǎn)顯而易見(jiàn),工資是價(jià)值的體現(xiàn),成為高手程序員就意味著你能為自己爭(zhēng)取高報(bào)酬。所以小伙伴們,加油吧!(下圖,對(duì)號(hào)入座)
-
軟件
+關(guān)注
關(guān)注
69文章
5022瀏覽量
88117 -
程序員
+關(guān)注
關(guān)注
4文章
953瀏覽量
29860
原文標(biāo)題:程序員高手和菜鳥(niǎo)的區(qū)別是什么?
文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
阻燃網(wǎng)線(xiàn)與普通網(wǎng)線(xiàn)區(qū)別體現(xiàn)在哪些方面
PGA2311P和PGA2311PA主要區(qū)別體現(xiàn)在哪里?一般情況運(yùn)用下能通用嗎?
GPU服務(wù)器在AI訓(xùn)練中的優(yōu)勢(shì)具體體現(xiàn)在哪些方面?
cat6utp和cat6的區(qū)別體現(xiàn)在哪些方面
北美運(yùn)營(yíng)商PTCRB認(rèn)證的優(yōu)勢(shì)主要體現(xiàn)在哪些方面?
![北美運(yùn)營(yíng)商PTCRB認(rèn)證的優(yōu)勢(shì)主要<b class='flag-5'>體現(xiàn)在哪些方面</b>?](https://file1.elecfans.com/web2/M00/04/E2/wKgaombIVACAT-VvAAARjroLfaU915.png)
溫振變送器的功能體現(xiàn)在哪些方面
雨量監(jiān)測(cè)設(shè)備的優(yōu)勢(shì)體現(xiàn)在哪些方面
網(wǎng)絡(luò)配線(xiàn)架的優(yōu)勢(shì)體現(xiàn)在哪些方面-科蘭
配線(xiàn)架和理線(xiàn)架的區(qū)別體現(xiàn)在哪些方面
鋰電池分容測(cè)試柜的優(yōu)點(diǎn)體現(xiàn)在哪方面
![鋰電池分容測(cè)試柜的優(yōu)點(diǎn)<b class='flag-5'>體現(xiàn)在哪方面</b>](https://file1.elecfans.com/web2/M00/EF/AF/wKgZomZw4guAPSxdAABkYhAoGW4739.png)
網(wǎng)線(xiàn)屏蔽和非屏蔽的區(qū)別主要體現(xiàn)在哪些方面
hdmi高清線(xiàn)的作用體現(xiàn)在哪些方面
柔性制造系統(tǒng)的柔性體現(xiàn)在哪些方面
cat6網(wǎng)絡(luò)電纜特點(diǎn)體現(xiàn)在哪些方面
小電容并聯(lián)的穩(wěn)定性體現(xiàn)在哪些方面
![小電容并聯(lián)的穩(wěn)定性<b class='flag-5'>體現(xiàn)在哪些方面</b>](https://file1.elecfans.com/web2/M00/C1/82/wKgaomXW5maAeH4lAAN4ROMk0cc254.jpg)
評(píng)論