点击上方蓝色字体,关注我 ——
一个在阿里云打工的清华****学渣!
图 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/神龙计算平台” 招人啦
面试官:会玩牌吧?给我讲讲洗牌算法和它的应用场景吧!
程序猿石头
程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader。用不同的视角分享高质量技术文章,以每篇文章都让人有收获为目的,欢迎关注,交流和指导!扫码回复关键字 “1024” 获取程序员大厂面试指南。
本文分享自微信公众号 - 程序猿石头(tangleithu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。