• 程序员看法上的几个典型错误
    时间:2012-07-26   作者:四火的唠叨   出处:raychase.net

    今天我不谈抱负理想,也不谈具体的技术,我来谈几个看法上的典型错误。下面的这些问题都是我曾经遇到,或者是我的朋友们遇到过的问题,这些都是我个人的理解,希望对大家有帮助。

    关于设计模式、设计原则

    有人认为,熟悉了设计模式、设计原则,就学会了设计。其实,设计模式和设计原则,只是前人根据设计实践做的总结和提炼,设计,归根到底是要解决问题的,把具体问题的解决办法,经过一定的抽象,变成程序员的语言。

    我见过一些人,他们知识渊博、见识广博,甚至理论可以给你阐述得冠冕堂皇,但是到了实际需要解决问题的时候,他们却拿不出巧妙的、优雅的办法,这是典型的象牙塔人。
    另一方面,也有一些人看不起学习设计模式的人,他们觉得他们已经掌握了软件设计的奥义,这些对他们来说是毫无意义的词汇,对此大可以一笑置之。

    有时候我们反而被设计模式或设计原则粗暴的掌握束缚了手脚,譬如我遇到这样一件事情,某位努力的程序员,设计的代码用遍了组合(例如把User对象放置到Administrator里面),我好奇地问,有一些类和对象之间的关系很明显符合继承的特征,为什么不愿意用它?他说,设计原则告诉我们,要多用组合,少用继承。我想,对这些优秀的模式、原则、方法论,如果不能透彻地掌握,不能根据实际场景合适地运用,是不是反而不如对其不了解来的好呢?
     
    关于多种计算机语言的学习

    有人觉得学习一种语言就可以了,学习那么多语言没有必要。事实上,多掌握一门合适的计算机语言不仅仅是多掌握一种谋生的工具,如果一种新的语言能够很大程度上改变你对编程、对设计的看法,那么兴许它就值得你去学习。

    譬如C语言,可以培养严谨的思维;譬如动态语言,它可以帮助程序员更好地做面向对象的coding;譬如函数式语言,它在工业生产、运算领域有着不可替代的作用。

    当然话说回来,所谓术业有专攻,对于某一门计算机语言(包括该语言所需的运行时环境、其中的编译或解释的原理)深入的掌握,是很有必要的。

    另外,我们时常看到诸多计算机语言孰优孰劣的争论,计算机语言归根到底是一种工具,工具是随着时代发展升级和变更的,单纯的优劣争论没有太大意义。
     
    关于英语

    中国人为什么要学英语,程序员为什么要学英语,当我把那些方法名、变量名全部取成拼音,一样可以,谁下的这个破规定?

    遗憾的是,诸多学习材料、论文、技术资料(尤其是一些刚出不久的技术),都是英语的;另一方面,国际标准、程序员交流的通用方式,都是英文的,我想肯定很难想象,那些有名的framework、lib的源码,如果用拼音来写变量名会成什么样子。

    所以,如果你的英语不好(至少读写不好),就不要给自己找太借口,英语是一个掌握其他工具的工具,除非你坚信,中文很快就会在计算机界变成世界第一通用的语言。
     
    关于算法

    算法有多重要,这一件事的争议一直都很大。

    软件归根到底是用来解决问题的,提到算法就不能不提到数学(这也是为什么很多软件领域的大师都具备相当的数学背景),对于解决问题,这里可以简单归纳成两步:

    (1)把实际的问题抽象成简化的数学模型
    (2)用算法去解决这个数学问题


    算法,在这里应该是一个广义的概念(这里的算法并不仅仅指大学里学习的狭义的具体算法),算法是解决上述数学问题的办法。如果工作中你并未意识到它的存在,那只是说明,你抽象出的数学模型比较简单,解决这个模型的办法也很简单,或者有现成的方式可以模仿,或者有现成的框架帮你完成了,以至于你不去关注它、在乎它。

    如果你做的事情是充满创新意义的,是别人从没有做过的,这时候算法兴许就成了决定你成败的因素。

    在当前中国的环境下,视野广阔和经历丰富的人很好找,但是企业要招到具备上述两点能力来解决问题的人,其实是非常困难的。
     
    关于经验

    唯经验论者的人有很多,他们认为,在软件企业的职位、薪水、甚至决策能力,都取决于经验,一个5年经验的工程师,肯定比3年经验的工程师能找到更好的饭碗:
    “我是老员工,我工作5年了,凭什么工作3年的他薪水比我高那么多”

    实际上,很多因素,包括领域积累(这是业务上的,例如互联网领域、传统软件领域,这和所谓的纯技术没有直接关系)、视野、承受压力的能力等等往往都在很大程度上取决于“经验”的积累,但是,这并不是绝对的。有句话叫做“事业一半是干出来的,一半是总结出来的”,也确实有一些出色的程序员,他们善于总结、善于观察和积累,并且善于不断地思考,这样的程序员就是拥有更多优秀的经验。

    另一方面,程序员是要来解决问题的,经验不能代替解决问题,有的人具备更优秀的解决问题的能力,他为什么就不能得到更优厚的薪水?

    网友留言/评论

    我要留言/评论

    相关文章

    读《神一样的产品经理》:随着iPhone的风靡全球,乔帮主也把产品经理推到了极致,在看了《神一样的产品经理》后,借着ITeye的活动,发一点牢骚。
    技术文化建设实践:众所周知,良好的技术文化不仅有助于人才成长和提升团队内聚力,更是吸引和留住优秀人才的一大法宝。然而,该如何营造良好的技术文化呢?且听本期三位嘉宾的经验分享。本文是专题《怎样营造良好的技术文化》中的第三篇。第一篇是张克军带来的《悉心营造良好的技术文化》,第二篇是许晓斌分享的《分享促进技术文化建设》。
    有关创业公司融资最常被问的问题集锦:很多的创业公司都是沿着一个老套路:一个创业者,一个理想,一个计划就开始自己的创业。往往一提到创业人们就是人潮涌动,而单独一人上路的比有自己的雇员的创业者更加数不胜数。但是谈到成功,许多创业公司必要更深度的一整套的技能和经验。相信创业者们融资时面对投资商所提的这些问题可以引起一些反思。
    移动app设计的那些创新点:移动互联网发展得热火朝天,各种app层出不穷,我们看到了很多创新精巧的小应用,但是也有越来越多的应用同质化严重,与同类产品差异化较小。其实很多让人感觉很有新意的应用,只是找到了一个很小很别致的切入点。或者是抓住了用户的某一种心里,或者是在界面布局上大胆突破,或者是做了很少有人关注到的细分领域,或者是让人产生了真实生活中的亲切感。下面就来聊聊这些新颖别致的创新点。
    如何做一个优秀的领导者:TeamLeader是比较尴尬的角色,是从技术往管理的一个尝试性的阶段,这个阶段是比较辛苦的。
    效果图进阶展现,给效果图赋予思想和生命:设计师所做的每个作品都像是自己的孩子一样,在孕育的过程中思考了很多,但这些思考的过程、思考的方法并不是单单一张效果图就能够展现的;设计师有很多专业层面的认知,效果图上并不能展现,加上设计本来就是相对感性的,所以很多时候分歧就这样产生了。
    产品经理(尤其是创业的)需要懂技术吗?懂到什么程度?:最近七年,我都在做互联网产品,其中前五年分别在创业公司和上市公司里,做别人的产品;近两年在创业,做自己的产品。
    5大诀窍助你打造更加简洁的用户界面:本文作者Jake Rocheleau,社交媒体爱好者兼互联网企业家。他在文中根据自己的个人经验,向我们阐述了一些关于如何设计极简主义的网站界面的诀窍。这里提到的极简主义设计,就是剔除所有多余的元素,将设计保留在最基本的状态下,说来简单,实际上在当今习惯于绚丽与渐变的网站界面设计中,使用极简并非想象中这么容易。
    软件架构师的沟通修炼:在架构师的角色中,沟通是要求有效果的必备技能与工具。换句话说,沟通是架构师指示别人或群体完成特定行动唯一真正有效的手段。
    提升网站用户体验的七个妙招:师者,传道、授业、解惑也。古者称师为先生,十年树木,百年树人,行业要进步,先生多多益善。