致敬一个渐行渐远的时代!

    昨天一个老同事聊天时,随意的说了一句话:你变了。急忙问:哪儿变啦?答:变光滑了,不是那个锋芒必露、仗剑江湖、砍砍杀杀的那个你了。稍作犹豫马上附和道:没办法,老了!老了!
    思考良久,终于还是决定把自己的想法写一下,放15年前,这肯定是未卜先知。现在则是马后炮或者说是“事后诸葛亮”了,管它呢,当成吐槽吧。
一、代差的意义
    说起代差,脑袋里印象最深刻的是“歼8大战F22”的模拟场景。当然这个场景受时代、技术、环境因素影响太多,在今天看来几乎是一个笑话。这不是说在特定环境下歼8不能赢下F22,而是从概率上讲太低了,有多低呢?我很想说趋近0的,但还是给个0.01吧,毕竟瞎猫还能碰到死耗子呢。
    另一个例子就是燧发枪,战争进入热兵器(火器)时代的典型代表。它所面对的是冷兵器时代的弓和弩,优势有多少,历史已经给与了现实的评定。退一万步讲,即使是面对现代科技武装到牙齿的滑轮弓弩,燧发枪依然拥有优势,不会轻易认输!
    举了两个例子,以我对代差的粗浅认识,个人觉得代差意味着:碾压、效率、进步!本来想展开仔细写写的,算了,此处略去N千字。
    其实有一种现象一直在技术圈不断重复上演:不停追逐最新的技术!曾经有无数“先贤”、“大师”谆谆教导:要打好基础,要打好基础......不知道为什么,我现在特别想说的一句话就是:我去年买了个大表!从作战思想、体系、任务分配、战斗效果来看,我实在看不出多飞5年的歼8飞行员对于F22有任何技术性的提升!或者说多练习5年的弓弩对燧发枪的技术提高有决定性影响!相反,我看到的是惯性思维带来的巨大逆向隐患!因为不适应新思想新体系下的战争工具而导致的致命性结果!这就跟开着F22用小米加步枪最终拼刺刀的思维来打现代化战争一样,结果不言而喻。对于这样的败者,不但不应同情,而且还得踩上一万只脚,吐上一口唾沫,顺便说一句:活该!
    那么,最新的技术带来了什么?你已经看到了,是最新的作战思想、作战体系、任务分配、战斗效果,它对前代来说,是彻底碾压!是效率提升!是科技进步!时间倒退23年,我们看到的是以VCL为代表的最新一代的集成开发工具RAD所带来的碾压,效率,进步!20多年过去了,记忆也都越来越模糊了。
二、简单但又不简单的技术
    在说了无数的废话之后,终于要直面我们今天的主角了,嗯,它的名字叫......Lazarus?算了,我忘了,这GRD的没事就喜欢查水表。还喜欢用威胁信的方式查水表。。。所以,我还是直接吐槽吧。
    23年前,VCL做为新一代的类库,给开发者以极大的方便,至少从表面上看起来是十分简单优雅的,不过,真要仔细深入下去,那就是一个非常非常不简单的技术了,此处省略N千字。
    把时间拉回来,我们回到现在,看看一些有趣的事情吧。
    高能预警!高能预警!高能预警!下面文字将会给极端FANS带来非常严重的伤害,毕竟是一场互相PK甚至是1 v N的乱战,因此,请相关人员迅速撤离战场,以免造成误伤!


    吹牛吹了半天,咱们还是写个程序吧:Hello,World!Are you kidding me?作为一个无所不能、无所不知、战无不胜、攻无不克的强大开发工具,你就天天玩Hello,World?好吧,好吧,我打开Win7自带的计算器程序,写这个吧!是不是很简单?是不是很简单?是不是很简单?所有认为简单的都出门右转面壁思过10分钟!因为我们今天要讲的是不简单!Are you ok?(这梗出现的地方不太对吧)。不管那么多了,咱先用原版计算器算个数学题吧:
    sqrt(2)+(sqrt(3))=3.1462643699419723423291350657156
