色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

這類程序員不容易被替代

工程師人生 ? 來源:工程師吳畏 ? 2019-08-15 15:59 ? 次閱讀

一個足球評論員可能并不會踢足球,卻并不妨礙在解說比賽時對某某球星的技藝評頭論足。同樣我也絕不敢以高明的程序員自居,而只是以類似足球評論員的角度來闡述我對程序員的理解。這樣,大家也許就不以我為鄙薄狂妄了。這是我必須首先聲明的。

什么是程序員

按照Wikipedia的定義,程序員又稱為計算機程序員(Computer Programmer)、開發者(Developer)、編碼者(Coder)或計算機工程師(Computer Engineer),和網絡上廣泛流傳的碼農或程序猿同義。我無意于也不能夠為程序員給出一個精確的定義,這里,只是利用程序員的語言做一個簡單描述。不是故弄玄虛,不過博取讀者諸君一笑。

程序員是徹頭徹尾的腦力工作者(Mind Worker),怠于思考者絕對不能成為好的程序員。有鑒于此,類Programmer天生的就應該是Thinker的子類。就程序員所使用的思考技巧而言,Thinker的具體內涵包括邏輯(Logic)和數學(Mathematics)。作為程序員,不一定非要達到邏輯或數學領域的專業水準,而是必須具有邏輯和數學的基本素養。邏輯用來推理,數學用來培養邏輯。另外,數學還有助于程序員訓練另外兩項必不可少的思考的技能,分析和抽象。下文還要展開討論。程序員的工具是編程語言,日常活動和主要工作包括設計(design)、建模(model)、編碼(code)、調試(debug)、重構(refactor)、溝通(communicate)、學習(learn)和思考(think)。

有關程序員有一個流傳甚廣的誤解,認為做程序員門檻低,沒什么技術含量。即使沒有學過計算機的課程如離散數學、數據結構、算法等,也可以寫程序。寫幾行程序當然算不得什么,但要修煉成有一定思想境界的一流程序員,卻殊非易事。這就如同會做飯的人很多,但真正的烹飪大師卻并不常見。所謂碼農者,乃是程序員的自我吐槽,豈足深信耶?所以,作為程序員要有持續進階的強烈的進取心,斷不可妄自菲薄,自怨自艾。

程序員的思維藝術

漫長的學生生涯中,我遇到的最好的數學老師是高中時的劉傳禹老師。他上課時講過這樣一段話,當面對一個數學問題,一要想的明白,二要算的準確,三要寫的清楚。直到今天,這句話對于我的程序員生涯也具有很強的現實意義,能不能想的明白其實是考量一個程序員成敗的至關重要的因素。金庸的武俠小說中有一個普遍的規律,那就是武功必定以內力為根基。

比如張君寶與昆侖三絕何足道在少林寺的那場經典之戰中,張君寶能夠“以少林拳中最平淡無奇的拳招,化解了最繁復的敵招”,始終不落下風,所恃者不過內力之渾厚爾。另外的著名戰例還包括少林寺小和尚虛竹VS.吐蕃國師鳩摩智以及聚賢莊蕭峰VS.玄難。內力達到登峰造極空前絕后的第一高手莫過于少林寺的掃地僧。也許風清揚是一個例外,好在我們討論的是一般規律,所以就顧不得他了。計算機編程所特有的思維(Thinking)就是程序員的”內力“,思維能力不濟,功能再強大的編程語言也無用武之地。所以,我在這里特別強調程序員的思維藝術。

程序員的思維有一個專業術語,叫做計算思維(Computational Thinking)。計算思維是按照計算機科學的基本概念和方法,用來理解需求、設計系統、實現編程、解決問題的思維方法。簡而言之,計算思維就是程序員或計算機科學家是如何思考的。當然,計算機科學的理論知識如數理邏輯、離散數學、數據結構、算法以及面向對象是計算思維的必要條件。計算思維有一系列的智力工具,不能一一盡述,僅列舉關鍵的幾項如下:

