技术梳理

从实践上来说, 我最近在考虑清除掉Java的依赖. 尽管Java现在仍然是最流行的平台, 我也是通过学Java开发进入技术领域的. 但是先不说繁琐的语法和庞大的类库, 光是JVM的内存占用和启动速度就很让人心烦. 很多人会说内存便宜, 但是真要买的时候就不一定是那么回事了, 看看网上云服务器的价格, 想要比较便宜实惠的基本就是1G或2G的内存, 跑个windows也就勉强够用, 再启动JVM又占用几百兆, 就不用干别的了. 有人说用Linux, 但是工作的环境就是比较传统, 大家都说没用过, 不会用, 短时间也改变不了. 最重要的是, 明明实现一样的功能, 人家用C/C++的nginx或PostgreSQL就占十几兆, Go和Haskell可能稍微多点, 就是node也比Java省. 想想真是挺心烦的,

这个问题不只是存在于服务器端, 就是在开发时, 运行和重启JVM都是一笔不小的负担. 也包括开发工具, Idea虽然不错, 但是受累于JVM, 在我的电脑上长期占用将近2G内存, 最近也是有点烦这种大个头了, 不过其实找一个合适的编辑器也不容易, 久负盛名的sublime在我电脑上打开某些文件夹时会出现疯狂的磁盘占用, 一直没找到解决方案. notepad++颜值实在不忍直视, 启动速度和功能上也不太满意. 最近考虑换到VScode, 虽然占内存也不低, 比Java系的还是要好一些. 不过这个新软件更新频繁, 主要也是为前端准备, 还没有体验过作为完整的Java开发环境.

去掉JVM, 很多依赖JVM的语言也都跟着被冷落了. 包括Kotlin, Clojure, Scala. 自己之前在这些方面有一些投入, 鉴于JVM如此流行, 以后估计还是会有遇见和用到的机会. 不过这些语言也都早早做了多手准备, 基本都可以编译到js或native了.

如果能够换掉Java, 应该就会有更多内存去运行程序. 据我这些年的观察, 技术开发还是要用一些native的语言, 比如C/C++, Go, Rust之类. 业务开发可以用一些声明式的动态语言, 比如SQL, js, shell. 不过这些脚本写起来基本大同小异, 虽然Python很火, 但是我就觉得没必要作为主选项, 用到的时候copy过来改改就行了, 语法和API大概看看, 都是差不多的. 其他类似的还有PHP, Ruby, Lua, Dart等等.

更具体来说, SQL进步太慢, 各个实现也没有一个统一的演进方向. 只能根据具体的数据库去学习一些高级特性了. 既流行又靠谱的选择还是JavaScript, ES2015之后, 保持了高速发展的势头, 实现也比较及时和统一(还是要紧跟最新版本). 特别是靠着Babel的帮助, 现在不管哪种环境的问题, 基本上都可以用js搞定了. 通过Babel插件, 轻松体验最新的语言特征, 甚至可以自定义语法. 运行环境也很普及, 现在基本上只要开着电脑都会开着浏览器, 想编码运行只需要随时打开console. 说实话, js让我们多少找回一些编程的乐趣. 所以我一直都建议新手从学js开始, 既方便又实用.
当然要真正使用js开发还是会有很多需要掌握的. 包括上面说的浏览器的开发人员工具, HTML新旧标准定义的API, 异步和事件机制, node环境, 模块和打包机制(webpack之流), babel转译, 流行前端框架等. 自己对于这些基本只是在工作中接触一些, 会简单使用, 深入的东西也不了解, 鉴于js如此流行和在可预见的将来前途光明, 还是值得深入去学习一下的.

由于现在人们对于界面的要求越来越高, 作为界面布局主力的CSS也需要认真学习一下. 自己对于CSS一直迷迷糊糊, 当然一方面也是因为之前标准落后, 既不方便也不清晰, 随着最近几年标准和实现的不停进步, 现在应该是认真对待CSS的时候了. 比如由来已久的布局难题, 现在就有了felxbox和grid等各种新的解决方案. 本着面向未来的原则, 应该努力去明白界面构建的思路和原则, 不管怎样, 比起前辈来说, 我们所能实用的工具已经方便太多了.

另外一个重要的方面就是网络. 之前就是由于没有实验条件, 自己对网络也一直处于一知半解的状态, 虽然看了很多原理, 但是没有足够的折腾和实践的话其实很难有深刻的理解. 网络知识的特点是这样, 有一定的学习成本, 但也正因为这样, 有着很高的实用价值. 甚至有专门的网络工程师的职业. 作为兴趣, 自己当然希望了解更多网络的细节, 包括硬件和低层协议, 甚至火爆的移动网络, 卫星网络. 但是从工作实际看, 还是首先要熟悉上层接口, 尤其是每天要用的HTTP, 现在也更新出了2代, 3代版本(即将), 还有WebSocket等技术. 希望通过了解这些协议, 加快开发进度, 方便技术选型和性能优化, 遇到一些问题也可以有排查的思路. socket通信有时也会遇到, 但是会涉及到更多和系统内核, 以及底层内存的交互, 处理的也都是字节信息. 并且会衍生出另外一个重要的问题就是IO性能. 毕竟很多异步和并发的复杂处理都是为了更高效的IO, 不惜使用简陋的socket通信的很多场景也是为了追求极限性能. 虽然理论上说应该是用底层框架去更多屏蔽这些技术细节, 但是至少需要了解原理, 方便选择, 万一没有合适的实现, 需要自己去折腾的时候, 也能够有思路和方向, 能实现出功能.

关于更底层的技术, 存储, 文件系统, 固件, 嵌入式, 操作系统等方面, 有机会就作为兴趣学习和了解吧. 毕竟自己之所以从事这个行业就是源于兴趣, 即便不为上班, 很多时候也是在琢磨和折腾电脑. 上学的时候就天天泡在机房倒腾, 装那些没太多实用价值的操作系统, 现在虽然时间紧, 很多时候还是愿意跟踪一下新系统的动向. Windows和Ubuntu现在都是半年发一版, 对于我们这些折腾狂人来说, 真是有了足够的素材. 其实很多时候想想也没什么意思, 系统装一个稳定好用的就行了, 但是不管怎么折腾, 总是感觉哪块不够完美, 想试试有没有更好的选择, 结果一折腾进去就很难出来. 要不说感觉自己是天生的爱折腾, 小时候一去姥爷家就翻箱倒柜, 寻找各种稀奇好玩的东西, 现在赶上日新月异的IT时代, 给了自己最好的借口去放纵. 如果没有主的拯救, 自己这一辈子真的是要全都消耗在这些事上了. 无论如何人还是要学习节制, 在欲望的驱使下失去控制, 不由自主的做一些事情, 并不是真正的自由.

你可能感兴趣的:(技术梳理)