分享

一问到底:「只差程序员」为什么会招黑?

 半佛肉夹馍 2023-10-20 发布于河南

问:

题主是计算机专业学生,社交网站上那些说“我有一个绝妙的创意和一个靠谱的团队,就差一个写代码的了”的项目招人信息往往招来大片调侃,那这种招黑的节奏是源自于什么呢?

答:

亲爱的商界精英们,开发一个iOS应用没有那么容易

导读:这是来自新加坡的 iOS 开发者 Kent Nguyen 发表在1月底的一篇博文。这篇吐槽文在 iOS 开发圈子里流传甚广,从原文150多个评论就可见一斑,现翻译如下。

让我们开门见山吧:做一个iPhone应用需要花多少钱?

  就是这个最常见的问题,我的很多朋友(大多是些西装革履的商务人士),还有我那些个对技术一知半解的客户们,他们都问过我这个的问题。通常,我会先给出一个大致的报价,这个报价并没有细致到需要签合同确认每一个功能点的地步。即便是这样,每当的我报价一出口,对方都毫无例外的给惊着了(当然不是因为便宜)。

  说实话,我没有狮子大开口。看看StackOverflow上这个著名的帖子吧,讨论的是开发Twitterific这样一款应用需要多少钱,后来讨论范围扩展到开发一个iOS应用的合理费用范围。虽然这个帖子是在2008年发布的,而帖子的最佳答案是由一名来自Twitteriffic的开发人员于2010年回答的,但是时至今日,帖子里面讨论的数字仍然是很靠谱的,而且我预计到2012年底依然有效。而我的报价和这个帖子里面的数字比起来,简直是小巫见大巫了。

  现在的趋势是,什么公司什么业务都想搞个iOS客户端,并且这种趋势在2012年看似依然火爆。所以我想起来写这篇博文,我想说一下开发一个iOS应用会碰到的各种细节问题和横生的变数,借此解释为什么iOS应用开发成本这么贵。如果你在考虑搞一个iOS应用,而你本身是搞业务而不是做技术的,如果你目前正在招标或者仅仅是想了解一下,那我这篇博会对你有帮助。当然,我说的东西并不局限于iOS应用开发,对Android、Windows Phone或者是Blackberry(如果RIM还能活的话)等移动应用平台基本上也是适用的。

