为了成为黑客,我的大学四年自学计算机之路是怎么过来的?

263 篇文章 67 订阅
17 篇文章 1 订阅

毕业参加工作这几年,在不同的公司遇到过不同的团队,也认识了许多不同的人。

身边的同事经常问我:“你成都的啊,川大还是电子科大?”

每当这个时候,我就很尴尬了,心里问对方一句:成都难道就这两所大学吗?

在这里插入图片描述

笔者高考遭遇滑铁卢,只去了一个普通学校,学的也不是计算机专业,而是一个偏硬件的:通信工程。

在之前的自我介绍里说过,来自农村的我从小就被身边的人灌输各种妖魔化电脑、网络的思想。所以直到高三,我也没玩过几次电脑,没上过几次网。

也因为这个原因,高考选择专业时,对计算机专业有了抵触,最后稀里糊涂的选了个通信工程。

没想到几年后,兜兜转转半天还是走上了计算机之路。这篇文章就给大家摆一摆龙门阵:轩辕的大学四年自学之路是怎么过来的?

大一

大学那几年,都流行考证,也不管这个证考来有没有用,考来干嘛,反正别人考,跟着考就对了!

大一的第一个学期,我们非计算机专业的同学流行考计算机二级证书,说是以后毕业找工作加分项,我也没有免俗,跟着交钱去学吧。

那时候也不知道计算机二级证书是什么,要学哪些东西,没想到学校统一报名学的竟然是个早已作古了的数据库编程语言:Visual FoxPro。

在这里插入图片描述

不过,第一次接触计算机编程,还是很兴奋的,从表的字段、结构到SQL语言,然后到程序设计的循环、分支、函数等等基础概念的第一次接触,都在当时一张白纸的我脑子里留下了深深的印象。

虽然这门语言早已过时,但是有一说一,这位老师是讲的真好,可以算是大学四年里我认为单纯教学能力上最出色的老师!没有之一。

通过这个计算机二级的考试,算是正式点燃了我对计算机和编程的兴趣。考完了计算机二级之后,我没有停下,继续用这个VFP自己做了一些程序,各种XX管理系统。

那时候刚刚进入大一下学期,开始教授C语言了,我却没有意识到这门课的重要性,还在研究VFP的高级用法。直到当我拿着写出来的软件给网友晒的时候,却被泼了一盆冷水:这年头谁还用这语言啊,连C语言都不会吗?就这?

那时候开始,我开始调整精力,开始全面学习C语言。

不过,大学老师讲的太水了,用现在的话讲,就是一个只会照着PPT念的机器人,上课让人昏昏欲睡。和之前教计算机二级的老师教学能力,相差甚远。

我很快意识到,想靠上课来学C语言多半是没戏,这进度也忒慢了。

与此同时,我还意识到一个更重要的问题:我的通信工程专业,以学校的平台和师资,如果想走硬件路线,太难出头了,不是不能,是太难了。而如果走软件路线,则要容易得多。也就是在大一的下学期,我正式下了决断:学软件!

我开始尝试自学,很多跟计算机关系不大的课程,能不去就不去,自己看书学习,期末考试确保不挂科就行。

但是编程这东西,三分靠看书,七分靠实践,得要上机练习才行!实验课每周次数有限,不能做到随时想练就练。后来打听到学校有个学生活动中心可以上网,还特便宜。于是我开始每天往返于学生活动中心,在那里度过了一个多月,把C语言这门课本上的东西算学完了。

当时的教材是著名的清华大学谭浩强老师编写的《C程序设计》,书中只是一些C语言基本的语法介绍,一个月后学完感觉这东西好像没啥用,都是在一些黑乎乎的窗口写一点数学运算之类的题目,实用性不高啊。

图片

身边有高年级的师兄告诉我:“光学这个不行,你得去做点实战项目,去图书馆找几本书吧!跟着练”

于是,我又去学校的图书馆,找了几本书。拿回来一看,里面出现了好多不认识东西,一问才知道,我拿的是C++的书。

虽然不知道C++是什么,但听说下学期也要学这个,索性我就提前学了。

