中国程序员应该具有的能力

Posted on 2010-10-11 17:05 傅先生 阅读(153) 评论(0)  编辑 收藏 引用
中国程序员应该具有的能力
2008-06-11 10:54

中国程序员应该具有的能力

序——程序员到底是做什么的?

       偶然翻出了以前买的一本杂志,名字叫《程序员到 28 岁时应该具有 28 种能力》。以前翻过一遍,现在再翻翻看看,感觉收获良多。书常看,人常新,相同的书,不同的时间看,带给你启示也不一样。现在看这本书,我想到了一个问题——程序员到底是做什么的?

        做软件,写程序,测试,写文档,开会。。。。对,那是程序员的主要工作内容,注意,仅仅是工作内容而已,而目的是什么呢?只有一个,解决不断出现的问题。这些问题都围绕在你周围,包括你自己的问题,同事的问题,公司的问题,客户的问题。。。。。这里的问题并不仅仅是技术问题,而往往比技术问题更难以解决。

       如果上升到这个角度来考虑我们的工作,我想我们的工作就会有意思很多。既然要解决这么多的问题,除了要有技术能力之外,还需要更多种类的能力,这本书就给了我这样的一个指导。因为这本书是日文的,我就把它所说的每一种能力的要点列出来,并加上自己的点评。我得点评也就是自己思考过程,因为我自己也尚未具有里面所提到得种种能力,就算是给自己一个激励。另外,虽然题目里面有个 28 岁,我想多半出于吸引人的目的,大家不必理会。

之一——保持健康的能力
       这个能力并不是排在这本书的第一个,但是我却想把它第一个提出来,因为程序员往往被要求不断的提高工作能力,技术水平,却很少被要求有自我管理健康的能力。 书中的要点如下:
健康管理支撑着你的工作。从公司的角度考虑,一个经常患病的人,是不会被委以重任的。从个人角度考虑,经常患病给自己和家庭都带来很大的烦恼。俗话说身体是革命的本钱,有个好身体,干什么都有可能简单的每日检查。
        首先,体重的检查。对程序员来说,每日测量一下体重是最可行的方法,每个人都有标准体重,通过每天的测量,你就可以有意识的通过减少饭量,多做运动来保持自己的体重。然后是吃饭,如果因为工作很晚才能吃饭的话,就考虑一下自己的睡觉时间,把饭量减一减。少吃油腻的东西,多吃蔬菜。每天喝一升的茶,多喝无糖的水。感到疲劳的时候吃点维生素。
      职业病的处方。程序员因为长时间保持坐姿,长时间面对电脑画面,容易引起肩膀疼,腰疼和眼睛疲劳。所以应该每工作一个小时就起身活动 5 分钟左右,这个活动包括身体的屈伸,肩部运动等等。同时,闭上眼睛转动眼球,使用眼药等对缓解眼睛疲劳比较有效。去厕所,去买东西的时候,做做这些,也算是对时间的有效利用吧。
       对付睡眠不足。干 IT 的没有不加班的,所以很多时候就容易睡眠不足。为了保证睡眠时间就要合理的安排好自己的工作,分好优先级,把今天最应该干完的做完就可以了,然后早点回家睡觉。这一点,书里讲的我想有点牵强,在中国或许没有什么很好的办法来解决加班的问题,在全世界或许都是个问题。
       心理健康很重要。不要光注意身体,也要时常注意自己的心理健康,程序员常年面临各种各样的压力,不断重复的工作,保持自己的心理健康,也是一个非常重要的课题。方法很简单,就是自己奖励自己。解决了一个 bug ,完成了一个复杂的算法,明白了一个需求,都可以适当的奖励自己。奖励的形式多种多样,总之自己喜欢什么就干什么。其实这里也给项目的领导者一个启示,就是要适当的对手下的程序员予以鼓励和奖励,完成了一个阶段计划,完成了一次测试,解决了一个关键问题,都可以组织大家轻松一下,有利于提高团队的凝聚力和个人的工作热情。
       尽情的放松。如果项目时间很长,结束遥遥无期或者项目陷入了泥潭,无法前进的时候,为了保持自己的工作劲头,不妨选择适当的一天,什么也不做,让自己好好放松,换换大脑,有利于更有效率的工作。
       最后说一下简单的营养补给。平常吃点食物纤维和复合维生素,肩膀疼的时候多吃维生素 E 比较有效,眼睛疲劳时多吃维生素 A 。
        以上列出了几个有关健康管理的要点。自己的健康自己管理,意识到自己的健康的重要,不要勉强自己做一些会损害自己健康的事情,例如连续通宵等等。良好的健康,对自己,对家庭,对公司都是一笔财富。年轻的时候用健康换钱,上了年纪就不得不用钱来换健康了。


