译文链接:http://www.codeceo.com/article/10-truth-programmer-must-know.html
大多数时候,写代码都是挺有意义的一件事,不光能增加经验值,解决难题的时候还特别爽。耐心、毅力、执着,再加上正确的工具——只要有它们的亲密协作,优雅、漂亮的代码就是手到擒来的事儿。
但是,紧接着拙劣的资源部署、新增的特性请求、糟糕的文档更新汹涌而来,打破了我们的美梦。
但是这并不是说我们的努力就没有价值。只是我们需要面对现实罢了。下面就是编程开发人员必须接受的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电脑了,里面系统怎样有什么关系呢?用户如何选择可想而知。
我只是希望以后会有越来越多的人愿意在软件上为许可证付钱,这样我们这一行业才能在这种四面围墙的条件下生存发展。
译文链接:http://www.codeceo.com/article/10-truth-programmer-must-know.html的更多相关文章
- 云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 (阿里云ECS服务器 )课堂
云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 1. 开通云服务器 2 1.包年包月 按量付费(适合测试数据的时候) 2 2.地域 服务器数 ...
- Log4j使用教程 (转载http://www.codeceo.com/article/log4j-usage.html)
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...
- SQL 经典回顾:JOIN 表连接操作不完全指南
2017-02-23 小峰 ITPUB 点击上方“蓝字”可以关注我们哦  |转载自:码农网 |原文链接:www.codeceo.com/article/sql-join-guide.html ...
- CSS 代码技巧与维护 ★ Mozilla Hacks – the Web developer blog
原文链接:https://hacks.mozilla.org/2016/05/css-coding-techniques/ 译文链接 :http://www.zcfy.cc/article/css-c ...
- Angularjs 过滤器使用
Filter:格式化数据 // HTML表达式: {{ filter_expression | filter : expression : comparator}} // JS表达式: $filt ...
- [转]能用HTML/CSS解决的问题就不要使用JS
原文链接:http://www.codeceo.com/article/html-css-not-js.html 为什么说能使用html/css解决的问题就不要使用JS呢?两个字,因为简单.简单就意味 ...
- 前端程序员必知的30个Chrome扩展-[转载]
谷歌Chrome浏览器是网络上可用的最好浏览器之一,并且自2011年11月超越了Firefox浏览器之后,已经成为了互联网上占主导地位的浏览器.今天,HTML5中国与大家分享一些实用的谷歌Chrome ...
- 使用NodeJS将文件或图像上传到服务器
原文链接:http://www.codeceo.com/article/nodejs-upload-file-to-server.html
- 论文阅读 Prefetch-aware fingerprint cache management for data deduplication systems
论文链接 https://link.springer.com/article/10.1007/s11704-017-7119-0 这篇论文试图解决的问题是在cache 环节之前,prefetch-ca ...
随机推荐
- Android开发手记(30) 触摸及手势操作
触摸操作在现在智能手机系统中起到举足轻重的作用,本文将对安卓中的触摸以及一些简单手势的操作进行简单的介绍. 1.触摸 首先是关于触摸的判断,有两种方法可以判断的触摸操作. (1)setOnTouchL ...
- MySQL 5.6 my.cnf 参数详细说明
# 以下选项会被MySQL客户端应用读取.# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.# 如果你想你自己的MySQL应用程序获取这些值.# 需要在MySQL客户端库初始化的时候指定 ...
- oracle批量导入数据
关键代码 OracleDataAdapter da=new OracleDataAdapter(); string sql_select = string.Format("select id ...
- UITableViewCell 添加长按手势
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self actio ...
- Unity 5.x---00使用重力
Unity 5.x---00使用重力 步骤一: 打开一个工程(导入Unity自带的资源),并创建并配置好必要的GameObject ,如下图: 步骤二: 1.创建一个Cube,使其位于平面上方. ...
- TaskbarCreated 消息
托盘中的图片就通过注册这个消息来实现,系统和进程通过进程间通信发送这个消息,进程接收他
- 使用程序往Neo4j导入CSV报错
今天在用程序向Neo4j导入csv文件时,报以下错误: java.net.ConnectException: Connection refused: connect java.rmi.ConnectE ...
- yii2源码学习笔记(六)
Behvaior类,Behavior类是所有事件类的基类: 目录yii2\base\Behavior.php <?php /** * @link http://www.yiiframework. ...
- Django socketio 安装
如果你还没有安装过 gevent,首先需要安装 libevent, 编译安装 libevent 需要安装 Pyhton 开发库. 在Debain上可以运行如下指令: $ sudo apt-get in ...
- DbUtils组件
DbUtils组件 DbUtils组件, 1. 简化jdbc操作 2. 下载组件,引入jar文件 : commons-dbutils-1.6.jar |-- DbUtils 关闭资源.加载驱动 |-- ...