`

思考、学习新技术的原则和方式

阅读更多

先看下面这样的困惑:

  • 最近了解了几个MVC的框架,其中有两个是公司内部的。发现这些东西都是类似的,从处理逻辑到页面渲染;从service到layout;配置的实现无非就是XML,或者annotation……我有种感觉,兴许已经跳不出这个思维圈子了?
  • 如今的时代,是一个概念翻飞的时代,oschina里的开源软件数量就已经超过了两万,五花八门的技术层出不穷,到底什么技术才是值得学习的?
  • 有位朋友说,他想学习一些关于Android上的开发技术,兴趣驱使。几个月过去了,他说他已经能做出许多小程序了,可是他现在回想起来,掌握一门技术是好,可兴趣之外还有什么呢?他说,“如果我的工作中不使用Android平台,我学它还有何用?”。
  • 学习技术到底是一件有意思的事,还是一件痛苦的事?读书的时候,我曾经买过侯捷翻译的《深入浅出MFC》,对那时的我来说,似乎太困难了一点,我强迫自己看完了三分之一,实在是没有毅力继续往下读了。我在其中察觉不到快乐,这本书在当时似乎充满了生涩。

  如上这样的故事太多了,很多时候,程序员们(包括我在内)辛苦地学习,有的没有好的效果,有的过程充满痛苦,有的更是不知道我学它的目的是什么。

  国内的教育体制,培养了这样一批人:

  他们努力、奋进,热爱技术,愿意投身软件行业,愿意写出高质量的代码,他们对业界的东西很感兴趣,他们愿意学习扎实的基础知识,他们渴求火热的新技术……

  几年以后,他们拥有广泛的视野,阅历宽阔、经验老到、言辞犀利,对行业动态了如指掌,显然,他们是行业的博学者。

  然而……

  他们却缺乏这样一种能力——思考。

  欠缺思考容易导致这样的现象:

  • 不会做设计

  遇到了问题,拿见到过的、学到了的熟悉的框架、方案、模式往上套,而不仔细分析其中的利弊,只是尽可能地寻找最接近当前问题的解决途径。

  有的是不会做系统设计。和少数所谓的“架构师”接触过,他们“只懂业务,不懂技术”,这样设计出来的系统只能满足功能性需求;而论坛上的一些具体问题的讨论话题,则暴露出一些跟帖讨论者“只谈技术,不提业务”,譬如“XXX大容量的解决方案”、“秒杀系统的终极架构”,企图对某一类宽泛的问题,设计出一套放之四海皆准的通用解决方案。

  还有的则是不会做面向对象设计,缺少抽象和解耦的能力,这样的例子就更多了。朋友告诉我,他的单位有一位写Ruby的老员工,一个庞大的工程,代码里面居然只有一个上帝类,就搞定了所有的问题。

  • 不能坚持自己的观点

  这一点在面试中最容易观察到。应聘者有刚毕业的学生,也有工作超过10年的有丰富经验的从业者。他给出一个粗略的方案以后,在方案没有细化到一定程度以前,很难给出优劣的评论,但是,如果你轻轻地challenge一下,他就迅速放弃本来的构思,跑到你的思路上来。

  例如,SNS系统中,服务端有消息要怎样通知到客户端,这样的一个问题,解决方案有很多种,比如客户端轮询、服务端hold住连接推送等,各有利弊。应聘者应当有自己的观点。

  • 不能细化一个问题解决方案

  怎样区分一个空谈家和一个实干家?给他一个具体的问题是最好的办法。在我刚工作的时候,我曾经很钦佩那些在活动中、讨论中高谈阔论的人,我觉得他们很能说。可是后来我逐渐发现,能说的人实在是太多太多了。细化设计、甚至落到编码,才是对一个程序员真实的检验。当然,如果你觉得做软件设计的人可以不熟悉编码、架构师可以不首先是一名高级程序员,那我们也没有什么可谈了 :)。

  如果你会学习,你可以成长得很快;如果你不会思考,你永远只能跟在别人后面。

  在新技术的学习上我认为也应当多思考,不同的人有不同的学习动机。在非外界所迫的情况下,对于新技术的学习,我的观点可以概括为:

  • 它要解决什么问题,就是所谓的问题域,是我关心的吗?

  我没有去研究操作系统底层的实现,并非这没有价值,而是我没有兴趣,这就是问题域的影响(不过现在我有兴趣了,我想做一些这方面的事情)。

  • 和过往解决方案它的优势在哪里,是否显著?

  这是competition,重复的技术是没有生存空间的(当然,你是微软的话除外 :) ),就像互联网同一个类型的网站,竞争到最后就那么两三家。就像Groovy,我很喜欢它,但是有了Scala以后,我觉得兴许有一个要死掉(Groovy创始人说,如果他早些知道Scala的话,就没有Groovy什么事了。具体的报道请去Google上搜他的blog)。

  • 它的实现和带来的效果上看,有没有很有意思的思路,是值得借鉴和思考的?

  这是最难讲的一个问题。以去年初开始接触的Node.js为例,它可以做到把后端的聚合(譬如portlet之流)放到前端来,后端只保留一种类型的页面服务——页面模板,以及若干易于管理的API接口,大大简化了后端体系的复杂度,而且还能把压力分散到前端来,这是我早些年不曾见到的。

  这三个问题想过之后,觉得有价值,我才去学习。要不然,对我而言就是不想深入的东西,了解了解也就罢了。

  新技术学习的方式呢,我想说这么几点:

  • 寻找切入点

  我很喜欢BlueDavy的blog上的一句话:“理论不懂就实践,实践不会就学理论!”。

  最后最好是要落到动手实践上去的,但是倘若习惯从那些原理介绍的文字入手,未尝不是一种不好的选择。而且,现实情况会有一些约束,例如在了解几家互联网公司的云平台的时候(Amazon的EC2,M$的Azure等等),除非你是这几家公司的员工,否则是很难深入其中的。

  • 寻找自己的兴趣点

  学习应当是一件有意思的事情,当你的大脑排斥它的时候,我不相信可以很容易地掌握这门新技术。如果你找不到兴趣点,那么,不妨回到我前文对于新技术是否值得你学习的观点上去,既然你没有什么兴趣,你学它干嘛?

  • 善于比较

  比较是一种非常容易上手的思考方式,和什么比较?和相似技术比较,和操作系统、网络这些基础设施上面的例子比较,最后,和生活中的例子比较(譬如,Java NIO的实现是一个很好的例子)。

  • 不断获得回馈

  回馈是什么?做出一个HelloWorld的例子,就是一个极好的回馈;理解某一项实现原理,联想到其它类似的实现,产生一种恍然大悟的感觉,也是一种回馈。在学习的过程中,不断产生回馈,意味着你不断地收获成就感,这是继续下去的动力之一

 

转自:http://flycars001.iteye.com/blog/1995067

分享到:
评论

相关推荐

    关于信息技术的一点思考.doc

    关于信息技术的一点思考 学习《信息技术应用能力提升》以来,我重点关注的是PPT的制作技术。因为对于我们 一线教师而言,PPT几乎是每节课必用的授课方法之一,但究竟怎样制作PPT能让课堂更 加完美高效,我基本是小马...

    计算机网络技术课程标准.pdf

    备跟踪和学习新知识和新技术的能力。 12.具备良好的团队协作能力、较好的沟通能力。 3、社会能力 1.具有进行口语表达能力,能很好地与同学、老师、客户进行协商与沟通。 2.能与同学相互协作,共同完成好各项动画...

    心得体会-人工智能学习心得.doc

    纵览时间长河,很多新生的技术在一开始都是举步维艰的,人工智能也不例外,但幸运 的是,人们接受和学会使用新技术所需要的时间越来越短,对于人工智能产品的投入市 场是有益的。因此,在我看来,将已开发出来但还...

    CSS禅意花园(中文)第一章

    建议CSS新手从推荐读物(参见本书末尾的“最后的思考”一节)中选择一本阅读,学习基本概念和语法,然后通过阅读本书来拓展这些概念并在作品中应用它们。书中探讨了一些基本的Web设计原则,适用于众多但不是所有情形...

    浅谈计算机应用基础课程创新教学.docx

    在营造良好的公共教学环境时,教师需要采取平等民主的教育原则,引导学生主动学习相关的课程内容。为了保证有效提高每一位学生的计算机综合学习效果,教师需要基于学生的实际学习情况,为学生设计编制个性化的学习...

    《计算机网络技术》课程建设标准.docx

    备跟踪和学习新知识和新技术的能力。 具备良好的团队协作能力、较好的沟通能力。 2.社会能力 具有进行口语表达能力,能很好地与同学、老师、客户进行协商与沟通。 能与同学相互协作,共同完成好各项动画设计、制作...

    模式识别原理及应用

    (1)内容广泛:本书系统阐述模式识别领域的基础知识及经典方法, 对经实践证明具有重要现实意义的新理论、 新方法、 新技术也进行介绍. 包括统计模式识 别、 句法模式识别、 模糊模式识别、 神经网络技术和统计语言...

    ChatGPT从0到1系统性学习资料汇总

    而且,如果希望对AI的使用和理解先领导你的同事,甚至有计算在未来从事GPT相关工作,这一块儿内容更是重中之重,它关系着未来你遇到ChatGPT相关问题时你的思考方式。目前对于大家来说,AI是一个黑包子,我们不知道它...

    head_first_design_patterns.pdf Head First 设计模式(英文原版 非扫描)

    本书作者Eric Freeman和ElisabethFreeman是作家、讲师和技术顾问。Eric拥有耶鲁大学的计算机科学博士学位,Elisabath拥有耶鲁大学的计算机科学硕士学位。KathySierra(javaranch.com的创始人)和Bert Bates是畅销的...

    Head First Design Patterns 英文版 Head First设计模式

    ElElisabeth Freeman是作家、讲师和技术顾问。Eric拥有耶鲁大学的计算机科学博士学位,E1isabath拥有耶鲁大学的计算机科学硕士学位。Kathy Sierra FHBert Bates是畅销的HeadFirst系列书籍的创立者,也是Sun公司Java...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    人工智能改变了生活态度作文.docx

    陆续出现的新人工智能甚至能够胜任多种的职务,由此人们开始担忧,会不会有那么一天人工智能会让计算机如人类般思考又或是替代人类。 计算机的确能够帮助人类做许多事情,省力而快捷。本该耗费大量思考时间或是精力...

    物业收费管理系统实习报告 java版(10000字)刘尧涛

    通过赴外实习能够搜集与毕业设计相关的资料,了解管理系统开发的基本原则,学习java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习java、SQL等的基础知识及正确的运用方法,了解设计专题的...

    JAVA基础课程讲义

    为什么需要学习IO技术 146 基本概念 146 数据源 146 流的概念 146 第一个简单的IO流程序及深入(将文件中的数据读入) 146 Java中流的概念细分 148 Java中IO流类的体系 149 四个IO基本抽象类 150 InputStream 150 ...

    高频电子线路 阳昌汉课件PPT

    遵循“加强基础,强调功能,优选内容,便于学习”的原则,考虑国内外科技发展的需求,并结合编者最近几年的教学改革的研究实践,参考了国内外有关教材,在上一版教材基础上改编而成的。《高频电子线路(第2版)/高等...

    1-TQM培训资料.pptx

    这是丰田公司的首创,这项工作涉及公司未来 1962年开始,起源于QC学习会,目的在于人才培养和创造价值 各种研发工具的应用,特别是开发能力的提升和创新技术的提升 TQM作为共用语言,掌握更好的思维方式和沟通方法 ...

    网络营销人才需求的调研报告.doc

    网页制作能力 网页制作本身设计到很多问题,如图片处理、程序开发等,这些问题不可能都包括在 网络营销专门课程中,但是一个网络营销人员对网页设计应该有初步的知识,起码对于 网页设计的基本原则和方法有所了解。...

Global site tag (gtag.js) - Google Analytics