友好连接

2008年9月23日星期二

帮MM修电脑的三个步骤-此文绝对实用

表演篇 1、一定要打预防针! 在修之前,向MM反复声明,这电脑故障是有硬件和软件之分的,如果是硬件故障,例如显卡风扇不转了,显示器连线老化,显示器分辨率超出显示器指标,等等都会导致黑屏啊,这个我不回家用专门的工具是修不好的!

这样一旦真的没修好,就立刻耸肩膀作无奈装:真的是硬件问题,还是送去保修吧。而MM当作硬件问题去保修,JS大人即使发现是软件问题,也会毫不犹豫作为硬件问题处理,所以决计不会有败露的麻烦

2、重装是万能药方!

不管发生什么,只要MM同意,一律重装系统!这是最简单的方法,虽然很菜。但是如果要感动MM,这也是最好的方法,因为MM会在漫长的等待中觉得你真是很有耐心和爱心的好男人!哈哈哈哈,太阴险了,所以给恐龙修电脑,一般还是对症下药,速战速决,不要绿我,确实当恐龙看上你的时候,你就知道这不是RPWT,而是生命问题!

3、关心要无所不在!

如果选择重装,一定要反复问MM:真的可以吗?MM第一遍一般就说可以,这时候要问:没有重要的照片、文档吗?MM会犹豫,但是还是会说不要好了;这时候接着问:QQ聊天记录也会丢掉的!MM会说不要了;记着这时要作思考状,然后问:有没有重要的邮件啊,邮件也会丢掉的。一般啊,很多MM这个时候会反悔,她们就会觉得你是超级贴心人了。

如果选择打开机箱,一定要作惊讶状!怎么这么多灰尘啊!!!(我只见过一个MM的机箱里没有灰尘的,她是实在太爱干净了)这时候MM一般都会不知道怎么回答,你立刻要作出为电脑难过的样子:这么好的电脑,灰尘太多怎么跑得快啊,散热也会受影响的,当然容易出问题了。哈哈哈哈,MM内疚的同时就会觉得你这个人特别懂得爱惜珍惜疼惜是新好男人。

技术篇:

1、MM电脑出的通常都是弱智问题

所以不要用特别专业的眼光去分析,一般都是系统设置没设置好,例如曾经一个MM,帮她新配的电脑,说音箱左边的不响,过去检查,果然不响,怎么调都只有电流声,心想坏了,买到坏的了,结果不死心一看,音量控制里她全搁到右声道了,昏死!

对于显示屏黑屏这种事情,要多看看显示器开关有没有开,显示器有没有插上电源,显示器线有没有连到主机等等问题!

稍微高级一点,看看BIOS设定,显示器分辨率设定,对比度设定等等再高级一点,看看是不是显卡风扇停转了在有别的电脑的情况下,和别的电脑对调一下显示器看看,容易分辨是不是显示器的问题,但是要注意,要是女生寝室的话,慎用!!!因为女生寝室一般好像关系都不好,就是好也不愿意为别人的电脑奉献自己的电脑,这一点和男生寝室不一样,要鄙视一下!要想帅,带上可以外接显示器的本本去,要轻薄的,2.3kg以上就不要驮过去丢脸了

2、要想酷、拆机箱

不管是不是硬件问题,如果你想MM崇拜到要嫁给你的地步,记住一定要带上一根较大的十字起子,推荐电脑城装机的那种,很长很长的,超帅!我一般带上两根,一个十字头,一个一字头,一个红色有机玻璃柄,一个绿色玻璃柄,就像两把短剑,有了这两柄利器,感觉立马不一样!MM立刻觉得你就是专业的,如果MM看到后觉得害怕,别忘趁势解释一句:修的多了,随身带着方便,你的问题不一定那么大,或许用不上。MM这个时候只会希望自己的电脑坏的彻底一点,好见识你挥动长剑的潇洒身姿!哈哈哈哈,这句是丫丫而已。

3、熟练掌握BIOS设定的窍门是看说明书!

其实很多时候问题和解决问题的方法都在BIOS设定上,例如老肯必须掌握的光驱启动,就在BIOS设定里面,这个时候万一忘记了怎么办,求助于说明书吧!!!其实在说明书中,一般都有详尽的说明,甚至包括常见问题的解决方法,只是MM们比较娇嫩,不适宜阅读这么生硬的文字罢了你的责任就是阅读它们!!!

不要觉得临时看说明书很丢脸!如果说拆机箱可以展现你武的一面,那么你专注阅读的神情正是你展现自己文的一面最好机会!!!能文能武才是你获取MM芳心的致胜法宝,只知道挥着袖子与主板上的灰尘大战的土匪只会让MM觉得这些喜欢硬件的GG都是脏兮兮的疯子。

而你要求获得主板、显卡及其他相关说明书最好的方法,要么就是一开始索要,一 进门就让她把她放这些东西的盒子搬出来放好;要么就是拆开机箱以后,惊讶一句:啊!这不是公版设计,我要看一下出厂时的说明书!!!甭管是什么设计,你这一句话出去,MM只会觉得你暴有水准,一眼就能看出是什么设计,其实她们也不知道什么叫公版设计母版设计的。

感情篇

1、MM的电脑永远都是最好的

MM一般最要面子(当然GG也要,例如老肯),但是找你修电脑总是电脑出了问题,所以你这个时候一定不能在伤口上散盐,切忌在修电脑的时候说:啊这种配置啊,该升级了。或者:这种杂牌的显卡最好不要用。或者:AOC的显示器最烂了。表以为这样可以显示你对硬件市场品牌的了解和个人的品位,这只会让MM恨死你!早期我就犯过类似口不遮拦的错误,结果有一段时间MM们电脑坏了也不敢来找我,唉,前车之鉴啊!

对于MM的电脑,如果牌子好,哪怕是集成主板,也要说这个牌子我最喜欢了,稳定性超好,这次多半是软件问题,D版毛病就是多!(甭管她机子装的系统是不是正版,用的软件总有盗版吧)如果牌子不好,立刻说,这个牌子性价比一直就是最好的,你真会过日子!不要忘记说“你真会过日子”的时候,一定要注视MM面带百分百诚恳的微笑!!!如果真的什么都不行,就是完全该被淘汰的机子,尽量就不要说话了!!!说什么只会让场面更难堪!!!

把电脑当作MM的脸,你就知道该怎么做了!

2、准确把握时间 营造相遇空间

一般MM让你修电脑,如果答谢的话,一般都是请你吃饭,如果她请你吃饭的规格远远超过正常修电脑的花费,不妨检查一下电脑是否有人为破坏的因素对于不同的MM,土匪当然是有的求之不得,有的避之不及因而准确控制维修过程的时间就很重要。这里教初学者一些计算时间的方法:

用GHOST装一个XP系统,一般是25分钟左右(如果你很熟练,20分钟内就够了)用自动方式装一个XP系统,大约是1个小时(具体没算过,如果是烂威盛主板,装 好驱动还不止)装一个OFFICE,大约还是要半个小时(这个可以在自定义里中选择,想拖延时间就全选,大概可以多争取半小时)时间还不到吃饭时间,或者时间到了吃饭时间但是你不想去,都可以通过装软件来慢慢消耗,实在不行,就卸载了多装几遍!

