最近发东西少了。原因自然在我。22年初开始到现在两年左右,我的目标聚集在边缘服务器和相关产品上,做了不少事情。写出来的书如果算是一种产品的话,我还想做一些其它的,更有意思的产品。坦率来讲,做这个产品的过程是一种非常有意思的体验,但从商业结果来说,目前还在追求中。
做产品之外,一直在学习一些东西。最近这半年至少把iOS开发(基于Swift),Flutter(二进宫),Go开发服务端,以及这两周在学习的Rust摸索了一遍。突然想梳理下工作十来年,到底摸过哪些编程语言。
这些年学过的编程语言
2000-2004,大学学的是C语言。当然,第一次上机也没考过。这个时候,我对编程没啥感觉,也不知道是干啥的。不过大学几年自己学过用FrontPage,DreamWeaver做网页。后来Flash兴起的时候却没搞过Flash,不太懂 。
硕士3年学过基于ANSYS的APDL语言,这个我到现在才明白它其实是Domain Specific Language。我用它主要是做磁场分析。唯一学过计算机编程的就是临毕业的时候,把C++的面向对象的含义搞清楚了。这是我第一次对编程世界和现实世界在转换层面上有了一次直接的link。这个影响很深,持续到现在还是——也就是我将问题域转换到程序域的时候,会自然得使用OOP的思想。
工作前三年主要是C++。主要是C++03我觉得,写了几十万行代码。最开始在windows上开发,用vc6,调试啊之类的很方便。最后一段时间去linux上开发,就碰到大难题,kdbg,linux上的开发环境肯定是不太方便。
然后就开始做android。android虽然语言是java,但开发的是客户端应用,所以专业领域其实是客户端开发。而java在服务端的开发没咋学。同一门语言,开发不同领域,其实欠缺的知识是领域知识,领域知识包括业务知识以及领域内的生态。比如服务端开发,数据库之类的就少不了。但在android,懂sqlite就足够了。再说,领域知识是门槛,具体用啥语言不关键。比如PHP,python,go,java都可以开发后端服务。要干的活没啥区别,语言根据自己情况选择就好。
做android的过程中,因为要给dlna开发一个客户端,所以用了python+相关GUI开发。这是第一次接触python,不深,很快就忘记了。
此后一直以android java为主。直到15年写Android ART那本书,才接触了C++11。对C++语言又有了全新的认识。基本等于重学了C++。但依然感觉C++的库太少,不像java,那么多开源的功能库可以选择。而且,C++ IDE尤其是调试还是不太方便。
这期间因为Machine Learning,区块链各火过一年,我还学过python和go。当然,依然没有深入下去。因为那个领域不是我专注的,没有业务需求做支撑,很难走下去。
从银行出来前,做了一个前后端的项目。这是第一次做前后端业务。这次彻底把javascript/ES6好好学了下,包括React。但没学VUE和Angular,因为当时业务都用React。这次因为项目需要,然后同事里有前端的高手,就从他那学了不少。结果就是JS我相对来说还是比较熟。我后来又加强了在js这块学习。JS里OOP的实现路径和C++完全不一样,面向对象实现方式有不止一种路径,这一点对我理解JS还是有很大意义。这个前后端项目里,我大致看了java spring开发,但是没太理解。后来也不了了之。
然后呢,就到现在这个产品。因为这个产品,首先做的是java后端,但是没用spring,而是quarkus。基于quarkus,算是相对全面了解了服务端开发的知识。当然,这个知识对比云上的还是有较大差距。因为本质上边缘服务器是单机系统。架构思路模仿了云端,但实现上没有那么多资源来做分布式。
基于java的派生语言,如groovy等,也是作为场景脚本了解了下。当然,基于groovy的dsl最出名的就是gradle。
接着就学了iOS开发,基于Swift。我对OC有点排斥,这门语言太古老了。太古老的东西我都不太想碰。 还写了一篇公众号。但因为整体没有掌握iOS领域开发,所以Swift后面也没推下去。
基于这个产品,后来还深度探索了go语言的服务端开发,这次比较深入了,看了好几本书,写了一个完整的可用的程序。也算是弥补了一些遗憾。
当然,还是因为产品需要,客户端那块把flutter/dart整体学了一遍。从我的体验来看,语言发展到这个阶段,很多东西都有相似之处。
当然,我一直想找一个全栈的语言。我之前一度认为js是一个不错的选择。其实从某种意义来说,js已经做到了全栈。但这门语言性能上肯定是个问题。
我最近在看rust,有点意思。好像很多领域都可以进入。另外,客户端语言上,基于苹果生态开发东西好像也很有意思。大概率后面会搞搞SwiftUI之类的。
总结这一路下来,有几个感慨:
最后的最后