找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1910|回復(fù): 0
收起左側(cè)

出色程序員養(yǎng)成指南

[復(fù)制鏈接]
ID:117761 發(fā)表于 2016-5-17 04:50 | 顯示全部樓層 |閱讀模式
你適合當(dāng)程序員嗎?

我是一個(gè)熱愛(ài)寫程序的家伙。我的第一臺(tái)電腦,是13歲時(shí)買的Apple II,在那之前,我已經(jīng)開(kāi)始到同學(xué)家用「小教授二號(hào)」學(xué)寫程序了。高中時(shí)我當(dāng)電腦社社長(zhǎng),帶隊(duì)參加教育部辦的全國(guó)程序大賽,幸運(yùn)拿到冠軍,大學(xué)、研究所念的也是相關(guān)科系。工作20年來(lái),一直從事軟件相關(guān)領(lǐng)域,即使擔(dān)任主管職務(wù),也一直對(duì)技術(shù)充滿熱情。


寫程序?qū)懥诉@么多年,多少有些體會(huì)。我把自己對(duì)寫程序這份工作的心得寫下來(lái),希望能給從事相關(guān)領(lǐng)域或有志于寫程序的人參考。



Photo credit: gags9999@flickr CC BY 2.0

我適合當(dāng)程序員嗎?

程序員,也叫軟件工程師、程序設(shè)計(jì)師,叫軟件工程師、程序員。我覺(jué)得「程序員」三個(gè)字簡(jiǎn)潔有力,所以就用這個(gè)詞。

如果你正從事這份工作,恭禧你!這是個(gè)熱門行業(yè),在可預(yù)見(jiàn)的將來(lái),也不會(huì)消失。不過(guò)也別高興太早,這一行的技術(shù)汰舊換新非常快,必須不斷努力學(xué)習(xí)才行。

一點(diǎn)天份

打開(kāi)一個(gè)空白檔案,必須創(chuàng)造出程序。與所有創(chuàng)造性的工作一樣,寫程序需要某種程度的天份。程序員生產(chǎn)力好壞差別很大,倒不是說(shuō)一天能寫多少行程序(這可能是最沒(méi)參考價(jià)值的數(shù)字了),而是品質(zhì)有天壤之別。天份很高的程序員,一個(gè)抵十個(gè),沒(méi)天份又不努力的,一天制造的問(wèn)題可能多于解決的問(wèn)題,生產(chǎn)力是負(fù)的。具體來(lái)說(shuō),邏輯推理、抽象思考、創(chuàng)造力、理解力,這些都是相關(guān)能力。

當(dāng)程序員不一定要有多高天份,畢竟像Linus Torvalds(Linux創(chuàng)始者)那樣的天才很罕見(jiàn),但一點(diǎn)天份還是必需的。如果你發(fā)現(xiàn)自己寫程序、看程序、解bug都很痛苦,半年一年了也不見(jiàn)改善,也許這份工作不太適合你。

一些熱情

如果你對(duì)寫程序充滿熱情,又有一定的天份,那再好不過(guò)。最起碼,你有時(shí)會(huì)沉浸在寫程序或解bug的情境中(英文有個(gè)詞叫“flow”,心流)、不想被中斷,這樣就夠了。如果你從未出現(xiàn)過(guò)這種情境,那么你可能不會(huì)熱愛(ài)這份工作。不過(guò)沒(méi)關(guān)系,世界上不熱愛(ài)自己工作的人其實(shí)不少。如果你能做好這份工作,眼前又沒(méi)有更好的選擇,繼續(xù)做下去也沒(méi)問(wèn)題。

很多努力

努力是一定要的。當(dāng)一名好的程序員,要學(xué)習(xí)的東西太多了,而且不努力很快就會(huì)被淘汰(雖然很多工作都是這樣),這是入這行前應(yīng)該要有的體認(rèn)。

程序員基本能力

