沟通创造价值,分享带来快乐。这里是程序员周刊,欢迎您每周五和我一起做时间的朋友。
当程序员冰墩墩脱掉帽子
并不是社会不尊重程序员,只要你能帮上大忙,就一定会赢得别人的尊重。所以,开玩笑说,我们可能都是在写一样的 for 语句,但是,你写在那个地方一文不值,而我写在这个地方,这行代码就值 2000 元。
大咖思维
本期继续和大家分享陈浩关于未来技术发展的趋势,因为是个人最近一直在追他的文章,干货非常多,大家不妨体验看是否有道理。
一个技术能不能发展起来,关键还要看三点:
1、一个比较好的技术社区:像 C、C++、Java、Python 和 JS 生态圈都是非常丰富和火爆。
2、一个工业化的标准:像 C、C++、Java 这些编程语言都是有标准化组织的。尤其是 Java,它在架构上还搞出了像 J2EE 这样的企业级标准。
3、一个或多个杀手级应用:C、C++ 和 Java 的杀手级应用不用多说了,就算是对于 PHP 这样还不能算是一个优秀的编程语言来说,因为是 Linux 时代的第一个杀手级解决方案 LAMP 中的关键技术,所以,也发展起来了。
上面三点至关重要,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java 三点全都满足,所以,Java 蓬勃发展也在情理之中。
用这些标尺来衡量一下 Go 语言:
Go 语言容易上手;
Go 语言解决了并发编程和底层应用开发效率的痛点;
Go 语言有 Google 这个世界一流的技术公司在后面;
Go 语言的杀手级应用是 Docker 容器,而容器的生态圈这几年可谓是发展繁荣,也是热点领域。
最后陈浩得到的判断是:
Go 不可限量,会吞食 C、C++、Java 的项目,吞噬主要是中间层的项目,也就是说,Go 不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到上层如 Java 业务层的项目。Go 语言能吞噬的一定是 PaaS 上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,他们没有复杂的业务场景,也到不了特别底层(如操作系统)的软件项目或工具。
程序员的个人财富
财富的定义远远不限于金钱,而是任何有价值,能产生收入的东西,《富爸爸,穷爸爸》中,把一个人的财富归为了下面几大类:
无需本人到场就可以正常运作的业务;
股票;
债券;
能够产生收入的房地产;
版税,如音乐、图书、专利等;
其他任何有价值、可产生收入,或者有增值潜力,并且有很好销路的东西,比如艺术品。
这本书不仅改变了我对“财富”定义的认识,更重要的是让我明白了这一点:人生在世,最重要的事情不是打工赚工资,而是积累真正的财富。想清楚这个,你才能实现从“打工者思维”到“财富管理者思维”的转变,才有可能真正走上“财富自由”的道路。
作为一名程序员,我们是比其他职业的人更幸运的,因为我们可以积累的财富远不止上面提到的几项。这里罗列一下我能想到的财富积累:
Code Review
LinkedIn 的高效代码审查技巧:(https://thenewstack.io/linkedin-code-review/)
这篇文章介绍了 LinkedIn 内部实践的 Code Review 形式。具体来说,LinkedIn 代码复查有以下几个特点。
1、从 2011 年开始,强制要求在团队成员之间做代码复查。Code Review 带来的反馈意见让团队成员能够迅速提升自己的技能水平,这解决了 LinkedIn 各个团队近年来因迅速扩张带来的技能不足的问题。
2、通过建立公司范围 Code Review 工具,这就可以做跨团队的 Code Review。既有利于消除 bug,提升质量,也有利于不同团队之间的经验互通。
3、Code Review 的经验作为员工晋升的参考因素之一。
4、Code Review 的一个难点是,Reviewer 可能不了解某块代码修改的背景和目的。所以 LinkedIn 要求代码签入版本管理系统前,就对其做清晰的说明,以便复查者了解其目的,促进 Review 进行。
从Code Review 谈如何做技术 | 酷 壳 - CoolShell
这篇文章通过阿里巴巴内部因为业务代码不做Code Review案例进行的复盘,详细地讲解了为什么要Code Review,Code Review为什么会有问题,结合实际情况进行反思,是一篇深度思考的好文。
说透代码评审 - 张飞洪[厦门] - 博客园
本文是我之前对代码审查的总结,分别从为什么要审查,审查的困境和争议,审查的形式,审查的对象,审查人员,审查对象等维度出发,系统性的学习笔记,希望对你有所启发。
编程语言和代码质量
这是一项有趣的研究。有四个人从 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 的可能性要小很多。
每个程序员都应该要读的书
在 Stack Overflow 上有用户问了一个问题,大意是想让大家推荐一些每个程序员都应该阅读的最有影响力的图书。虽然这个问题已经被关闭了,但这真是一个非常热门的话题。排在第一位的用户给出了一大串图书的列表,看上去着实吓人,不过都是一些相当经典又相当有影响力的书。
有大家耳熟能详的书,比如
《代码大全》 虽然这本书有点过时了,但是这绝对是一本经典的书。
《程序员修练之道》 这本书也是相当经典,可以是你的指路明灯。
《计算机的构造和解释》 经典中的经典,必读。
《算法导论》 美国的本科生教材,这本书应该也是中国计算机学生的教材。
《设计模式》 这本书是面向对象设计的经典书籍。
《重构》 代码坏味道和相应代码的最佳实践。
《人月神话》 这本书可能也有点过时了。但还是经典书。
《代码整洁之道》 细节之处的效率,完美和简单。
(地址:https://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read)
程序员书单
永不过时的技能
什么是永不过时的技能呢?左耳朵耗子的答案非常具有参考性,也就是编程能力、架构能力和工程能力。
编程能力,就是用代码解决问题的能力。你编程能力越强,就能解决越复杂的问题,细分之下,要有调试能力、算法、数据结构、操作系统原理等基础技能的支撑,你才能解决各种麻烦的问题。
架构能力,就是掌控复杂系统的能力。当一个系统足够复杂时,你会写每一块代码、能解决每一个问题,不等于你能搞定整个系统,这就需要架构能力。架构能力包含了一些意识,也包含认识业务建立抽象模型,还有一些常见的模式等。
工程能力,其实核心就是成事的能力。你要知道,当系统规模越来越大时,光靠你一个人是没办法完成的。那如何保证几个高手能够互相配合好?如何保证项目里面水平最差的人不拖后腿?工程化建设往往会跨越多个业务,又如何保证质量和代码风格呢?
这三项能力不管对于前端还是后端开发来说,可以说都是从初级、中级走向高级必须要跨越的鸿沟,也是作为一名程序员永不过时的技能。
GitHub
V8引擎系列教程
V8 是 Google Chrome 浏览器和微软 Edge 浏览器的 JavaScript 执行引擎。本课程介绍如何成为 V8 的开发人员。注意这是硬核技术培训,每次视频请预留10个小时的上机编程练习时间。
Github地址:github.com/plctlab/v8-internals
vue移动端组件库
一个开箱即用vue移动端组件库,基于 Vue、uniApp、 ColorUi、uView 的web移动端解决方案,包含地图、电子签名、证照识别等。
自定义TabBar与顶部、地图轨迹回放、电子签名、图片编辑器、自定义相机/键盘、拍照图片水印、在线答题、证件识别、周边定位查询、文档预览、各种图表、行政区域、海报生成器、视频播放、主题切换、时间轴、瀑布流、排行榜、课程表、渐变动画、加载动画、请求封装等~ 该项目使用最新的前端技术栈,它可以帮助你快速搭建移动端项目。