幾個(gè)對(duì)程序員的誤解,害人不淺!
Hollis的新書(shū)限時(shí)折扣中,一本深入講解Java基礎(chǔ)的干貨筆記!
在很多人眼里,程序員是一類高薪、“高危” 的職業(yè)。他們穿著格子衫、頂著一碗超帥的光頭,能修電腦、能黑網(wǎng)站、簡(jiǎn)直無(wú)所不能。。。
但直到我自己當(dāng)上程序員,才發(fā)現(xiàn)其實(shí)很多都是對(duì)程序員的誤解。除了外行的誤解外,還有很多來(lái)自于程序員同行的誤解。今天這篇文章呢,我想結(jié)合自己的學(xué)習(xí) / 工作經(jīng)歷和感悟,分享下我對(duì)這些誤解的看法,當(dāng)然也希望給程序員朋友們一些實(shí)質(zhì)性的建議和啟發(fā)。
外行的誤解
1. 程序員為啥工資那么高?人均年薪百萬(wàn)?
作為達(dá)不到平均的一方,我覺(jué)得這句話傷害不大,侮辱性極強(qiáng)。
程序員平均薪資可能的確稍微高了一點(diǎn)點(diǎn),但是年薪百萬(wàn)真的是幸存者偏差了,真的極少數(shù)程序員(尤其是只憑技術(shù)的程序員)能做到這個(gè)地步。如果你拿我和小馬哥去平均,那我還人均千萬(wàn)、人均上億呢對(duì)吧?
2. 發(fā)量代表水平?
之前很多同學(xué)看我視頻都吐槽說(shuō):“你為什么還有頭發(fā),你個(gè)菜雞!”
我覺(jué)得這句話傷害不大,侮辱性極強(qiáng),如果發(fā)量代表水平的話我應(yīng)該比在座的大多數(shù)同學(xué)都要濃密才對(duì)。
所以有沒(méi)有種可能,是因?yàn)樘耍枨笞霾怀鰜?lái)、Bug 改不完,所以才經(jīng)常熬夜加班、精神壓力極大,導(dǎo)致頭發(fā)熬沒(méi)了呢?
咳咳,別罵了別罵了,是我本人了。

3. 感覺(jué)程序員的手速都很快?
我覺(jué)得這個(gè)要分情況。拿我自己來(lái)說(shuō),我一般在 2 種情況下敲鍵盤比較快:
要么是在寫(xiě)賊簡(jiǎn)單的、不用動(dòng)腦的重復(fù)代碼(比如增刪改查) 要么就是在回消息聊天
所以有沒(méi)有種可能,程序員的手速是通過(guò)摸魚(yú)、懟產(chǎn)品、重復(fù)勞動(dòng)、或者是平時(shí)打游戲打得多而提升的呢?
不過(guò)畢竟要經(jīng)常敲代碼,所以程序員的手速通常都不慢。
4. 程序員都是 996 嗎?
我記得我之前不怎么加班的時(shí)候,就有同學(xué)在我視頻下評(píng)論:你為什么不加班?
這個(gè)問(wèn)題直接把我問(wèn)懵了,好像我真的覺(jué)得自己應(yīng)該加班,不加班是罪過(guò)。

