关于计算机学习

我认为计算机领域真正的学习应该是“博客式”的,即遵循“遇到问题->查阅资料->弄懂问题->有成就感->总结记录”,早些时候我把这个叫做“需求驱动学习。

举个例子

嘟嘟(我家泰迪)平日里自诩Java小王子,无论是手写Runnable还是一口气1 << 8个线程池都信手拈来。有天老板(我)在微信上说:“大家都说‘人生苦短,我用Python’,蟒蛇听起来比咖啡厉害多了嘛,你,赶紧用Python把后台重写一遍”,嘟嘟一边暗自庆幸老板还没听说过PHP,一边嘀嘀咕咕开始了改造之路。在迁移Java的多线程部分的时候,嘟嘟想用Python的Thread来做,但是发现Python中有万恶的GIL(Gay In Love Global Interpreter Lock),想要实现走位酷炫的线程池的计划泡汤了。

一些社区建议使用多进程来代替多线程,但是嘟嘟在写了两个Demo之后发现它们和多线程不一样,变量竟然不能共享,这代码还怎么写,于是继续面向百度编程,在误点进去十几个培训机构的主页之后,嘟嘟终于找到了一个新奇的解决方案——异步编程。在短暂纠结于yield和yield from的写法之后,嘟嘟又找到了更好用的async/await,并顺利把Java上的多任务移植到了Python上。好景不长,有天嘟嘟不小心让视频转码的任务读入了硬盘深处700多个G的马克思主义视频教程,发现Python的其他多任务都不能正常响应了。在妙峰山烧了七八柱香之后,嘟嘟才了解到原来是因为一个异步任务被阻塞住了,导致很多其他任务不能被处理。最终嘟嘟还是把计算密集的任务扔到了多进程上去做。

在整个项目迁移结束之后,嘟嘟开始对迁移过程进行复盘,发现以下几点需要搞明白:

  1. 为啥多进程变量不能共享
  2. 为啥有GIL在多线程就不好用了
  3. 为啥一个异步任务阻塞会影响其他任务
  4. 为啥在百度搜Python老蹦出来培训机构

于是嘟嘟开始了新一轮的调查研究,在经历过以往的教训之后,嘟嘟学会了在一个404的网站上搜索404的信息。这才明白了进程和线程的关系,明白了进程如何通过消息队列进行通信,明白了异步编程的好处和局限性以及事件循环的原理。无论是进程、线程、协程还是纤程,本质都是想要达到一个目的,即“在需要的时候占用CPU,不需要的时候释放CPU”。找了一堆的资料之后,嘟嘟又打开了大学时崭新的操作系统课本,把处理器这一章从头读了一遍,发现醍醐灌顶,每一句都是好东西,感叹自己当时上课怎么就没发现这本书的精妙之处。感慨之余,决定把自己的感受记录下来,标题就叫《关于计算机学习》。

我的经历

从本科一年级第一节编程课开始,我就喜欢上了编程。之后整个一年级都沉浸在ACM刷题和囫囵吞枣的学习之中。虽然当时只会命令行编程,但是还是做出了一些小玩意,比如自动计算游戏中交易的收益、收集名侦探柯南TV版的分集信息等,当时没什么备份的概念,也不懂版本控制,现在程序都遗失了,留下来的只有一个基于MFC的计算器。

我的专业是计算机科学与技术,当时要学习一些计算机的基础课,比如操作系统、数据结构、计算机组成、计算机网络、编译原理、数据库等,在大学前两年中,我一直都特别讨厌这些科目。一边是自由新奇的编程实践,另一边是枯燥和看似无用的琐碎知识点——就像高中一样,显然后者无法引起任何人的兴趣——即使有,在一个具有强实践性质的专业中谈纯粹在课本中获得的快乐也和耍流氓无异。当时在这些课程中我相对不那么讨厌的是数据结构课,因为其中的很多算法我在很久之前就已经在POJ上刷过很多次了,所以上课的时候有一种仅通过预习无法感受到的亲切感——这也是本文想要传达的观点。

