10个程序员必须学会接受的残酷真相

大多数时候,写代码都是挺有意义的一件事,不光能增加经验值,解决难题的时候还特别爽。耐心、毅力、执着,再加上正确的工具——只要有它们的亲密协作,优雅、漂亮的代码就是手到擒来的事儿。

但是,紧接着拙劣的资源部署、新增的特性请求、糟糕的文档更新汹涌而来,打破了我们的美梦。

但是这并不是说我们的努力就没有价值。只是我们需要面对现实罢了。下面就是编程开发人员必须接受的10个残酷真相。

残酷的开发真相No. 1: 编程就是if-then-else语句的运用

编程语言设计者讨论、抽象化思考等等作为,其实都只是在旧的if-then-else语句上重新包装一下而已。

这也几乎就是硬件所有的功能了。是的,通过操作码我们可以顺利地移动数据输入和输出作运算和存储,其余的则在比较的基础上进行分支或者不分支。

而致力于人工智能的同志们更是为这些if-then-else语句包裹上了一件件神秘的外衣,通过这些语句,机器会按照我们的吩咐自动从一些数字矩阵中执行计算,查找搜索直到发现目标。

残酷的开发真相No. 2: 互联网其实就是存储在表中的数据

在过去20年间,“互联网”这个词造就了神话般的财富、搭建了五湖四海的友谊、生产出更为便宜的产品、促成了更为快捷的沟通等等等等,除了治疗癌症,它几乎就是无所不能。但是,说到底,互联网的本质就是一堆存储在表中的数据罢了。

Match.com?就是列满头发颜色、宗教信仰和兴趣爱好的表格而已。ebay?就是一张记录一笔笔合同的交易表。博客?就是一张每一行每一列写下你天马行空胡言乱语的数据表。无论我们怎么给它起名字,它的本质还是数据表格。

这一点也可以从编程语言中看出来。例如Ruby on Rails——当前操作web最为流行的编程语言之一,其实就是在数据库中搞一个小天地:指定一个全局变量,Rails就会自动创建一个列,因为它的作用就是在数据库中建立表格。

残酷的开发真相No. 3: 用户有自己的想法

偶尔用户会变得理智和通情达理,但是大多数情况下,他们都是古怪且难以琢磨的——甚至是非常苛刻的。程序员根本想不到这些用户在看到产品时会出来哪些天马行空的想法。因为用户不是程序员,不会照着程序员的想法走。

残酷的开发真相No. 4: 你写的大部分代码将永远不会被使用

这一点就不再多说了,说多了都是泪啊!

残酷的开发真相No. 5: 需求变更是必然的

有一位经理告诉我他的秘诀就微笑着和他的团队说他们很棒,他很欣赏他们做的一切,然后在临出门之间,他会说,“对了,还有一件事……”。就是这件事往往会颠覆整个项目,让每个人都重新回到设计app的起点。

需求变更是项目结构的直接后果。管理人员会在事情开展之前做好所有的规划工作,制定目标。

但是一旦事情交给开发人员,那管理人员就轻松了,然后开始无所事事了,成天胡思乱想吹毛求疵。这个按钮放的地方对吗?登录页面是不是应该改一改?反正一点点细微的想法就让开发人员去做修改。

这在项目过程中频繁发生,而且由来已久。要知道,就算是Ada Lovelace的分析机——被誉为第一段计算机程序,也有着需求变更的问题,源于将近一年的笔记讨论中。

残酷的开发真相No. 6: 没有人理解你,特别是你的老板

我们可以将程序员分成两种:第一种的老板是不会编程的,也不知道为了使代码能成功编译需要付出多大的努力;还有一种的老板以前也是程序员但是现在已经忘记了代码编译过程的艰辛。

第一种老板显然永远也不会理解你以及你的工作。不过这也是可以理解的,毕竟所学不同,术业有专攻。

而第二种老板,我们也可以理解。举个例子吧,即使是最好的程序员,如果一两个月不用API也会忘记这方面的内容。再则他们以前学的主流编程语言很有可能和现在的大不相同。

还有一点,如果你的老板自己知道如何解决问题的话,他往往会选择自己熬夜解决它而不是费时费力地雇用其他程序员来解决。所以我们得感谢这些“不懂写代码”的老板。

残酷的开发真相No. 7: 关于隐私,痛苦的纠结