什么?寫程序也有職業(yè)道德?有的,而且還很重要。我說(shuō)寫程序是一門良心事業(yè),因?yàn)橥ǔD銓懙某绦蛑灰弦?guī)格、能正確執(zhí)行,就可以交差了,而你的主管或同事很難一眼看出程序碼品質(zhì)有問(wèn)題,例如:在特定條件下會(huì)爆掉、濫用復(fù)制貼上、采用一些骯臟寫法、程序可讀性很差、模組之間糾結(jié)在一起,等等。

你焊接過(guò)電路板嗎?要是電路板繞線一團(tuán)亂、零件歪七扭八、接腳沒(méi)焊好,你能交差嗎?但是寫程序可以。因?yàn)槌绦虼a是一種抽象產(chǎn)品,沒(méi)有「外觀」可以觀察。如果你的團(tuán)隊(duì)要求code review,這個(gè)問(wèn)題可以得到某種程度的改善,但仍不能徹底解決。程序員的紀(jì)律和職業(yè)道德很重要。

程序語(yǔ)言

程序語(yǔ)言的學(xué)習(xí),是程序員最最基本的能力,而且應(yīng)該至少精通一兩種語(yǔ)言。隨著程序經(jīng)驗(yàn)的累積,學(xué)習(xí)不同程序語(yǔ)言的速度會(huì)越來(lái)越快,例如從幾個(gè)月縮短到幾周。當(dāng)然精通一門程序語(yǔ)言,不是幾星期、甚至幾個(gè)月就能達(dá)成的,但迅速接手并維護(hù)既有程序碼,是對(duì)合格程序員的基本要求。

通常第一種程序語(yǔ)言學(xué)最久,因?yàn)楹芏嘤^念也是第一次學(xué),例如變數(shù)、回圈、陣列、遞回、I/O、網(wǎng)絡(luò)、多執(zhí)行緒、物件導(dǎo)向、regular expression、functional programming……。等到學(xué)第二種、第三種程序語(yǔ)言,新的觀念越來(lái)越少,主要在學(xué)語(yǔ)言本身,速度就會(huì)變快很多。

數(shù)據(jù)結(jié)構(gòu)及演算法

如果你是本科系畢業(yè),數(shù)據(jù)結(jié)構(gòu)及演算法應(yīng)該是必修課。如果沒(méi)學(xué)過(guò),建議花點(diǎn)時(shí)間學(xué)一下。倒不需要買一本厚厚的書折磨自己,但基本的概念一定要有,例如:

數(shù)據(jù)結(jié)構(gòu)

陣列(array)、序列(list)、堆棧(stack)、隊(duì)列(queue)

樹(shù)(tree)、二叉樹(shù)(binary tree)、哈希表(hash table)

指針(pointer):這也許不算數(shù)據(jù)結(jié)構(gòu),許多高階語(yǔ)言也不讓你用pointer,但是對(duì)記憶體、指標(biāo)要有概念,這是程序員與非程序員的區(qū)別之一

演算法

對(duì)以上數(shù)據(jù)結(jié)構(gòu)的各項(xiàng)操作

排序(sort):至少搞懂3、4種基本的排序演算法,例如bubble sort、quick sort、merge sort等

搜尋(search):depth-first-search、breadth-first-search、binary search等

其它:迭代(iteration)、遞回(recursive)、分治法(divide and conquer)、時(shí)間/空間復(fù)雜度的基本概念(big O)等

網(wǎng)絡(luò)上資源很多,Google一下、多寫一些程序練習(xí),弄懂以上基本概念,應(yīng)該就夠用了。

網(wǎng)絡(luò)協(xié)定

TCP/IP、HTTP、DNS等這些都是基本的網(wǎng)絡(luò)協(xié)定。不需要到專家程度,但身為一個(gè)程序員,除非你的工作與網(wǎng)絡(luò)完全無(wú)關(guān)(這種工作應(yīng)該越來(lái)越少了),否則對(duì)這些網(wǎng)絡(luò)協(xié)定的運(yùn)作應(yīng)該要有起碼的了解。例如你能講清楚,從你在瀏覽器輸入一行網(wǎng)址到看到網(wǎng)頁(yè)內(nèi)容,在網(wǎng)絡(luò)上發(fā)生了哪些事?以前我在Yahoo面試前端工程師的時(shí)候,喜歡問(wèn)一個(gè)問(wèn)題:請(qǐng)解釋cookie是怎么運(yùn)作的,結(jié)果不少人答不出來(lái)。