我是什么时候有了“还是制定专业课计划的那几个老头厉害,是我当时太年轻了”这种想法呢?在大二结束和大三开始这段时间,随着写代码越来越多,接触的领域越来越多,我开始做了一个在当时看来算得上是巨无霸的项目,从前端到后端都是我一个人完成。和我之前接触的项目不同,这个项目是真的有很多用户的(笑),所以系统上线之后不断暴露出越来越多的问题,比如数据库查询很慢,比如网络延迟很高,比如客户端卡顿等。在给自己收拾烂摊子的时候,开始重新学习了多线程、数据库、计算机网络(主要是退避算法之类),然后猛然惊觉,“这不就是我大学里的专业课么?”。

时间一晃到了现在,我已经研二了。在给师弟师妹们介绍我那点不成器的经验时,我的观点也从“多实践多编程”转变成了“先把基础打好”。计算机科学与技术的专业课都很重要,无论讲课的老师水平如何,都一定要学好,它们是构造整个互联网空间的基向量。话虽如此,这并不代表我完全同意目前计算机教学的思路,我认为计算机领域真正的学习应该是“博客式”的,即遵循“遇到问题->查阅资料->弄懂问题->有成就感->总结记录”,早些时候我把这个叫做“需求驱动学习”。

我的观点

为什么我们都不爱听大道理?为什么我们听了那么多道理仍然过不好这一生?为什么我们反感鸡汤?

我认为计算机的这些基础课就像所谓的大道理一样,没有相关的经历作为培养基的话是无论如何也不可能理解的,自然只能觉出枯燥无味和腐朽陈旧来。但是倘若踩过了无数的坑就会明白,这些基础课本字字珠玑,毫不过时(也可见我们的科学发展其实并没有大家想的那么快),古人诚不我欺也(有多少人都写成“诚不欺我”,意思还是一个意思,但是对话场景瞬间从项脊轩蹦到了王老大烧烤摊)。想要理解多少大道理就要踩多少坑,该踩的坑一个都少不了。

不要误会,我不是在宣扬基础教学无用论,我的意思是初学者一开始不必过于深入地了解基础知识,因此此时无法真正理解,不如先拓宽知识面,暂时了解有这么回事就可以,把一部分的时间匀出来自己去折腾,只要智力正常并且适合干这行,很快就会产生深入学习的需求的,这时候的学习效率远比按部就班划拉书本要高很多。以嘟嘟来举例,学习处理器调度的过程可以分为以下几个阶段:

  1. 了解到一切计算都被分解成指令交给处理器顺序执行
  2. 在Bilibili上自动监测赶海四天王的视频,并及时下载
  3. 查阅类似实现的开源代码,学习,重复踩坑,完成需求
  4. 查阅课本或工具书,学习进程和线程的原理、关系以及区别
  5. 拓展了解协程、纤程、Actor等异步编程模式
  6. 接触NodeJS、Python、C#、GoLang在多任务上的做法,对比学习
  7. 感觉自己很厉害,写博客交流学习,一写笔才发现还有很多细节不懂,继续学习
  8. 开始踩下一个坑……

以上只是一个捏造的例子,用来说明一个渐进式的学习过程可能是什么样子的,实际过程中的步骤或许没有这么精细和繁琐,但大步骤不会差很多。我可以保证相当程度的低年级计算机专业同学对于以上的这些东西都没有清晰的概念,所有东西都糊作一团。根据我浅薄的经历来看,有一些经验比较丰富的同学可能只是停留在前三个阶段,实事求是地讲,代码风格和注释都很漂亮,但是就是无法再往前一步。顺便一提,还有一些同学在学习某些语言或者框架时,总是会虔诚地走完“买书->找视频->进技术群”这个流程,我认为这样效率是比较低的,有那百度云下载视频的时间官网文档都看了好几遍了。不如先找个点切入,即使是Hello World,然后一步步拓宽把整个需求盘下来,在复盘的时候再通过书或者是视频系统学习。系统学习应该是后置的,连它能干嘛都还不知道,系统学习又有什么用呢,结果只能系统地遗忘。至于技术群,其作用是收表情包,和技术没啥关系。