之二——取信于人的能力
      程序员除了要学习技术知识以外,掌握更多的工作以及与人相处的技巧也是十分重要的,取信于人的能力当属其中的重中之重。
       为什么要具备取信于人的能力呢?
我想对程序员来说,具备了这种能力至少有以下两点好处更多的工作机会。公司都喜欢把重要的工作交给值得信任的人来做,你也就获得了比别人更多的工作机会,同时也会不断的提高自己,至于经济上的利益,一定也会少不了的。更广泛的人际关系。如果你是一个值得信任的人,那么就会有好多人和你交朋友,你的社交圈也就比别人要广,这往往意味着更多的机会。
       那么如何取信于人呢?以下几点我与大家共勉。一:不说假话。日常生活和工作中迫于各种各样的压力而说假话应该是司空见惯的事情。做到不说假话真的很难,不过不要紧,先把下面说的几点做好。二:答应的事情一定做到。反过来说,就是做不到的事情就不要答应。与任何人做的约定无论是口头的还是书面的都是非常重要的。如果一件事情你做不到的话,那么最好一开始就不要答应。常常有这种情况,面对客户或者上司,迫于面子和经济利益,不得不说保证会做到什么什么事情这样的话,如果这种事情是你不可能做到的,那么千万不要答应,后果往往很严重,别人很生气,自己很受伤。 三:不确定的事情不要断言。自己都不确定的事情不要去断言。对了到还好说,如果错了,就跟说假话一样,很容易失去别人的信任,而信任这东西,一旦失去,想再找回来很难。四:降低别人对自己的期待。如果干的工作比预想的要好得话,别人会很高兴,相反,如果低于预期的话,那就会很失望。人人都想努力做的比预想的要好,可是事实是更多的时候我们做的工作的成果比预想要有差距。所以,为了不让别人对你失望,需要降低别人对你的期望值。方法就是,提前将一些悲观的信息,问题,或者困难传达给对方。例如,这个东西我没做过,我试试看。我同时还有测试的任务,这个工作可能会往后拖一拖。等等。重要的就是要告诉对方,我很想努力做好,但是有些困难不得不考虑。五:学会示弱。都希望得到别人的认可,把自己最强的一面展现给别人。如果总是以强者的姿态出现,同时又不是真正的强者的时候,需要注意了,你会发现工作起来很费劲,因为给你的工作都是你力所不能及的。所以,不妨在一定的限度下,展示自己的弱点,这不是做作,而是让自己更顺利的提高,成为真正的强者。 六:传达风险。这个世界上没有风险的事情基本不存在,工作中更是如此。软件开发中的风险因素更多,需求的不稳定,计划的不完善,人员的流动,测试的遗漏等等。所以说话的时候不妨这样说,正常情况下,怎么怎么样,如果出现了什么什么问题,会怎么怎么样。传达风险,其实也就是给自己留有余地,问题发生的时候让自己不至于太被动。七:提出解决对策。对别人尤其是上司说我不能是比较难开口的。别人对你有所期待,所以才拜托你做一些事情,力所不能及的时候,简简单单的一句我不能并不是最好的解决办法,说我不能的同时,说说你能怎么怎么做,给别人提出一个解决对策。例如,客户要求周末交付使用,但这个实在是不可能的,可以对客户这么说,周末交付实在不可能,但是能够在下周一早上交付,这样对工作也不会有太大影响。基本原则就是,告诉别人你不能做什么的同时,也告诉别人你能做什么。八:约定的东西要双方留有记录。最好的工具莫过于电子邮件了,商量好的事情,整理到邮件里面,然后给对方发过去确认。一旦出了什么问题,谁的责任也就不言自明了。九:答应好的事情努力去做。这不用多说,是最基本的原则。努力到最后 一旦再怎么努力也做不到的时候,也不能放弃努力,一定要努力到最后。这不是做给别人看得,是为了挽救自己的信誉。 做不到的话,一定要真诚的道歉。一旦失败,好好总结,不犯相同的错误。除了不去做之外,这是避免失败的最有效的方法。 以上是关于取信于人的几个要点,其实做到并不难,都是很简单的方法,别人的信任其实是一个人的骄傲和财富。希望大家都能获取这份财富。

 

