学会开放性的思维

转载 2004年08月08日 12:50:00

作者:xpiloveyou  摘自:http://www.csdn.net

经常在论坛中看到一些问题:“我应该学习哪门语言?”“XX语言能做什么吗?”我对想对这类想法给一个我的见解。本文多少涉及到一些语言的评论,仅代表个人意见。

学会开放性的思维

我发现初学者最喜欢问的一个问题就是“我应该学什么语言?”。想不浪费时间学好一门语言然后就用这个语言解决所有问题。在提出我的见解前我先引用一段Eric Raymond的话:

“如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰,文档齐全,对初学者很合适。尽管是一门很好的初级语言,它不仅仅只是个玩具。它非常强大,灵活,也适合做大型项目。
但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平---你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。如果要做一些重要的编程,你将不得不学习C语言,Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。 Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。 LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。当然,实际上你最好四种都会。 (Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。”

大家看了这段话是否立刻就想按Eric Raymond的话从Pyton开始学习?或者学习他提出的四种中的C语言?且慢,我们注意这样几句话:“你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。”“(Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。” 可以看出Eric Raymond提出四种语言实际是提出四种不同的编程思想。他想告诉大家的就是:开放的思维,不要局限在一个语言当中,即“通用的方法思考编程问题”。

    也许有人反对说精通一门比懂很多而不精要好。确实我们必须精通一门,这个是可以根据自己需要来选择的。但不代表我们只需要学习一门语言,因为只懂一门语言很容易被它的局限性限制。C语言很灵活但是对数据的抽象处理不够。C++够强大也灵活了吧?它学习了C的灵活和高效以及Simula的抽象数据能力。可是C++的面向对象机制比不上Java。而当你学了Lisp以后你会发现原来程序还可以这样编,虽然C++也号称可扩展性,但Lisp的扩展性是C++所不能及的。而且Lisp是一种函数型语言,与面向机器的语言有着不同的思维方式,Java也从这里借用了不少思想。我觉得每一个语言都有最擅长的领域和不够的地方。没有一种语言真正通用,即使是C++,有些问题用C++来做实在有点吃力。这里一定有人有对C++痛苦的回忆。Java确实很优秀,适合分布式计算,但Java太安全了,可能不少有黑客气质的不喜欢它,因为它为了安全牺牲了很多灵活性。

我们应该学会开放性思维,看问题要看到最核心的问题,最根本的根本,而不会被其他的枝叶或表象所迷惑,做到这一步后才算比较成功。这样就会有一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时你碰到任何具体的问题,只要给点时间,都能轻而易举地解决。选择程序设计语言在这里只是选择不同工具。

并不是说工具不重要,但是如果没有一个很好的思想,那么这个工具你能用的好吗?而且解决一个问题并不是只有一种可能,或者这个问题的解决可能分几个部分而不同部分要不同的方法。这个时候没有开放性的思维,能解决好这个问题吗?就以Emacs为例。Emacs的底层代码是C写的而上层代码却是Lisp。也因此Emacs足够强大快速而且又有很强的可扩展性。如果仅采用单一的C编写,那么就是vi了。它很快也很灵活,但它扩展性怎么样?

看到一些关于该选择什么语言的问题我觉得真可笑,不知道他们想的是学语言还是学着解决问题。我们学习编程只是为了学习写程序本身还是为了学会用编程解决问题呢?如果是前者,真好你是个历史学家,尤其是只用C和汇编的可以称为考古学家了。如果是后者,那么不必再问选择什么语言了,学会编程的思想最重要,选择一门语言然后学习它的思维方式。这时先选哪门就和应该上午吃苹果还是下午吃橘子一样了,你应该熟悉更多的工具。

补充一些就是独立于程序语言以外的编程思想,那就是算法,数据结构,和编码规范。不论你精通多少门语言,当遇到一个问题能否用最快最好的方法解决,那就是考验你的算法设计能力和数据结构的操作能力了。而用程序清晰的表述一个问题就是看你编码是否规范了。当你需要改进程序时你会发现一个编写清晰易读的程序维护起来要方便的多,这也有助于快速的解决问题。

《学会提问-批判性思维指南》读书笔记

本书的目标是:传授批判性的提问技能。批判性思维的养成就是在面对一个论证的时候,不仅仅要关注论证的结果,而是要关注论证的各个要素,思考问题,证据以及论证结构是否合理。只要一个断言不是事实,而是一个看法,...
  • ennaymonkey
  • ennaymonkey
  • 2017-04-21 09:05:56
  • 1317

学会提问批判性思维指南

  • 2017年11月20日 15:53
  • 274KB
  • 下载

技术面试中的Open Question/开放性问题的总结

技术面试中的Open Question/开放性问题的总结2009年07月10日 星期五 08:59关于面试,本来就没有放之四海而皆准的真理。最好的经验是按照以前的面经准备,因为一般情况下面试的问题是比...
  • gchen_nj
  • gchen_nj
  • 2009-08-06 13:13:00
  • 986

学会开放性的思维 xpiloveyou(原作)

学会开放性的思维  xpiloveyou(原作) 在CSDN上看到这文章,引起一定程度的共鸣,共勉之。以下为转贴:经常在论坛中看到一些问题:“我应该学习哪门语言?”“XX语言能做什么吗?”我对想对这类...
  • mailer3721
  • mailer3721
  • 2007-05-06 01:14:00
  • 386

PHP学习随想之“思维逻辑”与“记忆”

摘要:掌握新技能,方法最重要。书上说:学习软件开发,“思维逻辑”是核心,”记忆”只是辅助。百思不得其解,偶得灵光,记录在此。...
  • mika85489
  • mika85489
  • 2015-12-06 10:36:00
  • 514

批判性思维(套装共6册)(如何高效学习+学会提问+专注力:化繁为简的惊人力量+思考的艺术+批判性思维工具+逻辑思维简易入门).azw3

  • 2015年11月06日 23:52
  • 17.16MB
  • 下载

新随笔--读书笔记《学会提问》:学习提出好问题的思维方法

我认为本书作者提出的批判性思维其实是培养一种思维逻辑和表达能力。 第一点:思维逻辑的要点,首先提出问题要环环相扣,也就是讨论问题时的每个提问应该和上一个提问有关联,更深入,而不能跳跃,跳跃会导致讨论无...
  • blueyang2007
  • blueyang2007
  • 2014-07-22 11:37:56
  • 950

学会运用++和--,培养计算思维

++和--
  • aoliaoliao
  • aoliaoliao
  • 2015-05-16 16:18:32
  • 243

学会系统思维

系统思维很简单,遵循下面的“一个中心,两个基本点”即可 常用的逻辑分类 一般常用的就是”程序流程“和”组成要素“两个分类方法,最后一种基本很少用。 常见分类错...
  • bl1988530
  • bl1988530
  • 2013-05-02 22:46:41
  • 1010

要学会打破惯性思维

今天遇到一道题, 编写递归算法,从大到小输出给定二叉排序树 中所有关键字不小于x的数据元素。...
  • u012137644
  • u012137644
  • 2014-05-09 11:43:50
  • 578
收藏助手
不良信息举报
您举报文章:学会开放性的思维
举报原因:
原因补充:

(最多只允许输入30个字)