程序员小测试:保守派 vs 自由派

最近,我在阅读 Steve Yegg 的文集《程序员的呐喊》。

  这是一本非常有趣的书,里面甚至包含了一个小测试(原文),区分一个程序员到底是保守派还是自由派。

  下面一共有十个问题,每个问题都有 A 和 B 两个选项,请选择你的答案。

  问题一:Bug 还没修复,软件能不能上线?

  (A)软件发布前,应该编写完整测试,充分调试,尽量修复所有 bug。

  (B)不管多努力,bug 总是无法避免的,如果性质不是很严重,可以先上线,根据反馈再调试和修补。

  问题二:容易出错的特性,是否应该用在程序中?

  (A)很多语言的高级特性都是很容易出错和危险的,应该禁止用在代码里。没有这些特性我们一样可以进行开发,代码也会因此变得更安全。

  (B)聪明的程序员有学习动力,知道怎么可以解决问题。为了避免出错,就立下一堆规矩,完全不可取。

  问题三:新的语言或语法是否应该有所限制?

  (A)公司里可以使用的语言数量应该受到限制,这样万一系统在半夜或是圣诞夜挂掉的时候,值班的人就不需要去临时抱佛脚学习新语法了。另外,也应该禁止改变语言原始定义的语法,比如严格限制操作符重载和元编程。

  (B)程序员的学习能力是惊人的,没必要"保护"程序员远离新语法,只要有需要,他们自然能学会。

  问题四:静态检查是否必要?

  (A)编译器的安全检查很重要,不能进行静态检查的代码通常是不可接受的。

  (B)代码应该短小精悍,静态检查工具可能会让代码变得又臭又长。

  问题五:数据是否一定要有格式定义?

  (A)数据必须遵循事先定义好的格式。比如,关系型数据库必须满足第三范式或 UML,XML 都必须有 DTD,NoSQL 数据库必须有单独的格式定义(标明所有允许的键,以及相应的值类型)。

  (B)严格的数据定义只会妨碍灵活性,延缓开发进程。更好的策略是写一些注释,或者只定义一部分,甚至先略过它。因为在大量用户案例出现之前,没人知道数据可能会是什么样,代码先行才是正确的做法。

  问题六:公共接口是否应该静态化?

  (A)公共接口必须严格建模。数据绝不可以是无类型的,所有的输入输出实体都必须完整显式地定义为可以静态检查的模型。

  (B)公共接口应该尽量简单,向前向后都兼容。建模时太过缜密的话,其实只是在猜测接口会怎么演化。

  问题七:是否可以留有方便修改的后门?

  (A)生产系统里绝不允许存在危险或有风险的后门。想要通过调试器、SSH、或任何接口,连接到工作中的生产系统,去修改运行时的代码或数据,应该是不可能的。

  (B)系统的灵活性,有时能决定客户或合同是归你还是归对手。至于生产系统的安全隐患,可以通过日志、监控、审核等手段来缓解。事实证明,很多有最高权限后门和 Shell 接口的大型系统,都做到了在控制风险的同时具备运行灵活性。

  问题八:急需的但有安全隐患的系统,是否可以上线?

  (A)假如一个组件的安全性存在任何疑虑,那它就不能发布上线,团队怎么哀求都没用。

  (B)企业要保持竞争力,唯有不断有意识地去承担风险。就算不去冒险,其他系统急需这个系统,线上可能还是会出问题,既然如此那还不如冒险一试。

  问题九:代码运行较慢,是否要去解决?

  (A)快比慢好。没人喜欢慢的代码,所以代码的性能一定要好。从一开始,就要有性能意识,那些比较慢的语言和库都应该避免使用。

  (B)不要过早优化,代码先跑起来再说。正确性比性能重要,而原型的快速迭代又比正确性更重要。只有当客户将性能列为首要问题时,再进行优化。

  问题十:你最认可的语言是哪一个?

  (A)C++、Java、C#、D、Go、Clojure、Erlang、Pascal、Scala、Ada、Ocaml、Eiffel、Clojure、Erlang、Pascal、Haskell、SML。

  (B)C、Objective-C、JavaScript、Visual Basic、Lua、Scheme、Python、Common Lisp、Smalltalk/Squeak、Perl、Ruby、PHP,Bash。

  结论

  如果你的答案有超过一半的 A,你就属于保守派程序员。你非常重视软件安全和可靠性,厌恶风险,提倡严格管理,认为有效的规章制度是软件质量的保证。

  如果你的答案有超过一半的 B,你就属于自由派程序员。你重视软件开发的灵活性,提倡给予程序员足够的自由,只要新功能顺利上线,可以接受一定的风险和瑕疵。

  保守派或自由派,都没问题,都是可取的。问题是一支和谐的团队最好是由单一人群组成,要么全是自由派,要么全是保守派,免得双方不停地发生理念上的冲突。