书是有了,但电脑的问题却日益严重,去学生活动中心电脑室上网也不是个长久之计,有时候去晚了根本没位置,而且距离宿舍也不近,来回挺折腾的。而买新的电脑,动辄就是几千块,我一个穷小子实在负担不起,也开不了口向家里要。后来,我在淘宝上淘到了一个二手笔记本电脑,五百多块拿下了,虽然慢的要命,但好过没有。于是我开始在这台电脑上正式开启了我的C/C++编程之路。

大一的下学期,还有一件事,就是计算机的一门基础课:计算机网络。

这门课和C语言是同一个老师,同样的PPT走马观花,同样的让人昏昏欲睡。

但是偶然一次路过,发现隔壁班的计算机网络是当初教计算机二级的老师在上课,我和两个小伙伴就一起溜进去蹭课,这一蹭不要紧,一下就上了瘾。

这位老师风格独立,根本不用学校发的教材,而是自己编写了一套PPT,从最底层的原理讲起,从通信的编码校验,到局域网的802.3、802.4、802.5等技术演进,用生动有趣到生活实例告诉我们什么是CSMA/CD,听得我们如痴如醉。我现在写的很多故事性的文章,一定程度上都有这位老师的影响。

在我们几个的口口相传下,我们班在上计算机网络课时,门可罗雀,而隔壁班人却越来越多,不知道我们的计算机网络老师看到后心里有何感想。

大一这一年,是迷茫中寻找方向的一年。

大二

买来的二手电脑终究经不起我的折腾,才用了半年左右就出现各种毛病。大二上学期的国庆节回到老家,跟奶奶聊起了学校的经历和日常。奶奶听后二话没说,拿出了四千块钱给我,让我去买电脑。我是又喜又愧,喜的是可以换新电脑了,愧的是我知道这四千块钱对她来说有多么不容易。奶奶说,等我以后挣钱了再还她就是了,可快十年过去了,我还没还,奶奶却不记得这事了。

言归正传,换上了新的电脑,得更努力的学习才行。

大二这一年,加入了学校一个研究所,跟着老师还有师兄师姐们一起做项目,这一年是收获的一年。

进入研究所的第一件事,就是一个跟网络数据包打交道的项目。

印象最深的是,第一次看到了网络数据包长的是什么样的。之前学计算机网络时,总把数据包挂在嘴边,什么TCP/IP几层协议,张口就来,却连真正的数据包都没见过。

学习计算机网络,一定得抓个包来看看,看看课本里的一层层协议,一个个字段,在网络中真实的样子。这里推荐两个抓包软件:

专业人士:wireshark

图片

如果是新手小白,Wireshark纯英文版用起来有一定门槛,推荐一个国产软件:

科来网络分析系统

图片

中文界面操作起来更简便易懂。

这段日子,是编程能力快速提升的时期,之前都是自己跟着书瞎练习,现在有了过来人指导,避免了很多弯路。

记得研究所老师说过一句话:什么时候觉得自己编程能力入门了?就是当你能够独自编写超过1万行代码软件的时候。

进入研究所之前,自己写的软件,每个工程也就一两千行代码的水平。而接触真实的项目后,一下就被十几万行代码的巨大工程震撼到了,由衷的佩服师兄们是怎么完成这么浩大的工程的。

那时候,研究所项目很多都是VC++开发,虽然经过自学有了C++的基础,但一下接触VC++,还是来的有点猛。于是乎,开始各种找资料补课学习。

后来在网上找到了一个叫孙鑫老师的《深入VC++详解》的视频,共计二十堂课,讲的全是干货,真的是深入浅出,很快靠着这个视频算是入了门,终于初步具备开发项目的能力。

这个时期,跟着几本VC++实战教程,做了几个软件项目,不得不说,实在比VFP难多了。

学了网络编程,做了一个网络聊天软件,在寝室局域网中用来跟室友聊天。

为学校的信息安全比赛,开发了一个监控软件,可以同时监控多个人的电脑桌面。

图片

还写了一个Web服务器,第一次独自开发超过了3万行代码。

大二这一年,是找到方向后快速成长的一年。

大三

经过大二一年的学习,算是从计算机小白,变成了一个有一些编程能力的“老司机”。

