我的大学是个二本(吉首大学,你肯定没听说过),大学里面的专业是电子信息工程,入学没多久,我就感觉我完全报错专业了,因为我对硬件毫无兴趣,我从大学一年级开始学习编程,我记得最初的课本是 谭浩强 老师的《C 语言程序设计》,这本书对于中国的学生来说,基本可以说是无人不知,无人不晓了吧,没错,就是下面这本
让我们来复习一下我们学习到的第一个 C 语言程序,我觉得你应该已经知道了,我仍然记得第一次编译成功的那种喜悦,这很不容易,使用的软件好像是 VC6.0 吧,这都是历史了。
#include<stdio.h>
int main(int argc,char*argv[]){
printf("hello world\n");
return 0;
}
大二的时候,我们又开设了谭浩强老师的另外一门课《C++程序设计》,紧接着有开设了汇编,JAVA,当然了,还有必不可少的课程数据结构,期间我还拜读了难度不小的书《算法导论》,但是大学里面的课程多而不精,结果到毕业的时候,还是只学习到皮毛。
我的第一份工作是 Android 开发,误打误撞的学习 Android,是因为,我靠,我竟然还有一个月就要毕业了,赶紧找个饭碗先干着啊,就是这么巧,身边有人学习 Android,我就搞了一套视频,自学了 2 个月,毕业之后就屁颠屁颠的去找工作了,找工作的那个难度啊,想起来都觉得,我太难了。你猜怎么着,我的第一份工作在华强北的赛格大厦,第一份工作是个外包,公司里面也只有 10 多个,因为没钱,每天上班需要坐 1 小时 30 分钟的公交去上班,那个累啊。按理说,第一份工作,应该珍惜,但是干着干着,就感觉没啥意思了,三个月之后,就搞前端去了,之前利用周末和空闲时间学习了一下前端的知识(有个大学是有搞前端,咨询了一下相关知识),包括 HTML,JavaScript,Vue,React,AngularJS(版本 1,我估计很多人没见过,哈哈,说明你还年轻),期间,我看了《JavaScript 权威指南》这本书,看完之后,觉得自己牛逼哄哄了,然后去看了 JQuery 的源代码(别人都说 JQuery 很牛逼,谁牛逼就搞它),搞完了 JQuery 之后,听别人都说,Angularjs,React 很牛逼,所以又去怼它们这两货去了,没多久觉得用起来很简单,就硬着头皮,琢磨它们的源代码去了,卧槽,那个累啊,但是没关系,硬是啃下来了,后面想着,要不我也写个?哈哈,说干就干,我就模仿者 JQuery 和 AngularJS 自己写了个(实现了部分功能,后面就没干了,累啊)。后面工作辞了,找了一份前端的工作(伪造一下简历还是可以的),一同忽悠,面试通过。
第二个公司是卖保险的,我的工作也不难,也没啥太大的难度,公司的后台还是用 C# 开发的(我还是喜欢读作 C 井,你来打我啊)
可惜啊,这份工作还是没做多久,我发现我对前端完全没有兴趣,可能是我的审美能力有问题,可能是里边有学习 PHP 的,我又学习 PHP 去了,搞了 2 个月,学习了国内的第一框架 ThinkPHP(别人都用啊,所以必须得学)。这次换工作都已经 11 月份了,至于工作经验嘛,你懂的。
这份工作在深圳南山,至此,我就和 PHP 结缘了(不代表我没换工作啊,不换怎么涨工资),学习的道路永远都是漫长的,为了让自己的技术更牛逼(自我感觉很良好),后面学习了 YII,ZendFramework(这个很复杂),Symfony,Laravel(号称艺术家使用的框架),另外还学习了号称很牛逼的商城系统 Magento(它自己觉得很牛),基本上我都深入的钻研了一下他们的源代码,后面得出一个结论,他妈的,感觉都一样,没错,本质都一样。
学习 PHP 的时间,算是蛮长的了,但是时间长了,照样感觉没意思,就那些东西,搞来搞去的,这可咋办,理想还要有的,记得平时 Linux 编译软件时屏幕上带感的输出信息,好帅气啊,我就觉得,是时候搞它了,弄死它。说干就干,网上看了几篇博客,学习步骤啥的,买啥书啊,一顿操作,书单如下:
- 《C 专家编程》 装逼永远是第一位
- 《Linux 程序设计》 带你入个门
- 《Unix 环境高级编程》 说的很高级
- 《Unix 网络编程卷一》 适合我这样的小学生
- 《Unix 网络编程卷二》 这个是讲进程间通信的
经过几个月的日夜奋战(白天还是要上班的,下班之后晚上看),一页一页的看,仔细看它的每个例子,自己编译一边(不要高兴太早,很可能编译不通过,得想办法啊),头发掉了不少,总算是过了一边,感觉人都快死了,不过只要你够狠,这些都不是问题。
有了这些基础知识之后,总得练习练习啊,哈哈,还是那句老话,谁牛逼就搞谁,于是就找到了服务器的霸主 Nginx,GitHub 上克隆了一分代码,代码是有了,工具不能少啊,SourceInsight 就粉墨登场了(这是个神器,谁用谁知道,我知道了),至于学习的难度,你看我的头发就知道了,月亮代表我的心,本来如杰森斯坦森般帅气,就变成这样了,值得一提的是这期间我读了一本大神写的书籍《深入理解 Nginx》,这本书写的相当好,但是要注意了,它也仅仅是讲了大概的流程,也就是俗话中说的师傅领进门,修行在个人,Nginx 难度很大,相关的博客比较少,而且难懂,年轻人一定要忍耐。
在搞完 Nginx 之后,因为我是搞后台的嘛,所以经常和 Redis 打交道,自然而然的,Redis 就成了我的下一个目标,这里也有一本书,叫做《Redis 设计与实现》,让人欣喜的是,Redis 的代码注释相当之完备,到这里我就要吐槽上面的 Nginx 了,你写一段注释会死还是咋的,你过来啊,看我不打死你。
以为这就是终点嘛,还真不是,后面继续学习了 C++,我觉得 C++ 除了类的概念和常用的算法,其它都是累赘,增加了学习的难度不说,而且让你怀疑人生,你说很简单的东西你非得搞得这么花里胡哨,想干什么,记住这个哥,C++ 的创始人。
在学习了 C 和 C++ 的知识后,自己还折腾了一下,很简单,模仿,自己写个 HTTP 服务器总可以吧(功能完备的 HTTP 服务器没你想象的那么容易),后面还撸出了其它的一些软件,不得不说,C 和 C++ 真的很棒。
学习的态度还是要有的,听别人说,GO 和 Python 很火,然后又去学了一下,这次学了一个星期,就没进行下去了。因为有了之前的学习经历,这些东西非常相似,没有动力学下去了。
当然了,中间还学习了一下 PHP 的 so 扩展(很负责任的告诉你,扩展真的很简单),Android 的 NDK(Android 里面算是高级一点儿的技术,蛮有意思,也不难),也算是兴趣使然吧。
上面说了一些我的个人经历,现在回想起来,真的感慨万分,都是泪啊,如何学习一个新的语言,技术,我觉得我还是可以给喜欢学习或者是即将要学习的人一点建议。
如果你要学习一门新的语言,请不要一开始就购买书籍,最典型的,这里以 JAVA 为例,如果你要学习 JAVA,别人肯定给你推荐《JAVA 编程思想》,我以前也对此深信不疑,但是作为过来人,你完全不需要,也不应该,你应该等到你有一定的 JAVA 编程经验再去看,这样才有意义,有针对性,哪里不懂看哪里。你可以去 菜鸟教程 里先学习一下。还有你肯定听到别人大谈特谈 JAVA 的反射,负责的说,一般人用不到。这样的例子举不胜举,学习 C++ 也是一样,我记得我之前买了一本 C++ 的编程书籍《C++ primer plus》,当初我看到这本书的厚度之后,惊呆了,如果你让一个新手去看完这本书,它还有学习下去的动力么?这些书里面的很多东西都是别人的经验总结,你说你啥经验没有,再说意义,就更没有意义了,这些书完全是给有经验的人准备的。
培养自己阅读源代码的习惯,如果你看过那些流行技术的源代码,你会感慨,自己的代码像一坨屎,代码不一定写的要多么的华丽,但是一定要简洁,通俗易懂,有些人写代码,非要搞得花里胡哨,显得自己很牛,你说你写的代码,别人都读不懂了,那么它的意义又在哪里。代码界有句很经典的话 Fuck the source code,这很真实,没有人天生看得懂别人的代码,你需要认真看,仔细看,说看不懂的,那说明你修行还不够(提升自己能力的时候到了),或者是耐力不够,这都没关系,写代码跟做人是一样的,等你看懂别人写的,你终将会守得云开见月明,心中豁然开朗,这会陪伴你一生。
多学习一下其他领域的知识,你也不必拘谨于一门编程语言,终身学习也是一种人生态度,多掌握一门技能,也能让你的未来充满更多可能性,但是切忌随波逐流,别人说好,并不一定好,一定要有自己的主见,我就是要说它不好,不好,怎么了?哈哈。
多实践,那句话咋说来着,实践是检验真理的唯一标准,计算机编程更是如此,想要学好编程,勤加练习是必不可少的,除非你是个天才。
如果你真的想要在代码上面有所领悟,你一定得学习一下代码界的大师级人物 Dennis Ritche 创立的 C 语言,也是我最佩服的人,C 语言就相当于金庸老先生武侠世界的《九阴真经》,下面让我们浏览下这位大师的风采。
Dennis Ritche 和乔帮主同一年离开人世,令人痛心不已,终身未娶,献给了它最爱的软件事业。至于为啥需要学习 C 语言,我觉得等你领悟到了 C 语言的精髓之后,自然明白,你肯定会感慨,世间咋会有这么简洁的东西,C 语言在手,天下无敌,不行的话,你来打我。
最后也是最重要的一点,耐得住寂寞,无论是武侠小说,还是真实世界,想要有所建树,这点是必须的,这是你晋级高手的必要条件,因为你有自己的路要走。
Dennis Ritche 大师走好,尘归尘,土归土,希望大师下辈子,能有个陪伴一生的伴侣吗。
本文为转载,原文地址: