学会开放性的思维

转载 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和汇编的可以称为考古学家了。如果是后者,那么不必再问选择什么语言了,学会编程的思想最重要,选择一门语言然后学习它的思维方式。这时先选哪门就和应该上午吃苹果还是下午吃橘子一样了,你应该熟悉更多的工具。

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

<学会提问——批判性思维指南>总结笔记

0.前言      我们不希望自己的行为仅仅建立在别人的评价的基础上,不希望自己是公众的傀儡。(所以我们应当学习掌握批判性思维)      1.提出正确问题的益处      1.1 批判性思维涉及:1...
  • petershina
  • petershina
  • 2015年04月08日 10:25
  • 801

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

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

【分享】微软面试题及答案 (很需要开放性思维啊)

第一组   1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?   2.你有一桶果冻,其中有黄色、绿色、红色三种,闭...
  • cangyingaoyou
  • cangyingaoyou
  • 2014年02月08日 15:48
  • 444

学会系统思维

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

开放式前端面试问题汇总

前端面试题
  • heye13
  • heye13
  • 2016年06月20日 15:26
  • 758

干货|如何用开放性来做管理

点击上方“中兴开发者社区”,关注我们每天读一篇一线开发者原创好文▎作者简介作者魏来是敏捷教练,有5年的敏捷实践经验和多年的管理经验,擅长团队SCRUM和项目级敏捷的研究。本文主要是针对开放性做了一些深...
  • O4dC8OjO7ZL6
  • O4dC8OjO7ZL6
  • 2017年12月18日 00:00
  • 134

《构建之法》读书笔记——第10章 典型用户和场景

第10章 典型用户和场景 10.1 典型用户和典型场景 光看用户的表面语言或行动还是不够的。我们还要找到用户语言或行动背后的动机!不能光根据用户的语言就匆忙做决定。 10.1.1 Visua...
  • rendonghao
  • rendonghao
  • 2016年08月16日 00:46
  • 260

读书笔记2 《学会花钱》 野口真人

根本:我们得到的价值是否大于支出的金钱(价格)
  • m0_37890694
  • m0_37890694
  • 2017年03月14日 15:26
  • 814

学会学习 读书笔记

从小学到大学之前,一直都是学习课本知识,并没有多少自主学习的意识,到了大学和研究生之后,虽然自己也有主动去学习,但是一直觉得收获并不是那么大,没有明确的目标,多多少少也看过一些书,但是仅仅局限于看过,...
  • wendy_fly
  • wendy_fly
  • 2016年06月10日 11:51
  • 632

学会提问——批判性思维指南

第一章 提出正确问题的益处 你已经习惯去关注特定的事情,去支持特定的兴趣,去思考一个特定的观点。因此,你应该经常对这些寄存的观点进行批判性思考。对于这些既存的观点你有感情。他们都是你的观点,你总...
  • jscripy
  • jscripy
  • 2014年12月29日 02:41
  • 220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学会开放性的思维
举报原因:
原因补充:

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