我们都希望我们的服务可以保护我们的用户和他们的信息。但是同时,我们也希望网页简单且易于操作。点击深度——达到目标所需要的点击次数——尽可能的少。

然而保护用户的隐私就意味着,在用户点入页面之前得询问用户一些问题,以确定用户已经知道这样做可能带来的后果。

隐私也意味着责任。如果用户不希望服务器知道发生了什么事情,那么用户就得自我承担责任,因为这样做会导致服务器不能够读取用户的资料。责任就意味着麻烦,从这个层面上说,隐私也是个麻烦。

隐私也意味着矛盾的逻辑思维。一边希望能一个人呆着,另一边希望知道大量的信息;一边渴望安安静静毫无纷争,另一边则希望什么邀请函、购物优惠券、工作面试机会等等有多少来多少。

唉,俗话说,鱼与熊掌不可兼得啊。总之隐私还是不隐私,it’s a question。

残酷的开发真相No. 8: 信任是有代价的

项目Web 2.0听上去很美!感觉只要把大家的代码连接起来,就会有奇迹发生。你可以调用他人的代码,别人也可以调用你的,相得益彰。

如果真能像你想的那么简单就好了。事实是,首先在别人允许你使用他们的代码之前得先填写一些表格——大多数情况下会由专业人士起草——签署“不平等条约”。你的回报是什么呢?将你辛辛苦苦写出来的这么漂亮的代码交给别人,却不知道别人给出的是什么货色?但是,没办法,你只能相信他们。

但是他们也不知道你是不是真有真材实料?搞不好你不过是个滥竽充数的家伙呢?但是他们也没有办法,也只能相信你。

而用户则不得不信任你们双方。哈,你说隐私?当然有了,每个人都承诺会使用最高级别的加密软件,但同时却堂而皇之地和所有人分享你的信息。不过你也不用担心。

结果往往是你得在这个项目上花上比你预计更多的精力和做更多的工作。这就是信任的代价。

残酷的开发真相No.9: 软件有一定的生命周期

当你开工做新项目的时候,往往会利用最新出来的版本库等一切资源。这时库A的1.0.2版本出来了,但是它不能与库B的最新版本兼容,因为库A的程序员还停留在以前的发布上。然后库C发布了一些你的老板真正需要你挖掘的新功能。当然这些功能仅适用于1.0.2版本。

如果说房子和船的腐烂是以一种潜移默化“润物细无声”的方式,那么代码就是以一种复杂又迅猛的形式轰然倒塌。如果你想要库C,那么就必须放弃库B,同样的,如果你选择了库B,你就不得不向你的老板解释为什么不就近直接利用库C的原因。

当然我举的这个案例仅仅包含三个库,但事实上,在现实项目里起码不下十个,而且问题更多。更糟糕的是,很多时候这种消亡的趋势我们还一下子看不出来。有时候甚至看上去是那么微不足道的一个小问题,感觉写点代码就能立马解决。但是往往就是这么一个细小的不兼容性会犹如白蚁一般吃光所有的一切直到大厦坍塌。

生命周期的存在让我们能更深刻的理解计算机。不要以为代码没有摩擦、没有氧化、没有微生物的繁殖,就是永恒的,就能永垂不朽,事实并非如此。

残酷的开发真相No. 10 : 在围墙中生存发展

即使我们一再强调开放的重要性,但是有越来越多的证据表明,市场依然很小。而更糟糕的是,很多人往往不愿意在这方面投入成本。一些免费软件倡议者坚称社会应该提供免费软件。总之很少有人愿意在软件上面花钱。

这可能就是为什么Linux和BSD最大的采用者会将其专有代码隐藏起来的原因。类似于TiVo的设备可能内部也会使用Linux,但是使它们显得与众不同的接口却并不开放。Mac同样如此。

随便说一句,现在的Linux系统明显比不过Windows系统。人们会想同样的钱这边只够买Linux系统,那边我都可以买到Windows电脑了,里面系统怎样有什么关系呢?用户如何选择可想而知。

我只是希望以后会有越来越多的人愿意在软件上为许可证付钱,这样我们这一行业才能在这种四面围墙的条件下生存发展。

时间: 2024-10-09 23:28:37

10个程序员必须学会接受的残酷真相的相关文章

10年程序员谈国内程序员的为人处世