大三上学期,研究所来了一位新的师兄,师兄是计算机学院正统软件工程专业出身,不像我们几个东拼西凑学来的,一进来就给我们带来了全新的冲击。但这个冲击,是正面的。

科班出身就是不一样,软件工程理论、设计模式、Java技术栈,这些东西,都是我之前靠自学从未接触过的东西。

知道落后不可怕,不知道自己落后才可怕。直到大三才第一次有了一个意识:不要把目光局限在研究所,局限在学校这个小小的空间,该睁开眼去看看外面的世界,看看社会上公司里现在都用什么技术。

那时,我才发现,我一直洋洋自得的VC++编程技术,早已走过了它的巅峰时期,现在是Java和Linux的天下,是时候该学一些新东西了。

可能是先入为主,也可能是年少轻狂,我和Java的第一次相遇很快就结束了,初步了解之后觉得一个靠虚拟机运行的语言怎么能比得上C++?我当时竟然诞生了这样的想法,遗憾的与Java擦肩而过。直到多年后毕业工作,才重新学Java,真想捶扁当时的自己。

反倒是Linux,越学越有劲,从一开始接触命令行时战战兢兢,每做一个操作都要百度搜索,到后来对命令操作爱不释手。

后来不满足于表面的应用,在淘宝上淘了一本盗版的 《深入Linux内核架构》,开始琢磨起这个神奇的操作系统来。

因为并非计算机专业,所以并没有系统的学习操作系统这门课程,反而是先看了《Windows内核原理与实现》和《深入Linux内核架构》这两本具体写两个操作系统内核的书之后,才转过头去看操作系统原理这门课程。

图片

图片

有了这两本书的铺垫,再看操作系统,竟是如此的丝滑和顺畅。每次看到操作系统原理中的理论章节,就能浮现出Windows和Linux在这个理论上具体实现的异同之处。相反,如果一开始先看纯理论,很可能不会有这么深刻的认识。

大三的这一年,是开拓视野和眼界的一年。

大四

大四的主题,每个人都知道,那就是:找工作。

确实如此,其实从大三下学期开始,我们研究所的小伙伴们就开始关注秋招了。

那几年,还不流行刷leetcode,倒是流行看一个系列的书:《程序员面试宝典》。不看不知道,一看吓一跳,我们这东拼西凑学来的,毕竟不够系统,基础知识不扎实,很多题目都不会做。

大三结束的那个暑假,开始疯狂补课,尤其是下面几个重点方向:

  1. C/C++编程基础
  2. 计算机网络
  3. 操作系统
  4. 数据结构与算法

这些知识,平时多多少少有接触或用到,但从未有机会系统全面的梳理过。在这个暑假,一边做题,一边看书,突然找到了一点高考的感觉,因为我们知道,9月份就要开始的秋招大戏,对我们而言,那就是一场高考。

临近9月,开始在网上开始各种搜索往届各大公司的笔试面试题,看别人的面经贴,学习经验。

不过这还是不够,为了更加真实的锻炼自己,在8月份的时候,我在网上找了几家公司投了简历,去真实的面试几次。

投简历的目的,不在于是真正想去这家公司,而是想通过这样的实战面试,锻炼自己不怯场的胆量,毕竟在象牙塔里长大的我们真正走出社会,还是有一些障碍需要去跨越。

试了有四五家公司,在过程中不断发现自己的问题,包括技术上的问题和交流沟通表达上的问题。你还别说,这一招还真管用,越到后面自己越发自信,一开始连自我介绍都说不利索,到后面都能够流畅表达脱口而出。

好在功夫不负有心人,技术上查漏补缺,面试经验也积累了一些,在秋招正式开始不久,我就收获了心怡的offer,总算可以为自己的大学四年交上一份合格的答卷了。

经验谈
我的大学四年自学过程,总结了几条经验,供大家参考:

非科班没关系,只要想学,就有希望。
基础知识很重要,别只做项目,忽略基础。
别闷头自学,多听听别人的意见,但也别光听一家之言,兼听则明,偏听则暗。
找一群志同道合的小伙伴,互相鼓励,一起学习,共同进步。
及时关注外面的世界,不要局限在自己的小圈子里。
理论与实践结合,多走出去,树立自己的自信心。
最后,给大家推荐一些,在自学历程中我自己看过,且有必要推荐给你们看的书。