之三——汇报的能力

       技术再出色,如果没有良好的沟通能力,也不会成为一名好的程序员的。沟通是双方的互动,把自己得信息传达给对方,再从对方获得反馈,如此循环往复。那就先说说把自己这一方的信息准确地传达出去的能力。首先是写报告。程序员经常要写日报,周报,月报,在很多人的眼里,这是一个可有可无,对日常工作没有什么帮助的体力活。可是真的是这样么?报告里面要记录自己完成了什么工作,出了什么问题,怎么解决之类的一些信息,可是作用不仅此而已,还有更重要的作用。责任的分散。这出现在工作中发生问题的时候,想象一下,如果出现了一个 bug ,出于某种目的,你没有及时把这个情况告诉别人,而是想自己解决,这种情况下,关于这个问题的所有责任全部压在了你自己身上,解决了到还好办,解决不了的话,相关模块,甚至整个项目都要受到牵连,你需要负这个责任。如果你能把这个信息通过日常报告及时传达出去,那么大家都会知道这件事情,那么这个问题的责任就不是你自己的了,而是整个团队的,团队的力量是无穷的,那个问题会很快迎刃而解。说到这里,或许有点推卸责任的意思,其实不然,项目的进行要以成功为目的,以团队协作为手段,任何问题都不是个人的,而是大家的,你也没有必要没有权利去规避任何问题,公布出来,更有利于项目的顺利进行。防止问题的发生。个人的能力毕竟是有限的,由于经验的不足,知识的欠缺会导致对某些问题的判断失误。这种时候,你如果能把对某个问题的分析判断以报告的形式公布出来,那么比你更有经验的人就会注意到你的判断中的失误以及遗漏,及时指出来也就避免了问题的发生,节省了由此而发生的各种成本。经验的借鉴。发生了问题,报告出来,有经验的人回来帮助你解决,你也会跟着学习处理这种问题的方法和技巧。消除上司的不安。一项工作布置给你了,进行到什么程度了,有没有什么问题,这是上司比较关心的问题。如果能够及时汇报的话,就会让上司及时掌握工作的进行情况,有利于工作更好的进行。构筑良好的信任关系。常常把自己的工作情况予以汇报,减少了别人对你的担心,很容易让别人对你产生信任。取信于人的好处就不多说了。
       报告的形式。报告的形式有多种多样,但是其基本模式并没有太多变化。这里分两类进行说明。
第一类,初级程序员的报告。谁都有从菜鸟走过的历程,作为初级程序员更多的是从别人那里获取经验,而日常的报告是一个比较有效的途径和工具。报告的形式应该是这样:
现状   描述一下现在的情况,就是怎么做的,都做了什么
预测   根据自己的判断预测一下进行的情况
确认   询问自己的判断有没有什么问题
而出现了问题的时候除了描述现状和分析一下问题之外,第三个就应该询问该采取什么对策了。

第二类,初级以上程序员的报告。作为有经验的程序员,对很多问题都有自己的分析和解决方法了。所以这时候的报告就没有必要老是询问,更多的是自己的主张和建议,但是注意一定要把自己的判断的根据说清楚,跟论文一样,通过论据和论证来让你的论点成立。

汇报前需要考虑什么?

       最重要最基本的是需要好好想想我到底要传达什么。但是这个时候要注意,自己想传达的信息和自己应该传达的信息是不一样的。应该好好想想你汇报的对象最想从你的报告里面获取什么信息,什么信息对当前的工作顺利进行最有用,当然一切要以事实为基础,不能为了取悦别人而说假话。

以上就是有关写汇报的一些介绍。应该这么说,这些信息对技术提高没什么用,但是对如何做好自己的工作或多或少有所帮助。因为程序员的工作并不是仅仅面对计算机,还要面对各种各样角色的人和各种各样的问题,能把自己这边的信息,准确有效的传达出去,有利于一切工作的顺利进行。另,强力推荐大家看余世维的有效沟通系列录像,一定会有所收获的。


