昨晚做了一个梦,所有学过的语言和技术都扑面而来,争论不休。C语言:老刘,你一定要记住我。我是你的“初恋”语,用指针把你折磨得不能死。我:当然,我以为我学会了,但是下班看到林锐的《高质量 C++/C 编程指南 》后,里面有一套试题。做了之后才发现自己对指针的理解还是一塌糊涂。C语言:哈哈,那时候你不知道我的主要目的是系统级编程,比如操作系统,数据库,虚拟机,编译器,web服务器,都是用C语言写的。窗户在摇晃。我:没有,所以我为了“急功近利”学了几门可以快速创建GUI应用程序的语言来做一些项目赚外快,包括VB、VisualFoxPro、PowerBuilder,但是我花了很多精力在他们。现在,除了VB变成了VB.NET外,其他两个早就销声匿迹了,很可惜。linux:还有我,你那时候学了linux的基本操作和shell编程,我一直纳闷,你怎么不好好练练vi,看你现在用的多笨拙,一点也不会。如丝般柔滑。我:嗯,那时候我很喜欢GUI,而且vi的命令太变态了。C语言:现在你明白了,没有GUI的东西会更长久!我:是的,时间证明了一切。C和Linux太重要了。后来才意识到你的好处,让我对系统层面的东西有了更深入的了解,对学习OS和网络编程有很大的帮助。《深入理解计算机系统》这本神书全程都是用C语言和汇编来描述的。操作系统的源码、Ngnix源码、Redis源码都是C语言的,而且几乎都运行在Linux上。C++:老刘,我不重要吗?我刚刚读了你放在杂物间底架上的C++书籍。有侯杰的《深入浅出MFC》,潘爱民的《COM原理与应用》,《Inside MFC》,《COM技术内幕》,《COM本质论》。还有C++经典书籍《C++ Primer》、《深入探索C++对象模型》、《Effective C++》等,10年没跟他们说话,真是心碎。我:对不起,C++老大,我真的学不会,看完这部漫画你就会明白我的心情了。《21天自学C++》数据结构:哈哈哈,太形象了,老刘,我还记得你为了考高,书上的习题全部用C语言做的。你感觉如何?我:很酸!现在大家刷LeetCode的感觉都一样!但是确实受益匪浅。虽然工作中设计数据结构的机会很少,但确实培养了逻辑思维能力。我必须感谢你。ASP:老刘,老刘,别忘了我,我带你入门制作动态网页,你还记得我做过哪些网站吗?我:我当然记得,我当时抱了微软的大腿!使用ASP用于编写动态网页界面,COM组件用于实现业务逻辑。我做了很多这样的事情。我花了很多时间学习COM。如果您不相信我,请阅读杂物间底部的书。唉,那时候的ASP连MVC都没有,页面之间的跳转链接都写在页面里面了。还好业务不复杂,不然怎么看意大利面条代码!ASP:那都是过去式了,微软推出.NET战略后,我们现在都升级到.NET了,MVC没问题,但你为什么要这么狠心的抛弃我们,跑去拉拢Java?我:这...Java:这有什么奇怪的?是的,拉拢我的不止老刘一个人。开放的Java是大势所趋,封闭的.NET没有可比性。我那时候好火啊,Applet,JSP,Servlet,Tomcat,Struts,老刘一直在学,顺便说一句,还有现在流行的EJB,老刘,你说说,你花了多少时间花在EJB上?:唉,每天晚上都在学习,SessionBean,EntityBean,JBoss,WebLogic...《精通EJB》,现在回头看,真是浪费时间,这些东西只有Servlet和TomcatAlive,几乎没人用!Java:不能这么说,你在那个时代,你要学那个时代的东西,不学你连工作都找不到。Ruby:对对对,我火的那几年,你不是也啃过两本书吗?《Agile Web Development with Rails》,《Agile Web Development with Rails》,你们也用RoR开发过小项目,怎么现在不理我了?我:委屈了,我很喜欢Ruby的语法,我电脑里还装着Ruby!露比:你在跟谁开玩笑?!你不仅安装了Ruby,还安装了Java、Python、Rust,还有一种语言像ErLang一样无人使用。我看到你昨天用Python写了一个小程序来帮助你的妻子处理Excel。你为什么不用我写呢?我:这...Java:或者我Java生态系统更丰富。老刘,你学完Struts和Hibernate之后是不是看了一本书《J2EE Development without EJB》就开始转Spring了?你也研究过Spring的早期源码吗?我:对对对,我记得很清楚。那天很热,没有空调。我满头大汗。逐行调试Spring源码,在笔记本上画图记录。真的很辛苦!Spring发展了这么多年,一直站在时代的前沿。Spring的投资没有白费,值得!(春季课程乱七八糟:想自己造轮子的可以关注一下老刘的课程《从零开始造Spring》)模式:让开,什么COM、EJB、Ruby、JBoss,你们太容易落伍了!相信规律的人会长生不老!老刘,说说你在花样上花了多少时间?我:嗯,挺多的。四人帮的《设计模式》读了觉得很迷茫。我只记得面向接口编程。检测更改并封装更改,而不是针对实现进行编程。还看了一本书《Java与模式》,只记得击鼓传花的责任链。真正深入理解设计模式,只有在阅读了Jive的论坛源码(这是设计模式的宝库)之后,我才开始体会到模式之美,然后才将其运用到类似的项目中。图案:《企业应用架构模式》、《Head First设计模式》、《重构与模式》你忘记了吗?我:你怎么会忘记?而《敏捷软件开发:原则,模式与实践》是我当年的最爱,但是时间长了才发现,这些都是面向对象设计,本质上是需要程序员的“抽象能力”。这是软件开发的内功。只有掌握了,才能没有窍门。现在很多人都在追求高并发、高流量的系统设计和开发,但其实大部分时间还是在做面向业务的开发,OOD和抽象能力很重要。Mode:是的,高并发、大流量的系统有时候是有规律可循的,但是要做好业务需求的抽象,难度太大。分布式系统:这么说是太看不起我们的分布式系统了。老刘虽然主要做企业应用开发,但是他在我们身上花了不少时间,负载均衡,数据复制,BASE,CAP,数据分析等等,都是很厉害的!我:我同意,这是内功!操作系统:不不不,老刘,你不能这么说,软件开发的内功是我们的计算机基础知识啊我,计算机网络,数据库,编译原理,组合原理,你什么时候没好好学习你上大学,毕业了才去补课。想想你在我们身上投入了多少时间?我:哈哈,我老头儿都拆了,没错,你们就是拔地而起的高楼基石。毕业后看了很多书,《现代操作系统》、《操作系统:设计与实现》、《计算机网络》、《数据库系统实现》、《编译原理》,说实话,如果不结合实践,干理论挺无聊的,所以就想写个码农翻公众号,用有趣的故事讲解计算机基础知识。操作系统:但是现在娱乐严重,碎片化严重,真正想静下心来读大本,学基础的人少了。我:是的,除非他真的觉得基础知识的重要性。我现在后悔那些浪费的大学时光。如果我回到大学,我肯定会通过实践来学习,自己折腾一个小OS,简单的数据库,简单的语言,Web服务器,虚拟机。我要运行我自己的虚拟机,在我自己的操作系统上运行我自己的语言……想到这里,我不禁笑醒了……回想一下,我花了很多精力来获得更多十几年学过的很多技术随着时代的发展已经消失了,剩下的都是很久没变的东西,主要有:C语言LinuxOOD和抽象网络和Web编程基础分布式基础计算机基本
