为什么我喜欢单独编程

大约是一年前,我写了一篇关于我为什么不喜欢结对编程的帖子。此文也是对该帖子的补充。

至今为止我已经在加利福尼亚州科学院工作5个月了。我创建了一个由美国国家科学基金会资助的关于蚂蚁分类学的网站:antcat.org。

这是我作为一个程序员25年以来最棒的工作。

原因有很多:因为是在博物馆写程序,所以每天我都可以看到机灵可爱的鱼儿、稀奇古怪的蜥蜴以及五彩缤纷的蝴蝶;有关于Rails的全新应用;老板英明又随和;观众是在金门公园的科学家,距离我家只有10分钟路程。虽然报酬只有10万美金(编者注:只有?尼玛),比我好几年前拿的薪酬都低,但是有医疗保险,并且每周我只需报道两三次就可以了。

但是这项工作最加分的地方不是别的,而正如题目而言:我可以独自工作。

我不想自吹自擂说我有多么享受这份工作。如果我能接受一个活力又创新的团队——即使是与他们结对,这份工作可能会更加惬意。但是我接受不了。

原因很简单,单独工作就可以按自己的方式编程。这意味着95%的测试驱动;意味着敏捷开发——因为我会想着用最简单的方式去实现功能;意味着如果有必要我会添加Solr;也意味着可以应用我在这个行业沉浸了四分之一个世纪的经验;还意味着不会有任何喋喋不休的争论。

也可能只是我的运气不好,这么多年我共事过的这么多人中,我还没遇到过谁能与我分享关于精益开发,敏捷方法论,面向对象编程,数据库设计,或者甚至是结构化编程方面的想法和观点的。一些相关的观点我都是从都一些类似于Martin Fowler 和 Kent Beck这种传奇人物的著作上学到的。不过,很多显而易见的事情这些家伙都过于想当然了,比如避免过早的优化,还有遵循责任制原则等等。

老实说,我和我以前的同事在软件开发时有很多的互动都是关于争吵的。不过话又说回来,这些年来我已经变得婉转和有礼貌多了,也会很快做出让步(毕竟,我也可能是错的)。但总会有厌倦这种纯粹为了争论而争论的家伙(当然我不是)的时候。我只是想自己静下心来以自己的方式好好写代码。

我很清楚因为我的选择我错过了什么:我的方法可能实际上并不正确,但却没有人来给我指出;可能一直到最后,我不知道用其他方法来解决问题;毫无疑问bug更多;在做设计决策时,有时候会头脑发热选个浪费时间和精力的,而不会有人来提醒我。以上种种如果是在一个团队中,即使是结对编程,都是可以缓和甚至是避免的。说起结对编程,我还不得不承认,单独编程的工作效率是比不上结对编程的。列张表格的话,结对编程或者是在团队中工作,优势是“罄竹难书”的。但是,唯一的问题就是,我讨厌结对编程和团队工作。

我也很清楚,我可能看上去像是在主张“cowboy coder”的开发风格。话说在团队中的cowboy coder的确是个大麻烦。但是如果没有团队呢,这还是麻烦吗?

比起那些伴随着敏捷方法论长大的年轻人,关于这个问题孰是孰非的争论更多的是出自于我这一代人之口。我想说的是,比起喋喋不休的争执,我更愿意去学习更先进的理念,从1989年的OOP(面向对象的程序设计),到2000年的TDD(测试驱动开发实战), 以及今天的精益生产。 这也是我与我曾经共事的同事造成分歧的原因。

走到人生的叉路口,我相信心之所向才是最明智的选择。有的人做事情的唯一原因就是这事情让他们快乐(不论时间长短)。

而我喜欢单独编程的最底线是,这让我快乐。

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

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

相关文章

谈操作系统的碎片化和融合

摘要:目前,Android和iOS统治着移动操作系统,桌面端被Windows所主宰,随着智能家居、可穿戴设备等新兴平台的兴起,造成了各家操作系统四分五裂的情况,但在不久的将来他们终究会走向融合。 目前,An…

盘点大数据的十大发展方向,Scale-out将成主流

摘要:随着人们对大数据认知的加强,除去特点之外,人们开始更加关注于它的使用价值和未来的服务方向。本文列举了大数据的十大发展方向,其中Scale-out将成为主流。 【编者按】如今,大数据俨然成为IT领域最受关注的热词之…

程序员的成功是否有规律可循?

摘要:自然界中存在许多规律,那么在程序人生上是否有规律可循呢?这种规律是如大多数人期望的那样吗?V众投发起人李智勇对此进行了探讨,他分析了必然与偶然、本质与细节,并就程序人生规律的三要素进行了解读。…

FFMPEG解码多线程

FFMPEG多线程解码 FFMPEG多线程编码器一般以在Slice内分功能模块进行多线程编码,如h263,h263P,msmpeg(v1, v2, v3),wmv1。包含以下几个线程:(1)Pre_estimation_motion_thread运动估计前的准备;(2)Estimation_motion_t…

SpringNBoot日志配置

