因?yàn)榉N種原因想要轉(zhuǎn)行做程序員的人,總會(huì)有這樣的困惑:我是否適合做程序員?讓我們來(lái)看看知乎上Hugo Wu的回答
從人的角度看。
衡量一份工作是否適合自己的標(biāo)準(zhǔn)至少有三個(gè):你所擅長(zhǎng)的、你所喜歡的、對(duì)你最有價(jià)值的(最能掙錢(qián)的)。如果你把世界上所有的工作按自己的標(biāo)準(zhǔn)分類(lèi)到這三個(gè)組里,理想的狀態(tài)是這三個(gè)組存在交集上,然后你從這個(gè)交集里選一個(gè)。然而不幸的是,對(duì)有些人來(lái)講,這三者的交集為空,還有更不幸的情況是任意兩組交集都為空,最不幸的情況是這三個(gè)集合本身都為空。當(dāng)一個(gè)人不知道自己擅長(zhǎng)什么,也不知道自己喜歡什么,也不知道什么對(duì)最自己的人生最有價(jià)值的時(shí)候,就屬于這種最不幸的情況。根據(jù)題目描述不難推測(cè)出:程序員這個(gè)職業(yè)目前不在題主的擅長(zhǎng)集,也不在熱衷集,或許在價(jià)值集。
從程序員這個(gè)職業(yè)的角度看。
判斷一個(gè)人是否適合做程序員的標(biāo)準(zhǔn)很多。最關(guān)鍵的幾個(gè)是:
0. 理解力(或自學(xué)的能力):程序員的起點(diǎn)。具有這個(gè)能力的特點(diǎn)是,如卡馬克說(shuō)的:“給我一冰箱的漢堡和互聯(lián)網(wǎng),我就能解決所有問(wèn)題。”。如果你從小養(yǎng)成了個(gè)習(xí)慣或思維定勢(shì)——覺(jué)得沒(méi)有老師教就學(xué)不會(huì),那你不適合當(dāng)程序員。如果你學(xué)了的東西只是為了過(guò)考試,比如學(xué)完高中物理還買(mǎi)個(gè)仙人掌放電腦前防輻射,你也不適合當(dāng)程序員。
1. 邏輯思維力(或推衍的能力):這個(gè)是做稱(chēng)職程序員的底線。比如不能寫(xiě)的代碼出個(gè)Exception就抓瞎不知道哪里出了問(wèn)題,而是有能力從Exception順藤摸瓜反推出哪里出了問(wèn)題。Code即邏輯,Code有問(wèn)題即邏輯有問(wèn)題。沒(méi)有邏輯的人是無(wú)法找到邏輯漏洞的,也寫(xiě)不出條理清晰的代碼。
2. 抽象思維力:這個(gè)能力大體可以決定一個(gè)程序員的上限。沒(méi)有這個(gè)能力是做不出一切皆文件這種抽象的,可以試試學(xué)習(xí)函數(shù)式編程,如果無(wú)法理解并使用高階函數(shù),你不適合做程序員。再來(lái)幾個(gè)更初級(jí)的例子。如果你學(xué)寫(xiě)代碼的過(guò)程中,理解指針的指針的指針這個(gè)東西的時(shí)間超過(guò)了一天,那你不適合當(dāng)程序員。(強(qiáng)調(diào)一下,這里不適合是指你無(wú)法成為一個(gè)優(yōu)秀的程序員,你想做當(dāng)然肯定是可以做的。)
3. 專(zhuān)注力:我理解的專(zhuān)注力只是興趣的衍生品,你打Dota打CS打個(gè)幾個(gè)小時(shí)能越打越精神,為什么?因?yàn)槟阌X(jué)得有趣兒。如果也覺(jué)得寫(xiě)代碼有意思,那專(zhuān)注自然就不是個(gè)事兒。
4. 想象力與記憶力:這個(gè)不是說(shuō)過(guò)目不忘的那種,只是說(shuō)你大概記得有什么類(lèi),都有什么函數(shù),每個(gè)函數(shù)里的大體過(guò)程是什么樣的。然后走路、坐地鐵的時(shí)候就可以用想象力在腦子里做代碼的重構(gòu)啦,找Bug啦什么的,然后回到電腦前就噼里啪啦敲代碼。我聽(tīng)說(shuō)有人在夢(mèng)里也能寫(xiě)代碼,我還沒(méi)有鍛煉出這個(gè)技能。當(dāng)然,這些能力不是必須的,你隨身帶個(gè)筆記本也行,就是效率低些,影響職業(yè)成長(zhǎng)的上限。
5. 英語(yǔ):很遺憾地,目前多數(shù)有價(jià)值的東西都是英文的。所以無(wú)障礙閱讀Stackoverflow的回答是起碼的。
6. 閱讀速度:我想不出一個(gè)和合適的能力名與之對(duì)應(yīng)。大體是指看書(shū)、看網(wǎng)頁(yè)、看和理解代碼的速度、如果有需要,能從一大堆Log中迅速找出關(guān)鍵信息(當(dāng)然不是僅僅閱讀速度的問(wèn)題,還確定于你所能熟練使用的文本處理工具)、能抓到在屏幕上一閃而過(guò)的異常訊息(不是說(shuō)能記住,而是說(shuō)一眼就能感覺(jué)出有些不對(duì)勁,然后回去細(xì)看。)有不少人也不笨,但是聰明反被聰明誤,從小不怎么看書(shū),閱讀速度上不去,一個(gè)Stackoverflow的回答,有人掃一眼幾秒就抓到重點(diǎn),有人要看3分鐘。有人看代碼速度,一目十行,再善用佳軟,再加強(qiáng)大的理解力和扎實(shí)的基礎(chǔ)知識(shí),找個(gè)Bug幾分鐘的事兒,有人看代碼瞪著屏幕一個(gè)單詞一個(gè)字地看,文件一多就閱讀障礙了,如果理解力再差些,找個(gè)同樣的Bug找一上午。當(dāng)然這個(gè)技能不是很核心,因?yàn)樗鼰o(wú)法獨(dú)立帶來(lái)價(jià)值(有人看小說(shuō)快,但是看代碼慢,就是由于別的核心能力不足,閱讀速度快也沒(méi)太大用)。但是這個(gè)技能很錦上添花、拉開(kāi)差距(閱讀速度+理解力=更快的學(xué)習(xí)能力)。好在這個(gè)技能算是可以鍛煉的,只是如果你比別人晚了20年開(kāi)始鍛煉的話,怕是再努力也要幾年才能追趕上。
7. 溝通:很多人都覺(jué)得程序員不需要溝通,其實(shí)只是板磚碼農(nóng)不太需要而已。你起碼要能清楚地解釋自己的方案,更好地溝通是能把自己的好想法推廣出去。當(dāng)然,如果你1-4都是非常NB的水平,你不溝通也沒(méi)有問(wèn)題。桃李不言,下自成溪。你一個(gè)人把大家的代碼都寫(xiě)了,你一句話不講,大家也會(huì)把你當(dāng)神的。
以上幾個(gè)能力,0-6應(yīng)該在學(xué)校就獲取到80%,7在學(xué)校獲取到50%。能把上面幾點(diǎn)全部做到很好的人是極少數(shù),能把其中的2、3點(diǎn)做好大體就算“適合”做程序,能在軟件行業(yè)找到合適的崗位了。只是如果只有2、3點(diǎn)能做好,在軟件業(yè)的職業(yè)發(fā)展不會(huì)很理想。