【双语】你是一个软件工程师还是程序员?

本贴最后更新于 2659 天前,其中的信息可能已经水流花落

原文链接:http://www.yegor256.com/2018/01/23/sociotech-skills.html

这是一篇国外名为 Yegor Bugayenko 近期发表的博客,虽然老生常谈了,但不管是对刚踏入社会的学生还是多年的从业工作者,都起到一个警示作用,在这个高速发展的行业里,如果你比别人慢一步,那你就步步跟不上,学习不能停止,停止就要被淘汰。

Software development and coding are two different things. Usually, the former includes the latter, but not always. Coding produces lines of code, while software development creates products. Unfortunately, the majority of programmers joining Zerocracy now are coders. Even though they claim to be developers, in reality they are lacking the very important sociotechnical skills that differentiate product creators from lines-of-code writers.

软件开发和会写代码是完全不同的两件事,通常前者包含后者,但也不全是。当我们开发产品的时候会产生一行又一行的代码,但不幸的是,大部分加入 ZeroCrazy 项目的人都只是程序员。虽然是按照软件工程师的要求去做的,但事实上他们还是缺乏一些非常重要的技能和经验,这就是程序员和软件工程师之间的区别。

hardmen.jpg

Let me show you the symptoms first.

让我来告诉你们这些人的问题。

Let's call him Mario. He is a very skilled Java developer, as his resume says. He's been in the industry for ten years or so, done a few enterprise projects; he seems to be very seasoned. We give him access to the project and assign a few GitHub tickets.

有个叫马里奥的家伙,他的 Java 水平非常好,他的简历上说他已经是个 10 年左右的老程序员了,做过一些企业级项目,看上去非常的牛逼,我们给他安排了一个项目并分配了 Githunb 权限。

In a few hours I get a Facebook message a page long. It says that he is very glad to be on the project, but doesn't understand a thing yet and needs help. Here is a list of questions he prepared and he's ready for a phone call to get them answered.

几个小时候我从 Facebook 收到一条非常长的信息,说他非常高兴去做这个项目,但有些地方不太明白需要帮助,然后给我列出来一堆他准备好的问题,并且等着我的回复。

I reply: "Dude, I love you like a brother, but I don't have time to answer your questions. Not because I'm lazy or don't appreciate your work... Actually, yes, exactly because of that. I am lazy and don't want to answer any questions over Messenger. My answers will be totally wasted, if you, for example, quit the project tomorrow. Or if someone else joins us in a week and has exactly the same set of questions. Do I have to explain all over again? I'm too old lazy for that."

我回复到:“老兄,我确实把你当自己人,但我实在是没时间回答你的问题,不是因为我懒得理你或者不重视你的工作,好吧确实是因为我懒得理你。回答你的问题真的是在浪费我的时间,如果你明天辞职了,然后又来一个新人遇到同样的问题,难道我还要再回答他一遍?对不起我真的没那个精力”。

He most probably thinks that I'm an arrogant prick, but what can he do? He reads my article on this very subject and says "OK, I got it."

他大概会觉得我是个傲慢自大的家伙,但我还能怎么办呢?他读过我给他发的信息之后回复说:“好的我知道了”

In half an hour Mario submits a ticket to another (!) repository. The title is "The problem" and the description says "Help me understand the project."

半个小时后,马里奥在另外一个仓库提交了一份工单,标题是“问题”,描述写的是“谁来帮我弄明白这个项目”。

What do I do, as an architect of the project? I close the ticket with a quick message: "Please, make your tickets more specific." My response is just one step away from "Get lost," but what else can I say? Mario doesn't know how to use the ticketing system. He's most probably been working all his life in a cozy office, where everybody around was his friend. Not even using chat, just asking questions across the table. I'm asking him to do something he has never done before. Of course, he doesn't know how. He feels ashamed, I suspect.

我该怎么办?作为一个架构师我该怎么办?我把这个工单给关了,并且回复说:“请把你的工单描述的更详细一些”,我的回复意思其实是“滚蛋,别给这乱了”,但我还能怎么说呢?马里奥不知道怎么使用 git 的工单系统,他可能一辈子都是工作在舒适的办公室里,那种没什么压力的地方,甚至连通讯软件都不用,问问题只需要去别人的办公桌那里。我交给他的工作他从来没有完成过,当然他可能不知道该怎么做,我觉得他会觉得很羞愧。

What happens next? He comes right back at me in Messenger, with the same set of questions. Actually, his reaction will depend on his personality. It may either be anger, confusion, or something else. But the bottom line is that Mario is not a software developer, he's a coder. He doesn't understand the dynamics of a modern software project, he doesn't know how to use its communication instruments, and he has no sociotechnical skills:

接下来他像个送信的一样站在我的后面,带着同样的问题,事实上他的反应取决于他的性格,可能是生气、迷惑或者其他什么的,但是不管怎样他始终只是一个会写代码的人,而并不是一个软件工程师。他根本不了解现在软件工程的动态,也不会用交流工具,而且一点都社会经验都没有:

  • 使用搜索引擎(百度或者谷歌)
  • 到社区去发问题,并且查看回复(类似 csdn)
  • 把经验和知识添加到代码仓库如 git
  • 提交代码时注明改变了哪些内容
  • 在编写和回顾代码时,跟别人讨论
  • 在代码仓库中多加练习

The same happens to almost everybody who joins us, unfortunately.

不幸的是大多数加入我们的人都存在这样的问题

A modern software project is much more a social activity than code writing. Knowing how to interact with the team and deal with information is much more important than knowing how to use design patterns. The only way to learn these skills is practice. I've said it many times, let me repeat it again: If you are not an open source and StackOverflow activist, you most likely won't have these skills.

现代软件工程越来越像社交活动而不单单是编码,学会和团队沟通和通过互联网去解决问题是比会用很多的设计模式还要重要,只有一种办法锻炼这种社交能力就是学习和练习,我说了很多次了然后我再重复一遍:如果你不是一个开源和(StackOverflow)社区拥护者,你可能永远也学不会这些。

  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    589 引用 • 3538 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 576 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖 • 1 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 636 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 59 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 365 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 3 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • gRpc
    11 引用 • 9 回帖 • 90 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 194 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 74 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1280 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 589 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 706 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 1 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 201 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 1 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 6 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖 • 1 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 634 关注