只有程序员才有的十大烦恼

从工体到圣西罗 2014-05-20 10:06:13
加精
10. 注释 — 只解释了“how”却没有解释“why”

入门级的编程课程通常会教育学生们写代码前先写注释、而且要尽量多注释。 这种教育的出发点是“多注释肯定比少注释好、少注释肯定比没注释好”。可不幸的是,很多的程序员把这当成了一种任务,对每一行代码都注释一下。
r = n / 2; // 让 r 等于 n 除以 2  

// 当 r - (n/r) 大于 t 时进行循环
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) ); // 设置 r 等于 r + (n/r) 的一半
}


经过这样的注释,你否明白了这段代码是干什么的?的确,我也没明白。 问题就在于,虽然有大量的注释,可它们只是描述了代码是干什么了,却没有说明代码为什么要这样写。

现在,请看一下我们采用另外一种方式对同一段代码进行的注释:
// 使用牛顿-Raphson算法求n的平方根近似值  

r = n / 2;
while ( abs( r - (n/r) ) > t ) {
r = 0.5 * ( r + (n/r) );
}

这就好多了!也许我们还是不能完全明白这段代码的作用,但至少是有了一点方向了。

注释是用来帮助读者理解代码的,不是用来解释语法的。 我可以大胆的认为,读者对for循环的工作原理是了解的;所以没必要写这样的注释:“// 对客户列表进行for循环操作”。读者不明白的是你的代码是做什么用的,你为什么要采用这种方式实现它。

9. 干扰

很少有程序员能在眨眼之间从一种活动中转换到编程的状态中。通常情况下,我们更类似于需要慢慢启动的火车,而不是能突然加速的 法拉利; 我们需要一定的时间才能进入工作状态,一旦我们进入稳定有效的工作状态,我们的工作效果和产出会很丰硕。 不幸的是,当思路不断的被客户、经理、以及你的同事打断时,你的大脑很难进入编程的状态。

当我们干一件事情时,有太多的琐事需要我们放在心里,我们需要先放下这个事情,处理那个人事情,回头又干这个事情,还不能有差错。这些干扰会中 断我们的思路,而重新整理清楚思路又要你花费大量的时间,这是让人懊恼的、没有比这更让人泄气、让人有挫折感的过程了。

8. 范围蠕变(Scope creep)

范围蠕变(Scope creep) (也称作焦点蠕变(focus creep), 需求蠕变(requirement creep), 功能蠕变(feature creep),以及其它一些乱七八糟的演变词语),指在项目管理里项目的需求变更失控。 当一个项目的范围没有明确的定义清楚、没有文档化、不受控时就会出现这种现象。 这通常被认为是一种有负面影响的事情,应该尽力避免。

范围蠕变通常会把一个简单的需求变成一个复杂惊人的需要大量时间的巨无霸。 那些负责需求调研的家伙们只需要敲几下无辜的键盘就能把事情变成这样:

版本 1: 显示这个地区的地图

版本 2: 显示这个地区的地图,要三维立体的

版本 3: 显示这个地区的地图,要三维立体的,而且能够使用它作为飞行导航图

一个本来30分钟能完成的任务变成了一项要几百人/天才能完成的超级复杂的系统。更糟糕的是,大多数情况下,需求变更是发生在开发阶段 的,这样一来你需要重写代码,重新回归,有时要把前几天才开发的代码删除。

7. 管理者 — 完全不懂编程

管理工作不是一种简单的工作。人是一种让人很讨厌的动物; 我们善变、喜怒无常,我们都自以为天下第一。想让这样的一群人都感到满意和团结,你需要付出像山一样大的努力。 然而,这并不意味着管理者就可以在对下属的工作毫不理解的情况下进行管理。 当管理者对我们的工作没有一点知识概念时,后果只会是需求频繁变动,不现实的工期,普遍的挫折感(管理者和开发人员)。程序员们对此的抱怨相当普遍,这也是产生争执不合的根源。

6. 写文档

在说这个条目之前我先承认,我们确实有很多的文档生成工具,但据我的经验,这些工具都是只适合生成API文档,以供其他程序员参考。如果你开发 的软件是平时人们每天都要用的,你必须要写一些外行人(例如你的实施,客服等)都能理解的文档手册。

我们可以很容易的看出,有些事情程序员们极不愿意去做。 你可以简单的回顾一下所有的开源项目。 人们百折不挠的对这些项目的一个索求是什么:文档。
我敢打保票的说,不管在哪里,至少会有一半的程序员当要求写文档时会说:“不能让其他人去写吗?“。