程序员跟其他职位一样,我们除了工作,我们是否也需要多了解一些人生道理呢?程序员都是比较理性的,因为写程序就需要理性,来看看一个领悟人生的程序员的一些观点,10年程序员谈国内程序员的为人处世,希望给大家可以借鉴一下. 在家人眼里,从小开始我一直是他们的骄傲,我出生在一个偏远的东北内蒙古小山村,小时候家里也很穷,夏天为了省钱只买拖鞋穿,一个穿破了买另外一个穿,因为拖鞋很便宜只有几元钱,上大学前从来没穿过皮鞋,皮鞋太贵了当时要200多元,上高中的时候经常向妈妈一元一元的要零花钱(1996年考上大学),

《经验分享收集》 一:10+年程序员总结的20+条经验教训

原文地址:http://www.codeceo.com/article/10-years-20-tips-programmer.html 一:10+年程序员总结的20+条经验教训 开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止.我从来没有妄想过能够一步登天.相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中. 我很喜欢John Gall的这句话:“复杂系统总

程序员应该学会放松,更应该努力前行

之前实习的时候,偶尔和同事聊到为什么我们这一行会这么累?觉得同事分析的挺有道理,因为我们不像保安.清洁工阿姨(当然这里没有别的意思,只是简单的叙述事例)的工作,他们每天重复着几乎完全相同的工作,所以比较轻松:而我们每天面临的是不同的需求,需要解决不同的问题,换句话说就是我们每天将面对新的挑战,所以我们需要集中精力解决问题,包括学习新知识:而且相对而言,写程序是来不得半点马虎的,有半点错误都会出现问题:所以一旦要解决一个问题,我们必须集中精力,所以导致我们会非常累. 但是从另外一个方面想,我们的工

分针网——每日分享:10个程序员常用的代码简写技术

更多文章:www.f-z.cn 今天小编我给大家整理了一份10个程序员常用的代码简写技术,看懂一种是入门,全懂就是大神,你能知道几个呢? 1.三元操作符 当想写if...else语句时,使用三元操作符来代替. const x = 20;let answer;if (x > 10) { 简写: const answer = x > 10 ? 'is greater' : 'is lesser'; 也可以嵌套if语句: const big = x > 10 ? " greater

10+年程序员总结的20+条经验教训

开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止.我从来没有妄想过能够一步登天.相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中. 我很喜欢John Gall的这句话:"复杂系统总是源于简单系统的演化." 2.一次只改变一件事 当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键.换言之,就是使用短迭代

转:10+年程序员总结的20+条经验教训

以下是我作为一名程序员经过10几年时间总结出的一些有关于软件开发的经验规则: 开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止.我从来没有妄想过能够一步登天.相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中. 我很喜欢John Gall的这句话:"复杂系统总是源于简单系统的演化." 2.一次只改变一件事 当我们在开发时,碰到测试失败和功能无效的情况

10年程序员总结的20几条经验教训

开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止.我从来没有妄想过能够一步登天.相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中. 我很喜欢John Gall的这句话:"复杂系统总是源于简单系统的演化." 2.一次只改变一件事 当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键.换言之,就是使用短迭代

10年程序员谈.Net程序员的职业规划(图/文)

原文地址:http://bbs.csdn.net/topics/390736769 从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去各个公司应聘,到现在开始面试那些战战兢兢的小程序员,回想起这近十年来的经验,看着还是朝气蓬勃的菜菜们,想谈谈自己对与DotNet程序员的职业规划的看法. 先说开发语言         .Net是一个开发框架,包容性也比较强,可以做b/s结构的网站,可以做Windows phone的手机开发,可以做W

程序员要学会读源代码

在“沟通”这个复杂的领域里,写出能让人类领会并理解的连贯段落比敲出几行让解释器或编译器不致于“呕吐”的软件代码要难得多. 这就是为什么——就软件开发而言——所有的文档大概都是很差劲的.而且,由于为人写作比为机器写作要困难得多,文档恐怕在可预见的将来还会继续差劲下去.对此,你基本上是无能为力的. 除了做一件事…… “卢克,学着去读源代码.” 译者注:卢克(Luke Skywalker)是电影<星球大战>中的一个角色,他来自塔图因星球,在发现了莉雅公主输入到机器人R2-D2中的求救信息后,他与绝地