還敢無腦梭哈計(jì)算機(jī)么?
往期干貨筆記整理
0x00
最近高考不是剛落下帷幕嘛。每年高考一結(jié)束,怎么選專業(yè),怎么填志愿就成了熱門話題。
去年幫老家那邊兩個(gè)親戚家小孩參考過志愿,今年也接到了老家?guī)讉€(gè)叔嬸的電話。雖說寫這篇的時(shí)候分還沒出,但是家長比小孩還急呀,也各種打聽,各種調(diào)研的。
去年是一個(gè)去了計(jì)算機(jī),一個(gè)去了師范。今年估計(jì)家那邊兩個(gè)小孩應(yīng)該也會(huì)填計(jì)算機(jī)(或相關(guān))吧,學(xué)的理科。
當(dāng)然這不是說我推薦他們填計(jì)算機(jī)。我個(gè)人始終覺得興趣很重要,但是一問有沒有興趣專業(yè),都說沒啥明確目標(biāo),希望填個(gè)熱門好就業(yè)的。況且現(xiàn)在互聯(lián)網(wǎng)這么發(fā)達(dá),小孩們自己一查,也知道這幾年計(jì)算機(jī)火,然后也詳細(xì)調(diào)研一些有關(guān)計(jì)算機(jī)的情況。孩子們關(guān)心的就是好不好學(xué),家長關(guān)心的就是好不好就業(yè)。
但是我會(huì)建議說沖一沖、穩(wěn)一穩(wěn)、保一保。能沖進(jìn)計(jì)算機(jī)相關(guān)專業(yè)當(dāng)然沒問題,但如果投檔進(jìn)不了,那通信/電子也不是不可以,保底嘛。
0x01
我至今依然覺得工科類專業(yè)是對(duì)我們這些普通家庭出身的理科生比較友好的選擇吧。沒有什么太高壁壘,你有技術(shù)就有機(jī)會(huì),學(xué)完最起碼有點(diǎn)實(shí)用的技術(shù)傍身。
只要你有興趣學(xué),選這個(gè)一般沒啥問題。當(dāng)然這個(gè)興趣不是說要特別特別地強(qiáng),有時(shí)候不討厭也是一種興趣。
尤其是計(jì)算機(jī)相關(guān)專業(yè),這幾年的確是工科界的頂流。
首先大家都知道工資高。稍微好一點(diǎn)學(xué)校出來的應(yīng)屆畢業(yè)生,在北上廣深一畢業(yè)年薪拿幾十個(gè)基本都沒啥問題。所以學(xué)計(jì)算機(jī)出來一定是可以滿足我們安身立命,反哺家庭,以及對(duì)未來美好生活向往的目標(biāo)。我盤點(diǎn)了一下自己熟悉的同學(xué)也是,通信/電子/計(jì)算機(jī)這一塊的,發(fā)展得也都還可以。因此選計(jì)算機(jī)專業(yè)確實(shí)也比較迎合市場(chǎng)。
另外一個(gè),個(gè)人感覺計(jì)算機(jī)的學(xué)習(xí)門檻好像不算高吧。一般來說理科出身,具備點(diǎn)邏輯思維,一般都能學(xué)得不差。況且計(jì)算機(jī)的各種學(xué)習(xí)資源不要太多,開源世界也很豐富,網(wǎng)上都能找到,沒有什么明顯的學(xué)習(xí)壁壘,有一臺(tái)電腦就能學(xué)。而且付出與回報(bào)成正比,也不拼其他的,就純靠技術(shù)了。
所以可能也正因?yàn)檫@些方方面面的原因吧,現(xiàn)在報(bào)計(jì)算機(jī)的人實(shí)在太多了,那叫一個(gè)火。除了高考志愿填計(jì)算機(jī)的,還有轉(zhuǎn)專業(yè)到計(jì)算機(jī)的,考研跨考計(jì)算機(jī)的,工作后轉(zhuǎn)行從事計(jì)算機(jī)的,甚至包括培訓(xùn)班培訓(xùn)計(jì)算機(jī)的...所以我也會(huì)跟他們說壓力和競(jìng)爭(zhēng)是不小的,要有心理準(zhǔn)備。
0x02
聊到卷的問題,從兩個(gè)最常見的點(diǎn)就能看出來,一是考研,另外一個(gè)就是找工作的面試難度,我想很多小伙伴可能有親歷體會(huì)。
現(xiàn)在考研不僅是計(jì)算機(jī),但凡熱門一點(diǎn)的工科專業(yè)壓力都大。我們那時(shí)候考研多少分?300出頭就有學(xué)上。現(xiàn)在看看呢,好點(diǎn)學(xué)校的計(jì)算機(jī)相關(guān)專業(yè)400分神仙打架的多的很,報(bào)的人多,大神也多。
而聊到求職面試。以前背一背八股文,然后刷刷題,找個(gè)還行的工作沒啥問題。什么叫八股文呢?就可以背的,比如像什么OOP特性、接口和抽象類的區(qū)別、原理、List和Set區(qū)別、Java運(yùn)行時(shí)內(nèi)存區(qū)、Get和Post請(qǐng)求、三次握手四次揮手、OS頁面置換算法...等等,大家可能也背過。
然后刷題,我們那時(shí)候劍指上四五十個(gè)題目刷完基本就可以保個(gè)底,我記得好像也沒有現(xiàn)在這么多題目吧。
但是站在當(dāng)下的時(shí)間再看一看面試都問啥。
問底層,深入到骨髓。像什么JVM底層原理、JVM調(diào)優(yōu)實(shí)踐、JDK源碼、JUC并發(fā)包、鎖的實(shí)現(xiàn)原理、數(shù)據(jù)庫底層原理、索引優(yōu)化、SQL調(diào)優(yōu)、源碼、各種框架的機(jī)制,然后還有像什么集群、分布式鎖、緩存一致性...等等一些問題也是被高頻地問起。
然后就是問項(xiàng)目。要么就是往底層挖,最后也是底層原理,像上面一樣,要么就是往架構(gòu)層面上升,比如架構(gòu)設(shè)計(jì)、框架選型、鏈路設(shè)計(jì)、架構(gòu)擴(kuò)展...等等。
除了這些還有手撕算法題。現(xiàn)在求職沒個(gè)幾百道題量,怕是連筆試都很難找到感覺吧,面過的小伙伴一定有所感受。
所以現(xiàn)在自學(xué),包括面試準(zhǔn)備的時(shí)候,真的不是說背一背八股文,會(huì)用個(gè) Boot, 就可以的。比較值錢的兩個(gè)方面剛也聊過:
而這些一般是需要理解并實(shí)踐的。
況且個(gè)人明顯感覺身邊的應(yīng)屆生計(jì)算機(jī)素養(yǎng)普遍很高。不管是是面試的時(shí)候,還是工作后觀察身邊的一些新人。除了本身計(jì)算機(jī)方面思維很好,學(xué)東西賊快之外,而且還特別年輕,精力也旺盛,難頂哦。
所以基于這些,我也會(huì)跟家那面填志愿的小孩說,隨大流無腦梭哈計(jì)算機(jī)也不行。想報(bào)可以,首先要有心理準(zhǔn)備,能Hold得住壓力,其次就是對(duì)這個(gè)東西要有點(diǎn)興趣(最起碼不討厭吧),最后還得有很強(qiáng)的自學(xué)能力和習(xí)慣,不然就算進(jìn)去也很痛苦的。
0x03
然后一個(gè)問題就是關(guān)于編程難不難的話題?這是老家那邊幾個(gè)同學(xué)最近在調(diào)研專業(yè)的時(shí)候所共有的問題。
編程難嗎?其實(shí)這個(gè)問題真不知道怎么回答。
個(gè)人感覺計(jì)算機(jī)的學(xué)習(xí)門檻應(yīng)該不算高吧。都是學(xué)理科的,具備一點(diǎn)邏輯思維一般都還行吧。當(dāng)然這里不是說那種學(xué)到極致的天才型選手,我們指的是學(xué)個(gè)一般,做個(gè)普通開發(fā)的角度來聊的。
就以最常見的編程工作為例吧。它對(duì)人的思維能力是有點(diǎn)要求的,其實(shí)簡(jiǎn)單一點(diǎn)理解,差不多就是分析問題,然后抽象出要素,最后建立模型的思維過程。如果覺得編程難,或者說代碼無從下手,那大概率可能還是沒有形成這種思考方式吧。說明首先基礎(chǔ)可能有待加強(qiáng),另外則是可能鍛煉得還不夠多,沒有突破那個(gè)閾值。
尤其參加工作后,做的那些系統(tǒng)和各種業(yè)務(wù)。其實(shí)講白了就是把一個(gè)個(gè)實(shí)際需求抽象建模,用合適的數(shù)據(jù)結(jié)構(gòu)和算法流程把它表示出來,然后輔助于一些框架或者工具,用編程語言把它描述出來,然后經(jīng)過一系列處理,最后交由計(jì)算機(jī)執(zhí)行。
先把功能實(shí)現(xiàn),流程跑通,然后再考慮怎么才能做得更快,怎么才能并發(fā)更高,怎么才能更加安全。我們可以回想一下,項(xiàng)目里那些復(fù)雜的系統(tǒng)往往不都是這么演變過來的嘛。
所以很多剛?cè)肼毜男』锇樗^疼的一個(gè)問題就是說剛?cè)肼殘F(tuán)隊(duì),剛接觸實(shí)際項(xiàng)目,項(xiàng)目太大了,一時(shí)半會(huì)搞不懂吃不透。
為啥呢?因?yàn)檫@里面很多的演進(jìn)和迭代過程,你并沒有看到。其實(shí)一開始系統(tǒng)沒那么復(fù)雜的,只不過后面迭代了好多個(gè)版本,改了很多東西,又加了很多東西。這時(shí)候如果沒有比較靠譜的迭代記錄,文檔,或者注釋,的確是很難看懂,太正常不過了。所以這時(shí)候只能靠自己多問,多想,多悟,上下文/前后段,由整體到局部,由局部再到整理,就這么來回反復(fù)摩擦,慢慢就吃透了。
所以有時(shí)候想一想,好像事情也沒那么復(fù)雜。但是你又想過沒,為什么現(xiàn)在的互聯(lián)網(wǎng)開發(fā)世界那么繁榮呢?尤其之前我們?cè)谑崂硐翊髷?shù)據(jù)、后端開發(fā)那些知識(shí)點(diǎn)和學(xué)習(xí)路線時(shí),涉及到的各種技術(shù)點(diǎn)和框架實(shí)在太多了。
其實(shí)細(xì)想一下,它們很多時(shí)候都是在做輔助用的。它們的出現(xiàn)很多時(shí)候都是為了應(yīng)對(duì)企業(yè)級(jí)應(yīng)用開發(fā)的所面臨的的諸如復(fù)雜性、代碼質(zhì)量、可測(cè)試性、可擴(kuò)展性、可維護(hù)性等一系列問題。一句話總結(jié),都是為了更好地工程化迭代。
舉個(gè)例子可能更好理解一些。比如做Java后端開發(fā)的用框架很多,其實(shí)我們?cè)趯戇@些Web化服務(wù)時(shí),不用也完全可以。用樸素的方式也可以寫,這樣的話不同人都自己去造輪子,自己去封裝工具類,封裝自己的工具方法,也沒問題,能完成需求。
但是這時(shí)候因?yàn)椴煌说乃季S方式不同,習(xí)慣不同,能力也不同,大家寫出來的代碼很有可能參差不齊,質(zhì)量不一,那就很難達(dá)到企業(yè)級(jí)開發(fā)所講究的那些代碼質(zhì)量、可測(cè)試性、可擴(kuò)展性、可維護(hù)性、可迭代性。這樣寫出來的項(xiàng)目后面可能不好維護(hù),沒辦法長期迭代演進(jìn)了。
而這些框架它們內(nèi)部用到了很多的機(jī)制,實(shí)現(xiàn)了很多的工具類,方法,以及流程,自己也規(guī)定了很多約束性寫法,給開發(fā)者或暴露API,或暴露接口...其實(shí)某一程度上來說都可以理解為提供了一種約束性編程。你要用我的框架?可以。那你就得遵守我這邊的游戲規(guī)則(編碼規(guī)則)。典型不就是這樣嘛,IoC容器用來干嘛的?方便管理對(duì)象,然后還搞了一堆像什么切面式編程、接口式編程、聲名式編程...等等,我們就可以理解為一種約束性的編程。這樣才能保證寫出來的代碼,在完成需求的同時(shí),還能便于測(cè)試、擴(kuò)展、維護(hù)、甚至便于和其他技術(shù)進(jìn)行集成,來創(chuàng)造業(yè)務(wù)價(jià)值。
不過寫到這里,好像扯得有點(diǎn)遠(yuǎn)了,時(shí)間也不早了,以后有機(jī)會(huì)再聊吧。
我們明天見。
往期干貨筆記整理