真正的编程能力!

共 2445字,需浏览 5分钟

 ·

2021-05-20 02:55

大家好,我是二哥呀!

有票圈的读者应该知道了,我家大助理周五去郑州考试了,留我和小助理在家,家里没了领导(嘘),很多事情就懒得做,比如说周五在票圈的抽奖赠书,我就不想统计,只能等她晚上回来后再统计了。

平常这项工作都是交给大助理做的,毕竟二哥在家是很有地位的,排第三,前面两位是老婆和女儿,也就是大助理和小助理。

我票圈维护的还是挺用心的,另外就是所有微信发我的问题我都会一一回复,不论大小,不论难易,只要我有时间和精力,都尽可能给大家一点点帮助,绝不吝啬。

周五发圈送小傅哥的书,点赞人数直接就爆了,你瞧,微信这么牛逼的 APP 在加载头像的时候都很吃力!

之前有读者评论说,“二哥,你不能只抽前 100 名的呀,你得考虑后面同学的感受”,不是我不想考虑,而是实施起来很困难,每次我都要先清一波手机内存,再来统计,但仍然无济于事,加载很慢。所以,一句话,大家看到我发圈了,就立刻马上赞就对了,别犹豫,手速一定要快,毕竟是个多线程并发的事!

另外,我发现一个规律,中奖的读者一般都是平常点赞比较勤快的,虽然没有什么科学道理,但确实是个事实。

好了,废话先说到这。接下来,给大家分享一篇我在知乎上发现的好内容,尤雨溪(我一个后端都膜拜的前端大神)都点赞了。

以下是原文。

来源:https://www.zhihu.com/question/31034164/answer/50423838


什么才算是真正的编程能力

计算机科学有两类根本问题。

  • 一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。
  • 一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等。

理论走的是深度,是在追问给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出多快好省的技术组合。

搞ACM的人,只练第一类。很可惜的是第二类能力没有简单高效的测量考察方法,不像算法和数据结构有ACM竞赛,所以很多系统的苗子都因为缺少激励和正确引导慢慢就消隐了。

所以比尔盖茨才会说,看到现在学编程的人经常都把编程看作解各种脑筋急转弯的问题,他觉得很遗憾。

做系统,确实不提倡“重复发明轮子”。但注意,是不提倡“重复发明”,不是不提倡“重新制造”。恰恰相反的,我以为,系统的编程能力正体现在“重新制造”的能力。

能把已有的部件接起来,这很好。

  • 但当你恰好缺一种关键的胶水的时候,你能写出来吗?
  • 当一个已有的部件不完全符合你的需求的时候,你能改进它吗?
  • 如果你用的部件中有bug,你能把它修好吗?
  • 在网上繁多的类似功能的部件中,谁好谁坏?为什么?差别本质吗?
  • 一个开源代码库,你能把它从一个语言翻译到另一个语言吗?从一个平台移植到另一个平台吗?能准确估计自己翻译和移植的过程需要多少时间吗?能准确估计翻译和移植之后性能是会有提升还是会有所下降吗?

系统编程能力体现在把已有的代码拿来并变成更好的代码,体现在把没用的代码拿来并变成有用的代码,体现在把一个做好的轮子拿来能画出来轮子的设计蓝图,并用道理解释出设计蓝图中哪些地方是关键的,哪些地方是次要的,哪些地方是不容触碰的,哪些地方是还可以改进的。

如果你一点理论不懂,还是应该学点的。对于系统性能的设计上,算法和数据结构就像在自己手头的钱一样,它们不是万能的,但不懂是万万不行的。

怎么提高系统编程能力呢?

土办法:多造轮子。

就像学画画要画鸡蛋一样,不是这世界上没有人会画鸡蛋,但画鸡蛋能驯服手指,感受阴影线条和笔触。所以,自己多写点东西吧。写个编译器?渲染器?操作系统?web服务器?web浏览器?部件都一个个换成自己手写的,然后和已有的现成部件比一比,看看谁的性能好,谁的易用性好?好在哪儿?差在哪儿?为什么?

更聪明一点的办法:多拆轮子。

多研究别人的代码是怎么写的。然而这个实践起来经常很难。原因:大部分工业上用的轮子可能设计思想和技术都是好的,但设计和制造过程却很烂,里面乱成一团,让人乍一看毫无头绪,导致其对新手来说非常难拆。这种状况其实非常糟糕。所以,此办法一般只对比较简单的轮子好使,对于复杂的轮子,请量力而行。

轮子不好拆,其实是一个非常严重的问题。重复发明轮子固然是时间的浪费,但当轮子复杂而又不好拆的时候,尤其是原来造轮子的人已经不在场的时候,重新发明和建造轮子往往会成为无奈之下最好的选择。

这是为什么工业界在明知道重复发明/制造轮子非常不好的情况下还在不断重复发明/制造轮子的根本原因。

程序本质是逻辑演绎的形式化表达,记载的是人类对这个世界的数字化理解。

不能拆的轮子就像那一篇篇丢了曲谱的宋词一样,能读,却不能唱。


分享的最后,二哥必须得说两句。

印象中,我感觉自己的编程能力突飞猛进的时刻好像有两次。

第一次是在外企的时候,研究日方提供的框架源码,然后当组件不满足需求的时候亲手造出来了那么两三个,当然是在基于原有的组件基础上,但就这么两三个重组后的组件,让我在团队中的地位瞬间就抬升了很高一个档次,因为别人都在用轮子,并且还用不好,我却可以造轮子了。

后面之所以被领导破格提升为小组长也是因为这茬事,紧跟着后面的那次涨薪幅度也比较大。

第二次是我开始系统化分享技术博客的时候,因为要给大家讲清楚,那必须得多拆轮子,不论是读书、读博客、读源码,还是看视频,首先得做到自己确实把要讲的事情给研究透彻了,然后才能按照自己喜欢的方式行文,达到通俗易懂、风趣幽默的效果。

同样的,多造轮子,多拆好拆的小轮子,应该是提高编程能力最好的办法了。

对了,如果你想加我好友的话,扫上面的二维码吧,坑位有限,早来早得,再错过就真没了!加了好友你至少可以做 3 件事:

  • 免费咨询问题;
  • 参加票圈抽奖;
  • 做个点赞之交。

逃)

浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报