當(dāng)然現(xiàn)在的程序開(kāi)發(fā)環(huán)境很方便了,各種library一大堆,我們通常不需要自己實(shí)做這些底層的東西。但不懂這些東西運(yùn)作的基本原理,會(huì)讓你在debug時(shí)被卡住,因?yàn)檎麄(gè)網(wǎng)絡(luò)系統(tǒng)的運(yùn)行,都是建立在這些基礎(chǔ)架構(gòu)之上。這些網(wǎng)絡(luò)協(xié)定,再過(guò)很多年還是會(huì)繼續(xù)存在,花一點(diǎn)時(shí)間搞懂這些,我認(rèn)為很值得。

除錯(cuò)能力

講除錯(cuò)能力不太準(zhǔn)確,因?yàn)槌e(cuò)不是單一能力,而是結(jié)合了經(jīng)驗(yàn)、對(duì)程序的了解、對(duì)系統(tǒng)架構(gòu)的了解、抽絲剝繭的能力、直覺(jué),以及各種hands-on能力的綜合,就像當(dāng)偵探一樣。臺(tái)語(yǔ)有句話叫「醫(yī)生怕治咳,師傅怕抓漏」,差不多就是這個(gè)意思。

我在Yahoo工作期間,最刺激的事莫過(guò)于排全球on-call了。所謂on-call,就是全球Yahoo網(wǎng)站出包時(shí),你要在最短時(shí)間內(nèi)找出問(wèn)題并修復(fù),那真是超級(jí)debug。拜托,Yahoo網(wǎng)站那么復(fù)雜、程序碼又那么多,出問(wèn)題的模組又不是我寫的,美國(guó)同事都下班了,誰(shuí)知道怎么解決?對(duì)不起,那是你家的事,排了on-call你就得想辦法解決。功能上的問(wèn)題還有跡可尋,最棘手的是像系統(tǒng)過(guò)載這類問(wèn)題,爬log、寫script、trial-and-error,總之想方設(shè)法揪出元兇。

程序員應(yīng)該具備良好的除錯(cuò)能力,不管程序誰(shuí)寫的。另外,修bug也是一門學(xué)問(wèn),是采用鋸箭法、貼狗皮膏藥,還是找到病灶、解決問(wèn)題背后的問(wèn)題,就看程序員功力了。

寫出可讀、易維護(hù)的代碼

這個(gè)要求聽(tīng)起來(lái)很合理,不是嗎?其實(shí)這是最難的。寫程序這么多年,看過(guò)多少代碼,我跟你說(shuō),這個(gè)世界上的爛code占絕大多數(shù),好code只占一小小部份。我自己也不斷在這條路上努力著,到現(xiàn)在也不敢說(shuō)自己寫的code多好。

為什么這件事這么難?我想了一下,大概有以下幾個(gè)原因:

可讀性高的代碼,通常是用很好的解法,解決了真正的問(wèn)題

例如牛頓的F=ma、愛(ài)因斯坦的E=mc 2,這是神人等級(jí)的功力(只是舉例說(shuō)明,寫程序不需要到這樣)

你需要徹底了解問(wèn)題(problem domain)

你需要考慮過(guò)至少幾種合理的解法(solution domain)

你需要對(duì)程序語(yǔ)言、程序庫(kù)、既有程序架構(gòu)和可運(yùn)用工具很嫻熟

你要能以簡(jiǎn)馭繁,而這代表你掌握了更高的東西

你寫程序必須很有紀(jì)律,例如:

Bingo! 找到一段code了,看我的copy& paste

可以work就很好啦、這么漂亮的解法……

好累,我不行了,先commit code再說(shuō)

不急著馬上寫code,先想清楚問(wèn)題、解法、架構(gòu)

恰到好處的注解,少了不行、過(guò)猶不及

用心想過(guò)的命名(程序界有句名言: There are only two hard things in Computer Science: cacheinvalidation and naming things .)

