卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

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

本人十幾歲開始寫程序,近十幾年來都在教人寫程序,還經(jīng)營著一個(gè)可能隨時(shí)倒閉的軟件公司,主要的開發(fā)語言是C#。首先,我不認(rèn)為《算法導(dǎo)論》是所有程序員必須一開始就掌握和精通的內(nèi)容。我無意否認(rèn)某些核心課程的重

本人十幾歲開始寫程序,近十幾年來都在教人寫程序,還經(jīng)營著一個(gè)可能隨時(shí)倒閉的軟件公司,主要的開發(fā)語言是C#。

首先,我不認(rèn)為《算法導(dǎo)論》是所有程序員必須一開始就掌握和精通的內(nèi)容。

我無意否認(rèn)某些核心課程的重要性,但是我們必須看到——很多程序員并不懂程序員的三大浪漫——編譯原理,圖形學(xué),操作系統(tǒng),但這并不妨礙他們在日常工作中創(chuàng)造出各種有價(jià)值的軟件。

之所以這么講,原因是:

行業(yè)的門檻因技術(shù)的不斷進(jìn)步而降低 不是所有的程序員都需要系統(tǒng)而全面地學(xué)習(xí)才能勝任工作。

這些年來,編程語言、開發(fā)工具的迅速發(fā)展,我們可以用C#、Java、Objective C這樣的語言完成大多數(shù)開發(fā)任務(wù)(而不是在紙上打孔或者用匯編),用著Visual Studio這樣爽的開發(fā)工具, 這并不是因?yàn)閺S商大發(fā)慈悲要拯救程序員于水火之中,而是微軟這樣的廠商在取悅我們的老板和客戶——技術(shù)發(fā)展的目的是降低軟件開發(fā)的用人標(biāo)準(zhǔn),進(jìn)而降低軟件行業(yè)的人力資源成本,更快、更好、更便宜地滿足用戶的需求。

從公司的角度來看,如果要求所有開發(fā)人員都是基礎(chǔ)扎實(shí)、技能全面的,那么用人成本一定很高,我完全相信經(jīng)過一定訓(xùn)練和挑選的***鳥畢業(yè)生在經(jīng)理的正確管理下可以很好的開展工作,盡管他可能不懂算法和數(shù)據(jù)結(jié)構(gòu),C和C++基本不會(huì),這并不妨礙他為公司創(chuàng)造價(jià)值,隨著他開發(fā)經(jīng)驗(yàn)的增長,在時(shí)間允許的情況下再去補(bǔ)充一些基礎(chǔ)知識(shí)也是完全可以的。

幾年以前有個(gè)學(xué)生”,打引號(hào)是因?yàn)槲也]有真正教過他,中專畢業(yè),專業(yè)是鉗工,曾經(jīng)給我展示過胳膊上的長長的疤痕,說是被車床傷到的。

他要求跟我學(xué)的時(shí)候?qū)儆谌腴T階段,最開始學(xué)習(xí)的并不是什么三大浪漫,而是C#. 在掌握了一門編程語言后,很快自學(xué)了其他語言(甚至Delphi), 在一年后找到了一個(gè)小公司做些基本的開發(fā)工作,然后涉足安全領(lǐng)域,開發(fā)了各種工具,現(xiàn)在在一家安全公司上班,提升很快,收入不菲。前不久跟我聊他配合網(wǎng)監(jiān)做一些取證和提審的工作經(jīng)歷。

