主頁 >  其他 > 鵝廠大佬掏心掏肺的分享:我的編程能力從什么時候開始突飛猛進?

鵝廠大佬掏心掏肺的分享:我的編程能力從什么時候開始突飛猛進?

2021-01-02 11:21:48 其他

寫作這些年來,認識了很多優秀的小伙伴,比如說鵝廠的小北,他在知乎上的一篇回答非常火,借這個機會,分享給我在 CSDN 上的小伙伴們,值得讀一讀,你一定會大有所獲,

以下是正文,

啃完一本本書, 做完一個個lab

沒有突飛猛進, 一切都是量變最終累積成質變!

但是會有那樣一些時間節點,你會明顯感覺到自己的編程能力確實有提高不少,能夠實作更多的想法.

不過老實說,就編程能力上確實沒有“突飛猛進”的感覺,都是逐漸的進步,量變引起質變嘛,

我們都是普通人,不可能像張無忌一樣因跌落懸崖,意外獲得《九陽神功》,從此開掛,走上巔峰,

只有靠不斷的看書、coding、學習優秀開源專案,構建自己的計算機知識體系,并且在特定的領域不斷專研,這樣才能成為一個優秀的工程師,

下面聊聊我自己的編程學習之路吧,我在大學之前完全沒有編程經驗,高考后,填的專業前幾個也是清一色的傳統工科,被軟體工程錄取純碎是意外,

當時甚至很擔心完全沒有編程基礎的我,上大學會不會跟不上,

后來大一,第一門編程語言就是學的C語言,怎么說呢,老師講的,書上寫的我都能看懂,但是一讓我寫一個大的程式,我就摸不到頭腦,不知從何下手,學了半學期,也只能寫寫課后習題,算算水仙花數什么的,

而且當時對計算機缺乏系統認識,即便我知道指標就是變數地址,也很難理解它到底有啥用,甚至分不太清陣列和指標的區別,以至于會出現對函式區域變數取地址回傳這樣現在看來很低級的錯誤,

大一上考完C語言后,我便在心里默默念想,這輩子再也不寫C了,只是沒想到的是,后來這成了我最愛的一門語言,

大一下開始學習資料結構與演算法、數字邏輯這些計算機核心課了,此外,還學了一門當時我看來非常牛逼的語言—Java,為啥說我當時覺得它牛逼呢?因為剛經歷過C語言的摧殘,發現Java豐富的類別庫,各種方便的工具類,再也沒有指標了,變成了物件參考,

Java我學得很認真,當時還看過馬士兵的Java Se教程,自己也用Java寫了不少好玩的東西,比如聯機五子棋、HTTP服務器等等,這讓我第一次感受到編程這么有趣,俗話說興趣是最好的老師,