壓抑copy & paste及產(chǎn)出一堆爛code的沖動(dòng):

在commit code之前,自己再好好review一次(我個(gè)人經(jīng)驗(yàn),通常這個(gè)步驟可以改進(jìn)程序好幾個(gè)地方)

越容易維護(hù)、擴(kuò)展的代碼,代表它的復(fù)雜度越低

當(dāng)你輕易多用了一個(gè)外部組件、增加了一個(gè)external dependency,你就把它的復(fù)雜度整個(gè)帶進(jìn)來(lái)了,所以要很小心

降低軟件復(fù)雜度是軟件工程的最大挑戰(zhàn),軟件復(fù)雜度就像軟件的熵(我的第一篇英文blog “Software complexity is software entropy”,就是講這件事)

必須做到low coupling、high cohesion,而這兩件事都很難

低復(fù)雜度的軟件系統(tǒng),代表里面各個(gè)模組的復(fù)雜度都必須更低

現(xiàn)實(shí)環(huán)境的因素,導(dǎo)致好的程序碼不易產(chǎn)生

專案時(shí)程的壓力

程序員經(jīng)驗(yàn)的限制

團(tuán)隊(duì)未采用一些最佳實(shí)務(wù)

有決策權(quán)的人對(duì)軟件開(kāi)發(fā)不夠了解

代碼品質(zhì)的重要性,每個(gè)人都知道,連路人甲都知道,F(xiàn)實(shí)的難處在于:第一版的代碼,只要能work,品質(zhì)好壞是很難看出來(lái)的;它們的差別,要到系統(tǒng)后續(xù)的運(yùn)行、維護(hù)及擴(kuò)展才能看出來(lái),然而此時(shí)木已成舟,程序只能修修補(bǔ)補(bǔ)繼續(xù)用下去,最多小幅重構(gòu)(refactor),直到軟件生命周期的結(jié)束。

寫出好的代碼,時(shí)間會(huì)花比較久、會(huì)導(dǎo)致專案時(shí)程延后嗎?其實(shí)并不會(huì),這是能力限定,不是時(shí)間限定。寫出第一個(gè)版本,花的時(shí)間都差不多。但后續(xù)版本就差很多了,寫得越好的代碼越好改。你如果改過(guò)那種high coupling的系統(tǒng),你就知道我說(shuō)的意思了,那真是人仰馬翻,超high的。這種代碼要是裝在箱子里,箱子上會(huì)標(biāo)示「易碎/FRAGILE」。



Photo credit: Hsing Wei@flickr CC BY 2.0

寫出好的代碼并不容易。假如我們從1分到10分給程序碼打分?jǐn)?shù),10分真的很難很難,我自己也做不到。但一般人經(jīng)過(guò)努力,達(dá)到6、7分應(yīng)該是沒(méi)問(wèn)題的。如果你想看書,我在這里推薦一本:Code Complete 2nd Edition。教人寫程序的書中,這是我看過(guò)最好的一本了,只是內(nèi)容比較多,需要時(shí)間消化。如果還有興趣多看,我個(gè)人覺(jué)得Martin Fowler也寫了不少好書。

程序員進(jìn)階能力

具備以上的程序員基本能力,我想就足以勝任大部份「單兵程序員」的工作了。如果想在技術(shù)上更上一層樓,以下是幾個(gè)我認(rèn)為比較重要的進(jìn)階能力,提供給大家參考。

作業(yè)系統(tǒng)

大學(xué)修的那么多課里面,我感覺(jué)對(duì)工作最有用的就是「作業(yè)系統(tǒng)」這門課了。對(duì)作業(yè)系統(tǒng)(OS,operating system)的了解,是資深程序員應(yīng)該具備的。例如:

Hardware: CPU, memory, I/O devices

Process, multi-thread, scheduling

Inter-process communication: signal,socket, pipe, named pipe, shared memory, message queue…

Synchronization, deadlock, mutex, semaphore

File system, cache, virtual memory, pagefault…

Real-time system, distributed system

