看看“悲催”的碼農(nóng)得學(xué)多少東西?
首先你得會(huì)一門編程語(yǔ)言, 比如 C, Java, Python, PHP等, 但是光語(yǔ)言本身還差得遠(yuǎn), 還得學(xué)習(xí)這門語(yǔ)言得類庫(kù),學(xué)完類庫(kù)還得學(xué)框架, Spring, struts, hibernate ,mybatis 每一個(gè)都不是善茬。
做前端的同學(xué)也不用說(shuō)了, html / javascript / css, 再加上一大堆前端框架Angular, React, Vue, 總得學(xué)會(huì)一樣吧。
學(xué)完了框架才能做項(xiàng)目,找工作, 才有可能開(kāi)始光榮的增刪該查之旅。
但是這還遠(yuǎn)遠(yuǎn)不夠, 前面說(shuō)的這些知識(shí)只能算是入門。
數(shù)據(jù)結(jié)構(gòu)和算法必須得學(xué), 要不然你寫的代碼永遠(yuǎn)沒(méi)有隔壁的張大胖寫的好,同樣的需求,人家的代碼賞心悅目, 你的凌亂不堪, 被領(lǐng)導(dǎo)批得體無(wú)完膚。
所以《算法》,《大話數(shù)據(jù)結(jié)構(gòu)》,《圖解數(shù)據(jù)結(jié)構(gòu)》,《算法導(dǎo)論》...... 統(tǒng)統(tǒng)都來(lái)吧, 數(shù)組、棧、隊(duì)列、二叉樹(shù)、圖、排序、搜索 保證不把你淹沒(méi)。
平時(shí)和大家聊天,一定得能說(shuō)出幾種常見(jiàn)的設(shè)計(jì)模式,尤其是單例模式的幾種寫法,要不然出門都不好意思給人打招呼。
一直做一個(gè)被分配任務(wù)的初級(jí)碼農(nóng)肯定是不行的, 所以面向?qū)ο蟮姆治龊驮O(shè)計(jì)必須學(xué)習(xí), 要不然將來(lái)領(lǐng)導(dǎo)給你委以重任, 讓你做分析和設(shè)計(jì), 你怎么去劃分模塊和服務(wù),怎么去設(shè)計(jì)接口? 依據(jù)什么原則和指導(dǎo)方針?
軟件的開(kāi)發(fā)過(guò)程及***實(shí)踐也快變成碼農(nóng)必備了, 敏捷開(kāi)發(fā), DevOps, 單元測(cè)試,持續(xù)繼承,TDD, 結(jié)對(duì)編程...... , 必須得跟上趟。
作為程序員的自我修養(yǎng),計(jì)算機(jī)的基礎(chǔ)知識(shí)也是必備。
計(jì)算機(jī)的組成原理,馮諾依曼結(jié)構(gòu)必須得了解,要不然整天寫程序, 都不知道計(jì)算機(jī)是怎么工作的, 被人家笑話; 如果想深入一下, 數(shù)字電路,匯編也需要略知一二, 因?yàn)樵谀硞€(gè)陰暗的犄角旮旯總會(huì)有匯編在等著你。
數(shù)據(jù)庫(kù)得學(xué), 基本的SQL, 表的設(shè)計(jì)都得會(huì),范式、鎖、隔離級(jí)別讓人頭大。
深入一點(diǎn)的還涉及到調(diào)優(yōu), 在架構(gòu)層面還得了解分庫(kù)、分表、備份、讀寫分離。
光關(guān)系數(shù)據(jù)庫(kù)還不夠, NoSQL在互聯(lián)網(wǎng)時(shí)代很流行,工作中很有可能用到, 不會(huì)不行。緩存也跑不掉,memcached, redis 已經(jīng)是工作中的必備了。
現(xiàn)在不聯(lián)網(wǎng)的程序幾乎都要絕跡了, 所以計(jì)算機(jī)網(wǎng)絡(luò)得學(xué), 至少得理解http, https, socket, tcp 是怎么工作的, 由https引出的RSA, Hash, 證書也得知道是怎么回事。
安全其實(shí)是個(gè)大話題,像什么XSS,CSRF,SQL注入...應(yīng)該成為Web編程必須要考慮的事情。
操作系統(tǒng)也得學(xué),這樣才能理解進(jìn)程/線程,還有他們之間的通信和同步, 以及同步/異步,阻塞/非阻塞,select/epoll 等聽(tīng)起來(lái)很時(shí)髦的詞匯。 虛擬內(nèi)存和文件系統(tǒng),總得明白一個(gè)大概。 此外,Linux的基本命令怎么著也得能敲出來(lái)一些, 如果能使用vi 就更好了。
深入理解Java虛擬機(jī)啊, 搞不明白虛擬機(jī)是怎么工作的,系統(tǒng)中有些問(wèn)題你還真搞不定。
還有Tomcat, Ngnix .... 都不是一時(shí)半會(huì)兒就研究透的。
你可能還會(huì)聽(tīng)人說(shuō):離散數(shù)學(xué)很重要, 是計(jì)算機(jī)學(xué)科的基礎(chǔ)!那就去看看吧, 除了布爾運(yùn)算之外, 其余的什么等價(jià)關(guān)系、偏序、***演算、謂詞演算、群、格....徹底把人搞暈。
這些基礎(chǔ)知識(shí)沒(méi)還搞定,什么云計(jì)算、大數(shù)據(jù)、微服務(wù)、容器又開(kāi)始鼓噪起來(lái)了, 你難道不想了解一下? 難道不怕落伍?
碼農(nóng)就是這么悲催,被各種新技術(shù)趕著不斷向前, 但是反過(guò)來(lái)看, 要是對(duì)軟件編程有興趣, 那簡(jiǎn)直是太幸福了, 新玩具不斷出現(xiàn),玩都玩不過(guò)來(lái)。 所以想在這個(gè)充滿挑戰(zhàn)的行業(yè)里一直保持就競(jìng)爭(zhēng)力, 那就不斷的學(xué)習(xí)吧。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】