<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          學妹問我: 如何提高編程能力

          共 10416字,需瀏覽 21分鐘

           ·

          2020-10-28 18:20

          聊天截圖
          聊天截圖

          前言

          開局兩張圖,剩下全靠吹了。

          上面這兩張圖便是寫這篇文章的原由。

          對話框的另一邊,是一位大二計算機科班在讀的小姐姐,看似平靜的文字背后透露著迷茫與困惑,還對未來的焦慮。

          透過屏幕,似乎看到了大一時的自己,不會裝環(huán)境、不知道怎么編譯,報錯也不會解決,更不知道除了計算水仙花數(shù)、打印乘法口訣表...還能寫些什么。

          感同身受讓我覺得有必要認真的好好回答一下(其實是因為這是小姐姐問的?,也算是對大一時的自己一個隔空對話。

          做公眾號短短這一個多月,我在后臺看到過不少類似問題的,每次看到學弟學妹們這樣認真又略帶迷茫的提問,其實是比較有壓力的。

          怕自己不能夠站在他們的境地去思考問題,搞成了「B」乎似的回答,也擔心自己的回答不能幫到他們,甚至在某些方面對他們產生誤導。

          所以一般我都是選擇回答比較政治正確的那種,比如:

          “加油,你要多去實踐,xxx”

          “嗯嗯,你要多去看書,balabala”

          “剛開始都是這樣的,你多堅持一下呢,xxx”

          ...

          怎么說呢,這都是正確的廢話,誰都知道要多看書,要實踐,要去動手寫代碼。

          有時候想回答得更細致一些,但是迫于各種原因,也沒時間去挨個的回復。

          但這次學妹特地打了很長一段字,我看到了她想要快速適應計算機學習卻又不得其法的迷茫,也許我的回答會對她有所幫助呢?

          因此我讓她描述得更加細致一點,也很好針對性的提出一些建議。

          不過首先申明下,本文主要是以回答學妹的問題為主線,面向的對象是大一、大二以及自學還未找到合適的學習編程方法的同學。

          如果你已經有了自己的一套方法論,或者說已經工作了,那本文對你幾乎沒有參考價值,建議直接拉到末尾點個贊~

          可能有小伙伴沒細看聊天截圖的內容,我在這里再貼一次學妹的問題:

          下面是我抽出來的一些問題:

          1、只會像高中一樣跟著課程學習

          2、怎么可以脫離課本和教學視頻自己編寫一個小項目?

          3、停于理論,不知道如何實戰(zhàn)

          4、就算跟著教程安裝軟件,搭配環(huán)境幾乎每一步都會有這樣那樣的錯誤

          5、知識遺忘得快,理論沒有形成體系,自己計算機的學習只局限在刷了一些慕課上的題,做了學校要求的實驗

          6、學完一門課程不知道能干什么

          7、畏難情緒嚴重

          8、焦慮、擔心找不到工作

          首先,看似抽出了很多條的問題,但是我把所有問題都歸為一個,那就是 「如何提高編程能力」

          只要編程能力、實戰(zhàn)能力提高,上面一長串的問題自然也就不成問題了,更不用擔心找工作的問題。

          所以今天就來聊聊如何提高編程能力這個話題。

          要說提高,總得先明確下什么是 「編程能力」 吧~

          到底什么是編程能力

          經常能看到大V、前輩們說,你要多寫,要多練,提高自己的“編程能力”,但是編程能力到底是什么呢?

          在我看來啊,所謂的編程能力其實說到底就是用代碼解決問題的能力,無論是 Leetcode 上的還是現(xiàn)實世界的問題。

          能夠從問題本身或是業(yè)務邏輯提煉出解決方案,并且用代碼去實現(xiàn),編程就是在干這樣一件事:

          現(xiàn)實世界的問題 -> 抽象出解決方案/建模 -> 計算機語言表達

          可以看到,寫代碼只是最后一步,而我們常常說自己不會寫,真的是不會寫代碼嗎?

          這讓我想起了以前英語老師說的:

          “很多同學說英語作文說寫不了幾句就寫不下去了,但是真的是英語學得差嗎?我看未必,大概讓你用中文寫,也寫不上幾句”

          是啊,英語作文寫得不好,很多同學下意識的覺得是自己英語本身沒學好,確實有這個原因。

          但是更本質的原因或許是你語言表達和組織能力的問題,也就是讓你用母語寫,也不一定能有條理的寫上一段文字。

          那回到編程這里,不會寫代碼,也許是你連解決問題的思路都沒想明白,就是說你的腦海里沒有形成「第一步該做什么,第二步該做什么」這樣的流程。

          這其實是最重要的,編碼實現(xiàn)反而是相對簡單的事情。

          很多大廠,一般都是高級工程師或者架構師進行領域設計、架構設計,初級工程師進行編碼實現(xiàn)各種接口。

          說到這,我又想起了最近工作上的事情。

          由于時間緊迫,我被 leader 安排去了支援隔壁部門開發(fā),但是他們那里的很多業(yè)務背景我一點都不知道。

          對方對接的人讓我去模仿 xxx 模塊寫,我看了 xxx 模塊兩天,愣是沒寫出個啥來。

          事后,我在想,為啥會這樣呢?是我編程能力太差嗎?

          也許是吧,但是更重要的原因是,我不理解業(yè)務背景,所以我的腦海里沒有要實現(xiàn)這個需求的流程圖.

          檢查參數(shù)、鑒權、認證、簽名...... 這些流程不清晰,表現(xiàn)出來的形式就是,我不知道代碼到底該先調哪個接口,再做什么。

          心中沒思路,自然無從下手。

          所以其實編程的核心就是,你需要在心中對整個實現(xiàn)流程有一個大致的思路,然后用代碼去一步步的實現(xiàn)。

          在實現(xiàn)過程中,你會遇到很多細節(jié)問題,比如數(shù)據(jù)結構的選擇,用 set 還是 list,存儲結構的選型,以及如何 bug free的實現(xiàn)。

          更進一步,怎樣寫出高性能、易讀、易維護、易擴展高質量的代碼,當然這都屬于編碼能力了。

          如何提高編程能力

          嗯,我回過去看了自己上面的一翻分析之后,我覺得......分析了個寂寞,說的太尼瑪抽象了,我 TM 就想知道到底怎么提高編程能力!

          好,接下來我就具體一點,不搞這些虛頭巴腦的東西了。

          提高編程能力,我自己總結了以下幾點:

          • 多實戰(zhàn),做項目,用需求倒逼輸入
          • 善用工具,尤其是搜索引擎
          • 看優(yōu)質資料,特別是經典的計算機書籍
          • 養(yǎng)成自學習慣,提高自學能力
          • 看一些小而美的源碼

          來,先上第一點,關于做項目,這也是學妹的痛,不知道如何去開始一個項目。

          談到這點,對不起,我又想講自己的經歷了,有點長。。。

          一、實踐

          learning by doing

          是的,我們都知道編程是一門實踐的學科,不動手永遠學不會,看懂了和學會了之間差了上萬行代碼。

          或者說:看懂了 + 上萬行代碼 = 學會(此公式未經證明,純碎自己拍腦袋想的

          剛學完一門語言,想必大家都想做點有用的東西,而不是天天寫練習題,但是呢,又不知道從何下手,尤其是 C 語言。

          我大一上完 C 語言課,就處于這種狀態(tài),但是我隔壁一個室友就不一樣的。

          他在學習 C 語言的過程中,剛學到動態(tài)內存分配(malloc),就去摸索著寫貪吃蛇、坦克大戰(zhàn),而且完成度都挺高的,那時候是我們眼里妥妥的大神。

          但是大神和我上的課,學的東西都完全一樣呀,況且都是上了大學才開始接觸編程,為什么差別這么大呢?

          以至于那時候,我和學妹一樣,常常懷疑自己沒有編程天賦,覺得別人天生就是這么強。

          這種狀態(tài)一直持續(xù)到大一下,那時候剛學完 Java,而 Java 也比 C 友好了不少,所以總想寫點什么。

          于是自己就選擇寫一個類似 QQ 的聊天工具,其實功能就很簡陋,就是一個簡單的 GUI + Socket 編程,然后在加上用戶信息管理就完了。

          但是,當我用這個簡陋的軟件,分別在室友和我的電腦上跑起來并且成功發(fā)送消息的那瞬間,我覺得我的編程世界被點亮了。

          原來編程這么好玩,原來我也能做一些有趣的東西!似乎找到了一絲編程的感覺,但還說不上到底是什么感覺,畢竟這個程序總共也就幾百行。

          緊接著,趁熱打鐵,我又寫了一個聯(lián)機五子棋,實現(xiàn)上依然是 GUI + Socket 傳輸數(shù)據(jù)。

          但是寫這個又遇到了不同的問題,比如棋盤在我的實現(xiàn)里是一個 N*N 的數(shù)組,棋子是用對象表示,對象里有坐標、顏色這些屬性。

          當時我就疑惑了,當一方落子后,該怎么把棋子對象通過網絡傳輸給對方呢,再從網絡接收的數(shù)據(jù)恢復到對象?

          起初自己的想法是手動的把對象轉換成字符串,然后像聊天工具一樣發(fā)送給對方,比如:

          {x: 12, y: 13, color: black .......}

          這種做法沒問題,但是總感覺不夠優(yōu)雅完美,于是上網一番搜索之后發(fā)現(xiàn),原來我想的這個就叫「序列化」和「反序列化」。

          并且在 Java 里直接實現(xiàn) Serializable接口就好了,甚至可以直接使用ObjectOutputStream類就能完成序列化和反序列化對象。

          這些問題在現(xiàn)在看來,根本就不是問題,更像是“常識”。甚至序列化這塊,還會選擇一些兼容性更好、性能更高的協(xié)議,比如 Protobuf、Thrift、Avro 等等。

          但是對大一時的我來說,在這個過程中不斷的遇到問題并且去解決,就是實打實的編程能力上的提高啊。

          在我解決掉一系列問題之后,順利的和隔壁室友用自己寫的聯(lián)機五子棋對戰(zhàn)了幾局,這個五子棋還支持不少諸如悔棋、暫停、自動判斷輸贏等功能。

          界面風格和下面這個很相似(這是網上搜的)

          Java版五子棋

          但是由于當時沒有存 Github 的習慣,代碼在換電腦之后沒能留下來。

          通過寫這些項目,我像打通了任督二脈一樣,不是學了什么厲害的算法、也不是高深的設計模式、更沒有分布式這樣高級的東西。

          那是什么呢?

          我感覺到編程就好像搭積木一樣,基本的函數(shù)、庫、組件就是一個個的積木塊,寫的代碼就是膠水。

          只要我們心中有設計圖紙,那就能通過膠水把這些積木搭建成想象的模樣,缺少什么積木塊,用到的時候再去搜索就行了。

          在程序的世界,只要你想,你就能。

          這段時間大概是我編程能力提升最快的一個階段之一。

          關于這個五子棋,還有個小插曲:

          我寫的不是聯(lián)機五子棋嘛,然后啟動的時候輸入對方的 IP 和 Port 就能連上對戰(zhàn)。

          后來,我找了一個在其它城市上大學的高中同學,讓他和我一起玩五子棋,但是呢,我傻乎乎的讓他用 ifconfig 查看自己 IP 后告訴我,然后我在這邊連接。

          那個 ip 呢,大概長得像 192.168.1.xxx,熟悉的同學都知道,這個就是局域網內使用的 IP 了,并非公網上的 IP。

          局域網內的 IP 只能在內網才能使用,所以我用這個 IP 是永遠連不上的他的電腦的。

          但是那時候我才大一,沒學過計網,根本不懂這里面的原理。

          為啥我和室友能連上呢(因為在一個局域網)?為啥和其它學校的同學就不行?

          別看現(xiàn)在這個東西在我看來是常識,但我那時候是一點計網知識都沒,就是硬著頭皮學的 Socket 編程,去理解 IP 和 Port。

          那是怎么解決的呢?

          當然是找谷歌呀!

          在網上一番查詢后,大概明白了,如果想讓不同局域網內的主機進行 P2P 通信,需要一個公網中轉服務器輔助進行 NAT 打洞。。。后來,我就又去嘗試 NAT 打洞了,其中細節(jié)就不再描述了。

          其實把我個人編程經歷上寫這么多,就是想展現(xiàn)我是如何一步步去實踐的,遇到了什么問題,又是怎么解決的,把這個過程展現(xiàn)出來。

          你看我沒學任何計網知識,還不是通過邊學邊用,完成了網絡相關的項目。

          所以你離項目只差一個開始。

          說到這里,不少同學又會說,我知道要多實踐、多動手,道理我都懂。

          可我還是不知道如何開始去寫一個五子棋、貪吃蛇之類的東西。

          好,那我就要問問你了

          小北:為什么你學了 C 語言還是不會寫貪吃蛇呢?

          學妹:老師沒教我貪吃蛇如何在 C 語言中表示,也沒教我如何讓畫面動起來,更沒教我如何繪制 GUI ,所以我不知道怎么做。

          這應該是大多數(shù)同學最典型的問題吧?

          那我們以貪吃蛇為例拆解一下,看看是如何從問題到代碼的。

          首先,貪吃蛇是一個個的節(jié)點組成的,節(jié)點肯定有橫縱坐標吧?一個個的節(jié)點組成了一條蛇,那自然應該想到鏈表吧?

          蛇還有什么屬性?當前移動的方向

          還要食物位置吧?那這些屬性在 C 語言中用結構體表達出來就是這樣:

          typedef?struct?node{
          ??int?x;
          ?int?y;
          ?struct?node*?next;//?單向鏈表
          }?SnakeNode;

          typedef?struct?snake?{
          ?SnakeNode?*pHead;?//?蛇頭
          ?SnakeNode?*pFood;?//?食物
          ?int direction;??//?方向??0-3 依次表示:上、下左、右
          ?...
          }

          接下要考慮的就是如何去繪制蛇,這個簡單呀,就把整個鏈表從頭開始把每個節(jié)點打印出來。

          每個節(jié)點可以是一個圓點,也可以是方形。

          那如何讓蛇動起來?所謂的動,其實就是不斷的將蛇打印出來,然后又清除。

          并且不斷的根據(jù)移動方向更新蛇的位置,只要這個過程夠快,快過人眼能夠分辨的幀率,那看起來蛇就像是在連續(xù)的動一樣。

          然后這個過程你還要去考慮如何檢測碰撞,如何判斷吃到了食物,還要隨機產生食物。。。這些東西首先你得想清楚邏輯,代碼實現(xiàn)其實if、else 、for 就足夠了。

          做項目的過程總會遇到不會的東西,也會遇到問題。

          但是要相信,所有的問題在你之前基本上都已經有人遇到過了,只需要把問題準確的描述出來,然后去搜索引擎上搜就肯定能找到解決的線索。

          如果你要等學會所有東西,才去開始做項目,那估計等到本科畢業(yè)也沒機會。

          本科上的就那幾門課,Java/C/C++、操作系統(tǒng)、計網、編譯原理、離散、數(shù)據(jù)結構......

          可能沒有學校會單獨開一門課教你 Java Web、Python 寫爬蟲等等。

          學完這些理論課,等到畢業(yè),你會發(fā)現(xiàn),依然好像什么都做不了,所以說,要動手,趁早。

          并且理論上,學完一門語言,掌握了數(shù)組、鏈表、 if、for、函數(shù)這些編程最基本的概念,就有能力去實現(xiàn)一些諸如貪吃蛇、五子棋、掃雷這樣的小玩意了。

          這種通過項目去學習,以解決問題為導向的學習才是更加精準和高效的。

          課堂上的學習大多數(shù)是老師灌輸知識、學生記住,然后考試就能拿高分。

          實際上有多少知識能轉化為解決問題的能力呢?

          不好說。

          還是那句話,編程就像搭積木,學完基礎的,積木塊都給你了。

          你能搭出房子、車子、還是火箭這全靠自己。

          二、善用工具、學會搜索

          學會用工具,更要用好的工具。什么是好的工具?

          諸如 VSCode,Github、Stackoverflow、Google、知乎、Jetbrains 全家桶都是不錯的編程工具,有的提高生產力,有的能解決問題。

          都 2020 年了,就不要在機房裝著 VC6 寫練習題了。

          不要等到大一結束了,還沒上過 Github,更不知 issue、pull request 為何物。

          計算機專業(yè)的學生,如果還在用百度搜索技術問題,送給你一段陳皓(左耳朵耗子)前輩的話:

          coolshell截圖

          當然,在沒法使用谷歌的情況下,百度還是可以用的,但是這對計算機專業(yè)的同學,不應該是一個問題。

          很多時候,你把遇到的問題準確的復制到 Google/Stackoverflow 搜索框,大概就能找到答案。

          而百度會將你帶向培訓班的課堂,嘿嘿,刺激不。

          3. 看優(yōu)質資料

          現(xiàn)在處于信息大爆炸的時代,互聯(lián)網上充斥著各種博客、學習資源,這是對學習者最好的時代。但是資源太多,就存在一個選擇的問題,在這里我給你幾個建議:

          1. 把網盤里屯的那 500G 視頻/資源 刪掉,你永遠不會去下載來看的

          正所謂,收藏從未停止,學習從未開始,當你不再習慣的收藏資源了,你就成長了。最好掌握獲取/搜索資源的方式,自己需要什么資源再去搜就完了。而不是讓資源白白的占據(jù)你的網盤。

          1. 當需要學習某個東西的時候先去知乎/Google 搜索 「xx學習路線」

          然后根據(jù)高贊/優(yōu)質回答,選取大 V 們都提到的資源,這大概是這個領域比較經典的,然后去搜集資料,開始學習。

          B站、mooc、網易公開課、Coursera等視頻網站上有很多優(yōu)質免費的課程

          答應我,不要再被那些關注送 500 G 學習資源的騙了好嗎?資源都在網上公開著,直接打開 B 站就能看,不香么?

          學應用框架,官方文檔是最適合入門的,并且很多都提供了「快速入門」的指引

          比如 Vue、Hadoop、Requests 這些官網的指引都非常的清晰易懂,真的不要再去看七零八碎的博客,博客的定位應該是補充。

          少看博客,多看書

          很多博客其實就是博主自己讀完書,然后復述一遍的筆記,你再去看他的博客那就是等于學二手知識,他的高度就決定了你的高度。

          當然有些優(yōu)秀的博主能夠概況性的總結,或者把某些原理講得特別清楚,這是值得看的。

          總的來說,系統(tǒng)性的看書是你成長最快的方式。

          四、自學

          大學的學習,學的絕非是僅僅的知識,最應該學會的能力是「自學」。

          等走上工作崗位的時候,你便會發(fā)現(xiàn)這個能力有多么重要。

          初入職場,在公司,沒人會像學校里的老師那樣,手把手的教你。

          就算有安排導師,也是扔給你一堆的文檔和資料,自己去學習,然后開始上手實際項目。

          這個過程大多會比較痛苦,至少我這幾個月是這么過來的。

          說到這,我突然想說下我認為的「自學的能力」,因為在程序員這個群體中,不管是科班學生還是野生程序員,自學都是必不可少的。

          那「自學的能力」又到底是什么呢?

          我個人體會有以下幾點:

          1. 明確你學習的目標,比如我要學 Java Web、IOS 開發(fā)、機器學習等等

          2. 了解該領域包含了哪些子模塊,比如 Java web 需要學 Java 語言基礎、JVM、數(shù)據(jù)庫、計算機基礎等

          3. 掌握這些子模塊的學習順序和依賴路徑,也就是先學什么,再學什么

          4. 搞清楚這個方向有哪些入門、進階的學習資料

          5. 按著學習路線,開始學習一個子模塊

          上面這個過程,不斷的遞歸下去,直到拆分出一個比較小的學習目標。

          比如我要學 「Java web」,那這里面可能包含了Java 基礎、Netty、JVM、Spring、MySQL、Redis 等等。

          那 Java 基礎又可以進一步分為 基礎語法、面向對象、異常、集合、IO、反射等。

          分到這里,你就可以開始去找資料學習了啊。

          比如先安裝 JDK,然后寫 Hello World,然后慢慢開始刷書或是刷視頻......

          五、看小而美的源碼

          這里我用了一個定語「小而美」,小是指代碼量少,最好就幾千行,這樣我們能夠充分把控,美則是指代碼實現(xiàn)寫得很優(yōu)雅。

          我們都知道提高審美能力很重要的一環(huán)就是多看美的東西,好的設計。

          那寫代碼也是一樣的,自己學完基本語法,寫出來的代碼大概停留跑起來的水平。

          這時候去看看大佬寫的代碼,你絕對會驚呼 臥槽,還能這樣?

          這樣的代碼有哪些呢?

          如果你是大一的同學,我推薦你去看看 Linux 內核中關于鏈表的實現(xiàn),簡直特么太妙了,平常我們定義鏈表不都是這樣嘛

          struct?Node?{
          ???int?data;
          ???struct?Node*?next;
          }

          但是這個存在的問題就是,每個想用鏈表存儲的結構體,我們都得去寫一遍,遍歷、插入、刪除的邏輯,顯然太low了。

          那 Linux kernel 中就用宏,在對用戶自定義數(shù)據(jù)結構侵入性很小的情況下,實現(xiàn)了其它語言中模板的功能。

          相信我,看完,你會學到很多騷操作的,后面找機會寫一下這塊。

          又比如學完 C 語言,你會不會覺得 C 中的字符串有點不靈活,那推薦你去看看 Redis 中關于動態(tài)字符串的設計--SDS。

          這些代碼都不長,也不難理解,但是看完對于提升我們的編碼能力是有很大幫助的,這就是小而美。

          提倡看源碼,不是讓你直接上手就啃什么 Nginx、Sqlite、Redis的源碼,這些都是幾萬級別的代碼量,一般初學者

          即使要啃,我給你說個好辦法,這些東西目前來看,代碼量都是幾萬幾十萬的級別,有點不友好,你可以去 github fork 下來。

          然后回退到第一個 commit,從第一個 commit 開始看起,看到第一個完整的版本。

          這個過程也是能學到不少東西的,看看羅馬都是怎么建造成的。

          解答問題

          好了,BB了一大段假大空的東西,最后再回到學妹具體的問題上,挑幾個來具體問題具體分析:

          一、只會像高中一樣跟著課程學習

          說到底,還是填鴨式,沒有形成自己的目標和學習路徑。

          如何破局?

          最簡單的方式,給自己定一個目標,或者我給你定幾個,自己領一個:

          • 學習前端開發(fā),目標 BAT
          • 學習 Java 后端開發(fā),目標 BAT
          • 做 Linux CPP后臺開發(fā),目標 BAT
          • 保研/考研,目標 985 或 C9
          • 算法崗....不建議,太卷了
          • 大數(shù)據(jù)開發(fā)、數(shù)據(jù)分析等等

          如果你做技術崗,上面這幾個基本覆蓋了應屆生找工作的主要崗位,你選一個自己相對喜歡一點的。

          至于如何去達到目標?

          當然是分解,然后去找 Google 呀,去看看 BAT 這些崗位需要點亮哪些技能,怎么學才能達到。

          記住,目標、目標、目標!!!

          沒有目標,你的生活就會是得過且過,滿足于上課、做作業(yè)、考試、績點這樣的循環(huán)。

          到了畢業(yè)找工作,你會發(fā)現(xiàn)面試官好像都不怎么關注你的績點有多高,他們更關注你的基礎知識和解決問題的能力。

          解決問題的能力怎么體現(xiàn)?

          可以是刷題或者是讓你講你參與的項目,以及在這個項目中你扮演的角色和遇到了什么題,又是怎么解決的。

          我們會發(fā)現(xiàn),那些優(yōu)秀的人,無一不是有著清晰的目標,從現(xiàn)在開始給自己定一個目標吧!

          二、怎么可以脫離課本和教學視頻自己編寫一個小項目?

          初學者跟著視頻做是很有幫助的。

          先跟著課本或者視頻完成一個項目,記住不是看視頻里的老師完成,而是你自己要跟著完整的敲一遍!

          第二步,不看視頻,根據(jù)自己腦海中的流程、思路來逐漸編碼,明確先做什么,再做什么。

          第三步,改造,或者基于視頻里的做一個類似但不同的項目,比如視頻里寫的商城,那你可以自己做個論壇,視頻里是貪吃蛇,你可以自己做個坦克大戰(zhàn),諸如此類。

          其實這就是學自行車嘛,先用借助輔助輪或者別人扶著練習,然后慢慢的下掉輔助輪,自己騎。

          千萬不要沒學會走,就想跑了,這樣會摔得很慘。

          三、就算跟著教程安裝軟件,搭配環(huán)境幾乎每一步都會有這樣那樣的錯誤

          這個問題,百分之 99% 的同學肯定都遇到過,甚至現(xiàn)在,我安裝一些新環(huán)境的時候也會有各種問題。

          想起剛學 Java 的時候需要去配置 Path、ClassPath、環(huán)境變量這些,但是第一次接觸根本不知道配置這些的作用,也不知道他們的原理。

          就跟著博客教程一步步執(zhí)行,但是經常就會發(fā)生,明明都照著來了,還是跑不通。

          那這個時候怎么辦呢?

          第一辦法是重新搜索嘗試不同的教程,這個其實是換湯不換藥,能不能配通還是看運氣

          第二個辦法就是去搜為什么要這樣配?

          了解之后,你就明白 Path 就是指定了我們平時在終端使用命令的搜索路徑,ClassPath 則是讓 Java 執(zhí)行環(huán)境找到指定的 Java 程序對應的 Class 文件以及程序中引用的其他 Class 文件。

          當你去了解這些東西之后,再去看博客的配置步驟就不再是懵的了。

          在不了解背景的情況下,我們只能根據(jù)別人的指令一步步走,害怕和被人有一絲的不一樣,而導致最后配置失敗。

          但是當你了解了原理之后,這些博客就只是參考了,你甚至還可以考慮到你和博主的某些環(huán)境是不是有差異,這些差異會對應到步驟中哪里應該采用不同的配置。

          這個其實我體會特別深,在我第一次用到 CMake 的時候,起初,我是去抄別人的 CMakeList.txt 文件。

          但是當我需要增加編譯依賴或者其它定制化的時候,我就懵逼了。

          include_directories、include_directories、target_link_libraries 這些指令,不知道如何去組合達到自己想要的目的。

          那我當時是去找來了 CMake 的教程,瀏覽一遍后,我便懂了 CMake 構建的原理,以及各個指令的作用。

          這時候,我便有能力基于別人的 CMakeList.txt 去定制化。

          這就是我個人認為「搭配環(huán)境幾乎每一步都會有這樣那樣的錯誤」的內在原因和解決辦法了。

          一句話,你是否清楚你所看博客做的每一步操作是在干什么,如果不明白。

          只是復制別人的命令,那出錯了,肯定會懵逼的。

          四、 知識遺忘得快,理論沒有形成體系

          不知道學妹這里說的遺忘得快的知識是指什么?

          我說一下我的看法吧,我在不同文章中都反復提到了,學習新知識要學會抓主線,把零碎的、非本質的東西瀏覽一遍就行,用到的時候知道去哪找,這就夠了。

          我在萬字長文 | 這可能是東半球最保姆級的后臺服務器開發(fā)學習路線中也提到過各個學科的主線是什么,這里再啰嗦一遍,比如計網,你說你把 CRC(循環(huán)冗余校驗碼)的計算方式忘了,這就是遺忘嗎?

          對不起,我也記不住,也完全沒有必要去記。

          計算機網絡的主線是「兩臺主機之間的數(shù)據(jù)包是如何通過網絡傳輸給對方的」,其它的,像 UDP 的包頭的構成呀,SMTP 使用的端口號呀 之類的問題,看一遍,有個大體印象就行了。

          但是你得知道 UDP 包頭里有源端口和目的端口以及數(shù)據(jù)包長度,為什么呢?

          因為這個是靠理解,反推出來的,首先 UDP 是傳輸層協(xié)議,傳輸層的目的是區(qū)分同一主機上的不同進程,那么一定是需要一個標識的,這就是端口號。至于它們是怎么排列的,這絲毫不是關鍵。

          上面這段話,拋磚引玉的聊了下我認為什么知識是可以遺忘,什么是不可以遺忘的。

          那不能遺忘的知識也遺忘了怎么辦呢?

          多看。多去思考這樣設計背后的原理,多問自己「Why」。

          至于理論沒有形成體系,其實我也存在這個問題。

          但是我想的是,量變引起質變,你先積累足夠的各個領域的知識,總會有打通任督二脈的那一天。

          才開始學,怎么可能有完整的知識體系呢,至少到了大三、大四再來考慮知識體系這個問題。

          五、畏難情緒嚴重,擔心找不到工作

          畏難這個事,老實說,人人都會有,我也不例外。

          不要想著去克服它,畏難其實和喜歡舒適區(qū)差不多,這大概是天性吧。

          除了天性使然,還有一個原因是想得太多,做得太少,還沒開始做呢,就去想各種后果了,進而產生一系列奇奇怪怪的想法,自己嚇自己。

          那克服畏難情緒最簡單方法就是行動,立刻行動起來,去分析一下,要做成這件事,需要哪些資源、前置條件等等

          行動是緩解焦慮的最好方式,這真的不是雞湯。

          至于擔心找不到工作,這完全沒啥好焦慮的呀,你按照上面說的去制定目標,學習,找工作就是一件水到渠成的事。

          當然了,最重要的嘛,持續(xù)關注編程指北~

          END

          不知道這篇文章有沒有解決學妹的問題,但是我已經算是把我能想到的,用我覺得最合適的方式表達出來了。

          剩下的還要靠學弟學妹們自己去摸索了,畢竟,看別人的總結再多,不如自己親身體會一次記憶深刻。


          來個直擊靈魂的三連吧!


          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  爱液视频 | 一个色导航五月天伊人网站 | 影音先锋家庭乱伦 | 久久国产激情视频 | 爱草逼爱草逼爱草逼爱草逼爱草逼爱草逼爱草逼 |