通过上周学习谷歌方法论,我收获了如下几点:
专业和业余的差别
老师在讲数据结构时,强调了它对于一个计算机从业者的意义。如果没有掌握数据结构,那么无论代码写得多快,都是业余水平。其实每一个行业,都有类似于数据结构这样的技能,只有很好地掌握了这类技能,才有机会进入专业人士的行列。
业余的人画金鱼,是从某一部分直接开始画,结果是画出来的样子和实际的差很多;专业的人画金鱼,会在开始的时候用几何图形将金鱼拆解开,将金鱼的大体轮廓固定下来,然后逐步充实细节,最后画出来的金鱼就很像。
在计算机领域实现一个特定的功能,业余的人一上去就开始敲代码,看起来很快,结果是漏洞百出,回头修补要花不少时间;而专业的人士,则会根据需求,抽象出数据结构,然后将这些数据结构合理组合,代码的书写反而是在最后的。
对比而言,做轮胎也是一样的道理,先要选择构成轮胎的各项中间制品,要用一定的时间确认各项中间制品的可行性以及将他们组合在一起的方法,才能把轮胎做好。前段时间开发的一个新产品,因为业务催的比较急,为了赶进度,我所在的小组没有认真验证一项中间制品(环带)的强度,就直接开始做。结果问题就出在了这项中间制品上,几百条胎全部报废,造成了大量人力物力的浪费。那时候的感觉自己以及所在的小组,就是很业余。做工程,就是要按照专业的方法来做事。心存侥幸心理,很容易出大问题。
没有最好,只有权衡
线性表和链表是两个非常典型的数据结构。线性表的优点是可以根据序号快速调出对应的信息,缺点是插入一个新的数据会非常困难;链表的优点是方便插入新的数据,但是由于没有编号,当数据很多时,全部数一遍会非常耗时。
其实工作也是一样,钱多事少离家近只是一个传说,大部分时候我们只能占其中一项。昨天和一个同学聊起来,他不喜欢深圳那边的工作,虽然赚的比现在多很多,但是买不起房,工作也不是自己喜欢的类型。现在回到家乡,买了房子,家里帮说成了一门婚事,很快就成家了。另外的同学在北京,虽然暂时买不起房,不过能接触最新的一些技术和做事方法,因为有工作居住证,孩子可以上学,享受北京很多独有的资源,虽然压力比较大,不过她决定长期在北京待下去了。
两个同学的生活方式就像是两种数据结构,没有哪个比哪个好,适合自己的就是好的。在做选择的时候,也不要为了得到一个两全其美的方案而纠结太久。不妨问自己,如果只能选择一个,会如何选择,然后就选择这个就好了。
学习理论的目的,是为了触类旁通
老师介绍的二叉树,是用来解决现实问题的一种抽象工具。二叉树可以用来排序,用来快速查找一个数值,可以用来下载一个网站中所有的网页。当初二叉树被设计出来,也许是为了解决一个特定的问题。但是当这种方法被抽象出来之后,它的应用场景就不再局限于当时的一个具体的问题了。这就是理论的特点,我们要学会在不同场合中尝试应用一个理论,灵活应用这个工具,为我们解决问题。
丹尼尔·卡尼曼作为一名心理学家,将心理学上对人类决策的研究,引入到经济学中,创立了行为经济学,获得了经济学诺贝尔奖;贾雷德·戴蒙德将地质学和生物学的知识引入到历史研究中,写出了《枪炮、病菌和钢铁》,获得了普利策奖。
学到的理论要尽量活学活用,这样我们才能逐渐了解这些理论的边界,让这些理论更好地帮我们解决更为复杂的问题。
当断则断
对于老师讲到的高盛公司的面试题,我在路上其实想到了最好的解决方法。但是一直都不能肯定,就反复在脑海里确认。最后的结果还是那个结果,只是反复确认的过程浪费了很多时间。很多时候解决一些其他小的问题也是这样,总想着是不是还有什么问题,反复确认反复确认,花很多时间,效率就是比较低。
其实是因为对于自己没有信心。自己想到的解决方法很多时候是很不错的,但是当时没有勇气说出来,或者没有勇气去实施,到最后只能羡慕那些做到的人的成功果实。在老师讲郭嘉和曹操的那篇文章中,我其实非常佩服曹操,想到了马上就去行动。如果没有行动,再好的想法也是空的,没有人会知道,从结果上看,这个想法从来都没有存在过。
最近看到的一句话,很喜欢,也可以作为自己的座右铭:
要么争取,要么放弃。
干脆利落,简简单单。