无论需求从哪里来,是随便玩玩,还是饭圈妹子的抢票委托,还是老板或外包的要求,只要你决定实现一个需求,下一步就是分析和调查需求应该怎么实现。如果你有一定的基础知识(即使是广泛而不深入的),那么调研的过程会更有针对性,接下来就开始”Done is better than perfect”的过程,其间随着踩坑会开始接触相关领域的知识,然后拓展学习总结出一套敝帚自珍的宝贝,在成就感和虚荣心的驱使下,把这些碎碎念记录下来,记录的过程发现原来还有很多细节自己根本没弄清楚,再去迭代学习,一步步把这篇博客写完。基础知识在这个过程中会一步步得到加强,每一次都是重新认识,每一次的认识都更加清晰几分。

或许你又会问,总是实现一个又一个大同小异的需求,如何才能摆脱成为CRUD Boy的命运呢?多想,多拓展,多总结记录,并乐在其中,It’s that simple.

茶和牛奶

墙头雨细垂纤草,水面风回聚落花。

井放辘轳闲浸酒,笼开鹦鹉报煎茶。

床上躺了一下午,起身换衣服后准备去吃晚饭,转念一想又懒得去了,于是便用热牛奶冲了点玉米片应付一下,或许是饿了,冲好之后直接喝了一大口,被狠狠烫了一下。冒冒失失吃完之后,躺在椅子上端起一杯茶小口抿着,心里突然想到:“为何自己喝茶时能这么慢条斯理,但是喝牛奶时却么狼狈”,想来想去觉得是“无欲无求”四个字。在喝牛奶时是冲着其明确的价值去的,因此并不是为了喝牛奶而喝牛奶,于是喝的过程被简化和忽略了,进而缺少了一种仪式感,而仪式感带来的就是从容和优雅。

无怪乎古人爱饮茶。爱茶之人爱的不仅是茶的香沁,更爱的是饮茶时的淡然。今人面临着越来越快的世界和不断膨胀的欲望,很难实时保有无欲无求的心境,但人心总是会累的,因此偶尔忘掉世俗烦心事是非常重要的一种能力。无论生活如何,偷浮生半日,捧一杯香茗,小口品味,钟摆骤然慢了下来,心情也变得开阔和舒缓,于是轻轻放下茶杯,欣慰地夸上一句“真是好茶”,实乃人生一大快事。

繁事压身,聊作酸文。

狼曋和羊斟

狼曋

在崤之战中,晋军全歼秦军,晋襄公抓住了一名秦国小卒,命车右莱驹将其斩杀。主将居车左,护卫居车右,身为车右的莱驹本应是晋襄公最看重的人,然而此时那秦卒突然怪叫,吓得莱驹手中的戈掉在了地上,自己也跌落车下。

狼曋此时只是晋军的一个无名小卒,这时候在旁边看到了这一幕,快步上前捡起戈一下刺死了秦卒,拎小鸡似的一把抓起莱驹追上了晋襄公的战车。晋襄公认为狼曋有过人之勇,便罢黜了莱驹,提拔狼曋为车右。

好景不长,一段时间之后,主帅先轸(这是一位非常了不起的人物,也是第一位被称为元帅的人)认为狼曋只凭借一时之勇当上车右,而没有真正护卫国君的能力,因此又罢免了他(一说先轸之后免胄殉翟时怕狼曋来救,因此暂时罢免他,但是已将其考虑为接班人)。

狼曋从高峰跌到谷底非常生气,怒发冲冠,他的朋友鲜伯看热闹不嫌事大,说道:“你既然这么生气,那么敢去以死明志吗?”。狼曋说死谁不敢,就是没有一个好的理由。鲜伯说那还不容易,我们一起去把先轸杀了。这时候狼曋说道:“勇而害上,不登于明堂,死而不义,非勇也!”,鲜伯自愧不如。