我想說(shuō)其實(shí)程序員也是有個(gè)人時(shí)間的。至于為什么程序員經(jīng)常會(huì)加班呢?我覺(jué)得主要是以下幾點(diǎn):
首先是我們的程序代碼是越寫(xiě)越多的,寫(xiě)的越多,系統(tǒng)越復(fù)雜,Bug 就越多。就拿我自己來(lái)說(shuō),剛做項(xiàng)目一周的時(shí)候,就那幾行代碼,Bug 多好查。但現(xiàn)在項(xiàng)目做了一年多了、用戶也多了,很多陳年老 Bug 慢慢被發(fā)現(xiàn)了,而且經(jīng)常牽一發(fā)而動(dòng)全身。
第 2 點(diǎn)是程序員對(duì)排期的錯(cuò)誤估算。我發(fā)現(xiàn)一個(gè)有趣的事情,需求是做不完的,你需求做的越快,新需求來(lái)的就越快;而且我們很多時(shí)候只考慮了做需求的時(shí)間,沒(méi)有考慮改 Bug 的時(shí)間。但現(xiàn)實(shí)卻有可能是改 Bug 的時(shí)間比開(kāi)發(fā)的時(shí)間還要長(zhǎng)。所以可能的話,還是別把需求排太滿,預(yù)留一部分時(shí)間改 Bug。
當(dāng)然還有很多其他因素,比如不會(huì)拒絕需求、不會(huì)跟產(chǎn)品 battle;缺乏經(jīng)驗(yàn)、寫(xiě)的系統(tǒng)不利于維護(hù)、或者身邊的人都很卷你不好意思走等等。總之加班是由很多方面決定的。
5. 重啟可以解決 Bug?!
對(duì)不起,我覺(jué)得這個(gè)并不是誤解。。這是真的!
以前我遇到過(guò)一些莫名其妙的 Bug 就死扣到底,但后來(lái)我就學(xué)聰明了,先重啟一下編輯器、重啟下軟件,說(shuō)不定就好了。因?yàn)?Bug 不一定是你造成的,可能真的是編輯器的 Bug。
大家就理解為電腦死機(jī)后,重啟一下就又能開(kāi)機(jī)了。原理應(yīng)該是差不多的(將程序置于初始化狀態(tài))?
同行的誤解
1. 算法和數(shù)據(jù)結(jié)構(gòu)不重要?
有很多程序員是這么認(rèn)為的,覺(jué)得工作中也用不到自己寫(xiě)算法,用個(gè)現(xiàn)成的函數(shù)、類庫(kù),或者上網(wǎng)抄一段就能搞定對(duì)吧?
但事實(shí)上,有些時(shí)候并不是你用不到算法,而是你缺了一些知識(shí),根本想不到可以用算法去更好地解決問(wèn)題。比如同樣是存儲(chǔ)和查找 20 萬(wàn) 個(gè)單詞,沒(méi)學(xué)過(guò)算法,用數(shù)組也能存、也能順序查找,但是時(shí)空間都存在浪費(fèi);那如果你知道前綴樹(shù)或者其他數(shù)據(jù)結(jié)構(gòu),就可以大幅節(jié)省存儲(chǔ)空間、提升查找效率。
我覺(jué)得自己學(xué)的知識(shí)越多,反而會(huì)越覺(jué)得基礎(chǔ)才是最重要的。因?yàn)樯蠈拥募夹g(shù)不斷發(fā)展、不斷迭代和淘汰,但是底層原理、編程思想、基本功一般是不會(huì)變的。
當(dāng)然也有同學(xué)問(wèn)是不是前端就不用學(xué)數(shù)據(jù)結(jié)構(gòu)和算法了呢?只能這么說(shuō),這一塊在前端面試的比重的確不大,時(shí)間緊大家可以優(yōu)先以技術(shù)框架學(xué)習(xí)為主,但是有空了還是要好好補(bǔ)一下基礎(chǔ)。
2. 寫(xiě)程序應(yīng)當(dāng)追求完美?
我覺(jué)得這句話對(duì)一半,應(yīng)該是追求 特定條件下 的最優(yōu)解。
沒(méi)有工作經(jīng)驗(yàn)的同學(xué)會(huì)覺(jué)得程序就要完美、看見(jiàn)你程序有 bug 了、寫(xiě)的不好看了、前人留屎山代碼了,多少都會(huì)嫌棄。

