你想告訴準程式設計師些什麼?

2020-08-10 14:23:28

 

關於大學學習,我想告訴你:

1. 不要擔心自己沒有計算機基礎,不用擔心自己跟不上。

我剛上大學的時候也很羨慕那些高中就學習了程式設計的同學,看着他們瀟灑流暢地敲擊鍵盤,而自己因爲一個小小的回圈語句就折騰了半個晚上。但等我畢業了再回頭看,其實當時大家都還是在一個水平線上,都很基礎,都啥不會,都是從頭在學。

2.大學知識不是無用,只是它的重要性要在你工作很多年才後體現出來。

我大學時候因爲覺得用不上,不影響解決問題就沒有去認真學的演算法,以及覺得很難搞懂就沒有去搞懂的數據結構,在我工作很多年後仍然還得從頭學起,因爲很基礎,因爲常用到。

3.數學很重要,也許這是你最後一次有大把的時間來好好學習數學。

等你參加工作了想回過頭來惡補,很難。你的工作不允許,你的家庭不允許,歸根結底你的時間不允許。工作是你靠知識賺錢的時候了,沒有太多時間留給你學習知識。

4.對程式設計師來說,學好英語真的很重要。

能否使用英語查閱資料,是區分技術人員水平的重要指示之一。寄希望於「有人遲早會翻譯成中文」的人是愚蠢的、是會被淘汰的。而且永遠拿着二手資料,你如何把控風向,緊跟潮流?

5. 能大規模商用的技術,都不需要智商,否則這種技術就不可能規模化。

所以準程式設計師們一定要時刻警醒自己,「會一兩門程式語言只是職業的開始」,持續學習,深入學習纔是你的出路。

6. 學會使用百度和Google

上面提到的那些你看不懂的東西,在程式設計領域太常見了。不只是現有的,還包括每年新出現的。很多你的同事、你的老師可能都不瞭解。但是Google和百度瞭解,前提是你學好英語,所以不要忘了上面的第四點。

7. 理論基礎很重要,入職之後的差距就是這些看上去無用的基礎知識拉開的。

數據結構,操作系統原理,PC原理,數據庫原理等……這些基礎知識決定你在技術上能走多快和走多遠。如果你不知道應該學習哪些基礎知識,也不知道該如何提升自己的話,下面 下麪這篇文章推薦給你,裏面有很詳細的方法論

程式設計師是不是吃青春飯我不太確定,因人而異。但有一點我能確定,程式設計師是個靠技術吃飯的職業。

所以不要年紀輕輕就聽信什麼「工作日上班,雙休日好好休息就夠了」這樣的話。乘着年輕磨礪技術纔是王道,不然在程式設計師這個後浪一波比一波洶涌的職業裡混,你想吃青春飯都吃不了幾年。

不過,想提升是一回事,如何有效提升就是另一回事了。我工作近十年,也帶過不少實習生、應屆生,很多年輕人真的很努力在學,加班加點工作賣力,但也就是差點火候,還是方法不對。

下面 下麪我從輸入和輸出兩個方面來講講程式設計師如何利用週末來提升自己。

首先你得明白,一個人的能力就像一個池塘,不斷的輸入又不斷地輸出,水池的容量以及水的品質決定了輸出的高效與否,輸入大於輸出,你的池塘就會不斷擴大,換句話說你會的技能就越來越多,只輸入不輸出,你的池塘就是一灘渾濁不堪的死水,一實操就bug滿屏。

所以想要提升自己,就得同時做好輸入和輸出這兩塊。而輸入又在輸出之前,要想提升自己,首先就得做好輸入,學習更多的深度知識。

根據我與很多同行交流後得出來的結論,程式設計師要想學習效率高,學習效果好,只需要做好下面 下麪兩點最基礎的事情:

·學習基礎知識

·鞏固基礎知識

其中學習基礎知識,又有兩點要注意的:找對方向、用對方法。說的更直白一點就是學什麼以及怎麼學。

學什麼?

首先要將基礎打牢固,最基本的演算法和數據結構一定要滾瓜爛熟,拿起來就能用。

比如下面 下麪這些個演算法和數據結構型別就一定要熟練掌握。

10個演算法:遞回、排序、二分查詢、搜尋、雜湊演算法、貪婪演算法、分治演算法、回溯演算法、動態規劃、字串匹配演算法。

10個數據結構:陣列、鏈表、棧、佇列、雜湊表、二元樹、堆、跳錶、圖、Trie 樹;

不要小瞧了這小小二十組詞,展開了去學,怎麼都得花你個一年半載,例如單單排序演算法就又可以分爲以下十種:

然後,當將這些基礎知識吃透了之後,注意是吃透,至少得做到要用到的時候就能直接用不用回去再翻書,你就可以去學習一些更深入的內容:

比如:

·程式設計框架是如何運轉起來並輸出「Hello World」的?

·如何讓自己更正規,更有章法地使用Mysql呢?

·Key、List、Hash、Set、ScoreSet各自的使用場景有何不同?

·主流的程式設計框架都和設計模式相關,那他們有沒有共通性?

當你把這些問題想清楚了的時候,你的程式設計師進階之路就走了一半了。

 