之四——信息整理的能力

        会议的资料不知道哪里去了。

        以前的一个客户的名片没有了。

        那个有关需求定义的电子邮件找不到了。

        某某类的设计文档在哪里?
       日常工作中,有各种各样的找不到的情况,想找却找不到东西也是五花八门,但是归根结底,我们找不到并不是什么东西,而是附着于该物体上的信息。解决这个问题的最好办法就是分类整理。分类整理的意思就是按照一定的标准,把符合这个标准的信息发到一起,便于查找。

       分类的标准,大体上也就五个。类别,时间,位置,字母顺序,还有某一个数值的大小高低。所谓分类整理也就是适当的运用这几个分类标准对各种信息进行归纳分类。学问就在这个适当运用四个字上,那么什么样的分类才算适当呢?

       首先,不要分的过细。就拿类别标准来说,个个类别之间应该是排他的,不能互相有重叠的部分。如果类别分的过细,很容易出现某一个信息,既属于 A, 又可以属于 B 的情况,这个时候你怎么办,那就再造一个 C 吧,专门存放这类信息,那么你的分类就会越来越多,这就直接导致了想找什么找不到的局面。

      其次,分类而不是分离。相关的几个信息,可能有的打印在 A4 的纸上,有的存在电子邮件里面,有的印在名片上,这是一种信息的分离。分类与分离的不同点是,前者是根据内容来分的,后者是根据形式来分的。所以,相关的信息不限于其形式,尽量把它们整理到一起,不要让它们因为不同的形式而分开。

        下面说说几个具体技巧:

       一: 减少纸张的使用。软件开发中,各种各样的信息,不是存在于纸张上,就是存在于电脑里面,作为整天与电脑打交道的程序员,或许更喜欢把各种信息整理到电脑里面,那么下面的方法或许对你有用。日常的联络方式有邮件,面谈和电话,程序员或许都比较喜欢用邮件,但是因为电话和面谈的迅速与直接我们很多时候也是通过这些来进行交流的。那么,最好养成一个习惯,谈完的事情,要在邮件里面整理一下留作备份,也可以给对方发过去予以确认。无论如何都只有通过纸张来保存信息的情况下,最好能通过扫描把信息数字化。

       二:纸张信息的整理。上面说到减少纸张的使用,但是现实是纸张也确实有其优势,例如,看起来舒服等等。那么纸张的信息该如何整理呢?这里介绍一个按照时间来分类整理的方法。把相关资料放到一个档案袋里面(文件夹也行,随你喜欢),然后在外面写上日期,题目,在书架上由左向右开始摆,使用过的档案袋,放回的时候要放回左边。这样有两个好处,最新的资料和经常使用的资料总是在最左边,想找的信息一下子就能找到,而右边的资料就是使用率最低的了,合适的时候就可以扔掉。

       三:数字信息的整理。程序员的电脑里面有各种各样的资料,工具,程序等等,不好好整理的话,别说找,时间长了自己有什么都忘了。但是说实话,这种理并不是很好做的,但是首先自己一定要有这种意识。邮件的分类,文档的分类,程序的分类等等。另外,有好多桌面工具都可以用来整理自己的资料。只有一个原则,要严格按照自己的分类来存放资料,有时候因为懒惰,随手就把资料存放到桌面上了,那么以后桌面上的东西就会越来越多,弄得你想找个我的电脑都找不到,随手一放,贻害无穷。不要懒惰,严格执行应该是最有效的办法。

        以上,就是有信息整理的一些介绍。突然想到一句题外话,好像是听余世维的讲座听到的,美国的珍珠港被炸了很多年后,才在他们的文件堆里面发现了国民党政府发给他们的警告,告诉他们日本会袭击他们的珍珠港。其实,任何没有整理好的信息,没人愿意去看,包括你自己。那就啥话都别说了,开始干吧。