在學java的時候喜歡在網上搜資料,但總覺得各種博客上的知識過于零散,為了學好Java,我在知乎搜索各種書單,先后看了《Java編程思想》《Java核心技術卷》《Java并發編程》好幾本書(不是全看哈,大部分主干章節大一暑假在家自學了安卓,并寫了幾個app玩,但發現自己不太喜歡客戶端,于是大二開學就開始學 Java 后臺開發,從 Servlet 到 SSH SpringBoot,基本上都過了一遍,后來越來越覺得這條路就是在學各種框架,總覺得不太對勁,

同時,大一暑假有大四學長學姐在學校廣場擺攤賣書,我也買了些,其中有一本就是被稱為計算機神書的CSAPP,大二在上一些無聊的課時,我總把這本書帶著,每節課可能會翻個幾頁,那時候看到匯編、記憶體管理、存盤器層次我是真的云里霧里,因為還沒學作業系統,C語言也學得很差,所以斷斷續續的看了幾章,說不上學到了什么,但讓我對這種枯燥的基礎知識第一次產生了興趣,有一種想徹底搞懂它們的想法,為了看懂這本書,又去看了王爽那本《匯編語言》,重學了C語言,由于已經學了匯編,指標對我再也不是問題了,同時看完了《c和指標》、《C專家編程》、《C陷阱與缺陷》,C語言使用得也愈加的熟練,

大二上那段時間,學院里突然刮起全員學機器學習的風氣,雖然不至于全部,但是真的是很多人都在學,于是我也不例外的加入了,先后看了點吳恩達的視頻和西瓜書,跟著寫了手寫數字識別這種入門必做的專案,但是后來總覺得對機器學習、深度學習提不起興趣,原因之一就是我覺得無法完全掌握每一步,了解每一步背后的原理,這讓我學得不安心,于是ML的學習之路也止于大二,

大二是學習內容最豐富的時間,當時室友用 Python 寫了搶課腳本,感覺很好玩,然后又跑去學Python,學爬蟲,寫了一堆爬蟲,什么爬豆瓣電影、知憾訓答、搶課腳本,玩了一段時間也沒太大興趣了,

時間來到了大二下,按照課程安排,開始上作業系統了,于是我又在知乎搜索“作業系統怎么學”,順著一堆回答,我發現原來還能跟著別人寫一個 mini OS,這對我吸引力太大了,于是我買了一本《作業系統真象還原》,這本書真的非常仔細,把寫 OS 需要用到的前置理論知識、匯編、行內匯編全都給你講清了,我一路跟著書寫,寫到了匯編開機列印出我的名字,再到后來進入C語言寫內核各個模塊,寫到記憶體管理我就中斷了,沒有繼續寫下去,這也算個遺憾吧,當時真的對這個入迷了,為了寫Min os我還去看了Linux0.11的部分代碼,把我的QQ簽名改成了 jmp 0x7c00

(這句匯編就是將跳轉到0x7c00這里,BIOS開始引導作業系統,

于是就這樣,我越來越喜歡偏底層一點的東西,所以決定走 Linux C/C++ 路線,然而現在看來確實太年輕了,Linux C/C++ 在鵝廠好多也是用來寫業務滴,,,

大二下在知乎、牛客網搜索學習路線,我大概清楚了需要看些什么書,于是開始了非常標準的 Linux C/C++學習之路,前前后后看了《C++ Primer》、《APUE》、《UNP》、《深度探索C++物件模型》、《STL原始碼剖析》、《C++設計與演化》、《Linux內核設計與實作》、《Linux內核完全注釋》、《effecitve C++》 、《effective modern C++》、《程式員自我修養》、《Linux高性能服務端編程》、《Linux多執行緒服務端編程》(知乎陳碩大佬寫的)…,順便還看了點muduo原始碼,自己模仿著基于epoll寫一個reactor模型的web服務器,跟著知乎Milo大佬寫Json庫,總之,這段時期是寫了一些小”輪子“的,

看的書越多,其實你越能找到自己的方向,大三上我就給自己學習定位:深入C++語言(多執行緒)+ 存盤(學習redis、leveldb)+ 網路編程(學習muduo,各種網路編程模型)+ 學習分布式(mit 6.824、ddia、google三大論文等)基本上是沿著上面幾個方向去展開學習的,有的看書,有的論文,也有的看博客看原始碼,總之,知識面在大三不斷擴充,自己開始關注C10K、C100K這樣的后臺服務器開發高性能、高并發的解決方法,值得一提的是,大三上我們學院有門System Programing的課,教材就是使用的CSAPP,因此我之前大二草草看完的書,得以再次翻開,這一次我把附帶的是個實驗也挨著挨著做了,識訓良多,有位運算各種奇技淫巧,有Bomb lab刺激的打怪通關、也知道了buffer overflow attack… 還有實作基本的記憶體管理等等,印象最深的便是做bomb lab,一個個 phase 的通過真的很讓人興奮,我幾乎是連著把這幾個phase過掉的,當然頭發也沒少掉,

再到后來,我拿到了微信實習offer,然后順利轉正,在我大三下拿到實習offer后,我開始做一些國外計算機課程lab,一方面有錢拿,而且還不低,靠這個我在大三下就實作了經濟獨立,另一方面這些lab很有意思,對提高基礎和編程能力很有幫助,現在我開了一個公眾號「編程指北」分享編程學習方法、技術相關的一些東西,感興趣的同學可以去關注下~在這里列舉一些我做過的覺得有意思的lab:第一個是檔案系統這個玩意挺有意思的,就是要讓你自己去設計一個檔案系統,比如檔案、資料塊、目錄等等,而且你要提供創建、讀寫、洗掉、隨機讀、隨機寫等等介面,然后通過 Linux 的 VFS(虛擬檔案系統) 機制掛載到 Linux 內核中,然后就可以用系統呼叫 open、read、write 這些來在你的檔案系統上進行讀寫,VFS 是Linux一個機制,它規定了 IO 介面,然后你去實作這些介面,你就可以掛載在上面,通過這個東西我深入的學習和了解了檔案系統,報酬也是非常值的,


第二個是SVC

就是版本管理系統,類似 SVN 和 GIT的,但是相對 GIT 做了很多簡化,核心的就是創建分支、分支合并、回滾、commit 這些,通過這個我又去詳細了解了 GIT 的實作原理,并且自己寫了一個簡單版本的 GIT,受益匪淺,也賺到了幾千大洋,


第三個是作業系統的鎖實作

這個就是讓你基于硬體的原子指令 xchg、cmpxchg 這些實作一個鎖,這個需要行內匯編、匯編等知識,簡直是硬核!!!做完這個也解開了我對鎖實作的一些疑惑,

Web Proxy

這個就更有意思了,要求用 C++ 寫一個代理服務器,類似 Nginx 的代理功能,當然,相比 Nginx 弱雞很多,

但是麻雀雖小,五張俱全,而且老外最有意思的是要求代理服務器對一些圖片和 HTML 惡作劇,就是代理服務器隨機的在原始服務器,回傳的回應里 插入一些圖片和文字,因為那天是愚人節,,,不得不說老外還是很有趣的,

還有模擬實作 TCP 可靠傳輸的

這個就更硬核了,人家老外老師就是給力,直接做了一個網站,這個網站你可以通過 TCP 連接上去,然后你需要運行幾個節點,互相發訊息,他們之間的訊息都會經過老師的網站,所以通過網站上是可以控制丟包率的,也能控制節點的拓撲結構,要求就是讓你基于這種不可靠的信道,做出可靠資料傳輸!這簡直就是翻版 TCP 嘛,超時重傳、ACK、滑動視窗啥的都給我上!就是像下面圖中一樣,圓圈就表示你可達的范圍,不同節點形成各種網路拓撲,可以調節網路 丟包率 Loss chance,

當然也有很多寫演算法的,資料結構實作的,圖搜索的,也有做機器學習、深度學習的,反正各個方向都有,

做這些 lab 真的實實在在的提高了我的編程實踐能力,也算是檢驗了前期看那么多書還是有效果滴,(順便還讓我大學期間就月入上萬,,,所以寫了這么多,再點次題吧,我認為自己編程能力突飛猛進就是在看完一本本大黑書、做完一個個lab、寫下一行行代碼之后,附上大學期間買的一些書,畢業的時候大部分都賣了,因為實在不便攜帶:這是帶去圖書館自習室的書(常占位置)



買這些書花了我不少錢,大家都知道計算機這些書一本就是五六十、七八十起步,大學四年光買書就花了幾千塊,不過我一直認為這也是我花的最值的一筆投資,下面就是我自己整理的電子書,絕不是在網上那種打包下載的,而是自己需要學到某個方向的時候去網上挨個找的,最后匯總而成,這部分我是會不斷把它完善的,當成自己的小電子書庫,不多,但貴在精

想要獲取這些電子書,訪問下面這個鏈接,

https://codechina.csdn.net/mirrors/itwanger/JavaBooks

最后真心想說一句,滴水穿石非一日之功,學習計算機還是需要沉下心來好好啃書、看原始碼、寫“輪子”(注意不是在大學瘋狂去寫web應用做crud),逐漸構建起屬于自己的計算機知識體系,然后選擇一個專業方向不斷專研,當然了,多刷題也可以提高編程能力,所以在這里也推薦一份我看過的谷歌大佬開源的刷題筆記:

Github 瘋傳!史上最強!BAT 大佬「LeetCode刷題手冊」電子書開放下載了!

大家覺得有幫助的話,也可以幫我點個贊,筆芯~ 記得關注二哥喲,

最后,貼一下原文鏈接吧:

https://www.zhihu.com/question/356351510/answer/1578302782

沉默王二 CSDN認證博客專家 博客之星 Java 大牛
微信搜索【沉默王二】,回復關鍵字【Java】白嫖1000本精華電子書,我的微信:qing_geee 有任何問題歡迎私聊咨詢,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243581.html

標籤:其他

上一篇:C語言編程>第十周 ② 撰寫函式fun,它的功能是:求m以內(不包括m)同時能被3與7整除的所有自然數之和的平方根a,并作為函式值回傳。

下一篇:感謝有你,一路同行,歷史文章匯總,涉及STM32、模塊使用、傳感器、物聯網、鴻蒙、仿真和綜合實體等嵌入式的方方面面,歡迎關注。

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more