抽象思維(abstract thought)。給定一個問題,抽象就是去掉紛繁蕪雜的與計算無關的部分,用規約(Reduction)的方法還原到問題的本質。所謂本質即把原來的問題轉換為一個或幾個可以使用計算機描述并解決的問題,進一步講也就是轉換為在算法上可計算的(algorithmically computable)一個或幾個問題,更準確更理論化更上檔次的描述是轉換為邱奇-圖靈論題(TChurch-Turing thesis)可計算的可數個問題。圖靈機(Turing Machine)和λ演算(Lambda calculus)本身就是對可計算性(Computability)的漂亮的抽象,可以作為抽象思維的經典案例來揣摩學習。一般在實際工作中,常常需要把問題的實體對象根據需求表示為各種數據結構如樹、堆、棧等,而業務邏輯(Business Logic)過程表示為各種算法如排序和查找等。

表示(Presentation)是解決問題的第一步,也是關鍵的一步。在程序員的實踐中,我們都有很深的體會,一旦問題被準確的無歧義表示出來了,解決方案就烘云托月般地呈現出來了。這就是“數據即代碼,代碼即數據”的道理。抽象思維也廣泛用于數學家的工作。面對一個困難的問題,數學家們常從兩個方向開展研究。

一方面,從特殊情況入手,推廣到更一般的情況;另一方面,將一個一般問題具體化成幾種特殊情況。兩個方向的結果最終匯聚在一起,就找到了問題的答案。我想這可能是論語中“我叩其兩端而竭焉”的一個最好注解。而從特殊到一般就是不斷抽象的過程。我們用一個具體的例子加以說明,有一個著名的六度分隔理論(Six Degrees of Separation)講的是世界上任意兩個人都可以通過最多另外6個人相互認識,如果要驗證這一理論,怎么做呢?

我們可以借助一個圖(graph)來表示人與人之間的關系,每個人用圖中的一個節點表示,如果A和B認識,那么在代表他們的節點之間有一條邊連接。那么現在的問題就轉換為檢查這個圖的直徑是否大于6。考慮到世界人口眾多,且有生老病死,圖的規模必然超大,并且是動態的不斷變化的,算出它的直徑仍需要更多的簡化。這里就到此為止了。

邏輯推理(Reasoning)。邏輯推理對于程序員的重要性不言而喻。與其說邏輯推理用于程序新功能的開發,毋寧說更多的應用在程序調試修改BUG的過程中。程序調試有點類似于Sherlock Holmes偵破案件的過程。和Dr. Wason比較起來,Holmes的推理優于常人的地方有兩點:第一,在觀察現場或聽取來訪者敘述時,他能夠得到更多的的數據,尤其是一些別人容易忽略的關鍵的細節,這得益于他對犯罪領域知識的豐富積累,知道什么才是更重要的數據;第二,根據得到的數據,他能夠聯想到更多的可能的結論,這得益于他大量的案例儲存。有了這兩點,就能夠通過一環套一環的推理鏈逐漸縮小偵察范圍,最終認清犯罪事實。

程序調試也是如此,首先必須掌握程序實際的執行過程的細節。然后從問題出發,分別朝著產生的原因和導致的后果前后兩個方向推理。逐漸定位問題的范圍,最終找到問題的根源和解決的方案。我們比Sherlock Holmes幸運的是可以借助于調試工具來了解程序運行的過程,所以一個不能使用調試工具的程序真是令程序員感到無比沮喪,只能通過trace信息來跟蹤程序運行的過程。如果不知道程序運行的過程,推理就只能靠猜,那么修改BUG是非常危險的,很容易導致回退(Regression)的錯誤,因為這種情況下如同瞎子摸象,根本不知道自己在做什么。另外,Sherlock Holmes還多次表達過這樣的觀點,案子越是離奇,越容易解決,因為Singularity is almost invariable a clue。

對程序員來講,也不必擔心奇怪的問題,奇怪本身就是線索。關鍵看對程序運行細節的了解程度和邏輯推理的技術水平。

分析(Analysis)。分析是上文提到的數學家所用思維方式中從一般到若干特殊情況的過程。面對一個問題,如果一下子描述不清楚或者表示不出來,可以先找出滿足問題條件的幾種特殊情況。通過仔細檢查這幾種特殊情況,求同存異,找出他們共同的規律或模式,并對這些模式或規律加以驗證,就可以找出描述或表示問題的方法。這就是猜測加驗證(guess-and-verify)的過程。項目需求分析時常見的應用案例分析(Use Case Analysis)方法,就是用一個個具體的使用案例將模糊的項目需求生動的表達出來。

分解(Decomposing)。把一個大問題分解為幾個小問題,或者把一個復雜的過程分解為幾個子過程,當然有助于問題的解決。這也是程序員常用的手段,如算法策咯中的分而治之(Divide-and-Conquer)和合并排序就是這方面的例子。

