空间理论可不可以删除qq空间用2代码解释呢?

我的新浪微博:。
欢迎大家相互交流,共同提高技术。
2&&t_generator类和t_generator_registry类
这个两个类的主要功能就是为生成所有语言的代码提供基础信息和提供具体代码生成器对象,上面就是调用这个两个类的方法来生成具体语言的代码生成器对象和执行生成代码的功能函数。下面主要分析两个函数的功能,一个是t_generator_registry类的get_generator函数,这个是一个静态的函数可以直接通过类调用;另一个是t_generator类的generate_program函数。
(1)t_generator_registry类的get_generator函数
这个函数有两个参数,一个是表示程序的对象program,另一个是语言字符串参数(包括代表语言的简短字符串和可选项的组合,有的没有)。函数首先解析语言字符串参数,参数字符串中是这样组织的:在冒号(:)之前是代表语言的字符串,冒号之后是可选项的参数,每一个可选项参数用逗号(,)分割,每一个可选项参数都是键值对并且键和值是用等号(=)分割。按照上面的字符串格式解析各个参数部分就可以了,可选项参数用map来保存键值对,代码实现如下:
1 string::size_type colon = options.find(':');
string language = options.substr(0, colon);
map&string, string& parsed_
if (colon != string::npos) {
string::size_type pos = colon+1;
while (pos != string::npos && pos & options.size()) {
string::size_type next_pos = options.find(',', pos);
string option = options.substr(pos, next_pos-pos);
pos = ((next_pos == string::npos) ? next_pos : next_pos+1);
string::size_type separator = option.find('=');
string key,
if (separator == string::npos) {
value = "";
key = option.substr(0, separator);
value = option.substr(separator+1);
parsed_options[key] =
然后调用get_generator_map函数得到一个代表语言字符串和产生这种语言生成器对象的工厂对象的map对象:gen_map_t&&the_map&=&get_generator_map();&gen_map_t的定义如下:
1 typedef std::map&std::string, t_generator_factory*& gen_map_t;
get_generator_map函数只有两句代码,一个是定义一个静态局部变量并初始化(因为静态局部变量必须并初始化并且只有第一次会执行初始化,因为不初始化链接程序的时候会报错),第二句就是返回这个静态局部变量给调用者,代码如下:
1 static gen_map_t* the_map = new gen_map_t();
return *the_
然后在这个map对象中找到对应语言的工厂对象,然后用这个工厂对象生产一个这种语言的代码生成器对象并返回给调用者,代码如下所示:
gen_map_t::iterator iter = the_map.find(language);
return iter-&second-&get_generator(program, parsed_options, options);
本函数的功能已经分析完毕,但是还存在着两个问题(或是困难)。一个是最后一条返回一句是根据具体的语言来使用具体语言生产器的工厂对象生产代码生成器,具体又是怎么生成的了?第二个就是从main函数执行到现在还没有发现在哪儿为get_generator_map函数里定义的静态局部变量添加过任何键值对,那么我们查找具体语言必定会失败,那么会返回一个NULL给调用者,那么程序就会执行不下去了,但是程序确实能够完完整整的执行下去,这个问题困扰了我好一会儿。下面就这两个问题继续分析相关代码并且解决问题。
第一个应该不算是问题,但是必须要解决第二个问题以后才能够解释,因为没有解决第二个问题,那么根本就不会执行到最后一条返回语句这儿来,所以我先解决第二个问题。
第二个问题分析和解决思路如下:
我们通常认为main函数是程序的入口函数,那么所以程序的执行都是从main函数开始的,所以我也选择从main函数开始分析这部分的代码,根据程序的执行流程阅读和分析代码是我一贯的思路。但是这种情况在C++里面有例外,记得我在学习MFC的时候,分析MFC执行过程就发现一个问题,那就是全局变量的初始化是在main函数开始之前的,也就是说全局类对象的构造函数也是在main执行之前执行的。由于我反复从main开始一直详细的阅读每一行代码,所以可以确定确实没有在执行的过程中初始化the_map静态局部变量,所以唯一的可能就是在main函数开始之前已经初始化好了。根据这一点思路自己开始着手查找初始化the_map的代码,发现t_generator_registry类的register_generator函数为the_map添加键值对了,这个函数定义如下:
1 void t_generator_registry::register_generator(t_generator_factory* factory) {
gen_map_t& the_map = get_generator_map();
if (the_map.find(factory-&get_short_name()) != the_map.end()) {
failure("Duplicate generators for language \"%s\"!\n", factory-&get_short_name().c_str());
the_map[factory-&get_short_name()] =
这个函数也首先调用get_generator_map函数得到那个静态局部变量,然后查找要注册的工程是否已经在the_map中存在,如果存在就提示失败信息,否则就把工厂的名字和工厂对象作为键值对添加到the_map中。
虽然找到了为the_map添加键值对的地方,但是还没有找到调用这个注册工厂函数的地方,所以继续在代码中搜索调用这个函数的地方。整个代码就只有一处调用了这个函数,而且是在一个类的构造函数中,代码如下:
1 t_generator_factory::t_generator_factory(const std::string& short_name, const std::string& long_name,
const std::string& documentation) : short_name_(short_name)
, long_name_(long_name) , documentation_(documentation)
t_generator_registry::register_generator(this);
t_generator_factory类是所有生产代码生产器对象工厂的基类,每一种具体的语言都有自己的代码生成器类和生产这种类的工厂类,上面的代码是它的构造函数,功能就是把自己注册到the_map中。看到这里是否有一种逐渐清晰的感觉,但是总是感觉还有少点什么,就是这个构造函数被调用也必须有这个类的对象被定义或其子类的对象被定义。于是我又开始搜索哪些类是从这个类继承的,发现两处很重要的代码,一处如下:
1 template &typename generator&
3 class t_generator_factory_impl : public t_generator_factory {
t_generator_factory_impl(const std::string& short_name, const std::string& long_name,
const std::string& documentation) : t_generator_factory(short_name, long_name, documentation)
13 virtual t_generator* get_generator(t_program* program,
const std::map&std::string, std::string&& parsed_options, const std::string& option_string) {
return new generator(program, parsed_options, option_string);
21 &&//此处省略了一些代码
t_generator_factory_impl类继承了t_generator_factory类,而且在构造函数的时候也调用了父类的构造函数,因为是带参数的构造函数所以必须手动调用父类的构造函数。这个类是一个模板类,模板参数就是一个代码生成器类,所以函数get_generator就能够根据这个模板参数生成new一个对应语言的代码生成器对象了。这里就把上面提到的第一个问题也解决了,每一个工厂类把自己注册到the_map,然后使用者通过代表语言的键(key)在the_map找到对应的工厂对象,然后调用get_generator函数就生成具体的代码生成器对象了,这就是第一个问题提到的最后一句返回语句的代码执行情况。
但是还是没有看到定义具体的工厂对象呀,那么还需要看下面一处的代码:
1 #define THRIFT_REGISTER_GENERATOR(language, long_name, doc)
3 class t_##language##_generator_factory_impl
: public t_generator_factory_impl&t_##language##_generator&
t_##language##_generator_factory_impl()
: t_generator_factory_impl&t_##language##_generator&(
#language, long_name, doc)
static t_##language##_generator_factory_impl _
这是一个宏定义,它根据参数language定义一个生产具体语言的代码生成器的工厂类,并从t_generator_factory_impl类继承,传递的模板参数也是对应语言的代码生成器类,构造函数同样调用了父类的构造函数;最后还定义了一个对应的静态的类全局变量(千呼万唤始出来,终于找到定义类的全局变量了)。但是还是存在同样的问题就是定义了宏函数还是需要调用才执行吧,所以就在代码中搜索调用了这个宏函数的代码,最终发现这个每一个具体的语言代码生成器的文件都调用了一次,如下面是C++的文件t_cpp_generator.cc中调用的代码:
1 THRIFT_REGISTER_GENERATOR(cpp, "C++",
pure_enums:
Generate pure enums instead of wrapper classes.\n"
Generate type specifications for the dense protocol.\n"
include_prefix:
Use full include paths in generated files.\n"
其他语言的代码生成器类的定义文件中都有类似的调用,这样每一个语言生成器对象的生产工厂就被注册到the_map中了,由此问题得到解决。
(2)t_generator类的generate_program函数
这个函数是生成具体语言代码的顶层函数,它会调用子类定义的各个子函数来做具体代码的生成过程,后面会详细解析C++、java和python代码生成的过程。
首先调用代码生成器的初始化函数来初始化代码生成器,然后依次调用各种基本数据类型和服务的生成函数来生成相应的代码,最后关闭代码生成器。代码实现如下:
init_generator();
vector&t_enum*& enums = program_-&get_enums();
vector&t_enum*&::iterator en_
for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) {
generate_enum(*en_iter);
vector&t_typedef*& typedefs = program_-&get_typedefs();
vector&t_typedef*&::iterator td_
for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) {
generate_typedef(*td_iter);
vector&t_const*& consts = program_-&get_consts();
generate_consts(consts);
vector&t_struct*& objects = program_-&get_objects();
vector&t_struct*&::iterator o_
for (o_iter = objects.begin(); o_iter != objects.end(); ++o_iter) {
if ((*o_iter)-&is_xception()) {
generate_xception(*o_iter);
generate_struct(*o_iter);
vector&t_service*& services = program_-&get_services();
vector&t_service*&::iterator sv_
for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) {
service_name_ = get_service_name(*sv_iter);
generate_service(*sv_iter);
close_generator();
此函数使用的是词法和语法分析结果的一些符号,这些符号都保持在t_program对象的对于数据结构里面,所以上面的函数依次从t_program对象中取得各种数据类型的符号和服务的符号,并依次生成。
(3)t_generator类的其它功能简介
这个类是所有具体语言代码生成器的共同基类,所以定义了很多各种语言代码生成需要的共同功能,例如生成代码的格式控制、命名空间的有效性检查、驼峰标识符和下划线标识符的相互转换等等。这些功能比较简单,需要可以直接查看源代码。
阅读(...) 评论()「只差程序员」为什么会招黑?
题主是计算机专业学生,社交网站上那些说“我有一个绝妙的创意和一个靠谱的团队,就差一个写代码的了”的项目招人信息往往招来大片调侃,那这种招黑的节奏是源自于什么呢?
按票数排序
263 个回答
讲个真事儿。我有个同学的朋友的同事(关系比较复杂),在传统的央企工作,想在互联网行业结合自身所在的行业创出一片天地。于是托同事的朋友,也就是我的同学,找到了我,本来是想把这个事情外包给我来做,我大概了解了一下需求(cms+众筹+crm+支付+产品wiki),提出这东西要我帮他找人来做,最起码需要30w,6个月的时间和成本来做。这他当然支付不起,然后又想让我们以技术合伙人的身份加入,我看看了这行业还算不错,而且想来既然是同学介绍的,那应该还算靠谱,就答应先做做看。于是接下这个任务之后,就是一次又一次的开会,碰头,讨论,然后才发觉噩梦刚刚开始...从网站最起码需要一个域名和一台服务器这种尝试开始,一点点告诉我的合伙人们。直到上周再碰头,他们竟然还一直觉得我们要做的是一个电商网站。然后最神的是,在找我之前,完全没做过任何市场调查,也没有10个以上的意向客户,更没有一个可靠的推广渠道和方案,还拿出一个设计风格完全是上世纪的PPT(可以想象一下,蓝白渐变背景,右下角一个小地球的gif一直转),还号称是要用这个PPT去管投资人要钱。这个我也就忍了,直到上周突然跟我们说找个外包3K其实就能把这活儿接下来,然后还甩给我一个链接,让我参考一下。我打开一看,基本就是一个静态网站,5个页面,一个只能添加内容的后台。然后就拿着这个网站说,“我们是一个团队,但你看能不能先找外包做一个这样的网站”...最后的最后,昨天再次碰头,又拿出apple的官方网站,说要做成这样...被我否决之后,又开始说淘宝一淘京东等等网站的设计风格死板,不够“创新”,不够“互联网”...所以呢,其实梗不在“我们就差个程序员了”。这个话题可以推广到很多职业,比如“我们就差个设计师了!”,“我们就差个产品经理了!”,“我们就差个投资人了!”,等等等等。关键的梗在于一个不明白其他行业的人,总会把其他行业想的简单,把自己的行业想得重要。最后再说一句,我一直以为互联网行业是一个严肃的行业,程序员也是一项需要真正智慧和勤奋的工作,有很多的天才投入到这个行业中,这个行业不应该被人如此的贬低。==============
==============收到这么多回应真的受宠若惊。最后还是再说一下吧,关键的梗其实不在于“程序员”这三个字。我觉得可能更多的时候,无论从事的是什么职业,我只是想获得别人的尊重。就像《喜剧之王》里的周星驰一样,“其实,我是个演员”。:)
在IT这一行做得久了,会接触到无数让人哭笑不得的外行话。「我们就差一个写代码的了」是其中典型的一种,之所以黑它,不是因为程序员有多自大,认为自己被轻视所以愤怒。而是因为说这句话的人里有90%以上绝对不仅仅差一个写代码的,而是一整套技术体系。他们的项目野心勃勃,需要技术管理人员、架构师、分析师、开发、测试、运维……组合成一个团队来完成,而实际上呢?他们认为这一切只需要一个「写代码的」(最好是刚毕业、工资三四千)就能做好。看到这句话的同时几乎就能想到这个项目的下场了。这一现象在各行各业都有,但IT业特别是软件行业显得格外突出,大概是这一行里“真正的成果”和“看得见摸得着的成果”相差太远了吧。你盖一幢大厦和垒一间公厕,施工和设计难度先不提,单从外表就能看出巨大的差异来。就算老板再蠢,也不会觉得“我想盖幢大楼,就差俩搬砖的了”。而对IT业的外行来说,新浪首页和某个人所做的新闻采集站没有任何区别,尽管前者后面有成千上万人和成千上万台服务器,后者一个虚拟主机就能搞定。举这个例子是因为我至少亲耳听到过三四次有人认真地问“现在不是流行做网站吗,我也想做个新浪那种的,得花多少钱”,后来电子商务流行了,就改成了淘宝那样的。总之,只要你回答的花费达到五位数、工期超过两个礼拜,就会引发惊诧甚至不满。我最哭笑不得的一次经历还是大学时,某个系办工作的同学听说我“会做网站”,于是就拉我去他们办公室,让我帮忙弄一个系主页,有新闻、有照片、有管理和成绩查询系统。我心里盘算了一下,大概估计出工作量和整体架构了,不复杂,一个人也能做。考虑到对于外行讲程序结构比较费劲,就先给他们做一个首页模板看看是不是那么回事吧。于是先打开Dreamweaver,随手做了一个典型的三列式首页,当然里面内容和样式都没怎么修饰,草稿嘛。然后把他叫过来:“你看看,做出来大概是不是这么个意思?”他看起来有点失望和心不在焉,随口应付两句就先打发我回去了。我摸不着头脑,不知道这网站还打不打算做。当然后来他也没找过我。隔了一个多月,从别人那里辗转听到他对这件事的评价:“做得不好看,还乱七八糟的,有好多跟他说过的功能也没加上”。这让我很纳闷,给你看个模板草图而已,这是哪门子的评价?后来又遇上一个也和他交流过的同学,才问明白,他原本是打算让我“随便抽出下午一点时间帮个忙”,做一个“有新闻、有照片、有管理和成绩查询系统的网站”,而那个半小时画出来的草图就是他以为要做出来的成品……
应该和下面的一个道理:累一天,终于搞定了,上午把车看好了,也试驾了,宝马7系,有现车,感觉还可以。计划明天付定金,下午去看房子,独栋的别墅价格还行,1000平方米的,门口有花园,能停车,折扣已经谈好且定下了。现在万事俱备,只看今晚双色球了。3月12日补充:“就差”=“没有”“就差一点点就成功了”=“失败”不要用这种词汇给自己心理安慰。
导读:这是来自新加坡的 iOS 开发者 Kent Nguyen 发表在1月底的一篇博文。这篇吐槽文在 iOS 开发圈子里流传甚广,从原文150多个评论就可见一斑,现翻译如下。让我们开门见山吧:做一个iPhone应用需要花多少钱?  就是这个最常见的问题,我的很多朋友(大多是些西装革履的商务人士),还有我那些个对技术一知半解的客户们,他们都问过我这个的问题。通常,我会先给出一个大致的报价,这个报价并没有细致到需要签合同确认每一个功能点的地步。即便是这样,每当的我报价一出口,对方都毫无例外的给惊着了(当然不是因为便宜)。  说实话,我没有狮子大开口。看看吧,讨论的是开发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的需求也可能不一样。拿我熟悉的一个应用来说(我熟悉它因为这是我开发的),它的iPad版本比iPhone多了几个功能,这些都需要额外的服务器端API来支持。记住,iPhone和iPad应用的用户体验需求是完全不一样的。 准备好开始了吗?  希望此文能够帮助你和你的团队了解移动应用开发幕后的方方面面。除非你们要做一个像计算器那么简单的单机应用,否则你们很难用极低的成本搞定。综上所述,如果你觉得外包成本太高,那你只好招人自己开发。  当然,如果你决定了要外包移动应用开发,那么我还要提醒一点:公司政治。如果你是在一家大公司或者有着严格制度的机构里面干活,那么帮助合同开发者搞定那些个规章制度上的繁文缛节,对你来说是非常重要的一项工作,必要的时候甚至可以做一些政策上的变通。 我同几个大型企业客户接触过,当我要求看他们的服务器端数据接口的时候,他们流露出很不安的表情。我想这或许是因为他们受制于公司规定而不能透露信息,这无可厚非;或者他们还没有想好这种情况下该如何操作;或者他们的品牌制度蛋疼到需要在移动应用的每个屏幕上都摆着公司logo!最终我没有和这样的企业客户合作,因为我无法想象如果有一天我需要增加一些服务器端API接口的话,和他们的规章和流程折腾,那将会是多么悲剧的事情。  PS:开发移动应用很耗费时间,你最好有耐心。英文原文:————————————————————————————————————以上为转载。下面翻译下stackoverflow那个得到了1000多个支持的回帖: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个大版本了。在bit bucket(似乎是一个代码管理系统,类似vss)有大量的代码(我们在每个大版本里都会重构它们)。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:
:-)我们从草稿开始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界的一些败类捏造、鼓吹出来的,和事实相悖)。这是一个非常出名的帖子。作者声称“优秀程序员的工作效率是平庸的程序员的10倍”。不过,请搜一下相关帖子。很多人表示,有时候差距100倍都不止——据我的经验,的确如此。所以,请注意我强调那个Twitterific的两名开发者是“著书立说级”的。换句话说,他们1100人时能完成的任务,在一般开发者那里可能11000人时都未必能搞定。此外,由于程序开发的复杂性,业界公认如下观点:一个团队最好不要超过5名开发人员,否则交流成本太高,反而导致出现“越加人,越延期”现象。举例来说,暴雪游戏的核心开发团队有5个人,写一个游戏至少要2~5年。如果他组了个50人的核心开发团队,那么大家这辈子就别想玩到他们写的游戏了。换句话说,在软件开发上,数量不能替代质量,甚至数量常常会拖垮质量。——当然,之前提到过,Google至少有上万名工程师在为他工作,这和“一个团队不要超过5个人”并不矛盾:因为Google实在太复杂了,只能是每个领域/每个功能交给一个团队:语音识别、图片识别、视频识别……等等。写一个程序,很多时候远比盖一座大厦投入的劳动更多。
和 @匿名用户 等朋友碰到的这种事情,我也碰到过很多回。年轻时,我也是程序员,而且是傻傻的程序员。某政府机关的一个小领导,想做一个类似阿里巴巴的网站,经朋友辗转找到我,坐下胡侃。设想了一万种超越马云的思路,然后问道:“听说你是高手,两个星期能不能做出来?”我:“哈哈哈哈,这个茶馆不错,我再去拿点吃的……”有一个企业的领导在朋友的介绍下主动找到我,想上一套系统,沟通了半小时左右,大概就是一套ERP系统。我多了一个心眼,问了一下他们大概有多少预算。他大气的说:“只要能做好,10万都没问题的!”我:“哈哈哈哈,来抽根烟,咱们聊聊人生理想……”某位政府机关的、据说是很有想法很有能力的一个领导,认识有一段时间了;而且这位领导是懂技术的,起码知道数据库、编程语言是神马东西的。后来他有一个想法,并且认为这个想法越来越“成熟”、越来越“开拓”、越来越“通用”。大概思路就是建一个很大的数据库,将我们工作生活中所有的数据按照他的规范都存进去,这样政府想要什么就有什么,个人想用什么就用什么……举了好多例子,对不起我也没记住,反正每个例子都挺有用的、也都是可行的。领导:“XX,我这个思路有前景不?”我:“有有,领导就是思维超前,站得高看得远……”领导:“那这样吧,我投钱,你带队,招几个毕业生,要踏实一点的,别要那些光会吹牛不会干活的,平时加加班,半年时间能做出第一版吧?”我:“哈哈哈哈,我妈喊我回家吃饭,我先走一步……”类似的还有很多,给咱程序员单调的生活带来些许的欢乐。不过我不是纯吐槽来着,也不是来回答问题的;我是来给程序员们提供解决方案的。后来再有朋友有类似的想法,我会特真诚的建议他:其实真不用找我们这些没水平的,你上那些威客类的网站,把你的项目发布出来,肯定会有人接单的。即使你不说项目具体内容,也可以发布需求的。他们一看,威客上的都是几百几千的项目,功能要求多的很,接单的人也非常多,是非常感谢我告诉他们这个网站的。我省事,他开心,双方都满意。感谢威客!
答主也是计算机专业学生,因为平常涉猎面还不错,所以什么都懂一点,现在最引以为傲的也就是做幻灯片了,当然别的比如编程序做网站剪视频修图片什么的都可以做一些……所以还算是有一点知名度的,我所就读的学校是一家三本的独立院校,学校在成都附近,但是无奈地理位置不好,所以学校周围知名的商家就那么几家,学校里面有一家叫CC的外卖店,做的算是学校里面的外卖中的翘楚了吧,刚好有一个同学在那里兼职。有一天他们老板要做一个网站,就找到我那个同学,因为也是计算机专业的嘛,但是他不会,其实学计算机很多人也就只会游戏罢了,然后就找到了我……我就奔着二皮脸的性格去和老板聊一下是打算做一个怎么样的网站了,不难的话赚一点生活费还是挺好的吖……老板一见面很热情地和我聊,前面扯了一大堆,什么做到川内外卖翘楚,做出来川内联盟这样的宏观设想,然后就开始说这个网站了。老板是这么说的“我不是需要你做多大的一个网站,就不要太难,只需要一个餐品介绍的网站就可以了……”,我一想这个很简单啊,很好做嘛!然后老板继续说“然后就像是那种团购网的样子,大家可以一起买的……”我一想,也不算是特别难的样子,貌似有开源代码我去找一下吧……老板继续说“然后就像是肯德基那样的还能有在线订饭的功能……”我一想,这个……老板继续说“然后最好做成淘宝网那样的,有在线下单、在线支付的功能……”我一想,……老板继续说“当然我们也不是做很难的网银啦,不是做银行网站的,你放心,银行的网站我们这个做好了以后再做哈……”我倒是想做银行的网站呢……老板最后说的一句话彻底压垮了我,“我大概就想的是做一个这样的网站,当然我还是懂一些网站的,现在我有一个域名,人呢只找到了你一个,你看看还有没有什么需要的?”我一愣,……老板继续说“你有什么要求尽管提,包括是金钱的这个还是工资什么的,几百块甚至一两千都可以”……结果就是我免费的吃了一顿饭就撤了,再也没有和老板联系过……我估计在老板那里可能把我理解成了“只会吹牛皮的人”……很久很久之后,有一个同学找我做挑战杯的项目,当初说好了是去做幻灯片的,莫名其妙的就变成了写一个网站出来,类似是家装团购一体化的项目,然后这个项目的一个学姐就开始让我设计这一个网站,我还很天真的想着找几个模板改一下给你就好了,多方便啊~然后学姐就组织大家开会了,别的任务都分配完了就开始找我做网站,说了一大堆让我自己设计就好他们都不懂的话,我自己设计完了忽然又变成了你能不能照我心目中的想法来做一个……其实实现起来也不算难,HTML5+JS之类的,但是又忽然变成了给我一个网站让我照着做,说实话照着一个网站做还不算是灰常难,虽然对我来说有一点吃力但还是可以拿下的……以上的学姐是学姐1,就是大负责人学姐让我照着做的网站——以下的学姐是学姐2,监督我的那个人这个网站是很好,但是我一直没有办法把它和我们要做的——家装配送+监督装修+在线提供设计服务结合起来,这不和谐啊,怎么照着做,我就说了一下我的意见,既然你要的是高端大气上档次,咱们就整一个嘛,这样抄是什么啊,不协调的啊,我就贱兮兮的找了一个碉堡了的模板,觉得都挺符合的,而且前面也说了是我决定嘛,结果学姐2说“我不太了解做网站,就是我们想要的效果类似就可以”我就认认真真的分析了一下两个风格包括建站啊任务量之类的可能性,学姐2又说“不好意思,刚回去拿东西没看见你发的内容,你是认为做我给的模板在时间范围内做不出来,还是认为这个模板不好,你的那个更合适。”我就又解释了一下怎么怎么的,而且喵的第二天就要交你让我给你做出来这时间真的紧张啊……在经过一番商讨后,我们的结果是====用photoshop画出来……这个答案超过了我的想象,用ps画出来,你怎么不早说啊,要早说你就是让我做apple都可以吖。但是我真的想不通为什么人和人之间的审美差异这么大,你为什么要在高端大气的网站下面加一大堆关于我们之类的,还要有各种不协调的东西,后来我就明白了,原来我做的不是网站,是类似海报的东西……我就去微博吐了个槽……然后继续去做网站,哦,是海报了……终于用了三个小时画出来了,我交给学姐2就出去洗澡了,洗完澡回来就被学姐1的夺命连环call找到了,然后就把我大骂了一顿,总之中心思想就是“这么多问题出现是你设计网站应该照顾到的版面问题,你怎么这么不认真!”+"如果你和学姐2有意见你就应该做两份出来!"(你怎么不让我做三份啊!!!)+"这个不是我要你做,或者她们要你做成什么就什么"+“你要是觉得你有意见,那就应该讨论,而不是我们给你一个最终的方案,你懂不懂合作啊!”+“你最近是心情不好,还是没有心情做这个事!”+“还有1个半小时,抛开我们的意思,版块就是那么多个,你按照你的想法做”+“给你的样图作为参考,你给做成你想的吧,既然你觉得我们这边的方案不行,我们之间的传达也有误”(马马虎虎截了一个图,有一些是在群里面说的我懒得截……)(马马虎虎截了一个图,有一些是在群里面说的我懒得截……)我整个人就斯巴达了啊!你让我自己负责设计网站又找了一个不懂的学姐2来监督我,我的所有想法全被否掉了然后你又来了我不会合作,还有1.5小时了你让我全部推倒重头再来!妈蛋的你把这一切做了的否了又给我来了一句“我微博说的很清楚,按照你的想法来做,你是在现在的基础上改还是重新做,这个是你的事儿”然后我就有凭有据的解释了我和学姐2之间的沟通,我提的意见都被否了,你让我做的学姐2又让我改掉了……然后学姐沉默了一会,我猜她可能是和学姐2沟通去了,然后她又说“她们说没有理解到我的意思,我操”+“你不管,你觉得好看就加,不行就算了,总之内容那么多,你依你的意思来做”……然后在我俩又进行了一些沟通之后,我还是没有想清楚人和人之间的差距怎么这么大,好歹是学环境设计有关专业的,怎么还是要做成海报的形式么?还是海报啊?还是海报啊!怎么说,最后的最后,做了一个海报网站四不像的东西,而且我都不敢在微博吐槽了,我怕又被学姐1看到……学姐1在满意了我的东西后又去吐槽别人做的商业分析什么的了……学姐应该不看知乎,我就在这里发出来最后的网站,哦,图片吧……(顺便请专业人士告诉我那个关于我们到底是用来做什么的 ,小时候用FP做网站的时候觉得那个是网站的标配,但是现在好像也没有多大用处啊 。 不过我做的下面的那个banner真的好扯淡啊我觉得……)(顺便请专业人士告诉我那个关于我们到底是用来做什么的 ,小时候用FP做网站的时候觉得那个是网站的标配,但是现在好像也没有多大用处啊 。 不过我做的下面的那个banner真的好扯淡啊我觉得……)再附一个原网站图片不说网站的内容哈,模仿的我已经很尽力了……不说网站的内容哈,模仿的我已经很尽力了……忘了说,前面那个找我做网站的外卖店老板最后在找了好多人以及自己的不遗余力之下,做了一家!淘宝店!而且开始什么都卖了,你开饭馆的能不能专心一点!(你仔细看看都有啥)……(你仔细看看都有啥)……所以说,亲身经历告诉我,他们并不是差一个写代码的,而是差一个会写代码并且什么都会什么都可以一个人搞定而且收费很低的全才了……很明显,我不是这样的人才……UPDATE 03/18学姐那个挑战杯过校赛了UPDATE 04/04挑战杯只能报名10个人,我们有11个人,四位学姐把我踢掉了……解释一下哈,刚开始的时候只有我们8个人(1位学姐),后来这一位又找来3位自己班里的同学(其中包含学姐2),我还是想不通啊我擦我们做一个网站把CTO踢掉把负责网站的人踢掉真的大丈夫?(PS 学姐我不是在自嘲啊,我是在黑你啊~)我是真的想不通啊……既然你们那么吊让我负责PPT只是看我没事干那就不要让我弄了好么,所谓的会做PPT的大神连开头都不会做,多个PPT合到一起了连母版不会设置没有配色同样的自定义动画做起来这么好做的话找我作甚?我Ps图片画完了你就改了一下分辨率插到ppt里面就是你们几个学姐把我的工作做了咯?我也不知道到底是因为什么原因是谁和谁沟通不顺畅网站不对然后又只给我一天半的时间让我做网站,可能都是我的错吧=。=也可能那些别的学院来找我做PPT找我做网站做视频修图片的都是眼睛瞎了才来找我这个什么都不会的人吧。不过就当认清楚了人好了~因为我在团委嘛,就直接找了一下团委负责的书记,老师说当初最早最早就说了是10个人组队啊,如果要踢肯定是T后面加入的啊,何况你们做的是网站,你一个负责网站的人都被T了?对,昨天是愚人节,这肯定是一个万次奥!UPDATE 04/13愚人节都过去将近两周了,还有同学问后续发展,那我就来说一下……这件事情在八号的时候出现了一丝转机,因为是清明节放假,八号作为开学后的第一天,理所当然的去办公室开校级干部会议什么的,会上老师说了一大堆巴拉巴拉什么的。刚开完会然后手机就震了一下,刚开始的八个人中作为关系很好的我本以为应该是原组长的L(就是刚开始找我们研究项目的一个同学但是被学姐1弄成类似自己秘书的人先给我打了一个电话问我要不要继续弄,一是上次投票的什么要再来一次,二是我们可以转公益团队问我有没有兴趣做,我就回她发了一条信息)给大家解释一下前面的转公益哈:给大家解释一下前面的转公益哈:就是没有进入一等奖的团队如果觉得自己的作品有希望的话可以把自己的作品转为公益作品继续参加挑战,这个消息是中午的时候团委的书记在群里面说的,我就是看了一下觉得和我关系不大,结果万万没想到啊!!附上群里面书记的话在万万没想到!!!!!!第一,学姐1所做的公司是一个提供第三方中立家装监管验收的服务类公司,你从哪里来的公益?第二,这个公司的盈利是以收取服务费或者提供家装服务,你何谈公益?第三,前期投入贵的一逼你哪里来的前期少量资源撬动外界更广大资源?最重点的在下面!!!!!这投票还要再来一次?我身上铁定的四票,还要再来?唯一需要再次投票的原因就是别人(非学姐同学哪一边的)都投了自己,不对,唯一需要我去开会的原因是需要我了……还有就是,老子都不玩了你来找老子改公益项目,姑且不谈你这有没有转公益的可能性,我一个你眼中的“没有任何付出纯被可怜才做PPT的人”还需要再来一次么?原本我还可以用“学姐1也不好当,不能得罪自己的同学,删掉我也是无奈之举”这种全部都是漏洞的话安慰自己,但是您这样也太…………那啥了吧……您这样找我我完全找不到答应的理由啊……四个字形容一下“唯利是图”,个人觉得是这样的。还有回复一下楼里面同学说既然书记都这么说了找学姐去理论的,真的没有必要,你说有什么必要呢?我这人真的不爱和别人当面冲突不给对方留脸面(你说我性格内向也罢我说我不想何人冲突到那一步也好说我怂也罢),而且你说和这种人一起工作有什么意思?浪费时间啊,哪怕我一天到晚玩游戏都觉得好一点……好了,这应该就是全部的内容了吧,思维顺序有一些乱,大家凑合看看吧……不过通过这一次挑战杯我还是明白了很多道理,看清了很多人,明白了很多事。有的人的嘴脸在利益面前也会漏出来,有的人不负责任的品质也会被你发现,拿不拿奖我觉得并不重要,我觉得收获最大的应该是在学校里面可以以最少的成本学到很多的关于人性之类的知识,这一点是无论如何也买不来的。(是不是有点归大了……就这样吧…………)顺便感谢各位看官追着看了这么久,我UPDATE也不及时…………FINAL UPDATE 08/26 感谢已经过去小半年了还是有好多朋友关注后续在评论里回复,不过也请大家原谅我没有每一条都回复,照片里面的名字可能没有打马赛克,仅仅用画图自带的笔刷画了一下而已,绝非是故意留着不删掉的,还有就是这件事过去了这么久,有时候觉得自己也许真的有许多地方做的不够那么好,做不到100%的忍耐和吃苦,因为我无法承受自己的付出不被别人重视,更何况是在我付出了汗水和精力之后,却被那些看似冠冕堂皇的话语无视。也许我还是学计算机的一个菜鸟,我也不能确定以后我会从事什么职业,未来对我来说还是很冥茫,如今开学就要大三了,看自己在学校的这两年,付出了许多,收获了许多,真心的朋友,势力的朋友,有真才实学的朋友和好高骛远的朋友,在学校的生活过的很快,一眨眼我就大三了,而学姐也要变身大四开始考研或者找工作的结局,我想,无论如何,也许每个人身上都有发光点的那句话是对的,也许学姐身上有的发光点我看不到,或者说我没有能力看到,不过我们每个人都是在一天又一天中长大的,终于有一天我也可以从现在看这个帖子觉得“我怎么过的这么悲惨”变成看这个帖子觉得“这就是我他妈青涩又真实的大学时光吧”。总之,时间会流逝,人也会成长,还是尽力让自己每一天变得好一点吧。加油!顺祝自己已经收获知乎1K赞!
我们就差钱了
今天吃点醋, 谁家借点螃蟹.
因为在很多外行人眼中,写程序似乎是一件很容易的事情。
这句话的问题在于低估了招聘的技术含量。实际上对于创业来说,招聘的过程也是团队组建的过程,团队建设是你创业的很重要一部分,招人需要大智慧,创业初期选的人是否靠谱,直接决定了创业是否成功,而该创业者似乎认为,有点子就行了,团队创建与团队建设只是「扯一嗓子就来人」的事。团队建设本来就是这类创业的重中之重,如果这个问题没有解决,实际上等同于你创业的过程才刚刚开始,怎么可能出现「只差程序员」的说法呢?实际上在这里把程序员换成其他岗位也并没有太本质区别。如果一个创业者用这种态度对待团队建设,又如何让人觉得他可以成功呢?
每当听到有人说"就差一个写代码了的"这句话时,我理解其实他的意思是:我刚想到一个好主意,就差动手做了,当然,我不想亲自做。4S店我已经开起来了,销路也找好了,你找两个汽车学院刚毕业的把汽车做出来吧,要不虚的靠谱点的,样子嘛和保时捷差不多就行,两个月够不够?已经和宇航局打过招呼了,也找到乘客了,你找两个航天专业刚毕业的把航天飞机做出来把,要不虚的靠谱的,样子嘛像美国那样两个翅膀的就行,第一期先不用考虑太多,火箭我们先买别人的,两个月够不够?上面的话听起来很可笑,那为什么“就差一个程序员了”听起来就这么正常?为什么别人总觉得“一个网站你带着几个毕业生两个月就能完成”?说到底,就是觉得这个事情“太简单”,只是我不愿意花精力学而已,所以雇你做。和我不愿意做家务请一个保姆一个道理。简单在哪里?1. 看不见摸不着,不像是什么大工程,所以不需要太多人。汽车飞机是实实在在的东西,看得见摸得着,即使外行人,看到这么多部件、管线,也能想象是很复杂的东西。网站、软件是什么?看起来就是一堆字母(不用“代码”这么内行的词汇),雇一个人敲键盘打字母,能用多少钱?你说不知道怎么打字母,那好我给你找个例子,就做成淘宝那种网站就行。给你两个月时间打字母,例子也给你找好了,照着做就行,2K一个月,你还说不够?还有比这更简单的事情?2. 网站,看起来就是一个界面,所以不需要分工。汽车分为发动、传动系统、悬挂系统、电器系统、车体、甚至车门、仪表。。。这些都是看得见摸得着的,很遗憾,网站能被人看到的就是一个界面,所以很多人不了解网站开发也分为前端、后端、UI/UE,后端还包含单机程序、网络通信、数据库、有时候还要来点分布式,但都看不到。就好像你吃到个大肉厚的青椒,只是觉得好吃,不会想到它需要经过太空育种、多代杂交好多年后才能端上餐桌。3. 相对于传统行业,IT业被宣传的不多,所以外行普遍了解少。电视上我们经常能看到汽车厂流水线的画面,偌大一个厂房,不同的工人操作不同的机器,给汽车装上不同的部件。很少有IT公司的身影,偶尔出现一次,也是一堆人同一个姿势对着电脑,这些人都在干什么?给人的感觉,就是大家都在做着同一件事情——敲键盘打字母。动动手指就能赚钱,真好,我也想做一个网站。。那你说,做数学、化学、通信的,外行了解也不多,怎么没有产生这么大的误会呢?这些行业离普通人生活太远。很少有人没事在家解两道方程式吧,或者卖一罐氢气烧了弄点蒸馏水喝了吧。看不见的东西大家才觉得深奥,所以不会出现让你“找两个xx专业刚毕业的就做出一个产品”。至于IT能,不就是对着电脑打字母吗,电脑我家也有,我也经常上网,所以做一个网站应该不太难吧。很可悲,IT在大众心目中,已经不是一门专业科学,而成了大众科学。再附一篇老外的文章,。一个产品的价值来源于拥有一个想法和执行这个想法的组合。你单具备了前者或只有执行后者的能力都不太有价值。你必须把它们组合到一起。很多“手握绝世好想法的人”都倾向于认为大多数或全部的价值都来源于创造出了这个想法。程序员只是一个工具,就像个鸡毛掸子,拿起来就可以掸灰。编程是个小事情,不是吗?最后,我是想说,在同有同一个想法的人,可能有很多。而很多人都是有"就差一个程序员"的想法,有些人却已经和程序员合伙把事情做了。一时间,----------------------------------3.15的分割线---------------------------------------------------------------想起若干年前的一个夜晚,在公司刚刚结束了一个项目,可以暂时喘口气的时候,无聊中拾起快遗忘的id,登录学校的bbs parttime版,看到某位学长在找人为他的公司做一个网站,一时兴起就接下来了。第一次见面是在人民广场地铁站,他花了10分钟给我口述了大概的要求,当时已经在一家创业型公司工作了一段时间(也就是说,什么都做过),感觉在我能力范围内,我就表示可以接下了,于是约了过两天到他们公司详聊。以下是第一次沟通提到的"大概"的需求:1。公司的业务是房地产投资,需要一个内部网站展示每个区每个小区的房价变动。2。数据源是excel表格(好吧,略低端),由编辑人员定期更新excel中的数据,网站需要一些下拉筐和地图,按区显示小区的房价,并在地图上显示小区的位置。3。有一些国家房地产政策的pdf文档,编辑放在一个目录中,在网站上显示一个pdf文档的列表,点击连接后打开pdf文档。目测一下,最大难点其实在google map的使用,正好没用过当锻炼了,当时还有点期待。(题外话,当时已经有海外资金来国内投资房地产,身为IT程序员,有时候也要多关心一下其他行业,不一定非要赚到钱,得到一些信息开开眼界也是好的)第二次见面前,对方打电话问了我一下之前唯一没有谈到的话题——价格。我当时给出的报价是按照:每天工作2小时的报酬 * 工作天数给出的,其实我也没有什么概念,基本参考了我当时的工资,再打一个折扣,毕竟有学习的成分在,现在想想真是业内良心。其实这已经是很低的标准了,这两个小时是全身心的投入,上班你还有打酱油刷之乎的时间呢。对方听了报价后,就是哈哈哈的表情,于是就约了第二次见面。第二次见面,在他的公司中,详聊。专业一点,称之为甲方。甲方:上次说的需求没问题吧。我:没问题!就是几个静态页面,很简单。(谈判中不要出现"简单"二字)甲方:对了,我们老板感觉用下拉框选区太不方便了,能不能在地图上把每个区用不同颜色标出来,然后鼠标点上去自动显示这个区的所有小区?我:没问题,这我看过,google map api能做到。甲方:恩。另外能不能加一个按房价范围筛选的功能,都显示出来小区太多了。我:可以,加两个输入框好了。甲方:恩,可能还有些别的筛选条件,我们再想想一起告诉你。这个问题先到这。另外我们编辑觉得每次更新excel太麻烦了,最好能在网站上直接改。我:呃,也行。甲方:这个也行,那么能不能保留一下每个小区的历史房价,我们想看一下房价变化趋势,这个也没问题吧?我:呃,也行,那就要用到数据库了。还要再有个图表显示价格变动。甲方:另外我们老板觉得也不能谁都能改数据,万一那天有人搞破坏,公司其他人都没法用了,加一个权限控制吧。我:(心理略紧张)可以,不过我要重新估计一下时间。甲方:行。另外我们觉得既然做一个网站,功能就全一些,再增加两个主要功能。(说着他拿出了10几页的文档)这是我这两天做的,你拿回去仔细看一下,我先给你大概说一下。。。(此处省略10000字)。。。(1个半小时以后,我想也应该提出最关键的问题了)我:我们付款是什么方式?(当时对这个完全没概念)甲方:你先做完一个主要功能,我们付出10%,全做完我们再付20%,再过3个月以后付35%,半年以后再付35%。我:。。。另外,这个系统是需要人维护的,你们有人维护吗?甲方:我们公司现在没人懂啊,要不你先帮我们维护半年,半年以后你继续维护我们再付给你一定的钱我:。。。 最后,他说,今天也不早了,你回去再估计一下时间,然后再提一个报价。现在回想起来,当时虽然他没有说"像xx网站一样就行",而是相对专业地列出了每一项需求,其实他们想做的就是一个类似搜房那样的网站。当然,按他的话说,"我们先不用扩展到全国,只做上海的就行"。后来,当我重新估计了一下任务量,给出了第一次10倍左右的报价时,通过电话,我也能感觉到他"呵呵"的表情。现在回想起来,当时对任务量的估计恐怕还是保守了。第二次见面其实我已经能感觉到,他们最高的出价应该在我第一次给出的报价的3倍左右,因为在他们看来,又增加了两个"主要"功能,因此价格增加2倍是合理的。后来听说这个事情给一个还在学校的研究生做了,我只能祝他好运了。这件事情之后,我领悟到了外面的钱不是好赚的,不能在这个上面浪费时间,除非你想继续增加人生阅历、增长谈判技巧、或者一辈子就打算重复地做这种小的外包项目。在职业发展上,一些有意思的东西可以拿来玩玩,但要把握住主要方向,把精力投入到更有价值的工作上。例如你是一个开赛车的,即使想了解汽车的各种构造,也没必要精通汽车修理。这似乎应该另开一个讨论了。
第一个程序员当然是CTO,但是一点都没看出来他给的物质和精神上的待遇如何跟team里的其他人媲美。当然我建议那些给了外包一点钱就能做出来的系统的那些创业idea千万不要参与,要创业就去那些没了你(或者只要你中途退出)他们就要死的team。
引文选自《乔布斯:遗失的访谈》You know… one of the things that really hurt Apple was after I left, John Sculley got a very serious “disease”,and that “disease”, I have seen other people get it too,it’s the “disease” of thinking that a really great idea is 90% of the work,and if you just tell all these other people,”here is this great idea!”,then of course they can go off and make it happen.And the problem with that is that there is just tremendous amount of craftsmanship in between a great idea and a great product.And as you evolve the great idea, it changes and grows, it never comes out like it starts. Because you learn a lot more, you get into the subtleties, you also find… There’s tremendous trade-offs that you have to make…简而言之,想到离做到,还差了 90% 的距离。程序员必然是这 90% 里面不可或缺的重要一员,没有这样核心能力,离想做到的事情必然差的不会仅仅就是「一个写代码的了」。关于这个访谈背后的故事,可以见我博客:
胡萝卜已经想像出来一大堆,现在万事俱备,就差驴了。胡萝卜已经想像出来一大堆,现在万事俱备,就差驴了。
突然想起了一次饭局,一大桌子的盆友,有写代码的,有做HR的,有搞行政的,大家一起牛B吹的飞起,然后感叹一声:就差个投资人了。
首先,我想说一句,我们可以继续调侃这帮人,然后把这事儿欢快的继续下去,然后笑完之后,也就忘了。也可以想想,为什么会这样?0,脱离具体情境,只靠片面信息,得出的结论,做出的判断,做出的行为,有一定概率(很大概率)不靠谱。1,往往只差程序的项目,负责人有可能认识不到自己差的不只是程序员。而程序员却很清楚,要做出一个好的产品,仅仅靠程序员大部分情况下顶不住,除非是超级全栈。2,不乏有具备创业想法的商业型创业者(下简称金主),真的想折腾一个项目,而商业、渠道、关系、资本他都准备好了,不过金主不懂玩法,但按Ta的思维,咱不懂咱就去找/招一个呗,介于圈子里可能和程序没交集,所以顺理成章发布了项目招聘。由于金主不懂玩法,所以招聘的方式程序员不喜欢。3,程序员同学们,不管是不是学生,对商业江湖的阅历,应该都不算太深,我是不是可以假定,有一定概率程序员同学们是无法鉴别金主在招聘上,描述商业部分的招聘信息的?就像不懂程序的金主也一定概率无法区分程序员好不好。4,金主懂不懂商业,程序员学生们可能不好确认,那我们刨去商业部分。另外一部分信息也是有可能不靠谱的,对不对?因为还要确认金主懂不懂产品,又懂不懂怎么做创业产品。金主如果不懂,团队中是不是有懂的?ok,如果金主懂/有人懂产品,那程序员同学能不能有足够的产品知识去判定?5,那我们是不是可以再想想,介于年轻学生可能比较冲动,是否有一定概率,一批学生程序员看到这样的招聘之后,发现自己理解的部分信息,是以傻逼的形式发布的,立马就判定了这是个傻逼项目,顺便立马就喷了?反正喷一句的行为成本和点赞也差不了多少。............1-5,这5点,归根到底的原因是上述第1点。(没写过程序的可能第1点都会找错...right?哦对了,顺便说一句,下半部分答案画风会有变化)1,金主可能有商业嗅觉,而创业也不可能全部想清楚就上路,那会错过时机,上路先~走起!还是激情满满打鸡血似的走起了~看来不靠谱指数有,★★2,金主有自知之明,就得招程序,但你不懂你怎么招啊,招个大西瓜啊!看来不靠谱指数有,★★★3,双边信息不对称,金主不懂程序就算了,程序还不懂商业,双方都无法确认对方好坏。还号称商业背景啊你,你买东西不知道怎么挑货就算了,你卖大饼还不知道怎么吸引核心消费者!你是商业背景的啊喂!看来不靠谱指数有,★★★★4,金主懂不懂商业程序哥们都不稀罕管了,还可能不能确认产品好不好,不会做创业产品!生产出来的东西质量都没保证,日后还得拿出手给用户把玩,把玩啊喂!鸡蛋里面挑骨头的愤怒小鸟们诶!要是程序加班加点开发出来个产品,金主大喝一声:「你们瞎做!我要做成**平台!老子给资源砸钱,你们做个这个!」「金主,我们可以快速迭代的,这叫MVP!」「就你这样还MVP!你全明星都进不了!还有,什么是迭代!别整技术词汇忽悠我.......」..........看来不靠谱指数有,★★★★★5,以上的论述还是建立在,金主真的是金主的前提下,如果不是...看来不靠谱指数有,
(爆表了当然什么都看不到)......画风又要变了...........说实话,这样的金主我是看过的,我身边真的有,当然,金主情商很高,不会发飙。但是还是多花了很多钱买域名(超过TMALL的价位买比TMALL烂很多的域名)...也花很少钱请学生做网站,做出来就是...所以有时候这种不了解真的很可怕,金主未必懂得把程序员当成艺术家而非技术工人,程序员也未必真的有艺术家的创造力,也可能只是不停的造轮子...但我脚的中间还是有大家都互相往前走的空间,以减少误会,就是去了解怎么更好的做产品。就以上面的例子来说,聪明的金主应该学会怎么做产品原型,然后带着原型去找技术合伙人,再让技术合伙人去招大学的程序小盆友~被黑的概率,是不是会小一些?
我不同意那个“房子已经看好了,就看今晚的双色球了”的比喻。因为这种事的发生一般都是因为那些人对这个行业的细分不了解造成的,他们把搞IT的都称为写代码的。就像你要装修房子,你会说你只差装修了,但是你心里很清楚实际上还需要细分水电煤气地板木工等等,我相信一个有常识的人不会觉得装修自己的房子是一件很轻松的事,装修是一件费时费心的事这个概念已经被广泛接受和了解了。而程序猿这个行业,真正了解的人并不多,尤其很多大学里学计算机的也不一定能很清楚的说出一个工程需要哪些环节哪些分工,所以我们才提倡在大学里去实习,实习并不仅仅是学习技术,而是了解真正的这个行业的分工,流程,从而找到自己的定位。下次你再遇到这种问题,你就开始爆各种专业词汇,“你是需要哪种程序猿?C++?C#?PHP?Python?Java?JSP?测试工程师找好了吗?架构师找好了吗?”“什么?!你要什么都会的?sorry啊,这种人我不认识啊,另谋高就吧。”
问:我有刚刚捡到一个螺钉,请问还差什么才能造出一艘航母?答:还差一艘缺了一个螺钉的航母
大家说的这么欢乐,我突然想起罗永浩了。。。
源于他们认为搞技术的都好糊弄,低情商;实在不好意思,就你那点智商,还轮不到和你谈情商的地步。}

我要回帖

更多关于 可不可以删除qq空间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信