本文中反复提到了一个词,“思想”。
什么是“思想”?“思想”是个笼统的概念,泛指解决问题的思路和手段。
“思想”中被提及频率最高的,当属“面向对象”思想。那么什么是“面向对象”?
首先说“对象”,“对象”是一个指代词,相当于日常用语的他、她、它,并不具体指什么东西。所以“面向对象思想”就好解释了,就是使用ta的方式,去解决问题。
世间万物都可为对象,比如把“手机”当做对象,那么消费者拿到手机之后,并不需要去研究手机是怎么制造的,也不需要了解手机的运动原理,反正只要知道怎么去使用它,接打电话也好还是娱乐也好,就可以了。
面向对象的实现,依靠的封装、继承、多态等方法,最终达到的目标是是提高效率。比如说,手机就是一个封装好的对象,让用户使用手机前先去理解手机的原理,这既不科学也不效率。
计算机面向对象思想的诞生,就催生了许多面向对象的解决方案,这里面最广泛被用到的就是面向对象框架。
面向对象框架最大的作用便是分工协作,提高开发效率。比如说甲负责项目中的某个功能,需要使用乙的开发功能,互相约定好参数和返回值即可,并不需要去关心对方代码怎么写的。
java是一个纯面向对象式语言,大名鼎鼎的j2ee和j2me便是面向对象框架。而市场占有率近年来逐步攀升的php,也有着属于自己众多的框架,比如Yii和ci。甚至还有一些傻瓜式框架,比如ECShop、dedecms、discuz,提供给非计算机专精开发者使用。
但是值得一说的是,过分的迷信某个框架是不可取的,框架只是一种辅助手段,最终决定代码是否优秀的依旧还是人。
比如说Yii框架,被无数不知情的吃瓜众吹捧过,其结构复杂、功能完善,上手慢,但熟练以后,相较于其他框架能够得到更高的开发效率。
但是强大就意味着可塑性差,DIY潜力有限,这在面对亿级数据时便显得心有余而力不足。也因此,其貌不扬结构简单的ci框架,以及在其基础上各种改造而来的自研发框架,便在最高的层次发挥了巨大的作用。
面相对象与之相对的便是面向过程。在面向对象思想如此强势的通知局面下,面向过程依旧有着自己的一片天地。
面向过程就是直接面对问题,像流水账一样一次把代码弄出来,没有MVC。其缺点是代码又臭又长、可读性和可维护性差,但是它的优点是面向对象无可取代的:少了“安排”对象的资源消耗,面向过程的执行效率更高,在面对海量负载以及脚本任务中,面向过程都扮演着重要的角色。
由此可见,计算机行业里,并不存在说哪个技术一定是最先进的,哪个框架一定是最完美的。适合自己的,符合当下要求的,才是最好的。
真正的武林高手,一花一叶都是顺手拈来,绝不会拘泥于某一个招式,所以本书从来不去强调哪门技术又或者框架,以免给人误导。
就说Python这门语言,作为一门shell层执行脚本,并且还是个面相过程式语言。恐怕十年前的人们打死也想不到,它会在AI领域大放光彩。
以上说的计算机面相对象,或者MVC框架,都是狭隘的面向对象。广义的面向对象思想,则是广泛存在于世间万物的。
比如说手机,这个说过了。再比如说菜刀切菜,菜刀的材质有必要去弄清楚吗?
再具体到本书中假设的情况,面向对象的本质是分工协作,并忽视“部分”做“整体”的一个手段,是社会分工越来越细的必然产物。
比如说研发手机,手机里每个配件的技术是怎么实现的,这个完全不用考虑,就可以把他们当成“对象”,反正只要知道这些配件组装到一起,植入系统后就是一个正常的手机,这就够了。
再比如研究传感器,委托索尼研发imx,索尼怎么做到的,这不需要去深究,反正就是提出要求,得到成果。传感器是一个对象,整个过程也是一个对象。而研究传感器的原理,是自身技术储备和其他储备都达到要求后,才需要考虑的事情。
再比如说,怎么做一个物流机器人出来?都知道是SLAM,那么SLAM具体是怎么实现的呢?
首先是整体分为总控和个体,总控系统开发人员并不需要去了解具体小机器人是怎么做的,只需要按照方案来做一个基于坐标的二维电梯程序即可。
小机器人的项目负责人也不需要事必躬亲,他只需要把项目再细拆下去即可,具体可以拆解为:运动神经系统、导航系统等。
导航系统负责和总控对接,处理指令并向运动系统分发指令,决定行进路线、停走功能和是否卸货。
运动系统依照优先级,首先要依靠各类传感器处理避障问题,而后解决回充问题,最后再考虑要不要接收导航系统传来的指令。
再具体一点,避障就是一个问题,可以交给一个小型的开发团队去做;LDS以及红外传感器等,又是更小的组成部分,向避障开发组提供支持开发。
再具体一点,LDS怎么做的,激光脉冲怎么发射的,关我毛事……
这就是计算机项目的解决思路了,无论多么大的项目,都是拆分拆分再拆分,最终拆解成一个个可以实现的小项,从而使整个项目可以得到有效快速的执行。
再比如说,本书中立的一个flag:怎么做一个机器人。
同样,拆分。
机器人首先是拆分成“大脑”和躯干两部分,大狗以及后来的科技树,统统属于躯干。
视觉、听觉等非运动部分,则归于大脑。
高度成熟的机器人,两者缺一不可。
人类的许多动作,其实是神经反馈的结果,比如说看到肉肉就想吃:首先得看到肉肉,然后才能指挥身体去吃。
神经反馈后面会写。
不说了,我饿了,要去吃肉肉了……
祝大家元旦节快乐!
鉴于元旦将至,我就断个更庆祝一下吧……好好的节日,真的怕毒死人,下个章节可能有点毒……