有乾貨、更有故事,微信搜索【編程指北】關注這個不同的程序員,等你來撩~前端
開局兩張圖,剩下全靠吹了。node
上面這兩張圖即是寫這篇文章的起因。git
對話框的另外一邊,是一位大二計算機科班在讀的小姐姐,看似平靜的文字背後透露着迷茫與困惑,還對將來的焦慮。程序員
透過屏幕,彷佛看到了大一時的本身,不會裝環境、不知道怎麼編譯,報錯也不會解決,更不知道除了計算水仙花數、打印乘法口訣表...還能寫些什麼。github
感同身受讓我以爲有必要認真的好好回答一下(實際上是由於這是小姐姐問的😝,也算是對大一時的本身一個隔空對話。web
作公衆號短短這一個多月,我在後臺看到過很多相似問題的,每次看到學弟學妹們這樣認真又略帶迷茫的提問,實際上是比較有壓力的。面試
怕本身不可以站在他們的境地去思考問題,搞成了「B」乎似的回答,也擔憂本身的回答不能幫到他們,甚至在某些方面對他們產生誤導。算法
因此通常我都是選擇回答比較政治正確的那種,好比:shell
「加油,你要多去實踐,xxx」數據庫
「嗯嗯,你要多去看書,balabala」
「剛開始都是這樣的,你多堅持一下呢,xxx」
...
怎麼說呢,這都是正確的廢話,誰都知道要多看書,要實踐,要去動手寫代碼。
有時候想回答得更細緻一些,可是迫於各類緣由,也沒時間去挨個的回覆。
但此次學妹特意打了很長一段字,我看到了她想要快速適應計算機學習卻又不得其法的迷茫,也許個人回答會對她有所幫助呢?
所以我讓她描述得更加細緻一點,也很好針對性的提出一些建議。
不過首先申明下,本文主要是以回答學妹的問題爲主線,面向的對象是大1、大二以及自學還未找到合適的學習編程方法的同窗。
若是你已經有了本身的一套方法論,或者說已經工做了,那本文對你幾乎沒有參考價值,建議直接拉到末尾點個贊~
可能有小夥伴沒細看聊天截圖的內容,我在這裏再貼一次學妹的問題:
下面是我抽出來的一些問題:
一、只會像高中同樣跟着課程學習
二、怎麼能夠脫離課本和教學視頻本身編寫一個小項目?
三、停於理論,不知道如何實戰
四、就算跟着教程安裝軟件,搭配環境幾乎每一步都會有這樣那樣的錯誤
五、知識遺忘得快,理論沒有造成體系,本身計算機的學習只侷限在刷了一些慕課上的題,作了學校要求的實驗
六、學完一門課程不知道能幹什麼
七、畏難情緒嚴重
八、焦慮、擔憂找不到工做
首先,看似抽出了不少條的問題,可是我把全部問題都歸爲一個,那就是 「如何提升編程能力」。
只要編程能力、實戰能力提升,上面一長串的問題天然也就不成問題了,更不用擔憂找工做的問題。
因此今天就來聊聊如何提升編程能力這個話題。
要說提升,總得先明確下什麼是 「編程能力」 吧~
常常能看到大V、前輩們說,你要多寫,要多練,提升本身的「編程能力」,可是編程能力究竟是什麼呢?
在我看來啊,所謂的編程能力其實說到底就是用代碼解決問題的能力,不管是 Leetcode 上的仍是現實世界的問題。
可以從問題自己或是業務邏輯提煉出解決方案,而且用代碼去實現,編程就是在幹這樣一件事:
現實世界的問題 -> 抽象出解決方案/建模 -> 計算機語言表達
能夠看到,寫代碼只是最後一步,而咱們經常說本身不會寫,真的是不會寫代碼嗎?
這讓我想起了之前英語老師說的:
「不少同窗說英語做文說寫不了幾句就寫不下去了,可是真的是英語學得差嗎?我看未必,大概讓你用中文寫,也寫不上幾句」
是啊,英語做文寫得很差,不少同窗下意識的以爲是本身英語自己沒學好,確實有這個緣由。
可是更本質的緣由或許是你語言表達和組織能力的問題,也就是讓你用母語寫,也不必定能有條理的寫上一段文字。
那回到編程這裏,不會寫代碼,也許是你連解決問題的思路都沒想明白,就是說你的腦海裏沒有造成「第一步該作什麼,第二步該作什麼」這樣的流程。
這實際上是最重要的,編碼實現反而是相對簡單的事情。
不少大廠,通常都是高級工程師或者架構師進行領域設計、架構設計,初級工程師進行編碼實現各類接口。
說到這,我又想起了最近工做上的事情。
因爲時間緊迫,我被 leader 安排去了支援隔壁部門開發,可是他們那裏的不少業務背景我一點都不知道。
對方對接的人讓我去模仿 xxx 模塊寫,我看了 xxx 模塊兩天,愣是沒寫出個啥來。
過後,我在想,爲啥會這樣呢?是我編程能力太差嗎?
也許是吧,可是更重要的緣由是,我不理解業務背景,因此個人腦海裏沒有要實現這個需求的流程圖.
檢查參數、鑑權、認證、簽名...... 這些流程不清晰,表現出來的形式就是,我不知道代碼到底該先調哪一個接口,再作什麼。
心中沒思路,天然無從下手。
因此其實編程的核心就是,你須要在心中對整個實現流程有一個大體的思路,而後用代碼去一步步的實現。
在實現過程當中,你會遇到不少細節問題,好比數據結構的選擇,用 set 仍是 list,存儲結構的選型,以及如何 bug free的實現。
更進一步,怎樣寫出高性能、易讀、易維護、易擴展高質量的代碼,固然這都屬於編碼能力了。
嗯,我回過去看了本身上面的一翻分析以後,我以爲......分析了個寂寞,說的太尼瑪抽象了,我 TM 就想知道到底怎麼提升編程能力!
好,接下來我就具體一點,不搞這些虛頭巴腦的東西了。
提升編程能力,我本身總結了如下幾點:
來,先上第一點,關於作項目,這也是學妹的痛,不知道如何去開始一個項目。
談到這點,對不起,我又想講本身的經歷了,有點長。。。
learning by doing
是的,咱們都知道編程是一門實踐的學科,不動手永遠學不會,看懂了和學會了之間差了上萬行代碼。
或者說: 看懂了 + 上萬行代碼 = 學會(此公式未經證實,純碎本身拍腦殼想的
剛學完一門語言,想必你們都想作點有用的東西,而不是每天寫練習題,可是呢,又不知道從何下手,尤爲是 C 語言。
我大一上完 C 語言課,就處於這種狀態,可是我隔壁一個室友就不同的。
他在學習 C 語言的過程當中,剛學到動態內存分配(malloc),就去摸索着寫貪吃蛇、坦克大戰,並且完成度都挺高的,那時候是咱們眼裏妥妥的大神。
可是大神和我上的課,學的東西都徹底同樣呀,何況都是上了大學纔開始接觸編程,爲何差異這麼大呢?
以致於那時候,我和學妹同樣,經常懷疑本身沒有編程天賦,以爲別人天生就是這麼強。
這種狀態一直持續到大一下,那時候剛學完 Java,而 Java 也比 C 友好了很多,因此總想寫點什麼。
因而本身就選擇寫一個相似 QQ 的聊天工具,其實功能就很簡陋,就是一個簡單的 GUI + Socket 編程,而後在加上用戶信息管理就完了。
可是,當我用這個簡陋的軟件,分別在室友和個人電腦上跑起來而且成功發送消息的那瞬間,我以爲個人編程世界被點亮了。
原來編程這麼好玩,原來我也能作一些有趣的東西!彷佛找到了一絲編程的感受,但還說不上究竟是什麼感受,畢竟這個程序總共也就幾百行。
緊接着,趁熱打鐵,我又寫了一個聯機五子棋,實現上依然是 GUI + Socket 傳輸數據。
可是寫這個又遇到了不一樣的問題,好比棋盤在個人實現裏是一個 N*N 的數組,棋子是用對象表示,對象裏有座標、顏色這些屬性。
當時我就疑惑了,當一方落子後,該怎麼把棋子對象經過網絡傳輸給對方呢,再從網絡接收的數據恢復到對象?
起初本身的想法是手動的把對象轉換成字符串,而後像聊天工具同樣發送給對方,好比:
{x: 12, y: 13, color: black .......}
。
這種作法沒問題,可是總感受不夠優雅完美,因而上網一番搜索以後發現,原來我想的這個就叫「序列化」和「反序列化」。
而且在 Java 裏直接實現 Serializable
接口就行了,甚至能夠直接使用ObjectOutputStream
類就能完成序列化和反序列化對象。
這些問題在如今看來,根本就不是問題,更像是「常識」。甚至序列化這塊,還會選擇一些兼容性更好、性能更高的協議,好比 Protobuf、Thrift、Avro 等等。
可是對大一時的我來講,在這個過程當中不斷的遇到問題而且去解決,就是實打實的編程能力上的提升啊。
在我解決掉一系列問題以後,順利的和隔壁室友用本身寫的聯機五子棋對戰了幾局,這個五子棋還支持很多諸如悔棋、暫停、自動判斷輸贏等功能。
界面風格和下面這個很類似(這是網上搜的)
可是因爲當時沒有存 Github 的習慣,代碼在換電腦以後沒能留下來。
經過寫這些項目,我像打通了任督二脈同樣,不是學了什麼厲害的算法、也不是高深的設計模式、更沒有分佈式這樣高級的東西。
那是什麼呢?
我感受到編程就好像搭積木同樣,基本的函數、庫、組件就是一個個的積木塊,寫的代碼就是膠水。
只要咱們心中有設計圖紙,那就能經過膠水把這些積木搭建成想象的模樣,缺乏什麼積木塊,用到的時候再去搜索就好了。
在程序的世界,只要你想,你就能。
這段時間大概是我編程能力提高最快的一個階段之一。
關於這個五子棋,還有個小插曲:
我寫的不是聯機五子棋嘛,而後啓動的時候輸入對方的 IP 和 Port 就能連上對戰。
後來,我找了一個在其它城市上大學的高中同窗,讓他和我一塊兒玩五子棋,可是呢,我傻乎乎的讓他用 ifconfig 查看本身 IP 後告訴我,而後我在這邊鏈接。
那個 ip 呢,大概長得像 192.168.1.xxx
,熟悉的同窗都知道,這個就是局域網內使用的 IP 了,並不是公網上的 IP。
局域網內的 IP 只能在內網才能使用,因此我用這個 IP 是永遠連不上的他的電腦的。
可是那時候我才大一,沒學過計網,根本不懂這裏面的原理。
爲啥我和室友能連上呢(由於在一個局域網)?爲啥和其它學校的同窗就不行?
別看如今這個東西在我看來是常識,但我那時候是一點計網知識都沒,就是硬着頭皮學的 Socket 編程,去理解 IP 和 Port。
那是怎麼解決的呢?
固然是找谷歌呀!
在網上一番查詢後,大概明白了,若是想讓不一樣局域網內的主機進行 P2P 通訊,須要一個公網中轉服務器輔助進行 NAT 打洞。。。後來,我就又去嘗試 NAT 打洞了,其中細節就再也不描述了。
其實把我我的編程經歷上寫這麼多,就是想展示我是如何一步步去實踐的,遇到了什麼問題,又是怎麼解決的,把這個過程展示出來。
你看我沒學任何計網知識,還不是經過邊學邊用,完成了網絡相關的項目。
因此你離項目只差一個開始。
說到這裏,很多同窗又會說,我知道要多實踐、多動手,道理我都懂。
可我仍是不知道如何開始去寫一個五子棋、貪吃蛇之類的東西。
好,那我就要問問你了
小北:爲何你學了 C 語言仍是不會寫貪吃蛇呢?
學妹:老師沒教我貪吃蛇如何在 C 語言中表示,也沒教我如何讓畫面動起來,更沒教我如何繪製 GUI ,因此我不知道怎麼作。
這應該是大多數同窗最典型的問題吧?
那咱們以貪吃蛇爲例拆解一下,看看是如何從問題到代碼的。
首先,貪吃蛇是一個個的節點組成的,節點確定有橫縱座標吧?一個個的節點組成了一條蛇,那天然應該想到鏈表吧?
蛇還有什麼屬性?當前移動的方向
還要食物位置吧? 那這些屬性在 C 語言中用結構體表達出來就是這樣:
typedef struct node{
int x;
int y;
struct node* next;// 單向鏈表
} SnakeNode;
typedef struct snake {
SnakeNode *pHead; // 蛇頭
SnakeNode *pFood; // 食物
int direction; // 方向 0-3 依次表示:上、下左、右
...
}
複製代碼
接下要考慮的就是如何去繪製蛇,這個簡單呀,就把整個鏈表從頭開始把每一個節點打印出來。
每一個節點能夠是一個圓點,也能夠是方形。
那如何讓蛇動起來?所謂的動,其實就是不斷的將蛇打印出來,而後又清除。
而且不斷的根據移動方向更新蛇的位置,只要這個過程夠快,快過人眼可以分辨的幀率,那看起來蛇就像是在連續的動同樣。
而後這個過程你還要去考慮如何檢測碰撞,如何判斷吃到了食物,還要隨機產生食物。。。 這些東西首先你得想清楚邏輯,代碼實現其實if、else 、for 就足夠了。
作項目的過程總會遇到不會的東西,也會遇到問題。
可是要相信,全部的問題在你以前基本上都已經有人遇到過了,只須要把問題準確的描述出來,而後去搜索引擎上搜就確定能找到解決的線索。
若是你要等學會全部東西,纔去開始作項目,那估計等到本科畢業也沒機會。
本科上的就那幾門課,Java/C/C++、操做系統、計網、編譯原理、離散、數據結構......
可能沒有學校會單獨開一門課教你 Java Web、Python 寫爬蟲等等。
學完這些理論課,等到畢業,你會發現,依然好像什麼都作不了,因此說,要動手,趁早。
而且理論上,學完一門語言,掌握了數組、鏈表、 if、for、函數這些編程最基本的概念,就有能力去實現一些諸如貪吃蛇、五子棋、掃雷這樣的小玩意了。
這種經過項目去學習,以解決問題爲導向的學習纔是更加精準和高效的。
課堂上的學習大多數是老師灌輸知識、學生記住,而後考試就能拿高分。
實際上有多少知識能轉化爲解決問題的能力呢?
很差說。
仍是那句話,編程就像搭積木,學完基礎的,積木塊都給你了。
你能搭出房子、車子、仍是火箭這全靠本身。
學會用工具,更要用好的工具。 什麼是好的工具?
諸如 VSCode,Github、Stackoverflow、Google、知乎、Jetbrains 全家桶都是不錯的編程工具,有的提升生產力,有的能解決問題。
都 2020 年了,就不要在機房裝着 VC6 寫練習題了。
不要等到大一結束了,還沒上過 Github,更不知 issue、pull request 爲什麼物。
計算機專業的學生,若是還在用百度搜索技術問題,送給你一段陳皓(左耳朵耗子)前輩的話:
固然,在無法使用谷歌的狀況下,百度仍是能夠用的,可是這對計算機專業的同窗,不該該是一個問題。
不少時候,你把遇到的問題準確的複製到 Google/Stackoverflow 搜索框,大概就能找到答案。
而百度會將你帶向培訓班的課堂,嘿嘿,刺激不。
如今處於信息大爆炸的時代,互聯網上充斥着各類博客、學習資源,這是對學習者最好的時代。 可是資源太多,就存在一個選擇的問題,在這裏我給你幾個建議:
- 把網盤裏屯的那 500G 視頻/資源 刪掉,你永遠不會去下載來看的
正所謂,收藏從未中止,學習從未開始,當你再也不習慣的收藏資源了,你就成長了。 最好掌握獲取/搜索資源的方式,本身須要什麼資源再去搜就完了。而不是讓資源白白的佔據你的網盤。
- 當須要學習某個東西的時候先去知乎/Google 搜索 「xx學習路線」
而後根據高贊/優質回答,選取大 V 們都提到的資源,這大概是這個領域比較經典的,而後去搜集資料,開始學習。
B站、mooc、網易公開課、Coursera等視頻網站上有不少優質免費的課程
答應我,不要再被那些關注送 500 G 學習資源的騙了好嗎?資源都在網上公開着,直接打開 B 站就能看,不香麼?
學應用框架,官方文檔是最適合入門的,而且不少都提供了「快速入門」的指引
好比 Vue、Hadoop、Requests 這些官網的指引都很是的清晰易懂,真的不要再去看七零八碎的博客,博客的定位應該是補充。
少看博客,多看書
不少博客其實就是博主本身讀完書,而後複述一遍的筆記,你再去看他的博客那就是等於學二手知識,他的高度就決定了你的高度。
固然有些優秀的博主可以概況性的總結,或者把某些原理講得特別清楚,這是值得看的。
總的來講,系統性的看書是你成長最快的方式。
大學的學習,學的絕非是僅僅的知識,最應該學會的能力是「自學」。
等走上工做崗位的時候,你便會發現這個能力有多麼重要。
初入職場,在公司,沒人會像學校裏的老師那樣,手把手的教你。
就算有安排導師,也是扔給你一堆的文檔和資料,本身去學習,而後開始上手實際項目。
這個過程大多會比較痛苦,至少我這幾個月是這麼過來的。
說到這,我忽然想說下我認爲的「自學的能力」,由於在程序員這個羣體中,無論是科班學生仍是野生程序員,自學都是必不可少的。
那「自學的能力」又究竟是什麼呢?
我我的體會有如下幾點:
1. 明確你學習的目標,好比我要學 Java Web、IOS 開發、機器學習等等
2. 瞭解該領域包含了哪些子模塊,好比 Java web 須要學 Java 語言基礎、JVM、數據庫、計算機基礎等
3. 掌握這些子模塊的學習順序和依賴路徑,也就是先學什麼,再學什麼
4. 搞清楚這個方向有哪些入門、進階的學習資料
5. 按着學習路線,開始學習一個子模塊
上面這個過程,不斷的遞歸下去,直到拆分出一個比較小的學習目標。
好比我要學 「Java web」,那這裏面可能包含了Java 基礎、Netty、JVM、Spring、MySQL、Redis 等等。
那 Java 基礎又能夠進一步分爲 基礎語法、面向對象、異常、集合、IO、反射等。
分到這裏,你就能夠開始去找資料學習了啊。
好比先安裝 JDK,而後寫 Hello World,而後慢慢開始刷書或是刷視頻......
這裏我用了一個定語「小而美」,小是指代碼量少,最好就幾千行,這樣咱們可以充分把控,美則是指代碼實現寫得很優雅。
咱們都知道提升審美能力很重要的一環就是多看美的東西,好的設計。
那寫代碼也是同樣的,本身學完基本語法,寫出來的代碼大概停留跑起來的水平。
這時候去看看大佬寫的代碼,你絕對會驚呼 臥槽,還能這樣?
這樣的代碼有哪些呢?
若是你是大一的同窗,我推薦你去看看 Linux 內核中關於鏈表的實現,簡直特麼太妙了,日常咱們定義鏈表不都是這樣嘛
struct Node {
int data;
struct Node* next;
}
複製代碼
可是這個存在的問題就是,每一個想用鏈表存儲的結構體,咱們都得去寫一遍,遍歷、插入、刪除的邏輯,顯然太low了。
那 Linux kernel 中就用宏,在對用戶自定義數據結構侵入性很小的狀況下,實現了其它語言中模板的功能。
相信我,看完,你會學到不少騷操做的,後面找機會寫一下這塊。
又好比學完 C 語言,你會不會以爲 C 中的字符串有點不靈活,那推薦你去看看 Redis 中關於動態字符串的設計--SDS。
這些代碼都不長,也不難理解,可是看完對於提高咱們的編碼能力是有很大幫助的,這就是小而美。
提倡看源碼,不是讓你直接上手就啃什麼 Nginx、Sqlite、Redis的源碼,這些都是幾萬級別的代碼量,通常初學者
即便要啃,我給你說個好辦法,這些東西目前來看,代碼量都是幾萬幾十萬的級別,有點不友好,你能夠去 github fork 下來。
而後回退到第一個 commit,從第一個 commit 開始看起,看到第一個完整的版本。
這個過程也是能學到很多東西的,看看羅馬都是怎麼建形成的。
好了,BB了一大段假大空的東西,最後再回到學妹具體的問題上,挑幾個來具體問題具體分析:
說到底,仍是填鴨式,沒有造成本身的目標和學習路徑。
如何破局?
最簡單的方式,給本身定一個目標,或者我給你定幾個,本身領一個:
若是你作技術崗,上面這幾個基本覆蓋了應屆生找工做的主要崗位,你選一個本身相對喜歡一點的。
至於如何去達到目標?
固然是分解,而後去找 Google 呀,去看看 BAT 這些崗位須要點亮哪些技能,怎麼學才能達到。
記住,目標、目標、目標!!!
沒有目標,你的生活就會是得過且過,知足於上課、作做業、考試、績點這樣的循環。
到了畢業找工做,你會發現面試官好像都不怎麼關注你的績點有多高,他們更關注你的基礎知識和解決問題的能力。
解決問題的能力怎麼體現?
能夠是刷題或者是讓你講你參與的項目,以及在這個項目中你扮演的角色和遇到了什麼題,又是怎麼解決的。
咱們會發現,那些優秀的人,無一不是有着清晰的目標,從如今開始給本身定一個目標吧!
初學者跟着視頻作是頗有幫助的。
先跟着課本或者視頻完成一個項目,記住不是看視頻裏的老師完成,而是你本身要跟着完整的敲一遍!
第二步,不看視頻,根據本身腦海中的流程、思路來逐漸編碼,明確先作什麼,再作什麼。
第三步,改造,或者基於視頻裏的作一個相似但不一樣的項目,好比視頻裏寫的商城,那你能夠本身作個論壇,視頻裏是貪吃蛇,你能夠本身作個坦克大戰,諸如此類。
其實這就是學自行車嘛,先用藉助輔助輪或者別人扶着練習,而後慢慢的下掉輔助輪,本身騎。
千萬不要沒學會走,就想跑了,這樣會摔得很慘。
這個問題,百分之 99% 的同窗確定都遇到過,甚至如今,我安裝一些新環境的時候也會有各類問題。
想起剛學 Java 的時候須要去配置 Path、ClassPath、環境變量這些,可是第一次接觸根本不知道配置這些的做用,也不知道他們的原理。
就跟着博客教程一步步執行,可是常常就會發生,明明都照着來了,仍是跑不通。
那這個時候怎麼辦呢?
第一辦法是從新搜索嘗試不一樣的教程,這個實際上是換湯不換藥,能不能配通仍是看運氣
第二個辦法就是去搜爲何要這樣配?
瞭解以後,你就明白 Path 就是指定了咱們平時在終端使用命令的搜索路徑,ClassPath 則是讓 Java 執行環境找到指定的 Java 程序對應的 Class 文件以及程序中引用的其餘 Class 文件。
當你去了解這些東西以後,再去看博客的配置步驟就再也不是懵的了。
在不瞭解背景的狀況下,咱們只能根據別人的指令一步步走,懼怕和被人有一絲的不同,而致使最後配置失敗。
可是當你瞭解了原理以後,這些博客就只是參考了,你甚至還能夠考慮到你和博主的某些環境是否是有差別,這些差別會對應到步驟中哪裏應該採用不一樣的配置。
這個其實我體會特別深,在我第一次用到 CMake 的時候,起初,我是去抄別人的 CMakeList.txt 文件。
可是當我須要增長編譯依賴或者其它定製化的時候,我就懵逼了。
include_directories、include_directories、target_link_libraries 這些指令,不知道如何去組合達到本身想要的目的。
那我當時是去找來了 CMake 的教程,瀏覽一遍後,我便懂了 CMake 構建的原理,以及各個指令的做用。
這時候,我便有能力基於別人的 CMakeList.txt 去定製化。
這就是我我的認爲「搭配環境幾乎每一步都會有這樣那樣的錯誤」的內在緣由和解決辦法了。
一句話,你是否清楚你所看博客作的每一步操做是在幹什麼,若是不明白。
只是複製別人的命令,那出錯了,確定會懵逼的。
不知道學妹這裏說的遺忘得快的知識是指什麼?
我說一下個人見解吧,我在不一樣文章中都反覆提到了,學習新知識要學會抓主線,把零碎的、非本質的東西瀏覽一遍就行,用到的時候知道去哪找,這就夠了。
我在萬字長文 | 這多是東半球最保姆級的後臺服務器開發學習路線中也提到過各個學科的主線是什麼,這裏再囉嗦一遍,好比計網,你說你把 CRC(循環冗餘校驗碼)的計算方式忘了,這就是遺忘嗎?
對不起,我也記不住,也徹底沒有必要去記。
計算機網絡的主線是「兩臺主機之間的數據包是如何經過網絡傳輸給對方的」,其它的,像 UDP 的包頭的構成呀,SMTP 使用的端口號呀 之類的問題,看一遍,有個大致印象就好了。
可是你得知道 UDP 包頭裏有源端口和目的端口以及數據包長度,爲何呢?
由於這個是靠理解,反推出來的,首先 UDP 是傳輸層協議,傳輸層的目的是區分同一主機上的不一樣進程,那麼必定是須要一個標識的,這就是端口號。至於它們是怎麼排列的,這絲絕不是關鍵。
上面這段話,拋磚引玉的聊了下我認爲何知識是能夠遺忘,什麼是不能夠遺忘的。
那不能遺忘的知識也遺忘了怎麼辦呢?
多看。多去思考這樣設計背後的原理,多問本身「Why」。
至於理論沒有造成體系,其實我也存在這個問題。
可是我想的是,量變引發質變,你先積累足夠的各個領域的知識,總會有打通任督二脈的那一天。
纔開始學,怎麼可能有完整的知識體系呢,至少到了大3、大四再來考慮知識體系這個問題。
畏難這個事,老實說,人人都會有,我也不例外。
不要想着去克服它,畏難其實和喜歡溫馨區差很少,這大概是天性吧。
除了天性使然,還有一個緣由是想得太多,作得太少,還沒開始作呢,就去想各類後果了,進而產生一系列奇奇怪怪的想法,本身嚇本身。
那克服畏難情緒最簡單方法就是行動,馬上行動起來,去分析一下,要作成這件事,須要哪些資源、前置條件等等
行動是緩解焦慮的最好方式,這真的不是雞湯。
至於擔憂找不到工做,這徹底沒啥好焦慮的呀,你按照上面說的去制定目標,學習,找工做就是一件水到渠成的事。
固然了,最重要的嘛,持續關注編程指北~
不知道這篇文章有沒有解決學妹的問題,可是我已經算是把我能想到的,用我以爲最合適的方式表達出來了。
剩下的還要靠學弟學妹們本身去摸索了,畢竟,看別人的總結再多,不如本身親身體會一次記憶深入,畢竟紙上得來終覺淺。 至於學習資源的推薦,我考慮單獨出一期~
寫這篇文章的目的也不是傳道授業,而是解惑,但願個人一點經歷和心得的分享可以對後來的同窗有一絲的啓發,讓他們少走彎路。
這即是這篇文章最大的價值所在。
最近好像好久沒寫技術文了,全在寫這種水文,你們是更喜歡看技術文章呢,仍是這種類型的呢?
評論下,讓我瞭解下唄,不過不管如何,接下來幾篇都是技術文章了。不能一直這樣水下去了哈哈哈
我是小北,乾坤未定,你我皆是黑馬,我們下期見!
文章持續更新,全文首發自個人我的公衆號,能夠微信搜一搜「 編程指北 」第一時間閱讀,後臺回覆【pdf】有我搜集的上百本經典的計算機書籍電子版。