1024程序猿节,聊聊石头学了哪些课,屯了哪些书?

点击上方蓝色字体,关注我 ——
程序员

一个在阿里云打工的清华学渣!web


图 by:赵学弟@清华园面试

关于做者: 程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader。 欢迎关注,交流和指导!

背景

今天 1024 程序猿节,首先祝你们节日快乐~算法

熟悉石头的朋友知道,我本科就读于某985(CSU,专 “教如何打 CS” 的大学,也称“长沙左家垅男子高等职业技术学院”),而后硕士保送到某 Top2(THU,也叫“北京五道口职业技术学校”)。数据库

硕士毕业以后,石头也一直从事编码相关工做,从大一开始接触计算机,至今也有 10+年头。计算机相关专业有一个明显的好处,就是你在大学所学的相关专业知识和你就业联系得很紧密。因此,在学校的时候,专业课就必定要好好学习和理解。
编程

若是不是计算机相关专业呢?前两天我一个公众号的读者朋友就比较焦虑,找我沟通说目前在某厂实习,由于不是科班出身,明显感受和周围同期入职的科班实习生要差一些。后端

其实,这也不要紧,从看到这篇文章的时候开始,就积极准备,弥补相应的专业知识便可。设计模式

积累专业知识,重视基础

专业基础知识其实才是重中之重,也是最能拉开程序猿之间差距的地方。在阿里社招面试的过程当中也是很是看重基础的,过去项目不牛 X 不要紧,基础知识必定得杂实微信

石头在参与社招面试过程当中,领导也特别交代,除了通常的沟通交流外必定要看基础,基础好,解决问题时有逻辑、有条理,简单的代码题目能写个八九不离十,基本上一面二面也就过了。网络

那么,到底有哪些专业知识呢?就以我本科 CSU 大学给安排的课程来挨个阐述。我还特地去翻了下我以前的成绩单,有各个学期的各个课程安排。

  • 可视化程序设计基础:其实就是上面提到的 VB,经过可视化的效果来正向反馈本身学习。其实,也能够经过好比用 HTML+JS 来体验一下,对“编程”有个直观感觉做为入门也不错。

  • C/C++程序设计基础:C/C++ 仍是很是基础的,建议入门编程以后都掌握一下。

  • 离散数学:离散数学对锻炼逻辑思惟等仍是有很大的帮助。印象中当初老师直接在课上跟咱们玩了一个“数十八罗汉” 游戏,就利用了离散数学里面的思想让老师可以保证赢。

  • 数据结构:这个不言而喻,后文详述。

  • 算法分析和设计:这个不言而喻,后文详述。

  • 汇编语言程序设计:这门课程有利于让你们理解本身写的代码是怎样被计算机认识,底层是如何运转的。推荐学习,书籍可推荐王爽的《汇编语言》。

  • 操做系统:随便列几个话题,看看其中的份量。进程、线程、死锁,内存管理、进程调度、任务调度等等,是否是如今工做中也离不开。推荐参考书籍如:《深刻理解计算机系统》、《操做系统导论》。

  • 计算机网络:TCP/IP,路由,网络 7 层/ 4 层协议,HTTP,DNS 等等。推荐参考书籍:《计算机网络-自顶向下方法》、《TCP/IP详解》等。

  • 数据库系统:ACID,作开发也绕不开的话题。推荐书籍:《数据库系统概念》、《高性能MySQL》等。

  • 编译原理:跟上面的汇编同样,有利于了解程序背后是如何运转。这门课也比较难,印象中是我当初全部专业课中,本人考试得分最低的一门,😂。词法分析、语法分析、语义分析,中间代码生成优化等等。建议通常人有个大概了解。推荐书籍《编译原理》。

以上是我挑选的部分专业课程,其中相关书籍的推荐仅供参考。其余的课程还有诸如:计算机图形学、软件测试、软件体系结构、设计模式、软件度量和应用等。

从中可看出,正如我前面所说计算机相关的专业基础知识和就业联系得很紧密。若是是在校生,就必定不要浪费时间、抓住这些专业课程的学习机会。否则毕业后从事了编程这个行业,也仍是会回到这些基础知识上,正所谓“欠下的债,早晚都是要还的”。

何况,学校的课程学得好,还能帮助得到奖学金、保研、找工做等等,一举多得,何乐而不为呢?

就拿我来讲,自认为不是特别聪明,但我足够努力呀。因我出生在农村,接触电脑比较晚,但在大学的时候相对比较勤奋,学好专业课程,各类奖学金拿得手软(得交学费呀,软件工程专业的学费可不便宜呢),最后又成功保研清华。固然,考得好就不必定等于专业课程学得好,但学得好老是对本身有好处的。

其中,上面提到的“数据结构和算法”这个确实是我认为的重中之重,就算在精力有限的状况下,其余能够放松些,但也不要放过这个话题。从我以前写的《有了这份程序员面试指南,你离大厂Offer还远吗?》 这篇文章中也能够看到,数据结构和算法一直是各大公司面试考察的重点。

好在如今网络资源很发达,网上有各类不错的课程能够学习。这里我推荐,清华大学学堂在线的在线课程《数据结构》,分为基础和高级上下两门课程。这门课程是国家精品课程,由邓俊辉老师讲授,在学校时,我上过邓老师的几门课程,真的很赞,他在讲授“数据结构”和“计算几何”方面拥有20多年的经验,课堂用的 PPT 和动画效果也特别赞。最关键的是,这课程可直接免费白piao,不香吗?

