自从开始工作,感觉每天都在学习。这5年多以来,我从一个没什么工作经验的应届毕业生大致成长为一个全栈工程师。虽然一直在学习,但所学的内容都跟工作相关。这就出现一个问题,随着工作经验越丰富,我就容易学得越深。而学得越深,我的工作范围就变得越窄;而工作范围越窄,我就会学得越深:因此出现了一个死循环。得亏我在过去五年换了两次组,不然我现在就是一个技术水平非常单一的软件工程师。
为了拓宽自己的视野,丰富掌握的技能,从去年年底开始,我利用假期和周末的时间,在coursera上学习了两门课程:machine learning(机器学习)和crypto currency(加密货币)。选这两门课是因为一直有人说ai和区块链将是未来科技发展的方向,而我完全没有仔细了解过,好像已经被未来抛弃了。于是我就想通过这次机会,增强自己的竞争力,免得落后于时代。
机器学习这门课程没有什么技术难度,它的原理很简单:把现实世界的事物数据化,带入一个算式当中,得出结果。举个例子,人脸识别。每一张图片都可以分成好多像素点,我们可以利用这些像素点创建一个矩阵,也就是把一个东西数据化。然后把这个矩阵带入一个算式,最后得出一个数。这个数就是这张图片里有人脸的概率,也可以是这个人脸是某个特定的人的概率。听起来很简单,实现起来也不难,就是需要大量算力来提前train好model,应用的时候每次只用带入公式算一遍就好了。
那机器学习有什么好处?为什么机器学习和普通程序不一样?我们首先得了解一下普通程序是怎么写的。写普通程序要考虑方方面面:假设出现某种情况,应该使用a方案;假设出现另外种情况,应该用b方案,等等等等。而机器学习则是把所有方案都列出来,通过概率来决定在什么情况使用哪种方案。比如出现某种情况,我们把这种情况数据化,带入机器学习。然后它就会告诉我们60%的概率应该用a方案,20%的概率应该用b方案。因为这种特性,机器学习适用于情况复杂的问题,就像围棋。如果人类要手写一个程序去下围棋,那光if和else就得写半辈子。
然而,机器学习终究是个靠概率做判断的技术,适用于允许出现误判的场景。还是拿围棋举例,下错一子甚至输一局都无所谓,只要保持大概率能赢就好。因此,在自动驾驶这种关乎人命的领域,我个人并不看好。即使它的驾驶技术可能比普通人更好,但除非普罗大众可以接受任由机器来决定我们的命运,否则自动驾驶就无法大规模应用。即使出了事故,工程师也没有办法告诉你到底是为什么:因为工程师也不知道机器学习程序为什么会做出这样的判断,换言之机器学习程序无法debug。工程是能做的只有不断去improve 现有的model,然后祈求上帝保佑。
接下来说说加密货币。加密货币是比机器学习复杂得多的技术,它建立在区块链之上。而区块链则是建立在decentralized distributed system(去中心化的分布式系统)和cryptographic(密码学)之上。
首先,去中心化的分布式系统这个概念就很难理解。我想了个比较形象的比喻:把一个扁平化没有领导的组织想象成一台一台电脑,这个组织就是这个系统。分布式系统的要求就是,跟这个组织里的任何人交流,你都可以假设你得到的回应就是这个组织的官方回应。也就是每个人都可以代表这个组织发言,处理事务。关于这样的组织,通常我们都是采取少数服从多数的原则,而比特币比较特别,它采取的是短区块链服从长区块链的原则,也就是谁的链最长谁就说了算。仔细一想有点不太zzzq。
而密码学则比较好理解。战争时期为了防止敌军破译,所以我们都会通过加密通讯来进行交流,这就是密码学最广为人知的应用。区块链中的密码学主要应用在如下场景:任何人都可以看到且可以验证我发送的信息,但没有人可以伪造我的信息。这也就给数字货币增强了安全性:一般情况下没人可以偷走你账户里的钱,除非他们控制了你的账户。
这两种技术让区块链变成一个可溯源的公开数据库:它是可靠的,因为没人可以伪造数据;它又是一个去中心化的数据库,数据永远不会丢失。所以,任何公开的信息都可以保存在区块链之中。然而,加密货币是不是一个好的应用,我持怀疑态度。举个例子,比特币之后有如此多的加密货币出现,是因为技术可复制,可修改。任何人都可以创建一种新的货币,只不过问题在于怎么说服大家使用它。因为大家相信比特币,所以比特币就有了价值,而这就是个非常典型的泡沫。泡沫可以投机,但不推荐长期持有。
这些年科技发展得太快,所以软件行业是真的应了那句老话:活到老,学到老。之前我一直担心行业的变革和技术的变迁会让软件行业变成夕阳行业,但现在我越来越意识到软件工程的发展还远没有到头。作为软件工程师来说,如果有比较强的学习能力和足够的知识广度,我们就可以放宽心。像比特币这么复杂的东西,普通老百姓怎么可能搞得清楚。当你每天面对无数的新闻,各种不同的看法时,没有一定的行业知识就无法保持自己独立思考的能力。正因为软件行业还在高速发展,我们具有一定的优势。
其实,学习这件事也不仅限于软件行业,因为各行各业都在发展。虽然上学和工作是两种状态,但开始工作不意味着停止学习。为了不被社会淘汰,在此与大家共勉。
网友评论