当你长年累月修电脑产生厌烦心理时,推荐使用市面上的高度集成版的XP的GHOST版,一次把乱七八糟的软件都给装上了,整个时间和装一个XP干净系统也差不多,装完就走人,又快又省事如果老肯可以到这个境界的话,应该已经结婚了

3、修理MM电脑的过程也是检查MM人品的过程

实际上利用修电脑这一机会来泡MM的土匪,一般平时都是花了较多时间陪着自己的电脑和网友,没有太多时间和固定场所(例如大学自修室、英语角或者公共社交场所)接触真实MM的人。很多这方面的高手也都是成功地在修好电脑的同时弥补了自己姻缘的缺憾,顺利找到另一半!但是并不是所有的相遇都是美满的结局,这除了土匪个人的RPWT,主要还在于他们在修理电脑的时候没有注意MM们的RPWT。给出一些个人建议:

如果MM只会站在一边看着你修,连杯水都不给你倒,除非她年纪太小太不懂事,不然这样的MM基本不懂关心照顾别人,也不懂尊重别人的劳动和付出。这样的MM若不是超级大美女,还是算了!

如果MM会一直问这问那,特别是如果主要问你为什么要这样修的原因,这种MM不够重视分工,喜欢主导一切,不能够尊重权威和相信理性,娶回家只会让你多一个唠唠叨叨的监工。如果你不喜欢被人呼来唤去,没有自疟倾向,这种MM还是算了!

如果MM一直问你要不要喝水,要不要歇一会儿,还问一些和修电脑无关的情况,例如问你这么好的技术都怎么学来的啊,如果殷勤到一反常态的地步,恭喜你!这个MM想泡你!!!如果这个MM一贯对人热情,那么这种MM属于擅长公关,有很强的管理和组织能力,这种MM也会成为未来家中的主管,但是好在是一种以人为本的管理,你不至于太痛苦这样的MM,只要平时不是那种过分往上爬巴结领导的类型,实际上还算不错的选择

如果MM话并不多,默默地给你倒杯水,然后再一旁看着,不时跑过来帮你递东西,这种是贤妻良母型,是那种甘愿在背后默默支持你的类型,你要是事业主导型的土匪,毫不犹豫泡这个MM吧!!!极品赞不绝口。(就是恐龙也不妨考虑一下)

如果MM给你东西吃,证明对你不见外;从来没见过的MM话,证明对你很有好感!小子,你赚了!

MM站着看你修电脑,有座位不坐,离得近的是关心电脑!离得远的还站着,如果不是眼睛超好的那种,这种MM有同甘共苦的意识,一般富有同情心,比较爱国(自己到时候对照一下)

MM坐着看你修电脑,正常;MM坐着但是不看你,眼光会游移到别的地方或者做自己的小动作,死了心吧!她已经有意中人了!

MM躺着看你修电脑(还真的有!)遇到的都是和我太熟悉的才这样!第一次就这样没遇到过,真有的话,就是RPWT!!!

MM在你修电脑的时候去洗澡了(遇到一次!)这个MM如果不是三天没洗澡,那就是把你当成家人看待了,我觉得关系很熟这样的话就不算什么;如果第一次就这样,建议逃走或者躺下!!!

MM修电脑的时候把父母介绍给你(到她家修电脑)或者给你看她存在电脑上家人的照片,她很希望成为你重要的朋友。

MM修电脑的时候把MM介绍给你,电脑其实没问题,这个MM觉得你人不错,肥水不流外人田,便宜自己的姐妹先;或者她姐妹最近刚失恋,需要找个凯子过渡一下

2008年9月22日星期一

数独游戏的一种解法

最近在北京青年报偶然看到了一个数独游戏的题,具体来说就是按规矩进行填书。自己想了想,觉得还是有点费脑子的。于是就编写了一个程序,可以搜索数独游戏的所有答案。算法很简单,就是使用了回溯+剪枝,效率可能不是很高。不过对于9*9规模不是很大的问题,也应该足够了,不知道大家有什么好的算法,千万别忘了留言告诉我啊,哈哈

数独游戏:






  版权所有



  数独的游戏规则:1.在9×9的大九宫格内,已给定若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字。2.每一行与每一列都有1到9的数字,每个小九宫格里也有1到9的数字,并且一个数字在每行、每列及每个小九宫格里只能出现一次。3.每个数独游戏都可根据给定的数字为线索,推算解答出来。








  短信参与说明:题中有一个待填数字用“★”标示,请将此数字作为答案按要求发送


更多请参见:http://bjyouth.ynet.com/article.jsp?oid=


// shuduyouxi.cpp : Defines the entry point for the console application.

//



#include
"stdafx.h"



#include
<string.h>

//#include <vfw.h>

//#include <mmsystem.h>

#include <windows.h>

int a[9][9] ;

int b[9] ;

int total ;



void print()

{

printf(
"\n");

for(int i = 0;i < 9;i++)

{

for(int j = 0;j < 9;j++)

{

printf(
"%d ",a[i][j]);

}

printf(
"\n");

}

printf(
"\n");

}



//判断x,y所在的小九宫是否已经出现了数字n

bool IsInRect(int x,int y,int n)

{

int k,j;

bool retval = false;

for(k = x;k<x+3;k++)

{

for(j = y;j<y+3;j++)

{

if(a[k][j] == n)

{

return true;

}

}

}

return retval;

}







bool satisfy(int x,int y,int n)

{

bool retval = true;



int j;



//行列判断

for(j = 0;j <9;j++)

{

if(a[j][y] == n a[x][j] == n)

{

retval
= false;

break;

}

}

//如果行列满足,判断小九宫是否满足

if(retval)

{

if(x <3)

x
= 0;

else if(x < 6)

x
= 3;

else if(x < 9)

x
= 6;

if( y < 3)

y
= 0;

else if(y < 6)

y
= 3;

else if(y < 9)

y
= 6;

if(IsInRect(x,y,n))

retval
= false;

}

return retval;

}

void solve(int row,int count)

{

//都已经填满,打印统计

if( row == 8 && count == 0)

{

print();

total
++;

return;

}

if(count == 0)

{

row
+= 1;

count
= b[row];

}



for(int i = 0;i <9 ;i++)

{

if(a[row][i] == 0)

{

for(int j = 1;j <= 9;j++)

{

if(satisfy(row,i,j))

{

a[row][i]
= j;

solve(row,count
-1);

a[row][i]
= 0;

}

}

if(a[row][i] == 0)

return;

}

}





}



bool Usage()

{

bool retval = true;

int select = 0;

printf(
"1 继续\n");

printf(
"2 退出\n");



scanf(
"%d",&select);

if(select == 2)

retval
= false;

return retval;

}



int main(int argc, char* argv[])

{



while(1)

{

if(!Usage())

break;

printf(
"清输入数独矩阵\n");

total
=0;

memset(a,
0,sizeof(a));

memset(b,
0,sizeof(b));



for(int i = 0;i < 9;i++)

{

for(int j = 0;j < 9;j++)

{

scanf(
"%d",&a[i][j]);

if(a[i][j] == 0)

b[i]
++;

}

}



solve(
0,b[0]);



printf(
"共有%d种答案\n",total);

}

return 0;

}





43294235

2008年9月21日星期日

Software Development Lessons Learned from Poker

