按说我应该已经过了问这个问题的时候了,但最近越来越觉得这确实是个问题.自我在电脑上敲下第一个helloworld vb6程序以来到现在已经7年多了.7年多的时间,我接触了不少的语言.也曾经觉得会很多语言是多么多么的牛b而抱着
有限的几个参考同时死磕几门语言.随着经验的增长,开始觉得语言虽多但都是那么回事,核心还是要靠算法和设计.于是这方面的兴致也慢慢淡了下来.不过,我仍然觉得定期学习一门新的语言对于一个程序员是很有必要的(受the pragmatic programer的影响).但是近两年觉得学新语言越来越"难"了.为什么难呢?以我近两年接触的几门语言为例,它们是perl ruby 和 tcl.刚拿到这几门语言的时候通过翻相关的资料,弄清楚控制逻辑的编写方法,如果有尚未接触的概念,学习之.例如ruby的block对于惯用c系语言的我就是个陌生的概念.这样在很短的时间内,借助查文档,我就可以阅读并理解该门语言所编写的代码了.接下来就是"难"的部分了;熟悉一个东西的方法莫过经常和它打交道了.常用它们写程序是最好的学习方法.但问题就在这儿.刚接触的东西,对库之类的都不熟,于是用新学的语言得翻着文档开着搜索引擎做.有时候一时找不到合适的方法还得和在文档中死啃半天.用原先顺手的语言半小时解决的问题改用新语言可能1小时还在弄.于是在大多数情况下,特别是工作中.还是捡起熟悉的语言开干了.时间一长,学过的东西老不用.自然会慢慢淡忘.于是才啃了perl不到两个月的我突然想捡起来用的时候却不得不再去翻那些语法资料.因为刚打开编辑器想敲键盘就冒出了一大堆问题:"hash表是怎么写的来着?" "数组是@开头还是#?"同样的问题还可以推广开来,如何学习一门新的技术?以正则表达式为例,刚开始接触RegExp的时候,我才学写了不到一年的代码.那些表达式在我看来如同天书一般,于是没有学.之后再接触正则的时候我已经能自行写出同等功能的函数了.写一段抽取HTML内容的代码可能花费我15分钟至半小时.而查着文档写同样功能的正则包括中间因为不熟而做的的各种测试则可能会花上我一个小时以上.如此循环,虽然写那些解析代码让我在字符串解析的算法上获益匪浅,但至今我还是正则白痴一个.有没有摆脱这种工具使用惯性的方法呢?欢迎各抒己见.