开发之前需要仔细考虑的

  别做拍脑瓜的决策,在开工之前你需要考虑的比你想象的要多。我通常会帮助或者指导客户把以下几个要素都过一遍:

  一:和客户谈他们的移动应用,最让我吃惊的是他们从来没有想过支撑一个iPhone应用运行,背后需要涉及到的方方面面。他们想象中的iPhone是独立存在于这个宇宙的,是如此的简单,以至于他们要我很快就给出一个项目预算报价,而不用讨论诸多细节。我问他们:“你们是否考虑过后台服务器的事情?你们的应用需要和后端服务器做数据通讯?” 什么,听不懂?好吧,我用地球人的语言再把这个问题讲 一遍:“你们的应用不是需要用户注册嘛,你们考虑过把用户的数据存放在哪里了吗?我们需要一个地方去保存这些以后会用到的数据。” 第一次碰到这样的客户时,哥简直就怒了。后来我发现这不是客户的错:我是搞编程的,CS架构对我来说就像吃饭睡觉一样是不假思索的东西,而我的客户尽是些高富帅,他们懂个毛CS架构!

  所以,如果你不大懂技术,那请仔细听我说:如果你想做的移动应用需要用户注册和登录,或者你想随时控制移动应用的一些输出,甚至是你仅仅是需要一个用户反馈意见调查表这么简单的功能,那么,你得搞一台后端服务器。

  二:好了,现在你知道你需要一台后端服务器。同时你还需要想办法让你的iOS应用和你的服务器能够对话,就是相互间接收数据什么的。不,这个问题不是简答靠什么标准的即插即用的东东就能解决的,不是你们想象的那样!所有的东西都需要定制化开发,这就好比发明一门语言:你希望你的服务器和你的应用之间能够通过一种语言沟通,但是你不希望其他人听得懂这门语言。

  用行话说这就是制定服务器端API接口,或简称API。这些API应该在开发iPhone客户端之前就到位了。为什么?因为你必须先规定好一门语言的单词和语法,然后才能用这门语言说话吧!?好了,这就带出了第三点—如何开发这些API。

  三:API的成功定制是项目成功的一半(反之亦然),所以千万不要掉以轻心。你要考虑你的业务数据模型、业务流程、调用业务需要提供的参数、特定事件发生时数据间该如何互动等等。简单来说,我们要做的就是开发一个网站,上门跑着你的业务流程,只不过这个网站的所有运行结果都不是通过网页形式展现出来,而是呈现在一行行的文本和数字中。举个例子:一个登录成功的反馈页面仅仅包含YES一个单词。

  iPhone应用需要访问这些预先定义好的接口,并且按预定义格式提供必要的输入(比如用户名和密码),然后要对服务器端的反馈(YES或者NO)做出解析处理。所以,没有什么移动应用能够自动的含有用户注册和登录功能。

  服务器端开发需要考虑的问题太多了:选择服务器,选择用什么语言开发,主机放在哪里才能增加访问速度,等等,这里我就不展开了。如果这一切对你来说很陌生,那么你最好去问问团队里的技术负责人,或者干脆让开发人员做决策。

  四: 所以,关于服务器端API,你或者让自己的技术团队把它开发好,再将完善的API文档交给iPhone应用开发人员;或者你支付iPhone应用开发人员额外的报酬来搞定这些。你找的iPhone应用开发人员可能会服务器端开发也可能不会。如果他会的话,我建议最好让他也同时负责服务器端开发,因为他最清楚iPhone应用中需要哪些服务器端API。

  如果你的服务器端API已经存在了,那么除了向iPhone应用开发人员提供相关文档之外,你还要考虑让他能够便捷的同服务器开发团队沟通,因为大多数情况下,iPhone应用需要在已有API基础上增加一些新的接口。

现在我们来看看iPhone应用开发本身

  扯了大半天,我们终于开始谈iPhone应用开发本身了。一般来说,iOS平台上做所有事情都不能随心所欲。你最好在开发人员写代码之前把所有的需求都确认好好。这和开发网站不一样,按照实现签订的合同开发iOS应用,开发过程中对需求变更的容纳度可能很低:

用户界面:无论你打算采用iOS标准界面还是自定义元素,在开发开始前一定要确认清楚,因为应用的程序架构是根据界面和用户使用流程来设计的。一个很好的例子就是在界面底部使用了iOS标准的标签栏(Tab Bar),此后如果你想让标签栏里面的图标变成彩色的,这个代码改动量可没你想象的那么小!

代码之间的耦合:如果是开发网站,你可以随意的添加一个页面或者一处链接。做iOS应用就没有那么简单了,很多东西一开始都要设计好,后期的一处改动会牵连很多东西,具体原因是你无法理解的。iOS应用的代码写好之后,再改动行不行?行!但必须小心。 这就像设计电路板一样, 如果你不小心把那根线搭错了,整块电路板就会不工作。有人说架构优良的程序可以有很高的延展性,那纯属纸上谈兵。在About屏幕上添加一个电子邮件按钮可能只需要几行代码的工作量,而添加一个转发到新浪微薄的按钮(译者注:原文是添加一个Facebook Like)就完全不是那么简单的事儿了!

