掌握的编程语言:多年学习历程回顾

发表时间: 2024-04-10 22:15

最近发东西少了。原因自然在我。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之类的。

总结这一路下来,有几个感慨:

  • 学习编程,如果想长期下去,还是得有业务/需求/产品做牵引。否则很难有动力做到领域专家。没有编码专家,只有业务/领域专家。这个专家可以用更好的语言更高效高质量的解决自己的问题
  • 每一种语言都有它适合之处。即使你已经是领域专家了,不同语言也是能带来一些不一样的视角让你更全面,或者以新的方式看待这个世界。这个就是很多鸡汤文提到的认知问题。认知不一样,解决问题的方式方法就不同。语言可能是一个敲门砖,让你进到不同领域去。
  • 学无止境。语言本身也是在发展过程中的。我之前不喜欢flutter,不代表现在不认可。在追求新语言上,是要快速响应积极拥抱,还是选择静观其变,等一个合适的时机进场,看个人喜好了。

最后的最后

  • 我期望的结果不是朋友们从我的书、文章、博客后学会了什么知识,干成了什么,而应该是说,神农,我可是踩在你的肩膀上的喔
  • 关于学习方面的问题,我已经讨论完了。后面这个公众号将对一些基础的技术,新技术做一些学习和分享。也欢迎你的投稿。不过,正如我在公众号“联系方式”里说的那样——郑渊洁在童话大王《智齿》里有一句话令我印象深刻,大意是“我有权保持沉默,但你说的每一句话都可能成为我灵感的源泉”。所以,影响不是单向的,很可能我从你那学到的东西更多