之五——把握十分钟的能力
        不知道大家周围有没有这种情况。工作内容大致相同,但是不同的人,工作进行的速度是不一样的。有的人累死累活好不容易赶在交付期限前把工作完成,有的人不怎么加班却能提前把设计书以及代码交付。同时,后者往往不知什么时候,学习了别人还没来得及去学的新知识,对最近出现的新技术要点也了然于胸。如果你的周围有后面这种人的话,恭喜你,赶紧向他讨教。其实,后面这种人如果不是绝顶聪明,那么他一定是具备了别人所不具备的把握时间的能力。这种能力就是把握十分钟的能力。

    不妨想一下,给你 10 分钟你能干什么,或许你说,做什么都做不完,那么给你一个小时呢,其实 1 个小时不也就是 6 个十分钟组成的,如果你认为 10 分钟什么也做不了的话,那么你就真的什么也做不了。可是有的人却能将这十分钟活用起来,充分的发挥了 10 分钟的威力。细想想,一天里面零散的十分钟有多少?等车的十分钟,开始工作前的十分钟,吃完午饭的十分钟等等,能不能用好这样的十分钟,决定了你的工作能不能有效率的进行。那么该怎么用呢,举几例子来说说读书的十分钟。假如等车的话,不妨把等车的十分钟利用起来读书。其实也不一定要是书,什么材料都可以,只要你认为对你有用的。这样做的目的只有一个,就是知识储备。这直接决定了你能不能快速解决客户提出的问题,完成上司交给的工作。常常听到要抽出一段时间学习什么什么这样的话,真的能抽出时间么,如果真的如自己所愿能抽出时间的话,那我很羡慕你的运气,如果不能,我想利用好琐碎的十分钟也是一个很好的方法。个人推荐的实践是,把自己感兴趣又没有时间读的技术资料打印出来,也就是 10 分钟左右能读完的那种,放在随身携带的包里,如果有这样的十分钟,就拿出来读一读。例如,我想了解 AOP 方面的知识,利用 10 分钟时间上网搜集一下材料,把涉及基本概念的打印出来,如果有十分钟的空余,就读一下,不明白的记下来,再利用十分钟去网上搜索一下,不断的这样循环,我想有个十天半个月,等车的功夫,你就能领会 AOP 的要义了。读的时候最好随身带一支笔,便读边做个记号。

       记忆的十分钟。最好的利用琐碎的时间方法莫过于记忆。技术人员有好多需要记忆的东西,环境的配置参数, API 的接口定义,设计模式的使用环境,利用琐碎的十分钟,不妨试着背一下这些东西,用的时候也就不用去查文档看资料了,也就比别人省出好多时间。有人说重复是最好的记忆方法,这样的十分钟用来进行重复记忆最好不过了,第一次没记住或者没记全不要紧,下一个十分钟再拿出来看看,再有这样的十分钟再拿出来看看,几次也就记住了。

     会议前的十分钟。开会前的十分钟也很重要。至少得把会议相关资料扫一眼吧,要不然开什么会都不知道。 那跟演什么电影都不知道就去看电影有什么区别,毫无目的性。如果能大致了解一下会议的相关资料,那么你就能准确把握会议的重点,快速察觉别人发言里面的问题,不是什么会都没有用的,关键是你抱着什么态度去开会。

       休息的十分钟。休息的十分钟对程序员来说是非常重要的,你可以利用十分钟闭目养神,或者打个盹,睡不着的话,不如在座位上做个伸展运动,把四肢尽量向前伸,可以放松全身。总之,工作中的 1 个小时里面,抽出十分钟来稍微放松休息一下,余下的 50 分钟你会工作的更有效率。尤其是解决项目中出现的问题的时候,不要一个劲的拼命解决,适当的休息一下,或许会给你带来意想不到的收获。张弛有度,才能体会到工作得快乐。我就经常在坐车的时候突然想到一个问题的解决方案。

       不浪费属于你的十分钟,首先你要明白给你十分钟你能干什么,回邮件,技术调查,寻找Sample Code等等,总之,意识决定行动,你觉得十分钟很宝贵的话,你就会自然而然的运用好它。另外,充分利用十分钟的时候,需要注意要保持所作的事情的连续性,读书的话,不妨把读到的那一页折一下,工作的话不妨作个笔记,记录一下自己现在做到哪里了,就是说要知道自己现在处于什么位置。这种记录并不是仅仅为了备忘,更重要的是让你明确自己所作的工作。其次要明白什么事情不适于在十分钟里做。日常工作中,还是某种程度上需要大块的时间的工作比较多,给你 6 个间断的十分钟,你并不能完成平常需要整整一个小时才能做完的工作。所以做事的时候要有所选择和区别,什么工作可以利用琐碎的时间来完成,什么工作不行,不行的就尽量保证有大块的时间来做。

       以上总结了一下运用十分钟的能力。其实,琐碎的时间很多,平常不用就根本看不出它们的作用,有意识的好好利用一下,你会发现,有好多工作根本不需要加班就能完成。当然了,如果你愿意加班而且你们公司愿意给你加班费的话,就算我没说。


之六——不被别人替代的能力
       对于程序员来说,什么最重要?
       最重要的莫过于对技术的掌握,可是应该还有更重要的东西,那就是思考的能力。   作为有一定经验的程序员来说,会发现学到的并运用的知识大体上分为两类,就是比较具体的知识和相对来说不那么具体的知识,例如:
    Oracle 的性能优化有关的设置项目
    Java 语言里面字符串的各种 method 的使用
    Unix 负载测量的方法。
    这些都可以说是比较具体的知识,基本上的类型都是 how to 。学习这样的知识,最好的方法就是读书,上网读读文档,也就是说经过一定的学习和训练就能掌握的知识。通过一定的学习,每个人对这些知识的掌握不会有太大差别,换句话说,这些知识就是属于那种查一下书就知道的那种。当然了,还有另外一种,看看下面的例子。

    从客户那里获取需求的方法。

    项目的进行中顺利的进行沟通的方法。

    对于业务信息化的要求,决定采取什么样的技术的思考能力。