5. 程序 — 缺少文档


我可从来没说过我们程序员是说一套做一套的人。 程序员们经常会在他们的项目里用到第三方的类库和应用。 于是,我们需要文档。 很不幸呀,就像我在第6条里说的那样,程序员们痛恨写文档。这戏剧性的事情发生在我们自己身上。

当你需要使用一个第三方类库时发现,至少有一半的API无从知道是干什么好用的,没有任何事情比这个更打击人的了。 函数 poorlyNamedFunctionA() 和函数 poorlyButSimilarlyNamedFunctionB() 有什么区别? 在我使用 PropertyX 属性前是否需要测试一下它是不是 null 值?我估计只有通过自己的测试和报错才能弄清楚!

4. 硬件

任何一个曾经被叫去调试一个数据库服务器上奇怪的宕机现象,或是被叫去解决RAID驱动器不能正确的工作的问题的程序员,当发现是硬件问题时, 都会痛苦不已。 人们有一种普遍的误解,认为程序员就是搞电脑的,他们肯定知道如何修理电脑。 不可否认,有些程序员确实是个全才,但我估计,绝大部分程序员都不知道,或者根本不关心当程序被编译成机器码后如何工作的。我们只关心做出来的东西是否符 合需求文档,这样我们才能集中精力去解决这上层的任务。

3. 含糊不清

“网站宕机了”. “XX功能工作不正常”。 处理含糊不清的任务是种痛苦。 每次当非程序员被要求重现他们所遇到的问题时表现出的愤怒都让我吃惊不已。 他们似乎不太明白,仅仅一句”它宕机了,修复它!”是无法让我们开始工作的,我们需要更多的信息。

软件的运行是(大部分情况下)有迹可寻的。我们也乐见与此。 请迁就我们,帮我们指出是在哪个阶段,什么情况下出的问题,而不是简单的说一句”修复它“。

2. 其他程序员

程序员经常和其他程序员合不来。诧异吗,但这是真的。 这方面的事情我可以轻松的列出十大条,讲细点甚至可以单独写篇博客,所以这里我只列出几个常见的、让其他同事感到懊恼的程序员的特征:

脾气暴躁以至态度极不友好。

不能明白什么时候该去讨论系统的架构,什么时候是应该去动手去做。

无法进行有效的沟通,使用易于误解的专业术语。

自己的事情处理不好。

对要做的程序和项目缺乏兴趣。

那么,这最后的,但不是最糟糕的,序号为1的让程序员们烦恼的…

1. 自己写的代码 — 6个月以后的

Don’t sneeze, I think I see a bug.

回顾一下自己以前写的代码,是否也会愁眉苦脸?当时怎么会这么愚蠢!怎么能编写成这样的东西!烧掉!丢到火里!

现实是,软件技术界是一个不断变化的世界。 今天被看成是最好的方式,明天也许就会过时。 我们不可能写出完美的代码,因为判断我们的程序好坏的标准日新月异。 这令人很不爽,你的作品,今天看来是那么的完美,但也许不久之后就会变成被人嘲笑的对象了。 真是让人沮丧,因为不论我们如何努力的学习最新最棒的开发工具,设计,框架,以及开发方法,我们总是比最新的技术发展趋势慢了一拍。 对于我来说,这是做一个程序员最苦恼的事情了。我们不断的升级技术,是为了让软件更好,但却禁不住感到,我就像一个做沙毯(sand-painting)的和尚。
...全文
27874 153 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
153 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu254773606 2014-06-11
  • 打赏
  • 举报
回复
我来逗你玩啦 2014-06-11
  • 打赏
  • 举报
回复
好东西,看不懂
叶吥落 2014-06-10
  • 打赏
  • 举报
回复
david-yue 2014-06-10
  • 打赏
  • 举报
回复
写的非常好,初级程序员一定要看。
波波七 2014-06-10
  • 打赏
  • 举报
回复
随着经验的增长,里面的条数会慢慢的变少,嘿嘿
xueyu55521 2014-06-09
  • 打赏
  • 举报
回复
newnember 2014-06-09
  • 打赏
  • 举报
回复
RET__UB 2014-06-09
  • 打赏
  • 举报
回复
说的真是好
Josslin025 2014-06-09
  • 打赏
  • 举报
回复
远远不止这些,老婆都成问题
黎米游 2014-06-09
  • 打赏
  • 举报