Posted by Jay Fields on Apr 26, 2008 07:36 AM
Community Architecture, Agile Topics Technology, Collaboration, Artifacts & Tools
Tags Best Practices, Patterns, ThoughtWorks, Checklists and Guides
I wasn't always a software developer. The two years before I joined ThoughtWorks I lived primarily off playing poker. Of course, if you've ever asked me about the tattoo on my forearm, you've already heard the story. If you haven't, feel free to ask me next time we get a drink together.
Jazz is IBM Rational's new technology platform for collaborative software delivery, designed to transform how people work together.
I've never regretted spending so much time playing poker. I believe it taught me quite a few lessons that apply widely to other topics. In fact the more I develop software the more I'm convinced that the two jobs are incredibly similar.
Learning
I approached learning poker the same way I approached learning software development: read as many books as possible. Over the course of 2 years I read every book on poker I could find. I stopped counting at 39. Of course, the same can be true for programming. I have 5 books in front of me right now that are queued up to read next, and I have a large collection of books that I've burned through in the past 3 years with ThoughtWorks.
I consider reading books, blogs, and magazines to be essential for both programming and playing poker, but in both professions reading books isn't good enough. You may be able to keep all the knowledge in your head, but knowing when to apply which rules is the mark of a true professional.
Reading material is great for learning, but it's almost always the context that determines when to apply a certain technique. Since books cannot be specific enough to provide all possible contexts, only experience can give you the ability to be able to make a quick decision that could end up costing you or your employer thousands or even millions of dollars.
There truly is no replacement for experience.
Art at the highest level
You can design a computer program to beat an average poker player. By following basic rules you are guaranteed victory. However, to this day there are no programs that can beat the best poker players. This is because at it's highest levels poker is an art. Of course, the same is true for software development. To become an average developer all you need is a catalog of best practices. If you follow the cookbook you are almost guaranteed to create an average application. Truthfully, that's better than the most common alternative. So many projects fail that, I believe, most managers would gladly pay for an average application.
Of course, some managers have higher standards. At banks, start ups, medical systems, etc the stakes are much higher. Average isn't good enough. These managers are willing to pay for the best and they expect a much higher level of skill. The problem is, expert developers have a different skill set than average developers. Average developers know how to do something, experts know why to do something. Average developers follow patterns books like they are cookbooks, expert developers understand that innovation applied to patterns can lead to exponential performance gains.
Expert developers have such a different view of the world, it can be hard for average developers to interview experts. Being an art critic is easy, being a good art critic is very hard.
Judging skills
One thing is absolutely true about both poker and programming: almost no one is as good as they think they are. Knowing that you aren't as good as you think you are is a good first step, but it's hard to know how much better the experts are. Programmers are rarely exposed to enough experts to fairly judge their own skill level. At the poker table everyone gets together for tournaments, but I'm always very surprised by how highly most people rate their abilities.
The same is true of programmers, but most of them have even less information to work with. The technical leader who never attends a conference has only his team members to compare himself to. Of course, he's the tech lead, so chances are he's already the best. But where does he stand compared to the talent level of the rest of the industry? If he believes he is already on the top of his game, what happens when he meets someone with different opinions? Some are excited about the prospect of learning, but most dismiss contradictory ideas to their own as silly.
Teamwork
To the casual observer poker appears to be a game where it's everyone against everyone. In fact that's rarely the case. Even at the low stakes tables there are generally at least a few people who know each other. These acquaintances don't make deals to take on the rest of the table, they don't have to. It's understood that you don't make money playing poker against people who are good, you make it by playing with them to take the it from those who are not. Professional poker players work even more as a team. Several of them own percentages of each other, thus if any of them win, all of them win. They don't stop by knowing only each other, they know everyone. The floor manager can call them when a good game is going on. The waitress can make strong drinks for their opponents. The dealers can make "mistakes" to upset certain players (rarely do people play well when they are upset). Everyone works together to ensure that everyone gets paid.
Programming is interestingly similar. Many programmers sit in cubes, tackling problems all on their own. These programmers often work with a strong code ownership model. I've seen these developers deliver applications, but integration is almost always a pain point. Unfortunately, integration pain is often the smallest problem. Consider an IT department that locks the business to a 500 page requirement specification. If the business needs to change direction there's often a very painful change request system put in place. Millions are wasted as programmers build features that the business no longer needs, but IT departments haven't found a better way to work with their businesses.
Of course, it doesn't have to be this way. Experts collaborate. Experts collaborate with other expert developers, but also with their managers, customers, business, analysts, quality assurance, and any individual who can contribute to their success. Experts understand the bigger picture: working together ensures everyone gets paid.
Metrics
Aspiring poker players often talk about how many hands they won or lost. Mostly, they talk about hands that they should have won but lost. Sometimes people make mistakes and lose, but they don't usually remember those hands. Conversely, they seem to remember every single detail of each hand they've ever lost where they were simply unlucky. The stories often contain the percentage chance that their opponent had to win. Poker players know how many hands they've lost, and what their chances were to lose. Poker players know metrics. However, professional poker players know to focus on the metrics that matter. It doesn't matter how many hands you win or lose, it matters how much money you win or lose. Furthermore, worrying about your bad beats actually translates to worrying about the poor performance of your opponents. Since you profit from your opponents mistakes, you are essentially complaining about your opponents giving you their money.
Having metrics is good, but professionals know which metrics are important, which are simply noise, and which fall somewhere in between.
Software development also contains many metrics, and many of them receive much more attention than they should. For example, it's very hard to get much value from knowing the number of lines of code. Complex applications require a fair amount of code, but what's fair? It depends on the language, tools, and any number of other factors.
The number of bugs fixed is another less than interesting metric. Why does it matter how many bugs have been fixed? The number of bugs might be valuable, but knowing how many are fixed doesn't really tell us much.
My personal favorite is feature complete percentage. Unless features are estimated for level of effort then knowing how many features have been completed doesn't really tell you much of anything. And, if you already measured level of effort, then why not measure effort of things done with things that aren't done to show progress. It's tough for me to see any value in the feature complete percentage.
Code coverage is a metric that reminds me of keeping track of your bad beats. There's value in the metric, but most people miss the point. Having a low code coverage number means you probably do have a problem, but having a high code coverage number means nothing more than you have a high code coverage number. High code coverage cannot ensure high quality.
People, not Logic
If you've seen any movie with poker in it, you've likely heard: You don't play the cards, you play the person. This is very true. Poker is in incredibly psychological. Sure, you needs cards some of the time, but getting good cards is only part of making money. Once you have good cards, you need to know what to do with them. Should you raise, check-raise, or simply check or call. This choice depends on many factors, but the central factor is knowing the people you are playing against. When you get good cards, your number one goal is to make as much money as you can off of them and the only way to know how to get more money is to know what actions will make your opponents give you more money. Logic helps you win hands, knowing people helps you win money.
People are equally as important in delivering software. If software were simply about making things work, it would be much easier to automate. But, software is about so much more than groups of features. It's about software packages sold over a game of golf. It's about contracts signed during a complimentary trip for the family to Disneyland. It's about fulfilling contracts for software that's no longer needed, to avoid yet another lawsuit. It's about business that needs to change at a rate faster than their competition.
Software development is about every variable related to every person in every organization that uses, developers, maintains, or relies in some way on that one piece of software. There are simply too many variables to apply simple formulas and produce quality software. Instead, the expert software developer needs to take into account all the known and unknown variables that each person introduces and make their best guess. It's helpful to know what you should do, but it's priceless to know what you must do. Logic helps you deliver applications, knowing people helps you deliver value.
Working with Incomplete Information
Beginner poker players have it very easy. Play good hands, always bet, never bluff. That's it, you really shouldn't do anything else while you are first getting started, unless of course you have a bunch of money you want to give away. It's moving up from the beginner level that really is hard. There's so much information coming at you all at once. You need to pay attention to the attitudes of everyone at the table, how they are interacting with each other, what your history is with each individual opponent, what kind of hands they like to play, who's winning, who's losing, and a million other variables. Also, you can't know for sure what the other players are holding and what the next cards are going to be. You have more information than you can handle, and still not all of it.
Programming is no different. Domain experts hold all the knowledge, but it's inefficient for them to try to give you all that domain knowledge up front. Furthermore, you may not need all that domain knowledge. You also need to know your team well, but there are things about your teammates that you will never know or fully understand. Yet, expert programmers can digest necessary domain knowledge, understand their team's dynamics, and consistently provide technical vision. Expert programmers understand that they will never have the entire picture, and they also understand which things are worth considering, and which things need to be disregarded. Despite overwhelming and incomplete information, expert programmers consistently make correct decisions.
Immediate Feedback
Average poker players are better off in poker games that provide less feedback. This is because poker players win money based on information. In a 5 card stud game there is only one round of betting. Only one round for someone to exploit information you've given them and only one round for you to make a mistake. Expert poker players prefer poker games with many rounds. The more rounds there are in a poker game, the more times an expert has an opportunity to exploit a less skilled opponent. Expert poker players appreciate immediate feedback and the ability to vary their play based on that feedback. Poker games with several rounds give you feedback in each round, at which time expert poker players alter their play to fit the current situation.
Expert software developers also value immediate feedback. Immediate feedback from the business can save you from building the wrong domain concept into an application. Immediate feedback from another programmer can point out a bug before software moves to production. Feedback by way of a Continuous Integration server can provide immediate integration feedback, thus easing integration pain. If you prefer Agile, you'll immediately point to Iterations as an obviously beneficial practice of giving both programmers and the business immediate feedback. However, even if you don't agree with Agile, an expert programmer recognizes the value of immediate feedback. Even if you work in a non-Agile environment, an expert programmer seeks as much feedback as possible to avoid wasted time and effort. Immediate feedback lets you know if you are headed in the right direction, and every expert appreciates that information.
Context is King
With poker and programming there are few right and wrong answers. Should you fold Kings before the flop? Maybe. It depends on if you in a tournament or cash game, is it limit or no limit, what seat are you in, has it folded to you already or is it already capped, is the game wild or is it full of rocks, and on and on. One thing I learned about poker is that all those factors and many more must me considered before giving your answer.
The more I program the more I realize the exact same lesson applies to programming. In some situations Java is a good choice, but not all. Of course, the same can be said of almost any programming language. This is true of tools also. Hibernate is great, until it isn't, then maybe IBatis is great, until it isn't and then a new solution needs to be found or crafted. Almost no solution is simply a good thing, instead it's a good thing given the right situation. Given the wrong situation it's a horrible idea.
So, before you dismiss or evangelize your next language or tool, please remember: It depends...