怎麼學?

每個人的學習方法都不一樣,有的人喜歡邊做專案邊學習,有的人則喜歡學一段時間做一個專案,有的人喜歡看書學,有的人喜歡看視訊學,這些都不是問題,重要的是找到適合你自己的。

但下面 下麪這幾點,最好還是不要去做了,因爲我帶了這麼多人,敢這樣做的都是事倍功半,結果慘不忍睹。

1.一味的對着別人的程式碼去敲。

剛開始不會做只有跟着別人敲,這不是問題,問題是跟着別人敲了之後你要自己理解自己記憶把它變成自己的東西。照着別人程式碼敲一遍兩遍哪怕三遍,除了讓你看得仔細點,練了打字外並沒有其它任何幫助。

因爲模仿復現不是關鍵,思考纔是關鍵。你要能做到思考學習別人思路後,脫離書本和部落格,完全自己實現功能。只有這樣,你的學習纔是有效的。

2.想着一口氣吃成個胖子

這一塊的情況稍微少見,但也不是沒有,有的人急於求成,學習只學個大概只求個會用,沒有做到知其然還知其所以然。

一個典型的例子,我兩年前帶的應屆生,北京一所高校來的。當時他做的那部分出了點問題,我就推薦了一本書給他,讓他看完後把這個問題解決,因爲不是很急,我說一個星期搞定就行了。結果兩天後,他就跑過來跟我說書看完了,問題也解決了。我問他怎麼做的,他說他看了個大概後直接照着書上做了。

技術這玩意兒,不是看了個大概能照着做就會了,一口氣吃不成個胖子,必須得紮紮實實地把事情做好。所以不要試圖一次性解決所有問題,這裏給個建議:可以將每天的學習過程拆分成小塊,分階段學習,這樣的效率會更高些。

說完了第一點如何學習基礎知識,接下來說說第二點如何鞏固基礎知識。方法千千萬,最有效的我認爲還是刷題,有方法的刷題。

下面 下麪這個刷題方法很普通但也很實用,推薦給你:

第一遍:可以先思考,之後看參考答案刷,結合其他人的題解刷。思考、總結並掌握本題的型別,思考方式,最優題解。

第二遍:先思考,回憶最優解法,並與之前自己寫過的解答作比對,總結問題和方法。

第三遍:提升刷題速度,拿出一個題,就能夠知道其考察重點,解題方法,在短時間內寫出解答。

在這裏,給大家推薦兩本書還有一些學習網站,能夠讓大家學得更輕鬆些。

書:

1、《程式碼大全》激發你的思維並幫助您構建高品質的程式碼。

2、《程式設計師修煉之道》全面闡釋了軟件開發的許多不同方面的最佳實踐和重大陷阱。

網站:

1. GitHub — 開發者最最最重要的網站:https://github.com,能學習但不只是學習。

2. W3school — 最適合新手的網站:https://www.w3school.com.cn/:免費而且全面。

3.實驗樓 — 一個線上程式設計學習網站: https://www.shiyanlou.com/courses/,很方便實用。
4. Code School — 一個英文學習網站:https://www.pluralsight.com/codeschool,支援分階段挑戰。

講完學習基礎知識鞏固基礎知識,咱們就再回到咱們剛開始說的那個池塘,現在水的輸入講完了,池塘裡有點東西了,但只進不出還是一潭死水,接下來就係統性的講講如何輸出。

三種方法:

1.做一些實操性強的個人專案,自己練練手

田納西大學助理教授奧斯汀·亨利結合自身經驗,給出了一份「程式設計師都應該嘗試的挑戰性專案」清單,包含下面 下麪六個專案,我之前做了一遍覺得還不錯,推薦給大家:

·文字編輯器

·2D遊戲-太空侵略者

·編譯器-Tiny BASIC

·迷你操作系統

·電子表格

·電子遊戲機模擬器

每一個專案都存在不同的挑戰,比如文字編輯器就要求在不使用GUI框架中內建的文字方塊元件的情況下,搭建支援遊標移動、選擇、插入和刪除操作的文字方塊並將文字文件儲存在記憶體中。

如果你能解決掉這些專案中的這些問題,然後把專案獨立完整的做出來並且執行成功,你的能力肯定能再上一個臺階。

2.寫技術文章

大家想必都知道費曼技巧,這也是其中的一種應用了,把你自己弄懂的東西教給別人,讓別人也能看懂,在這個過程中你肯定還是要把一個完整的專案給做出來的,一整套下來,你會將自己理解的東西掌握的更透徹更深入。

也算是一種不錯的實操方式了,能讓你的基礎更加牢固。

3.接一些開發兼職

這是三種方法中實操性最強的一種了,沒有之一。

而且不用說,這也是最快最有效的方法了,畢竟程式設計這件事,光有理論是不夠的,動手實踐纔是關鍵也是最終目的。

但兼職也有很多坑很多小門道,你首先得注意專案是不是靠譜,像那種沒有需求文件的就不要接了。
 

關於畢業工作我想告訴你:

1.提前關注雲端計算、docker、微服務、Devops以及Baas技術。