市面上的日志框架 日志门面 (日志的抽象层)日志门面 (日志的抽象层)JCL(Jakarta Commons LoggingSLF4j(Simple Logging Facade for Java) jboss-loggiJUL(java.util.logging&#x…

ffmpeg的内部Video Buffer管理和传送机制

本文主要介绍ffmpeg解码器内部管理Video Buffer的原理和过程,ffmpeg的Videobuffer为内部管理,其流程大致为:注册处理函数->帧级释放->帧级申请->清空。 1 注册get_buffer()和release_buffer() FFAPI_InitCodec() avcodec_alloc_c…

springBoot的模版引擎

模版引擎 常见的模版引擎有JSP、Velocity、Freemarker和Thymeleaf Thymeleaf模版 使用时需要把html页面放在classpath&#xff1a;/templates/文件夹下&#xff0c;thymeleaf就能自动渲染创建模版文件&#xff0c;并需要导入thymeleaf的名称空间 <html lang"en"…

FFmepg 多线程解码历程

FFmepg 多线程解码历程 - 1:validate_thread_parameters /** * Set the threading algorithms used.//设置线程的使用算法 * Threading requires more than one thread.//需要一个以上的线程 * Frame threading requires entire frames to be passed to the codec,//帧线程…

restful风格的增删改查

注意 如果静态资源放到了静态资源文件夹下却无法访问&#xff0c;请检查一下是不是在自定义的配置类上加了EnableWebMvc注解templete文件夹不是静态资源的文件夹&#xff0c;默认是无法访问的&#xff0c;所以要添加视图映射 package cn.xxxxxx.hellospringbootweb.config;imp…

历史上最有影响力的10款开源项目

开源是大趋势&#xff0c;开源软件也在越来越多的出现在日常电脑桌面上&#xff0c;如Firefox浏览器、Ubuntu操作系统等。人们选择开源软件的原因&#xff0c;主要有低成本、安全无病毒侵害、更加透明和开放等。按照大多数的开源协议如GPL&#xff0c;开源软件允许自由分发。在…

SpringBoot默认的错误处理机制

错误处理机制&#xff1a; 访问一个不存在的页面时&#xff0c;或者程序抛出异常时 默认效果 浏览器返回一个错误的页面&#xff0c;注意查看浏览器发送请求的请求头可以使用专业的软件比如postman分析返回的json数据 springboot错误处理的自动配置信息 主要给日容器中注册…

GitHub政府用户破万:开源成重塑政府新手段

据GitHub官方博客介绍&#xff0c;目前GitHub上的各地政府用户数量已经达到1万个&#xff01; 2009年&#xff0c;纽约参议院正式入驻GitHub公开部分技术资料与文档&#xff0c;成为GitHub上的第一个政府组织。随后&#xff0c;美国华盛顿特区、迈阿密、芝加哥、纽约&#xff…

云OS:Linux在桌面打翻身仗的机会?

不可否认&#xff0c;Chrome OS取得了惊人的增长。Chromebook自发行以来&#xff0c;迅速席卷全球&#xff0c;常年位居最畅销笔记本榜首。这款基于Linux的笔记本在合适时间提供了合适的解决方案。很多情况下&#xff0c;云不仅仅是一个可选项&#xff0c;而是一个最优选项。Li…

Docker容器基本使用

Dcoker Docker是一个开源的应用容器引擎&#xff0c;是一个轻量级别的容器技术Dcoker支持将软件编译成一个镜像&#xff1b;然后在镜像中对各种软件做好配置&#xff0c;再将镜像发布出去&#xff0c;供别人使用运行中的镜像称为容器&#xff0c;容器的启动是非常快速的核心概…

为什么35岁的C++依然能主导编程世界

早在1979年&#xff0c;Bjarne Stroustrup设计了C编程语言&#xff0c;并且C很快成为了无处不在的通用系统编程语言。现在尽管有Java、Javascript、Python、Go&#xff0c;甚至是苹果的Swift和它竞争&#xff0c;但C依然处于主导编程世界的地位。 今天在Morgan Stanley的科技访…

SpringBoot整合JPA

添加依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId&…

为什么说选择正确的编程语言很重要,以及如何正确的选择

几个月前&#xff0c;一个同事问我&#xff0c;应该如何选择编程语言&#xff0c;或者有没有什么固定的选择模式&#xff0c;当时我便打算写点什么。上周在硅谷开会&#xff0c;这我是第一次跟“hack3rs”的创业狂以及技术狂们打交道。我学会了很多前所未闻的脏话&#xff0c;也…

细数开源历史上的十个重大事件

开放源码&#xff08;开源&#xff09;的精神在于使用者可以使用、复制、散布、研究和改进软件。这可以追溯到20世纪60年代&#xff0c;至今已有半个世纪了。虽然下面所列举的不都是专门的开源产品&#xff0c;但还是在开源发展的进程中有着巨大的影响。开放源码&#xff08;开…

深度卷积神经网络CNNs的多GPU并行框架及其应用

摘要&#xff1a;本文是腾讯深度学习系列文章之一&#xff0c;主要聚焦于腾讯深度学习平台&#xff08;Tencent Deep Learning Platform&#xff09;中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框架。 【编者按】深度卷积神经网络有着广泛的应用场景&#xff0c;本…

线程安全和对应的核心概念

线程安全 线程安全的概念&#xff1a;当多个线程访问某一个类&#xff08;对象和方法&#xff09;时&#xff0c;这个类始终都能表现出正确的行为&#xff0c;那么这个类&#xff08;对象或者方法&#xff09;就是线程安全的synchronized&#xff1a;可以在任意对象及方法上加…