PCon全球产品创新大会(北京站)来啦~了解最新日程 了解详情
写点什么

科幻作家海因莱茵对软件开发者的七点启示

  • 2009 年 10 月 29 日
  • 本文字数:1618 字

    阅读完需:约 5 分钟

Robert Heinlein (海因莱茵)并不是个程序员,但在他的写作生涯中,有一些经验给我们很多启示,对软件开发者无论是写代码还是职业生涯都有很大的帮助。因为写一个软件和写一个故事,很多都是相通的。

他们并不期望它很好,但想在周三就能完成。

作为一个作家,海因莱茵很好地理解了他的编辑们的期限要求。很多时候,最终期限是最重要的,把一件事情做的足够好往往不如按时间完成任务重要。对于追求完美的人,这往往是个难题。又快又好当然最理想,但是有时候比如在写代码完成功能的时候,按期完成的“快”比“好”更重要。在项目管理中也有同样的例子,客户不会因为你的团队要完善一些不影响使用的 Bug 而延长期限或增加成本的行为而感激你们。所以保证开发进度,达到质量要求是项目管理者要考虑的一个平衡点。

写作中你需要权衡的重要一点是去掉你手稿中的冗余会使它变得更好。

写作如此,好程序和好故事也一样,是精炼简洁的。好文章需要几易其稿,好软件也是通过不断的重构而逐步改善的。软件开发中让工作变得简单也是去掉冗余的一种表现,比如更多的团队从传统开发模式转向了敏捷,去掉了很多在开发中认为不重要或可有可无的冗余环节,使得团队开发更加高效。

一个人应该能够换尿布,策划战争,杀猪,开船,设计房子,写十四行诗,结算账户,砌墙,接脱臼的骨头,安慰濒死的人,服从命令,发布命令,携手合作,独立行动,解数学方程,分析新问题,铲粪,电脑编程,做出可口的饭,善打架,勇敢地死去。只有昆虫才专业化。

成为某个领域的专家还是所谓的全能博学大师?可能每个人都会遇到这个问题。作为专家可能更容易找到某个领域的工作,但是只在某一特定领域了解很深也是有潜在危险的。比如你一直从事某个古老的编程语言,对其无所不知,但当它被淘汰的时候,也是你失业的时候。所以你更需要找到一个深度和广度的平衡,才能持续提高自己的竞争力。

政治是个坏事同时又是个好事,因为它是武力解决问题的替代方式,而武力会导致有人受伤。

对于“办公室政治”,大部分人都很憎恨,包括海因莱茵,但是他认为政治并不是恶魔,是人类用打架以外来解决问题的一种方式。对于每一个人都可能遇到的办公室政治,这也许是值得学习的一种乐观的心态。

海因莱茵的一个处事哲学值得我们学习的是:理解人与人的不同。他说过的很经典的两句话是:

一个社会如果除掉了它所有的麻烦,那它离灭亡也不远了。” 以及 “我从一个总是附和我的人那里什么也学不到。”

所以在我们的团队中,认识到人与人的不同,才能够更好的合作和沟通, 大家总是意见一致,表面看起来很好,但这往往隐藏着问题。就像如果两个合作者从没有争执和不同意见,那可能其实有一个人对合作是不必要的。

你的处女作肯定不是你最好的作品,但是要允许自己失败,只要你能从中有所收获。

这句话并不是海因莱茵说的,但是从他的第一本小说的经历可以得出这样的结论,他的第一个作品 For Us, the Living: A Comedy of Customs 写于上世纪 30 年代, 但在其去世之后几年才出版。

尽管这本书里很多故事都成为他后来的的其他小说的素材之一,但这也说明了他第一本书里试图写的内容太多了 。想想咱们自己的软件开发,产品设计是不是也犯过这样的错误呢,希望把所有的功能都支持,希望把所有对用户的展示都强调,结果用户往往迷失在太多的可选择中而放弃你的软件和产品。