从玩扑克到软件开发

我以前不是做软件开发的。在加入ThoughtWorks两年之前,我主要靠玩扑克为生。当然,如果你曾跟我打听过我前臂上的纹身,那你肯定已然听过我的故事了。要是还没有,等下次我们一起喝一杯时,我可以讲给你听。
我从未因为花这么长时间玩牌而感到过遗憾,从中我学到了一些放之四海而皆准的知识。开发软件的时间愈久,我就愈加确信这二者之间具有令人难以置信的相似性。
学习
我学习打扑克和学习软件开发的方式是一样的:尽可能多读书。我用两年的时间,读完了所能找到的每一本有关扑克的书。最后竟至39本之多。编程亦如是。此刻,我面前仍然摆着接下来要读的5本书;而在过去三年ThoughtWorks的工作中,我放火烧掉的书亦不在少数。
我认为,无论编程还是玩牌,阅读书籍、博客与杂志都是要想有所成就的必备条件;而若要以二者为谋生之业,仅靠读书却是远远不够的。也许你可以把书本上的一切知识都装入脑中,但知道在何时应用何种规则,这才是真正高手的标志。
诚然,开卷有益。但总要走过万里路,方能对应用特定技术的具体环境烂熟于心。书本不可能把所有情况都囊括一空,只有通过亲身体会得来的经验,才能让你在某些状况下为自己或是雇主做出快速而正确的决策,而这些决策可能价值几千乃至数百万美元。
经验之宝贵,世间无物可代。
艺术的巅峰
你可以设计出击败普通扑克玩家的计算机程序。遵守一些基本规则,自然就可获胜。但迄今为止,还没有任何程序可以击败最好的扑克玩家。因为扑克技能达到巅峰时,也就成了一门艺术。软件开发亦如是。要想成为一个还不错的开发者,只要遵循一系列最佳实践即可。如果按照经典参考指南一类的书籍行事,开发出还不错的应用程序应该不成问题,而且效果会胜过其他最常见的做法。有了这么多失败的项目作为前车之鉴,我相信,还不错的应用就足以令大多数管理层甘心掏腰包了。
当然,有些经理有更高的标准。在银行、创业公司、医疗系统等领域,标准则更为严苛。“还不错”自是远远不够。那些经理会很乐意为最佳选择买单,他们期待的是远超常人的技能。但问题在于,专家级程序员的技能与普通程序员不同。普通程序员知道做事的方式;专家知道做事的目的。普通程序员会僵化跟随模式书籍中的指示,就如遵守参考指南一般;专家则明白对模式的创新可能会带来指数级的性能改善。
他们看到的绝非同一个世界,所以普通程序员很难跟专家对面交流。做艺术评论家易,做优秀的艺术评论家难。
决策技能
在扑克和编程中有一条绝对真理:几乎没人能像他自我感觉的那么良好。有自知之明是不错的开始,但人们依然很难知道自己与专家之间的差距。程序员接触专家的机会并不多,也就无法公正评判自己的技能。在牌桌上,每个人都是为了锦标而来,可大多数人都会过高评价自己的牌技,这总是让我惊讶不已。
程序员之间亦是如此,而且大多数人可以获得的信息更少得可怜。一个从不参加任何大会的技术领导人,只能跟自己的团队成员一比高下。当然,他可能已经很优秀了,否则也不会成为技术领导。但如果与整个行业中最出类拔萃的人相比,他又处于什么位置?如果觉得在自己的圈子里已经一览众山小了,那碰到不同意见时,他又会作何反应?有些人会视之为学习的契机并为此感到兴奋,但绝大多数都会对不同意见嗤之以鼻。
团队协作
乍看上去,扑克是一种彼此对抗的游戏。但事实很少如是。即使在赌注最小的牌桌上,通常也至少会有几个人常打交道。他们不会达成条件一致对付牌桌上的其他人——他们也不必如此。大家都明白一条道理:你不是要去跟牌玩得好的人对着干,赢他们的钱,而是要从水平低的人身上赚钱。专业牌手甚至会像一个团队一样协同工作。有些人彼此利益相关,故而一人得利则众人均有收益。他们不仅互相了解,而且认识很多人。如果出现一局精彩牌局,楼层经理会跟他们打招呼;侍者会为他们的对手调制酒精度高的饮品;荷官会故意“犯错”以影响某人心情(很少有人在心情不好的时候能够打好牌)。每个人都在协同工作,确保大家都能挣到钱。
颇为有趣的是,程序员的情况也与之相似。很多人都坐在格子里,完全依赖自己解决问题。他们往往工作在代码个人独有制模式之下。我曾亲眼目睹,在这种程序员交付的应用中,集成问题一直都是大家的心病。而更为不幸的是,集成之痛还只是最小的问题。假设IT部门把业务需求锁定为500页的需求文档。如果公司决定改变业务方向,随之而来的系统变更需求将令人痛不欲生。数以百万计的金钱付诸东流,因为程序员开发的特性已不再具备业务价值,而IT部门还没有找到更好的方式来应对业务变化。
当然,情况并非总是如此。专家懂得协作。他们会跟其他专家协作,但也不排斥与经理、客户、业务部门、分析师、质保人员,以及所有可以为成功贡献力量的人协作。他们胸怀大局:只有协作,才能让每个人有所收获。
度量
雄心勃勃的牌手常常讨论他们赢了多少手牌,又输了多少手。他们讨论最多的还是本该赢但却输掉的那几手牌。有时人们会犯错误输钱,但他们一般都不会记得这几手是怎么输掉的。相反的是,如果有些牌局只是因为手气不好而输掉,他们就会记得那一局中的每一处细节,他们还会在故事中透露对手必然获胜的几率,来证明自己根本没有胜出的机会。真正的牌手知道他们输掉过多少手牌,以及失败的大概几率。他们懂得度量。而且专业牌手会专注于重要的度量标准。你赢了多少手,输了多少手,这无关紧要;重要的是你赢了多少钱,输了多少钱。而且,为你的狗屎运(译者注:bad beat,即开局时输家比赢家牌好,赢的几率更大,但关键时刻赢家却来了更好的牌。碰到狗屎运——take a bad beat——用来形容输家,来了狗屎运——lay a bad beat——用来形容赢家)苦恼实际上等于替你对手的牌运犯愁。既然你的收入来自于对手的错误,那你就是在抱怨为什么对手把钱给了你。
有度量标准是好事,不过专业人士懂得哪些标准重要,哪些只会分散注意力,哪些介于二者之间。
软件开发也有很多度量标准,而且有很多标准身上的光环已经远远超出了它们所应有的范围。例如,知道代码行数几乎不能带来任何价值。复杂应用需要相当多的代码,但这个“相当”到底是多少?它得依赖于语言、工具及其他因素。
修复的bug数量也是个很有趣的话题,只是略逊于前一个。为什么人们会在乎修复了多少个bug?Bug数量也许有其价值,但是修复的bug数目并不能为我们带来多少有用信息。
特性完成率是我自己最喜欢把玩的一个标准。除非我们使用特性来评估工作量,否则知道完成了多少特性又有何用?而且,如果已经对工作量做出了评估,那为什么不把剩余工作与已完成工作相比较,从而得到工作进度呢?我很难从特性完成率中看到价值所在。
代码覆盖率让我想起了记录狗屎运。这项度量是有意义的,但很多人都没抓住重点。代码覆盖率低意味着可能有问题存在,但是代码覆盖率高只能表示你有一个很大的代码覆盖率数值。高代码覆盖率与高质量之间没有必然联系。
注意人,而不是逻辑
如果看过有玩牌镜头出现的电影,你大概听过这样一句话:你不是在与扑克玩,而是与人玩。此言极是。牌手无疑都是心理学家。有时你确实需要某些牌,但拿一手好牌只是赚钱的一部分而已。一旦有了好牌,你就需要知道怎样利用好它们。你是应该加注,还是先让牌然后加注,还是彻底让牌,还是跟进?这些做法依赖于很多因素,但关键还是要了解牌桌上的对手。当你得到一手好牌,首要目标就是尽可能多地从对手那里赢钱,而达到这种目的的唯一方式则是想办法让对手给你更多的钱。了解逻辑可以帮助你赢得几手牌,了解人则可以帮助你赢钱。
在交付软件时,人处于同样重要的地位。如果软件只是让一切工作起来,那只要把它变成自动化的工作,事情就容易得多了。但软件却远非功能组合这么简单。在一场高尔夫球比赛中,人们会卖出软件包;在全家到迪斯尼免费旅游时,人们会签下软件服务合同;为了避免法律纠纷,人们会履行合同去构建已经毫无用处的软件;为了超越竞争对手,人们会使用软件来加快业务响应速度。
人们使用软件、开发软件、维护软件,或是在某种程度上依赖软件。软件开发与这个世界有着千丝万缕的联系,要把洋洋洒洒的变量组合成简单方程,生产出高质量的软件,又与登天何异?但是,软件开发高手需要考虑每个人引入的所有已知与未知的变量,做出他们力所能及的推测。知道应该做什么会让你受益,而知道必须做什么所带来的价值却是难以衡量。了解逻辑可以帮助你交付应用,了解人则可以帮助你交付价值。
在残缺的信息下工作
有关这点,刚开始打牌的人处理的非常好:打好每一手牌,老老实实押注,从不虚张声势。这便是了,新手就应该只做该做的事情,除非你的钱多得没地方花了。难点在于如何从初学者的水平提升。大量信息霎那间纷至沓来,你需要注意牌桌上每个人的每一处细节:他们怎样交流,你从前跟他们每个人打过什么交道,他们所钟爱的玩牌方式,谁在赢,谁在输,凡此种种不一而足。而且,你也不可能知道对手手里的牌是什么,下一张牌又是什么。你所拥有的信息已超出所能处理的极限,而且这远非全部。
编程亦如是。领域专家无所不知,但把一切都向你倾囊相授却毫无意义。何况,你也不一定需要所有的领域知识。你需要熟悉团队,但同事总有些事情是你永远无法知晓,或者不能完全理解的。不过,编程高手能够把必要的领域知识融会贯通,掌握团队的动态,并始终提供技术上的真知灼见。他们知道他们永远无法成为百晓生,他们知道什么事情值得思考,哪些应该置之不理。纵使面前汹涌澎湃的信息仍是残缺不全,他们也总能做出正确的决定。
即时反馈
普通牌手在反馈信息少的游戏中表现最好。因为牌手是根据信息而赢钱的。在5张牌梭哈中只有一轮押注的机会。各位玩家只有一次机会来分析你给出的信息,而你也只有一次机会犯错。专家级牌手更喜欢多轮的游戏。游戏中的回合数越多,他们就有越多机会从低水平的对手身上捞到好处。他们喜欢即时反馈,并根据反馈做出调整。在有多个回合的游戏中,每一个回合都可以得到反馈,专业玩家就会根据当前局势调整打法。
编程高手同样喜欢即时反馈。从业务人员即时反馈回来的信息,可以避免你在构建业务应用时走上弯路。从另一个程序员即时反馈回来的信息,可以在软件产品化之前发现bug。持续集成服务器可以提供即时的集成反馈,从而避免集成之痛。喜欢敏捷的人能马上说出迭代是一个有着显著成效的实践,因为它可以让程序员和业务人员得到即时反馈。不过,作为一个编程高手,纵使他不喜欢敏捷,他也能够意识到即时反馈的价值;即使在非敏捷的环境中,他也会争取得到更多的反馈,从而避免浪费时间精力。即时反馈可以让你了解前行的方向正确与否,每一个专家都会珍视这些信息。
上下文为王
无论扑克还是编程,没有绝对正确或是绝对错误的选择。如果你有一对K,那么在翻牌之前你该不跟么?也许吧。这要看你是在打比赛还是赌钱、有上限还是没上限、你坐在哪个位置上、你是否已经不跟过一次还是已经封顶了等等。我在扑克中学到了一点,那就是在给出答案之前,一定要综合考虑所有的因素。
在编程中沉浸的时间愈久,同样的体会在我心里就愈加深刻。Java在有些时候是不错的选择,但它并非万能。所有的编程语言均如此。工具亦如是。Hibernate很不错,但它不适用的地方还有IBatis,当IBatis也不适用的地方还会出现或自己创造新的解决方案。几乎没有一款解决方案能够绝对有效,它只有在恰当的形势下才会发挥应有的作用。在错误的环境中,它也许会成为毒药。
所以,面对一门新的语言或者工具,无论是你是打算弃若敝履,或是爱不释手推而广之,不妨先想想它的适用环境,尽量做到对症下药,量体裁衣。
查看英文原文:Software Development Lessons Learned from Poker来自:http://www.infoq.com/cn/articles/fields-it-depends

