最开始踏入编程的世界, 我接触的语言是Java, 那个时候Java的世界流行的还不是Spring Boot, 而是SSH (Spring Struts Hibernate). 做为一个Java开发人员, 相当长时间我都认定Java就是最好的.
而后, 因为工作及个人爱好,我开始涉足其它不同的语言及技术. 包括但不限于Kotlin, NodeJS, Swift, TypeScript/React等一些语言或框架. 这使得我的认知发生了改变.
长盛不衰的Java
当然,我并没有否定Java, 事实上我相当一部分的编码仍然使用的Java, 特别是对于大型软件或服务, 以及企业级开发来说, Java仍然是最好的选择. 虽然一直有所谓的Go等很多新兴语言试图在企业级开发中挑战Java的地位, 但都难以撼动Java的地位.
关于Java为什么仍然能够如此强大的原因, 我专门写了一篇文章来阐述我的观点.
27年后,为什么Java仍然能够长盛不衰
由于Java语言本身的易于学习,以及Java强大及高质量的生态,都决定了它非常适合企业级开发.
但如果不是企业级开发,而仅仅是你自己想开发一些小的,好玩的东西. 虽然Java也不是不行,但其实我们还有更好的选择.
小而美
小而美的东西有以下几个特征
- 功能比较单纯及专注
- 开发人员少, 可能最主要就是你自己
- 用户也不会非常多
在这种需求下, 虽然Java也能做到, 但考虑到Java开发出来的东西属于比较重量级的, 因而我在这里介绍一些其它语言或技术,也许会更适合
TypeScript
创造一个小而美的东西,事实上没有比JavaScript或TypeScript更合适的语言了. 当然我更推荐TypeScript, 因为它和Java非常相似. 而且用TypeScript能编写出更易于维护的代码.
JavaScript也好,TypeScript也好, 虽然都是从前端开发起始,但它们确早已跳出前端开发的范围了.
开发一个小而美的东西, 使用TypeScript的优势非常明显
后端/前端/移动端一锅端
不管多小而美的东西, 形态上大多脱离不开需要一个后端服务, 需要一个Web前端/移动端或桌面端等
如果你懂TypeScript, 那你几乎可以独自一人开发这个小而美的产品.
- 使用Node来编写后端服务
- 结合React或Vue来编程前端网页
- 需要一个移动端, 没关系, 用React Native吧
- 想要一个桌面端, 也行, 用Electron来做
上面这些,我都有过实际的开发经历.
比如在写一个包装AI的后端服务时, 我用的NODE LangChain来实现, 因为Node性能好,对资源占用也非常小, 还是异步事件机制, 相比Pyton, 用Node来实现这个服务更佳.
再比如, 开发一个跨平台桌面APP, 我用的Electron来实现, 它基于Node Chrome V8内核而实现, 天然支持不同客户端. 我开发的这个桌面APP, 还支持国产各种系统, 想下如果你使用其它技术, 想开拓国内市场,支持统信等国产ARM CPU的系统, 可能需要额外再开发.
至于React/VUE来开发前端,这本就是TypeScript的本家, 没什么好说的.
而使用RN来开发移动端,也是个非常不错的选择. 虽然很多人可能会说它性能没有原生或Flutter好, 也许这是事实, 但这里面有一些悖论. 表现在一: 语言性能决定的是上限,不是你开发出来的东西本身的性能, 二: 除少数对性能确有很高要求的场景(游戏), 大多数场景性能足够就满足了.
所以, 想开发一个小而美的东西, TypeScript我认为是绝佳的选择.
2. GO
GO的最大优势就是性能.
所以如果你想实现的东西,对性能有特别的要求, 使用GO是比Java更好的选择. 事实上,做Java都知道云原生这个概念, 而现在包括K8S在内的很多云原生框架或技术, 绝大多数都是在基于Go实现的. 有一两个是Rust, Java我基本上没有见过.
相比Java, Go的学习曲线可能会更高一点. 但在你的服务在性能方面有要求时, 你就应该考虑Go. 比如我前段时间接触到的一个开源的直播产品owncast, 它是基于GO React实现的. 用GO来实现后端, React来做前端. 也是一个非常优秀的功能单一的好产品.
选择GO的一个劣势在于,在前端方面,你得选择其它语言或框架来搭配使用. 比如React或VUE.
3. Python
在TIOBE Index排行版上,有一门语言常年占据榜首. 更不要说AI火爆之后, 这门语言简直是AI的标准语言.
这就是Python了.
Python特别适合WEB网络方面的开发,诸如爬虫等. 另外,在机器学习(ML)以及数据处理方面, 选择Python是更好的选择了.
4. Swift
如果你的目标平台只是MacOS或iOS等, 那Swift是值得你考虑的语言.
因为我常年使用MacOS, 所以我知道非常多的基于Swift开发的, MacOS特定平台的小而美的应用. 比如我在用的IINA, 基于Swift开发的播放软件.
由于MacOS或iOS相对其它平台来说,用户付费意愿会高一些. 因此有非常多的个人开发者做的小而美的东西,是只面向MacOS平台的.
这意味着在这种场景下, 选择Swift是非常好的. 而Swift与Kotlin则非常相似, 是一门非常好的易于学习的现代面向对象的语言.
意愿及机会
其实,对很多Java程序员来说, 甚至是再扩散一些, 对大多数编程中几乎只使用一种语言或技术的程序员来说,很难会去使用这些技术或语言.
最关键的难点在于个人意愿以及机遇.
个人意愿是说,对一个Java开发者来说, 他会认为不需要使用GO或Node, 用他熟悉的Java也能开发出相关的后端服务, 他没有意愿去学习或使用Node或Go.
而机遇则是说, 当一个程序员以某种语言能力进入一个公司后, 在这个公司几乎没有机会去使用其它语言, 因为你的能力与待遇是基于你对当前这门语言来评估与衡量的. 大多数公司没有意愿花费成本来训练你使用新的语言,做不同的开发.
但我认为,做为一个程序员,你如果想做一些小而美的东西,或提升自己对编程的理解,那你就不能局限自己只使用某一种编程语言. 根据需要去学习或使用更适合的技术.
当你使用不同的语言, 不同的框架, 有过不同的方向的编程经历后. 你对编程的理解,才会迈入一个新的阶段.
尝试使用不同的语言,我认为这是我们程序员非常值得去尝试的事情.