遞歸(Recursion)。對于初學編程的人,遞歸可能是一個比較詭異的較難掌握的概念。但是一個程序員如果不懂遞歸,很難再稱之為程序員。因為很多稍微復雜的算法他都不可能理解,如回溯和動態規劃,甚至于樹的遍歷。遞歸常常可以用簡單的方法非常優雅的表達復雜的算法。

另外,有關計算思維的特有方法還有并行、異步/同步、模擬/近似、優化、分層、封裝、解耦等等。程序員的思維藝術即計算思維不是一天兩天短時間可以形成的,需要在實踐中慢慢琢磨,不斷提升,且永無止境。

程序員的技藝境界

程序員的思維藝術融化到到對編程語言的使用上,最終形成程序員的技藝。因此,編程語言之于程序員,就如同青龍偃月刀之于關羽,如意金箍棒之于孫悟空。離開了青龍偃月刀和如意金箍棒,關羽和孫悟空的戰斗力就無從談起。所以,脫離編程語言來討論程序員的技藝也無異于緣木求魚,自欺欺人。結合編程語言,程序員的技藝有四個境界,從低到高分別是:

初窺門徑。編程語言的初學者,如同小兒咿呀學語,也許可以寫一個類似于“Hello World”這樣的程序,但對語言的所有東西都是一知半解,不可能應用于實際的項目中。這是我們很容易就可以達到的級別。有些人初窺門徑之后,往里面看看,感覺不容易,就放棄了。

登堂入室。對編程語言所共有的基本表達方式有了一定的了解,如變量、賦值、循環、選擇等。可以用在一般的項目中,但是寫出來的代碼看起來滯澀笨拙,很難做出高質量的程序。這個時候,程序員很容易產生自滿的情緒,以為完全掌握了這種編程語言,編程也不過如此。如果陷入這種自滿情緒中不能自拔,就失去了進一步進階的機會。

熟能生巧。掌握了編程語言特有的功能,并能駕輕就熟,靈活使用。因此,寫出的代碼更加的精煉易懂,常常使用簡單的方法表達較為復雜的算法。這是一個成熟的程序員的水平,也是我們大多數程序員所能追求的目標。

妙不可言。 這是傳說中神龍見首不見尾大師級的境界。柏楊在《中國人史綱》描述李白的才華稱,李白寫詩時,對漢語的使用就像魔術師手中翻轉的手帕一樣,神鬼莫測。如同李白作詩一樣,我想這個境界的程序員對編程的各種精微之處了如指掌,能夠將編程語言的各種功能特性發揮到極致,且恰到好處。運用之妙,存乎一心。并且往往能夠別出機杼,奇思妙想,層出不窮。寫出的程序優雅、高效、別致。這是我們一般程序員可望不可即的。

程序員的精神素質

開放。在以往的工作中,曾經遇到過這樣的程序員,自以為掌握了某些核心的、關鍵的技術或技能,卻不愿意和別人共享,處心積慮的保護著他的“地盤”,擔心別人染指他的工作。也遇到過這樣的組織,幾個被信任的程序員把持著產品的所謂關鍵模塊,其他人莫想參與,即便再有才華,也只能扮演跑龍套的角色。這讓我想起《三國演義》中諸葛亮舌戰群儒的情節,在回答江東首席謀士張召的詰難時,諸葛亮將儒生分為君子之儒和小人之儒。這里不妨將這樣的程序員稱為“小”程序員吧。程序員的技藝根植于計算思維中,沒有所謂的不傳的絕招或秘笈。交流和實踐是程序員持續進階的必要且有效途徑。固步自封和抱殘守缺是程序員的大忌,完全是作繭自縛,毫無出息。