这些知识相对来说不是很具体,比较抽象,正因为比较抽象,所以获取这些知识的途径和方法并不是很明确。而且,同样的学习每个人的所掌握得程度也不一样。就拿顺利沟通来说,不和很多人进行实际的交往和沟通,不经历过一些失败和挫折,不尝试一些好的沟通方法和技巧,并不断的总结,光看书是不会学习到如何沟通的。

      那么这两种知识哪一种更有价值就不言自明了,一百个程序员里面有一百个人会说第二种更有价值,更有用。那么我们不妨再考虑一下,换一个角度,不作为程序员而作为公司的管理者来来考虑这个问题。对公司来说,熟练使用 java 和 oracle 的人有很多,光考虑这一点的话, A,B 两个人,雇谁都一样,也就是说,如果光具有前面所说的具体的知识的话,你跟别人没有任何差别,没有差别说白了也就是没有竞争优势。你可能会想,那么我学点 .net, 再来点 python,这样总算可以了吧。其实,只要是技术,存在即有其存在的价值和理由,那么就肯定会有人掌握这些东西 , 也就是说,只要出钱,公司一样能找到这样的人来代替你。

       中国那么多程序员,但是熟悉这个行业的人都清楚地知道,好的程序员还是很少,大家都去学习 java, 都去学习struct,spring,hibernate, 每个人好像都是很了不起,当你骄傲的时候,不妨想一想,你是不是不可替代的,你能不能做别人不能做的事情。要做一个一流的程序员,具体的知识当然要学习,同时更应该去学习那些抽象的知识。对于一个项目来说,那些只懂技术的程序员就是一个标准件,标准件对公司的好处就是替换起来很容易。那么,好的程序员,在项目中起到举足轻重的作用,别人无法替代,做这样的程序员才应该是我们的目标。

       再举一个例子,我们都有过参加这种会议的经验,负责企划的部门和负责技术的部门一起开会,企划一方经常会提出各种方案并向技术部门询问其可行性,而技术部门的人,马上就说不能实现,并且用各种各样技术词汇来解释为什么不行,企划的一方,根本不懂这些技术词汇,会议也就不欢而散了。在这种情况下,一个好的程序员就会说,这个根据目前的情况还不能判断能不能实现,在我们做出 Yes 或者 No 这样的结论之前,不妨好好想想怎么才能实现。这样的话,会议的气氛就会向思考“怎么做才能实现”这样的积极的方向发展,大家也都会更有兴趣。

      写程序,写设计书,管理自己的日程这些都是最最基本的素质,仅有这些并不会成为一个好的程序员。好的程序员应该是不断地考虑,如何让项目顺利的进行,如何让对方积极的回应你的意见,并付诸于实践,而且能够实现。这样的程序员,才具有了别人不可替代的价值。

       那么如何成为这种不可替代的程序员呢?没有特别好的方法,建议到有一个。就是在日常的工作中有意识的要求自己去具有这种能力,不断的考虑,现在的自己应该如何思考才能成为一个不可替代的人,自己在哪些方面还有所欠缺,不断的想这些问题,不知不觉也就有了去深入思考的潜意识,具有了这种潜意识之后,你平常所作的事情都会不知不觉地向这个目标靠拢,一切都是在不知不觉中进行的,这是第一步,也是最关键的一步。写到这里,我不禁想起了前一阵在一个 Forum 里面听的一个人力资源方面的讲座,讲座的老师就提出了一个社会人要有能不依赖于公司的能力,这种能力是什么,说简单了就是离了公司你能活的很好,再进一步的话,就是公司离了你损失很大。成为这种人,人生的选择就会更加自由了。我想具有不依赖公司的能力与这里面所说的做一个好的别人无法替代的程序员的提法是比较统一的,只是从不同的角度阐述而已。

       如果从谈技术的角度来看的话,做一个好的程序员并不是会使用最新的技术,会使用什么什么框架,而是有良好,全面,扎实的基础。技术的发展并不是跳跃的,而是连续的,任何的一个所谓的新技术,无非是某一个旧知识的重新包装和整合,东西还是那么多东西,只不过用的方法和方式不一样了。如果有一个好的基础,无论什么东西,你都会快速理解,看透其本质,掌握其精髓。但是任何一个人,都不可能一开始就把基础打得天衣无缝,一个好的程序员的学习曲线我想应该是上上下下的,学习上面的新技术的同时,静下心来好好学习一下相关的底层的基础知识,不断的循环往复,不断的积累,并且不浮躁,应该是一个成为好的程序员的途径。

 

