六星教育:幾個(gè)對程序員的誤解,害人不淺!

在很多人眼里,程序員是一類高薪、“高?!?的職業(yè)。他們穿著格子衫、頂著一碗超帥的光頭,能修電腦、能黑網(wǎng)站、簡直無所不能。。。
但直到我自己當(dāng)上程序員,才發(fā)現(xiàn)其實(shí)很多都是對程序員的誤解。除了外行的誤解外,還有很多來自于程序員同行的誤解。
今天六星教育就結(jié)合自己的學(xué)習(xí) / 工作經(jīng)歷和感悟,分享下我對這些誤解的看法,當(dāng)然也希望給程序員朋友們一些實(shí)質(zhì)性的建議和啟發(fā)。

外行的誤解
1. 程序員為啥工資那么高?人均年薪百萬?
作為達(dá)不到平均的一方,我覺得這句話傷害不大,侮辱性極強(qiáng)。
程序員平均薪資可能的確稍微高了一點(diǎn)點(diǎn),但是年薪百萬真的是幸存者偏差了,真的極少數(shù)程序員(尤其是只憑技術(shù)的程序員)能做到這個(gè)地步。如果你拿我和小馬哥去平均,那我還人均千萬、人均上億呢,對吧?
2. 發(fā)量代表水平?
之前很多同學(xué)看我都吐槽說:“你為什么還有頭發(fā),你個(gè)菜雞!”
我覺得,如果發(fā)量代表水平的話,我應(yīng)該比在座的大多數(shù)同學(xué)都要濃密才對。
所以有沒有種可能,是因?yàn)樘?,需求做不出來,Bug 改不完,所以才經(jīng)常熬夜加班,精神壓力極大,導(dǎo)致頭發(fā)熬沒了呢?
咳咳,別罵了別罵了,是我本人了。
3. 感覺程序員的手速都很快?
我覺得這個(gè)要分情況。拿我自己來說,我一般在 2 種情況下敲鍵盤比較快:
要么是在寫賊簡單的、不用動(dòng)腦的重復(fù)代碼(比如增刪改查);
要么就是在回消息聊天。
所以有沒有種可能,程序員的手速是通過摸魚、懟產(chǎn)品、重復(fù)勞動(dòng)、或者是平時(shí)打游戲打得多而提升的呢?
不過畢竟要經(jīng)常敲代碼,所以程序員的手速通常都不慢。
4. 程序員都是 996 嗎?
我記得我之前不怎么加班的時(shí)候,就有人經(jīng)常問我:你為什么不加班?
這個(gè)問題直接把我問懵了,好像我真的覺得自己應(yīng)該加班,不加班是罪過。
我想說其實(shí)程序員也是有個(gè)人時(shí)間的。至于為什么程序員經(jīng)常會(huì)加班呢?我覺得主要是以下幾點(diǎn):
首先是我們的程序代碼是越寫越多的,寫得越多,系統(tǒng)越復(fù)雜,Bug 就越多。就拿我自己來說,剛做項(xiàng)目一周的時(shí)候,就那幾行代碼,Bug 也好查。但現(xiàn)在項(xiàng)目做了一年多了,用戶也多了,很多陳年老 Bug 慢慢被發(fā)現(xiàn)了,而且經(jīng)常牽一發(fā)而動(dòng)全身。
第 2 點(diǎn)是程序員對排期的錯(cuò)誤估算。我發(fā)現(xiàn)一個(gè)有趣的事情,需求是做不完的,你需求做得越快,新需求來得就越快;而且我們很多時(shí)候只考慮了做需求的時(shí)間,沒有考慮改 Bug 的時(shí)間。但現(xiàn)實(shí)卻有可能是改 Bug 的時(shí)間比開發(fā)的時(shí)間還要長。所以可能的話,還是別把需求排太滿,預(yù)留一部分時(shí)間改 Bug。
當(dāng)然還有很多其他因素,比如不會(huì)拒絕需求、不會(huì)跟產(chǎn)品 Battle、缺乏經(jīng)驗(yàn)、寫的系統(tǒng)不利于維護(hù)、或者身邊的人都很卷你不好意思走等等??傊影嗍怯珊芏喾矫鏇Q定的。
5. 重啟可以解決 Bug?!
對不起,我覺得這個(gè)并不是誤解。。。這是真的!
以前我遇到過一些莫名其妙的 Bug 就死扣到底,但后來我就學(xué)聰明了,先重啟一下編輯器、重啟下軟件,說不定就好了。因?yàn)?Bug 不一定是你造成的,可能真的是編輯器的 Bug。
大家就理解為電腦死機(jī)后,重啟一下就又能開機(jī)了。原理應(yīng)該是差不多的(將程序置于初始化狀態(tài))?
同行的誤解
1. 算法和數(shù)據(jù)結(jié)構(gòu)不重要?
有很多程序員是這么認(rèn)為的,覺得工作中也用不到自己寫算法,用個(gè)現(xiàn)成的函數(shù)、類庫,或者上網(wǎng)抄一段就能搞定對吧?
但事實(shí)上,有些時(shí)候并不是你用不到算法,而是你缺了一些知識(shí),根本想不到可以用算法去更好地解決問題。比如同樣是存儲(chǔ)和查找?20 萬?個(gè)單詞,沒學(xué)過算法,用數(shù)組也能存、也能順序查找,但是時(shí)間空間都存在浪費(fèi);那如果你知道前綴樹或者其他數(shù)據(jù)結(jié)構(gòu),就可以大幅節(jié)省存儲(chǔ)空間、提升查找效率。
我覺得自己學(xué)的知識(shí)越多,反而會(huì)越覺得基礎(chǔ)才是最重要的。因?yàn)樯蠈拥募夹g(shù)不斷發(fā)展、不斷迭代和淘汰,但是底層原理、編程思想、基本功一般是不會(huì)變的。
當(dāng)然也有同學(xué)問是不是前端就不用學(xué)數(shù)據(jù)結(jié)構(gòu)和算法了呢?只能這么說,這一塊在前端面試的比重的確不大,時(shí)間緊大家可以優(yōu)先以技術(shù)框架學(xué)習(xí)為主,但是有空了還是要好好補(bǔ)一下基礎(chǔ)。
2. 寫程序應(yīng)當(dāng)追求完美?
我覺得這句話對一半,應(yīng)該是追求?特定條件下?的最優(yōu)解。
沒有工作經(jīng)驗(yàn)的同學(xué)會(huì)覺得程序就要完美,看見你程序有 Bug 了、寫得不好看了、前人留屎山代碼了,多少都會(huì)嫌棄。

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