作業(yè)系統(tǒng)本身就是一支超大型程序,有著無(wú)數(shù)前人的心血。加上作業(yè)系統(tǒng)的基本概念,幾十年不變,所以花點(diǎn)時(shí)間弄清楚這些觀念,我認(rèn)為很值得。

數(shù)據(jù)庫(kù)

不是每個(gè)程序員的工作都會(huì)使用到數(shù)據(jù)庫(kù),而且現(xiàn)在不少人用NoSQL存數(shù)據(jù)。盡管如此,我認(rèn)為關(guān)連式數(shù)據(jù)庫(kù)(relational database)還是很重要,不管是MySQL、PostgreSQL、MS SQL或Oracle都好,資深程序員應(yīng)該至少對(duì)其中一種有相當(dāng)?shù)牧私狻?br />
題外話,多年程序?qū)懴聛?lái),我對(duì)ORM(object-relational mapping)抱著存疑的態(tài)度。網(wǎng)絡(luò)上有篇文章:Object-RelationalMapping is the Vietnam of Computer Science,應(yīng)該是反ORM的代表作之一,有興趣的人可以看看。還有一篇有名的文章:The Law of Leaky Abstractions,講的是每一層抽象化都或多或少會(huì)有漏洞。從leakyabstraction角度來(lái)看,SQL已經(jīng)是一層有洞的abstraction了,而ORM洞更大!

網(wǎng)絡(luò)安全

網(wǎng)絡(luò)安全(network security)平時(shí)很容易被忽略,因?yàn)樗M(fèi)事費(fèi)工,沒(méi)有立即效益。但是對(duì)網(wǎng)絡(luò)安全的輕忽,一旦出事,經(jīng)常導(dǎo)致企業(yè)或政府重大損失。這讓我想起以前當(dāng)社區(qū)管委會(huì)主委的時(shí)候,按消防法規(guī)要搞什么社區(qū)消防編組、演訓(xùn),還要指派防火管理人,真的很麻煩。安全這種事情就是這樣。

有些網(wǎng)絡(luò)安全議題,是屬于系統(tǒng)管理者的范疇,例如DoS (denial of service)、DNS spoofing、man in themiddle;有些則是程序員的責(zé)任區(qū),例如SQL injection、cross-site scripting、cross- site request forgery等等。此外像驗(yàn)證使用者身份的流程、儲(chǔ)存/傳送使用者敏感數(shù)據(jù)的方式,也都與安全有關(guān)。資深程序員對(duì)網(wǎng)絡(luò)安全議題及常見(jiàn)攻擊手法,應(yīng)該要有足夠的認(rèn)識(shí)與敏感度,并在開(kāi)發(fā)過(guò)程中合理采取預(yù)防措施。

程序語(yǔ)言的多樣性

程序語(yǔ)言是程序員吃飯的家伙,除了每天工作上用到的,資深程序員也應(yīng)該接觸一些不同的程序語(yǔ)言。例如:

函數(shù)程序語(yǔ)言

函數(shù)程序語(yǔ)言(functional programming language)是另一種風(fēng)格的程序語(yǔ)言,可以挑一個(gè)好好學(xué)一下。我個(gè)人推薦Haskell,但F#、Scala、OCaml、LISP、R、Erlang、Clojure這些也都不錯(cuò),各有擁護(hù)者。

實(shí)際工作上,不見(jiàn)得有機(jī)會(huì)使用這些函數(shù)程序語(yǔ)言,但好好學(xué)一種,可以拓寬自己程序設(shè)計(jì)的思路。而且現(xiàn)在很多程序語(yǔ)言,包括C++(C++ 11之后)、C#、Java(Java 8之后)、JavaScript、Python、Ruby、Swift等等,都具備一定的functional programming能力,可以運(yùn)用在工作上。

組合語(yǔ)言