秦将孟明视所带领的秦军在崤之战中全军覆没,为报仇雪恨,三年以后,孟明视带大军与晋军交战于彭衙,这就是著名的彭衙之战。在这一战中,双方还未正式交战,斜地里便有一支几百人的军队不怕死地冲入秦军阵营,打得秦军措手不及,因而大乱,晋军趁机大败秦军,孟明视再次狼狈而归。这支几百人的军队就是狼曋所带领,狼曋也在这次战争中阵亡,他一直休养生息等待机会来证明自己的勇,并且用行动诠释了“能为国死,方为勇”。

羊斟

羊斟,宋国主帅华元的车右。在狼曋死后几十年,郑国攻打宋国。出战之前,华元请部下吃羊肉来鼓舞士气,然而偏偏漏掉了自己的车右羊斟。这小心眼的羊斟记恨在心,找机会寻仇。宋郑两军交战以后,羊斟对华元说:“吃羊肉的事你说了算,不过今天这事我说了算”(“畴昔之羊,子为政;今日之事,我为政”,这也是成语“各自为政”的出处),说着便把车子往郑国大军里赶。可怜华元堂堂主帅就这样不明不白地被活捉。

这场战争的失败给宋国造成了极大的损失,不仅损失了一员大将和几百兵士,还损失了数百辆战车,之后宋国为了把华元从郑国赎出,又花了大笔钱财。这件事在史书上只有寥寥数笔,但是我们不难推测,作为华元车右的羊斟是华元多么信任的人,可后者就为了区区一碗羊肉干出了这样丧心病狂的事情,史书上对羊斟的评价是“羊斟非人也,以其私憾,败国殄民,于是刑孰大焉?”。

同为车右,羊斟和狼曋是截然不同的两个典型,不能不让人唏嘘。

春秋霸主晋文公

公子重耳

春秋时期的晋国,晋献公有三个儿子:公子申生,公子重耳和公子夷吾。献公五年(公元前672年),晋献公攻打骊戎,掳回来骊姬和她妹妹当妃子,二女分别为献公生下公子奚齐和卓子。要说这晋献公也不全是昏庸无能,假道伐虢的事就是晋献公干的,除此之外,晋献公在政治和军事上也做了很多利国利民的好事。但是晋献公后来受到骊姬挑拨,先是逼死了太子申生,又逼走了公子重耳和夷吾,之后晋国就开始了十数年的动乱。

晋献公先是派大内第一高手寺人披去杀公子重耳,重耳无奈出走,开始了十九年的流亡生涯,逃亡生涯过了一半时,献公死了,公子夷吾即位。重耳心想回去吧,但是晋国有着优良的窝里斗传统,再加上夷吾知道重耳比自己更适合国君的位置,所以又派寺人披去杀重耳。重耳深知寺人披这死太监没有职业操守,说五更杀你其实三更就摸到你床沿了,因此穿着睡衣拖鞋就上路继续逃亡了。

逃亡中的重耳哪个国家没有去过?狄国、卫国、齐国、曹国、宋国、郑国、楚国、秦国都溜了一遍,可以说是身经百战了。其中有的国家对他很好,比如齐国、楚国、秦国,重耳在楚国时,楚成王问他以后做了国君要怎么回报自己,重耳说:“如果将来两国不幸打仗,那么我将退避三舍”。秦国更是亲手将重耳扶上了国君之位。有的国家只当他是个落魄公子,不正眼相待,比如曹国、郑国,这曹国国君甚至偷看重耳洗澡,就差朝地上扔肥皂了。郑国国君也不拿重耳当回事,大夫叔瞻劝告郑文公如果不能善待重耳,那就杀了他免留后患,这话被重耳知道了,记在了心上。

十九年间,有屈辱下的鸿鹄之志,也有款待下的纸醉金迷,最终在秦穆公的护送下,年逾花甲的公子重耳才回到了晋国,是为晋文公。

城濮之战