之七——倾听的能力

       有很多程序员常常为不会说话而烦恼,那不如先去学会倾听。造物主给我们两个耳朵,一个嘴巴,或许就是暗示我们要多听少说。能够很好的倾听,引导对方把他自己希望表达的内容表达出来并获取自己一方所需要的信息,是一个看似简单其实颇具挑战性的实践能力。其实应该认识到,良好的倾听是解决问题的一个重要开始。在软件开发中,首先是获取客户需求,作为信息接收得一方,需要良好的倾听能力。当客户发现他说的内容并没有被真正理解和接受的时候,会感到不安和不满,更严重的是明明没有听懂却作出一副听懂的样子迷惑了客户,结果作出的东西根本不符合要求,这种失败的例子并不少见。

       那么如何才能进行良好的倾听呢?与其去寻求一些倾听的技巧不如先从最最基础的细节做起,细节做好了自然而然也就掌握了倾听的技巧。

       倾听的表情从微笑开始。微笑的人给人以好感,所以要让人对你有好感的话,不妨先微笑对人。用软件行业的行话来说,就是把倾听时的缺省表情设置为微笑。当然了,随着对方表述内容的不同,表情是应该不断的变化的。

       点头。说话人的行动很容易受到听众的影响而变化。如果听众对自己讲话表现出完全不感兴趣态度,那么说话人的信心和积极性就会受到打击。所以,作为一个会倾听人,应该传达给说话者这样的信息,就是我正在津津有味的听你在说话。最有效的方法就是点头。即使不完全同意对方的观点也应该点头,这不是谄媚,而是告诉对方我听懂了你说得话。

        赞许。对说话人最大的褒奖就是听众都同意他所说的话。所以,如果真的觉得对方说的很对,不要吝啬,把你的赞许通过你的眼神和态度表示出来吧。

        疑问。 如果说话人的传达的信息你不能马上理解或者存在疑问,那么也不用客气,表达出来。虽然多少会打击对方的情绪,但是同时也告诉对方你是在认真倾听,并且特别希望理解对方的意思。好的倾听必然伴随着好的发问,记得小时候老师常常告诉我们,不要羞于问问题,因为能问问题的学生才是听懂了课的学生。日语里面把听和问都用汉字闻来表达,我想也是有一定道理的。

       下面介绍一下发问时需要注意的地方。首先要明确问问题并不可耻。有很多人会觉得问别人是一件让人不好意思的事情,因为会让人觉得自己能力不行。这是完全错误的,问问题并不是说明自己不行,而是为了更好的解决问题而进行的信息收集,所以,不要害怕和退却,大胆的问你想问的问题吧,然那些嘲笑你的人见鬼去。自己的发问得不到对方的回答这种情况也经常出现。解决这个问题,就需要在问问题的同时也把对方应该回答这个问题的理由说明一下。一般来讲,应该从以下几个方面说明。

       问题意图的说明。有时候为了消除对方的疑问和不信任感,必须向被询问一方说明我为什么要向你询问这个问题,不妨同时有礼貌的请对方腾出时间来回答这个问题。最重要的一条就是要告诉对方我问这个问题是为了对方的利益着想,这样对方也会很认真的来回答你的问题先调查后发问对方和你一样,工作也很忙。所以,问问题之前,尽可能的自己多做一些调查,将自己需要问的内容具体化。让对方觉得你并不是一味等着人来教你,你自己也主动学习了很多,当然有不明白的地方,就需要对方来解答了。这种时候,大部分人都很乐意帮助你的。

       显示关心。交流的过程中也有不顺畅的时候,这时候不妨对对方的情况显示一下关心,询问一下对方工作中遇到的不快,和他们聊聊工作的辛苦,赞许一下他们的长处。从人的心理角度出发,很多人都喜欢将自己的辛苦和得意之处跟别人说,不妨借用这个来让你们的交流更顺畅。

       想得到具体的回答,就需要问具体的问题。问一个比较抽象的问题,对方往往不知道应该怎么回答,即使勉强回答了,答案也未必是你所需要的。所以问题越具体越好。所谓具体就是把该问题的前因后果以及关联的信息都提供给对方,这样对方才能作出比较满意的回答。

       预先判断。问对方问题的时候,应该对对方会如何回答这个问题做一个假设和预先判断。这么做的目的是让自己的问题更加明了,让对方更容易回答,同时还可以随时判断对方的回答是不是自己想要的,如果不是,还可以进一步发问。

      最后,说一下问问题分为闭式发问和开式发问。

      所谓闭式发问就是需要对方回答 YES 或者 NO 的问题。优点:问题意图明确,对方不需要过多思考。缺点:发问方要做很多工作,将问题具体化对方选择的余地变小。

       所谓开式发问就是不能仅仅回答 YES 或者 NO 的问题。优点:不用过多考虑问题的细节,对方选择的余地很大。缺点:容易导致所答非所问,给对方以思考的负担,有时对方会无法回答。

 

