真正从零开始了解 Julia_Julia

大家好啊!最近一年我一直在忙着撰写和出版新书。欢迎大家关注!

我的又一个重要输出

时间已到 2020 年 7 月,我撰写的新书《Julia 编程基础》终于出版了!从开始书写第一句话到正式出版发行,历时一年多一点。这本书也是我在软件技术领域中又一次转向的重要标志。

我的上一次转向是从 Java 语言到 Go 语言。那已经是八年前的事情了。不过,这一次与上一次不同,并不是一种转折,而是一种拓展。

如果你对我为什么会发布这样一本书以及我为什么会选择 Julia 语言感兴趣,那么就请接着往下读。否则,你可以直接划到本文的最后两节,以了解这本书的详情。

转向的必要性

在 2019 年的年中,当我的 Go 语言专栏已发布 10 个月的时候,我就开始思考后面应该怎样继续前行。

虽然有很多读者希望我继续推出 Go 语言的第三方库解读、项目开发实战等内容的专栏和图书,但是我觉得 Go 语言已经在中国开枝散叶,包含上述内容的文章和视频在网络上已有不少,同时也不乏优秀的出版物,我专门去做输出的意义已经不那么大了。

另外,对于 Go 语言本身,我是很有兴趣且有条件继续跟进和研究下去的。但是,对于 Go 语言的优势应用场景,比如 Web 服务系统、中间件、云计算等,我其实已经失去了实践的源泉。我已经居家两年多了,并且很可能继续下去。

我若要持续输出这方面的内容,恐怕只能依靠先前的记忆和经验去做了。我并不想一直吃老本,我想去开拓新的领域。想成长就要勇于抛弃过去所拥有的部分优势,脱离舒适圈。

所谓的实践源泉,就是在一个技术团队当中主导研发分布式软件系统。分布式软件系统是很难独自开发的。即使自己购买了服务器,自己开发、搭建、部署,也很难同时模拟出大规模、高流量、高并发的应用场景。这样做无异于闭门造车。

当然了,我们使用 Go 语言编写一些易用的命令行工具也是很方便的。这也是一个很不错的方向。但是,我认为没有太大必要为此专门著书(或许可以出个专栏)。

转向的选择

于是,自那时起我就开始探索新的方向。对于 Web 前端开发,我是有一些经验的。我之前也做过全栈工程师。我也有去尝试目前比较火热的 TypeScript 语言和 Dart 语言的冲动。

但是,我毕竟已经有很多年没做过 Web 前端的工作了。现在再下手,恐怕已经有些晚了。我输出这类内容的质量肯定比不过那些资深的前端工程师,而且推广起来也会比较困难。

顺便说一句,我个人觉得除了 Flutter 之外,Deno 也是一个比较有潜力的开发工具。不过这两项技术牵扯的东西都有点多,不太适合新手学习。

真正从零开始了解 Julia_Python_02

另一方面,对于数据科学我是很感兴趣的。在 2017 年至 2019 年间,我还通过在线培训拿过几个含金量比较高的认证。不像分布式软件系统,对于一般数据的收集、处理和分析,我们是完全可以一个人独立去做的。

而且,通过编程来做,往往可以事半功倍。我们身边的数据和信息只可能越来越多,从铺天盖地的数据中找到对自己有价值的东西(比如表象之下的逻辑和事实)也已经是一种很重要的能力了。

在这个领域,Python 是非常流行的编程语言之一。我之前也使用过 Python 语言,并在公司里用它做过几个分布式软件系统。而且,在接受数据科学培训的时候,我必须要使用的语言也是 Python。

不过,说实话,我并不太喜欢这门语言。一个原因是它本身的语法和性能。另一个原因是,它虽然有自己的编程哲学,但我个人感觉贯彻得并不是那么的好(相对于 Go 语言来说)。

这主要是由于它的语法太灵活多样且历史包袱太重,与其技术社区的运作方式也有一定的关系。顺便说一句,我当初是从 Python 语言脑裂的时候开始,逐渐地把它从我的主语言列表中去除掉的。

你可能也知道,所谓的 Python 语言的脑裂,指的是 Python 3 与 Python 2 之间出现的巨大断层。

真正从零开始了解 Julia_Python_03

简单来说吧,在经过了一系列类似的分析之后,我觉得那些语言都不符合我当前的期望。我的期望主要有三点:

  1. 能够让编程初学者快速上手,而不是只让程序员们乐于使用;
  2. 语言的功能和性能都应该非常优秀,而不是只在某一方面突出;
  3. 在可预见的未来非常有潜力,而不是只在当前应用广泛。

你可能已经看出来了,我是想帮助初学者和爱好者们学会编程这项技能,并且把这变成一项很有意义的技术投资。