有不少人说数据结构和算法没用?那只是他以为没用而已,或者他的工做当中没用而已。我一直有个观念就是,程序员这个群体自己也是符合金字塔模型的,不必定非得每一个人都是编程高手,找到适合本身的,本身待着最舒服的位置就是棒棒哒。

我在以前的这篇文章也阐述了对待基础知识的见解——《从一道面试题谈谈一线大厂码农应该具有的基本能力》,由于在平常有些场景下,“复制粘贴”工程师貌似也够用了,遇到问题有更高水平的人来帮你解决就行,你们都同样的话,怎么体现高手水平呢?

不过从用人单位角度想,固然是更但愿招聘更加优秀的选手,怎样体现优秀呢?候选人基数太大,怎么筛选,其实也就“高考”同样嘛,经过“考试”择优录取而已。

有时候感受大部分程序员都被大量的需求压迫着,被产品经理催促着,仓促地码着繁琐的业务代码,不断的改着 Bug 又引入新的 Bug。业务代码重要么,固然重要(代码就是服务于具体业务的),但同时也仍是但愿咱们不要抛弃一些基础的东西,多培养一下咱们的编程素养。

咱们在用编程语言,利用各类工具来实现咱们想要达到的目的的时候,能作到知其然,知其因此然岂不更好?更况且不少时候要解决的问题,偏偏是须要上面提到的专业基础知识的积累。

勤思考、多总结

这个其实没必要多说。无论那个行当,作到 “勤思考、多总结” 百利无一害。我在《10 年 bloger 告诉你要不要写博客,又该如何优雅地写博客?》 这篇文章中也提到了,我其实当初最初玩 blog,更多的就是抱着学习总结的态度。

例如,下图是我在读本科和硕士期间相关课程的学习材料,包括老师课件,课程做业和学习笔记和复习资料等,这种平日积累总结颇有效,对于临近期末考试也能作到不慌不乱,仍是颇有做用的。



前我正在梳理相关的内容,后续我将逐步整理其中的精华内容,分享给你们。

哪怕正式工做以后,写周报、月报等也都是阶段性的总结,再好比晋升答辩等等都是须要你平常的思考积累和总结的。反正未来都会用得着,何不如今就开始锻炼呢。

在平常学习和工做之中,咱们看到一个问题的时候,要学会思考背后的道理,好比在接到某个需求的时候,思考这个需求最终是要解决具体什么问题,有没有更好的解决方案?在阅读某段代码,思考原做者为何要这么设计?

就好比看到这段代码,你可否多思考一下其中的奥秘?

public static boolean isEqual(byte[] digesta, byte[] digestb) {
   if (digesta == digestb) return true;
   if (digesta == null || digestb == null) {
       return false;
   }
   if (digesta.length != digestb.length) {
       return false;
   }

   int result = 0;
   for (int i = 0; i < digesta.length; i++) {
       result |= digesta[i] ^ digestb[i];
   }
   return result == 0;
}

上述代码中,比较两个字符串是否相等,按道理,其实中间某位不相等就能够直接返回了,但为啥要遍历完了再返回,这么作的目的是什么?在问了为何以后,你可能就会知道,原来这么作是为了防止计时攻击。完整文章可参考本人写的这篇文章——《这 10 行比较字符串相等的代码给我整懵了,不信你也来看看》

小福利

最后,送你们一点小福利。(感受是个公众号号主,不发个当当优惠券都很差意思了。

我把上面石头提到的书整理一下,列到下面,感兴趣的同窗能够购买,能够多方对比下价格,目前当当每满 100 减 50,最后我这边有个专属优惠可再省 40 元(160 买 400),只要结算时输入优惠券码【2YDRTV】便可。营销套路,书价格天然提高了,不过总体仍是有必定优惠的,固然你也能够到其余地方购买, 我们的宗旨是哪里便宜买哪里便可

这里是推荐的部分书单:







啊,挑了半天好像最终只能选 10 本,下图是石头家书架躺着吃灰的部分书籍,也提供给你们参考还有部分书用来垫显示器等等了,就不拍了。你也能够留言告诉你们,你的书还用来垫啥了?

如下是【博文视点】(左图)和【机械工业出版社华章公司(右图挑选比较经典的 CS 相关书籍,也一并提供给你们参考,趁活动价屯几本也何尝不可

经典书籍(点击放大扫码识别)

总结

总体来说,针对“入门进阶编程”这个话题,我谈了谈本身的理解,重点仍是要重视基础,经过小项目正向激励本身多主动学习,而后作到勤思考,多总结

以为本号分享的文章有价值,记得添加星标哦。周更很累,不要白 piao,须要来点正反馈,安排个 “一键三连”(点赞、在看、分享)如何?😝 这将是我持续输出优质文章的最强动力。



推 荐 阅 读

快快加入咱们——“阿里云-ECS/神龙计算平台” 招人啦
面试官:会玩牌吧?给我讲讲洗牌算法和它的应用场景吧!

面了 7 轮 Google,最终仍是逃不脱被挂的命运

从一道面试题谈谈一线大厂码农应该具有的基本能力

互联网大厂内推求职的正确姿式?

给 JDK 报了一个  P4 的 Bug,结果竟然……



程序猿石头 


程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader。用不一样的视角分享高质量技术文章,以每篇文章都让人有收获为目的,欢迎关注,交流和指导!扫码回复关键字 “1024” 获取程序员大厂面试指南



本文分享自微信公众号 - 程序猿石头(tangleithu)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。