操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    手電腦培訓,歡迎新老同學咨詢。

    當還在徘徊找工作時,當工作做的不順心時,當對薪資不滿時不妨來了解了解。手藝與技術是永不過時的生存之道,還要順應時代的變化與改革而創新,不斷的提升自己想在社會立足就要先立業。

    ·辦公軟件:零基礎開始,指法練習熟悉鍵盤及電腦基本應用,文檔排版、表格制作、統計、圖表、圖形演示文稿,整套課程學完即可無憂上崗。

    ·平面設計:廣告設計、包裝設計、圖文設計、CDR軟件、AI軟件、CAD軟件。裝潢設計:平面圖三維圖最終效果圖、CAD3DVRay草圖大師、酷家樂。產品設計:主教陶瓷產品平面圖、三維建模最終效果圖、視頻剪輯、淘寶美工、精雕等課程。所有課程由專業老師一對一線下授課,不用擔心學不會,課程學習時間不限。

    論是知乎還是一些主流的問答平臺,關于IT職業培訓機構的帖子,其風評基本處于一邊倒的趨勢,無論該機構品牌知名度大小還是該機構實際規模,似乎口碑都是出奇一致的差,這究竟是為什么?筆者曾經算是業內人士,從業多年,我想就自己的認知聊一聊這個話題,希望能給感興趣的你提供一些參考意見吧。

    首先說下我的大概情況,我自己曾跨專業花了好幾萬參加過一年多的IT培訓,曾經短暫從事過IT開發崗位工作,曾經從事過多年IT職業教育工作。招生咨詢、就業、教務、市場推廣、校區管理崗位都經歷過。你們可以理解為我曾經被“坑過”繼而又參與“坑過”別人。所以,關于這個問題我覺得自己應該有一定的發言權。

    職業教育

    有一句話叫“存在即合理”。IT職業教育這塊蛋糕很多人都想來分一杯羹,畢竟的確是有市場的。每年動輒近千萬的大學畢業生,高不成低不就者大有人在,還有很大一部分人是非常迷茫的,包括一些已經走出校門幾年甚至十幾年的人士,一點不夸張,之前我們校區有年齡接近40歲的學生,30出頭的更比比皆是。還有一些因為各種原因未能上大學的小年輕們,家長希望讓他們學一點技能,當然也有一些家長退而求其次的,他們僅希望孩子不要過早的步入社會。

    而IT產業規模近年來的發展情況有目共睹,人工智能、云計算、大數據等信息大潮一浪接著一浪。行業的發展勢必會造成巨大的人才缺口,IT相關崗位薪資待遇自然是高出其他崗位一大截,不得不說,很多人就是沖著待遇來的,至于所謂的職業前景、職業發展那都是后話,沒多少人真的主動去深入思考會在這行干多久,他們思考最多的是我怎么才能入行,入了行能不能立馬拿高薪。

    從政策方面來說,ZF也是鼓勵發展職業教育的。絕大部分剛走出高校的學生是干不了活的,也沒有多少企業愿意花本錢培養員工,投入大、風險大,畢竟這個行業跳槽太普遍。拿來即用是理想狀態,所以企業相關招聘里動輒就是要求三年以上從業經驗。

    如此環境,IT職業培訓機構的存在自然是非常合理的。

    編程學習

    為什么有那么多大學生會選擇IT職業培訓機構?我認為無非是兩大原因。

    第一,學生自身能力問題。一個是獲取信息的能力,雖說大家早已經置身互聯網時代,學生也不例外,但總體上學生在校期間獲取信息的能力還是不夠充分的,容易受信息不對稱的影響,偏聽偏信,盲目相信或者不相信;另一個是自我認知的能力,主要表現在對自己的現狀了解不清,到底適合學什么,未來能夠干什么?好高騖遠或妄自菲薄者大有人在;再一個是學習能力,學生的學習能力不應該是最強的嗎?不可否認,但是我們要思考一點,來培訓的學生中有多少比例是來自985/211大學的?大部分都是普校的,學習能力并不出眾或者并沒有養成良好的學習主動性,他們需要環境來驅使,他們需要被督促。

    第二,IT職業培訓機構能夠提供相對應的軟硬件環境,一定程度上彌補學生們的短板。提供場地、提供師資、提供課程還能負責就業,經過全方位的包裝宣傳運作,自然會有不少人選擇。

    學習編程

    參加IT職業培訓到底有沒有用?其實這個問題我認為非常的“二”,應該一分為二地去看。我當年是自己主動報班的,沒有人要求我,也沒有人幫我交學費,我自己打工存了5萬多元,培訓期間花完了,住上下鋪,省吃儉用。當時班上只有十幾個學生,電腦基礎參差不齊,我屬于基礎差、悟性差但學習比較認真的,學編程對于一個文科生來說非常吃力,不夸張的說剛開始我連打字都困難,基本指法都不會。俗話說,知己知彼百戰百勝。而我當時顯然在自我認知以及對相關領域的認知都不充分,僅憑一腔熱血,最終艱難入行。公司愿意給我機會培養我,當時技術總監要把我調到北京跟一個經驗豐富的程序員學習,我自己放棄了,我僅從業兩個月就選擇了離職轉行。到此,是不是就可以下結論說參加IT職業培訓沒有用了?

    當然不是!雖然我最終沒有長期從事開發崗位,但是從泛IT領域來說,大有收獲。譬如:一年多的學習,我肯定不是當初那個電腦小白了,在很多業余人士眼里,我甚至是一個電腦高手,其實搜索一下什么都有,我只是學會了怎么去解決一些常見問題罷了。另外,后來我的工作中接觸了建站和網絡營銷,因為之前學習過建站,學習過html、js等,故而比較得心應手,我負責運營的三個網站,很長一段時間內,多個核心關鍵詞的自然排名都非常靠前,自己也曾接私單做網站優化,賺過兩萬塊錢的外快。

    如果再讓我選擇一次,我不會盲目選擇不適合自己的專業,我們必須承認,有些技能不是靠努力就能掌握的。如果我選擇了網絡營銷相關專業,花費的學習成本,不管是時間成本還是金錢還是個人精力上都會少很多。至于編程,我給自己的結論是——不是那塊料。

    編程

    但也有人是這塊料子!班上學得最好的是一個同濟大學肄業的大齡青年,本專業是學機電的,他屬于那種對技術非常狂熱的類型,特喜歡逛各種技術論壇,培訓內容遠遠滿足不了他。他還特別喜歡和大家探討,老師不在的情況下,他就是老師。我來描述下他的氣質,參照高曉松,哈哈,開個玩笑,不過確實很像。他是班上第二個就業的,屬于提前就業,起薪8K,在當時真的很高了,即便是放到現在,也不算低吧。沒幾年,他就拿年薪了,2016年的時候年薪已經60萬了,到現在他依然還在搞技術。

    班上另一個靈魂人物,是班長。高中畢業后從事過好幾種工作,進過電子廠干過電工,吃過不少生活的苦,學習主動性很強,人也聰明。別人組隊打CS,他從來不參與,他非常清楚,他花的每一分錢都得用在學習上!他要通過學習IT技能實現職業跨越,他做到了!他入職的第一家軟件公司名字我都還記得,初始薪資不高,記得是5000元,他在這家干了三年,薪資漲到了1萬。同時提升了學歷,前幾年聽說已經拿到了上海交大的學士學位。后來跳槽了幾次,收入自然也是水漲船高。

    還有個提前就業的女同學,東北人,本科學歷,在班上學得不算特別好的,當然比我好點。她竟然第一個就業,而且是進了花旗銀行,讓我們好生羨慕。

    就業

    據我所知,當時班上還有好幾個就業還算可以的同學,至少從事了本專業的工作,至于后來發展情況,隨著時間推移,聯系減少也就不得而知了。另外還有幾個回去子承父業的,還有去當兵的,還有學得太差面試多次均失敗的。在我看來,就業不均這非常正常,不正常的是簽訂所謂的“包就業”合同,所有人就業均對口那就更不可能了!如果你們遇到宣傳“包就業”的,你們完全可以懷疑他們是虛假宣傳。還有些宣傳什么去名企,起薪15K,都是噱頭罷了,不是沒有,而是放大個例。機構每天花費巨額做廣告投放,重市場輕產品的情況相當普遍,畢竟產品沒什么個性,大家都可以拿來即用,只是換個logo的事情。虛假宣傳最終是要為這個結果買單的,兌現不了終究會毀了自己的業內口碑。

    做培訓的老板們不知道這個問題嗎?當然知道,但是因為競爭,不得已而為之,大家都要生存,都想搶生源,競爭是非常慘烈的,你不承諾,別人會承諾。記得有段時間,“某內”在搜索引擎上的投放特別大手筆,當然也特別惡劣,覆蓋業內各種關鍵詞,包括別人的品牌詞。你搜索任何關鍵詞,排名靠前的都是“某內”的咨詢網站。這種惡劣的競爭勢必會影響同行,你想踏實本分做培訓,太難了!經濟學上有一種現象叫做格雷欣法則,說的是在任何市場競爭中,突破基本底線的惡性競爭必然導致商品質量的整體降低。這也就在一個層面上解釋了為什么IT職業培訓行業口碑普遍差。

    虛假

    有了生源,緊接著師資問題還得跟上。眾所周知,IT行業知識更新速度快,入了這個行業意味著需要始終保持學習能力,你得不斷地學習。自己會技術還得具備教會別人的能力,這并不容易,真的具備這種能力的人才薪資自然不會低。名師效應自然是各大機構競爭的法寶之一,關于師資力量的包裝那已經是公開的秘密。哪有那么多名師?一些機構甚至會讓沒有實際開發經驗的人員充當“講師”,照本宣科,學技術變成了欣賞PPT,搭配所謂的視頻課件,賣幾萬元的高價。

    學生學不到東西,一些早期建立合作關系的企業發現培訓生依然干不了活,自然就不再接受機構推薦生源。職業教育的終端是就業,就業是最大的民生,學生就不了業,那機構的口碑自然是越來越差,口碑差了,招生就會陷入絕境,繼而惡性循環,最終動搖機構的根基,難以為繼,不僅僅中小機構關門,一些知名品牌同樣會跑路。玩不下去了,換個地方換個名字接著玩的情況也不是沒有。

    我們回過頭來在看這個問題,參加IT職業培訓到底有沒有用?我相信你的內心里有自己的判斷了。

    編程學習

    不要把砝碼壓在任何一個機構,最終其實還是靠自己,師傅領進門,修行看個人。學習能力強的不妨先自學看看,現在網絡上自學的課程多得很,只要你愿意鉆研,總能學到知識。如果自學困難,也可以找個業內人士帶帶你,如果沒有這個條件,需要找培訓機構,一定要多渠道了解,多現場試聽,不要去機構專門組織的試聽班,你就插班聽,加幾個學生的微信,多請教那些比你先吃螃蟹的人!

    以上僅是我的一家之言,僅能代表個人立場,歡迎交流探討!

    者 | 編程指北

    出品 | 編程指北(ID:cs_dev)

    頭圖 | CSDN 下載自視覺中國

    前言

    為什么突然想寫這個話題呢?

    最近有不少新關注的讀者,在后臺問:大學學 Java 和 C++ 哪個好找工作,學前端好還是后端好,該學 Vue 還是 React。。。

    仿佛看到了自己當年的模樣,所以覺得有必要單獨寫一篇文章,單純以一個計算機應屆畢業生的身份聊聊,我認為大學四年,計算機科班學生應該學些什么,哪些才是重點。

    同樣大學四年,為什么有些同學畢業就能成為大廠 Offer 收割機,各種 SP、SSP 拿到手軟,有的同學明明在學校寫了好多網站,項目經歷滿滿,經歷春秋招,卻找到一份工作都很難。

    不能說后者沒認真學習,或許是用力的方向不對。

    話不多說,直接進正題吧。

    正文

    人類的知識邊界一直在不斷的擴張,俗話說學無止境,這放在計算機領域也同樣適用,計算機本身是一個人造科學,不屬于自然科學。

    每年,甚至每個月都不斷有新的編程框架推出,學到頭禿你也學不完,也沒有必要去挨個學。

    并且你會發現,很多一二線大廠內部用的東西基本都是自己搞一套的,比如服務發現、RPC、KV、DB、消息隊列、日志、監控等等。

    所以一般這些大廠招聘的時候基本不會因沒學過某種框架而掛你,反正很多東西都是要進來重新學的。

    他們會更加關注你的基礎知識、解決問題的經驗以及聰明度這種更加通用的能力上。

    反而是一些小公司,可能會要求你必須會 Spring、Vue、Redis... 這些框架或者組件。

    騰訊JD

    阿里JD

    某家外包JD

    上面分別是騰訊、阿里、某外包公司的招聘 JD(job description),顯然,騰訊阿里看中的是扎實的編程基本功和快速學習能力,這意味著有培養潛力。

    而外包公司就要求你會 xx 數據庫、Spring 之類。不去評價哪個好,但是如果你想去 BAT,那是不是至少對照著它們的 JD 來提高自己的能力,不失為一種捷徑。

    在這里,我粗淺的把計算機編程領域的知識分為三個部分:

    • 基礎知識

    • 特定領域知識

    • 框架和開發技能

    基礎知識是指不管從事任何方向的軟件工程師都應該掌握的,比如數據結構、算法、操作系統。

    特定領域知識就是你從事某個細分方向時需要掌握的知識,比如做游戲引擎的需要掌握圖形學;做前端的需要掌握瀏覽器渲染原理、前端三大件;算法工程師需要更多的數學知識。

    畢竟計算機各種門類挺多的,需要選個細分方向專研下去,什么都學只會什么都不精(大佬除外啦。

    基礎知識

    現在大環境比較浮躁,很少有人愿意花心思在基礎上,喜歡直接學 Python 搞機器學習、寫秒殺、做商城。

    找工作的時候都是想看面經、總結速成。

    但是作為優秀的計算機系學生的你怎么能流于各種編程框架(造框架除外),糾結學 SpringBoot 還是 SSH 呢?

    把時間花在算法、基礎學科上他不香嗎?功利一點講,回報反而會更大。

    況且在計算機領域,很多基礎的理論并不十分高深,我們努努力就可以掌握其中的核心知識。

    1、數學

    首先說明,這里把數學列出來不是為了顯得高端,而是自己吃過數學的虧。

    如果你是自學轉行當程序員,我當然不會推薦數學,因為轉行的大概率是去學 Java、前端這類,對數學基本沒啥要求。

    但是這篇文章主要面向的是還在大學的科班學生,這部分同學以后也許會去做算法(CV、NLP之類)、游戲引擎、信息安全編碼等

    這些方向對數學要求就會偏高,在計算機領域,線代、概率論、統計學這些數學分支相對比較重要,計算機本質上還是離散的。

    比如在機器學習或數據挖掘中常常用線性代數來降低數據維度,很多問題最終都能化為求解線性方程組。

    所以為了避免以后想走這些方向卻被數學卡住,在大一、大二上數學課的時候就好好的學一下。

    書到用時方恨少,不要現在以為沒用處就不好好學,等你需要的時候,就知道后悔了。(默默流下了不學無術的眼淚┭┮﹏┭┮

    什么?你說以后肯定做開發方向?

    那的確可以把數學優先級放后面一點,用得確實不多,不過上數學課的時候總該認真聽下吧,拿個高績點也是百利無一害嘛。說不準哪天你又想加入算法內卷大軍呢?

    2、C語言

    你也許會很疑惑,這里明明說基礎知識,為什么要把一門編程語言單獨列出來呢?

    因為在我看來,沒有比 C 語言更適合用來理解計算機系統了。

    我們后面將會提到的操作系統、體系結構 這些東西非常適合用 C 語言去理解或者去實踐。

    并且 C 語言本身的語言特性非常少,但是想學好又是不容易,很多人都覺得 C 語言難,難在哪里呢?回想了一下我大一時的感受:

    • 簡陋的標準庫,幾乎沒有可用的數據結構和算法,什么都得自己來

    • 指針很難理解和使用

    • 需要了解匯編、鏈接、裝載、內存等才能把 C 語言用好

    不巧的是,這些東西正是計算機系統知識的一部分,所以用 C 語言作為學習計算機系統知識是最有效率的方式。

    真的很難想象用 Java 或是 Python 去給別人講解內存,因為這些語言抽象程度都比 C 語言高,意味著離計算機系統也就越遠。

    在 TIOBE 編程語言排行榜上,C語言幾乎永遠占據前三位,其地位自然毋庸置疑。

    TIOBE-2020排行榜

    而且幾乎你開發中用到的很多東西都是用C語言編寫的,Linux、Nginx、Redis、MySQL、Git......或許你會想要探究下原理,閱讀點這些開源軟件的源碼,那么 C 語言也是你必備的瑞士軍刀。

    深入學習 C 語言,能夠了解計算機底層的執行原理,是理解程序運行機制的絕佳語言,無出其右。

    在這里,不得不引用對C語言最經典的總結:

    任何比C語言更低級的語言,都不足以完整地抽象一個計算機系統;任何比C高級的語言,都可以用C來實現。

    這真是極高而中肯的評價!

    所以對于計算機科班來說,不管你是做前端還是后端,算法還是開發,C 語言都建議你好好學習。這是無關方向的一門語言,就是基礎!

    3、操作系統

    我們編程的 IDE、寫出來的程序全部都需要運行在操作系統上,說操作系統是計算機軟件的基石也不為過。

    程序運行起來就需要創建進程,這涉及到操作系統的進程管理;寫程序需要定義變量、存儲數據吧,這又涉及到內存,對應內存管理;有時候我們還需要讀寫文件,這又離不開和文件系統打交道;你需要學習使用鎖、條件變量、臨界區來保證程序并發執行時不會錯亂。

    而讀寫文件、分配內存這些又離不開系統調用(System call)。

    并且當你真正做起工程就會發現,很多問題是和操作系統緊密相關的,不理解操作系統,你連問題的原因都分析不出來。

    比如前段時間我們出現的在基于協程(libco)的框架下,使用多線程的鎖去做同步互斥偶發死鎖,后來分析才發現原因:

    由于協程是應用層實現的,一個線程內多個協程對于操作系統是感知不到的:

    協程模型

    那么當一個協稱 A 上鎖后發起網絡 IO 請求,這個時候會被切換到另外一個協程B,而協程 B 又去請求這個鎖。

    那么這個時候操作系統會認為這個鎖已經被上了,因此會將協程 B 對應的線程掛起到等待隊列,這樣的話就導致協程 A 永遠無法運行,也就無法釋放鎖,導致死鎖。

    解決的方法也很簡單,就是將鎖設置為可重入鎖,可重入意味著同一個線程多次去請求同一個鎖不會導致掛起。這樣當協程 B 再去請求鎖的時候,操作系統就會認為協程 B 所在的線程已經持有這個鎖了,直接返回,繼續執行。

    總之,我們寫程序每時每刻都在和操作系統交互,沒有理由不學好。

    4、編譯原理

    編譯原理可能是我們平時接觸得最少的了,大家也許會覺得自己又不用去造新的編程語言,學編譯原理干啥。

    學好編譯原理有啥用?

    你會站在更高的角度去審視這些編程語言,看到的不再是表面的語法,更會想到語法背后的實現。

    這種感覺很透徹,就像搞懂了操作系統、體系結構你會明白一個程序從雙擊鼠標開始,到底是如何被運行起來的,這種掌握一切細節,透徹的感覺,真的很奇妙,不信你去試試。

    說人話!

    那學了編譯原理你能干啥?

    當你學完有限狀態機以后,你會發現以前覺得很牛逼正則表達式似乎自己也能用 DFA、NFA 實現一下了。狀態機的思想在編程中很多地方都用得上。

    比如解析 HTTP 協議,如果沒學過狀態機思想,你可能會一行行的 if/else 去做解析,這里最麻煩的地方在于,if/else 需要提前將 HTTP 頭部字段都接收到再來判斷,而我們知道 HTTP 基于 TCP,而 TCP 是流式傳輸,所以你很有可能是幾個字符一組組接收到的,這個時候用 if/else 寫出來就很難看了。

    而用狀態機編寫起來代碼就會非常優雅。狀態的轉移是由規則驅動的,接收到一個字符就判斷一個,非常的方便。

    繼續學完語法分析,你會掌握遞歸下降分析這樣非常重要的思想,你可以使用遞歸下降快速的實現四則運算計算器。

    如果不用遞歸下降你可能需要先中綴表達式轉后綴,然后求值,這是我們大一數據結構課寫的,當時用棧寫的,有點麻煩。后來學完編譯原理,又用遞歸下降重寫了一遍,區區幾十行代碼遍搞定。

    還有一類場景在實際開發中的用的很多,比如淘寶、京東這樣的電商,它們的營銷規則有很多,比如滿減、直減、跨店等等,這樣的規則是不可能寫死在代碼里的。

    那是怎么做的呢?

    一般會實現一個配置系統,并設計一個DSL(領域特定語言)來表達這些規則,將規則直接配置到系統中,這樣可以非常方便的修改,那么如何在代碼里去解析 DSL 定義的規則呢?這就需要為 DSL 寫一個語法解析器,這里就會用到語法分析的方法。

    DSL(Domain Specific Language),是一種用于某個特定領域的程序設計語言。這種特定于某個領域是相對于 C、C++、Python 這種通用語言而言的,通用語言可以在各個領域使用,我們熟悉的大多數程序設計語言都是通用語言,它們都是圖靈完備的。

    像我們平常經常使用的 JSON、SQL、HTML 這些都算是一種 DSL,你甚至可以嘗試用遞歸下降去寫一個 JSON、XML 解析器,這比寫電商網站更有價值的。

    繼續往下學你會了解到抽象語法樹 AST 如何生成、如何轉化為中間代碼、如何對中間代碼優化、最終又是怎么生成機器指令的。

    你會看到貪心算法在寄存器分配中的應用,也會看到圖論中的可達性分析又是如何實現死代碼消除。

    IDE上面那個綠色的編譯按鈕對你不再是黑魔法。

    為啥點一下就能生成可執行的程序?

    你寫的英文字母又是如何變成一個個二進制指令的?

    學完編譯原理,這些通通不是問題,媽媽再也不用擔心你的學習~

    當然完成一個像 GCC、Clang 這樣的編譯器難度太高太高,我們學習編譯原理的目的也不是去造這樣的輪子,而是為了更好的理解和運用編程語言。

    5、體系結構&組成原理

    上面說的都是軟件層面,體系結構則是關于計算機是如何工作的,你會了解到典型的存儲程序計算機是怎樣運轉的。

    記得南大有個老師說過 “我們不是學習使用計算機的,而是學習如何造計算機”,雖然造計算機有點夸張,但是至少我們得了解下計算機的實現原理,了解下代碼是怎么被 CPU 執行的吧?不然其實你會很困惑,明明一堆英文字母,怎么在 CPU 這種電路上跑起來的,我大一學 C 語言就百思不得其解,直到后來學了組成原理和數字邏輯。

    我們說計算機中一切都是 0、1,0、1 又是通過高低電平來表達的,通過與、或、非等邏輯門電路來表達二進制的數值運算,再將這些簡單的電路集成在一起,就形成了 ALU 等具有運算能力的處理器。

    你會看到一條指令是如何被CPU執行的,CPU 從內存或 Cache 中取出指令,放入指令寄存器,并對指令譯碼。譯碼就是按照指令的編碼規則,將指令拆分成一系列的微操作和操作數。然后發出各種設備控制指令,執行微操作。這樣就完成一條指令的執行。

    我們說學完編譯原理,能夠明白寫的英文代碼是如何被變成二進制指令的,學完操作系統能搞懂二進制程序是如何被鏈接在一起,又是如何被操作系統加載、執行的。而組成原理則會告訴你二進制指令是如何控制 CPU 跑起來的,我們的操作系統本質上也是一個二進制的程序。

    當你理解了計算機存儲層次結構,理解了多級 Cache,你就會通過優化數據訪問方式來編寫出速度更快的程序。

    你會學到底層體系結構對 C 這些語言的棧幀和參數傳遞的支持,參數是如何被傳遞給另外一個函數的?函數的返回值又是如何拿到。

    這是學習組成原理對于寫代碼的意義。

    學這些到底有什么意義?

    你會完整的看到寫的代碼如何變成二進制指令,又是如何去控制各種門電路,最后變成屏幕上花花綠綠的程序的(當然這里可能還需要學習顯示器的原理),這就是我們常說的“基礎”和“原理”。

    并且計算機體系結構中的很多思想,是能夠廣泛運用于現代軟件開發的,比如 CPU 的多級 Cache 思想,就是我們現在服務器開發中提高并發度常用的緩存技術,包括緩存的替換策略等等。

    當計算機對你不再是黑盒,你了解寫下的代碼到執行的每一步,而這也將成為你以后的核心競爭力,作為科班畢業生不應該只會使用 Java、Redis、Mysql、Spring 來寫各種網站。

    如果讀者里有半路轉行或者從培訓班出來的,也希望你們能夠抽出空余時間去補補這些基礎課,這會讓你在編程這條路上走的更遠和更穩。

    6、數據結構與算法

    為什么把算法放到最后來講,是不重要嗎?相反,它太重要了,所以才讓它來壓軸。

    如果要問我大學什么最后悔?那肯定是沒有從大一就開始好好學算法,去打 ACM。

    現在還在大一、大二的同學還不抓緊機會,別等到以后來后悔。當然,不打 ACM,我們也是能夠學好數據結構和算法的。

    數據結構和算法你能在任何計算機領域里看到,比如在編譯原理中寄存器的分配會用到貪心,死代碼檢測與消除會用到圖論里不可達的知識;操作系統進程、線程調度會用到多級隊列和調度算法;組成原理中 Cache 的替換會用到 LRU、FIFO 等算法;開發必備的數據庫也離不開 B+ 樹、LSM 等數據結構和查找算法。

    很多時候我們需要的算法都被封裝到編程語言的基礎庫里了,以至于很多同學會覺得算法離我們太遠,其實不是的。

    如果不學習算法,連什么時候用 Map(紅黑樹實現)、什么時候用 HashMap 都分不清。

    所以學習算法有助于我們根據應用場景選擇最合適的數據結構。

    日常開發中也一定離不開算法,比如小北最近工作中涉及的某種嵌套 TLV(Tag-Length-Value)結構編碼的解析,就需要用到遞歸、多叉樹等知識。如果不學習算法,那么程序中只能見到大量的 if/else、while/for。。。

    可以說不會算法的工程師一定不是一個優秀的工程師。

    7、為什么我不說計網、數據庫等

    很多人喜歡把計算機網絡、數據庫原理這些也歸為計算機基礎來,我當然也認同,因為一個知識結構完整的計算機科班學生,應該了解這些知識。

    但是我個人是覺得計算機網絡、數據庫無非就是建立在操作系統、編譯原理、組成原理之上的應用層軟件。

    什么是數據庫?沒有數據庫之前你會用文件去存儲數據,但是不方便查找、修改等,數據庫只是提高了這個過程的效率。

    網絡干什么的?網絡就是讓不在同一臺電腦上的程序互相通信,本質上就是進程間通信的手段。

    如果你只是開發單機工業軟件,甚至真的可以不學網絡,只是由于現在大多數程序員都是在互聯網公司工作,所以不管前后端,都離不開和HTTP等網絡協議打交道。

    再次重申:不是計網、數據庫不重要,只是我認為它們屬于構建在操作系統之上的軟件,不劃在基礎之列。

    領域知識

    這個我不敢說太多,因為各個領域我也不太懂。只簡單提一點,拋磚引玉罷了。

    如果你想去騰訊、網易做游戲引擎開發,那么圖形學一定是你繞不開的知識,此外你還得學習渲染管線、著色器、物理、光照等等。

    如果你想去 PingCap 這樣的公司做分布式存儲,那么分布式理論知識一定是你繞不開的關口,包括 CAP 定理、Paxos 算法、Raft 算法、ZAB 協議等等。

    如果你想寫一個數據庫,那么你需要去了解磁盤、索引實現、SQL 解析(編譯原理)、事務、如何用 MVCC 解決讀寫沖突等等一大堆的東西,還得了解一大堆編程語言層面的東西,比如鎖、信號量、并發編程技巧,不得不說造數據庫是一個臟活也是一個累活。

    更進一步你想去做分布式數據庫,那可能還得去學習數據分片的知識,查詢任務如何做,是集中做,還是將邏輯下推給各個節點,如何實現分布式事務等等。

    你說你只想去大廠 CRUD?沒毛病,老鐵!

    那你得熟悉一門編譯型語言(C/C++、Java、Go),理解語言部分底層原理,比如 C++ 你得看看 STL、看看對象模型吧,你不懂什么虛函數表、智能指針還想去騰訊寫 C++? Java 的你得背背 JVM,什么垃圾回收算法吧,你不看看ConcurrentHashMap 好意思說你是做Java的?

    咱CRUD的對象是數據庫吧?那不得學學怎么才能把數據庫用好。用戶通過 HTTP 訪問我們得服務,總得了解 HTTP吧?順帶著不看下 TCP 三次握手、四次揮手你好意思說是學計算機的?

    用戶把錢、信息放咱們這,總得保證用戶數據安全吧?那 XSS、SQL 注入、CSRF 這些常見的 Web 攻擊手段你總得了解吧?HTTPS、RSA、簽名、數字證書這些安全手段總得知道吧。

    雙十一流量太大,老板還讓你必須頂住,那你總得了解下緩存、異步、消息隊列、NoSQL 這些千萬 QPS 必備的大殺器吧?

    看看!要想做好CRUD也不是那么容易滴。

    (上面這段只是換一種方式把做后端的同學要學的知識寫出來,不是吐槽更不是調侃,純屬娛樂。

    技能

    這就很多了,包括 VSCode、Jetbrains 全家桶這些 IDE,文檔編寫 Markdown、Git 等版本管理工具。SSH 遠程登錄、端口轉發,Ngrok 內網穿透等等這些提高你開發效率的工具,都算是技能,這個沒啥好說的,平時用到多學習多積累就好了。

    我只提一點,盡早使用 Linux、類 Unix(Mac)作為主力開發電腦。我大二的時候,就是看了王 ying 的那篇《完全用 Linux 工作》,直接買了個 SSD 套上 U 盤外殼,做了一個啟動盤,后來用了將近一年的 Ubuntu,只有在選課、提交作業等需要用的 IE 瀏覽器的時候才會打開 Windows(這里不得不吐槽學校老古董網站!)

    當然了,我也不是狂熱的 Linux 愛好者,只是單純覺得做開發的話,離不開各種環境安裝、命令行的使用,這點上面類 Unix 系統帶有天然的優勢,誰用誰知道!

    總結

    寫完才發現,這篇文章連篇幅都是「基礎 : 領域知識 : 技能」 接近 7 : 2 : 1。

    這也是我推薦你在大學期間分配學習時間的比例,至少學習基礎知識的時間不少于 50%,當然,這些東西你都學完了那可以去找找感興趣的方向專研一下。

    千萬不要大一、大二一上來就扎進 Java Web、Python 爬蟲這種東西,這些可以學,但不是重點。

    這篇文章由于篇幅限制,沒有寫到具體該如何去學,有哪些好的資料,我準備把這個單獨再寫一個 《How 篇》,持續關注我喲~

    那么如何檢驗學得如何呢?

    想必你一定聽說這個計網面試題:“從 URL 輸入到頁面展現到底發生什么?“

    這個問題換個表達就是「一個數據包是如何發送到另外一臺電腦的」。

    如果你能完整的說出整個過程,那么計網你一定是學懂了!這就是為啥面試這么喜歡問這個問題的原因。

    那么我們依葫蘆畫瓢提一個問題

    “從代碼被寫下到程序運行起來到底發生了什么?”

    這個問題回答得越詳細越好,基本上能說清楚了,你就理解了編譯原理、操作系統、組成原理這三座大三。

    這個問題也放在這,后續發文總結,請持續關注編程指北哦。

    唉,當年要是有這么個貼心學長告訴我這些,也不至于在 Andorid 開發、Java Web、Python 爬蟲這些玩大半年啊。。。

    不過還好后來自己意識到了基礎的重要性,開始學匯編、重學C、搞 mini os、看 Linux 內核實現原理,最后成功的把頭發掉了一把。。。

    最后想送給你一句我挺喜歡的話:

    萬丈高樓高樓平地起,勿在浮沙筑高臺。

    點分享

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有