公子重耳回到晋国之后,进位为晋文公。晋文公虽然年事已高,但是成就霸业之心不灭,晋国在晋文公的治理下已有了霸主之实,但还没有霸主之名,所以晋文公一直在寻找一个合适的机会称霸。要什么来什么,公元前632年,楚国进攻宋国,宋国急忙向盟国晋国求救,晋文公认为如果打败了楚国,那么登上霸主之位便是顺理成章。然而晋国后方有秦齐两个强大的国家,晋文公不敢大举动兵腾空国力,于是便想确定秦齐的意向,正巧齐国和秦国都喜受贿赂,于是晋国让宋国给秦齐送去大量的财宝,依次将它们拉拢到同一条战线。

秦齐两国在收了宋国的好处之后非常高兴,在外交上对楚国施压,逼楚国退兵。晋文公心想这楚国还不能退兵,仗一旦打不起来就没法成就霸主了,这时候大将先轸给晋文公出了主意:去攻打楚国的附属国曹、卫两国,这样一来楚国必然不会甘心退兵。晋文公照办,灭掉了曹、卫两国,楚国大将子玉咽不下这口气,不听楚成王退兵的命令,执意带兵攻打晋国。晋文公遵守当年对楚王退避三舍的约定,连退九十里,其实遵守约定是其一,这么做更多原因是骄兵战术,诱敌深入。子玉在晋文公退避三舍后仍然穷追不舍,于是双方在城濮交战。此战晋军大败楚军,楚军退兵途中子玉自杀,由此晋文公一战而中原服。

城濮之战结束之后,晋文公把周天子襄王请到了践土,并献上战利品,周天子命晋文公为诸侯之长,有征讨天下诸侯的权力,从此晋文公正式坐上了霸主的位置,成为春秋时期继齐桓公之后的第二位中原霸主。实际上从这里也能看出周王室衰败成什么样子,堂堂周天子被一个诸侯呼来唤去,毫无王权可言,因此《春秋》中为了避讳这件事,将周天子出现在这里的原因写为“周王巡狩河阳”。

烛武退秦

春秋中后期,晋文公在秦穆公的支持下坐上了国君的位置,在城濮之战中,晋国狠挫楚国锐气,当上了春秋霸主。晋文公不是个心胸宽广的人,坐稳位置之后就想起当年逃亡在外时在郑国受的委屈,准备报仇。僖公三十年(约公元前630年),晋文公叫上秦穆公一起进军郑国,并许诺均分郑国土地。晋文公首先要求郑国交出叔瞻,因为他在当年重耳流亡时曾劝说郑文公杀掉重耳,叔瞻无奈自杀。叔瞻死后,晋文公又要求交出郑国国君,郑国朝内大乱,这个时候郑国大夫佚之狐向郑文公推荐了烛之武,说这个时候只有他能救郑国。郑文公把烛之武叫来,烛之武早年没有得到重用,这会儿国君有求于他,自然要发发牢骚,所以说道:“我年轻的时候还不如别人,现在老了就更不行了”,郑文公苦笑着赔罪哄了半天,烛之武才同意去游说秦国。当天晚上烛之武就吊着威亚从城门跑下去,天亮溜到秦军大营,找到了秦穆公。

烛之武见到秦穆公,从秦穆公的角度说此次助晋攻打郑国的坏处,说的天花乱坠口水横飞。其实虽然很多人对于《烛之武退秦师》的评价是“层次分明、组织严密、说理透彻、逻辑严密”云云,然而其实烛之武的论点并不是都经得起推敲:“许君焦、瑕,朝济而夕设版焉,君之所知也”,然而其实这并不是晋文公干的事,完全的张冠李戴强行抹黑,“既东封郑,又欲肆其西封,若不阙秦,将焉取之”,然而晋国不一定非得向西扩张,西边是自己的盟国,向东攻齐,向南攻楚,向北攻中山、燕国都可以,没有必要非得先拿自己的盟友下手。秦穆公何许人也?在位数十年的老狐狸了,眼睫毛都是空的,怎么可能被烛之武这几句话给糊弄过去,然而有一句话烛之武说对了,帮助晋国打郑国对于秦国并没有好处。秦国地处西戎,要想在中原发展势力,总是有晋国的阻碍,这时候打下了郑国,只能是增加自己日后扩张的阻力——晋国虽然北南东三个方向都能扩张,然而秦国想要扩张,只有往东一条路可以走。因此秦穆公思索再三,决定退兵。

