最近,我在阅读 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跨平台或扫描二维码关注

程序员小测试:保守派 vs 自由派相关推荐

  1. 测试/开发程序员小张相亲记......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  2. 从程序员到测试工程师

    这篇是2002年底<程序员>杂志上的一篇文章,虽然时间早了点,但值得一看. ------------ 前言:软件测试一门非常崭新的学科,目前研究的内容还很不深入,仍然处于婴儿阶段.软件测试 ...

  3. 从程序员到测试工程师(转)

    前言:软件测试一门非常崭新的学科,目前研究的内容还很不深入,仍然处于婴儿阶段.软件测试需要什么样的专业基础还没有定论,而且目前还没有一种很好的标准来衡量测试人员.但无可置疑,软件测试越来越受到软件公司 ...

  4. 拒收苹果超10万元赏金!程序员小哥找出iCloud账户漏洞后,发文直指苹果不够公开透明...

    明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 好不容易找出iCloud账户漏洞,但他竟然拒收苹果1.8万美元奖金! 最近,这件事在Hacker News上引起大批网友围观. 本来程序员找 ...

  5. 程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 https://bbs.csdn.net/topics/60395 ...

  6. PHP初级程序员能力测试参考答案

    PHP初级程序员能力测试参考答案[闭卷] 注:①本测试满分100分,80分及格,形式为闭卷,不得翻阅任何手册和参考书籍.本试卷使用的PHP版本为5.2.6+,WEB服务器使用APACHE2+,开发平台 ...

  7. 精明的程序员——小程大爱

    精明的程序员--小程大爱 虚伪的大项目 在参加软件学院研究中心面试的时候,老师们问我有什么项目经历.记得我当时的回答是这样的: "我的项目经历主要是在Intel公司的一年实习经历,这期间主要 ...

  8. Android群英传神兵利器读书笔记——第一章:程序员小窝——搭建高效的开发环境

    Android群英传神兵利器读书笔记--第一章:程序员小窝--搭建高效的开发环境 目录 1.1 搭建高效的开发环境之操作系统 1.2 搭建开发环境之高效配置 基本环境配置 基本开发工具 1.3 搭建程 ...

  9. 程序员小哥哥晒的生日蛋糕,看不出多少岁的都是假程序员!

    01 国外程序员小哥哥 theboxislost 晒的生日蛋糕-- 猜猜多少岁? 程序员神评论: @雪:可惜最多只能活255岁. @init:00011101 16+13=29 不知道对不对 02 上 ...

最新文章

  1. mkdir命令使用详解
  2. Linux_RHEL7_YUM
  3. 最佳实践系列丨Docker EE 服务发现参考架构(二)
  4. 手机游戏繁荣时代,团队的N条死路
  5. iOS开发之tableView时报错Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
  6. Java cmd常用命令_java cmd常用命令
  7. 4x4矩阵键盘工作原理及扫描程序_单片机学习:单片机独立按键和矩阵键盘概念及原理...
  8. halcon学习和实践(开篇)
  9. 以太网转DMX模块核心模块 支持ArtNet sACN DMX RDM
  10. 详细介绍 Yolov5 转 ONNX模型 + 使用ONNX Runtime 的 Python 部署(包含官方文档的介绍)
  11. 模糊综合评价在实际问题中的应用(案例)
  12. 利用FME(myfme)将MAPGIS格式的土地处用现状图完美转换为CAD
  13. 爬取王者荣耀皮肤-点券领取
  14. speedoffice表格中如何查找重复内容
  15. high-speed Charting Control使用介绍(新手向)(综合整合)(ChartCtrl)-2020.12.16
  16. 安卓手机如何快速投屏到windows(10/8.1/7)电脑上
  17. 帝国cms导入html模板,帝国CMS模板组导入导出更换模板
  18. Java中详述构造方法与setter方法
  19. 学java用什么软件_学java需要用到什么软件?用哪个软件比较好?
  20. OpenGL核心技术之抗锯齿

热门文章

  1. hdu 4049 Tourism Planning [ 状压dp ]
  2. crontab定时任务中文乱码问题
  3. jQuery实现等比例缩放大图片让大图片自适应页面布局
  4. linux服务之NIS
  5. WPF 实现人脸检测
  6. [探索 .NET 6]02 比较 WebApplicationBuilder 和 Host
  7. C#获2021年度编程语言奖,开发者们最该关注这些亮点!
  8. .NET 6 中的 ConfigurationManager
  9. 三分钟总览微软任务并行库TPL
  10. 一文说通C#中的异步编程补遗