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

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

理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。 搞ACM的人,只练第一类。像你这样的更偏向于第二类。其实挺难得的,但很可惜的是第二类能力没有简单高效的测量考察方法,不像算法和数据结构有ACM竞赛,所以很多系统的苗子都因为缺少激励和正确引导慢慢就消隐了。 所以比尔盖茨才会说,看到现在学编程的人经常都把编程看作解各种脑筋急转弯的问题,他觉得很遗憾。 做系统,确实不提倡“重复发明轮子”。但注意,是不提倡“重复发明”,不是不提倡“重新制造”。恰恰相反的,我以为,系统的编程能力正体现在“重新制造”的能力。 能把已有的部件接起来,这很好。但当你恰好缺一种关键的胶水的时候,你能写出来吗?当一个已有的部件不完全符合你的需求的时候,你能改进它吗?如果你用的部件中有bug,你能把它修好吗?在网上繁多的类似功能的部件中,谁好谁坏?为什么?差别本质吗?一个开源代码库,你能把它从一个语言翻译到另一个语言吗?从一个平台移植到另一个平台吗?能准确估计自己翻译和移植的过程需要多少时间吗?能准确估计翻译和移植之后性能是会有提升还是会有所下降吗? 系统编程能力体现在把已有的代码拿来并变成更好的代码,体现在把没用的代码拿来并变成有用的代码,体现在把一个做好的轮子拿来能画出来轮子的设计蓝图,并用道理解释出设计蓝图中哪些地方是关键的,哪些地方是次要的,哪些地方是不容触碰的,哪些地方是还可以改进的。 如果你一点不懂理论,还是应该学点的。对于系统性能的设计上,算法和数据结构就像在自己手头的钱一样,它们不是万能的,但不懂是万万不行的。 怎么提高系统编程能力呢?土办法:多造轮子。就像学画画要画鸡蛋一样,不是这世界上没有人会画鸡蛋,但画鸡蛋能驯服手指,感受阴影线条和笔触。所以,自己多写点东西吧。写个编译器?渲染器?操作系统?web服务器?web浏览器?部件都一个个换成自己手写的,然后和已有的现成部件比一比,看看谁的性能好,谁的易用性好?好在哪儿?差在哪儿?为什么? 更聪明一点的办法:多拆轮子。多研究别人的代码是怎么写的。然而这个实践起来经常很难。原因:大部分工业上用的轮子可能设计上的思想和技术是好的,都设计和制造过程都很烂,里面乱成一团,让人乍一看毫无头绪,导致其对新手来说非常难拆。这种状况其实非常糟糕。所以,此办法一般只对比较简单的轮子好使,对于复杂的轮子,请量力而行。 轮子不好拆,其实是一个非常严重的问题。重复发明轮子固然是时间的浪费,但当轮子复杂而又不好拆的时候,尤其是原来造轮子的人已经不在场的时候,重新发明和建造轮子往往会成为无奈之下最好的选择。这是为什么工业界在明知道重复发明/制造轮子非常不好的情况下还在不断重复发明/制造轮子的根本原因。 程序本质是逻辑演绎的形式化表达,记载的是人类对这个世界的数字化理解。不能拆的轮子就像那一篇篇丢了曲谱的宋词一样,能读,却不能唱。 鄙人不才,正在自己研究怎么设计建造一种既好用又好拆的轮子。您没那么幸运,恐怕是等不到鄙人的技术做出来并发扬光大了。在那之前,多造轮子,多拆好拆的小轮子,应该是提高编程能力最好的办法了。

作者:h8liu 链接:https://www.zhihu.com/question/31034164/answer/50423838 来源:知乎

原文发布于微信公众号 - java工会(javagonghui)

原文发表时间:2018-04-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据的力量

从新人菜鸟到高级运营:没有捷径,请踏踏实实干

如知友 @刘锤 所说,运营的职业发展曲线的确是阶梯式,不管别的运营成长是否如此,起码我身边接触到好的运营就是这么一步一步成长出来的。如下图:

1004
来自专栏深度学习自然语言处理

从苹果店员到机器学习工程师:学习AI,我是这样起步的

我曾经在苹果商店工作,我想要改变,那么就从自己服务的技术入手吧。我开始学习机器学习和人工智能——这个领域非常热门,每一周,谷歌、Facebook 这样的科技公司...

593
来自专栏喔家ArchiSelf

老曹眼中研发管理二三事

这是在gitchat上的第一次分享,中生代联手gitchat在做研发管理的专题活动,作为先锋,抛砖引玉。

451
来自专栏PPV课数据科学社区

【聚焦】2015年最热门的职业:关于数据科学家的概念、职责、技能素养和学习资源完全手册

编者按:本文由SocialBeta根据一亩三分地Warald (Email: iamxiaoning@gmail.com; 博客: http://www.1po...

3909
来自专栏大数据文摘

游戏方法论:数据如何驱动产品决策

1515
来自专栏新智元

深度揭秘谷歌训练 AI 隐藏劳力,“机器教练”只不过是廉价临时工

【新智元导读】《连线》杂志的一篇长文描绘了为 Google 这家科技巨头“训练AI”的幕后工作者,他们的工作是评估提供给他们的视频、广告等内容,以创造可以让机器...

3357
来自专栏玉树芝兰

巧用MOOC组合掌握机器学习

咱们不提CES 2017上激动人心的自动驾驶产品(估计七八年之后你的驾驶证就可以扔掉了),也不细讲《最强大脑》节目里人类精英在图像识别环节被碾压(这曾经是人类可...

722
来自专栏华章科技

为什么有些人用一年时间获得了你十年的工作经验?

如何用一年的时间获得十年的经验和能力?这篇文章提到了两个神奇的名词——学习曲线与Hacking大脑,就这两个神奇的名词竟然能让一个人用一年的时间收获另一个十年的...

842
来自专栏新智元

最新神经网络技术或能控制人类精神世界

【新智元导读】是否有可能实现对人类的大脑进行控制?宾夕法尼亚大学研究人员认为,网络控制本质上类同于精神控制。研究者使用经颅磁刺激(TMS),该技术将外部磁场作用...

2624
来自专栏Java架构

一个七年Java女程序员的年终总结,写给过去一年的自己第一阶段----三年第二阶段----五年

简单先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公...

851

扫码关注云+社区