嚴謹縝密。在軟件開發中,任何事情在邏輯上原因和結果都是清晰明了的,不存在任何意義上的說不清道不明的神秘主義。程序員也是軟件工程師,討論問題時,當然應該使用工程師的語言,即用數據而不是猜測,用邏輯而不是臆斷,來表達自己觀點。有兩種情況可能造成自己表述時似是而非,模棱兩可:第一,數據掌握的不夠;第二,沒有“想的很明白”。例如,當我們討論性能(Performance)時,一定要用響應時間(Response Time)或吞吐量(Throughput)這樣有意義的參數,而不只是泛泛的講“這系統咋這么慢啊”,“計算機在干什么呢,等的時間太長了”,“簡直受不了這樣的程序了”。用戶可以這樣抱怨,而程序員則不可。同樣當我們講到系統開銷時,要用CPU占用率、內存這樣定量的參數。因此,一個腦筋清楚的程序員不會把這樣的話掛在嘴邊,“太神奇了,不知道為什么”,“弄不清楚是否可以解決這個問題”,“先這樣吧,以后再說”。一般地講,智能和非智能并沒有清晰的界限,因為我們并不知道如何嚴格地定義智能。然而,有了圖靈—邱奇論題,可計算的和不可計算的確實有明確定義的界限,也就是說,計算機可以解決的問題和不可以解決的問題是涇渭分明的,且是可以區分的。對于一個問題,能夠解決就是能夠解決,不能解決就是不能解決,不至于難以確定是否可以解決。所以,所有以上這些說法都不應該是程序員使用的語言,程序員就是要把一切都弄得清清楚楚,不放過任何潛在的問題。

完美主義。我不了解完美主義的真實意義,也不大拿得準完美主義是褒義詞和貶義詞。我用這個詞是為了強調程序員要堅持追求工作的完美。寫代碼時是要有潔癖,不允許有任何瑕疵,這樣的代碼才可能正確、易讀、高效、簡單、優雅。對一項任務,不僅僅是做完就算了,還應該仔細想想是否是否可以做的再好一點。對遇到的問題,即使看似解決了,也要從頭至尾完全弄明白,不能似是而非,不求甚解。

面對變化。變化意味著在新的征程上,要面對許多未知的東西,加之對安定狀態下的安樂窩(Comfortable Zone)的眷戀,讓我們有著或多或少的畏懼和抗拒。我認為這些都是人之常情,無可厚非。不幸的是,對程序員來說,變化就是家常便飯,如新的項目、新的應用領域、新的編程語言、新的技術架構、開發過程中新的問題、新的功能等,可以說不變的只有變化。其實,好逸惡勞是畏懼變化的根源。只有克服“懶”的思想,強迫走出自己的安樂窩,對新的事物充滿好奇心和求知欲,才能適應永遠的變化。

程序員的價值

有的公司把程序員看作和水電、機器一樣的冷冰冰資源,做項目計劃時,一些項目經理以為只要給項目分配足夠的資源(包括程序員、水電、機器)并加以正確的管控,項目就可以預期的順利完成。就好像做東北亂燉,只要把各種食材往鍋里一丟,開火等著就萬事大吉了。但是,程序員首先是有血有肉的人,絕不等同于毫無感情的機器。一個有雄心的公司要不斷提升產品的競爭力,什么是競爭力?就是把產品做的好到不能再好,天下第一,誰與爭鋒?產品向好的每一步都需要借助于程序員創造力和想象力,這才是程序員的價值之所在。沒有程序員愿意把最寶貴的創造力和想象力奉獻給只把自己看作資源的公司。所以,聰明的管理者會想方設法把程序員這種創造力和想象力激發出來。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序員
    +關注

    關注

    4

    文章

    953

    瀏覽量

    29821
