弱爆程序员的特征值

弱爆程序员的特征值

感谢网友投递此文,很欢乐也有意思,与大家共勉

首先说明:

1、以下特征是真实遇到过的,同事犯过的,乃至我自己也犯过的;
2、为了剧情需要,某些例子进行了一些夸张修饰等演绎创作,如无雷同,请勿生气;
3、如果你出现过以下症状之一,并不代表你就是弱爆了,但是如果你一直出现,乃至一说到这个大家就能联想到你,那么你就得小心了;
4、如果你是集这几个的大乘者,恭喜你,你已经找到了离开这个行业的充足理由了。

好了,搞定!

“那个Bug解决了吗?”

“好了,搞定!”

“这么快?”

正当你非常欣喜的时候,就传来了噩耗:刚才还能编译成功的,就失败了。(好吧,我们的集成编译尚未成功配置上,理论上这种事情应该会被退回。)又或者能编译成功,但是呢,原来明明能起作用的一个下拉框,突然发神经的不起作用了。最隐蔽的莫过于,一切正常,但是当你看到代码的时候,你就晕厥过去了。比如我们曾经发现了一个Bug,简单说就是每次用户点击某个东西,就会执行下面的这段C#代码:

controlPropertyPanel.PropertyChanged += this.UpdatePropertyOnChanged;

这个Bug很明显会导致速度越来越慢,因为同一个更新操作会被更新N次,并且这个N会越来越大。其实这个Bug已经够弱了,但是后来居然被修改为:

controlPropertyPanel.PropertyChanged -= this.UpdatePropertyOnChanged;
controlPropertyPanel.PropertyChanged += this.UpdatePropertyOnChanged;

这段代码能编译,能执行,但是就是弱爆了。因为这不仅仅没有从根本上去掉造成问题的逻辑,还会带来更多的困惑:为什么要先减后加呢?

这类特征,请大家看看有趣的《各种流行的编程风格》,我这个例子算是一种撞大运。我觉这吧,这类问题都是因为只想解决一些表面的东西为目的,完全不管底下的其它任何问题而造成的。

那估计是他的Bug

“这个问题为啥还没解决呢?”

“我觉得应该是他那里边的Bug,我调不了。”

“哦……”

这个“他”可以是某一位同事,或者前同事,或者微软,或者别的什么公司,再或者某个开源代码的作者。这些个我都遇到过,比如说是另一位现在在职的同事吧。当你告诉这位同事这个Bug似乎在他那儿,并且问问什么时候解决,他也许会很愧疚的立刻调试,可最后结果却仍然是开头对话主人翁的所写代码的问题。

再比如说是微软吧,那么对话可能就会包括:“啊,SilverLight真是烂,老是内存泄漏、崩溃等……”“是啊是啊!烂死了!早知道用Flash了。”又或者会说:“微软就是烂,Java就是好。”其实,我不想比较什么SilverLight还是Flash,.NET还是Java。因为在讨论这些问题之前,先最好想想,这真的是别人的错么?相信是其他人的错是一件很简单的事情,因为这样推脱之后你就可以啥都不做了,反正不是我的错。

如果真的发现了这是别人的Bug并证明了,那倒好说。但这种特征是一种纯粹的怀疑,并没有丝毫的证明。在仔细找了自己所有可能犯的错之后,如果你怀疑是别人的问题,那请求证一下。

无图无真相!

“楼主,无图无真相啊!”

“楼主,无代码无真相啊!”

“楼主,给翻译一下啊!”

据说Linus在别人询问Linux内存管理的一个什么问题时,回答道“Read the fxxxing source code”,很多时候我也有类似的冲动。我发现在信息发达的时代,不少人的阅读能力、动手能力都严重退化了。这些人最好就是你亲自来帮他把问题解决了,他才不想了解里面到底 发生了什么。这种问题体现在博客里面,就是寄希望于你写得图文并茂,图嘛最好花里胡哨同时言简而意概,文字嘛最好大段大段的代码。其实图不是重要的,只是为了好看,重点是代码,这样他一Copy就可以直接解决他们的问题了。