让一个iPhone应用同时也支持iPad:如果要评选最坑爹“需求变更”,那么这个绝对是当之无愧的。理由很简单:支持iPad根本不是TMD什么附加功能!iPad应用基本上都比iPhone应用来得要复杂,界面设计和用户体验也大不一样。我问你,制造一辆电动自行车,然后把它改装成一部烧汽油的摩托车,这能是一回事儿吗!?电动自行车跟摩托车看起来是很像,但是制造它们完全是两码事。

  拿广受欢迎的Facebook官方应用来说,它的iPhone和iPad版本看似相似,实际用户操作流程完全不同。不仅仅是界面上的不同会带来额外的工作,对后台服务器API的需求也可能不一样。拿我熟悉的一个应用Denso来说(我熟悉它因为这是我开发的),它的iPad版本比iPhone多了几个功能,这些都需要额外的服务器端API来支持。记住,iPhone和iPad应用的用户体验需求是完全不一样的。

准备好开始了吗?

  希望此文能够帮助你和你的团队了解移动应用开发幕后的方方面面。除非你们要做一个像计算器那么简单的单机应用,否则你们很难用极低的成本搞定。综上所述,如果你觉得外包成本太高,那你只好招人自己开发。

  当然,如果你决定了要外包移动应用开发,那么我还要提醒一点:公司政治。如果你是在一家大公司或者有着严格制度的机构里面干活,那么帮助合同开发者搞定那些个规章制度上的繁文缛节,对你来说是非常重要的一项工作,必要的时候甚至可以做一些政策上的变通。 我同几个大型企业客户接触过,当我要求看他们的服务器端数据接口的时候,他们流露出很不安的表情。我想这或许是因为他们受制于公司规定而不能透露信息,这无可厚非;或者他们还没有想好这种情况下该如何操作;或者他们的品牌制度蛋疼到需要在移动应用的每个屏幕上都摆着公司logo!最终我没有和这样的企业客户合作,因为我无法想象如果有一天我需要增加一些服务器端API接口的话,和他们的规章和流程折腾,那将会是多么悲剧的事情。

  PS:开发移动应用很耗费时间,你最好有耐心。

英文原文:

Dear business people, an iOS app actually takes a lot of work!

————————————————————————————————————

以上为转载。下面翻译下stackoverflow那个得到了1000多个支持的回帖:

How much does it cost to develop an iPhone application?

I'm one of the developers for Twitterrific and to be honest, I can't tell you how many hours have gone into the product. I can tell you everyone who upvoted the estimate of 160 hours for development and 40 hours for design is fricken' high. (I'd use another phrase, but this is my first post on Stack Overflow, so I'm being good.)

我是Twitterific的一名开发者。老实说,我无法告诉你制作这个软件花费了多少时间。但我可以告诉你,那个需要耗费160小时做开发、40小时做设计的估计过于乐观了。

Twitterrific has had 4 major releases beginning with the iOS 1.0 (Jailbreak.) That's a lot of code, much of which is in the bit bucket (we refactor a lot with each major release.)

Twitterific自IOS 1.0至今,已经有4个大版本了。我们写了大量的代码,还有更多代码被扔进了回收站(因为我们在每个大版本里都会有大量重构)。

(感谢

@Tom von Mondburg

朋友指正,这里的 the bit bucket 指的是代码垃圾桶或/dev/null。意思是大量代码都废弃了:

Bit bucket

One thing that would be interesting to look at is the amount of time that we had to work on the iPad version. Apple set a product release date that gave us 60 days to do the development. (That was later extended by a week.)

或许应该看看我们不得不在iPad版本投入的时间。按照Apple设置的商品发布时间,我们有60天来做开发(后来推迟了一个星期)。

We started the iPad development from scratch, but a lot of our underlying code (mostly models) was re-used. The development was done by two experienced iOS developers. One of them has even written a book: iPhone App Development: The Missing Manual :-)

我们从草稿开始iPad开发,但很多底层代码(绝大多数模型)是重用(iphone版)的。开发工作有两名资深iOS开发者完成。其中一个甚至写过一本书:《iPhone软件开发:找不到的用户手册》(无视这个渣翻译吧……不知道该咋译了)。