收藏 人收藏

    評論

    相關推薦

    阿里云升級通義靈碼AI程序員,全面上線

    近日,阿里云宣布其備受矚目的通義靈碼AI程序員已正式全面上線,為開發者帶來更為強大和便捷的編程輔助工具。 此次上線的通義靈碼AI程序員,在功能上實現了全面升級。現在,它支持VS Code
    的頭像 發表于 01-09 11:16 ?193次閱讀

    TMS320C6000程序員指南

    電子發燒友網站提供《TMS320C6000程序員指南.pdf》資料免費下載
    發表于 12-24 17:19 ?0次下載
    TMS320C6000<b class='flag-5'>程序員</b>指南

    TSC2017的復位腳,整好在芯片的中央,不容易走線,請問是否可以將其直接短接到電源?

    TSC2017的復位腳,整好在芯片的中央,不容易走線,請問是否可以將其直接短接到電源,例如和旁邊的A0腳一起,直接短接在VCC上,謝謝。
    發表于 12-24 08:35

    TMS320C55x DSP CPU程序員參考補充

    電子發燒友網站提供《TMS320C55x DSP CPU程序員參考補充.pdf》資料免費下載
    發表于 12-21 11:36 ?0次下載
    TMS320C55x DSP CPU<b class='flag-5'>程序員</b>參考補充

    UCD3138A64/UCD3138128程序員手冊

    電子發燒友網站提供《UCD3138A64/UCD3138128程序員手冊.pdf》資料免費下載
    發表于 12-09 14:42 ?0次下載
    UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊

    機械革命發布CODE AI程序員

    近日,英特爾新質生產力技術生態大會在成都舉行,機械革命作為重要參展商帶來了多款明星產品引爆全場!其中更是在AI PC軟件生態產品發布分論壇上,Intel、智譜、機械革命三方聯合發布了專為程序員設計的CODE AI程序員本,成為本次大會的一大亮點。
    的頭像 發表于 11-30 10:34 ?441次閱讀

    Linux驅動程序程序員指南

    電子發燒友網站提供《Linux驅動程序程序員指南.pdf》資料免費下載
    發表于 11-22 15:53 ?0次下載
    Linux驅動<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員有積極影響也有挑戰。程序員需深化技能、拓寬知識應對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發表于 11-08 10:17 ?191次閱讀

    第五屆長沙·中國1024程序員節開幕

    場精彩活動將輪番上演。超200名海內外技術人員圍繞人工智能、數據技術等前沿領域展開深入研討。 本屆1024程序員節中機器人與具身智能、大模型等主題引發熱烈討論;程序員、開發者如何利用生成式AI提升開發效率重點關注。
    的頭像 發表于 10-25 15:42 ?215次閱讀

    程序員節視頻創意大賽,用串口屏贏取千元大獎

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節視頻創意大賽,用串口屏贏取千元大獎

    程序員節視頻創意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節日里,我們盛大開啟“程序員節視頻創意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節視頻創意盛宴,邀您共襄盛舉!

    適者生存,程序員最終會流向哪……

    程序員沒有永遠的護城河!!就目前的互聯網大環境來看,it行業已經是……
    的頭像 發表于 03-11 17:11 ?421次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會流向哪……

    薪資高、青春飯,是不是程序員=青樓?

    花期太短。技術迭代快,年齡大容易失業。 就這幾年的互聯網環境而言,不管是前端、Java、Android開發等等行業。已經感受到程序員不是太卷就是工作難找,薪資過低。以前高工現在拿著中低程序員薪資
    發表于 03-06 21:32

    瑞薩Flash程序員V3 發布說明

    電子發燒友網站提供《瑞薩Flash程序員V3 發布說明.pdf》資料免費下載
    發表于 02-19 09:37 ?1次下載
    瑞薩Flash<b class='flag-5'>程序員</b>V3 發布說明

    2024程序員的未來方向如何走?還看今朝

    這幾年的IT行業想必大家已經感受到了,Android、Java、前端等等程序員都經歷了大廠……
    的頭像 發表于 02-02 09:45 ?842次閱讀
    2024<b class='flag-5'>程序員</b>的未來方向如何走?還看今朝
    主站蜘蛛池模板: 国产精品悠悠久久人妻精品| xnxx18美女| 人妻精品久久无码专区| 久久视频精品3线视频在线观看| 国产精品你懂的在线播放| 耻辱の奴隷淑女中文字幕| 97视频免费观看| 0855福利| 3DNagoonimation动漫| 艳妇臀荡乳欲伦岳TXT下载| 亚洲视频黄| 伊人久久大香线蕉综合亚洲| 亚洲无碼网站观看| 伊人大香线蕉影院在线播放| 一日本道伊人久久综合影| 又色又爽又黄gif动态视频| 永久免费毛片| 最近中文字幕高清中文| 2017日日干| 99热久久精品国产一区二区| RUNAWAY韩国动漫免费官网版| MM131亚洲精品久久安然| 超碰国产人人做人人爽| 国产99对白在线播放| 国产乱对白精彩在线播放| 国产午夜免费视频片夜色| 黄色毛片a| 久久人妻少妇嫩草AV無碼| 毛片999| 欧美人妇无码精品久久| 日韩精品免费在线观看| 爽爽窝窝午夜精品一区二区| 亚洲 欧美 国产 综合不卡| 亚洲人成www在线播放| 在线亚洲黄色| FREE性丰满白嫩白嫩的HD| 高清国产免费观看视频在线| 国产午夜视频| 空姐厕所啪啪啪| 热九九99香蕉精品品| 手机国产视频福利|