比方说,Silverlight里面没有各种图像格式的编码器,于是当你希望保存Jpg的时候怎么办呢?Google一下,发现原来有人写过一个FluxJpeg的编码器。下载下来一跑,唉还真能用哎。之后就直接签入,也不捎带看一下有没有什么问题,或者设计不合理的地方。(其实真的有,会很慢,因为有大量毫无必要的数组拷贝。)

又或者说,遇到了某个Bug,搜索一下发现,哎,还真有人遇到过,而且还有代码哎!把代码扒下来一跑,发现好像解决了,至于为什么就不管了。甚至还遇到过根本就不管解决不解决问题,反正代码扒下来了就签入了的。

再比如,写一篇博客讲解如何缩减.NET编译出来的文体大小,其中提到许多概念需要先阅读微软官方的一个文档。结果,还是会有人回复说,你那个文章里面提到那么多的Blob,也不说说Blob里面都有什么,大概是很不满意吧。可是这个文档里面都有啊,难道就不能自己阅读一下?其实即便我连这个文档都没有给出,自己也应该有这个能力去进行思考,去动手寻找。

千万不要退化成一个啥都要别人给你嚼烂了才能够吞下去,吞下去也不会消化吸收的人。这样的人大概别人给的是大便,只要有代码无真相,也会照样吃下去的。若真如此,那你打算如何提高呢?

那是个对象!

“这个ExpressionVisitor,它是用来干什么的?”

“……”

“好吧,或者这么说,他是一个什么东西?”

“他是一个对象!”

“啊?”

“哦,是一个对象的实例。”

大概这样的回答,和那个微软工程师说“你在直升飞机上”差不多——反正你也不能说是错的,但是就是没什么意义。其实不知道没啥问题,人又不是神,怎么可能都知道呢?不去仔细了解和学习问题也不严重,因为你可以改。但是当你习惯性的随便找一个绝对没错但又不说明任何问题的答案,甚至似是而非的东西来对付的时候,你就离弱爆的边缘很近了。

当然,上面的对话也许是比较极端的。一个稍弱一点的对话版本是:

“这个内存泄漏是怎么造成的呢?”

“嗯,会不会是图片放的位置不对呢?”

哈,还是很夸张对吧?没办法,写博客有时候需要夸张的文字,否则你无法理解我的意思是:有时候,大家会倾向于从自己的记忆中寻找一些相似的物品,然后选择相似度自认为比较高的东西出来当作答案,而全然不管两者之间的逻辑是否有哪怕那么一丝的关联。也许很多时候,我们确实需要从相似的东西开始,但请别把他当作终点。程序是需要严谨的逻辑的,所以你也必须非常严谨的去推演。

关于这类的问题真的太多太多了,比如我指着下面这段代码当中的红字:

var dictionary = new Dictionary<string, string>();
dictionary[“someKey”] = “someValue”;

“这句话说明了什么?”

“说明dictionary是一个数组。”

集大成者

最后我举一个集大成者的例子,说,有个任务是要在SilverLight应用上面添加一个“收藏本站点”。好,怎么解决呢?网上一搜,发现有很多这样的代码:

function AddBookmark(Url, LabeName) {
  if (document.all)
  {
    window.external.addFavorite(Url, LabeName);
  }
  else if (window.sidebar)
  {
    window.sidebar.addPanel(LabeName, Url, '');
  }
}

然后直接扒下来就放上去了,通过某种方式在SilverLight中调用这段JavaScript,签入,搞定了!结果到了测试那边发现完全不能用,无论在IE6/7/8/9/10,还是在FireFox/Safari/Chrome上面,都不能使用。我问:

“这是什么原因呢?”

“不知道,反正浏览器报告没有权限,可能是浏览器的安全设置原因吧,或者操作系统的Bug,也可能是浏览器的某种Bug?”

“不可能啊?这些代码存在很多年了,要有问题早就能在网上搜索到了。”

“那也许是SilverLight调用的时候有什么安全问题。哎!SilverLight好烦啊!”

“那怎么还没有解决呢?”

“好,我马上解决它!”

很快,那段Javascript就变成了:

