龙斌's profileﺴ۩→龍の地盘™←۩ﺴPhotosBlogListsMore Tools Help

Blog


    7/16/2008

    乱谈--需求

    某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”
    男孩反问:“是无声枪么?”
    “不是。”
    “枪声有多大?”
    “80~100分贝。”
    “那就是说会震的耳朵疼?”
    “是。”
    “在这个城市里打鸟犯不犯法?”
    ‘不犯。”
    “您确定那只鸟真的被打死啦?”
    “确定。”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”
    “OK。鸟里有没有聋子?”
    “没有。”
    “有没有关在笼子里的?”
    “没有。”
    “边上还有没有其他的树,树上还有没有其他鸟?”
    “没有。”
    “方圆十里呢?”
    “就这么一棵树!”
    “有没有残疾或饿的飞不动的鸟?”
    “没有,都身体倍棒。”
    “算不算怀孕肚子里的小鸟?”
    “都是公的。”
    “都不可能怀孕?”
    “………,决不可能。”
    “打鸟的人眼里有没有花?保证是十只?”
    “没有花,就十只。”
    老师脑门上的汗已经流下来了,下课铃响起,但男孩仍继续问:“有没有傻的不怕死的?”
    “都怕死。”
    “有没有因为情侣被打中,自己留下来的?”
    “笨蛋,之前不是说都是公的嘛!”
    “同志可不可以啊!”
    “…………,性取向都很正常!”
    “会不会一枪打死两只?”
    “不会。”
    “一枪打死三只呢?”
    “不会。”
    “四只呢?”
    “更不会!”
    “五只呢?”
    “绝对不会!!!”
    “那六只总有可能吧?”
    “除非你他妈的是猪生的才有可能!”
    “…好吧,那么所有的鸟都可以自由活动么?”
    “完全可以。”
    “它们受到惊吓起飞时会不会惊慌失措而互相撞上?”
    “不会,每只鸟都装有卫星导航系统,而且可以自动飞行。”
    “恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
    老师当即倒!
     
    虽然这只是一则笑话,但是我觉得其中小孩子那种打破砂锅问到底的方式却不是现在我们系统开发前的需求分析所能够都达到的,这也间接导致了系统开发周期的延长,不断的需求变更以及之后的低可维护性。其实做需求调研的时候最重要的目的在于资料收集,或许小孩的那种打破砂锅的方式会引起客户的反感,但是实际项目中往往需要的就是这些比较周全的调研方式,能够考虑到的问题点都需要和客户确认,尽量避免想当然的做法,只是采用的方式可能需要优化一下,采用良好的方式,这样才能够对系统作出一个良好的设计,制订出周全的开发开发计划。其实良好周密的前期需求分析反而更有利于之后的开发维护以及进度的保持。
    3/2/2008

    世界编程语言排行榜08年02月

    Position
    Feb 2008

    Position
    Feb 2007

    Delta in Position Programming Language

    Ratings
    Feb 2008

    Delta
    Feb 2007

    Status
    1 1 Java 21.483% +2.50% A
    2 2 C 14.859% -1.24% A
    3 5 (Visual) Basic 11.604% +3.24% A
    4 4 PHP 9.890% +1.04% A
    5 3 C++ 9.274% -1.49% A
    6 6 Perl 6.205% +0.13% A
    7 7 Python 4.763% +1.20% A
    8 8 C# 4.510% +1.32% A
    9 12 Delphi 2.798% +0.72% A
    10 9 JavaScript 2.334% -0.65% A
    11 10 Ruby 1.862% -0.67% A
    12 15 D 1.190% -0.01% A
    13 13 PL/SQL 0.981% -0.65% A
    14 11 SAS 0.949% -1.38% A
    15 18 COBOL 0.842% +0.19% A
    16 22 FoxPro/xBase 0.538% +0.02% B
    17 19 Pascal 0.445% -0.15% B
    18 44 Lua 0.388% +0.27% B
    19 17 Ada 0.385% -0.28% B
    20 16 Lisp/Scheme 0.354% -0.37% B
    2/16/2008

    常用javascript语句

    1. document.write( " "); 输出语句
    2.JS中的注释为//
    3.传统的HTML文档顺序是:document- >html- >(head,body)
    4.一个浏览器窗口中的DOM顺序是:window- >(navigator,screen,history,location,document)
    5.得到表单中元素的名称和值:document.getElementById( "表单中元素的ID號 ").name(或value)
    6.一个小写转大写的JS: document.getElementById( "output ").value = document.getElementById( "input ").value.toUpperCase();
    7.JS中的值类型:String,Number,Boolean,Null,Object,Function
    8.JS中的字符型转换成数值型:parseInt(),parseFloat()
    9.JS中的数字转换成字符型:( " " 变量)
    10.JS中的取字符串长度是:(length)
    11.JS中的字符与字符相连接使用 號.
    12.JS中的比较操作符有:==等于,!=不等于, >, >=, <. <=
    13.JS中声明变量使用:var来进行声明
    14.JS中的判定语句结构:if(condition){}else{}
    15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}
    16.循环中止的命令是:break
    17.JS中的函数定义:function functionName([parameter],...){statement[s]}
    18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.
    19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self
    20.状態栏的设置:window.status= "字符 ";
    21.弹出提示信息:window.alert( "字符 ");
    22.弹出確认框:window.confirm();
    23.弹出输入提示框:window.prompt();
    24.指定当前显示链接的位置:window.location.href= "URL "
    25.取出窗体中的所有表单的数量:document.forms.length
    26.关闭文档的输出流:document.close();
    27.字符串追加连接符: =
    28.创建一个文档元素:document.createElement(),document.createTextNode()
    29.得到元素的方法:document.getElementById()
    30.设置表单中所有文本型的成员的值为空:
    var form = window.document.forms[0]
    for (var i = 0; i <form.elements.length;i ){
    if (form.elements.type == "text "){
    form.elements.value = " ";
    }
    }
    31.复选按钮在JS中判定是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)
    32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length
    33.单选按钮组判定是否被选中也是用checked.
    34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来確定被选中的值)
    35.字符串的定义:var myString = new String( "This is lightsword ");
    36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();
    37.返回字符串2在字符串1中出现的位置:String1.indexOf( "String2 ")!=-1则说明没找到.
    38.取字符串中指定位置的一个字符:StringA.charAt(9);
    39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);
    40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n 1))返回隨机数
    41.定义日期型变量:var today = new Date();
    42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注重:此日期时间从0开始计]
    43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames[ "frameName "].ObjFuncVarName,frameName.ObjFuncVarName
    44.parent代表父亲对象,top代表最顶端对象
    45.打开子窗口的父窗口为:opener
    46.表示当前所属的位置:this
    47.当在超链接中调用JS函数时用:(javascript :)来开头后面加函数名
    48.在老的浏览器中不执行此JS: <!-- //-- >
    49.引用一个文件式的JS: <script type= "text/javascript " src= "aaa.js " > </script >
    50.指定在不支持脚本的浏览器显示的HTML: <noscript > </noscript >
    51.当超链和onCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例: <a href= "a.html " >dfsadf </a >
    52.JS的內建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError
    53.JS中的换行:\n
    54.窗口全屏大小: <script >function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen; </script >
    55.JS中的all代表其下层的全部元素
    56.JS中的焦点顺序:document.getElementByid( "表单元素 ").tabIndex = 1
    57.innerHTML的值是表单元素的值:如 <p id= "para " > "how are <em >you </em > " </p >,则innerHTML的值就是:how are <em >you </em > 2.
    58.innerTEXT的值和上面的一样,只不过不会把 <em >这种標记显示出来.
    59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状態.
    60.isDisabled判定是否为禁止状態.disabled设置禁止状態
    61.length取得长度,返回整型数值
    62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc
    63.window.focus()使当前的窗口在所有窗口之前.
    64.blur()指失去焦点.与FOCUS()相反.
    65.select()指元素为选中状態.
    66.防止用户对文本框中输入文本:
    67.取出该元素在页面中出现的数量:document.all.tags( "div(或其它HTML標记符) ").length
    68.JS中分为两种窗体输出:模態和非模態.window.showModaldialog(),window.showModeless()
    69.状態栏文字的设置:window.status= &apos;文字 &apos;,默认的状態栏文字设置:window.defaultStatus = &apos;文字. &apos;;
    70.添加到收藏夹:external.AddFavorite( "http://www.dannyg.com ";, "jaskdlf ");
    71.JS中碰到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;
    72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.
    73.JS中的self指的是当前的窗口
    74.JS中状態栏显示內容:window.status= "內容 "
    75.JS中的top指的是框架集中最顶层的框架
    76.JS中关闭当前的窗口:window.close();
    77.JS中提出是否確认的框:if(confirm( "Are you sure? ")){alert( "ok ");}else{alert( "Not Ok ");}
    78.JS中的窗口重定向:window.navigate( "http://www.sina.com.cn ";);
    79.JS中的打印:window.print()
    80.JS中的提示输入框:window.prompt( "message ", "defaultReply ");
    81.JS中的窗口滚动条:window.scroll(x,y)
    82.JS中的窗口滚动到位置:window.scrollby
    83.JS中设置时间间隔:setInterval( "expr ",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout
    84.JS中的模態显示在IE4 行,在NN中不行:showModalDialog( "URL "[,arguments][,features]);
    85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue= "we really like you and hope you will stay longer. ";}} window.=verifyClose;
    86.当窗体第一次调用时使用的文件句柄:onload()
    87.当窗体关闭时调用的文件句柄:onunload()
    88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname( "/a/a.html "),hash( "#giantGizmo ",指跳转到相应的锚记),href(全部的信息)
    89.window.location.reload()刷新当前页面.
    90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)
    91.document.write()不换行的输出,document.writeln()换行输出
    92.document.body.noWrap=true;防止链接文字折行.
    93.变量名.charAt(第几位),取该变量的第几位的字符.
    94. "abc ".charCodeAt(第几个),返回第几个字符的ASCii码值.
    95.字符串连接:string.concat(string2),或用 =进行连接
    96.变量.indexOf( "字符 ",起始位置),返回第一个出现的位置(从0开始计算)
    97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.
    98.string.match(regExpression),判定字符是否匹配.
    99.string.replace(regExpression,replaceString)替换现有字符串.
    100.string.split(分隔符)返回一个数组存储值.
    101.string.substr(start[,length])取从第几位到指定长度的字符串.
    102.string.toLowerCase()使字符串全部变为小写.
    103.string.toUpperCase()使全部字符变为大写.
    104.parseInt(string[,radix(代表进制)])强制转换成整型.
    105.parseFloat(string[,radix])强制转换成浮点型.
    106.isNaN(变量):测试是否为数值型.
    107.定义常量的要害字:const,定义变量的要害字:var

    12/27/2007

    各种类型的程序员

    #1:甘道夫
    This programmer type looks like a short-list candidate to play Gandalf in The Lord of the Rings. He (or even she!) has a beard halfway to his knees, a goofy looking hat, and may wear a cape or a cloak in the winter. Luckily for the team, this person is just as adept at working magic as Gandalf. Unluckily for the team, they will need to endure hours of stories from Gandalf about how he or she to walk uphill both ways in the snow to drop off the punch cards at the computer room. The Gandalf type is your heaviest hitter, but you try to leave them in the rear and call them up only in times of desperation.
    这种程序员看起来,就像是在《指环王》里扮演甘道夫的最佳候选人。他(甚至是她)有着快要到膝盖的胡子,一顶看起来傻傻的帽子,在冬天可能还会穿一件披风或者是斗篷。对于团队来说幸运的是,此人对自己工作的熟练程度就像甘道夫一样。但不幸的是,他们要经常忍受甘道夫长达数个小时的故事的折磨,而内容主要是关于他或者是她是如何不得不在雪地中上山下山,以把打好孔的纸带送到计算机房。甘道夫类型的程序员是你的究极武器,但是你会总是希望能把他们排到后面,只在快要绝望的时候才向他们寻求帮助。

    #2: The Martyr
    #2:烈士
    In any other profession, The Martyr is simply a “workaholic.” But in the development field, The Martyr goes beyond that and into another dimension. Workaholics at least go home to shower and sleep. The Martyr takes pride in sleeping at the desk amidst empty pizza boxes. The problem is, no one ever asked The Martyr to work like this. And he or she tries to guilt-trip the rest of the team with phrases like, “Yeah, go home and enjoy dinner. I’ll finish up the next three week’s worth of code tonight.”
    对于任何其它职业来说,烈士其实就是一个工作狂而已。但是在开发者的领域,烈士完全进入了另外一个范畴。工作狂至少会回家洗澡睡觉,而烈士们却会以睡在桌子底下的空皮萨盒子堆之中为荣。而问题是,根本就没人要求烈士们像这样工作。而且他或者她总是想用这样的措辞来使团队中的其他人感到内疚,“好的,你们回家吃完饭吧。我会在今晚会完成相当于3个星期的工作量的。”

    #3: Fanboy
    #3:玩家
    Watch out for Fanboy. If he or she corners you, you’re in for a three-hour lecture about the superiority of Dragonball Z compared to Gundam Wing, or why the Playstation 3 is better than the XB 360. Fanboy’s workspace is filled with posters, action figures, and other knick-knacks related to some obsession, most likely imported from Japan. Not only are Fanboys obnoxious to deal with, they often put so much time into the obsession (both in and out of the office) that they have no clue when it comes to doing what they were hired to do.
    小心玩家。如果他或者是她注意到了你,你很有可能就要接受3至4个小时关于龙珠z与高达谁更强、或者是playstation 3 与xbox 360哪个更好的演讲。玩家的桌子上总是堆满了明信片、动作人偶、以及其他各种各样相关的装饰品,大部分可能都是从日本进口的。玩家们不光是很难相处,他们有的时候实在是太多时间在这些东西上(无论是在办公室内外),以至于他们根本就不明白他们什么时候该干老板雇他们做的工作。

    #4: Vince Neil
    #4:文斯 内尔(一个比较有名的摇滚歌手)
    This 40-something is a throwback to 1984 in all of the wrong ways. Sporting big hair, ripped stonewashed jeans, and a bandana here or there, Vince sits in the office humming Bon Jovi and Def Leppard tunes throughout the workday. This would not be so bad if “Pour Some Sugar on Me” was not so darned infectious.
    这个40岁的家伙就像是颠三倒四的回到了1984.运动型爆炸头,发皱泛白的牛仔裤,还有一条大围巾。文斯还会在工作时间坐在办公室哼着Bon Jovi 和 Def Leppard的歌,这本来也不是很糟,如果《Pour Some Sugar on Me》不是如此的有感染力的话。
    Vince is generally a fun person to work with, and actually has a ton of experience, but just never grew up. But Vince becomes a hassle when he or she tries living the rock ‘n roll lifestyle to go with the hair and hi-tops. It’s fairly hard to work with someone who carries a hangover to work every day.
    总体来说,和文斯一起工作是很有趣的,实际上他有丰富的经验,只是永远长不大而已。但是如果文斯决定用他或者是她的摇滚风格来处理自己的头发和生活的时候,情况就会变得很棘手。因为和一个每天都带着宿醉未醒的人一起工作,相当困难。

    #5: The Ninja
    #5:忍者
    The Ninja is your team’s MVP, and no one knows it. Like the legendary assassins, you do not know that The Ninja is even in the building or working, but you discover the evidence in the morning. You fire up the source control system and see that at 4 AM, The Ninja checked in code that addresses the problem you planned to spend all week working on, and you did not even know that The Ninja was aware of the project! See, while you were in Yet Another Meeting, The Ninja was working.
    忍者是你们团队当中的重要人物,但是却没人能意识到这点。就好象传奇刺客一样,你不知道忍者是什么时候工作的,但是你总是在第二天早晨发现他们的成果。于是你急忙打开源代码控制系统,然后发现在临晨4点,忍者提交了一份代码,解决了一个你已经研究了一个星期的问题,而你之前甚至都不知道忍者大人知道你所作的项目的存在。明白了吧,当你还在一次次的开会的时候,忍者一直在工作。
    Ninjas are so stealthy, you might not even know their name, but you know that every project they’re on seems to go much more smoothly. Tread carefully, though. The Ninja is a lone warrior; don’t try to force him or her to work with rank and file.
    忍者是如此的隐蔽,你甚至都不知道他们的名字,但是你知道每一个他们参与的项目都进行的更顺利。不过,注意点,忍者是孤胆战士,不要试图强迫他们在一个严格的等级和文档制度下工作。

    #6: The Theoretician
    #6:理论家
    The Theoretician knows everything there is to know about programming. He or she can spend four hours lecturing about the history of an obscure programming language or providing a proof of how the code you wrote is less than perfectly optimal and may take an extra three nanoseconds to run. The problem is, The Theoretician does not know a thing about software development. When The Theoretician writes code, it is so “elegant” that mere mortals cannot make sense of it. His or her favorite technique is recursion, and every block of code is tweaked to the max, at the expense of timelines and readability.
    理论家知道一切编程需要知道的东西。他或者是她可以花4个小时去探讨一个很冷僻的语言,或者去证明你写的代码是如何的不完美并且有可能会在运行的时候多花3纳秒。问题在于,理论家根本就不知道什么叫软件开发。当理论家写代码的时候,他的代码是如此的“优美”,以至于我们这些凡人根本就看不懂。他或者她最喜爱的技术就是递归,每一个代码块都被使用到了极致,而代价就是工程进度和可读性。
    The Theoretician is also easily distracted. A simple task that should take an hour takes Theoreticians three months, since they decide that the existing tools are not sufficient and they must build new tools to build new libraries to build a whole new system that meets their high standards. The Theoretician can be turned into one of your best players, if you can get him or her to play within the boundaries of the project itself and stop spending time working on The Ultimate Sorting Algorithm.
    理论家还很容易分心。一个花一个小时就能完成的工作,理论家们往往需要三个月。因为他们认为当前的开发工具不够好,所以他们必须开发一些新的工具来构建新的库从而构建一个全新的系统来迎合他们的高标准。理论家可以成为你最好的团队成员,前提是你能让他专注于你们所做的工程本身,而不是把时间都花在究极排序算法上。

    #7: The Code Cowboy
    #7:代码牛仔
    The Code Cowboy is a force of nature that cannot be stopped. He or she is almost always a great programmer and can do work two or three times faster than anyone else. The problem is, at least half of that speed comes by cutting corners. The Code Cowboy feels that checking code into source control takes too long, storing configuration data outside of the code itself takes too long, communicating with anyone else takes too long… you get the idea.
    代码牛仔是一种无法阻止的天性。他或者她几乎总是一个厉害的编程者,并且总是能以别人2至3倍的速度完成工作。问题是,这些代码至少有一半都靠偷工减料得来的。代码牛仔认为把代码提交到源码控制系统太麻烦,把配置信息存贮在代码之外太麻烦,和其它人交流太麻烦……你懂我的意思吧。
    The Code Cowboy’s code is a spaghetti code mess, because he or she was working so quickly that the needed refactoring never happened. Chances are, seven pages’ worth of core functionality looks like the “don’t do this” example of a programming textbook, but it magically works. The Code Cowboy definitely does not play well with others. And if you put two Code Cowboys on the same project, it is guaranteed to fail, as they trample on each other’s changes and shoot each other in the foot.
    代码牛仔的代码就好像意大利面条一样搅在一起,因为他或者她工作的事如此之快,以至于必要的重够都没有做到。很有可能的是,七页长的核心功能代码也许看起来就像是教科书上关于“不要这么做”的示例,而这些代码居然还神奇的可以运行。代码牛仔绝对没办法和别人一起工作。而且,如果你让两个代码牛仔进入同一个工程,那这个工程一定会失败,因为一个总是被另一个人对代码做的修改而干扰,他们总是拼命的在开枪射击自己搭档的脚。
    Put a Code Cowboy on a project where hitting the deadline is more important than doing it right, and the code will be done just before deadline every time. The Code Cowboy is really just a loud, boisterous version of The Ninja. While The Ninja executes with surgical precision, The Code Cowboy is a raging bull and will gore anything that gets in the way.
    当按时完成一个工程比把这个工程做好更重要的时候,把一个代码牛仔加入进去吧,这个工程会在截至日期之前完成的。代码牛仔其实就是一个吵闹版的忍者。只是忍者像做外科手术一样精准的编码,而代码牛仔像一只难以控制的公牛,会把所以挡在它面的东西顶翻。

    #8: The Paratrooper
    #8:伞兵
    You know those movies where a sole commando is air-dropped deep behind enemy lines and comes out with the secret battle plans? That person in a software development shop is The Paratrooper. The Paratrooper is the last resort programmer you send in to save a dying project. Paratroopers lack the patience to work on a long-term assignment, but their best asset is an uncanny ability to learn an unfamiliar codebase and work within it. Other programmers might take weeks or months to learn enough about a project to effectively work on it; The Paratrooper takes hours or days. Paratroopers might not learn enough to work on the core of the code, but the lack of ramp-up time means that they can succeed where an entire team might fail.
    你知道那些电影吧,就是指挥官带着机密作战计划被空降到敌人战线之后。在软件开发中,这样的人叫伞兵。伞兵是你对一个将要失败的工程的最后援助。伞兵们缺乏在一个长期任务上工作的耐心。他们最大的价值是拥有快速学习一堆完全陌生的代码并且使用它们工作的惊人能力。其他程序员也许要花几个星期或者其几个月来熟悉一个工程,以便可以有效的参与其中;伞兵们只需要几个小时或者几天。伞兵快速学会的东西也许不能让他们编写核心代码,但是,没有足够的时间形成一个固定的见解可能会帮助他在整个团队失败的地方取得成功。

    #9: Mediocre Man
    #9:庸才
    “Good enough” is the best you will ever get from Mediocre Man. Don’t let the name fool you; there are female varieties of Mediocre Man too. And he or she always takes longer to produce worse code than anyone else on the team. “Slow and steady barely finishes the race” could describe Mediocre Man’s projects. But Mediocre Man is always just “good enough” to remain employed.
    “足够好了”,这就是你从一个庸才那能听到的最好的话。他或者是她总是花更多的时间写出比团队中其他任何人都更差的代码。“缓慢,刚刚符合要求”就是对庸才所作的项目的描述。但庸才们总是能做的“足够好”,以至于刚好不会被解雇。
    When you interview this type, they can tell you a lot about the projects they’ve been involved with but not much about their actual involvement. Filtering out the Mediocre Man type is fairly easy: Ask for actual details of the work they’ve done, and they suddenly get a case of amnesia. Let them into your organization, though, and it might take years to get rid of them.
    当你面试这种人的时候,他可以告诉你很多他到参与过的项目,但却很少提到他们到底在这些项目里做了什么。筛出这些庸才的方法很简单:问一下他所做工作的细节,他们会突然得了健忘症。但是,一旦让这种人进入你的组织,你可能要花好几年才能再摆脱他们。

    #10: The Evangelist
    #10:传教士
    No matter what kind of environment you have, The Evangelist insists that it can be improved by throwing away all of your tools and processes and replacing them with something else. The Evangelist is actually the opposite of The Theoretician. The Evangelist is outspoken, knows an awful lot about software development, but performs very little actual programming.
    无论你在用哪种编程环境,传教士总会坚持认为如果你把现有的工具和工序抛弃掉并换成其它的一些东西,会对你有很大的帮助。传教士实际上就是理论家的反面。传教士总是直来直去,对软件开发很了解,但却很少真正的去编码。
    The Evangelist is secretly a project manager or department manager at heart but lacks the knowledge or experience to make the jump. So until The Evangelist is able to get into a purely managerial role, everyone else needs to put up with his or her attempts to revolutionize the workplace.
    传教士有一颗项目经理或者部门经理的心,但却缺乏足够的知识或者经验来完成这个跳跃。所以在传教士最终成为一个纯管理者角色之前,其他人不得不一直忍受传教士们对于彻底革新工作环境的尝试。

    不知道现在自己算是哪种类型的,貌似还是很像第7种的,都是托了客户需求一天到晚不停地变的福了,不过也有点向着第五类靠拢了。。。。。。诶,慢慢向着第一类的方向努力吧。。