终于发现了最适合我的编程语言Julia
做大数据/机器学习方面的工作多年. 最为熟悉 C++, Matlab/R/Python/Java/Scala 都用过.但每种语言的体验总觉得有缺憾.
一个理念: 如果不是语言专家, 那么编程语言, 仅是实现想法的工具. 更为重要的事情如何快速准确地实现功能和想法, 而不是消耗在工具本身.
1. C++
与 C 语言一样, 计算性能是公认的, 没有多少语言比它们更快了. 但正由于其离机器原理更近, 细微的计算资源控制(尤其是内存管理,指针等)等原因, 使得其开发和维护成本很高. 要快速实现想法C++ 肯定不是最好的选择.
2. Matlab/R
读博期间, 很多人都会选择 Matlab 做实验, 因为功能强大, 有你所想, 而 R 语言则是开源的解决方案. 但其收费和臃肿的环境, 总是让人心里有疙瘩. 而且性能真的不行. 对于那些基于很多或很大数据做训练学习的算法, 简直无法忍受
3. Python
python 的简洁和强大的第三方功能支持, 使得实现起来, 高效很多. 确实是验证想法的好环境. 但在用其实现一个分布式系统, 并部署生产的过程中发现, 其在很多地方都会有不明所以的坑. 而且其全局锁让追求高并发的系统很无奈, 尤其是计算密集的系统.
还有一个极度不认可的就是, 那个一定要对齐的格式要求.
4. Scala
Scala 的使用是经常需要开发分布式的大数据算法, 而 Spark 经常是首选, 在 Spark 的接口中, Scala 更为全面, 而且逻辑与 spark 的设计实现更为贴近, 所以倾向于 Scala.
但 Scala 的语法简直是外星语, 纷繁芜杂的符号和设计方式, 简直让人头大.
这是个万花筒, 但对于需要标准化和可维护性的工业生产环境, 选择 Scala 也许是个错误的选择.
总结:
最近, 在了解 Lua 的过程中, 竟然发现了一种专门为"并行"数值计算设计的语言, Julia
在了解和试用之后, 发现这才是适合我的最好的语言.
1. 可调用 C/Python 库, 聪明的做法, 可以更好的继承现有的成果
2. 类似 matlab 和 python 的语法, 更换语言的学习成本低, 而且实现起来天生就像python那样高效
3. 接近于 C++ 的性能, 在很多情况下已经足够了
4. 开源的做法, 使得语言具有强大的 Package后备力量, 在生态上已经初具规模
5. 天生的并发和分布式支持, 省很多事情了