学习资源分享

如果你想真正在网络安全这个行业深耕下去,简单列举一下书单中的内容,如果大家有什么比较好的想法,欢迎评论区交流!

计算机及系统原理

《编码:隐匿在计算机软硬件背后的语言》 【美】Charles Petzold·
《深入理解计算机系统》【美】Randal E.Bryant·
《深入理解Windows操作系统》【美】Russinovich,M.E.;Solomon,D.A.·
《Linux内核设计与实现》【美】Robert Love·
《深入理解Android内核设计思想》林学森·
《Android系统源代码情景分析》罗升阳·
《深入理解Mac OS X & iOS操作系统》【美】Jonathan Levin·
《深入理解Linux内核》 【美】DanielP.Bovet·
《代码揭秘:从C/C++的角度探秘计算机系统》左飞·
《Android Dalvik虚拟机结构及机制剖析(第1、2卷)》吴艳霞;张国印·
《Android Internals::Power User’s View》【美】Jonathan Levin,中译本
《最强Android书:架构大剖析》

编程开发
系统平台
Windows
《Windows程序设计》【美】Charles Petzold·
《Windows核心编程》【美】Jeffrey Richter·
《Windows环境下32位汇编语言程序设计》罗云彬·
《Windows驱动开发技术详解》张帆

Linux/Unix
《UNIX环境高级编程》【美】W.Richard Stevens;Stephen A.Rago·
《Linux程序设计》【美】Neil Matthew;Richard Stones·
《Linux设备驱动程序》【美】Jonathan Corbet;Alessandro Rubini;Gerg Kroah-Hartman

macOS/iOS
· 《iOS编程》【美】Christian Keur;Aaron Hillegass
· 《OS X与iOS内核编程)【澳】Halvorsen,O.H.;Clarke,D

Android
· 《第一行代码——Android》郭霖
· 《Android编程权威指南》【美】Brian Hardy;BillPhillips

编程语言C
《C语言程序设计》【美】Brian W.Kernighan;Dennis M.Ritchie·
《C Primer Plus》【美】Stephen Prata,入门书籍·
《C和指针》【美】Kenneth A.Reek·
《C陷阱与缺陷》【美】Andrew Koenig·
《C专家编程》【美】Peter van der Linden

C++
· 《C++ Primer Plus》【美】Stephen Prata,入门书籍
· 《C++ Primer》【美】Stanley B.Lippman;Josée Lajoie;Barbara E.Moo,进阶书籍

ASM
· 《Intel汇编语言程序设计》【美】Kip Irvine
· 《Intel开发手册》
· 《汇编语言(第3版)》王爽
· 《x86汇编语言:从实模式到保护模式》李忠

Java
· 《Java核心技术》【美】Cay S.Horstmann;Gary Cornell,入门书籍
· 《Java 编程思想》【美】Bruce eckel,进阶书籍

JavaScript
· 《JavaScript DOM编程艺术》【美】Jeremy Keith;【加】Jeffrey Sambells
· 《JavaScript高级程序设计》【美】Zakas.Bicholas C.
· 《Vue.js项目开发实战》张帆

Python
· 《Python核心编程(第2版)》【美】Wesley J·Chun

Shell
· 《Linux Shell脚本攻略》【印】Sarath Lakshman

调试技术
· 《软件调试》张银奎
· 《Debug Hacks》【日】吉冈弘隆;大和一洋;大岩尚宏;安部东洋;吉田俊辅
· 《格蠹汇编:软件调试案例锦集》张银奎

数据结构与算法
《数据结构与算法分析——C语言描述》【美】Mark Allen Weiss·
《算法导论》【美】Thomas H.Cormen;Chales E.Leiserson;Ronald l.Rivest·
《我的第一本算法书》【日】宫崎修一;石田保辉,入门书籍,无代码进行图解·
《算法图解:像小说一样有趣的算法入门书》【美】Aditya Bhargava

