谈到数学与IT,似乎有点八竿子打不着.但对于从事IT行业的前辈来讲,大家可能都会有一个共识, 数学与IT是一对双胞胎.从计算机诞生的那一刻开始,就与0和1结下了不解之缘.数学是自然语言的客观反映,同理也是计算机语言的灵魂所在。两者都需要是严密的逻辑,都需要技巧。搞数学出身的IT人在语言编程艺术与优化方面是不是会激发出与众不同的灵感?本期名人堂我们荣幸邀请到了两位ITPub的常客,Hadoop与分布式数据处理版块的版主leonarding坐镇主持,采访SQL优化专家udfrog,为我们分享SQL方法论的质变之道。如果您想成为中国最顶级的编程大师,本期精彩内容不容错过。
leonarding Q1:udfrog,你好!在ITPUB的圈内,你有一个外号叫美食大师“牛蛙兄”,是因为你喜欢吃牛蛙么?能否先简单介绍一下自己。
udfrog A1:在ITPUB的开发版,大家习惯叫我牛蛙。我的真名叫张博,毕业以来几乎一直从事数据仓库相关的工作,2009年年初我开始接触了Oracle,这些年来我擅长Oracle开发以及SQL调优。深受咋们Pub的同仁的熏陶,比如newkid的影响,务求把SQLl写到极致,希望有朝一日能成为中国最顶级的编程大师。至于牛蛙这个名字的由来嘛,似乎也是因为newkid最先叫我牛蛙(因为id里有frog?我自己也不知道),而且我本来就和牛字有缘,所以挺喜欢这个称呼的。
leonarding Q2:听说你是搞数学出身,方法论就是搞数学的人提出了,你能给大家讲讲SQL方法论质变之道吗?
udfrog A2:盛哥不要黑我。我谈不上对Oracle有多么精通,但为什么会喜欢上Oracle,也许冥冥之中是一种巧合。数学让我领悟到了集合的精髓,我触类旁通,在数据库领域SQL的语句也浓缩了集合的思想—我开始尝试去编写各种各样的代码,在业内人士的指点下,我进步成长很快,这也是开发版带给我最宝贵的财富。
我的账号是2009年注册的,但由于时间的关系到了2012年才正式提上日程,开始在论坛里活跃起来了。之前只为了下载资料,2012年去了新公司,半年多的时间没有项目,整天都很闲,机缘巧合,来到了开发版,很快就被各类问题和各位高手的代码深深吸引了。
说来惭愧,刚到开发版的时候,我其实看不懂执行计划,我甚至不知道rbo和cbo的区别,也并不知道几种关联的区别,并且完全不了解索引的原理……但是我依然坚持参与了很多帖子,而不只是看看,后来我看到biti大师说他当初不放过任何一个帖子,我觉得我做的应该还是对的。不要怕错,别怕露短。
有的时候,你整本书从头到尾开始学习优化技能,但是读起来不是很有共鸣,一旦再没有应用的机会,过阵子也就忘记了。而如果你关注每一个具体的问题,通过问题来学习特定具体的知识点,不仅不会枯燥,而且效率会高得多,理解也会深得多。重要的是,通过这一个具体的问题,再横向了解涉及的必要的知识点,这样你的收获就多得多了。而经过一段的实际经验积累,回过头再系统性的看书,你就能把琐碎的知识点串联起来,形成完整的知识体系。
在我看来,需要学习的从来就不是语法,而算法又不太是能够直接学到手的。这样说似乎就没什么可以做的了,呵呵。应该说,我们能够直接看到并记住的,其实是方法,而算法是需要我们经过提炼和总结的。方法是大致可以拿来套用的东西,而不同问题的算法,可能需要一些创造想象力和逻辑推断能力。而好的算法的本质,是一种思想。
我本身是数学系出身,因为自己特别喜欢数学才选择的这个专业。在数学系基础课《数学分析》里,有一套所有数学人必知的习题集《吉米多维奇》,在译者前言部分,有一句话,意思是说,虽然翻译出版了这套题集,但是其实特别鼓励独立思维的过程,永远不要轻易去看解答,这样你才能够在思维上不断突破。然后我们系主任在给我们介绍庞加莱的时候,说他有一个特质,会把复杂的问题记住,然后只要在有时间的时候就拿出来思考思考,即便是在休闲娱乐的小空档。我自己从中受益匪浅。
论坛是一个很好的地方,值得多拿点时间来逛,有些栏目不错,比如puzzle up谜题、编程大赛、有时候OO不知道从哪里搞来的破题,相信经过一些时间,从来没人能给你讲明白的算法这个词,你自己就知道是怎么一回事了。我主张在学习方面多一点投资,不要介意是否多花了几块钱。比如很多人会觉得参加技术大会要花路费住宿费,却仍然会买几千元的手机;平时个人花销并不少,却连一本纸质书都不想买,不惜时间苦苦下载pdf。如果这么简单的问题都搞不明白,那还挺可惜的。你要知道,如果你的人生是在高速上升期,那么你的时间非常珍贵,每个人的黄金时期可能不会太长,且学且珍惜。
leonarding Q3:现在在论坛里提起“udfrog”无人不知无人不晓,能在这么短的时间内得到大家的认可很难得,能否分享下你的捷径。
udfrog A3:我觉得自己其实是很活跃的,虽然一天也未必回一个帖子,但是基本每天都会来看几次,也算是几乎全勤了。如果有感兴趣的帖子,是一定会发言的。我觉得论坛是个很好的学习工具,在这里,你可以畅所欲言。所谓学而不思则罔,思而不学则殆,论坛是一个偏实践的地方,是让你“学”的地方;而读书,是一个“思”的过程。只要将“学”和“思”结合起来,才能做到极致,技术水平才会有所飞跃。当然能够得到大家的认可,我觉得很欣慰,你的回复首先得让自己满意,如果自己都觉得回复的算法还不够好,理由解释的不充分,那就还要再斟酌斟酌。同理,那自然而然别人也会认可你的回复。
leonarding Q4:作为过来人,经过这么多年的实战洗礼,你觉得在技术的道路上有哪些困惑?能否分享下你身边发生的故事。
udfrog A4:浮躁,懒惰。很多人都希望自己技术好。有一些同事问过我,怎么学技术,需要看哪些书籍,但通常都是止于“问过”,好像知道了怎样学就等于学会了,然后就不再关注了,甚至连你专门发给他们一些有用的资料,文章,代码,技巧,他们都不会再看一眼。虽然你告诉他们,要多写代码练手,但是他们依旧连最基本的语法都记不住。君不见bell6248都是用手机回帖的么!:)
另外,我发现很多人不求甚解,解决问题完全靠猜,有时候一顿蛮干,问题不知道为什么确实解决了,就觉得自己真的解决问题了。其实这样你得到的收获将大打折扣,甚至完全没有,你纯粹沦为了解决问题的工具,而没有享受其中。我推崇由理论出发,一步步自然而然而又必然的解决问题的方法,有时候也有一些猜测,但猜测得有理有据,而不是胡思乱想,连自己都说服不了的想法。
leonarding Q5:你平时在学习过程中有没有发现不错的书?能否推荐给我们puber?
udfrog A5:官方文档,必须的。Tom的编程艺术,Guy Harrison的性能优化求生指南。如果说tom的那本是在主动的介绍一些知识,那么Harrison的书就是在检阅你的知识—如果哪里你不懂了,那就要翻资料好好看看了。
leonarding Q6:爸爸都去哪了,时间都去哪里,作为一名数据库从业者应该如何分配好时间?
udfrog A6:有的时候直接荒废掉了。状态好的时候,每天晚饭之后睡觉之前还能看1到2个小时的书,或者在论坛里遇到一些有挑战的问题,会保持思考。除此之外,如何利用好零散时间其实很重要。季羡林老先生在《这一辈子》里提到他的八字箴言—念念不忘,勤学不辍。有时候,10分钟的时间,可能已经足够搞懂一个知识点,或者思考出一个更深层次的算法,而这种“凭空”思维能力,本身也是极其值得具备的一种能力。
非常感谢刘盛(leonarding)与张博(udfrog)带给我们的精彩分享,希望他们的阅历与经验对大家有所帮助。欢迎各位puber积极回帖交流自己的心得与体会。
Leonarding刘盛
2014.05.07
上海&spring
分享技术~成就梦想
Blog:www.leonarding.com