秦穆公虽然是退兵了,但是心里还是打着小算盘,想要独吞郑国这块大肥肉,因此我们看到《烛之武退秦师》里的“秦伯说,与郑人盟。使杞子、逢孙、杨孙戍之,乃还”,杞子、逢孙、杨孙这三员大将可不是去义务站岗的,而是驻扎在那里等待攻下郑国的时机。秦国军队一撤,晋国也只得撤军,两国的梁子也从这里结下了。

崤山之战

彭衙之战

  • 狼曋:
  • 羊斟:

王官之战


参考资料

  1. 《烛之武退秦师》
  2. 百家讲坛·秦晋大战
  3. 百家讲坛·秦晋相持
  4. 百度百科·晋献公
  5. 百度百科·重耳流亡
  6. 百度百科·城濮之战
  7. 互动百科·城濮之战

关于新旧交替的历史进程

最近心里一直很闷。

最早要从我关注hanser说起,一年前关注了hanser,之后取关,一个多月前又关注了回来。然后对她喜欢的一发不可收拾,去翻遍了她的微博,然后了解到了鬼叔——神威鬼鸣。

看过2012年B站的拜年祭,鬼叔相当于那个时期的B站元老,无限风光,是创世神一般的存在。就在前几天,鬼叔在微博上发布了长微博,说是自己生活压力其实非常大,九月份已经确诊了抑郁症,之后不会再在B站活动。(2021年8月最新更新:鬼叔的B站账号已经被封,理由大概是古早时期的《千本幼女》)

仅仅四年的时间,一个时代已经过去了,从hanser的关注者开始,我用人肉深搜扒出了一大堆上古时期的B站大神,已知最早的是09年到13年一直活跃的河童子,MAD周刊排行榜创始人。对于他来说,鬼叔都只是个后辈。这批元老现在都几乎不在B站活动了(当然可能是充实的生活让他们脱离了这个精神寄托,这里我们就事论事),有些还是因为和B站创始人徐逸发生了矛盾被打压而后离开的。有些离开的人在优酷投稿播放量是B站十倍以上。他们是真的爱这个地方。

看着这一切,这其实没什么大不了的一切,我却生出了一种深深的历史空洞感。一个时代过去了,人心一致的辉煌时代过去了,仅仅是几年的时间。那么放眼这数千年的历史,类似大大小小的历史进程已经上演了无数次,每次一定都让相关的人大发感慨,然而现在的我们连一朵水花都看不到了。

正当我感慨生不逢时之时,我忽然明白了原因:我怀念B站的上古时代,就像我上边提到的诸位大神怀念A站一样,都是在无条件地怀念过去,他们或许看着A站曾经辉煌的痕迹也曾发出过与我类似的感叹。

看看的如今的B站,真的那么不堪吗?不是的,厉害的新人越来越多,高质量的投稿也越来越多—虽然低质量的更多—大家也都找到了适合自己的商业模式,努力向前。我在怀念过去时选择性无视了这一点而已。“这是最好的时代,也是最坏的时代”,我多少能理解一点这句话的意思了,或许意思不对,就当我断章取义了吧。

我现在多少能体会为什么孔子他老人家一直推崇周礼,也能理解为什么现在的人动不动就说人心不古我当年如何如何云云。都是对过去的怀念和对现在的选择性无视罢了。时代确实在一直变得更好,即使有很多需要着力矫正的畸形的地方,也不会阻挡历史的趋势。

把握当下。这是一句轻飘飘的话,高中作文娴熟地运用了无数次,而个中真意非亲身经历不能理解。我不敢说自己理解了,但是要好过从前。对过去的怀念有时源于没有掌控住现在,现在的我就是这种情况,只要把握住了现在,那么未来就可以感慨现在的我是生得恰逢其时了。

很惊讶我竟然能说出这种高浓度鸡汤。我一直很讨厌这种动动嘴皮子就把一切客观条件和主观意愿都视作无物的心灵毒药。然而在经历了一些事情之后,自己的心境确实会发生变化,这的确是成长的过程。

