IT版孔乙己

【不要做学究】回忆孔先生IT版

我关于本文评价:
看到这篇文章很多人会生出这样的疑问“这明明是在诋毁钻研技术的人嘛?是不是在宣扬技术无用论?”。

初看这篇文章的时候我也是这样的想法,但是逐步才明白这篇文章其实是在讽刺“技术学究”,大学里、公司里都有很多这种“技术学究”。什么叫“技术学究”呢?就是一些整天钻研没实际意义的语法,把没什么实际意义的,不会创造实际价值的知识点、方法整天挂在嘴边的人,做事情的时候总是强迫症似的“本本主义”的人。
比如我就遇上过这样的人,上司让他做使用一些别人已经封装好的网络通讯函数库进行网络程序的开发,他偏偏说要先把《TCP/IP详解》的上中下册三本书看完,要把TCP/IP协议弄的通通透透才开发,要知道上司让他使用的网络通讯函数库是业界非常流行的函数库,非常稳定、功能也非常全,是用这个函数库不需要对TCP/IP非常精通也能开发非常好的网络程序。有同学会说了,杨老师这不是在宣扬“研究底层没用,人家都封装好了,我们做代码工人就行了吗?和如鹏网的核心理念不一致呀?”错错错!!!如鹏网永远建议大家要把底层原理搞明白。但是要看场景是什么,上面讲的场景是一个有时间限制的上司给的任务,要尽快做出来去卖给客户实现公司盈利的,你就应该尽快熟悉那个函数库出来,然后做一个东西出来,而不是自己想从底层一直搞明白。而且我也建议大家学技术的时候不要一开始就从底层钻起,而是应该先从应用层面弄明白,然后再一层层向下钻。比如在学VC开发MFC程序的时候,就先从使用者的角度把MFC用熟了然后再研究MFC是怎么把WinAPI通过C++方式进行封装的,进而深入理解Windows的运行机制。而不是一开始就揪着一些细节不放,总想弄明白。把不明白的地方当成一个黑盒,调用就可以了,不要在这个地方浪费太多时间,也许在后面学习的过程中发现其实很容易的就能理解前面的内容了。学编程不是学数学,不是前边过不去后面就会连不上了。
还碰到过大量这样的同学以及老师,总是以这样的题目为荣:”++(*i++)++的结果是什么“、“1*8/3-2/3*3%8的结果是什么”,很多同学见到这种问题就懵了“天哪,看来我学的还不够呀,还是多学一点再动手编程吧,否则基础不扎实编程肯定要出乱子”,于是乎就又“捧起课本学编程”。计算机是为了解决实际问题而存在的,而不是为了炫耀而存在的,只要多动手很多事情迎刃而解,”++(*i++)++的结果是什么“这样的题目如果实际动手写过一些指针应用的程序的话很容易就说出来,可是如果只是“捧起课本学编程”,永远都会把解题过程当成数学公式推理;“1*8/3-2/3*3%8”这样的题目有意义吗?有经验的程序员永远不会去记忆运算符的结合律,因为括号的优先级高于一切,所以在写程序的时候就要用括号强制规定优先级“1*(8/3)-2/((3*3)%8)”,这么写一辈子都错不了,记那个运算符的结合律有什么意义呢?
深入底层和技术学究是不一样的!不要把计算机当成数学那样学,计算机是为解决实际问题都存在的,计算机是一门动手科学!
============================================================