深度探讨:真正技术高手是如何炼成的?

在由CSDN和《程序员》杂志联合举办的第三届中国软件技术英雄会(上海站)上,由主持人CSDN首席分析师孟岩,上海群硕大中华区软件开发总监邵荣,阿里软件技术总监叶伟,盛大游戏首席技术官朱继盛, 趋势科技(中国)有限公司技术总监蔡昇钦,巨人网络集团首席技术官CTO宋仕良,淘宝网首席架构师王文彬共同参与的CTO论坛上,就有关CTO是否必须为技术高手,从程序员到技术高手成长之路,知名互联网公司如何招聘人才等问题与参会者进行了深入的交流。精彩观点:我觉得CTO并不必须是技术大拿,大家今天可以看到,从CTO的定义来看,CTO的角色是用技术服务公司的商业模式。从这个定义,只要你对技术有相当性的掌握,其实你可以不必从底层做起。——王文彬CTO很重要的目标是在于它能够整合公司的商业能力,成为一个CTO的重点,是你对公司核心技术的了解度跟掌握度,还有公司主要的核心业务的掌握度。——蔡昇钦技术高手和CTO这两个角色,打个比方,像一个乐队里面,技术高手像小提琴演奏者,或者是一个钢琴演奏者,但是CTO相当于一个乐队的总指挥,乐队的指挥需要有对音乐的整体感觉,这方面肯定更拿手。——朱继盛CTO还是应该是一个内功高手,还是要有点内功,这说明什么,你在技术方面,应该有技术的洞察力,要看到商业和技术的结合。——叶伟跟技术团队,尤其跟程序员,跟工程师,你要有共同语言,我觉得如果说没有一定技术深度的话,其实很难能够融进整个的团队。——邵荣如果作为一家创业型的公司,特别是互联网,特别是软件行业,CTO必须是一个技术高手,因为你是一家创业公司,技术平台应该是公司的核心业务,如果CTO不是技术高手,这个公司很难在商业上有大的作为。——宋仕良程序员或高手容易犯的错误是什么,或者我觉得做得不够的地方,是程序员容易觉得我做的这个东西很好,很牛,我这个东西别人应该喜欢用,由我来推演别人。——邵荣要成为高手,就像练功一样,你必须能耐得住寂寞,要关在研究室里面,像大家一样,晚上写代码,有时候这种东西不是平常人可以做到的,假如你可以呆过这段期间的话,我相信你练到功成了以后,这些东西你就可以发挥出来了,我想这是成为高手很重要的因素。——王文彬我建议大家去尝试做产品经理或者系统分析师,架构师很多人误解为纯技术的,其实许多的架构师对商业的分析是非常擅长,对于系统分析师,因为系统分析师是非常清晰地要描绘出商业的目标在什么地方,分解成什么东西,跟技术有关联。——叶伟首先在于留住人才,我们让工程师知道,工程师他不是低于管理者的,也就是说,你一个经理,他所拿到的整个薪资,不一定要大于他所管理的工程师。——蔡昇钦以下为论坛实录:主持人:在正式开始之前想先做一个小调查,我想请问一下,在座的六位CTO都是技术管理者,都是技术大拿,你们谁认为成为一个技术管理的高手,或者CTO,成为技术高手是必经之路,想成为一个CTO必须先成为一个技术高手吗?淘宝网首席架构师王文彬:先说明一下,我是假CTO,我的职位其实是做技术,在淘宝做品牌架构,说实在的,我有一个技术背景,但我觉得CTO并不必须是技术大拿,大家今天可以看到,从CTO的定义来看,CTO的角色是用技术服务公司的商业模式。从这个定义,只要你对技术有相当性的掌握,其实你可以不必从底层做起,我们今天讲的是CTO是不是一定要从底层的技术人员干起,假如从这个角度,我觉得做CTO不一定经过必须这个角色,当然现在业界很多CTO,我想在座很多CTO是从技术出身,这是现实,但是理论上我不觉得是一定的事实。趋势科技技术总监蔡昇钦:我认为CTO有很重要的目标是在于它能够整合公司的商业能力,成为一个CTO的重点,是你对公司核心技术的了解度跟掌握度,还有公司主要的核心业务的掌握度,所以不一定说非要从底层干起,当然CTO也可以是掌握技术最高的那个人,但是这不是一个唯一的一个对应关系。盛大游戏首席技术官朱继盛:技术高手和CTO这两个角色,打个比方,像一个乐队里面,技术高手像小提琴演奏者,或者是一个钢琴演奏者,但是CTO相当于一个乐队的总指挥,乐队的指挥需要有对音乐的整体感觉,这方面肯定更拿手,但是你说他,说到他必须是一个小提琴高手,或者必须是一个钢琴高手,这不一定,也说明作为一个CTO的话,不一定是从一个技术高手成长过来的,作为一个CTO,他最主要的职能在于整体的协调,对于音乐整体的把握,或者技术整体的把握上。阿里软件技术总监叶伟:这个问题很难回答,是不是一定要成为一个高手,我曾经发现自己技术上好像也有点高,但是很快发现自己不高了,因为高手太多,刚才盛大的朱总也谈到了,你不可能样样都精通,我本来想打这个比喻也差不多,不过总的感觉,还是应该是一个内功高手,还是要有点内功,这说明什么,你在技术方面,应该有技术的洞察力,要看到商业和技术的结合。我还得补充一点,我们就从CTO的词上来说,最后一个词是officer,officer什么意思,实际上是个管理者,你真正的本事是把一个团队凝聚在一起,并且服务于商业,如果你没有那方面的能力,你今天编程越厉害,或者某个方面精通的,根本不能把你放到CTO这个位置上面,越放到上面越危害,你带着一帮人不知道往哪方面奔,你纯粹只是兴趣,无法为给公司带来商业价值,大家都知道公司其实是要产生这个价值。群硕大中华区软件开发总监邵荣:我更倾向于必须成为技术高手才能成为CTO。刚刚几位的观点我是认同的,但是还有一些不同的想法。第一个就是自己大言不惭来讲,我自己是走技术这条路过来的,然后在这个过程里面,我自我感觉,就是说你跟技术团队,尤其跟程序员,跟工程师,你要有共同语言,我觉得如果说没有一定技术深度的话,其实很难能够融进整个的团队,尤其,当这个团队,比如说从很小规模,你很可能在前面做很高指点的话,能够落地,给他们一些帮助,所以说在整个我觉得成为一个技术主管的过程当中,如果说有相关的比较深的这样一个经验的话,我想应该会有一定的帮助,整个到后面真正成为CTO,或者成为技术的主管的时候,那个时候是不是技术还是跟原来一样重要,不是,它只是属于在整个的过程当中,其中一环吧。巨人网络集团首席技术官宋仕良:刚才几位的观点我是同意的,我之所以更倾向于必须成为技术高手才能成为CTO,其实我自己也是一个从技术的底层干起来,我也是写程序的,我为什么觉得这个问题可能要分两个部分来看,如果作为一家创业型的公司,特别是互联网,特别是软件行业,CTO必须是一个技术高手,因为你是一家创业公司,你的公司要创业,技术平台应该是公司的核心业务,如果CTO不是技术高手,我觉得这个公司可能是很难在商业上有大的作为,如果像一些传统的公司,或者做金融那些公司,它来有一个做IT的部门,就不一定是一个技术高手,更重要的是偏重管理,或者是对业务流程的熟练,并不一定是对技术要专注。主持人:不管怎么说,台上的六位都是我们心目中公认的技术高手,我想问其中几位,台下有很多人,有的人已经是高手了,有的人还在成为高手的路上,我想你们跟大家分享一下,如何才能成为一名技术高手,成为一个技术高手一个最重要的经验是什么,我想邵荣首先与大家分享一下你的观点。邵荣:先简单说说我自己的一个成长经历,其实我在95年、96年左右的时候,我在操作系统上玩java,我的导师要求我在一个月之内掌握当时的内容,其实就在那个时间开始做很多事,凭着狂热,后面我在DOS里面写自己的Windows的驱动,去驱动整个的鼠标、键盘,再到后面,帮那个研究所做过一个,大家不知道南极星,我自己做了一个,帮香港的一个公司做了一个斯托尼方。我那个时候真的有点不知天高地厚,就想走出苏州,我以前在苏州大学里面,自己也做了老师,还教软件工程,教C++,当时我走出苏州的时候,我讲了一句话,在整个苏州可能没有人在C++上超过我,最多只能跟我沟通交流,过了多少年才知道自己错得多厉害,当时自己的自信心很膨胀,我那时候基本上把白天黑夜倒过来干,基本上是每天吃完早饭回去睡觉,然后别人吃中饭,我吃早饭,连续很多年,大概是最起码4、5年时间一直这么来干活和工作的。但事实上随着时间推移,号称自己觉得还可以,慢慢开始有不同的理解,当中有一个关于互联网,我不知道有多少人知道“白云黄鹤”这个BBS,这是在教育网里面仅次于清华的,我当过两年版主,通过在里面解决问题,带来很多思索,之后我又开始疯狂看软件工程,后面又开始看管理,在市面上的管理方面的书我都看过,事实上一步一步走过来,到今天我思索很多东西,很多时候在里面思索一些商业模式,思考整个团队的建设,思考很多东西三年之后会发生什么事情,客户那边是什么东西,那这么多年里面,我觉得有一个词,就是我影响很深刻的,可能对大家有些启发,叫EMPATHY,这个词的中文含义叫移神,那么我把它去更形象化来讲,就是将心比心,我觉得这么多年过来了,从技术高手转到现在为止,可能很多时间是负责技术的方向,甚至于是整个业务方向,从原来的执行者变到现在的一个布局者,我觉得很多很多时候,EMPATHY这个词给我自己很大的一个促进或启迪吧,程序员或高手容易犯的错误是什么,或者我觉得做得不够的地方,我做的这个东西很好,很牛,我这个东西别人应该喜欢用,由我来推演别人,EMPATHY这个东西,我做这个东西首先站到别人的角度看,我想要带团队,我会站到团队角度看这个问题,你必须在很早的时候预估到很多部分,我觉得很多程序员应该了解,但是最后没有做的事情是尝试性的一些东西,所以随着时间推移,我觉得做真正的技术高手,或者想成为技术高手,我觉得应该往一些更软性的东西想,讲句实话,我往管理方向做的时候,看了很多哲学和心理学的书,这些东西对拟人生有非常多的促进,不要走太多刚硬的路。主持人:邵总很性急,一下把我后面要问的问题全都回答了。我们接着往下问问叶总,我知道您的技术非常好,思路也很活跃,所以您走上技术这条路,但是我有一个问题是,您后来为什么没有走上创业的路线,您觉得怎么评价一个技术人员的价值,跟着人干也算成功,还是我非要自己创业呢?叶伟:这个问题相信很多人都面临着,不管你曾经或者将来,你最终选择了什么,你有可能选择了去创业,也可能这时候没有想创业,我个人认为呢,有几个方面,一个是来自于客观上,比如说跟人的性格有关系,有些人可能性格上并不善于冒风险,大家都知道创业是非常冒风险的。第二个,你的知识结构能力方面可能有局限性,你创业,所有的责任都是你在承担,你要考虑是否能得到成功,你会考察你的特长在什么地方,从性格方面说,可能有的人说我希望去宁为鸡头,不为牛尾。我另外有一个观点,这也是我自己的,可能我没有去创业的很重要的想法,我真正想创造社会价值,这个价值要摆在舞台上,这个舞台如果适合你发展,而且它也很大,而且我们大家都知道互联网可以把全世界都联合起来,你有没有智慧,你跟着英明的道路走,这是你可以考虑的。说实在的,我自己的经历,我开始的时候,没有进外企,为什么呢,我读书的时候去打工,所以我在民营企业,很快做大了,那时候我做CTO,管理几十个人,后来我觉得这个行业比较小,我做ERP,我也不再做CTO了,ERP大家知道会影响很多的企业,OK,我去做这个东西,我进了金蝶,在行业里比较大,然后后来我进了互联网行业,阿里巴巴,因为我们要去做电子商务,电子商务它将影响更大范围的人,所以我觉得这个能够创造更大的社会价值。主持人:我昨天去巨人访问的时候,巨人的同事向我们说,宋总其实是一个不善于言词的人,但是我想问的问题是,您这样典型的技术人员的个性,怎么样管理一个团队呢。 宋仕良:确实我平时在工作中是不善言词的,因为我应该说比较喜欢做技术工作,我在学校里面天天钻研技术,工作之后也遇到一些朋友,然后朋友都是一些技术高手,因为我工作的时候去一家公司,那家公司的同事也是技术高手,在清华BBS上被评为中国十大黑客之一,那不是贬义的,是软件高手或者技术高手,是做输入法的一个作者,我从他的身上看到一个真正的技术高手,是一个什么样的人,就是说平时不去太追逐一些功名这些东西,回到刚才说的话题,我一个不善言词的人如何把100多人的团队带下来,主要还是靠朋友,可能我会跟我的另一个搭档,他的沟通能力比较强,然后他在从事人际交往,在管理当中会比较擅长一点,我专注于做技术这块,相当于一个黄金组合了。主持人:王文彬先生是我们淘宝网的首席架构师,我知道您在淘宝网上扮演两种角色,一种是带领团队的角色,另外一种是掌管整个淘宝的架构。您觉得这两种角色,CTO带团队的角色和做架构师是什么关系?您是如何协调好这两者的关系的?王文彬:的确有点挑战,我老板每次跟我说你架构为什么没有做好,我说我一个人扮演两个角色(笑),但是这个角色里面是有相关的,比如我下面的同仁,其实大家都关注架构,所以其实我今天在带领淘宝团队做架构的时候,会依赖他们实行部分的架构设计,因为淘宝这么大的网站不是一个人就可以做得出来的,这也需要大家通力合作。这样自然就有一个团队,我想我只是起带头作用,带这个团队成本比较小,这也是为什么我两方面能够兼顾的原因吧。其实我再补充一点,刚刚主持人问怎么去变成技术高手,需要什么调整,我也一直在思考,其实我同意邵总的讲法,今天你做程序,技术上的东西最需要的是热情,这个热情也需要你具备一定的条件,我总结我自己的经验来看,当然我也有一点运气,加入了一流的团队,我想这会刺激一个人潜力的发挥,假如我今天没有遇到这群人,我不觉得我今天的看法能够到这种程度,但是另外一点,我觉得你今天要走技术这条路,有一点,要成为高手,就像练功一样,你必须能耐得住寂寞,要关在研究室里面,像大家一样,晚上写代码,有时候这种东西不是平常人可以做到的,假如你可以呆过这段期间的话,我相信你练到功成了以后,这些东西你就可以发挥出来了,我想这是成为高手很重要的因素。现在在中国,很多公司都在征才,其实大家对技术高手的需求是非常大的,只要把握这几点,相信大家有机会成为一个技术高手。主持人:叶总好像有什么想补充的?叶伟:是的,我想补充的是说,管理这个东西,它是你的工具,你的手段,对一个CTO来说,或者对负责技术研发的总监来说,实现这个目标,这是你的责任,管理是你的手段之一,你搭好架构,也是你的手段之一,这些东西你都要去管,没有一项可以落下来。另外一方面,这些责任不见得是跑在最顶上的人才有责任,其实我们的一个技术主管,经理他都会有责任,你说他当经理不要管团队,也要,只是CTO更专注在商业和技术架构之间形成桥梁,他需要把商业的东西分解成技术解决方案,反过来又要用我们的技术驱动创新,形成商业上的一些想法,所以我觉得是说,管理它是一个工具,帮助我们,你不要去忽略它,然后我想补充一下,刚才邵总前面谈的问题,怎么样成为一个CTO,一个是说你要以终为始,你看CTO核心的能力点在什么地方,我们刚才谈到是说,它是在跨越商业和技术,所以你要有这个技术,第二个你要组得起团队来搞攻坚战,这两方面都要,你要练很多东西,我今天讲不完,我提两个主要的,你可以同时去尝试,可能你距离CTO就近一些,第一个是做项目经理,没有丰富的项目经理,你根本就不知道怎么样跟人家合作,怎么样取舍,怎么样排列优先顺序,怎么样控制你的资源,前面我说CTO是个officer,第二个方面,他更多要有站得高看得远的角色,所以我建议大家去尝试做产品经理或者系统分析师,我谈架构师,因为谈架构师很多人误解为纯技术的,许多的架构师对商业的分析是非常擅长,所以我还是谈一谈系统分析师,因为系统分析师是非常清晰地要描绘出商业的目标在什么地方,分解成什么东西,跟技术有关联,我建立大家在这两个角色方面尝试一下。主持人:谢谢叶总,我们还有一位没发言。我知道趋势科技有一个特别优良的传统,你们在培养人才,以及留住人才这件事情上很有功力,我想了解一下,您怎么在您的技术团队里面培养人才,留住人才,这是一个大家现在很关心的话题。蔡昇钦:培养人才在趋势科技的做法,就是你给他舞台,然后他就是自己的编剧,他就是自己的导演,用这样的方式来做,我们在培养技术高手的层面上,在公司的框架当中,我们是把人才分成两个方面来看,在技术这条路上走的话,首先在于留住人才,我们让工程师知道,工程师他不是低于管理者的,也就是说在趋势,你一个经理,他所拿到的整个薪资,不一定要大于他所管理的工程师,因为我们必须让公司的团队知道,你喜欢钻研技术,那是因为你的兴趣所在,你喜欢管理团队,你喜欢跟人打交道,那是你的兴趣所在,从一个公司角度看,我们鼓励人基于自己的兴趣做好他的发展,所以从这样的情况了解员工后段的需求,然后安排他去他有可能的位置,很自然而然员工就会跟公司走得很近。像我通常会跟我的团队的人员讲,不管是资深的还是资浅的,我每年会问他们一个问题,你有没有想过你5年后干嘛,我会记得他们2006年跟我讲什么,2007年跟我讲什么,2008年跟我讲什么,他有没有改变他人生的五年规划,三年规划,我们尽可能在公司的范畴满足员工的需要,我想这样子,员工就会成长,就会跟公司走在一起。主持人:人才的问题其实是现在大家都很关心的,我在主持这个会之前,有人特意给我发消息,建议我多问在座的CTO一些关于怎样招募团队,保留团队的问题,由于我们现在人才培养存在一些问题,导致我们市场上优秀人才的数量有限,就带来保留人才和争夺人才之间的矛盾,我想问一下宋总,我昨天去巨人的时候,听说你们团队相当稳定,你觉得除了巨人的收入高以外,这个当然是很重要的因素,你还有什么诀窍吗?宋仕良:应该还是说公司重视技术人员,首先你重视人才,你应该是要尊重人才,一个技术人员,他有他自己的想法,而且每个人的想法都是不一样的,你要重视他的想法。 主持人:这种想法跟公司的目标不一致怎么办。宋仕良:目标不一致的话,那应该是给他做工作,就找他谈心,这个肯定要统一目标的,如果目标不一致,大家肯定走不到一起来,首先你在组建这个团队的时候,在选人方面,应该是物以类聚,我觉得至少应该选大家有兴趣,或者有共同拼搏方向的,或者是大家奋斗的方向是一致的,至少奋斗的目标一致的话,才能够很好地沟通,不会说我提出一个观点,另外一个人会有很大的反驳,首先你在组建团队的时候,每个人虽然达不到完全一致,但是大家的目标是一致,中间团队在磨合的过程中,肯定会出现这样那样的问题,这些问题我想都是可以解决的,因为公司或者通过一些协调,或者是互相的理解,互相的支持。主持人:朱总您觉得盛大在保持人员不流失方面如何。朱继盛:我觉得核心的思想只有一点,给相应的人自己的舞台,施展他自己的东西。可以举一些例子,比如说我们盛大集团的副总裁是80后的,他能作为一个上市公司的总裁。再举一个例子,去年盛大有很优秀的员工离职了,这个离职并没有任何人劝他,他自己有这个意愿,要自己创业,盛大有机制,让他自己编一个游戏,他在盛大的周围去工作,这样的例子,实际上在盛大有非常多这样的例子。主持人:谢谢台上的嘉宾和底下的观众。嘉宾:谢谢大家