就当作是复习之余的矫情牢骚吧。

写在前面

因为一些原因,现在暂时停止了Android的学习,转向JavaWeb的学习。说是这样,其实我不论哪一样都没有真的学得透彻,顶多算是个入门。因为现在仍然处于迷茫期,不知道在研究生阶段结束后(目前大三)到底直接出去搬砖还是再去国外深造。但不管怎么说,毕竟专业相关,这些东西还是掌握的越多越好。

JavaWeb 之前是接触过一点的,不过也限于做一个大作业网站的程度。现在开始从零开始一点点地做,把过程记录在这里,用作日后的备忘。

这个专题准备一直写下去,不过一年之内可能做不了太多东西,因为现在得忙考研的事情。现在开始后悔前几年没好好学习净捣鼓编程上的东西了,并不是后悔方向错了,而是后悔即使这样也没做出什么东西来,所以还是有一点虚度光阴的感觉。

各种各样的框架、设计模式层出不穷,其实搞得我挺烦的。明明就是某个场景下的某个解决方案而已,但是总是想搞得老子天下第一(技术无罪,框架开发者无罪,但是某些框架的某些不明事理的“狂热支持者”着实烦人)。当然,我现在是看源码都费劲,水平确实非常次。所以准备拿住一个框架开始琢磨,准备从 spring 开始,把 Data JPA、MVC、Security 什么的都先了解了再说,然后再决定下一步的路。

说实话确实挺迷茫的,这样下去自己根本没有竞争力,只是这样是绝对不够的,不过还是得从这里起步,至于是不是涉足安全、智能或者VR的领域,等研究生阶段再做定论。

多线程的形象化理解

最近教大一的小孩理解多线程,想到了一个还算贴切的例子。

假设你要在12306上买两张票,假设票是连号发放的,那么当你一个人买的时候,买到的票一定是连号。而有时并不是连号的,这说明在你买票时也有另外的人在买,把本该属于你的连号票抢走了。

这就相当于多线程,每个买票的人都是一个线程,而总的火车票就是这些线程共享的资源。

关于程序员的一点感想

对于一个作家,最重要的是能写出出色的文章,文章的水平如何,和作家用什么颜色、形状、粗细的笔来写没有任何关系。假如出现这么一幕场景:许多作家围坐在桌旁,口水飞溅地争论:

“英雄才是最好的笔!”

“瞎说!关勒铭才是最好的笔!”

“英雄笔在未来十年必将消亡的 10 个原因”

“新的写作模式,双手梅花篆字”

“怎么在一分钟之内写 300 个字——论英雄没有关勒铭流畅的原因”······

可以想象是个什么场景吗?

是的,我当然知道把程序员比做作家是牵强附会并不合适,但是一些(甚至可以说很多)程序员在讨论、在追求的都是用什么语言,用什么框架,有的人没有科班背景只是在培训机构培训了几个月(没有任何对培训机构偏见的意思)就出来加入了轰轰烈烈的”程序员讨论“中。

这样真的有意义吗?难道写代码真的要与语言、框架绑定在一起吗?你是学 Java 的,让你写 Python 你就可以说自己不是程序员了吗?程序员从何时开始这么廉价了?语言、框架(以及目前各种 Mxx 设计模式)对于程序员不就像笔对于作家一样只是工具而已吗?为什么作家要被笔束缚?为什么程序员要被语言、框架束缚?

程序员应该是骄傲的作家,不应该沦落为体力劳动者,如果你是后者,请不要,至少不要在我面前说你自己是个程序员!

要开始编程了

6月准备期末考试,除了考试没有再编过程。今天院内ACM培训选拔赛,虽然手生,还是顺利通过了。这两周不用去听水课了,通过这两周找找感觉,巩固一下算法把,不要放下c++和Java的学习。一月不编程感觉水平有点下滑,很简单的题目竟然选择了很复杂的算法,还是错的,其实暴搜就可以,哎,好好练习吧