function AddBookmark(Url, LabeName) {
  try
  {
    if (document.all)
    {
      window.external.addFavorite(Url, LabeName);
    }
    else if (window.sidebar)
    {
      window.sidebar.addPanel(LabeName, Url, '');
    }
  }
  catch
  {
    alert("您的浏览器因为安全设置的问题无法收藏,请手动添加收藏!");
  }
}

看到这样的代码,我彻底震惊了。亲自调试了一下,发现确实报告了一个“没有权限”的异常。但是,我还发现,那个Url参数的值是“www.adomainname.com\test\page.html”。那这不废话么!浏览器认为你要收藏的是一个本地硬盘上的路径,怎么可能在一个Internet Zone上允许收藏这种路径呢?我于是指着代码问:

“这个Url是什么?”

“是一个变量”

“啊?”

“哦,不对,是一个参数。”

你是否也有类似的经历呢?

(全文完)


关注CoolShell微信公众账号和微信小程序

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——
好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 4.27 )
Loading...

弱爆程序员的特征值》的相关评论

  1. 最后那个集大成者里面,问URL那个,感觉是提问者问的方式不对,应该说”Url里保存的是什么”而不是”Url是什么”.谈话的时候人本能的从字面意思去理解,也不能怪coder说”这是个参数”了….

  2. 毕竟是民工码农时代,唉,弱爆的程序员随处可见,我时时警惕惊醒自己可千万不要如此

  3. @Tony
    我很难理解一个程序员在这样的上下文中,能把这个问题理解成‘URL是不是一个变量或参数’…. 难道他认为问问题的人是不知道什么是电脑的行外人士么

  4. 每个人都有年轻的时候,如果遇到这样的同事,多引导也许比嘲笑和抱怨来得好,因为谁能保证没有代码写得差的时候呢?谁能保证自己永远清醒呢?

  5. 写段程序调调补补也正常,一次写对8容易,但总把别人牵扯进来给他debug这就不能忍了,最后还发现是sb得不得了的问题。。。属于责任心缺乏,这个没有办法,最好在招聘环节解决掉。。。

  6. @elecalion
    这是与环境有关系的,譬如说一个新人刚进来可能什么业务逻辑也不知道,如果碰到了很复杂的业务逻辑的bug,必然会无所适从。这时候他确实应该熟悉所有的逻辑并fix掉这个bug,但是有时候出于一种表现的欲望,急于证明在团队中的作用,他就会采取某些捷径,而这些所谓的捷径有时候就会出现莫名其妙的问题,譬如说从网上直接复制代码。

  7. 我觉得这篇文章只能说明作者的沟通能力”弱爆了”. 程序和人说话不同,程序说一是一,说二是二, 人说话是要和周围的情景还有人自己的经验,心情联系的. 你不能指望别人能一下子就理解你的意思. 你说话也许觉得自己说得非常明白,但别人不一定会按照你希望的样子理解.

  8. @ak
    自然语言本来就语法混乱,容易语义不清产生歧义,不能指望所有人对这种口语环境中上下文的理解都是相同的.更何况有时候心理因素都会影响人对语句的理解,毕竟人不是机器,你要想别人理解你,首先就要把自己的问题阐述清楚.

  9. 我也是弱爆程序员。 那 “controlPropertyPanel.PropertyChanged += this.UpdatePropertyOnChanged;”这个问题的正确解决方法是什么?

  10. @Tony 好吧,我写的时候写的不够清晰,我实在一个调试的屏幕上,鼠标指着Url这个变量,并且探出提示“www.adomainname.com\test\page.html”我指着这一片区语问,这个Url是什么?这个,我想你懂的。

  11. 那个,我说一下,沟通确实是会存在各种丢失,但是丢失多少我觉得属于双方的责任。你当然可以说是我说的不清楚,我也可以当然说是你理解的不透彻。但是这么争论下去恐怕没有什么有建设性的结论,我觉着吧,建设性的去想,就应该想自己能怎样提高。而且我说的那个问题还真不是沟通的问题,而是一种思考问题方式的问题:那就是不用逻辑思维,而是象什么来什么。我想这才是我想表达的东西。

  12. @真名 那个,我不觉得我是在嘲笑别人,这是切切实实发生的事情,说出来有利于彼此成长。当然,你也可以有你的理解。只是我想告诉你的是,我会尽可能去沟通这类问题,帮助他们看到问题的地方在哪里。如果我都写到文章里面,那就又长又臭了。谢谢你的善意提醒。

  13. 加一条,环境问题
    不管是别人的环境有问题,还是自己的环境有问题,总之答案就是不知道为什么,反正在一台机器上过了就感觉自己完事了。
    还有一边吼这机器慢,一边QQ挂着,微博刷着,在线音乐听着…
    三天两头机器就出问题,操作系统,浏览器,IDE…自己的机器都搞不定,搞什么开发

    不是打击新人,就当发发牢骚吧,老码工也不是一直都有好脾气的。态度真的很重要。

  14. 关于 copy 代码的问题。
    区区是学生,先表明下身份。。

    step 1确定需求,
    比如说,加入收藏这个要求。
    然后根据这个需求找相关代码
    step 2 搭建一个简单的测试环境。
    新建个项目,项目,把这些代码实现所需要的变量先写死
    然后嵌入。
    如果成功,再继续把变量变成所需要的。。比如url设定为“当前页面”或者其他什么的
    step 3 减法
    很难找到在所有情况下都不臃肿的代码,除非是某些一行可以实现的命令。
    往往都可以根据需要删除一些东西。
    step 4 加法
    代码不是唯一的。
    if(不满足&&有时间) goto step 1
    step 5 选择最合适的
    取得最合适的,写入项目中
    注意,是写入。copy最容易出错了。
    然后测试。
    step 6 后续处理
    将有用的,比较合适的代码收藏。以备以后处理。

    其实,如果有东西,自己觉得无法解决,或者解决的方法不能让自己满意,
    个人觉得借鉴下别人的代码并没有什么不好的。
    只是要吧别人所表达的意思理解——这只是方法的问题

  15. @zephyrrr 我的解决方法 ,也许可以帮助你。欢迎提出更好的解决方法 :)
    void PropertyChanged(object sender,EventArgs e)
    {
    if(OnPropertyChanged!=null)
    {
    OnPropertyChanged(sender,e);
    OnPropertyChanged=null;
    }
    }

  16. karl :@zephyrrr 我的解决方法 ,也许可以帮助你。欢迎提出更好的解决方法 void PropertyChanged(object sender,EventArgs e){if(OnPropertyChanged!=null){OnPropertyChanged(sender,e);OnPropertyChanged=null;}}
    @karl

    同学,你这个比-= +=还要严重。。。。。。

  17. 想起某电影的对白。
    A:“这是什么!?”
    B:”港币。”
    A:”我知道这是港币!我问这是什么?!”
    B:”港币!”

  18. steven :
    想起某电影的对白。
    A:“这是什么!?”
    B:”港币。”
    A:”我知道这是港币!我问这是什么?!”
    B:”港币!”

    经典,太多人沟通时脑补自己的讲话内容。

    从危害上来讲,嘴懒 > 手懒 > 脑子懒

  19. sumtec :
    @Tony 好吧,我写的时候写的不够清晰,我实在一个调试的屏幕上,鼠标指着Url这个变量,并且探出提示“www.adomainname.com\test\page.html”我指着这一片区语问,这个Url是什么?这个,我想你懂的。

    喂喂好多错别字这个要吐槽么喵……

  20. sumtec :
    @Tony 好吧,我写的时候写的不够清晰,我实在一个调试的屏幕上,鼠标指着Url这个变量,并且探出提示“www.adomainname.com\test\page.html”我指着这一片区语问,这个Url是什么?这个,我想你懂的。

    喂喂好多错别字这个要吐槽么喵……

  21. 我倒认为是层次的问题,和你沟通的人还没有进入你的语境。或者说,大家不在一个层次,他听不懂你话里面的话。这样做事就累了,很多时候都是在教别人……

  22. 就像你说:”这个模块使用策略模式设计更合适”,你想说的除了这几个汉字,最关键的还是“策略模式”后面代表的深厚含义。
    如果真要考虑别人的认识水平,是不是还需要把话写下来,帮他分析主谓宾?因为他小学语文可能还不过关。
    急性子遇到这种手下,自己和手下都会疯掉。

  23. 我手下的也有个这样的人

    别的不恨,就恨他懒惰、不肯动脑子

    明示、暗示多次了

  24. 一对照,发现自己完全符合这些特征的漂过。
    基本上我会无视各位老大们的咆哮,心里一面想,你丫的思考个蛋呀思考,除了计算机你还会咋。上班计算机,下班计算机,做爱5分钟不到,高潮已过4分钟,呵呵。
    写这样总结的人在人际方面肯定一踏糊涂,人一生是一个生活的过程。

  25. wishmiss :
    一对照,发现自己完全符合这些特征的漂过。
    基本上我会无视各位老大们的咆哮,心里一面想,你丫的思考个蛋呀思考,除了计算机你还会咋。上班计算机,下班计算机,做爱5分钟不到,高潮已过4分钟,呵呵。
    写这样总结的人在人际方面肯定一踏糊涂,人一生是一个生活的过程。

    工作一定得是痛苦的么?如果有些人能把工作当做生活,那不是非常幸福,
    为什么要把生活和工作主分开呢?

    比如你喜欢做爱,那么你可以把做爱当工作啊,这样你既可以认为每天24小时都在生活,也可以认为每天24小时都在工作。不必每天浪费8小时“工作”而去换取你所谓的“生活”。

  26. lajabs :

    wishmiss :
    一对照,发现自己完全符合这些特征的漂过。
    基本上我会无视各位老大们的咆哮,心里一面想,你丫的思考个蛋呀思考,除了计算机你还会咋。上班计算机,下班计算机,做爱5分钟不到,高潮已过4分钟,呵呵。
    写这样总结的人在人际方面肯定一踏糊涂,人一生是一个生活的过程。

    工作一定得是痛苦的么?如果有些人能把工作当做生活,那不是非常幸福,
    为什么要把生活和工作主分开呢?
    比如你喜欢做爱,那么你可以把做爱当工作啊,这样你既可以认为每天24小时都在生活,也可以认为每天24小时都在工作。不必每天浪费8小时“工作”而去换取你所谓的“生活”。

    牛头不对马嘴!!!
    我回复的内容的中心思想是:见到这样对新手的老大,你无视他,甚至鄙视他。

  27. sumtec :
    @Tony 好吧,我写的时候写的不够清晰,我实在一个调试的屏幕上,鼠标指着Url这个变量,并且探出提示“www.adomainname.com\test\page.html”我指着这一片区语问,这个Url是什么?这个,我想你懂的。

    我相信同样的问题99%的程序员都会这样回答你的.为什么不能直接问清楚呢?其实是你自己表述的不清楚,而你却觉得是对方没有回答清楚你想要的答案.纯属沟通问题.不在于谁更”弱爆”.我相信如果换个角度,你也会回答一个变量或不一个参数的

  28. wishmiss :

    lajabs :

    wishmiss :
    一对照,发现自己完全符合这些特征的漂过。
    基本上我会无视各位老大们的咆哮,心里一面想,你丫的思考个蛋呀思考,除了计算机你还会咋。上班计算机,下班计算机,做爱5分钟不到,高潮已过4分钟,呵呵。
    写这样总结的人在人际方面肯定一踏糊涂,人一生是一个生活的过程。

    工作一定得是痛苦的么?如果有些人能把工作当做生活,那不是非常幸福,
    为什么要把生活和工作主分开呢?
    比如你喜欢做爱,那么你可以把做爱当工作啊,这样你既可以认为每天24小时都在生活,也可以认为每天24小时都在工作。不必每天浪费8小时“工作”而去换取你所谓的“生活”。

    牛头不对马嘴!!!
    我回复的内容的中心思想是:见到这样对新手的老大,你无视他,甚至鄙视他。

    受不了“咆哮”的新手,永远就停留在新手水平。某些人自以为很懂人际关系,实际是都是用些投机的伎俩

发表评论

电子邮件地址不会被公开。 必填项已用*标注