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