关于合适语言的一点看法

语言之争

每当一种语言诞生,世界上的争吵就多了一种声音。经常可见这样的讨论:

1
2
3
4
"xxx就不错,yyy是垃圾,这都不支持!"
"xxx太复杂了,不适合如今的应用模式。"
"xxx是最好的语言。"
....

我大学期间也自学很多语言,主要是想做个东西出来,看别人推荐什么语言,有什么现成的库,
就开始了入坑之旅。

  • 从那以后,我就开始用python写爬虫抓音乐链接,书籍,还写了一些获取ss节点的程序,运行更新节点信息,
    就可以很方便上外网了。感兴趣的可以移步我的github:ss-config-graber,
    xcode文档的真实下载地址:XcodeDocDownload
  • Java写过界面游戏,当时的数值算法这门课我都是用它完成作业,还有被写烂了的xxx管理系统,也正是Java,让我
    开始使用数据库而不是用写文件读文件的方式。
  • c/c++写算法,数据结构,做OJ。往往一遍又一遍的去优化,看着用时又减少了就很开心。
  • 后来Javascript居然可以写服务器端的应用,特别是express路由、模板、控制器简洁明了,路由注册拦截请求,调用中间件
    处理数据,控制器控制由模型组成的数据去渲染模板。一个web系统就这样做完了,效率很高,所以当时写写回调也无所谓,还顺便
    学习了前段的Ajax操作,那种处理和表现数据的感觉现在都印象深刻。所以正在上的工程数学的矩阵分解和一些统计方法我都想
    办法写成js程序,放在手机里直接用。真的是到处运行。
  • 学了golang后

学习完这些主流语言的感受

  • Java写得冗长,框架笨重又得配置xml,但是一旦项目规模上来了,
    它却是协作下表现最不差的解决方案。因此现在使用Java最广泛。
    毕竟水平一般不知道控制代码质量和内存使用的人太多。

  • C没有类型系统,我看过一些为C添加的对象系统,使用宏如同魔法
    一样,但是这种法案离C写基础构件的初衷还是很远,不是经历过正规
    训练的人很难习惯和掌握什么都需要自己创造的环境。另外C的字符串
    处理太弱,由于历史原因不支持UTF-8,这就在今天大部分的字符串处理
    逻辑里带来不便。

  • C++在C的基础上添加了很多语法,字符串处理同样比较差,多种范式,
    怎么写都有办法达到目的,写起来最不容易控制复杂性,或者是在中途为
    了追求优雅高效而忘记了自己究竟要干什么。项目不是写到一半被抛弃,
    或者重构的时候干脆从头开始造轮子了。

  • 还有重要的一点是,C++的Bug最难找,由内存处置不当导致的错误层出
    不穷,如果使用了高级特性如模板、迭代器、算子之后一旦出错错误信息
    如果天书一样在屏幕上滚过,而你的一天就这样过去了。

  • 我见过很多C++的拥趸说C++是最强的语言,什么都能做还能做得很好,
    这点确实如此,但是这么一件强大的武器需要非常熟练它的人才能发挥出它
    的功效,而不是写过只有几百行代码就莫名喜欢的人所认为的那样,也不是
    指针不释放,内存到处申请的人就能自称熟练使用C++。

  • python写出的程序直观,最适合初期快速实现自己的想法。但是多线程GIL
    的原因,重构社么的也麻烦,因为写的时候太自由了,同样不能充当主力,
    而是作为干杂活的最佳选择,写出1.0版最快。

  • javascript异军突起,google的V8引擎功不可没,现在进本上基本上所有智
    能设备都可以支持javascript,这就有了广泛的市场。但是它的异步特性使得
    我们长期受到一步一步操作的思路影响的大脑有点难以接受,常常困惑于为什
    么没有取到数据,那一层层的函数包裹搞得人连函数边界在哪都不知道。这就
    限制了一般程序员的使用,对象和继承出现的问题也比较奇怪。总的来说在web
    前后端还是不错的,一致的语言带来的是连贯的思路,思路清晰又往往可以保
    证项目完工,半路失败的项目太多了。

  • PHP也略微了解一些,在web领域也是非Java就PHP了,简单易于掌握的才是最
    好的,不管是个人开发者还是团队来说。最近准备了解Laravel框架,思路和
    express一样,也是路由、控制器、模型,避免了之前写php的随心所欲,就像写
    网页的php里面有连接数据库。其他领域基本就没有phph用武之地了。

  • golang语言2007才出现,其特点是足够简单,还有很好的一点是静态编译,没有
    依赖问题。我之前认为动态编译的程序,内存中只有一份,节省内存,程度加载的也快,
    静态编译不好,慢不说程序占用空间还大。但是今天IT行业已经变了,到处都是云环境,
    CPU、内存、硬盘太多了,反而生产环境变得复杂了,一不小心某个依赖变了,应用就有
    可能出问题,静态编译却没有这个主要困扰开发者的问题。用下来感觉挺不错的。缺点是
    没有泛型,写通用操作不方便,传个interface{}感觉怪怪的,它的特色goroutine我用的
    还不是很多,国内使用的案例也比较少,可能没有公开或者别人还在观望。也只有以后再
    补充自己使用的感受了。强制统一的规范比如大写方法可以导出,用习惯了自觉地在其他
    语言里也是用这种规范,而规范减少了出bug的可能。自带的测试命令也使得我写单元测试
    保证正确性,以前写代码就是弄一两个数据测一下就算完事,而这种单元测试经常能发现边
    界情况的错误,还有性能测试、代码覆盖度测试都可以保证代码是工程级而不是玩票性质。
    最近就在写golang的常用的数据结构和算法库,也算是轮子吧,可以关注utils
    获取最新进展。

总结

  由于我接触的东西还不是很复杂,所以自己的这些看法难免会有一些错误的地方,之后随着阅
历的增加,感受自然会多起来。随着代码量的增长,我越来越觉得每种语言都有适合运用的场
景和劣势的地方,并不存在统一的万能解决方案,也不是以个人情绪来判断好坏。
  我倾向的一种工作方式是,先用动态语言快速实现自己最重要的目标,之后可以将关键部分慢
慢升级换成Java这样的工业成熟方案,性能要求高的地方c/c++改写,让它们成为为应用提供服务的
组件。上层用户使用的地方javascript做初步操作,或者充当业务初步处理层。分布式的场景,
golang的通讯交换消息方式也有erlang先行者,性能非常出色。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 语言之争
  2. 2. 学习完这些主流语言的感受
  3. 3. 总结
,