> 實用技巧 > 如何成為一名真正的程序員?

如何成為一名真正的程序員?

2018-04-28 07:13  來源:www.  作者:AG8十萬個為什么  瀏覽:

     
     本人十幾歲開始寫程序,近十幾年來都在教人寫程序,還經營著一個可能隨時倒閉的軟件公司,主要的開發語言是C#。
     首先,我不認為《算法導論》是所有程序員必須一開始就掌握和精通的內容。
     我無意否認某些核心課程的重要性,但是我們必須看到——很多程序員并不懂程序員的三大浪漫——編譯原理,圖形學,操作系統,但這并不妨礙他們在日常工作中創造出各種有價值的軟件。
     之所以這么講,原因是:
     行業的門檻因技術的不斷進步而降低 不是所有的程序員都需要系統而全面地學習才能勝任工作。
     這些年來,編程語言、開發工具的迅速發展,我們可以用C#、Java、Objective C這樣的語言完成大多數開發任務,用著Visual Studio這樣爽的開發工具, 這并不是因為廠商大發慈悲要拯救程序員于水火之中,而是微軟這樣的廠商在取悅我們的老板和客戶——技術發展的目的是降低軟件開發的用人標準,進而降低軟件行業的人力資源成本,更快、更好、更便宜地滿足用戶的需求。
     從公司的角度來看,如果要求所有開發人員都是基礎扎實、技能全面的,那么用人成本一定很高,我完全相信經過一定訓練和挑選的鳥畢業生在經理的正確管理下可以很好的開展工作,盡管他可能不懂算法和數據結構,C和C++基本不會,這并不妨礙他為公司創造價值,隨著他開發經驗的增長,在時間允許的情況下再去補充一些基礎知識也是完全可以的。
     幾年以前有個“學生”,打引號是因為我并沒有真正教過他,中專畢業,專業是鉗工,曾經給我展示過胳膊上的長長的疤痕,說是被車床傷到的。
     他要求跟我學的時候屬于入門階段,最開始學習的并不是什么三大浪漫,而是C#. 在掌握了一門編程語言后,很快自學了其他語言,仔細一看是一本Java入門書,聊起來才知道這妹子是護校畢業,但是對計算機有興趣,就想在大排檔當服務員攢學費去鳥。她還拿出一沓油跡斑斑的信簽紙,上面全是她寫的程序,她說每次去網吧都要裝開發環境,太麻煩了,所以干脆在紙上寫。哥看不下去了,給一開軟件公司的朋友打電話強烈推薦這妹子去實習,朋友一聽情況表示拒絕,我說你只要給他管工作餐就好,不用發工資。1個月后這妹子進入試用期,2個月后轉正,后來在朋友公司做了近兩年,據朋友說開發能力很強,再后來,我就不知道了。
     作為教師,感動我的總是這這樣的“學生”,而不是那些坐在教室里花著父母的錢虛度光陰的學生。
     可能有人會覺得這樣的程序員是“野路子”,不登大雅之堂,但這一點都不妨礙他們兢兢業業的工作,為公司創造價值并且改變了自己的生活。
     如果這些人要系統而全面的學習計算機專業的基礎課程,得需要多少時間和金錢成本?他們所處的環境是否允許他們這樣做? 他們不這樣做,是不是就成不了“真正的程序員”?
     在我的意識里——能夠根據客戶的需求,選擇恰當的技術方案開展開發工作,在合理的時間內完成開發任務并達到質量要求的人,就是真正的程序員。
     要成為這樣的程序員,其實沒那么難。
     在這個答案里,我想把程序員分為兩個層次:
     L1-能根據上級的指示,按照公司的要求和規范開展開發工作的,稱為程序員。
     L2-能根據客戶的需求,選擇恰當的技術方案,制定合理的工作計劃,獨自或帶領團隊完成開發工作并達到質量要求,稱為軟件工程師。
     我想題主可能想成為的是后者,而不是普通的編碼人員,在我接觸到的程序員中,其實很少有單純從事簡單編碼工作的,他們大多數都是干的軟件工程師的活。
     軟件工程師應該具備哪些能力呢?我們以前歸納過:
     1. 分析問題的能力
     2. 設計解決方案的能力
     3. 編碼實施的能力
     4. 排除故障的能力
     這四種能力如果要展開來講,要寫好長的,暫時就不寫了。
     開始回答——”如何成為“的問題。
     科學家追求的是知識,工程師追求的是能力。而能力是很難從書本上的來的,只能從實踐當中來。
     我注意到題主的問題中,提到看書靜不下心,看視頻又覺得太慢,可能從一個具體的項目開始更能激發學習興趣并且獲得成就感。
     先給第一種路徑建議吧——從C語言開始。
     之所以建議C語言,是因為C語言里沒有那么多現成的、強大的類庫,在不熟悉基本的語法、面向對象這些概念時C#其實比C語言難以理解,很難深入。學習C語言不僅限于對C語言語法的掌握,而是通過C語言的學習,建立程序設計的思維,比較深入地了解一些計算機系統的工作原理。
     在我的教學班級中,我的教學內容是這樣組織的,題主似乎也可以按照這種方式來學習:
      第一階段高級程序語言的基本概念,開發工具的使用, C語言的基本結構以及在VC中的一些差異,動手能力上達到能按照書本輸入一個程序,能編譯,能運行的結果即可。
      第二階段變量、指針、表達式、函數、分支、循環、簡單的輸入與輸出。
      第一階段和第二階段的時間往往很短。
      第三階段開始做第一個小程序,這個時候學生開始頭大,因為很多要用到的東西根本就沒給他們講過,即使網上查得到資料也未必都能用在項目里。學生被我帶進一個接一個的坑里,我從不在第一時間告訴他們答案,總要他們冥思苦想抓耳撓腮一個星期了,下周上課的時候才開始講解決的思路和方法。
      經過1個月左右的折磨,他們基本可以完成一個單機版的的超市收銀系統,完成比如輸入信息、修改輸入、價格查詢、匯總結賬這樣的功能。從知識層面上,結構體、指針、文件訪問這些基本都解決了,順帶著把簡單的查找、排序算法也學了。
     可以說這是學生最痛苦的階段,但是正是這個階段開始培養他們的自學能力,這個太重要了。但是效果也很明顯,到后期的時候,少數學生開始先于我提出解決方案了。
     然后接著折騰,先帶學生回顧做過的這個程序,看如何能做的更好,運行的更快,Review和重構。
     由于是純C完成的,程序總是看上去很混亂,修改、擴充也不是很方便,于是我們開始探索另一種編程思想——面向對象,C++上場,又是1-2個月,用C++重新寫這個程序,在這個過程中,要求他們自己實現String類,封裝數據結構和業務邏輯、數據訪問......
     到這里,一個學期結束了,第二學期要求學生把這個控制臺的黑窗口改成圖形用戶界面。MFC不準用,只準用一個叫做Easy-x的圖形庫,而且只準用其中的putpixel函數來繪制點,一輪新的折磨開始,從畫點、劃線、逐點寫漢字開始,繪制按鈕、繪制文本框、響應鼠標和鍵盤,并且要求他們開始設計和實現TextBox, Button,Image這些類.....,,順便把消息循環之類的機制也做了初步的了解和簡單的實現。
     到這時候,有的同學已經開始做出”高仿Windows"了,要不要太驚喜。
     到這里,我基本可以相信我的學生不會為C#和Java發憷了,更重要的是——他們具備了真正的程序員所必須具備的核心能力——自學能力、獨立解決問題的能力。
     整理自知乎
     大家如果對編程感興趣,想了解更多的編程知識,解決編程問題,咨詢編程學習,可以關注我們的微信公眾號:程序員互動聯盟,這里有java高手、C++/C高手、windows/Linux高手等你來。
     

聲明:本站資源部分來自互聯網,版權歸原作者所有。如有侵犯您的權益 請聯系我們,本站將在第一時間刪除。站內網友所發表所有評論不代表本站立場。
CopyRight © 2011-2013 www. All Rights Reserved. 蜀ICP備11015029號
網站地圖 |