解决方案 »

  1.   

    可以了解不同语言下的编程思想吧.比如fp语言的思维方式和惯用c系的完全两个样.
    长期使用固定的语言和库会导致思维趋向僵化这点我是有点体会的.
    另外我主张用合适的工具去处理合适的事.当我需要一种胶水把各种库
    粘连起来的时候,再用c#我就觉得有点蛋疼了.我现在用的胶水是javascript.
    但是我知道tcl更适合.
      

  2.   

    前段时间基于兴趣,学习了python+pyqt,对于C#有一定帮助,而且挺好玩的,多写点blog,或许以后忘记了,可以看自己写的blog
      

  3.   

    7年前我就一个初中毕业进大专两年多年的小P孩,我就没指望过那几年的编
    码能给自己带来什么"经验".学编程纯属于兴趣,我不是软件专业的,编程
    基本上都是自学.头几年纯粹就是坚持每天找东西练手写代码.你说的那种
    "民工写的代码"如果我没理解错的话我应该在05年底就厌倦了.06年之后到
    现在我搞了一堆和纯编码无关的东西.从计算机基础到自己设计的各种乱七
    八糟的库和原型.自己研究怎么做出灵活的模块设计,如何在结构上降低代
    码的编写量和维护难度.我现在工作也就两年,而且差不多有半年的时间在
    出差.不能和别人工作7年的经验比我当然知道,但至少我能把不少和我一样
    工作两年的人踩下去.sp1234我知道你一向回帖说话比较直,但也不至于这样一种一来就是一副教
    训人的口气吧?我不过发个帖讨论下习惯和方法的问题,至于吗?
      

  4.   

    本帖最后由 caozhy 于 2011-10-27 01:26:16 编辑
      

  5.   

    呃...你可能没好好看我的帖子.也许是我的标题取得不太好.
    现在学新的语言对我没什么问题.FP语言,动态语言和支持
    原型的语言我都有接触.其中f#和javascript对我编程思
    维影响很大.我在c#中也开始有把Lambda表达式当ruby中
    的block用的倾向.我现在讨论的是,学习了新的东西;但在工作中用不到,日
    常没事写代码,用新的东西因为才学没多久不熟,导致开发
    速度还比不上老东西.时间一长不用新东西除了新概念上的
    外其它的渐渐的也就开始淡忘了.我想讨论的是,除了专门为这些新东西另抽时间去练手外,
    有没有别的方法或是好的习惯能在平时也能渐渐的熟悉起
    这些新学的东西呢?换句话说就是交流下大家平时是如何
    巩固自己所学新东西的经验.matsu那本是好书,看了几篇电子版,准备等工作安定下来
    入手纸质版
      

  6.   

    我到觉得别学那么多,学精一门就行,至少做那个领域的牛XXXX
      

  7.   

    aaaa 沙发 bbbb 多联系。。简单。。都相通
      

  8.   

    将你想法用编程实现,哪怕是简简单单的API,自己写一遍,看看具体的功能是什么样子的,我想这样能够理解的深点快点,时常写blog也是很好的选择,好记性不如烂笔头啊~~ 
      

  9.   

    本身扯到这个只是说在这么长的时间里我已经接触了不少语言
    现在新语言或新东西的学习本身对我不是什么问题.问题在于巩固.
    前面已经说了"第一个helloworld.",helloworld是什么大家都清楚
    的吧?
      

  10.   

    语言什么的用得多自然熟啦,有需求就捡起来看看,有一门语言打底的情况下最多三五个工作日就可以跌跌撞撞地开始编了,编多了自然熟。懂得再多也形不成核心竞争力啊
    对于程序员来说,什么C啊C#啊java啊,都是浮云,真正有价值的是业务逻辑而不是什么语法编程的思想什么的~~那些都可以练出来,或者直接套个模型,的确是民工就能写,个人顶sp1234。
    公司可以立马找个写代码和你一样水平的新人,但是可以立马找到个懂公司业务技术水平一致的新人吗?
      

  11.   

    如caozhy的回复中matsu所说的.语言决定思维方式.不是说要学很多很多的语言来用.
    而是学会这类语言的思维方式.比如只用c的是不太会以oo的思想进行设计的,更不要提fp
    和动态语言的一些设计思路了.
    其次是我说的"合适的语言做合适的事".我认为做事选择一个合适的工具是很有用的.
    选择得当可事半功倍.语言只是一个解决问题的工具.和成为一个领域的牛XXXX我觉
    得没多大关系.而且一个领域的牛XXXX我认为肯定不会只用一个工具.
      

  12.   

    本人觉不管什么语言,其性质都是一样的,都是为了实现某些需求的。至于什么语言不重要,很多语言都有相通的地方,你会一种语言,再学另一种语言,不会像初学那样,只是要熟悉语法或其它的功能!
    本人早年用asp做网页,从06年改为asp.net c#,感觉c#是很强大,但是不能忘了vb给我们的启发。
      

  13.   

    我会的几种语言
    C#,Action script 3,C++,delphi,asp。感想:
    1.
    不管哪一种,3个月不用,就跟不会差不多了。
    2.
    逼急了要用,一个礼拜就能学会。
    3.
    没事休闲时间别老学语言,学学做人处事,再不然去游泳,打球,钓鱼都比学语言好。
      

  14.   

    我追求的不是套那个模型的能力,而是设计制作那个模型的能力.
    不知道这算不算是"民工就能写"呢?懂公司业务技术流程什么的
    我就算是新人进去一两年也能摸个八九不离十了.我想要的那个
    能力呢?如果方法不对我想就是死啃个10年8年也就是老样子吧?为什么我会去找各种主流流行的语言试图学习?因为这两年接触
    的fp和动态语言所学会的东西使我在设计那个"模型"的方面受益
    良多《程序员修炼之道:从小工到专家》里有一条tip,就是建议每年学习
    一门新的语言.能在04年就读到这本经典的书是我的幸运,它对我
    的影响很大,推荐一读.
      

  15.   

    深有同感!!!尤其是winform和wpf开发的时候,简直是乱套啊!
      

  16.   

    wpf我也是啊,学得挺快.一旦用起来边查文档边做太慢.时间又不等人.于是又捡回winform.结果时间一长老不用就忘得差不多了.
      

  17.   

    我觉得学好一门语言的必要条件就是:扎实的基础,勤奋的练习,对方法和对象的深入理解(如学习C#最好能透彻理解FrameWork框架)。
    至于成千上万个属性,用的时候查一下就行了,最重要的还是练习和编程思想编程思想如上学的时候学习的冒泡法排序、二叉树遍历等,都是基础思想,很有用的
      

  18.   


    我现在拼命往WPF上转呢,虽然开发速度比顺手的winform慢很多,但是我在勒紧裤腰带坚持,因为wpf的新特性太多太好用了!PS:我现在被一个WPF问题困扰了一整天了,就是WPF的RichTextBox无法像winform的Dock一样使用Fill属性,现在我的RickTextBox只是一细条 -_-! 但是我新建了一个练习项目,RickTextBox可以铺满,但是到了我的正式的项目中就不能铺满了,要哭死了!.............我正在查资料和属性  -_-!
      

  19.   

    计算机技术很大程度上依赖于数学,但数学不是计算机技术的全部.一个数学很nb的人也可能搞出很烂的设计.更何况数学是我的短处.我何必在自己不擅长的地方去尝试突破呢?设计上更我觉得依赖的是设计思路和个人的编码经验.至于学不学新语言我估计你还没理解我这里这里学新语言的目的.11L的caozhy总结得很好:不同的语言能够带给你不同的思维方式.这对扩展设计思路是十分有益的.另外我加上一条:选择合适的工具解决问题亦可以事半功倍.比如我需要一个小工具,提供一个ui往数据库里插一些数据,c#/c++我都要建工程拖拉控件编码弄半天.用html+javascript+ado + mshta我随便找个编辑器敲点代码保存就能调试使用.哪个快一目了然.
      

  20.   

    基于LZ的开篇以及后续回帖.
    我认为,LZ的方式就基本就是正确的.但是你所列出的问题 都离散的分布在你的帖子中.没有提出诸如
    1,我想知道什么什么什么
    2,我的观点是什么,这个观点对不对
    3,什么什么要什么..类似这样的问题未被提出.应该就是一番交流吧。我认为。
    但就你的学习过程,和方式.我认为那么做就是正确的.因为:
    本身如果你不常用他的话,到需要写个DEMO的时候的确也就要频繁查询语法和关键字含义.(这无可厚非)
    并且你也认同:学习某种系列的语言可以了解这个派系的语言思考方向.(这个类型的语言是为解决什么问题而设计的)这就够了!如果在学习语言的过程中,都已经比较泛泛而谈的了解了这个语言的思维. 那么还有什么更值得推崇的方式去学习语言呢?  我觉得应该是没有了.了解很多语言也只是为丰富你的知识. 还真不是为了 到用的时候立马就能上手去用(每个人都会有自己解决需求的主要语言).
    毕竟你不是万能的,精力极为有限. 如果是项目的技术主要负责人, 你应该去招一些能够掌握这些技能的人去帮你实现.而你,应该从这个 软件的功能上 掌控你应该使用 什么样的 "人力资源"。如果你非得说你要精通好多好多语言。 -- 如果你真是这个意思。那么,有人说 10年以上才叫程序员。我想,10年是个小数目吧? 我们这个C#论坛有几个是10年的? 我至少不是。老外一般很厉害。什么语言抓起来就用。
    但是,那些人一般都是 很多个 “小数目”才堆起来的吧。
    如果你真要达到“抓起来就用”。 我想, 那还真是没有什么“方法论”,“捷径” 而就是日积月累的 技术沉淀(虽然在中国有可能你不可能根据你的爱好 而天天做代码工作 -- 中国鄙视踏实工作而崇尚管理,从各位对'民工'的描述即可看出)。
      

  21.   

    我不认为有必要老去学新的语言。我认为只有在有实际需要的情况下,才用得着去学。
    比如你同时学perl、python、ruby,我认为就不是很必要,它们非常相似,好像没有哪种情况只能用ruby解决而用perl/python就会死。
    我主要就用perl,自己玩大型程序就用C/C++,会的一点python是因为Blender建模软件以python为脚本引擎,不会不行,但只到能写出blender插件就够了。
      

  22.   

    推荐楼主下面该学ahk语言了。
    http://www.autohotkey.com
      

  23.   

    小弟现在刚入手java和C#
    为了以后发展想学习C 和C++ 该如何学习呢
    忘指点