另一方面,正是因为海因莱茵没有放弃,在他写了《For Us, the Living》 两年之后,他完成了《生命线》(The Lifeline),并且之后陆续获得了很多荣誉。所以即使是科幻大师,他也是需要不断学习和进步的。同样的,作为一个开发者,即使你还不是个伟大的程序员,但只要努力,总有一天会成为他们中的一员。


作者介绍:晁晓娟,从事 Web 开发管理多年,留过学,呆过外企,尝试过创业,关注项目管理,架构和产品,热爱天马行空的把所有的传统的非传统的 IDEA 搬到互联网上来。InfoQ 中文站内容团队,尤其是架构、SOA 和 Ruby 社区需要您的参与,有意者请邮件至 editors【AT】cn.infoq.com

2009 年 10 月 29 日 05:19
用户头像

发布了 42 篇内容, 共 15.0 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

JAVA 微信小程序 解密 用户信息encryptedData,linux系统架构与目录解析

Java 程序员 后端

James邮件服务器,高级java工程师简历模板

Java 程序员 后端

如何编写 Go 包

baiyutang

golang 11月日更

Java 反射:框架设计的灵魂,springboot运行原理

Java 程序员 后端

Java 多线程 —— 定时器,svnlinux使用教程

Java 程序员 后端

Java-进阶:集合框架1,java三个技术平台

Java 程序员 后端

JavaFx:窗口切换和ListView以及TableView的值绑定,docker面试题

Java 程序员 后端

Java 世界里的垃圾回收规则你搞懂了吗?,springboot输出视频流

Java 程序员 后端

Java 虚拟机1:什么是 Java(1),DubboSPI及自适应扩展原理

Java 程序员 后端

Java 里面的异常,java语言程序设计教程pdf

Java 程序员 后端

java8实战读书笔记:Lambda表达式语法与函数式编程接口

Java 程序员 后端

JavaWeb之Servlet技术(二),java基础程序设计题

Java 程序员 后端

Java 低代码开发平台“光”发布 2,javapdf模板下载百度云

Java 程序员 后端

Android开发:button的text文本是字母默认显示大写的解决步骤

三掌柜

11月日更

java 数据结构与算法之稀疏矩阵算法,BTAJ面试有关散列(哈希)表的面试题详解

Java 程序员 后端

JAVA 获取系统日期时间,java基础百度云

Java 程序员 后端

Jaeger知识点补充,java菜鸟教程面向对象

Java 程序员 后端

Java transient关键字的使用,java商城项目面试

Java 程序员 后端

java-集合-Map(双列)——迪迦重制版(1),关于线程池的五种实现方式

Java 程序员 后端

java8实战读书笔记:初识Stream、流的基本操作,nginx架构原理

Java 程序员 后端

Java 虚拟机1:什么是 Java,太完整了

Java 程序员 后端

Java-进阶:集合框架1(1),java分布式系统面试题

Java 程序员 后端

Java中的Type类型详解,javase菜鸟教程

Java 程序员 后端

Java this关键字详解(3种用法),Java程序员最新职业规划

Java 程序员 后端

Java 高并发之设计模式,深入linux内核架构mobi

Java 程序员 后端

JavaWeb Ajax详解,linux操作系统基础教程安俊秀课后答案

Java 程序员 后端

Java中使用Spring-security(一),java做视频直播

Java 程序员 后端

Java 方法的使用(方法重载、形参和实参调用关系,java高级面试最新

Java 程序员 后端

Java-Parallel GC介绍,springmvc面试题高级

Java 程序员 后端

java-集合-Map(双列)——迪迦重制版,zookeeper面试

Java 程序员 后端

JavaWeb学习笔记6——事务实例,我的支付宝3面+美团4面+拼多多四面

Java 程序员 后端

TDSQL前沿技术进展和趋势——数据异常基础理论研究

TDSQL前沿技术进展和趋势——数据异常基础理论研究

科幻作家海因莱茵对软件开发者的七点启示-InfoQ