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

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

原文链接: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)社区拥护者,你可能永远也学不会这些。

  • 程序员

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

    574 引用 • 3533 回帖
  • 职场

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

    127 引用 • 1706 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 996
    13 引用 • 200 回帖 • 11 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8447 引用 • 38477 回帖 • 154 关注
  • danl
    146 关注
  • 笔记

    好记性不如烂笔头。

    308 引用 • 793 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 102 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 105 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖 • 1 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    409 引用 • 1246 回帖 • 587 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    126 引用 • 169 回帖
  • JavaScript

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

    728 引用 • 1273 回帖 • 1 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    7 引用 • 40 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    178 引用 • 997 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 789 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 26 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 163 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    167 引用 • 1520 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 14 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 637 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 86 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 76 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