崔宝秋,现任小米首席架构师、小米云平台负责人。1995 年赴美留学,纽约州立大学石溪分校计算机科学系博士毕业,曾任 IBM 高级工程师和高级研发经理、雅虎搜寻技术外围团队主任工程师、LinkedIn 主任工程师,2012 年回国退出小米科技。
2011 年 11 月,过后雷总去硅谷,带了一个小米手机,给我解释了小米是一家什么样的公司:小米不仅仅是一家卖手机的公司,更多的是一家挪动互联网公司。当他跟我讲了这个之后,我过后决定其实曾经下了。
我是 1987 年读的大学,在读大学之前对计算机能够说是无所不通的,惟一接触的都是在《中学生》杂志下面看到的一些 BASIC 语言写的小程序。对计算机的青睐是从最开始的编程课开始的。
1994 年 8 月份进入计算所开始接触了 Email 电子邮件,而后就开始通过电子邮件分割学校。以前都是通过图书馆,查很多书、学校的简介,而后发纸质的航空信。这个 Email 在我过后看来是惊奇的。
很早我就感觉我未来肯定要在工业界。我的幻想就是让本人的代码跑在每个人的电脑上。
1995 年到了美国,就感觉的确中美之间在计算机领域差异还是十分大……不是说咱们离科技前沿有多远,而是说咱们在不在那儿。
在美国,能够忽然跟一些科技前沿的技术人员、钻研人员、传授、学者有间接的接触,你做的事件自然而然就是前沿。
在 2010 年之前,中国的挪动互联网曾经在开始超车。到 2012 年开始,中国曾经开始当先了。在这种时代的背景下,我感觉做挪动互联网回到中国可能是我一个最好的抉择。
4.1 每个程序员都该晓得的常识
你好,我是陈皓,网名左耳朵耗子。
在整个为期一年的专栏内容中,我会逐渐向你举荐一些有价值的内容,供你参考,这些内容有中文,有英文,也有视频,它们都是我认为对我十分有价值的信息,我也心愿它们对你能有同样的帮忙和启发。
明天,我为你举荐的 5 篇文章,它们别离是:
● Stack Overflow 上举荐的一个经典书单;
● 美国某大学教授给计算机专业学生的一些倡议,其中有很多的学习资源;
● LinkedIn 的高效代码复查实际,很不错的办法,值得你一读;
● 一份对于程序语言和 bug 数相干的乏味的报告,能够让你对各种语言有所理解;
● 最初是一本对于 C ++ 性能优化的电子书。
每个程序员都应该要读的书
在 Stack Overflow 上有用户问了一个问题,粗心是想让大家举荐一些每个程序员都应该浏览的最有影响力的图书。
尽管这个问题曾经被敞开了,但这真是一个十分热门的话题。排在第一位的用户给出了一大串图书的列表,看上去着实吓人,不过都是一些相当经典相当有影响力的书,在这里我从新列举一些我感觉你必须要看的。
●《代码大全》尽管这本书有点过期了,而且厚到能够垫显示器,然而这相对是一本经典的书。
●《程序员修练之道》这本书也是相当经典,我感觉就是你的指路明灯。
●《计算机的结构和解释》经典中的经典,必读。
●《算法导论》美国的本科生教材,这本书应该也是中国计算机学生的教材。
●《设计模式》这本书是面向对象设计的经典书籍。
●《重构》代码坏滋味和相应代码的最佳实际。
●《人月神话》这本书可能也有点过期了,但还是经典书。
●《代码整洁之道》细节之处的效率,完满和简略。
●《Effective C++》/《More Effective C++》C 中两本经典得不能再经典的书。兴许你感觉 C 简单,但这两本书中带来对代码稳定性的摸索形式让人受害,因为这种思维形式同样能够用在其它中央。以至于各种模仿者,比方《Effective Java》也是一本经典书。
●《Unix 编程艺术》《Unix 高级环境编程》也是相干的经典。
还有好多,我就不在这里一一列举了。你能够看看其它的答案,我发现自己尽管读过好多书,但同样还有好些书没有读过,这个问答对我也很有帮忙。
每个搞计算机专业的学生应有的常识
What every computer science major should know,每个搞计算机专业的学生应有的常识。
本文作者马修·迈特(Matthew Might)是美国犹他大学计算机学院的副教授,2007 年于佐治亚理工学院获得博士学位。计算机专业的课程繁多,而且随着时代的变动,科目的课程组成也在一直变动。
如果不通过思考,间接套用现有的计算机专业课程列表,则有可能疏忽一些未来可能变得重要的知识点。为此,马修力求从四个方面来总结,得出这篇文章的内容。
- 要取得一份好工作,学生须要晓得什么?
- 为了一辈子都有工作干,学生须要晓得什么?
- 学生须要晓得什么,能力进入研究生院?
- 学生须要晓得什么,能力对社会无益?
这篇文章不仅仅对刚毕业的学生有用,对有工作教训的人同样有用,这里我把这篇文章的内容摘要如下。
首先,对于咱们每个人来说,作品集(Portfolio)会比简历(Resume)更有参考意义。所以,在本人的简历中应该放上本人的一些我的项目经验,或是一些开源软件的奉献,或是你实现的软件的网址等。最好有一个本人的集体网址,下面有一些你做的事、本人的技能、经验,以及你的一些文章和思考会比简历更好。
其次,计算机专业工作者也要学会与人交换的技巧,包含如何写演示文稿,以及面对质疑时如何与人答辩的能力。
最初,他就各个方面开展计算机专业人士所须要的硬技能:工程类数学、Unix 哲学和实际、系统管理、程序设计语言、离散数学、数据结构与算法、计算机体系结构、操作系统、网络、平安、密码学、软件测试、用户体验、可视化、并行计算、软件工程、形式化办法、图形学、机器人、人工智能、机器学习、数据库等等。详读本文能够理解计算机专业常识的全貌。
这篇文章的第三局部几乎就是一个常识资源向导库,给出了各个技能的方向和要害知识点,你能够跟随着这篇文章里的相干链接学到很多货色。
LinkedIn 高效的代码复查技巧
LinkedIn’s Tips for Highly Effective Code Review,LinkedIn 的高效代码复查技巧。
对于 Code Review,我已经写过一篇文章《从 Code Review 谈如何做技术》,讲述了为什么 Code Review 是一件很重要事件。明天举荐的这篇文章是 LinkedIn 的相干实际。
这篇文章介绍了 LinkedIn 外部实际的 Code Review 模式。具体来说,LinkedIn 的代码复查有以下几个特点。
● 从 2011 年开始,强制要求在团队成员之间做代码复查。Code Review 带来的反馈意见让团队成员可能迅速晋升本人的技能程度,这解决了 LinkedIn 各个团队近年来因迅速扩张带来的技能有余的问题。
● 通过建设公司范畴的 Code Review 工具,这就能够做跨团队的 Code Review。既有利于打消 bug,晋升品质,也有利于不同团队之间教训互通。
● Code Review 的教训作为员工降职的参考因素之一。
● Code Review 的一个难点是,Reviewer 可能不理解某块代码批改的背景和目标。所以 LinkedIn 要求代码签入版本管理系统前,就对其做清晰的阐明,以便复查者理解其目标,促成 Review 的进行。
我认为,这个办法切实太赞了。因为,我看到很多时候,Reviewer 都会说不理解对方代码的背景或是代码量比拟大而无奈做 Code Review,然而,他们却没有找到相应的办法解决这个问题。
LinkedIn 对提交代码写阐明文档这个思路是一个十分不错的办法,因为代码提交人写文档的过程其实也是从新梳理的过程。我的集体教训是,写文档的时候通常会发现自己把事儿干简单了,应该把代码再简化一下,于是就会回头去改代码。是的,写文档就是在写代码。
● 有些 Code Review 工具所容许给出的反馈只是代码怎么批改以变得更好,但长此以往会让人感觉复查提出的意见都示意原先的代码不够好。为了进步员工积极性,LinkedIn 的代码复查工具容许提出“这段代码很棒”之类的话语,以便让好代码的作者失去激励。我认为,这个办法也很赞,侧面激励的价值也不可小看。
● 为 Code Review 的后果写出有目的性的正文。比方“打消反复代码”,“减少了测试覆盖率”,等等。长此以往也让团队的价值观得以明确。
● Code Review 中,岂但要 Review 提交者的代码,还要 Reivew 提交者做过的测试。除了一些单元测试,还有一些可能是手动的测试。提交者最好列出所有测试过的案例。这样能够让 Reviewer 做出更多的测试倡议,从而提高质量。
● 对 Code Review 有明确的冀望,不过分关注细枝末节,也不要炫技,而是对要 Review 的代码有一个明确的指标。
编程语言和代码品质的钻研报告
A Large-Scale Study of Programming Languages and Code Quality in GitHub,编程语言和代码品质的钻研报告。
这是一项乏味的钻研。有四个人从 GitHub 上剖析了 728 个我的项目,6300 万行代码,近 3 万个提交人,150 万次 commits,以及 17 种编程语言(如下图所示),他们想找到编程语言对软件品质的影响。
而后,他们还对编程语言做了一个分类,想找到不同类型的编程语言的 bug 问题。如下图所示:
以及,他们还对这泛滥的开源软件做了个聚类,如下图:
对 bug 的类型也做了一个聚类,如下图:
其中剖析的办法我不多说了。咱们来看一下相干的后果。
首先,他们得进去的第一个后果是,从查看 bug fix 的 commits 的次数状况来看,C、C++、Objective-C、PHP 和 Python 中有很多很多的 commits 都是和 bug fix 相干的,而 Clojure、Haskell、Ruby、Scala 在 bug fix 的 commits 的数上显著要少很多。
下图是各个编程语言的 bug 状况。如果你看到是负数,阐明高于平均水平,如果你看到是正数,则是低于平均水平。
第二个论断是,函数式编程语言的 bug 显著比大多数其它语言要好很多。有隐式类型转换的语言显著产生的 bug 数要比强类型的语言要少很多。函数式的动态类型的语言要比函数式的动静类型语言的程序出 bug 的可能性要小很多。
第三,研究者想搞清是否 bug 数会和软件的畛域相干。比方,业务型、中间件型、框架、lib,或是数据库。钻研表明,并没有什么相关性。上面这个图是各个语言在不同畛域的 bug 率。
第四,钻研人员想搞清楚 bug 的类型是否会和语言有关系。的确如此,bug 的类型和语言是强相关性的。下图是各个语言在不同的 bug 类型的状况。如果你看到的是负数,阐明高于平均水平,如果你看到的是正数,则是低于平均水平。
兴许,这份报告能够在你评估编程语言时有肯定的借鉴作用。
电子书:《C++ 软件性能优化》
Optimizing Software in C++ – Agner Fog – PDF,C++ 软件性能优化。
这本书是所有 C ++ 程序员都应该要读的一本书,它事无巨细地从语言层面、编译器层面、内存拜访层面、多线程层面、CPU 层面讲述了如何对软件性能调优。切实是一本经典的电子书。
Agner Fog 还写了其它几本和性能调优相干的书,你能够到这个网址下载。
● Optimizing subroutines in assembly language: An optimization guide for x86 platforms
● The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers
● Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs
● Calling conventions for different C++ compilers and operating systems
我明天举荐的内容比拟干,都须要缓缓排汇领会,当然最好是能到实际中用用,置信这样你会有更多的感悟和播种。另外,不晓得你还对哪些方面的内容感兴趣,欢送留言给我。我前面收集举荐内容的时候,会无意识地关注整顿。