除非是用C加assembly寫硬件相關(guān)或compiler/toolchain的人,組合語(yǔ)言在實(shí)際工作中很少用到。但我覺(jué)得應(yīng)該了解一下,因?yàn)檫@是軟件的最底層,再往下就是硬件了。我中學(xué)時(shí)候?qū)戇^(guò)6502、8088,大學(xué)上過(guò)一堂MIPS組合語(yǔ)言的課,其實(shí)還蠻有趣的。寫過(guò)組合語(yǔ)言,會(huì)讓你對(duì)電腦如何執(zhí)行程序更有「感覺(jué)」。
但是組合語(yǔ)言不用太認(rèn)真學(xué),因?yàn)檎娴暮苌儆。學(xué)個(gè)概念、最多寫幾個(gè)小練習(xí)即可。

Shell Script

如果你工作中有用到Linux/Unix相關(guān)的OS,我建議應(yīng)該要學(xué)一種shell script,例如bash。如果你是ops/service engineer或系統(tǒng)管理者,這應(yīng)該是必備能力了,不過(guò)資深程序員最好也能懂這些。就像vi一樣,有些東西已經(jīng)很古老了,但網(wǎng)絡(luò)世界就這么運(yùn)作著。沒(méi)辦法在terminal環(huán)境工作的人,很多問(wèn)題處理起來(lái)就顯得笨手笨腳。

與技術(shù)無(wú)關(guān)的

除了專業(yè)技術(shù)能力,我再補(bǔ)充一些非關(guān)技術(shù)的心得。

克制砍掉重練的沖動(dòng)

在開(kāi)發(fā)過(guò)程中,程序員很容易對(duì)既有程序碼產(chǎn)生一種「這誰(shuí)寫的?砍掉重練比較快」的沖動(dòng),包括我自己在內(nèi)。我想可能的原因有:

砍掉重練其實(shí)比較容易(拆掉舊屋蓋新屋很快,保留這面墻、那扇窗的反而更困難)

在自己的地盤當(dāng)山大王很開(kāi)心(人都喜歡按照自己的意思來(lái))

在系統(tǒng)發(fā)展的過(guò)程中,很多需求后來(lái)才出現(xiàn),使當(dāng)初的架構(gòu)顯得捉襟見(jiàn)肘,但在當(dāng)時(shí)其實(shí)是很合理的設(shè)計(jì)

上線多年來(lái),程序員處理了很多狀況、修復(fù)很多bug,因此程序顯得沒(méi)那么干凈優(yōu)雅

寫程序比讀程序容易

文人相輕

(排除以上各種因素之后)當(dāng)初的程序碼真的寫很爛

不管怎樣,砍掉重練(rewrite)的代價(jià),通常比乍看之下高許多,而且日后維護(hù)你的程序碼的人,心里可能同樣嘀咕「這誰(shuí)寫的,砍掉重練比較快」。Joel Spolsky在2000年寫的一篇“Things You Should Never Do, Part I”,今日讀來(lái)依然犀利。

小幅重構(gòu)(refactor)是沒(méi)問(wèn)題的,而且可以經(jīng)常做。

理解不同人的立場(chǎng)

當(dāng)我們?cè)谀骋环矫娑帽葎e人多時(shí),容易產(chǎn)生一種傲慢,技術(shù)人員也是。在專案開(kāi)發(fā)的過(guò)程中,除了技術(shù)團(tuán)隊(duì),還有產(chǎn)品/專案經(jīng)理、主管、客戶、使用者等不同角色的人介入。在技術(shù)方面懂得比別人多,并不妨礙我們理解他人的立場(chǎng)。當(dāng)我們能站在別人的角度看問(wèn)題,常常一下子就能了解為什么事情會(huì)這樣。例如:需求改來(lái)改去、一開(kāi)始不講清楚、進(jìn)度卡在別的team上面、「請(qǐng)你用最快方式完成」、「先支援這件緊急要求」、沒(méi)人把我講的話當(dāng)一回事……
做到理解他人或是同理心(empathy),其實(shí)并不容易,因?yàn)槊總(gè)人都有自己的立場(chǎng),而人們傾向站在自己的立場(chǎng)看問(wèn)題。我費(fèi)了很大功夫,一直在努力修正自己技術(shù)傲慢的心態(tài)。如果你技術(shù)很厲害,又能做到理解別人,那真的很不簡(jiǎn)單,你所在的團(tuán)隊(duì)運(yùn)作一定更為順暢。