你可能还看出来了,我的想法有些贪婪。但是,恰恰就有这样一门编程语言跟我的想法一样贪婪。这门语言就是出自 MIT(麻省理工学院)的 Julia 语言。

真正从零开始了解 Julia_Python_04

一门贪婪的语言

Julia 语言的缔造者们对它的期望是这样的:

  • 程序运行速度像 C 语言;
  • 通用性像 Python 语言;
  • 动态语言特性像 Ruby 语言;
  • 统计分析便利性像 R 语言;
  • 字符串处理便捷性像 Perl 语言;
  • 线性代数运算能力像 MATLAB 语言;
  • 元编程能力像 Lisp 语言;
  • 操作系统的能力像 Shell 语言。

你看到这些之后也许会想:他们是不是疯了!这怎么可能?!不要太惊讶,从他们在 2018 年 8 月发布的 Julia 1.0 版本来看,上述期望还真在很大程度上实现了!

虽然 Julia 这门语言至今还在被不断地改进和完善。但是从那时起,它已经相当成熟了。

在科学计算、数据分析、机器学习、数学规划、数值优化等领域,它的应用已经相当广泛了,尤其是在科研机构和学术界当中。而在工程界,使用它的公司也越来越多了。

一门潜力巨大的语言

你千万不要被“科学”、“数学”这些名词吓到。当你真正接触到这门语言之后,你一定会发现它是非常易于学习和使用的。Julia 语言自带了用于交互式编程的 REPL(read–eval–print loop)环境。

这意味着,你可以在学习它的时候得到及时、有效的反馈。而这样的反馈正是我们学习过程中最重要的一环。它可以让我们快速地发现错误和不妥之处,并学到正确的东西。

真正从零开始了解 Julia_Python_05

Julia 语言不但拥有非常有特色的类型体系、类型提升系统、多维数组,还有异常亮眼的多重分派机制和元编程支持。这些都使得我们可以用更少的代码做更多的事,同时也让 Julia 代码更易用维护和更新。

Julia 中的诸多先进特性及其出色的性能都预示着它将会是一门潜力巨大的编程语言!同时,它也是一门面向未来的语言。在即将到来的人工智能时代,一定不会缺少它的身影。

如果你是一名编程爱好者,想探寻当代最先进的编程语言,或者你是一名编程小白,很想学习编程,正在考虑把哪一门语言作为你的“初恋”,那么我会向你特别推荐 Julia 语言。

这本书的起源

目前看来,Julia 语言中的一个小缺憾是它的官方文档对编程初学者并不是那么的友好,或者说阅读的门槛有点高。起码从我了解到的情况来看是这样的。

虽然有一些做科研的大佬一直在说那些文档看起来很容易。但这只是大佬们的想法,并不代表编程初学者们的心声。

我是软件工程师出身,所以自然会从写软件、做工程的角度来看待这些编程语言。同时,我在 15 年有余的职业生涯中学习和使用过很多门编程语言。

所以对于这方面,我想我更有发言权。因此,当我意识到这个缺口之后,我就立刻决定写一本清晰、易懂的 Julia 编程入门书。

在《Julia 编程基础》这本书里,我不但会阐释怎样用 Julia 语言进行编程,还会说明怎样学习编程,以及在学习的过程中都需要了解哪些基础知识。

所以说,这本书也算得上是一本编程领域的通俗读物。在这里,我非常欢迎和期望编程小白们选购这本书,并能够通过阅读它成功地迈出编程的第一步。

即使你已经是一名软件工程师了,这本书对你仍然会非常有价值。通过阅读书中的内容,你可以深入地了解到 Julia 语言的所有先进特性和大部分编程技巧,从而开拓你的编程思路,并加深你对编程的理解。

真正从零开始了解 Julia_Python_06

未来已来

我们一直在向着更加高深的科技迈进着。在不久的未来,人工智能一定会走进千家万户并伴随在我们的左右。

不过,目前的人工智能仍然是基于数据科技和机器学习的,也依然是基于通用计算机程序的。恰巧,这些正是 Julia 语言所面向的最主要的领域。

了解编程、学习编程恐怕已经不再只是我们这些专业人士需要做的事情了。尤其对于那些作为“未来希望”的青少年们来讲。这场一直在酝酿的变革不但会影响到所有积极迎接未来的研究者、职场人和学生们,也会威胁到软件开发领域的专业人群。

因为“与计算机共舞”将逐渐不再是我们的特权和优势。我们每一个人都将不得不学会与人工智能和机器人相处。而相处之道,就是知彼知己,主动去了解和理解它们运作的基本规律和原理。

好了,说了这么多,我真心期望能够引发大家的进一步思考。即使对于已经在职场上摸爬滚打多年的老手,这也是很有必要的。