With such a short schedule, we worked some pretty long hours. Let's be conservative and say it's 10 hours per day for 6 days a week. That 60 hours for 9 weeks gives us 540 hours. With two developers, that's pretty close to 1,100 hours. Our rate for clients is $150 per hour giving $165,000 just for new code. Remember also that we were reusing a bunch existing code: I'm going to lowball the value of that code at $35,000 giving a total development cost of $200,000.

Anyone who's done serious iPhone development can tell you there's a lot of design work involved with any project. We had two designers working on that aspect of the product. They worked their asses off dealing with completely new interaction mechanics. Don't forget they didn't have any hardware to touch, either (LOTS of printouts!) Combined they spent at least 25 hours per week on the project. So 225 hours at $150/hr is about $34,000.

有这样一个紧促的计划,我们可实在不轻松。保守的说,我们一周干六天,每天工作10个小时。就这样持续了9周,合计540个小时。按两个开发者计算,接近1100人时。我们的薪水是每小时150美元,所以仅开发新代码就耗费了16万5千美元。但请记住,我们还重用了很多代码。那些代码按35000美元这个下界估算,总开发费用为20万美元。任何做过正规iPhone开发的人都会告诉你,他们做了许多设计工作。我们也有两名设计师做界面开发。他们合起来至少每周工作了25个小时,合计225小时,每小时150美元,即34000美元。

There are also other costs that many developer neglect to take into account: project management, testing, equipment. Again, if we lowball that figure at $16,000 we're at $250,000. This number falls in line with Jonathan Wight's (@schwa) $50-150K estimate with the 22 day Obama app.

还有其他开销需要计入开发成本:项目管理、测试、设备。这些最少要16000美元,即合计需要250000美元。

Take another hit, dude.

Now if you want to build backend services for your app, that number's going to go up even more. Everyone seems surprised that Instagram chewed through $500K in venture funding to build a new frontend and backend. I'm not.

注: Twitterific是IOS平台上的twitter客户端。twitter是新浪微博的克隆原型。

就这样一个手机收发微博(twitter)的客户端软件,还是由两名出书立说级的软件工程师、且是在有了iphone版、仅仅向iPad移植的情况下,计划做60天。但实际还延误了一个星期——而且,一周干六天,每天做10个小时。

这个移植项目,仅开发成本都至少25万美元。

相比很多项目,这个项目因为已经有了twitter,所以无需考虑服务器相关问题。否则投入会让人更为吃惊。

写一个程序,绝对不是买个VCD插电视机上那么简单。而是从蓝图到施工,修起一座房子。

————————————————————————————

有了以上背景知识,想必我在前面几位楼主的答案下写的评论就没那么难以理解了:

吐槽这个,绝对不是程序员狂妄自大,而是因为我们有自知之明。

和外行想象的不同。仅仅是一个视频编码,就足够很多学者研究一辈子了。
而视频编码和静态图片编码,还是不同的两个领域。后者需要另外的一些学者做研究。

类似的,google首页那个搜索框简单吧?半个小时能不能搞定?

其实,那个东西的背后,耗费了上万名顶尖工程师十几年的时间。每个工程师只能负责很少的一个方面。

——我曾为一位同学做过一个登录逻辑的设计。伪代码都写出来了,对我也就是几分钟的活。但我搞linux开发,懒得为了做这几分钟的活耗费几个小时去弄windows开发环境,所以就丢给他自己做。结果这位掏2000一个月雇人做了三个月……然后,黄了,狗屁都没做出来。
——这还只是真正做过若干年项目的普通软件工程师,和刚毕业的、比较大路货的计算机学士之间的水平差异。
——想象下google那上万名顶尖工程师在后台做的是什么吧。

正是因为熟悉这个领域、知道写一个软件需要多少人配合、知道自己在这些人中能占据的位置,所以,才知道接下一个“就差一个写代码的了”的项目,需要多么不可能的资质,才知道敢接这种活的人得有多么狂妄——或者,不靠谱。