原文地址:http://www.ruanyifeng.com/blog/2016/09/conservative_vs_liberal_programmer.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新闻发布项目——业务逻辑层(newsTbService)

package bdqn.newsManageServlet.Service;import java.util.List;import bdqn.newsManageServlet.entity.newsTb;/*** 新闻业务逻辑层的接口* author Administrator**/ public interface newsTbService {//分页查询public List<newsTb>getPagingNews(int pagesize,int pa…

django mysql 创建表_关于 django ORM 中,数据库建表方式的问题

本人以前是做客户端的&#xff0c;做后端没多久。一直有一个问题困扰我&#xff0c;正好现在手上有一个系统在做。系统逻辑是写一个爬虫在网上爬取一个网站的信息&#xff0c;经过加工处理后&#xff0c;使用 django 来展示和交互。表结构简化为三张表A:爬虫爬取得到的信息B:数…

遍历多叉树

https://www.jianshu.com/p/dee8284b2dc4 beg4 关注 2018.03.22 15:14* 字数 334 阅读 172评论 0喜欢 1 随便画一个树,写代码遍历它 OK,树的结构这么描述 public class TreeNode {private String name;private TreeNode parent;private List<TreeNode> children new …

tomcat与apache的面试题

转载自 tomcat与apache的面试题tomcat与apache有哪几种连接方式&#xff1f; Tomcat 与 Apache 有三种连接方式&#xff0c; 1、JK方式 这是最常见的方式。JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的&#xff0c;Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供…

使用 Exceptionless 作为 Log Server 搭配 NLog 记录系统日志

昨天的文章<免费开源分布式系统日志收集框架 Exceptionless>反响很大,今天推的一篇是续集,文章来自于宝岛台湾的MVP, 让 Exceptionless 建置 Log Server,性能不用担心,用的是大名点点的ELK组合. 前言 痾...久违的新文章&#xff0c;让我的眼角流下了蛋蛋忧伤的泪珠.... 今…

elementui下拉框选择图片_element ui下拉框如何实现默认选择?

为什么我这样写没反应呢运营商级别 <el-optionv-for"item in options1":label"item.label":value"item.value"></el-option>export default{data(){return{selected:,options1:[{value: 选项1,label: 省级运营商}, {value: 选项2,la…

程序员成长之路 java面试指导(作者说的极好要看) 静下心看

https://blog.csdn.net/weixin_41780944/article/details/79429769 从面试官的角度分享一些后端校招经验&#xff08;作者说的极好要看&#xff09; https://blog.csdn.net/qq_34337272/article/details/80875016 除了手写代码和计算机基础&#xff0c;剩下的方面都是可选项…

[MySQL] 二进制的应用场景

前言 MySQL 是一种常用的关系型数据库管理系统&#xff0c;广泛应用于各种软件和网站开发中。在 MySQL 中&#xff0c;数据以二进制文件的形式存储在硬盘上。这些二进制文件不仅可以提供数据的持久化存储&#xff0c;还可以在不同的应用场景中发挥重要作用。本文将介绍 MySQL …

各种面试题(二)

转载自 各种面试题(二)1、面向对象的特征有哪些方面? 封装&#xff1a;通常认为封装是把数据和操作数据的方法绑定起来&#xff0c;对数据的访问只能通过已定义的接口。 多态性&#xff1a;多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象…

亚马逊如何变成 SOA(面向服务的架构)?

上一篇文章&#xff0c;我摘录了《程序员的呐喊》。这本书有趣的内容太多&#xff0c;今天再摘录一段。 1、 亚马逊公司不仅是世界最大的网络书店&#xff0c;还是世界最大的云服务商。它是怎么实现从电商到云商的转变呢&#xff1f; 一切都是CEO杰夫贝索斯促成的&#xff0c;他…

新闻发布项目——业务逻辑层(commentService)

package bdqn.newsManageServlet.Service;import java.util.List;import bdqn.newsManageServlet.Dao.commentDao; import bdqn.newsManageServlet.Dao.Impl.commentDaoImpl; import bdqn.newsManageServlet.entity.comment;/*** 新闻评论的业务逻辑层* author Administrator**…

linux 安装mysql 8.0_Linux安装mysql 8.0的详细方法介绍(代码示例)

本篇文章给大家带来的内容是关于Linux安装mysql 8.0的详细方法介绍(代码示例)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。经过一番努力下载mysql文件&#xff0c;我们可以开始Mysql8.0的安装了。解压文件// 解压文件生成…

亚信科技笔试面试2019届

首先笔试 笔试超级难 jsp 数据库 java 很多要百度 记得多找几个小伙伴哦~ 面试 一面: 技术面 讲一下你的项目 根据你的项目提问 面试官&#xff1a; 有哪些排序算法 我:冒泡 面试官&#xff1a; 只有一个冒泡? 我: 还有选择吧(我怕手写 &am…

Xamarin支持微软HoloLens混合现实开发

今年年初&#xff0c;微软以4亿美元的价格收购移动开发工具Xamarin&#xff0c;Xamarin允许开发者编写跨平台应用&#xff0c;提供Android、iOS和Windows10上原生应用体验。微软收购Xamarin后&#xff0c;Xamarin变得更加开放&#xff0c;比如Visual Studio用户免费使用&#x…

mysql fpmmm_zabbix配fpmmm(mpm)数据传送不了问题解决

我们环境用zabbix mpm来监控mysql&#xff0c;不过最近官网已经不叫mpm了&#xff0c;而是叫fpmmm&#xff0c;理由为&#xff1a;fpmmm is the successor of mpm. mpm was renamed to fpmmm because of the naming conflict with the Apache Multi-Processing Modules (MPM).好…

各种面试题(一)

转载自 各种面试题(一)1.说说你对缓存的理解&#xff1f; 1.使用缓存的目的&#xff1a; 提高应用程序的性能&#xff0c;减少到数据库的访问次数 2.缓存的介质&#xff08;缓存的存储位置&#xff09; 内存&#xff1a;临时性存储空间 存取数据快 减少网络通信量 硬盘&#…

浙大中控笔试面试2019届

学校招聘会投递简历 过了几天 叫我去滨江面试 先笔试 没人监考 &#xff08;但是面试的时候会抽几道笔试题问你&#xff09; 面试官是三个 吓尿了 面试官&#xff1a; 我: 面试官&#xff1a; JDBC会吗 讲一下 我: DriverManager获取连接对象..…

新闻发布项目——业务逻辑层(categoryTBService)

package bdqn.newsManageServlet.Service;import java.util.List;import bdqn.newsManageServlet.entity.categoryTB; import bdqn.newsManageServlet.entity.newsTb;/*** 新闻类别的业务逻辑层的接口* author Administrator**/ public interface categoryTBService {// 删除,根…

python初学函数_Python初学者速收藏!面向Python初学者的知识-函数

什么是函数式编程&#xff1f;函数式编程是一种编码范例&#xff0c;其中我们定义要做什么而不是执行什么动作。这个想法最初是从数学中采用的&#xff0c;我们定义输入到函数中的输入以及我们期望从中获得的输出。 函数式编程很少依赖状态管理-这意味着无论输出多少&#xff0…

通用业务流水号功能设计

有一段时间没有思考代码相关的工作了&#xff0c;最近项目经常碰到不同业务流水号的生成&#xff0c;下面的技术人员每次都针对流水号生成写一些复杂的代码&#xff1b;为了解放以后这方面的工作于是动了一下脑子想一个动态可配置的流水号生产组件&#xff0c;虽然没写代码一段…