关闭

进入程序员的自由天地

1087人阅读 评论(1) 收藏 举报

我认识一个共享软件的作者,近十年来都在开发他的虚拟光驱的软件,不时给这个软件添加一点新的东西。我对此觉得很奇怪,对他说,我觉得虚拟光驱是一个很简单的东西。用一个映象文件容纳光盘上的数据,并开发一套驱动接口让系统以为这是一个光驱。下载网上开源的代码,应该不超过5000行。为什么他要为此耗费这么多年的精力呢?

他举了个例子说:国外知名的虚拟光驱Daemon,它的强项在于兼容性。几乎任何软件都能正常使用它的虚拟光驱,并当做真正的光驱来访问。而普通的开源的虚拟光驱,就有很多不支持了。

他曾经发现一种游戏,要求用户插入光盘。用他自己编写的虚拟光驱来模拟,总是不行。同样的映象文件,换了Daemon就一切OK。这让他大为诧异。碰到这样的情况,他根本就不可能到网上去搜索“为何我的虚拟光驱不支持某某游戏”这样的傻问题,也不可能在某处找来一段代码拷贝一番就解决。他必须找到问题的实质,才能找到对策。

花去漫长的时间,最终分析的结果是,原来因为该游戏希望每个用户都购买正版光盘,它就用了一种特殊的策略来分析用户所用的是不是真实的光驱。大家都知道硬盘的读取速度一般都比较快,而且事实上也更加稳定。光驱读盘的速度比硬盘相对慢一些,而且读取数据的速度有一定的不稳定性。比如说,数据读取的速率可能会以某种数学模型所定义的曲线为轨迹发生波动。而这个软件就根据这种不稳定性的匹配程度来进行检查。如果虚拟光驱提供的数据是不匹配这种特征的,则它很简单地禁止游戏继续运行。

而Daemon则在内部插入了这样的模拟函数,有意对数据的读出进行各种延时的处理,使之看上去非常像真实的光驱读出的数据。

总而言之,他开发的是一个逼近世界顶尖品质的好东西。当然代价是汗水与时间。

我能想象到在没有任何公开的代码,或者是前人的经验指引,自己去钻研发现并解决这些问题的困难。能在网上找到解决方案的问题必定不会是软件技术里的关键问题。相反是这样一个一个的无头悬案,才构成了程序员们所谓的“核心技术”。

我和一些人的见解不同。我并不认为越底层的技术就越“核心”。总有人认为系统比软件底层,所以程序更“核心”。而芯片比程序更底层,则芯片又更“核心”。其实硅片比芯片更底层,沙子又比硅片更底层,那是不是沙子才是最核心的技术呢?

我认为,在任何一个领域里,能够进行持之以恒的钻研,当大部分人选择放弃,而你依旧锲而不舍地学习、研究、解决一个又一个实际问题,你就能掌握核心技术。简言之,善于把握自己能够掌握的知识,并不断深化拓展知识领域,这才是真正的学习之道,也是成就个人和团队核心技术的途径。

我见到一些工作过多年的人,很有特点。有一种号称对技术没兴趣,更喜欢做管理,但其实并没有那么多做管理的机会,或者真的有机会,而做得也并不理想;有一种全凭在新手面前吹牛皮支撑老资格,实际编程依旧一塌糊涂。我从来不对别人妄加评论,但从技术学习上讲,他们都算是没到家。

《竹林蹊径——深入浅出Windows驱动开发》终于出版了。据我了解,张佩因写作这本书,在家伏案了半年。他是凭着极大的热情和信念去写作的,否则即便薪资上的损失都很值得惋惜。就本书而言,先不去考量书中内容的深浅,技术的精粗,仅就作者的诚心和写作精神,便值得称赞。

牛不是一天吃大的,小牛雏要不断地吃进养料,才能变成大牛。牛人要有牛技术,牛的技术,就是核心技术。我希望这本书的每一位读者,不管你现在或是将来,做的是应用开发还是内核编程,不管用的是C++还是Java或.NET,在工作、学习过程中都具有锲而不舍、精益求精的精神,哪怕最菜鸟的新手,在若干年的积累和沉淀后,都能够逐渐形成自己的核心技术。只有掌握了自己的核心技术,才能进入程序员的自由天地。

此文送给《竹林蹊径——深入浅出Windows驱动开发》的读者,是为序。

谭文

2010年12月10日

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

为什么他月入10w我月入5k?程序员如何实现财富自由?

