正文
传统的自动化主要是以相对固定的模式,处理相对简单的场景。智能化则具有人的感知、决策和逻辑能力,可以更加灵活多变的处理各种复杂场景。举例来说,如果在Outlook里设置了一个日历事件,下午4点要开会,那么电脑到了下午3:45的时候就会弹出一个事件提醒,这叫作自动化。如果电脑根据你当时的位置、路上的交通状况和附近的空闲出租车状态,自动计算出从你所在的位置叫出租车再行驶到会场需要花费37分钟,然后在3:22 PM的时候帮你填好预约出租车的订单。你只需点一下确认按钮,就可以收拾好笔记本出门了。这就叫智能化。
随着各种智能算法可靠性的提高,它们逐渐融入到人们的日常生活,这些传统意义上的"智能化",也慢慢变成了"自动化"。例如,垃圾邮件过滤和拼音联想输入,都用到了基于机器学习的智能算法,但是人们对这类产品的预期也相应的提高了,不再认为这些功能是很"智能"的了。
要在工作中运用机器学习方面的技术,普通程序员需要如何准备?
主要是补充线性代数、凸优化和概率统计方面的知识。相比传统算法,机器学习算法的最大不同之处是它的执行步骤和参数,不是由程序员人工设定的固定组合,而是基于训练样本学习到的概率模型。要理解各种机器学习方法的优缺点,能够将当前应用的场景,抽象成经典的机器学习问题。
例如,Hulu视频App的首页推荐,之前是按照产品经理手工定义的几类不同内容来源来排列展示的优先级,然后再对相同优先级的内容,按照首播时间、最近热度等因素排序。这就是典型的面向传统编程模式的设计。新版App的首页排序正在向基于机器学习的数据驱动算法转变。我们根据点击率预估进行排序,其中的点击率预测模型训练,会参考产品经理给出的首播时间、最近热度等特征,但是会基于在线学习的框架,自动根据用户的场景不同而动态调整各个特征的权重。
从职业履历来看,您既做过技术研发也做过团队管理,更喜欢哪个方向?
从个人层面上,我觉得技术研发更有成就感,因为专注和沉浸在解决问题的过程中,是一件很享受的事。做技术研发也对自己的时间和精力有更好的掌控感。相比之下,团队管理者需要有牺牲小我、成就团队的胸怀。我读过一本很好的书——
Leaders Eat Last
,讲的就是这个意思。同时,还需要具备较高的情商和同理心,才能处理好承上启下的沟通,这方面我推荐大家读阿德勒写的《沟通的艺术》。
对于程序员来讲,哪个能力(技术vs管理)更重要?获得这样的能力,需要如何准备?
技术是立身之本,没有这个基础就不能成为一名合格的程序员。如果想要不断地提高自己的能力,解决更大的难题,即使不戴管理的头衔,也还是要掌握一些管理方面的知识。如何推进项目,如何说服他人,如何与其他团队沟通,等等。获得这些技能,我们需要运用“一万小时定律”循序渐进地进行有意训练:首先掌握一定的理论知识,这里我推荐看《高效能人士的七个习惯》;然后在实际工作中去运用,体会哪些方法是适合自己性格的。如果在这个"术"的层面训练到了一定的程度,就可以尝试上升到“道”的层面,就是找到自己最擅长和最认同的事业,并运用之前学到的“术”,在助人的过程中实现自己的人生价值。