什么是程序員

jopen 12年前發布 | 4K 次閱讀 模擬器

    對于前幾天的一篇博文《好的程序員應該熟悉的幾門編程語言》,有網友質疑我對程序員的定義,很可能是感覺我對程序員的定義超出了其想象,但事實上程序員的定義應該遠遠超乎其想象。這里說明一下我對程序員的理解,也沒有絕對的對錯,不同意見的朋友可以討論,疏漏部分期待補充,歡迎交流溝通。

    在軟件工程上“軟件=程序+文檔”,有些把數據也列為軟件的一個要素,但我喜歡把數據當成程序的一部分,因為數據是用于記錄計算機指令執行狀態的。而且我 認為,文檔不僅僅是指軟件的使用說明書、需求、設計等文檔文件,還應該包括與軟件相關的所有文字,包括代碼注釋,甚至源代碼以及軟件界面中顯示的所有文 字。而進行程序開發的人員都是程序員。

    記得有一篇文章將程序員分為十幾個等級,分得比較細,每級之間可能就差一兩年的差距,甚至更接近,但有些階段或許需要一輩子去追求。我個人比較討厭記數 字,數字對于我來講多了與沒有是一樣的,所以我不喜歡分那么多級別,我認為程序員只需要分為三個級別:編碼人員、設計人員、架構人員。

    其中,編碼人員負責對已有設計的編碼實現。這個級別的程序員很可能就是很多人眼中的程序員,但其實這類的程序員準確地講應該叫Coder,與“程序員 (Programmer)”的概念是一個部分與全部的關系“,是一個具有包含關系的概念,而不是相等。該級別的程序員關注的是局部的實現以及代碼的優化, 不對系統的整體負責,這一級別的程序員超越該級別的一個條件就是達到編程實現時的語言的無關性——無論用什么語言,只要有了設計都可以對其進行實現,語言 只是編碼實施的工具而已。除了編碼實現時需要使用的主要編程語言,可能還需要其它語言進行輔助開發,比如開發工具的自動化腳本、測試的自動化腳本、構建的 自動化腳本、數據庫查詢語言等,所以才寫了《好的程序員言熟悉的幾門編程語言》。每一類語言都有它與其它類別的語言不同的編碼方法、編碼風格、實現思路、 優化方法等,每一類語言都熟悉一種,一旦用到某一類語言就可以很快上手進行編碼實現。這也是十幾年來的心得,記憶比較深刻的最早一次就是在上大學時的一次 微機原理實驗課上,老師讓編程來控制一個硬件電路板實現一個數字時鐘,因為課下在另外一個實現室學習過Keil的C語言編程,所以用了沒多長時間就使用C 語言實現完了,然后交給老師看,結果老師說必須使用匯編,然后又用剩下的時間用匯編重寫了一遍交了作業。雖然是一次實驗課,但在工作中也經常會遇到類似的 情況,從開始用MCS-51的匯編、C語言編程,后來用到CPLD、FPGA開始用VHDL編程,又感覺VHDL語言不夠簡潔,又改用Verilog HDL,后來學C++、VB,腳本學了shell跟python,工作中遇到舊代碼是用perl寫的,然后就拿本perl的書查著語法把舊代碼給改了,做 界面又用C#,在開發Oracle的應用程序時由于C++的庫收費,然后就又選擇Java實現,做WEB時用到Flash,又開始用Action Script做拓撲圖,后來公司要開發iPhone應用,又學習Objective C等等。通過一種種新語言的學習,一路過來并沒有感覺學習一門新的語言要花太多時間,一旦把一門語言掌握得比較熟,理解比較深,特別是C++,再學習其它 語言非常快,而語法只需要把書翻一下就可以了,無非就是一些變量定義、流程控制、函數定義、對象定義、API,每種語言大同小異。通過多種語言的學習,最 終達到一定的境界——語言無關。

    當然編程語言只是超越這個級別需要提升的其中一個方面,只是工具而己,并不是會了語言就是一個好的程序員了,這只是一個必要條件,還必須對微機原理、操作系統、數據結構、算法設計等有一定的理解,保證在根據設計進行實現時沒有障礙。

    然后,更高一級別就是設計人員,這一級別的程序員要能夠完成一個小型的軟件或系統的一個組件的設計,因為之前的修煉已經了解了常用的設計語言以及底層的基 本技術,再加上對設計模式、面向對象等設計方法的學習與理解,能夠完成一個完整的設計,并完成概要設計和詳細設計,因為文檔也是軟件開發一個很重要的部 分。 這一級別的程序員,不僅要對自己的產品理解較深,對常用的設計技術熟練掌握,還要對一些開源的組件、程序庫有一定的了解,能夠不再“造輪子”,把精力集中 在業務上,迅速完成小型的設計方案。

   最后,也是最高一級別就是架構人員,這一級別的程序員要能夠完成對整個系統的架構,不僅要對各種開發工具、方法、語言有足夠的理解,還要能夠對技術選型 做出正確的決策,對三方組件、相關開源工程的了解有足夠的廣度和使用經驗,能夠深入理解整個系統的上下文環境,并根據環境及業務需求做出正確的決策,完成 技術的選型、架構、接口定義,然后對系統進行解耦、切分,以將不同的模塊、組件交給更低級別的設計人員設計,從而完成整個系統的設計。這一級別的程序員不 僅要在技術上能夠做出正確決策,還要有足夠的經驗從各上方面對系統進行評估,平衡各方面因素,包括技術的與人文的,而且要能夠充分評估風險,保證設計切實 可行。

    總之,程序員不僅僅只是編碼員,好的程序員也不只是會使用一種語言寫出好程序就可以了;而且,好的程序也不單單中代碼運行效率高、穩定性好、性能好,因為 在軟件的整個生命周期中開發階段僅占其不到一半的工作量,程序好不好應用軟件的整個生命周期進行評價,這又引出另外一個話題,不再展開,有機會再討論。

來自:http://blog.csdn.net/nocky/article/details/8079177

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!