鲁镇的网吧的格局,是和别处不同的:都是当街一个曲尺形的大柜台,柜里面预备着热水和各色各样的饮料和酒。做工的人,傍午傍晚散了工,每每花五块钱,来通宵上网,还可以附送一碗酒,一边喝酒一边上网。——这是二十多年前的事,现在每晚要涨到十块钱,——靠柜外站着,热热的喝了休息;倘肯多花一块钱,便可以买一碟茴香豆,做下酒物了,如果 出到十几块钱,那就能买一样荤菜,但这些顾客,多是短衣帮,上网看的东西都是拿不上台面的,所以都是站着上网的,衙门一来,也好撒腿就跑,短衣帮大抵没有这样阔绰。只有穿长衫的,才踱进店面隔壁的房子里,要酒要菜,慢慢地一边坐喝,一边看着屏幕上那些说不出口的东西。

  我从十二岁起,便在镇口的咸亨网吧里当伙计,这个网吧比较大,除了给客人上网的服务,还有帮客人定制一些不三不四的工具的开发部门。一开始,掌柜说,样子太傻,怕侍候不了长衫主顾,就在外面做点事罢。外面的短衣主顾,虽然容易说话,但唠唠叨叨缠夹不清的也很不少。他们往往亲自带着怀表,结帐的时候要看看网吧有没有少算钟点,有的还亲自打电话到格林尼治天文台校对自己怀表有没有跑快了,然后才放心:在这严重兼督下,对计时器做手脚也很为难。所以过了几天,掌柜又说我干不了这事。幸亏荐头的情面大,辞退不得,另一个原因也是我在巨软中国研究院做过几年码农,所以便改为专管写一些psp.net程序的一种无聊职务了。 

  我从此便整天的站在柜台里,专管我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。掌柜是一副凶脸孔,主顾也没有好声气,教人活泼不得;只有孔乙己到店,才可以笑几声,所以至今还记得。 

  孔乙己是站着上网而穿长衫的唯一的人。他身材很高大;青白脸色,皱纹间时常夹些伤痕;一部乱蓬蓬的花白的胡子。穿的虽然是长衫,可是又脏又破,似乎十多年没有补,也没有洗。他对人说话,总是满口之乎者也,教人半懂不懂的。因为他姓孔,别人便从描红纸上的上大人孔乙己这半懂不懂的话里,替他取下一个绰号,叫作孔乙己。孔乙己一到店,所有喝酒的人便都看着他笑,有的叫道,孔乙己,你脸上又添上新伤疤了!他不回答,对柜里说,上两个小时,要一碟茴香豆。便排出十九块钱。他们又故意的高声嚷道,你一定又偷了人家的东西了!孔乙己睁大眼睛说,你怎么这样凭空污人清白……”“什么清 白?我前天亲眼见你反编译了kernel32.dll,被鲍掌柜吊着打。孔乙己便涨红了脸,额上的青筋条条绽出,争辩道,借鉴不能算偷……借鉴!……科学家的事,能算偷么?接连 便是难懂的话,什么骆驼命名法是大写在前还是小写在前,什么“using各有几种用法之类,随口便抛出一句:你们这些人,要回家复习功课了,引得众人都哄笑起来:店内外充满了快活的空气。

  听人家背地里谈论,孔乙己原来也读过书,还是NVPNCSE,但终于没有进学,又不会营生;于是愈过愈穷,弄到将要讨饭了。幸而写得一手漂亮的代码,运行起来很快很强大,便接一些私活,换一碗饭吃。可惜他又有一样坏脾气,便是摆着看过几本书的架子愤世嫉俗。坐不到几天,便在同事的代码里面挑刺,说这段不符合什么规矩原则,那段没有实现接口……搞得团队很紧张,经常延误工时。如是几次,叫他做事的人也没有了。孔乙己没有法,便免不了偶然做些入侵银行主机的事。但他在我们店里,品行却比别人都好,就是从不拖欠;虽然间或没有现钱,暂时记在粉板上,但不出一月,定然还清,从粉板上拭去了孔 乙己的名字。 

  孔乙己喝过半碗酒,涨红的脸色渐渐复了原,旁人便又问道,孔乙己,你当真会编程么?孔乙己看着问他的人,显出不屑置辩的神气。他们便接着说道,你怎的连半个秀才也捞不到呢?孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话;这回可是全是指针堆之类,一些不懂了,随口便抛出一句:“你们这些人,要回家复习功课了,在这时候,众人也都哄笑起来:店内外充满了快活的空气。

  在这些时候,我可以附和着笑,掌柜是决不责备的。而且掌柜见了孔乙己,也每每这样问他,引人发笑。孔乙己自己知道不能和他们谈天,便只好向 孩子说话。有一回对我说道,你写过程序么?我略略点一点头。他说,写过,……我便考你一考。茴香豆的茴字,怎样在屏幕上打印出来?我想,讨饭一样的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,不会罢?……我教给你,记着!这些模式应该记着。将来做掌柜的时候,写账要用。我暗想我和掌柜的等级还很远呢,而且我们掌柜也从不将茴香豆上账;又好笑,又不耐烦,懒懒的答他道,谁要你教,不是Console.WriteLine一个草头,然后再一个来回的回字么?孔乙己显出极高 兴的样子,将两个指头的长指甲敲着柜台,点头说,对呀对呀!……回字有四样写法,你知道么?你的这个办法不好,有很多冗余,万一有人写错了,也不好追查责任,我写给你看,你看我综合使用了模板方法模式、桥接模式、抽象工厂模式、通用数据库兼容模式,优美极了”:
  1. using System;
  2. using System.Data;
  3. using System.Data.Common;
  4. namespace kongyiji
  5. {
  6.     interface IHui
  7.     {
  8.         void Print();
  9.         void Print(int step);
  10.     }
  11.     /**//// <summary>
  12.     /// 抽象基类,实现通用的草字头输出
  13.     /// </summary>
  14.     abstract class AHui: IHui
  15.     {
  16.         IHui i;
  17.         private IDbCommand comm;
  18.         private IDbConnection conn;
  19.         private DbProviderFactory _dbFac;
  20.         private IDbDataParameter pram;
  21.         public AHui(DbProviderFactory DbFac)
  22.         {
  23.             Console.WriteLine("艹");
  24.             _dbFac = DbFac;
  25.         }
  26.         public abstract void Print();
  27.         protected void SaveSwitch(string hui_type)
  28.         {
  29.             conn = _dbFac.CreateConnection();
  30.             conn.ConnectionString = @"Data Source=localhost;Initial Catalog=local_dbersist Security Info=True;User ID=saassword=123456789";
  31.             comm = conn.CreateCommand();
  32.             comm.CommandText = "INSERT INTO LOG(hui_type) VALUES(@hui_type);";
  33.             pram = comm.CreateParameter();
  34.             pram.DbType = DbType.String;
  35.             pram.ParameterName = "@hui_type";
  36.             pram.Value = hui_type;
  37.             //conn.Open();
  38.             //comm.ExecuteNonQuery();
  39.             //conn.Close();
  40.         }
  41.         public void Print(int step)
  42.         {
  43.             i = HuiFactory.Hui(_dbFac,step);
  44.             i.Print();
  45.         }
  46.     }
  47.     /**//// <summary>
  48.     /// 回字写法
  49.     /// </summary>
  50.     class SelectHui: AHui
  51.     {
  52.         string _hui;
  53.         public SelectHui(string select_hui, DbProviderFactory DbFac)
  54.             : base(DbFac)
  55.         {
  56.             _hui = select_hui;
  57.         }
  58.         public override void Print()
  59.         {
  60.             Console.WriteLine(_hui);
  61.             SaveSwitch(_hui);
  62.         }
  63.     }
  64.     class HuiFactory
  65.     {
  66.         public static IHui Hui(DbProviderFactory DbFac,int step)
  67.         
  68.         {
  69.             IHui temp = null;
  70.             switch(step)
  71.             {
  72.                 case 1:
  73.                     temp = new SelectHui("回", DbFac);
  74.                     break;
  75.                 case 2:
  76.                     temp = new SelectHui("囘", DbFac);
  77.                     break;
  78.                 case 3:
  79.                     temp = new SelectHui("囬", DbFac);
  80.                     break;
  81.                 case 4:
  82.                     temp = new SelectHui("廻", DbFac);
  83.                     break;
  84.                 default:
  85.                     temp = new SelectHui("廻", DbFac);
  86.                 break;
  87.             }
  88.             return temp;
  89.         }
  90.     }
  91.     class Program
  92.     {
  93.         static void Main(string[] args)
  94.         {
  95.             DbProviderFactory fac = DbProviderFactories.GetFactory("System.Data.SqlClient");
  96.             
  97.             IHui i = HuiFactory.Hui(fac,4);
  98.             i.Print();
  99.             i.Print(2);
  100.         }
  101.     }
  102. }