编译原理
· 《编译系统透视:图解编译原理》新设计团队,入门书籍
· 《编译原理》(龙书)【美】Alfered V.Aho;Monica S.Lam;Ravi Sehi;Jeffrey D.Ullmam
· 《编译与反编译技术实战》庞建民

其他
· 《编程高手箴言》梁肇新
· 《代码整洁之道》【美】Robert C.Martin
· 《代码大全》【美】Steve McConnell
· 《重构:改善既有代码的设计》【美】Martin Fowler

网络技术
· 《TCP/IP详解(卷1:协议)》【美】Kevin R.fall;W.Richard Stevens
· 《Wireshark数据包分析实战》【美】Chris Sanders

安全技术
安全开发
《天书夜读:从汇编语言到Windows内核编程》谭文;邵坚磊·
《Rootkit:系统灰色地带的潜伏者》【美】Bill Blunden·
《Rootkits——Windows内核的安全防护》【美】Gerg Hoglund;James Butler·
《BSD ROOTKIT设计——内核黑客指引书》【美】Joseph Kong·
《寒江独钓:Windows内核安全编程》谭文;杨潇;邵坚磊

逆向工程
《加密与解密》段钢·
《恶意软件分析诀窍与工具箱——对抗“流氓”软件的技术与利器》【美】Michael Hale Ligh;Steven Adair· 《C++反汇编与逆向分析技术揭秘》钱林松;赵海旭·
《IDA权威指南》【美】Chris Eagle·
《逆向工程权威指南》【乌克兰】Dennis Yurichev,多平台入门大全·
《Android软件安全与逆向分析》丰生强·
《macOS软件安全与逆向分析》丰生强·
《iOS应用逆向工程(第2版)》沙梓社;吴航

Web安全
《黑客攻防技术宝典:Web实战篇》【美】Marcus Pinto,Dafydd Stuttard·
《白帽子讲Web安全》吴翰清·
《Web安全测试》【美】Paco Hope;Ben Waltber·
《Web前端黑客技术揭秘》钟晨鸣;徐少培·
《精通脚本黑客》曾云好

软件/系统安全
《0day安全:软件漏洞分析技术(第2版)》王清,入门书籍·
《漏洞战争:软件漏洞分析精要》林桠泉,进阶书籍·
《捉虫日记》【德】Tobias Klein,进阶书籍·
《黑客防线2009缓冲区溢出攻击与防范专辑》·
《内核漏洞的利用与防范》【美】Enrico Perla;Massimiliano Oldani·
《Fuzzing for Software Security Testing and Quality Assurance(第2版)》【美】Charlie Miller,博文视点翻译中·
《iOS Hackers’s Handbook》【美】Charlie Miller,不推荐中文版·
《The Mac Hacker’s Handbook》【美】Charlie Miller·
《Android安全攻防权威指南》【美】Joshua J.Drake;【西】Pau Oliva Fora;【美】Collin Mulliner·
《The Art of Softwar Security Assessment:Identifying and Preventing Software Vulnerabilities》【美】Mark Dowd·
《Android Security Cookbook》【美】Keith Makan; Scott Alexander-Bown,中译本
《Android安全攻防实战》·
《模糊测试-强制性安全漏洞挖掘》【美】Michael Mutton·
《Exploit编写系列教程》【美】Corelan Team·
《MacOS and iOS Internals,Volume Ⅲ: Security & Insecurity》【美】Jonathan Levin,博文视点翻译中·
《灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术》【美】Allen Harper;Shon harris· 《威胁建模:设计和交付更安全的软件》【美】Adam Shostack

无线电安全
《无线电安全攻防大揭秘》杨卿;黄琳

硬件安全
《硬件安全攻防大揭秘》简云定,杨卿

汽车安全
《智能汽车安全攻防大揭秘》李均;杨卿· 《汽车黑客大曝光》【美】Craig Smith

运维
《Docker技术入门与实战》杨保华;戴王剑;曹亚仑·
《鸟哥的Linux私房菜》鸟哥

网络安全学习资源分享

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后的最后,祝每一位看到这里的朋友都能被世界善待,收获自己想要的offer。毕竟,有梦想谁都了不起!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值