不靠谱老板的活,当然只有不靠谱的人敢接。随他们折腾去吧。

————————————————————————————

3月14日补充:

和其它任何需要技艺的领域一样,学徒和老师傅……哦不,初级程序员和资深程序员之间是有很大差异的(所谓程序员干不过30岁、程序员要尽早转管理之类,是当年IT界的一些败类捏造、鼓吹出来的,和事实相悖)。

The Rise of Developeronomics

这是一个非常出名的帖子。作者声称“优秀程序员的工作效率是平庸的程序员的10倍”。

不过,请搜一下相关帖子。很多人表示,有时候差距100倍都不止——据我的经验,的确如此。

所以,请注意我强调那个Twitterific的两名开发者是“著书立说级”的。

换句话说,他们1100人时能完成的任务,在一般开发者那里可能11000人时都未必能搞定。

此外,由于程序开发的复杂性,业界公认如下观点:一个团队最好不要超过5名开发人员,否则交流成本太高,反而导致出现“越加人,越延期”现象。

举例来说,暴雪游戏的核心开发团队有5个人,写一个游戏至少要2~5年。如果他组了个50人的核心开发团队,那么大家这辈子就别想玩到他们写的游戏了。

换句话说,在软件开发上,数量不能替代质量,甚至数量常常会拖垮质量。

——当然,之前提到过,Google至少有上万名工程师在为他工作,这和“一个团队不要超过5个人”并不矛盾:因为Google实在太复杂了,只能是每个领域/每个功能交给一个团队:语音识别、图片识别、视频识别……等等。

写一个程序,很多时候远比盖一座大厦投入的劳动更多。
写一个程序,很多时候远比盖一座大厦投入的劳动更多。

写一个程序,很多时候远比盖一座大厦投入的劳动更多。

——因为这个事实太多太多人不知道,又有太多太多人想当然的以为我只是在信口胡言,所以这里非常有必要重复三遍。

先看一个报道:

  导语:美国IT网站CNET今天撰文称,为了适应日新月异的科技行业发展趋势,微软正在通过部门重组和调整开发流程缩短Office的开发周期,为用户提供最佳服务。但在此过程中,仍然要避免因为速度过快而导致企业用户无所适从。

  近十年来,微软Office的运作很有规律,几乎像钟表一样精准:每过两年半或三年,这个5000人的研发团队都会推出新版Office,从不爽约。

CNET:微软Office团队是如何加快脚步的?

利用stackoverflow的数据,我们可以估算一下office的开发成本。

按开发团队共5000人计算、且认为周末无薪、每月只有28天,则office团队每月薪水支出是 150 × 8 × 5 × 4 × 5000 = 24000 × 5000 = 120000000,即1.2亿美元。

按每个office版本需要3年开发时间算,那么总投入为:
1.2亿/月 × 12个月/年 × 3年 = 43.2亿美元。

这还仅仅是薪水支出。国外计算机设备每5年全部淘汰(这也是国内二手机的主要来源),加上场地租用费、水电费以及其它支出,这些都还没考虑在内。


相比之下,当年的世界第一高楼迪拜塔,造价如何呢?

才不过15个亿而已。

而且,这笔钱买来的,并不仅仅是设计、人工,还包括了钢筋水泥等各种建材、以及电梯等附属设置的价格。


你以为微软每年过万亿美元的GDP,就只是空手套白狼么?

哈里發塔- 维基百科,自由的百科全书
维基百科,自由的百科全书哈里發塔‎转为简体网页

造价, 15億美元. 高度 .... 2008年4月8日阿联酋迪拜艾马尔房地产公司宣布,杜拜塔的高度已达629米,超过高度为628.8米的美国KVLY電視塔,成为世界最高建筑。

RECOMMEND

- 点个在看你最好看 -

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多