嗯,这是我电脑上的结果,这个结果包含两个内容:高精度计算和公式解析。有关高精度计算的内容(什么apfloat,mpfr等等)咱今天就不说了,单说带一个让人蛋疼加恶心的dll吧。婶可忍但叔不能忍啊,咱这么强大,自己写个类库算了!嗯,同学,刚好我手头有数论的基础算法书籍,看你骨骼清奇就便宜卖你了,以后维护世界和平的任务就交给你了!啥?你说没事?咱还有大招:静态联编!好吧,假如这招也不行的话。。。算了,都TMD这么折腾了,我干嘛还要给自己找这么多麻烦,直接拿c开发不就得了。。。恭喜,成就+1:打开了新世界的大门!
    好了,这个计算器的故事只能先写到这儿了(其实这里面还有很多很多可以折腾的地方,同时,可以展开的内容也是非常非常多的,多得超乎想像,有兴趣的同学可以深入一下),为了不变成杠精,咱得把一些事情说明白:1.高水平的技术是由高水平的人员开发的,但总体来说这些人员数目也是有限的,这就意味着很多情况下不可能维护同一系统的多个版本,所以为了保证兼容性,有可能只维护了一个版本,具体到它的衍生版,那也不是一件很容易的事情。2.只有越开放的系统越有可能获得更广泛的支持。3.同2一样,生态环境影响巨大,这意味着更加庞大的投入->产出->收获的良性循环。
    单纯从一件简单的事情上,透漏出的是完全不同的不简单!最后再杠一下吧:你说了这么多,这有个毛用?纯粹是钻牛角尖!好吧,曾经我也认为32位整数是够用的......


    扯得有点远,咱们转战一下高端大气上档次的服务器开发。首先面对的是高可靠性,高稳定性,其次才是高性能。以最简单的HTTP协议为例(又是一个简单又不简单的悲剧),无非就是文本解析吗,这还不简单?好吧,当你明白任务处理、内存管理、路由规则并解决一大堆所谓的多线程瓶颈时,恭喜你,有没有想哭的感觉?即使是面对gzip这种最简单的坑时,你心里可有一丝丝蛋疼的滋味?如果加上所谓的简单的(Http)s,你是不是要倒吸一口凉气?就算这一切都完美解决了,你确定稳定性没问题了吗?压力下的稳定性有时都不能说明啥问题,否则也不会有专门以此为专业的自动化测试工具和服务商了。好吧,这个坑好大好大,每一个填起来都巨费精力。最后,极有可能同上面那个故事一样:恭喜,成就+1......
    在这个故事中,我印象最深的杠是关于“粘包”的,因为对这个词语的误解导致双方无解的鸡同鸭讲、对牛弹琴,最后,当然是没有最后了。
    成就:每个填坑的一小步,都是血泪的一大步,而这一大步就如同射箭一样,对于燧发枪来说,毫无意义。
    