其實(shí)真實(shí)工作下,我們沒(méi)辦法把程序?qū)懙酵昝溃强臻g和時(shí)間的權(quán)衡,比如 HashMap ,用內(nèi)存換查找效率;或者人力成本和資源的權(quán)衡,比如花錢買現(xiàn)成的服務(wù)、節(jié)省開(kāi)發(fā)時(shí)間;再或者是需求和實(shí)現(xiàn)的權(quán)衡,比如天天都讓你做緊急需求,你還有空去優(yōu)化架構(gòu)、有空去追求極致的性能么?對(duì)不對(duì),代碼屎山就是這么來(lái)的。
所以這里就要求我們?cè)趯?xiě)代碼之前先做調(diào)研設(shè)計(jì),多思考幾種方案、權(quán)衡利弊,然后從中選擇相對(duì)的最優(yōu)解。同時(shí)也希望對(duì)別人寫(xiě)的代碼多一些包容,把你放在別人的場(chǎng)景下,你未必能做得更好。
3. 代碼量等于水平?
在學(xué)校的時(shí)候,我的確是這么認(rèn)為的,當(dāng)時(shí)經(jīng)常跟舍友吹牛逼說(shuō)我今天又寫(xiě)了多少行代碼。但現(xiàn)在仔細(xì)回想一下,絕大多數(shù)可能都是復(fù)制粘貼、增刪改查。
進(jìn)了公司后我才發(fā)現(xiàn),真正寫(xiě)代碼的時(shí)間很少,像前期的需求評(píng)審、跟產(chǎn)品 Battle 啊、方案設(shè)計(jì)、技術(shù)選型啊、溝通、資源協(xié)調(diào)更重要,也往往更花時(shí)間。在你想清楚要不要寫(xiě)代碼、怎么寫(xiě)代碼后,再去寫(xiě)代碼,那時(shí)你會(huì)發(fā)現(xiàn)只不過(guò)是一種翻譯工具而已。
而且就我觀察下來(lái),一般職級(jí)越高、工資越高、能力越強(qiáng)的人,寫(xiě)的代碼反而越少。并不是他們寫(xiě)不出來(lái),而是他們已經(jīng)寫(xiě)的太多了、已經(jīng)有了很多經(jīng)驗(yàn)、更懂得去利用工具來(lái)脫離重復(fù)的工作,比如寫(xiě)個(gè)自動(dòng)化腳本、重復(fù)代碼生成工具之類的。
還有一方面原因是公司需要他們?nèi)プ龈匾氖虑椋瑥牡讓拥膱?zhí)行慢慢轉(zhuǎn)變?yōu)樯蠈拥臎Q策,比如剛剛說(shuō)的方案設(shè)計(jì)、或者系統(tǒng)架構(gòu)。大佬定了個(gè)框架,寫(xiě)個(gè) Demo,剩下的就交給我們小碼農(nóng)對(duì)吧。
所以代碼量是無(wú)法真正權(quán)衡水平的,在做需求時(shí)多去思考更合理的解決方案、寫(xiě)代碼時(shí)盡量避免重復(fù)勞動(dòng),才是我們要追求的,
4. 技術(shù)決定程序員的水平?
我覺(jué)得這個(gè)誤解和上一個(gè)很像啊,如果你覺(jué)得程序員的工作就是寫(xiě)代碼,寫(xiě)的多、寫(xiě)得快就是強(qiáng)者,那你就真的把自己當(dāng)成碼農(nóng)了。
我覺(jué)得衡量?jī)?yōu)秀程序員的標(biāo)準(zhǔn)絕不止有技術(shù),比如問(wèn)題的解決能力,同一件事,你完成的比別人快比別人好;比如業(yè)務(wù)理解能力,給你一個(gè)需求,很快就能判斷它是否合理、梳理清楚流程;比如溝通能力,你能夠很好地維護(hù)用戶、組員、同事、跨部門合作者的關(guān)系,從雜亂的消息中提取出有效信息;比如產(chǎn)品思維,你能給出更好的建議來(lái)推動(dòng)產(chǎn)品發(fā)展;比如管理能力,善于組織成員、推動(dòng)團(tuán)隊(duì)發(fā)展。再比如分享表達(dá)能力,能把自己學(xué)會(huì)的東西清晰地講出來(lái)、讓別人也能理解,我覺(jué)得很酷的事情,也是我一直做分享的原因。
完
我的新書(shū)《深入理解Java核心技術(shù)》已經(jīng)上市了,上市后一直蟬聯(lián)京東暢銷榜中,目前正在6折優(yōu)惠中,想要入手的朋友千萬(wàn)不要錯(cuò)過(guò)哦~長(zhǎng)按二維碼即可購(gòu)買~
長(zhǎng)按掃碼享受6折優(yōu)惠
往期推薦

朋友圈發(fā)“羨慕人家按時(shí)發(fā)工資”竟被開(kāi)除?官方回應(yīng)!

SpringBoot 實(shí)現(xiàn)人臉識(shí)別功能 !so easy

“因一條 Linux sudo 命令,我的 Twitter 賬號(hào)被封了!”
有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
