?
鄰居的一位同學(xué)快畢業(yè)了,簽約到一家從事物聯(lián)網(wǎng)的公司,計(jì)劃是從事 stm32 芯片相關(guān)產(chǎn)品的開發(fā)。他找到我問:“駱駝,我需不需要學(xué)習(xí)一下匯編?”西安一所知名大學(xué)的畢業(yè)生來問我這個(gè)問題,我有點(diǎn)不知道如何回答。他在大學(xué)期間老師應(yīng)該對職業(yè)規(guī)劃作出了明確的指導(dǎo)才對,如今來問我這個(gè)問題是不是有點(diǎn)晚?話說西安地處內(nèi)陸,人們的思想有些保守,發(fā)展有些滯后,但是如今互聯(lián)網(wǎng)如此發(fā)達(dá),很多問題其實(shí)他可以通過網(wǎng)絡(luò)了解。
2013 年時(shí),我到西安一家電力企業(yè)工作,部門經(jīng)理向我提了一個(gè)要求 --- 指導(dǎo)硬件部門的同事學(xué)習(xí)一下 C 語言。我的頂頭上司,也就我的這個(gè)部門經(jīng)理,工作十幾年了,一直使用匯編語言編程,而且竟然完成了公司復(fù)雜的開發(fā)任務(wù)。另一位在單位工作 5 年多的女同事使用的也是匯編,新招的一個(gè)研究生只是負(fù)責(zé)硬件的設(shè)計(jì)。另外兩名同事也是剛畢業(yè)的,我成為單位唯一有 C 語言編程基礎(chǔ)的人。
說起我從匯編向 C 語言的轉(zhuǎn)型,還有一個(gè)小插曲。我畢業(yè)后做的第一個(gè)項(xiàng)目也是以匯編語言作為工具開始的,但是在項(xiàng)目進(jìn)行到三分之一時(shí)換了領(lǐng)導(dǎo),新任的領(lǐng)導(dǎo)要求我們必須使用 C 作為開發(fā)工具,我只好被迫轉(zhuǎn)型。從此以后,我再也沒有使用匯編完成過一個(gè)項(xiàng)目,時(shí)隔多年除了一些基礎(chǔ)概念,匯編語言也基本忘光了。后來的工作中我再也沒有接觸過匯編。目前看來,隨著編程語言的發(fā)展,人們對高級(jí)語言的接受程度越來越高,未來貌似也不會(huì)有機(jī)會(huì)使用匯編了。現(xiàn)在我在做 liunx 項(xiàng)目使用的是 C++,但是我當(dāng)年可是花費(fèi)了
很多時(shí)間去學(xué)習(xí)匯編的,真是讓人懊惱奧不已。
說起那次被迫轉(zhuǎn)向 C 語言,其實(shí)我當(dāng)時(shí)對這件事情非常排斥。但是剛到新單位工作,領(lǐng)導(dǎo)又如此重視這件事情,實(shí)在不好意思拒絕。這個(gè)項(xiàng)目結(jié)束以后,又過了半年單位就徹底放棄了匯編。我因?yàn)槿蝿?wù)完成的出色還受到了單位的獎(jiǎng)勵(lì)。
?
現(xiàn)在工作的單位還有幾款產(chǎn)品是使用匯編開發(fā)的。有一天在外地工作的一位銷售經(jīng)理回西安了,滿口稱贊那款產(chǎn)品。
“看看人家匯編代碼,寫的多規(guī)整,沒有一行多余的……”
一個(gè)現(xiàn)象的出現(xiàn)總是有很多背景因素。當(dāng)年之所以選擇匯編有很大歷史緣故,一是單片機(jī)資源問題,二是 C 語言開發(fā)人員的儲(chǔ)備問題。至于“沒有一行多余的”,只能說這位同事不懂匯編,甚至可能不懂程序。程序?yàn)榱私芽倳?huì)有一些冗余的代碼。
而且編程的問題不僅僅體現(xiàn)在語言上,并且語言所占比例非常少,而且隨著工作的時(shí)間變長,會(huì)發(fā)現(xiàn)語言所占的比例越來越少。最后就會(huì)出現(xiàn)根本不是問題。如果您去面試一份工作機(jī)會(huì),面試題中考察語言成份的問題越多,說明這份工作越?jīng)]有技術(shù)含量。
一個(gè)程序員價(jià)值應(yīng)該體現(xiàn)在解決問題的能力上。對某一方面知識(shí)掌握只是其解決問題能力的一小部分,這是一個(gè)綜合的問題。而且有一個(gè)很奇怪的現(xiàn)象,就是經(jīng)常使用的知識(shí)也只占我們所學(xué)的專業(yè)知識(shí)的一部分。但是其它知識(shí)即使不用,也不能缺失。在平時(shí)可能體現(xiàn)不出任何問題,但是在關(guān)鍵的時(shí)候就有了明顯的區(qū)別,所以程序員是一個(gè)綜合知識(shí)結(jié)構(gòu)體。
第一,首先必須擁有良好的專業(yè)背景知識(shí)。對計(jì)算機(jī)原理、計(jì)算機(jī)體系機(jī)構(gòu)有一個(gè)較好的了解。知道計(jì)算機(jī)為什么能自動(dòng)的處理、解決問題,其優(yōu)越性和局限性是什么。這個(gè)問題在本科或者專科階段就應(yīng)該非常明確了,但是在學(xué)校的課程比較簡單,所以只能大概了解一下了。
不過要有一定的感覺,比如明白申明得一個(gè)變量與物理內(nèi)存的之間的關(guān)系。雖然這一點(diǎn)看似非常簡單,但是也有工作很長時(shí)間的工程師不是太明白。
第二,如果從事單片機(jī)或嵌入式的程序開發(fā),對硬件必須有一定的了解。程序是在硬件中運(yùn)行的,如果程序運(yùn)行結(jié)果與預(yù)計(jì)的有區(qū)別,必須作出一個(gè)準(zhǔn)確判斷,到底是硬件問題還是軟件問題?并且有一定解決硬件問題的能力。這就要求程序員必須對元器件、數(shù)字電路、模擬電路有一定掌握。
?
第三,比較深刻理解了《數(shù)據(jù)結(jié)構(gòu)》,有可能工作很長時(shí)間也沒有使用過二叉樹、鏈表、隊(duì)列等等。但是《數(shù)據(jù)結(jié)構(gòu)》是以計(jì)算機(jī)為工具解決問題總體介紹,即使我們不是明確使用了其中內(nèi)容,但是書中的概念和解決問題方法總是影響我們的編程思路和解決問題的方法。
第四,了解一種編程語言,并且能完成日常性工作。之所以是“了解一種語言”,是因?yàn)椤罢莆铡币环N語言牽扯的問題太多。合格的程序員需要一個(gè)養(yǎng)成的過程,需要一個(gè)不短時(shí)間的工作過程,這個(gè)過程時(shí)間遠(yuǎn)比學(xué)習(xí)的時(shí)間長。也就是只有在工作中才能產(chǎn)生合格的程序員。但是也沒有什么要特別擔(dān)心的,學(xué)習(xí)也可以產(chǎn)生能工作的程序員。
第五,具有良好的編程風(fēng)格,一個(gè)程序員風(fēng)格到底怎么樣,不是太容易界定。但是良好的編程風(fēng)格有明確的體現(xiàn)。程序的容錯(cuò)性、擴(kuò)展性、一致性、復(fù)用性都必須有非常好體現(xiàn)。這個(gè)更是不容易通過短時(shí)間的學(xué)習(xí)獲得。日雕月磨通過一段不短時(shí)間的學(xué)習(xí),一部分人可以是做到的。
當(dāng)然還有其他方面的要求,比如文檔處理能力,行業(yè)應(yīng)用知識(shí)等等。這個(gè)是列舉不完的。程序員的群體非常特殊,水平高程序員可以完成一件普通的工作,水平低程序員也同樣可以完成一件普通的工作。只是使用時(shí)間、資源不同,以及完成質(zhì)量不太一樣。但是如果目標(biāo)是為了完成工作任務(wù),其實(shí)有可能都是可以的。這就給人一個(gè)非常不好的錯(cuò)覺,就是程序員的工作技術(shù)含量不高。很多企業(yè)不愿意花更多的錢來聘請技術(shù)水平更好的程序員??梢哉f這種觀點(diǎn)非常不靠譜,或者管理者沒有沒有仔細(xì)核算成本。一個(gè)項(xiàng)目三個(gè)月完成、四個(gè)月完成、六個(gè)月完成,企業(yè)不是僅僅多付出一點(diǎn)點(diǎn)工資。而是牽扯到產(chǎn)品上市延遲、辦公場地、行政管理等費(fèi)用支出,如果與涉及到與其他部門協(xié)調(diào)問題,更是麻煩。如果產(chǎn)品因?yàn)槌绦蚩煽啃缘偷膯栴},在后期維護(hù)上成本支出更大。這些費(fèi)用應(yīng)該是程序工資 10 倍甚至更多。
其實(shí)我不太想告訴鄰居到底是“學(xué)”或者“不學(xué)”匯編語言。一個(gè)合格程序員的也不僅僅是多學(xué)一兩門語言的問題。而且泛泛學(xué)習(xí)某種語言也不是太難的事情,有一句比較刻薄的話 ---“如果你已經(jīng)會(huì)使用一種語言編程。另外一種也就半個(gè)小時(shí)至兩天就可以上手。否則就是 ...”我懷疑這句話是一位非常自信的程序員提出的,但是確實(shí)有參考性。
與非網(wǎng)原創(chuàng)內(nèi)容,不經(jīng)允許,不得轉(zhuǎn)載。