三、脚本语言的意义
    首先我得承认一个错误:我对脚本语言的鄙视只能显示我自己的狭隘、无知、自大和傻缺!认识这个错误有点儿晚,只能用“朝闻道夕死可矣”来安慰一下自己。同样仅仅认识到这个错误都让我付出无数无意义的汗水和泪水,这也是悲惨的事情。如果单纯从“存在就是合理的”这个唯心角度来说明问题,我想任何人都不会认输,所以,换个角度也许会好一些。
    从软件工程角度:系统是在朝着更加复杂更加庞大的方向发展。从银弹理论角度:找到最优解是不可能的。后来的故事大家都看到了,没有最优解就只能找次优解了,这个次优解就是:以服务为支撑加快迭代速度!在加快迭代速度方面,很显然,编译(特指NativeCode,意思到了,明白就行)的优势变成了劣势!注意,这个结论很恐怖,也是天平逆转最重要的一步!从优劣互转来看,其实也很像弓弩和燧发枪的区别,练习强大的臂力就意味着要消耗更多的食物,而这个强大的臂力对燧发枪来说意义不大。所以,由代差所带来的优劣互转绝对是要命的一件事。
    针对脚本语言,我们来看看它的优点:
    更加开放:这意味着有更多人来查看代码,来修正错误,增加功能,加快迭代速度,形成更快的良性循环。天下武功,唯快不破!用速度来打败对手的例子比比皆是。以热爆的自动驾驶为例,我一直觉得是大公司比拼迭代速度的结果。当然,这个例子很荒谬也不严谨,只能代表我个人的一家之言。
    更加灵活:从语言特性来看,JavaScript带给我们一个完全不同的开发思路。而像Python、Perl这些具有交互式应用的环境又会带来一些很奇妙的结果。这里有一些很有意思的故事,比如把使用计算器的知识快速应用到Python、Perl语言或者是Mathmeticas工具上面去,不得不说这真的是一种很奇妙的事情。
    性能:这是诟病最多的地方,然而却又是最不重要的地方。什么硬件性能(CPU/GPU)、集群、甚至包括算法调优等等内容,这不是三两句能说清楚的。但结论和事实观测结果很接近。要是一定杠到所有底层都是ASM驱动的,我觉得没啥意思,毕竟前面提过:高水平的技术是由高水平的技术人员开发的,这些内容对普通开发者而言毫无意义。
    在这个部分的最后,需要多说一点的是:这些脚本语言往往跟最新技术密切相关,比如流行的大数据、人工智能、区块链等等内容。这意味着技术进步的方向,也预示着掌握最新技术的最快途径。同样,这些技术往往在底层已经深深的默认集成了网络通讯、矩阵计算等内容,并且这些内容都是最新最快最可靠的技术。站在巨人的肩膀上才能让我们飞得更高,看得更远!如果回到前面的内容,我还是想说:掌握弓弩的射击技术对燧发枪的技术提高几乎毫无用处。
    另外,我对脚本语言的认识还很粗浅,总觉得深度不够,但一时又无法深入理解,所以只能先这么写着吧。


四、未来的方向
    用了这么多文字,我只想向后来的开发者说明几个事情:
    1.千万不要上当!千万不要上当!千万不要上当!对于那种所谓的“要打牢什么什么基础”的“砖家高手”言论,保持微笑,然后心里大喊:我去年买了个大表!即使是你需要这方面的知识时,也仅仅是根据需要进行涉猎即可。如同了解弓弩射击原理一样,了解一下即可,千万不要忘了你的目的是用你手中的火枪更加高效快速射杀这些弓弩专家!还有一种情况,你是那种高水平的技术人员,你的目的是使用弓弩来参加奥运会比赛的,嗯,你可以无视上面那堆废话了。否则,一定要在自己心里多问几句:我这水平能到奥运会参赛吗?我心里是否有这点儿13数?
    2.本来NativeCode的一个优势是保持代码秘密,保持技术领先,但在快速迭代的压力下,这可以说几乎是扯淡般的存在了。举个例子,车牌识别和文字识别在几年前绝对是核心技术,但现在几乎成渣渣了。。。当然,我还是要忍不住杠一下的:如果你有类似的项目或者工作要做,请参考上面的两个例子,尽快更换开发工具,不要浪费生命和时间了。其实这种例子有太多太多,属于那种泪目且无法言语的内容。
    3.如果把时间也看成一种投资的话,显然,投资到这种小众到半死的工具上是毫无意义的。幸运的是,99.99%的开发人员用脚进行投票,对于那个0.01%的人员,我只能说:有兴趣真好!
    4.咸鱼翻身?这是童话或者修仙小说中最经常出现的故事情节。然而,能不能不要叫醒大家,让大家沉睡在童话或者小说中好好的睡一会儿?
    5.一个时代,记录着VCL辉煌的时代,渐行渐远。。。一些英雄,固守着城堡,他们希望一个辉煌的结局。。。他们注定是悲壮的,像堂吉诃德一样。。。然而总有一瞬间,希望那些英雄能够胜利。。。


致敬!向所有历史战车上的胜利者和被车轮碾压下的灵魂!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章