在应用开发如此方便的今天,我总是会听到有些人有这样的疑问,“只是做 应用 开发的话,还有没有必要学习诸如操作系统,编译原理这样的课程呢?”,亦或是会听到这样的话,“会用这个框架就行了,它底层是怎么实现的不用去管。”还记得我在大一学 C 语言的时候,就听过有同学说我以后是想从事 Java 开发的,C 语言这种学来应付一下考试就行,指针什么的其他语言又没有,就不用去管啦。
真的是这样吗?刚好今天看到一个有意思的故事,从故事中我看到了答案,这个故事是是艾萨克·阿西莫夫 的科幻巨作《基地》中的一个片段。故事是这样的:
在银河系中,随着战争的蔓延,文明从银河系边缘开始逐渐退化,许多星球虽然还保留着核电站等高科技产品,但是已经不知道它们是如何运作的。
而有这样一颗小行星,我们暂且称之为 科技星 吧,在大战爆发前它搜集了银河系中的各种科学文献,并且汇聚了一大批的顶尖科学家。这颗小行星没有被卷入战争,而是将技术一直传承下去。
科技星周围的星球觊觎它所拥有的高科技,想将之夺取。而科技星又没有自保的武装力量,在这种情况下,科技星如何自保呢?这里最有意思的地方,正是科技星所使用的科技宗教的战略。
当后来其他星球上的高科技出现问题的时候,会向科技星求救。科技星就会派遣工程师前去维修,但是呢,他们将各种身份都进行包装,比如,工程师不叫做工程师,而是叫做“僧侣”,核电站也不叫做核电站,而是叫“圣殿”,维修也不叫做“维修”,而是叫做“祈祷”,也就是说,对核电站维修这一项工作完全被宗教化了!
而此时科技星提供的说法是这样,因为这颗星球上的人做了坏事,比如违反法规,发动战争等等,触犯了神灵,所以神灵剥夺了他们使用能源的权力。而如果想要恢复能源,就必须对自己的行为忏悔,祈求神灵的原谅。所以当工程师进入核电站进行维修的时候,所有的星球居民一起下跪祈祷,而当核电站恢复的时候,大家纷纷称颂神的伟大。
为什么那些拥有核电站星球的人们会对来维修的工程师“膜拜祈祷”呢?其根本原因还是在于核电站这样的高科技对他们而言是神秘的,未知的东西。 尽管他们拥有这样高科技的东西,却没有与之匹配的认知和知识储备。
再回过头来看看一开始的问题,你是否明悟了呢?我们也是掌握着上层应用框架这种“高科技”,我们知道怎么去配置,怎么去调用,就像上面故事中普通星球的人知道怎么启动,关闭核电站一样。但一旦出了无法解决的问题,或者是遇到了什么性能瓶颈,似乎我们能做的,只能去各种技术群里,找那些大神“祈祷”了。
再来说说人工智能在今天,人工智能这个名词已经逐渐为人们所熟知。而未来,人工智能的应用场景只会越来越广泛,面向 AI 编程也必然会是一种趋势。
那么现在从事于 Web 或是 Android 等应用开发的程序员需要去学习机器学习或是深度学习相关的知识吗?我的回答是 YES 。有人说我又不想从事于人工智能的开发工作,为什么还要去学它呢呢?我想说的是,为了避免成为上面故事中那些普通星球的居民。再过几年,当你碰到一个会跟你说话的机器人或是更加奇妙的事物的时候,我们应该是对它的一些实现细节感兴趣,会有探究的欲望。而不是在那里感慨着造物主真伟大,竟能造出一个这样神奇的东西。
话又说回来,在机器学习或是深度学习的学习过程中其实也很容易陷入到这种只会调用上层 API 而不知底层原理模型的境地。因为在今天,有很多库类都可以让你轻松实现一条语句就直接使用某个算法模型,所以很多人就不再专注于对底层模型原理的学习。在机器学习的学习过程中,相信大多数人应该都看过这样一张图,
我们来看看这张图中 Hacking Skills 和 Substantive Expertise 的交界处,这里叫 Danger Zone,即危险区。意思是如果你只会编程和调用机器学习的 API,调参数,那么你就处于一种很危险的境地。
结语一个好的程序员,不应当满足于学习到了什么新的技术或者学习了什么新的算法模型。真正有价值的东西,往往是那些人们不乐意去学的底层的,枯燥的内容。