惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - smalldust

NTT大规模网络故障 亲手焙制一个极其简单但却极其实用的Reflector插件 Reflector保护方法初探 .Net 2.0 原汁原味读取注册表 为什么我不用IE7和FireFox 给.Net程序员的PInvoke Tips [2]: Are Strings Immutable? 除了Exception,你还能throw什么? 给.Net程序员的PInvoke Tips [1]: String is Sometimes an Integer CLR Team程序员出的难题,有兴趣的朋友不妨挑战一下 - smalldust - 博客园 Google Trends发布 也谈用反射实现Enum→String映射:一种重视性能的方法 针对个例的、社区性的维基系统设想(草稿) 数学的思考方式 VS 程序的思考方式 WinForm程序启动时不显示主窗体的实现方法 C#程序模拟鼠标操作 [Simulate Mouse Movement and Click Programmatically] 如何在C#中获取“当前目录” Windows Vista将推迟到2007年1月发布 .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 使用关键字作为自定义标识符
关于园子里讨论的软件的追求的杂谈
smalldust · 2006-07-18 · via 博客园 - smalldust

首先抱歉,题目可能很难懂。不过不要担心,内容会比较轻松。既然大家都喜欢讲故事,听故事,那我也来编一个故事来开始吧。

说是在很久很久以前,数学还没有被发明的时候,神把发明数学的难题交给了一对兄弟。兄弟二人齐心协力终于发明了0,1到9的数字,却为谁比谁大而争了起来。弟弟坚持认为2比1大,哥哥坚持认为1比2大。二人争执不休,最后到神那里去,要神给吓定论。

神想了想说:嗯,1可以比2大。哥哥听了很高兴;可是神又说:不过,2也可以比1大。

两个人都很不高兴,说,你是神,你怎么还没有主见呢?我们两个人的观点是完全对立的,如果我的观点对了,他的观点正好相反,当然就是错,怎么可能既这样,又那样呢!

神笑了笑说,其实你们的观点是可以共存的啊!当1和2被当作基数的角度来看,2就比1大,当1和2被当作序数的角度看,1就比2大啊。

这个故事说明一个问题:很多看起来完全对立的问题,实际上可能是各种看法都是正确的。

回到正题,这几天园子里的高手们讨论起技术是否重要的问题,捎带着牵连上了创业团队里什么重要、用户需求是否重要、等等很多问题。如果要我来回答,我会大声说:
技术非常重要!
用户需求非常重要!
创业团队里技术以外的东西非常重要!

似乎什么都很重要,没重没轻了是不是?

那换一个思维,如果我现在告诉你我的身高是1米80,请你告诉我,我高不高?

没错,我比1米75的高,比1米85的矮。高矮胖瘦,重要与否都是和其他参照物比较的结论。所以我们无法单纯地说,技术重要,技术不重要。

就拿一个创业团队来说吧,如果这个团队不大重视技术,技术方面瘸腿,那么在开拓市场开拓业务思考盈利模式的时候恐怕就是纸上谈兵,那么对于这样的一个团队来说,技术就很重要,不能因为技术带来木桶短板效应。
但是反过来,如果这个团队本身就是一群技术精英组建的,他们创建的初衷可能是看到了一种未来很好,“看上去很美”的技术前景,而相反没怎么考虑过这项技术的市场适应性、人们的接受能力、以及能否盈利以保证企业运作的方面,那对于他们来说先把技术放一放,好好考虑一下现实也许更好。

OK,我们现在解决了“是否”这个问题;下一个问题就是,软件开发,到底该追求什么?

首先我们站在个人的角度,假设我们自己开发一个软件,而且假设我们不愁吃穿,不需要这个软件来赚钱,你只是凭兴趣来开发它——这样的话,你希望这个软件被开发成什么样呢?我想,大多数程序员可能会想,把这个程序开发得尽善尽美:功能强大完善;体系结构清晰明快;技术精巧细致;界面美观大方;……你注意到了,这里你没有考虑很多东西:成本,工期,客户要求。

因为你是一个人,你在做自由开发;但是,假如你是一个企业呢?
你必须考虑到成本——在当前这个信息社会,一个软件没有做好而亏损几千万的例子并不少见。其次,你要考虑到工期和产品质量的平衡——我们理解你把这个软件做好的心情,但是在客户要求的短短2个月内,你能把客户所需要的功能做好就已经很不错了,哪里还有时间给它增加一些诸如换肤,使用Windows主题之类的花哨功能?此外,很多时候,你可能和客户有不同的意见——你认为这里应该用一个RadioButton,客户却坚持要一个DropDownList——没错,你用你从穿开裆裤小屁孩的时候就开始拥有的计算机经验打赌,客户代表绝对是头不懂计算机的猪——可是,就算他真的是头猪,这个软件最终也不是你用,而是这头猪用,所以没办法,你必须满足一头猪的需要,因为你不满足他,他就会去找别的公司——这世界的竞争太激烈了,伙计。所以我坚信,能满足一头猪的需求的软件公司,才是一个真正能让客户满意的公司

那么,是不是又出现矛盾了呢?程序开发企业是由程序员组成的,而企业和程序员的追求又不同——
没错,企业和员工的目标不尽相同,不仅是软件行业,所有行业都是这样。但是,我们何尝不去追求一种存异求同呢?举个例子来说,你正在思考你刚刚写的代码是不是可以换一种Pattern——比如,Visitor Pattern※参看下文讨论;因为这样似乎将来扩展起来比较容易。这时你的头可能会过来拍拍你的肩膀,Hi,Jerry,这一段代码已经很不错了!你赶快去把下一个模块写好吧!

这时你也许会抱怨——这一段代码只是刚刚能用而已!我还想继续整理它,让他结构更鲜明一些,将来无论是做二次开发还是插件,都会变得容易的!但是,你必须替你的Boss考虑——他的Boss可能刚刚对他说:嘿,Tom,下周五客户就要来验收了,你这个Team的进度却只有40%!

那我们该怎么做?我们不成沉浸在我们艺术家的思维里,我们必须意识到我们不是在玩,我们是在一家企业,做一项实际的工作;我们的确要把工作完成得更漂亮,但是是在有限的时间内!程序有Bug?不够完美?没错!世界上没有完美的东西,程序也是一样!缺一样功能的程序和断臂的维纳斯是一样的不朽之作!

如果你学会了这样想,你可以更进一步——不要等到你的Boss来拍你的肩膀时才意识到这一点,而是在项目的最开始,就能站到和一个项目经理相同的高度——甚至高于他的高度思考问题;在最初设计软件的体系时,就高度意识到工期,用户的环境、要求和条件等等;这样你会发现,你掌握的不仅仅是写程序。

注:由于各位争得面红耳赤,本文是专门博大家一笑的,纯属戏谑,若有不同意见请勿深究,请勿见怪:)