參與社群,吸收新知,寫點(diǎn)東西

不管公司大小,資深程序員若只把觸角局限在公司內(nèi)部,會(huì)越來(lái)越封閉。接觸外面的社群、吸收專業(yè)領(lǐng)域的新知、寫點(diǎn)東西累積自己的專業(yè)credit,會(huì)讓自己成長(zhǎng)得更快,F(xiàn)在參與社群的管道很多了,從專業(yè)聚會(huì)研討、開(kāi)源碼專案到各種社團(tuán),五花八門,不過(guò)還是得衡量一下自己能投入的時(shí)間。單身的人比較有空,有家庭有小孩就只能斟酌參與了。

吸收新知是為了讓自己保持在敏銳狀態(tài),不要變成滅絕的恐龍,但也不用太過(guò)焦慮。軟件領(lǐng)域變化快速,各種語(yǔ)言、框架、技術(shù)不斷冒出來(lái),要追新知永遠(yuǎn)追不完。如果你時(shí)間充裕,可以到處追新知,那很好。若你時(shí)間有限,我的經(jīng)驗(yàn)是:等到很多人都在談?wù)摰臅r(shí)候再去了解一下,也就夠了。跟工作有關(guān)的,根據(jù)自己在團(tuán)隊(duì)中的角色,適度學(xué)習(xí)即可。

另外,我建議有幾年工作經(jīng)驗(yàn)的程序員,都應(yīng)該考慮寫點(diǎn)技術(shù)文章,累積自己的專業(yè)credit。這種事情沒(méi)有看起來(lái)那么可怕,一回生二回熟,包括找主題、寫文章,多試幾次就會(huì)上手。也不用給自己太大壓力,一、兩個(gè)月寫一篇都可以,長(zhǎng)短不拘,日積月累,會(huì)有收獲的。

程序員之后

寫程序能夠?qū)憥啄?每個(gè)人情況不同,但無(wú)論如何,大多數(shù)人不會(huì)寫一輩子。

當(dāng)了單兵程序員若干時(shí)日之后,最常見(jiàn)的角色轉(zhuǎn)換就是先成為Tech Lead帶組員(不同公司對(duì)這個(gè)角色有不同安排方式),此時(shí)除了寫程序,還要負(fù)責(zé)帶團(tuán)隊(duì)、對(duì)外溝通、掌控時(shí)程、照顧組員、處理突發(fā)狀況等等。如果公司夠大,公司可能還會(huì)提供更多資深技術(shù)職位,例如Architect角色。

技術(shù)職之外,有的人會(huì)走管理職,有的人走專案管理或產(chǎn)品經(jīng)理,甚至業(yè)務(wù)、行銷都有;如果喜歡走技術(shù),有的人會(huì)跳槽到條件更好、發(fā)揮空間更大的公司,其實(shí)選擇不少。如果有心創(chuàng)業(yè)或加入創(chuàng)業(yè)團(tuán)隊(duì),扎實(shí)的技術(shù)底子也會(huì)令你如虎添翼。

結(jié)語(yǔ)

最近學(xué)程序設(shè)計(jì)忽然變得很流行,「一小時(shí)學(xué)程序」、小學(xué)生學(xué)程序,好像程序人人都能寫似的。當(dāng)然練習(xí)寫幾行小程序是沒(méi)問(wèn)題,透過(guò)這些訓(xùn)練邏輯能力也很好,但真實(shí)世界的程序,復(fù)雜度遠(yuǎn)遠(yuǎn)超出這些沙盒小練習(xí)。事實(shí)上,隨著電腦及網(wǎng)絡(luò)技術(shù)的發(fā)展,現(xiàn)在的軟件開(kāi)發(fā)比起一、二十年前更復(fù)雜了,有時(shí)我都很佩服現(xiàn)在剛出校門的學(xué)弟妹們,要學(xué)的東西這么多,他們是怎么辦到的。
洋洋灑灑寫了一大篇,其實(shí)很多也只能點(diǎn)到為止。希望這篇文章,對(duì)大家有一點(diǎn)幫助!

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表