這些你現在可能看都看不懂的技術或者思想,可能會改變5-10年後的IT業界,比如雲計算會幹掉不少傳統IDC運維,Baas會幹掉不少後端開發。

2.做一個程式設計師,而不是做一個碼農。

IT是工科,不是理科,和IT行業相似度最高的行業是蓋樓房。真的,相似度相當驚人。而碼農的工作和搬磚沒什麼區別,就是東搬輪子西拼湊,哪裏漏水修哪裏,會鋪個地磚和個水泥,就能把房子搭起來。和工程師的區別在於,搬磚工人是拿不出建築圖紙的,但工程師可以。碼農是搞不定專案方案的,但程式設計師可以。

3. 年紀輕輕除非是迫不得已,千萬不要進傳統公司的僞網際網路專案。

雖然事兒少,福利好,但是混日的子也多,你和老油條們摸魚一兩年,哪天專案突然被裁掉了,他們有行業積累可以跳槽,而你再出社會,完全沒有競爭力。所以新手程式設計師入職,能去大廠就去大廠,不能去大廠也一定要找一家純網際網路公司入職,創業公司也好,中小型企業也好,反正要有現成的專案打磨你的技術。

4. 一個有水平的程式設計師,應該花80%的時間做程式碼設計、畫時序圖,畫UML圖、剩下20%的時間寫code和debug;菜鳥程式設計師的這個比例恰好是反的。

用一句話來說,就是不論這個需求有多緊急,你都一定要「想好再動手」;而「想好」的標誌就是設計文件寫好了;文件一旦寫好,寫程式碼就是純粹的無腦工作而且不容易出錯。

5. 公司不是學校,而是你創造財富,實現價值的地方。

你可以在工作中學習,但你不能放下工作然後去學習,除非你的工作已經做完了。除此之外,還有一點要強調的是,不要只在工作中學習。工作能帶給你的是經驗、是實操,而基礎知識以及前沿理論知識只有靠你自己下班後來學,這也是你與其他人拉開距離的時候。

 

工作與學習之外,我想告訴你:

1.雖然技術是程式設計師的根本,因爲沒有技術你就沒有錢。但是也一定要記住,技術並不是你的全部。

因爲你的身體你的健康比錢更重要,也因爲你很難搞一輩子技術。所以,早點開始健身、早點爲你的職業發展做規劃。

 

2.通過技術兼職來接私活賺錢是可行的,但是一定要找靠譜的平臺。

常見的方式有技術論壇、朋友推薦、外包平臺。如果你不知道該如何選擇,下面 下麪這篇文章就一定要看看,裏面有我做兼職這麼久總結的三接四不接以及一些方式分析平臺推薦。

一、線下自有渠道

這一點包括兩方面:一個是親友介紹,一個是峯會自薦。

我之前接過不少前同事介紹的衆包,還有參加各種網際網路峯會與人聊天介紹自己偶然獲得的專案,好處是很省時省力還不用擔心被扣錢,因爲沒有太多的人跟你競爭,大家也都是行內人,水平怎麼樣很容易確定;壞處是有就有沒有就沒有非常不穩定,而且因爲是朋友偶爾會砍砍價啥的。

這類渠道隨機性太大,碰上好專案就很舒服,沒碰上就沒辦法。建議大家當作自己找兼職的一個補充就好。

二、線上技術論壇

這一類指的是我們有意識地去程式設計師聚集的論壇上發帖,去推廣自己,通過 PR 的方式來獲客。這類線上論壇比較出名的有:CSDN、部落格園、程式設計師客棧的技術圈、問答社羣 SegmentFault,還有程式設計師「灌水」社羣 V2EX。

CSDN大家應該都很熟悉了,我不多說。這裏我主要講一下程式設計師客棧的技術圈,這是一個程式設計師比較集中的灌水社羣,可以提問、發帖、招聘等。經常能看到一些團隊發佈的兼職匯聚貼。


在這些論壇上,還有一種方法你可以找到兼職,就是你可以單獨開一個貼文,介紹一下你的技術優勢、時間優勢、專案優勢,說明你最近想接哪類專案,如果正好有需求方需要的話,對方就會聯繫你。

三、垂直衆包平臺

這類平臺大約是從 15 年開始出現的,對於剛接觸兼職的程式設計師來說比較友好。因爲相關規定比較完善,能保障雙方利益。雖然偶爾還會有爭端,但是相信我,比你自己接好太多了,能避免很多剛做兼職時得踩得坑。

這方面有很多同類型的平臺,一般都專注於 IT 衆包領域。職位內容也比較全面,像常見的 UI 設計、產品設計、程式開發、產品運營等職位都可以找到需求方,其中又以程式開發和 UI 設計的需求最多,可以提豐富又穩定的兼職需求來供我們選擇。

                                                                         

分享一篇貼文給大家,希望對大家有所幫助。推薦大家學習的網站:「善知軟體實訓基地」  線上學習視訊

https://www.bilibili.com/video/BV1RJ41147qd?from=search&seid=6170019529066609126

https://www.bilibili.com/video/BV1vJ411C7wZ?from=search&seid=4420382012653239507