回复
一定是你哪里出错了~~~
lucky-lucky 2014-06-08
  • 打赏
  • 举报
回复
写的很不错
baidu_16131125 2014-06-08
  • 打赏
  • 举报
回复
水星灭绝 2014-06-08
  • 打赏
  • 举报
回复
从前端到后端。麻烦的很。亲戚朋友总以为我是修电脑,修手机,破解QQ密码,牵网线的。
Beinggeek 2014-06-08
  • 打赏
  • 举报
回复
我们公司的一个外贸部经理经常在我写代码的时候,打电话问我一些不是我责任范围的问题,烦死了。
  • 打赏
  • 举报
回复
不管怎么样,先点赞。
franzhong 2014-06-07
  • 打赏
  • 举报
回复
smartboy8899 2014-06-07
  • 打赏
  • 举报
回复
说的蛮中肯的,
  • 打赏
  • 举报
回复
引用 7 楼 lion_kangaxx 的回复:
只解释how不解释why。嘿嘿的确是常犯的一个错误。
我就注意到了 这个问题 很精辟.......
_周星星 2014-06-06
  • 打赏
  • 举报
回复
shiter 2014-06-06
  • 打赏
  • 举报
回复
加载更多回复(131)
云端虚拟化技术   云端集软件搜索、下载、使用、管理为一体,为网民搭建软件资源平台、应用平台和服务平台,改善目前软件获取和使用的方式,带给你简单、快捷、舒畅的软件使用全新体验。   云端是软件和操作系统的中间载体,能解决您以往使用软件时:软件安装繁琐费时、软件安装使用引起的系统脏乱崩溃、重装系统后重装软件等烦恼,帮您更快、更简单、更舒适的使用和管理软件。   云端软件库拥有近万款的软件资源,都无需安装,一键使用,不写注册表、不写系统;无用软件可以一键删除,快速干净不残留。   云端实现真正的完全的软件绿色化。 [编辑本段]相关特点   一、虚拟化环境,带给系统轻便、干净、稳定,减少重装烦恼   1、全面绿色化   绿色软件通过分析安装过程、修改、删减而有免安装、方便卸载、移动便携等优点。但仍旧是运行在真实环境,有些绿软仍然要写入注册表。   云端为软件提供虚拟化的运行环境,在保证软件完整性、无改动的情况下,囊括绿色软件所有优点,并为软件运行虚拟注册表、文件io等等,让软件运行全程无污染,全面绿色化。   2、隐藏与激活    隐藏与激活是系统与软件之间的阀门。隐藏的软件会被撤出虚拟环境,该软件各虚拟位置(如C:\Program Files下的安装目录、注册表等)将从系统中消失,保持虚拟环境和系统的高效率工作,和系统环境的清洁。软件激活时,将被装载入虚拟环境,保持与系统良好的关联。   当需要时,可从隐藏状态直接运行软件。   3、重装系统不再烦恼   重装系统的最大烦恼之一:所有软件都要重新安装。但如果安装了云端,重装后只需在云端指定原来的缓存目录,所有软件即刻恢复使用,帮你消除重装烦恼,还你轻松与快捷。   使用此功能,要求缓存目录必须设置到非系统盘。   4、操作系统保护   云端提供的虚拟化环境,极大的避免了软件安装使用和软件安装过多带来的操作系统出错、系统运行缓慢等,有效去除了软件卸载不干净而残留的注册表、dll文件等系统垃圾。降低了重装系统的频率,保护系统的干净、稳定。各种软件想装就装,不再怕系统被拖慢、污染。   二、一键化的操作,体验速度与流畅   1、一键使用    所有云端软件平台的软件资源,从下载到使用一键搞定,体验流畅与快捷。   2、一键重置    运行异常、出错的软件,一键重置为初始完好状态。解决了以往需要把软件卸载后再重装的麻烦。   3、一键删除   不再有繁琐的,要“下一步、下一步”点击的卸载。在云端,无用软件一键删除,快速无痕。   4、一键备份   本地软件列表一键备份到网络服务器,配合云端资源平台,随时随地使用你熟悉、中意的软件。   5-BUG 说到{一键重置不会对操作系统造成实际上的影响}我也希望如此,但我的0.9-3版先是改变   了IE的某项设置,让我的凤凰中文台无法连接,但当时还无法确认后来关闭QQ2009时发现连   网页都无法打开了,杀毒软件都无法升级(好厉害)。现在只有开了QQ才能上网。我用G还原   了两次XP-sp3自己装的纯净版G的,可依然如故。   其实我们用云端就是求系统稳定,向迅雷等软件用与不用它都在那不闲着。正好有云端   云端真的希望你保护系统的干净、稳定。慢慢完善吧!   三、丰富、安全的软件资源,便捷的软件使用、获取方式   1、丰富、安全的资源    云端的软件资源,注重质量,不断丰富。所有软件均经过虚拟化处理,无毒、无木马、无捆绑插件、软件,放心使用。   2、快速装机    内置在云端的“装机必备”列表,涵盖常用流行的软件,帮你迅速装机。迷你资源门户,让你快速搜索、下载所需软件。   3、免安装使用    云端软件平台的所有软件都免安装使用,省去每次安装的繁琐,节约你的时间。   四、方便实用的软件管理,灵活软件分享,移动便携   1、软件分类管理   软件分类管理,直观、清晰;软件状态图标,状态一目了然。让你集中、方便的管理软件。   2、软件分享灵活方便   云端提供多种软件分享方式:将本地云端缓存复制到另一台电脑上,即刻可用;将本地云端软件列表或下载链接导入另一台电脑,即可下载。   云端的多点分发,在局域网内分享时,下载可达到局域网内传输的高速。   3、软件轻松移植,移动便携   云端里的软件可以轻松移植至别的电脑中,换了电脑,也可立即使用。   可将云端缓存设置在移动存储上,或将缓存复制到移动存储中,实现软件随身携带,移动办公。 [编辑本段]技术简介   云端采用的应用虚拟化技术,与目前较为人熟知的硬件虚拟化(machine Virtualization,如VMware、Virtual PC等)、操作系统虚拟化(OS Virtualization, 如Virtuozzo等)不同,云端的应用虚拟化更轻量级,更适用于桌面和应用程序等的虚拟化,为PC领域带来更好的桌面和软件使用的体验。 实现原理   下面以云端的隐藏与激活的功能为例,简要说明下云端应用虚拟化的实现原理。   未使用云端的系统系统环境:系统中有本地安装的软件A和其它系统进程。   当系统没有使用云端时,用普通方法在本地安装软件A后,在注册表系统中有软件A的注册表项集合,在文件系统中有软件A文件集合。同时,注册表系统和文件系统还有系统其它进程的注册表项和文件集合。   软件A和其它系统进程,一般都可对注册表系统和文件系统的任何位置访问,不管这个注册表项和文件集合是自己的还是别的进程的。所有写的操作的结果都会留在原始的物理位置上。   使用云端的系统:软件处于激活状态  使用了云端的PC:被虚拟化的软件B,处于激活状态   系统环境:系统中有被虚拟化的软件B、本地安装的软件A和其它系统进程。   当软件B被云端虚拟化后,云端将软件B原本写到注册表系统的注册表项和写到文件系统的的文件分离出来,存储在软件B的注册表缓存和文件缓存中,这些缓存数据存储在云端独有的缓存里(cloudcache)。   当在云端中激活软件B时,云端会将软件B的注册表缓存投影到真实系统的注册表中,并不占用该物理位置空间;文件系统也是如此,会将文件缓存投影至真实的文件系统中,并不占物理空间。   此时,安装在系统中的软件A和其它进程都可以看到软件B的注册项和文件集合,并认为是真实的。他们对彼此的注册表项和文件集合的互相访问和使用都照常进行。   但对于软件B的注册表和文件的投影的写操作和读操作,其实都直接针对其缓存,而不是软件A和其它进程所看到的位置。   使用了云端:软件处于隐藏状态使用了云端的PC:处于隐藏状态的软件B   系统环境:系统中有处于隐藏状态的软件B,本地安装的软件A和其它系统进程。   当将软件B被隐藏后,云端将取消软件B原来的注册表和文件的投影,软件A和其它系统进程也就看不到了。效果相当于软件B在系统中被卸载了。 [编辑本段]产品介绍   云端是软件和操作系统的中间载体,能解决您以往使用软件时:软件安装繁琐费时、软件安装使用引起的系统脏乱崩溃、重装系统后重装软件等烦恼,帮您更快、更简单、更舒适的使用和管理软件。   云端软件库拥有近万款的软件资源,都无需安装,一键使用,不写注册表、不写系统;无用软件可以一键删除,快速干净不残留。   云端实现真正的完全的软件绿色化。 [编辑本段]公司介绍   成都云端网络技术致力于应用虚拟化技术的研发,探索虚拟化技术在软件服务化领域的实施应用,为用户创造方便、快捷、安全、高效的软件使用全新体验。   云端是软件和操作系统的中间载体,能解决您以往使用软件时:软件安装繁琐费时、软件安装使用引起的系统脏乱崩溃、重装系统后重装软件等烦恼,帮您更快、更简单、更舒适的使用和管理软件。   云端软件库拥有近万款的软件资源,都无需安装,一键使用,不写注册表、不写系统;无用软件可以一键删除,快速干净不残留,实现真正的完全的软件绿色化。 关于 团队自述   我们是一帮年轻人,生于70和80年代。   我们是一帮大龄网民,始于网吧拨号上网年代。   曾经,我们使用、关注互联网;如今,我们带着创意、激情和梦想参与互联网。   我们将应用虚拟化技术引入个人用户领域。用云端,为你开创软件新生活![1] [编辑本段]相关新闻 电脑用户软件管理进入快时代   据中国互联网络信息中心(CNNIC)《第22次中国互联网络发展状况统计报告》显示,截至2008年6月30日,我国网民数量达到2.53亿,网民规模跃居世界第一位,中国电脑用户数量已经相当庞大。然而,尽管我国拥有海量电脑用户群体,但是用户在使用各种电脑软件过程中,却需要经过搜索、下载及安装等环节,十分繁琐,“耗时”问题严重。同时,许多软件已被木马插件恶意感染,不利于用户使用。为此,许多电脑用户呼吁能有如同“管家”的软件系统,能让各种软件复杂的安装使用变得快速便捷。   而记者在刚刚结束的“首届中国优秀软件创新大赛”上获悉,由成都朗弘科技研发的“云端软件平台”则解决了目前普遍存在的软件使用“耗时”现象。据了解,云端软件平台是以虚拟化技术为应用手段的一种创新软件使用平台,在虚拟环境下,不仅成功的实现了软件免安装使用,而且在脱离网络的情况下同样可以使用。   云端所特有的网络备份功能,还具有U盘一样携带使用的便捷作用。同时,在云端使用的软件,当系统重装后只需安装云端,所有软件立即恢复使用,无需再次下载,大大节省了电脑用户软件安装管理的时间成本。此外,云端为软件提供虚拟化的运行环境,能够保持系统长久的干净、绿色,为软件虚拟注册表、文件IO等,避免了软件安装、使用、卸载带来的系统污染。   提及虚拟化技术,从事虚拟机提供的美国VMware一直走在技术前沿,云端软件平台的问世,则为国内虚拟技术向世界的接轨起到了推动作用。云端软件平台的创始人杨小锋在接受采访时表示,虚拟化技术早已被列为未来三年内影响力最大的10大应用技术之一,目前市场上还没有与云端软件模式相同的产品,仅仅有技术类似的研发项目。云端软件平台的问世,将成为电脑用户名副其实的电脑软件“管家”,轻松提升用户的软件使用与管理,节省更多时间,云端软件平台的公测版产品也已经发布。   而为验证该软件平台的实用性,记者也走访了几位试用的用户,他们告诉记者,该产品对各种电脑软件的管理确实方便快捷,能为用户创造方便、快捷、安全、高效的使用体验。同时他们表示,随着该软件平台的日臻完善,将会被更多的电脑用户接受,并有可能像杀毒软件一样成为电脑用户的必备软件。   此外,该软件也受到了金山软件总裁求伯君、中国互联网协会秘书长黄澄清、程序员杂志社社长、CSDN总裁蒋涛等业界知名人士的一致认可,并一举夺得“首届中国优秀软件创新大赛”金奖。或许不久的将来,在云端软件的普及下,中国电脑用户将迎来电脑软件使用的快时代。 [编辑本段]相关评价   1.使用云端软件平台下载软件后无须安装直接运行。   2.软件备份一键恢复,经常重装系统的朋友可能会碰到这样的问题,重装或恢复系统后好多软件都无法使用了,可是云端软件平台就可以帮我们快速恢复那些不能使用的软件,前提是使用云端软件平台下载的软件。这不是重要的,重要的是支持网络备份,即我家里常用的软件使用云端软件平台备份后,以后上网或其它地方上网用云端软件平台可以快速下载并恢复我们在家使用的那些软件列表。   3.其它一些小功能暂时不入断线风筝法眼。[2]

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