2006年,我在武漢某個(gè)夜市的大排檔上,凌晨2點(diǎn)多,看到一個(gè)服務(wù)員在忙里偷閑看一本計(jì)算機(jī)書籍(掃一眼就知道),仔細(xì)一看是一本Java入門書,聊起來才知道這妹子是護(hù)校畢業(yè),但是對計(jì)算機(jī)有興趣,就想在大排檔當(dāng)服務(wù)員攢學(xué)費(fèi)去***鳥。她還拿出一沓油跡斑斑的信簽紙,上面全是她寫的程序,她說每次去網(wǎng)吧都要裝開發(fā)環(huán)境,太麻煩了,所以干脆在紙上寫。哥看不下去了,給一開軟件公司的朋友打電話強(qiáng)烈推薦這妹子去實(shí)習(xí),朋友一聽情況表示拒絕,我說你只要給他管工作餐就好,不用發(fā)工資。1個(gè)月后這妹子進(jìn)入試用期,2個(gè)月后轉(zhuǎn)正,后來在朋友公司做了近兩年,據(jù)朋友說開發(fā)能力很強(qiáng),再后來,我就不知道了。

作為教師,感動(dòng)我的總是這這樣的學(xué)生”,而不是那些坐在教室里花著父母的錢虛度光陰的學(xué)生。

可能有人會(huì)覺得這樣的程序員是野路子”,不登大雅之堂,但這一點(diǎn)都不妨礙他們兢兢業(yè)業(yè)的工作,為公司創(chuàng)造價(jià)值并且改變了自己的生活。

如果這些人要系統(tǒng)而全面的學(xué)習(xí)計(jì)算機(jī)專業(yè)的基礎(chǔ)課程,得需要多少時(shí)間和金錢成本?他們所處的環(huán)境是否允許他們這樣做? 他們不這樣做,是不是就成不了真正的程序員”?

在我的意識(shí)里——能夠根據(jù)客戶的需求(或者上級(jí)的要求),選擇恰當(dāng)?shù)募夹g(shù)方案(或者按照上級(jí)的指示)開展開發(fā)工作,在合理的時(shí)間內(nèi)完成開發(fā)任務(wù)并達(dá)到質(zhì)量要求的人,就是真正的程序員。

要成為這樣的程序員,其實(shí)沒那么難。

在這個(gè)答案里,我想把程序員分為兩個(gè)層次:

L1-能根據(jù)上級(jí)的指示,按照公司的要求和規(guī)范開展開發(fā)工作的,稱為程序員。

L2-能根據(jù)客戶的需求,選擇恰當(dāng)?shù)募夹g(shù)方案,制定合理的工作計(jì)劃,獨(dú)自或帶領(lǐng)團(tuán)隊(duì)完成開發(fā)工作并達(dá)到質(zhì)量要求,稱為軟件工程師。

我想題主可能想成為的是后者,而不是普通的編碼人員,在我接觸到的程序員中,其實(shí)很少有單純從事簡單編碼工作的,他們大多數(shù)都是干的軟件工程師的活。

軟件工程師應(yīng)該具備哪些能力呢?我們以前歸納過:

1. 分析問題的能力

2. 設(shè)計(jì)解決方案的能力

3. 編碼實(shí)施的能力

4. 排除故障的能力

這四種能力如果要展開來講,要寫好長的,暫時(shí)就不寫了。

開始回答——”如何成為的問題。

科學(xué)家追求的是知識(shí),工程師追求的是能力。而能力是很難從書本上的來的,只能從實(shí)踐當(dāng)中來。

我注意到題主的問題中,提到看書靜不下心,看視頻又覺得太慢,可能從一個(gè)具體的項(xiàng)目開始更能激發(fā)學(xué)習(xí)興趣并且獲得成就感。

先給第一種路徑建議吧——從C語言開始。

之所以建議C語言,是因?yàn)镃語言里沒有那么多現(xiàn)成的、強(qiáng)大的類庫,在不熟悉基本的語法、面向?qū)ο筮@些概念時(shí)C#其實(shí)比C語言難以理解,很難深入。學(xué)習(xí)C語言不僅限于對C語言語法的掌握,而是通過C語言的學(xué)習(xí),建立程序設(shè)計(jì)的思維,比較深入地了解一些計(jì)算機(jī)系統(tǒng)的工作原理。

在我的教學(xué)班級(jí)中,我的教學(xué)內(nèi)容是這樣組織的,題主似乎也可以按照這種方式來學(xué)習(xí):