最近无论是在社群里还是,各种付费平台上,都能看到闪闪发光的一个词——财富自由。 我好奇地去搜索了一下百度百科。 财富自由是指,你无需为生活开销而努力,为钱工作的状态,简单的说,你的资产产生的被动收入,至少等于或超过你的日常开支,这是我们大多数人最渴望达到的状态。 但是也有个很重要的问题: 财务自由仅...
  • weixin_36841920
  • weixin_36841920
  • 2017-12-19 23:37
  • 117

自由开发者如何赚钱?一个独立开发者的心路历程

【回复“1024”,送你一个特别推送】 原文作者:MikeTech 原文地址:https://miketech.it/2016-self/ 特别声明:本文为MikeTech原创并授权发布,未经原作者允许请勿转载,转载请联系原作者 ...
  • OQjya206rsQ71
  • OQjya206rsQ71
  • 2017-11-30 00:00
  • 1339

程序员的年龄天花板

程序员的年龄天花板一直是备受关注的话题,真相到底如何,进来看撒。
  • foruok
  • foruok
  • 2015-08-24 06:56
  • 23569

时来天地皆同力,运去英雄不自由——北漂18年(84)

诺奖得主赫伯特·西蒙(Herbert A.Simon,1916~2001)提出过剪刀理论,大概意思是个人思想加上环境的综合因素决定着一个人,像剪刀的两个片儿。
  • jobchanceleo
  • jobchanceleo
  • 2017-02-24 11:22
  • 1815

程序员在互联网公司混日子是种怎样的体验

写在最前 在这个炎炎夏日的周六夜晚,坐在电脑旁边的我静下心来,认真的review了一下本周在公司的工作情况,内心竟有些波澜,遂提笔而写。(以下文字纯属有感而发,非技术文)。   我们公司有个新来的同事小A,他是做前端开发的。为了尽快融入技术部,与技术哥哥们打成一片,小A除了工作当中...
  • running_runtu
  • running_runtu
  • 2017-07-26 17:05
  • 569

周易六十四卦——屯卦

乾卦,坤卦,天,地,这都是自然的现象,第三个卦不是天不是地,而是天地开始相交,阴阳交合,生命出现的征兆。 屯卦,面临困境的智慧。屯这个字,就是一颗豆芽,上面还顶着盖子,代表的是生命萌发的状态。 得到这个卦的时候,意味着这件事情处在一个初始状态,哪怕日后会长成参天大树,但是目前来说,就是一个自己非常微...
  • xexiyong
  • xexiyong
  • 2016-01-06 21:33
  • 608

C++堆、栈、自由存储区、全局/静态存储区和常量存储区收藏(转)

一、一个由c/C++编译的程序占用的内存分为以下几个部分:    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。    2、堆区(heap) — 一般由程序员分配释放(malloc/...
  • yiya1989
  • yiya1989
  • 2013-05-21 20:45
  • 3818

阿里面试回来,想和Java程序员谈一谈

阿里面试回来,想和Java程序员谈一谈 引言        其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内...
  • xie_xiansheng
  • xie_xiansheng
  • 2016-11-07 16:19
  • 2787

天地图专题五:在天地图上绘制电子区域并保存数据

本文介绍如何在天地图上绘制电子区域(电子范围或电子栅栏),并且,我们要将我们绘制的电子区域的坐标数据保存到数组里,以用于提交到后台,或根据数据来绘制电子区域。 天地图中有绘制多边形的接口跟绘制矩形的接口。 我们就从这里入手。 调用接口其实不难。这里稍微要绕一下的地方是如何在调用 绘制多边形接...
  • liusaint1992
  • liusaint1992
  • 2015-10-07 22:11
  • 3077

是不是程序员总会遇到一个瓶颈期,觉得自己没有进步了,该怎么解决?

你遇到了一个问题,想想别人是怎么解决的。 先去自己猜想问题解决的思路是什么,然后再去看他源码实现。 所有的流行的开源框架都是为解决问题而生。 自己瞎折腾解决不了实际问题的框架也根本不会流行。
  • jnshu_it
  • jnshu_it
  • 2017-06-11 10:32
  • 956
    个人资料
    • 访问:3860825次
    • 积分:55891
    • 等级:
    • 排名:第58名
    • 原创:1460篇
    • 转载:83篇
    • 译文:1篇
    • 评论:3782条
    博客专栏
    文章存档
    最新评论