复制代码
我愈不耐烦了,努着嘴走远。写完后,孔乙己向掌柜的讨来一支烟,还想继续说些什么,见我毫不热心,便又叹一口气,显出极惋惜的样子。 

  有几回,邻居孩子听得笑声,也赶热闹,围住了孔乙己。他便给他们吃茴香豆,一人一颗。孩子吃完豆,仍然不散,眼睛都望着碟子。孔乙己着了 慌,伸开五指将碟子罩住,弯腰下去说道,谁能告诉我一个TCP/IP数据包能容纳多少个字,这盘豆子就给谁。,孩子们你望我,我望你,有的伸出五个手指,有的伸出二个手指……孔乙己直起身又看一看豆,自己摇头说,不多不多!多乎哉?不多也。于是这一群孩子都在 笑声里走散了。 

  孔乙己是这样的使人快活,可是没有他,别人也便这么过。 

  有一天,大约是中秋前的两三天,掌柜正在慢慢的结账,取下粉板,忽然说,孔乙己长久没有来了。还欠十九块钱呢!我才也觉得他的确长久没有 来了。一个喝酒的人说道,他怎么会来?……他打折了腿了。掌柜说,哦!”“他总仍旧是那副看不起人的嘴脸。这一回,是自己发昏,竟然当街和别人争论汇编语言有几种数据类型。那些人,惹得起的么?”“后来怎么样?”“怎么样?先录口供,后来是打,打了大半夜,再打折了腿。”“后来呢?”“后来打折了腿了。”“打折了怎样呢?”“ 样?……谁晓得?许是死了。掌柜也不再问,仍然慢慢的算他的账。 

  中秋之后,秋风是一天凉比一天,看看将近初冬;我整天的靠着火,也须穿上棉袄了。一天的下半天,没有一个顾客,我正合了眼坐着。忽然间听得 一个声音,上三个小时,要间包房。这声音虽然极低,却很耳熟。看时又全没有人。站起来向外一望,那孔乙己便在柜台下对了门槛坐着。他脸上黑而且瘦,已经不成样子; 穿一件破夹袄,盘着两腿,下面垫一个蒲包,用草绳在肩上挂住;见了我,又说道,上三个小时,要间包房。掌柜也伸出头去,一面说,孔乙己么?你还欠十九块钱呢!” 孔乙己很颓唐的仰面答道,……下回还清罢。这一回是现钱,房间要干净,陪上网的要长得漂亮。掌柜仍然同平常一样,笑着对他说,孔乙己,你又惹事了!但他这回却不十分分辩,单说了一句不要取笑!”“取笑?你不惹事,怎么会打断腿?孔乙己低声说道,跌断,跌,跌……”他的眼色,很像恳求掌柜,不要再提。此时已经聚 集了几个人,便和掌柜都笑了。我安排了房间,带他进去。他从破衣袋里摸出六块钱,放在我手里,见他满手是泥,原来他便用这手走来的。三个小时后,他上完网。孔乙己在结帐的时候从来不和我们计较钟点,这次,我还多给他上了十分钟。这次他从包房里走出来,是满脸的惆怅,看到他的脸色,有人取笑道:孔乙己,德鲁伊升到几级了?,孔乙己答道:尽是MFC,服务器也没有使用AEAWEBLOGIC,升级模块里面一大堆冗余数据,玩这种东西丢人不丢人?””丢人?我亲眼看着你玩的,你又破解人家的DLL想偷代码了?,孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色:君子故穷,其言显富,皆等货色,何需窃乎。你们这些人,要回家复习功课了。便又在旁人的说笑声中,坐着用这手慢慢走去了。


  自此以后,又长久没有看见孔乙己。到了年关,掌柜取下粉板说,孔乙己还欠十九块钱呢!到第二年的端午,又说孔乙己还欠十九块钱呢!到中秋可是没有说,再到年关也没有看见他。 

  我到现在终于没有见——大约孔乙己的确死了。
转帖自:http://www.cnblogs.com/kvspas/archive/2008/12/25/1361932.html#Feedback

你可能感兴趣的:(it)