zoukankan      html  css  js  c++  java
  • 程序猿应该了解的内容以及程序猿如何强迫自己学习(思考篇)

                上一篇文章LZ给出了作为一个程序猿必须掌握的知识之一,也就是我们常说的算法,后面还给出了有关算法学习的建议,希望这些内容能给猿友们一些帮助,同时也希望这一系列文章能够解答一部分猿友经常问LZ的问题。

                这次LZ思来想去,决定给文章起一个思考篇的名字,其实按照这个思路起名字的话,上一章应该叫做逻辑思维篇,而不应该叫算法篇。不过由于本次的重点在于思考,因此起这个题目也无可厚非了。

     

    引言

     

                前面LZ说过,程序猿必须掌握的知识,其中之一就是算法,这里面很重要的一个原因,不仅仅是为了应付一些公司的面试,更重要的意义在于,可以锻炼各位的逻辑思维能力。作为一个程序猿,或者说作为一个优秀的程序猿,逻辑思维能力是程序猿能力当中很重要的一项。

                那么本次LZ就来和各位猿友探讨一下第二个必须掌握的知识,而这部分知识则重点是为了锻炼各位的思考能力,因为善于思考也是程序猿或者说一个优秀的程序猿必备的品质。

     

    面向对象

     

                看到这个小标题,估计大部分猿友都猜到了,LZ所说的锻炼善于思考的能力的方式,就是通过掌握面向对象的知识,从而激活我们的大脑里的脑细胞进行高速的运转。

                面向对象,是一个人尽皆知的名词,它是现在几乎所有的高级程序设计语言的设计思想,主流的语言包括Java、C#、C++、Objective-C、PHP等等。随着计算机软件的快速发展,软件的规模与复杂性在稳步上升,因此传统的面向过程的程序设计方式,会导致程序的维护性降到一个可怕的地步。

                这是由于在面向过程的程序设计当中,所有的流控制都是由语言的流程控制来完成的,更通俗的讲,也就是由if/else等一些条件判断来完成的。因此不难想象,如果一个大型的软件当中,没有对象,没有多态,没有继承,没有封装,而是充斥着一大堆的if/else之类的条件判断,那估计不久以后会出现大批量这样的新闻,“某某系统维护人员,不堪重负,跳楼自杀!”

                

    对象范围

     

                根据语言的特性来说,倘若一个编程语言不支持面向对象的设计,那么就已经注定,几乎不会有人使用它来开发大型的应用软件或者系统,就算是勉强开发出来了,估计也不会有人愿意再去维护这个系统。在当今程序规模剧增的时代,作为一个程序猿,如果不懂面向对象的设计思想,这几乎已经注定,你真的也就是一个码农了。

                但是凡事都有例外,并不是所有的人都必须掌握面向对象的思想,因此为了避免不必要的争议以及误导某些猿友,这里LZ还是要先说一下我们讨论的对象范围。

                简单的来说,本文适合的人群为,现在以及将来或将来的很长一段时间内,都将以某种支持面向对象特性的编程语言为饭碗的猿友们。除了这一部分人之外,其余的猿友LZ建议可以点击浏览器右上方的“小叉叉”,以免接受误导。以下所提到的程序猿,全部基于上面提到的人群。

     

    面向对象与工作

     

                面向对象与算法不同,它充斥在程序猿的工作当中,与工作是息息相关的。

                比如某个方法应该放在哪个类当中(要符合单一职责原则)?某个属性的访问权限应该是私有的还是受保护的(封装)?某两个类的关系应该使用继承还是组合(类之间的耦合关系)?

                上面这类问题还会有很多很多,这些统统都是面向对象相关的问题。如果有的猿友看到这些问题,发现自己似乎从未思考过类似上面提到的一些问题,那么LZ可能要告诉你一个不幸的消息,你目前很可能还是一个真正的码农。

                与算法不同的是,是否掌握了面向对象的设计思想,会直接影响你的代码质量。换句话说,面向对象与平日里的工作是息息相关的。这也使得我们更加确信,掌握面向对象的设计思想,是一个程序猿必须做的事情。

     

    小谈LZ的面向对象之旅

     

                说起来,LZ第一次接触面向对象的相关内容,应该是在某培训机构里,当时是负责面授课的一位老师提到的。从LZ的了解来看,这位老师也属于偏爱技术并且喜欢分享的一类人。

                依稀记得那应该是一节有关spring框架的课,这位老师当时在课上简单的提了一下设计模式当中的策略模式,引起了LZ的严重好奇心,也是从那个时候开始LZ才知道,接口原来还可以这么用的,当时LZ和我的小同学们都惊呆了。

                自那次以后,LZ看代码和写代码的时候就不知不觉的养成了一种习惯,就是总会不自然的去思考所写或者所看的代码当中,各个类之间的关系,之后在培训机构最后的分组小项目当中,LZ担任组长一职,在编写核心代码的时候第一次使用了策略模式。

                之后LZ便进入了一家小型的互联网公司,当时公司的框架使用的是一个开源的基于SSH框架的电子商务架构,LZ看到后瞬间就被SSH代码的优雅给折服了。不过这个时候,由于LZ的面向对象思维尚且比较初级,所以不太能体会到框架中类的精妙设计。不过由于此时LZ已经有了面向对象的思维,也开始涉猎一些面向对象相关的书籍,因此在不断的学习和思考之余,还是在逐渐加深着对面向对象的理解。

                后来LZ陆陆续续的看了一些与设计模式、重构等相关的书籍,再一次巩固了面向对象的设计思想,并试图将其应用于LZ现在所维护的项目当中,在这个过程当中,LZ对于面向对象的理解依旧在不断的加深。之后LZ便干脆写了一个设计模式系列的博文,并因文章风格迥异有幸被邀执笔,至今此书还在LZ的构思当中,希望不远的将来它可以出现在大家的面前。

     

    LZ的小建议

     

                LZ之所以将自己学习面向对象的过程简单的描述了一下,是想让各位猿友意识到,在这个过程当中,LZ其实一直在思考,而且可以说是从头至尾。从LZ的经历也可以看出,面向对象不仅仅是程序猿必备的知识,更是牵动你思考的琴弦,只要你了解了面向对象的知识,很多时候会不知不觉的思考一些设计方面的问题,这也是思考与总结能力的一种锻炼。

                就LZ个人的经验来讲,LZ觉得面向对象的设计思想是一个长期培养的过程,而非一朝一夕的努力而至,它是一种思维模式,是一种编码习惯,学习面向对象的过程其实就是一个不断思考的过程。

                面向对象一般都会与你的整个编程生涯相关,因此我们应当尽早的接触它,但不需要着急的掌握它,应当循序渐进。

                根据LZ个人的学习经历,LZ建议学习面向对象的过程,可以分为以下几个阶段,各位猿友也可根据自身适当调整。另外,由于LZ是非计算机专业的半路出家之人,所以以下方法可能更适合非计算机专业的猿友们,不过对于是计算机专业的猿友们,应该也有一定的参考意义。

                1、初识阶段:这一阶段应该发生在你刚进入工作岗位的时候或者之前,或者更确切的说,应该在你可以动手写应用程序的时候就开始,无论是Web还是App。这个阶段可以看下网络上的文章,初步了解一些面向对象设计的基本内容,比如类之间的耦合关系(依赖,关联、聚合、组合等)以及一些简单的设计模式,例如简单工厂、工厂方法、策略模式等。

                2、了解阶段:这一阶段应该发生在你工作一段时间之后,此时你对你开始了解的面向对象的简单内容已经思考的差不多了。此时应该选取一本入门级的面向对象的书籍,较为系统的了解一下整个面向对象设计思想的内容,而不应该依旧只是在网络上猎取一些零碎的知识。

                3、实践阶段:这一阶段发生在你读完入门书籍之后,此时便应该开始实践阶段了。不过实践的时候不要轻易拿工作中的项目开刀,可以尝试写一些自己的小工具,然后将面向对象的设计思想应用进去,深入的体会它给你的小工具带来的好处。

                4、提高阶段:在经过实践阶段以后,便应该尝试提高自己的理解,以便在真正的工作当中可以正确的应用。此时可以选取一些较为深奥的面向对象书籍进行研读,加深自己的理解。

                5、取经阶段:此时你应该已经研读完了一些较为高深的面向对象设计书籍,现在可以进行下一个阶段了。找一个优秀的开源框架,彻底搞清楚它的设计,深入体会其中的奥妙,向那些优秀的开源框架设计者们取取经。

                6、大成阶段:倘若你已经成功的研读完一个优秀的开源框架,并深入的理解了其中的面向对象的设计思想。那么恭喜你,你的面向对象的设计思想已基本大成。此时你已经完全可以尝试写出一个优秀的开源框架,供世人们膜拜。

                总结:以上6个阶段的主线,主要就是思考。大致总结起来就是,先通过网络或者书籍等渠道,学习一些面向对象的知识,然后不断的思考、实践与总结,等现有的知识理解的很透彻了,再猎取一些相对更加高深的知识,再思考、实践以及总结,以此类推。

                面向对象的设计思想无法一朝而就,只能随着经验的增加,逐渐的加深理解。倘若在你未参与过任何的实际项目之前,哪怕你将书籍读烂了,也几乎不可能真正的理解面向对象这四个字。又或者你确实是理解了,但是真正用起来,还是会显得十分生涩。

                面向对象是人生的一次长征,我们应当尽早上路,并加快我们的脚步。但不要将自己想象成孙猴子,翻个跟头就想到达终点,好好的做个唐僧,徒步取经才是正道。

  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/chenhongyu/p/3342054.html
Copyright © 2011-2022 走看看