第一階段高級(jí)程序語言的基本概念(編譯、庫、鏈接等),開發(fā)工具的使用(Visual Studio 2010), C語言的基本結(jié)構(gòu)以及在VC中的一些差異,動(dòng)手能力上達(dá)到能按照書本輸入一個(gè)程序,能編譯,能運(yùn)行的結(jié)果即可。

第二階段變量、指針、表達(dá)式、函數(shù)、分支、循環(huán)、簡單的輸入與輸出。

第一階段和第二階段的時(shí)間往往很短。

第三階段開始做第一個(gè)小程序(比如最簡單的超市收銀系統(tǒng)),這個(gè)時(shí)候?qū)W生開始頭大,因?yàn)楹芏嘁玫降臇|西根本就沒給他們講過,即使網(wǎng)上查得到資料也未必都能用在項(xiàng)目里。學(xué)生被我?guī)нM(jìn)一個(gè)接一個(gè)的坑里,我從不在第一時(shí)間告訴他們答案,總要他們冥思苦想抓耳撓腮一個(gè)星期了,下周上課的時(shí)候才開始講解決的思路和方法。

經(jīng)過1個(gè)月左右的折磨,他們基本可以完成一個(gè)單機(jī)版的的超市收銀系統(tǒng),完成比如輸入(從鍵盤,掃描槍就免了)信息、修改輸入、價(jià)格查詢、匯總結(jié)賬這樣的功能。從知識(shí)層面上,結(jié)構(gòu)體、指針、文件訪問這些基本都解決了,順帶著把簡單的查找、排序算法也學(xué)了。

可以說這是學(xué)生最痛苦的階段,但是正是這個(gè)階段開始培養(yǎng)他們的自學(xué)能力,這個(gè)太重要了。但是效果也很明顯,到后期的時(shí)候,少數(shù)學(xué)生開始先于我提出解決方案了。

然后接著折騰,先帶學(xué)生回顧做過的這個(gè)程序,看如何能做的更好,運(yùn)行的更快,Review和重構(gòu)。

由于是純C完成的,程序總是看上去很混亂,修改、擴(kuò)充也不是很方便,于是我們開始探索另一種編程思想——面向?qū)ο?,C++上場,又是1-2個(gè)月,用C++重新寫這個(gè)程序,在這個(gè)過程中,要求他們自己實(shí)現(xiàn)String類,封裝數(shù)據(jù)結(jié)構(gòu)和業(yè)務(wù)邏輯、數(shù)據(jù)訪問......

到這里,一個(gè)學(xué)期結(jié)束了,第二學(xué)期要求學(xué)生把這個(gè)控制臺(tái)的黑窗口改成圖形用戶界面。MFC不準(zhǔn)用,只準(zhǔn)用一個(gè)叫做Easy-x的圖形庫,而且只準(zhǔn)用其中的putpixel函數(shù)來繪制點(diǎn),一輪新的折磨開始,從畫點(diǎn)、劃線、逐點(diǎn)寫漢字開始,繪制按鈕、繪制文本框、響應(yīng)鼠標(biāo)和鍵盤,并且要求他們開始設(shè)計(jì)和實(shí)現(xiàn)TextBox, Button,Image這些類.....,,順便把消息循環(huán)之類的機(jī)制也做了初步的了解和簡單的實(shí)現(xiàn)。

到這時(shí)候,有的同學(xué)已經(jīng)開始做出”高仿Windows"了,要不要太驚喜!

到這里,我基本可以相信我的學(xué)生不會(huì)為C#和Java發(fā)憷了,更重要的是——他們具備了真正的程序員所必須具備的核心能力——自學(xué)能力、獨(dú)立解決問題的能力。

整理自知乎(Tony He)

大家如果對編程感興趣,想了解更多的編程知識(shí),解決編程問題,咨詢編程學(xué)習(xí),可以關(guān)注我們的微信公眾號(hào):程序員互動(dòng)聯(lián)盟(coder_online),這里有java高手、C++/C高手、windows/Linux高手等你來。

標(biāo)簽: