首页
归档
友情链接
关于
Search
1
在wsl2中安装archlinux
80 阅读
2
nvim番外之将配置的插件管理器更新为lazy
58 阅读
3
2018总结与2019规划
54 阅读
4
PDF标准详解(五)——图形状态
33 阅读
5
为 MariaDB 配置远程访问权限
30 阅读
心灵鸡汤
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
archlinux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
菜谱
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
登录
Search
标签搜索
c++
c
学习笔记
windows
文本操作术
编辑器
NeoVim
Vim
win32
VimScript
Java
emacs
linux
文本编辑器
elisp
反汇编
OLEDB
数据库编程
数据结构
内核编程
Masimaro
累计撰写
308
篇文章
累计收到
27
条评论
首页
栏目
心灵鸡汤
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
archlinux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
菜谱
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
页面
归档
友情链接
关于
搜索到
11
篇与
的结果
2016-10-23
我的大学回忆录
我是今年刚从学校毕业的一名软件工程专业的学生,过去的美好时光一直在眼前浮现,我感觉自己的大学生活很美好,生活上有好室友好同学,在以后的规划上又有一位好的人生导师,虽然现在他们在全国各地,有可能这辈子再也见不到他们,但是过去跟他们相处的很愉快,就像一句话说的:不在乎天长地久,只在乎曾今拥有((∩_∩)这句话好像用在这有点不合适,但是我感觉最符合我现在的感觉吧,原谅我读书少)。之前一直想找个机会把在大学的时光记录一下,以便自己以后有个东西好回忆,然后给以后的朋友一个参考吧,但是由于一直在学习或者在忙其他事(其实就是懒)所以拖到现在,不过现在也好,工作了一段时间,我现在又有的新的感悟,现在就把自己的学习经历和现在的感悟一起发出来。同时也把自己当初在学习的时候看的书提一下,算是给后面入行的朋友指一条路。大一——懵懵懂懂在高考那年有点发挥失常,没有考到理想的分数,然后被一所2本学校的软件工程专业录取了,从此开始了4年的大学生活,其实开始的时候我并没有打算学软件工程,当时听家里人的建议主要是报的土木工程,但是好像我这个学校那年新开了一个软件工程专业,然后就这样被录取了。那个时候刚来大学的时候对一切都很好奇,早早的将学校逛了个遍,然后就是新生的军训,入学教育,头一个月就这样平平淡淡的过去了。那个时候我对计算机和相关的技术是没有什么概念的,之前接触计算机是在中学的信息技术课,那个时候的信息技术课对于我们而言就是能上网。所以在学校我对这个专业要学的东西一无所知。我记得那个时候学校开了一门叫做计算机导论的课,将计算机中涉及到的基本上简单介绍了一遍,但是我感觉基本上没什么用,那个时候讲的很多名词基本上都不记得。只知道当初坐我旁边的一个跟我侃各种硬件软件把我听的一愣一愣的。那个时候为学校也有许多社团,但是我一没特长二不知道自己的兴趣在哪,所以当初就报了一个跟专业相关的计算机协会,在这里面我差不多学会了装机以及安装系统,那个时候就社团组织了几次技术讲座,由高年级的学长讲课,然后有几次跟随社团成员一块在社区免费维修电脑,然后在里面被参加了一个装机比赛,苦练了一段时间,拿到了一个预选赛的第二,结果在决赛的时候掉链子了。那个时候还有一门课是C语言,这个是我第一次接触编程语言,那个时候痛苦并快乐着,辛辛苦苦改语法错误(那个时候程序都比较短,没有什么逻辑错误),然后看着它正确的结果,心里的成就感油然而生啊,但是后面接了网线之后一切都变了,为了腾出时间上网,作业没有以前那么认真,而且空余时间也不写程序了,所以说有的学校规定大一不允许带电脑是有道理的,这个时候是打基础的时候,有电脑有网,都没心情学习,基础没打好后面的几年就玩完了。我基本上就是处于这种情况,这个在我大二的时候体现的最为明显。下半年就开了数据结构这门课,很多学生都吐槽数据结构有多难,经过我的真实经历,我发现它是真的难,那个时候指针都没搞明白,而数据结构的算法基本上都是与指针有关,所以那个时候基本上就是想听也听不懂,给的例子代码基本上是一脸懵逼,那个时候只是知道一些基本的概念,大概知道各种数据结构的存储方式,但是算法是写不出来的。然后就这样结束了大一的时光。另外在插一句,网上有段子说亲戚朋友总以为学计算机的就要会修电脑,其实我特别理解这种误解,因为我开始也以为学计算机的基本技能就是要会修电脑,所以那个时候我对一些修电脑的技术特别上心,总是去图书馆借关于维修方面的书,我记得当初看过一本讲怎么挑选硬件,怎么组装那些硬件的书,然后又看了一本关于windows的安装与使用技巧的书,现在想想那个时候真的是什么都不懂,有劲使错了方向。大二——事倍功半我的大二基本上是白费的一年,到大二快结束的时候基本上几门主流语言都陆陆续续学了,那个时候基本的流程是上半年学习C++,下半年学习JAVA,那个时候第一次接触了面向对象,知道了面向对象的语言,那个时候在我的心里以后要找工作基本上只有C++和JAVA,所以需要在这两门语言中选一门学习,当下半年开了JAVA课,学了一段时间的Java后我果断选择了C++,那个时候主要的考虑有3点,第一点是我很不习惯Java那种大括号的格式,每次碰到那种格式,我总是习惯把它放下来,另起一行;第二点是当时我感觉Java很多东西都是用别人的库,感觉没有那种自由,没有太多的发挥空间,而我自己不太想记那些类和类中的方法,那个时候我一直认为C++很酷,要什么都可以自己写,现在想想自己当时真的很幼稚,如果什么都自己写,那现在开发一个应用程序也太慢了;第三点是java强迫你用面向对象,而且那个时候对比C++的hello world 和Java的hello world 我总感觉没有C++的简洁;第四点就是我当时对Visual C++环境太熟悉了,调试、断点、查看临时变量啥的都会,面对开始用命令行编译后来放到我还不会调试的Ecilpse上面我是拒绝的,那段时间主要也是自己懒,不想学新的环境;所以我决定自己以后要往C++上面发展。路选好了,剩下的自然就是学了,那个时候我们还开了一门数据库的课,当时做课程设计的时候需要写一个界面,然后那个时候我从百度上知道了MFC这个东西,那个时候自己比较抠,但是也花钱买了一本孙鑫老师的《VC++深入详解》那个时候就拖了一个对话框然后在网上找了一些代码完成了,而在下半年决定学C++后我下决心要啃完这本书,那个时候书上讲的MFC各个资源的使用我完全蒙了,这个时候我才发现我好多基本的语法都没过关,这个时候我抱着打基础的目的,在许多论坛上得到了很多免费的视频,很多时候我看了一点感觉我好像会了,接着去学一些高级的技术,但是基本上是又卡住了,这个时候再折回头看其他视频的基础部分,那个时候就在这循环,我现在想想那个时候的自己,感觉有点不可思议,为什么不能耐下心来把一套视频完整的看完,而好多看了一半又去找其他的视频,而我的大二就是在这样的一个死循环上面突破不了,那个时候虽说表面上我是在学习,但是我感觉自己并没有学到什么东西,时间都浪费了,而自己也越来越迷茫了,到底该不该走这条路,自己是不是不适合学编程。现在我才体会到网络有时候是个好东西,利用网络确实能给我们学习带来很多东西,但是网络上的学习资料太多,而自己方向不明确,有的时候东西太多会把自己带跑偏了。有的时候社会上都说大学生能力差,大学生在学校怎么堕落,但是我现在感觉到很多时候并不是我们不愿意学,而是缺少高中时候的那种引导,高中的时候一门心思想考大学,考大学需要什么就学什么,而且有老师专门来为你制定学习计划,帮你检查学习成功,这个反馈机制比较及时,这个时候你会感觉到自己距离目标有多少差距,路是不是正确的,会根据这个反馈及时调整,而到大学完全不一样,首先没有了目标,大学即使分了专业,那个专业的就业范围也比较广,而且很多人还从事与所学专业无关的事,没有了目标就不知道往哪个方向努力;另外一点就是即使有了方向,也没有及时的反馈给你,告诉你达成这个目标需要哪些技术,你已经掌握了哪些,还需要哪些,掌握的是不是掌握的很好,需不需要再加强,那个时候我感觉我自己就是不知道学哪些东西,我把关于C++的东西几乎都找到了,每个都想学,但是结果就是什么都没学好,另外就是自己本来基础不好,但是我总感觉知道了那些什么封装,继承,多态我好像就把C++的基础都学会了。没了目标,没有与目标相关的反馈机制,这样再努力也是白搭,这个是我真实的体会。最近我跟一些同学聚会聊天的时候谈论到大学的时候,我跟他们说我的大二是废掉的一年,他们都笑笑说:“你是学霸,经常看到你在那看视频学习,而我们在打游戏,如果你的大二是废掉的,那我们的算什么”,我很认真的跟他们说,那个时候我虽然在看视频,但是真真没有学到多少东西,其实也跟你们打游戏差不多。这个不是谦虚,这个是真实的状态。大三——突飞猛进总结我的整个大学生活,我感觉大三是最有意义的,最累的也是这个大三。在大三我有了志同道合的朋友,有了很好的老师引导,成长当然也是最快的。在大三,学校为了就业率好看,基本上引进了三个培训班,一个是学校老师自己带的C++班,一个是外面的Java,还有一个是安卓的(后来的同学都说那个安卓的是个坑,这是后话)。一般到了大三学生不是报了考研辅导班就是报了这种培训班。当初这个班学费是5500,这个时候我遇到了我的一位人生导师——我们培训班的老师,我们称他老吴,老吴是我们学校关于C/C++最权威的人,我在大二的时候知道有这么一个班,这个班是面向大二大三招生的,那个时候据说只收基础好的学生,我当时怂了一波没有去报名,我有的时候在想,如果当时我在大二的时候报名学下C++然后大三学学操作系统,网络,并结合他们写点程序啥的是不是现在就走向人生巅峰了,但是没有如果。整个大三加上大四的一直到11月份,我都是在老吴的手下学习,那个时候他带着我们从0开始,每周的周一到周五晚上两个小时,周六一天。那个时候基本上为了完成作业天天晚上写代码写到12点以后,而且那个时候我开了这个博客,有的时候也在更新自己的博客,所以基本上学到很晚,但是这种感觉很棒,感觉自己每天都在进步,每天都掌握了新的内容,从基本的语句到函数到指针,再到复杂的函数实现原理,变量的作用域,函数指针,指针函数,数组指针,指针数据,函数传参,不定参数等等,那个时候我把之前自己理解不了的,或者比较模糊的东西基本上都弄清楚了,我感觉自己现在的状态就想某些修真小说里面说的,吐出一口浊气,然后整个眼睛都是雪亮的,没有一丝阴影。在上半年我把整个C的语法部分都学完了,那年的寒假特别长,那个时候有两个月的寒假,所以放假前老吴提示我们回去好好看看汇编,学习汇编对于掌握C语言很有帮助,并且说元旦来了会给汇编的资料,而那个时候我归家心切,找我的另一位人生导师——在这我就称他为林同学,我找林同学要了本关于汇编的书——王爽老师的《汇编语言》,我不知道当初放假前老吴会给什么资料,他会要求我们学到什么程度,但是这个寒假我乖乖把那本书从头到尾看了一遍,把书上的每一个例子都敲了一遍,然后一个个的进行调试,有的时候我经常想如果当初我把老吴的资料拿回去,根据他的要求学(我总是这样,很多时候一遍老师说不需要特别关心的地方我都不会管,不知道这个是不是一个好习惯),会不会有现在的基础(抱歉我总是喜欢假设如果我不这么做会怎样,可能这个就像有的星座的文章上面讲的,双鱼座天生就拿不定主意喜欢胡思乱想吧,有的时候我能脑补好久)。关于这本书对我的影响下面呢还会再说。下半年主要是学习windows编程,从基本的win32窗口程序开始,一步步学习怎么写带主窗口的程序,消息循环,窗口类,窗口,窗口类的回调函数,GDI,基于对话框的程序等等关于界面方面的东西,并带着我们实现了一个仿照MFC的带有消息映射宏的一个纯C的界面库,这个库没有什么特别的牛的功能,就是简单的把窗口的创建,显式以及消息处理函数用宏的方式写了一个映射,这些东西基本上把我之前不了解的MFC的消息映射基本上搞清楚了。接着就是windows上提供的一些与操作系统相关的操作,比如线程,进程的创建,HOOK,DLL,数据库编程,socket编程以及windows上的5大网络模型,通过这些东西我基本上把之前学的操作系统,网络原理,数据库等东西又复习的一遍。之前我一直不理解这些计算机的理论是怎么运用到实践中,通过这些学习,我知道了这些理论是如何被写成接口并给程序调用。暑假的时候我们是没有回家而是接着在培训班里面学习,这个阶段主要是学习C++一些语法,之前在学习C的时候老吴带着我们用C写了一个通用链表,这个链表用统一的代码来实现链表的基本算法,比如遍历,插入,删除,查找,等等,但是对于具体节点的读写操作而是提供了一组统一的函数接口,这些读写函数由具体的数据结构提供者来提供,节点的头四个字节是这个函数数组的首地址,通过强制转化的方式来组成链表,而在需要时通过这头四个字节来调用读写函数,当时他跟我们说的是理解了这些,C++就没有什么问题,当时没太注意,在学习C++的时候我才体会到当时老吴的用心良苦,确实当初写的这些就是模拟C++的虚函数表,而那头四个字节就是C++里边的虚函数指针啊,通过之前的铺垫,我很容易就理解了C++中的多态。另外根据这些特性结合当时学的Windows编程,老吴又带着我们写了一个模仿MFC的库,这次用C++实现,基本上实现了MFC中几大要素:动态类型识别,消息映射等等。至此对于MFC的认识又进了一步。大四——离别前夕大四按照学校的惯例,差不多在每年的11月份就可以离校了,离校前似乎其他同学的心情都挺愉快的,培训班的课基本上都结束了,现在我跟同学差不多就是见一次少一次了,我当时的心情有些沉重,想想一起相处四年的兄弟们就要分离了,有的可能一辈子再也见不到了,总有一丝伤感,心里总是不愿意分离,这段时间总是胡思乱想,不知道以后找工作是否顺利,那些我前面出去的同学不知道怎么样了,总之那段时间我基本上放弃了学习,有时间就找还在学校的同学打打游戏,聊聊天,一起吃个饭啥的,我是本着能多说一句话就多说一句,能多在一起待会就多待会。晚上躺在床上我总是回忆起当初在一起的点点滴滴,思考未来会怎么样,总之那段时间我内心是复杂的,既担心以后该怎么混,也不想就这样离开,那段时间我把回家的时间往后一推再推,但不管怎么往后推,离别的时刻总会来临。说说我当初看过一些书下面我把我之前看过的书从头到尾梳理一遍,毕竟读书也是大学生活的一部分。其实我挺喜欢读书的,平时没有别的爱好,也没啥特长,从小学开始我基本上是靠着书打发时间,从小学的漫画,到中学时候的小说,再到大学时候在图书馆借各种各样的书。《黑客与画家》我非常喜欢这本书,它告诉了我程序员的伟大之处,既然以后是信息化时代,那么做程序员的前景应该还不错。那本书里面将程序员和画家进行类比,里面说好的程序是艺术品而好的程序员是艺术家,我感觉说的挺有道理,所以现在我自认为是一个手工艺人(虽说自己做出来的就是粗制滥造的东西),有一次我的一位朋友跟我说:“你的手又细又长,跟女孩子的手一样”,我跟他开玩笑说,我们程序员是靠手吃饭的是手艺人,手不好看能行吗。后来我发现我的同学或者同事基本上都跟我差不多,都有一双不错的手,不知道是不是真的证明我们程序员是靠手吃饭的(手动滑稽)《疯狂的程序员》这本书主要记录了一个程序员从大学到工作的日子,算是作者的回忆录,之前我百度过这本书的作者,好像说是因为写DNF的外挂被抓了,也不知道是不是真的。我非常喜欢这本书,当时我看的是电子版,后来毕业之后我在淘宝上找到了纸质版,并把它买了下来。书中的主人公绝影是一个对技术比较狂热的程序员,经常为了写程序熬夜,里面没有多好深奥的技术,只有一些简单朴实的话语,同时包含了作者对现实世界的理解,我觉得他里面写的关于资本家对员工的压迫和当前相亲时男方看中女生的相貌,女生着重关注男方的资产这块的分析很有意思,在一定程度上代表了作者对这个世界的思考。但是真正让我着迷的还是里面经常出现的,为了一个技术难题,绝影和BOOS Liu两个通宵加班的场景,每次看到这部分我总是热血沸腾,恨不得给还躺在床上的自己一巴掌(滑稽脸),或许是这本书奠定了我现在的想法——要做就做那些难度大的,没人愿意做的;所以现在我基本上是一条路走到黑,坚持自己的底层之路。另外这本书的副标题很有意思叫程序员版的奋斗,里面确实讲述了一个程序员的奋斗历史。《汇编语言》这本书和下面我要说的一本书对我影响最大,是我为数不多的认真看了两遍以上的技术书籍,这本书最大的价值是前面讲的内存、寄存器、CPU的相关知识,以及后面的寻址方式,函数调用等等,而至于中断宏汇编什么的就不那么重要了,前面的都掌握了之后,可以看看后面的几个深入讨论的部分,那部分是关于C与汇编的,我觉得那些是这本书的重点,当初在看这本书的时候是下足了功夫,我把书上的每个例子都敲进电脑,编译运行,调试。给我影响最深的是3个程序,一个是关于读写一个保存了学生数据的结构体数组的,这个程序用一个寄存器保存数组的首地址,每个数组成员的地址用另外一个寄存器,另外还需要计算每个成员在结构体中的偏移地址,这个例子解决了,我基本上对C中的数组和结构体的寻址有了很深的理解。另外一个是关于函数调用的,当时我写的这个程序最大的问题是少出栈了一个寄存器,结果导致在调用ret时候返回到了错误的地址,结果程序崩溃了,通过这个例子,我终于理解到了程序中引入ebp寄存器的作用,不管你是不是出栈错了,只要运行mov esp, ebp后再直接返回总能返回正确的地址,总之汇编是学习C语言迈步过去的一道坎《VC++反汇编与逆向技术解密》这本是钱松林老师的一本书,在看雪论坛上还有专门的板块讨论它,我当时跟朋友聊天的时候戏称为小黄书,这本小黄书通过汇编的方式详细介绍了VC++语言各个特性具体的实现细节,通过这本书可以很好的理解C/C++,这本书配合之前说的汇编可以很好的理解C/C++。如果不想从事逆向分析,那主要看从第二章到最后的结构化异常处理就好(我是只看了这些)至于后面的例子,不从事这方面可以不用管它其他好书后面要说的书有不少,而且很多我只是简单看了一遍,理解并不深厚,不向上面的那些,有自己的理解,或者夹杂了一些自己有趣的回忆,所以就简单的说说。《windows程序设计》与《win32汇编语言程序设计》我觉得这两本书很详细的讲解了windows应用层的开发,但是需要互相补充,Win32汇编这本书更偏向于底层,比如后面讲的SEH,和PE文件结构,另外这本书前面讲的32位的保护模式,函数的调用约定都很经典,可以看看,然后结合汇编码分析一下,可以更好的理解windows上的开发。我在读Win32汇编这本书的时候就觉得微软的宏汇编真的做的很出色,在使用时就好像是在用C语言,特别是在函数调用这块,既不需要我们考虑参数的压栈和出栈,也不需要进行栈平衡,另外如果你的汇编基础比较好可以考虑将这本书里面的汇编代码改写为C代码。《windows核心编程》这本书是进行windows高级开发必读的经典,这个没什么好说的《windows网络编程》我之前一直以为这本书是老外写得,最后发现原来是国人写的,搞的我之前以为自己买的是盗版,这本书详细介绍了网络方面的编程,其实不光是网络,比如串口通信,管道通信。《现代操作系统》这本书可以结合之前的那本核心编程一起看,主要看看操作系统提供的功能在windows上怎么样实现的,以达到理论结合实际的效果。对于理解这两本书都有好处《VC++深入详解》之前提到过的书,我之前看不懂这本书,并不是书的问题,而是我自己基础的问题,MFC库文件微软都给了,结合之前说的《windows程序设计》关于界面的知识,这本书就不再是问题。《TCP/IP详解》这个主要讲的网络原理的,一般是有两本,卷一和卷二,这个结合之前的windows网络编程一起,主要也是达到理论结合实践的目的。还有一些内核的书比如《寒江独钓 Windows 安全编程》,这个是我目前在研究的书,我自己觉得还不错,可以看看。至于Linux方面的,我没有怎么接触,只能推荐一些大家都觉得好的比如《鸟哥的Linux私房菜》和《Unix核心编程》。写在最后的话其实总结自己的大学的生活,我还是觉得大三过的是最充实的。我得出一个结论人真的需要一个目标,而有了目标之后,有一个引路人也是十分重要的,而我自己的引路人一个是上面说的老吴,一个是林同学。我觉得老吴可能并没有交给我许多知识,而且也没有讲完当初传单上面的知识,很多由于时间关系都略过了,但是我仍然觉得值,主要是因为他教给了我学习的方法,给我指出了一个C++程序员应该走的路。老话说的好:“师傅领进门,修行在个人”,确实是这样啊!!!
2016年10月23日
4 阅读
0 评论
0 点赞
1
2