之八——说话的能力
       如果你已经是善于倾听了,下一步不妨提高自己说的能力。或许有人经常苦恼于别人总是不好好听自己的说话,这里面的主要原因正是你自己。

       语言交流虽然方便迅速,但是说出去的话,泼出去的水,很快就消失于无形,被人们所忘记。所以,如何良好的表达自己的意思,如何让听众准确地理解自己的思想,是一个很值得研究和学习的课题。

     下面列举了几个在语言交流中容易出现的问题以及应对之策。

      听众的态度问题。听众如果没有以认真的姿态来听你讲话,那么你讲多少都是没用的,得不到良好的反馈。这种情况下,自己如果一味的从最重要的部分开始讲起,往往达不到预期的效果或者效果很差,不得不重新再讲一遍。对一件事情重复多次的经历,我想谁都有过,费了很大力气,效率还不高。这种问题的对策很简单,就是在说话之前先把自己要说的内容作一个简单的概括。例如,今天我们要对今后项目中使用的文档列表做一个说明。这样做有两个好处,其一,先抛出题目,可以引起对方的注意力,大家听你的话的就不会漫不经心,其二,明确了题目之后,建立了一个上下文,有助于大家理解你的话。

     话语的逻辑难于把握。说完的话,很快也就消失了,不要指望你说的任何东西都会被别人记住,那是不可能的,所以,说话的过程中,听众往往对你所说的内容的逻辑关系,前后顺序感到迷惑。这种问题的对策就是,承前启后。说话的过程中,说完一个小题目之后,总结一下刚才说的话,然后再简单扼要的说明一下下面要说的内容。这有助于听众了解你的说话的来龙去脉,并对你现在所说的内容在整体之中的位置有一个良好的把握。

       没听到的内容再也无法弥补。这个经验大家都有,一个不注意,刚才讲什么就不知道了。要不然上课老师老是强调认真听讲呢。最简单的对策就是把自己讲话内容里面重要的部分不断的重复,多给听众理解你的机会,也是为了自己好。

      上面列举了几个说话过程中容易出现的问题以及应对策略,下面谈一谈在谈话交流中比较实用的一些技巧。

      重复对方的话。重复对方的话,意思并不是简单的重复,而是提示对方希望对方能把这部分再详细说明或者用更简单易懂的方式进行说明。举个例子,对方说这部分内容比较重要。如果你不明白为什么重要,不妨说一句,这部分是么?这时候,对方就会将话题深入下去,解释为什么重要了。

      总结对方的话。谈话的过程中在适当的时机对对方的话进行总结是一个很好的方法,不仅可以明确论点和主张,也有利于对方了解自己的话是不是被你正确地理解了。例如,我想您说的是不是这么一回事?您看我这么理解行么?等等。

       用沉默来让对方发话或者做决断。沉默是金,谈话中的沉默表达出的是更为复杂丰富的内容。持续一段时间的沉默,会让对方意识到是该自己说些什么的时候了。沉默的好处是,让对方自己来决定作什么,而不是通过询问来强制对方作出反应,往往不会引起反感。

        说话之前想象一下对方的反应。想象一下,写完报告书后,自己总要再看一边,看看有没有错别字,标点符号的错误,排版的错误。可是,对于说话,我们往往就没有那么多耐心了。不过,为了事后不后悔,在说话之前我们应该想象一下对方的反应。

        不说“不“。对方表述了自己的意见后,如果与自己的想法不同,一般来讲有三种回答的方式,虽然传达的是同样的内容和意思,但是传达的方式不一样,给人的印象也是不一样的。

      直接说不。这是最直接的说法,直接表明了彼此立场的不同。

       Yes,but. 这种说法的意思就是,我仔细倾听了你的意见,但是我还是主张自己的意见是正确地。

       Yes,and. 这种说法的意思是在充分尊重对方的意见的基础上,更进一步提出自己的看法。

       举个例子来说,对方说,能不能再快点完成?你的回答有三种方式。

       不,再不能快了。

        我明白你想让我们快点完成,可是为了保证质量,我们需要更多的时间。

        是呀,确实需要快点完成,正因为这样,这块的工作才需要充足的时间来保证做好。

        上述的第三个方式应该是比较聪明的回答方式。为什么呢?意见的交流都是建立在有共同的利益的基础之上的,反过来说,没有共同的利益,也就没有交流的必要了。所以,交流的过程中不要让意见对立起来(就是直接说 NO 的做法),而是尽量的求同存异,这样,对双方都有好处。交流的目的也是为了双赢,而不是为了让自己去说服别人。找到一个双方都认同的基点,之后的工作会更好的进行。

 

/* 深表歉意,程序员的能力系列没有写完,感觉非常对不起曾经支持自己的朋友。那本书借给朋友之后就再也没回来,无法进行其他能力的说明和解释。感觉自己没有做好应该做的事情,深表歉意!*/


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 54, comments - 5, trackbacks - 0, articles - 2

Copyright © 傅先生