我从儿童时期,1989年在AppleII电脑上敲下第一行LOGO语言指令,后与编程结下不解之源,二十几年来不曾中断,至今因为各种因缘际会,学会了很多大家常常听见的语言,也学了一些冷门的. 我应该可以算是一个"有经验者". 我对各个学习阶段的程序员,对于语言的选择,有各种不同的推荐.

关于: 重要的是思想,语言不重要. 这句话只能对 "中级" 程序员有用,初学程序员最好当这句话不存在,因为对于刚入门的人,语言很重要. 对于"高级"(指已经在某个编程技术领域碰到天花板的)语言也很重要.对于后者,很多时候你的任督二脉能不能打通,其实语言占不小的影响.

对于前面一种情况相信很多人都已经做了回答. 不过对于后面这种情况,我想有深切体会的人并不多.我以下回答针对"高级"(上文定义)者,初学者不要盲从:

选第二语言(楼主的定义),要选跟你主语言不同体系的,比如对大部分人,主语言都是C/C++系(包括Java,C#,ActionScript....等一大堆主流语言),那么第二语言最好选择另外一系,比如 Scheme 等. 最好选择编程哲学不同或相反(比如Python的哲学是追求每件事应该有并且只有一种解法,但很多语言比如javascript等的哲学是每件事应该有很多种解法)的一系. 如果遵循以上两点,基本上这个第二语言不太可能跟你的主语言在应用领域上有太大重合. 也就是区别要大一些更好.

原因: 对于"高级"的程序员,语言应该只是你表达自己思想的工具,你能自由用主语言表达你的编程思想,你可以用ASP写出面向对象甚至MVC的网站程序, 但是另外一个方面,当你 "无所不能" 以后,就会发现自己好像停滞了, 这个时候你需要一个反差很大,最好是编程思想完全不同的技术,来让你突然觉得自己原来什么都不会,原来自己一直以为天经地义的事情,在另外一门技术里是完全扯淡的,而自己压根想都没想过的事情,在另外一门编程语言里却司空见惯. 这种冲击可以让你获得很多灵感,可以让你突然 "跳出来"~ 因为你其实学之前已经可以融会贯通各种语言,所以学习一个新语言,这个知识角度对你的帮助并不大,但是学习过程中哲学高度上对你的影响会非常大.

很多程序员以为全世界所有程序都是 代码+数据库 (我面试程序员时通常会问你有没有写过跟数据库没有关系的代码,超过一半的人惊讶地回答说什么程序都是围着数据库增删改查的) 其实原因是他们做的可能是外包项目,或者互联网网站, ERP之类的东西,自己所学所用制约了他们的视野,以为所有程序都是这样的,如果这个时候他做个浏览器,做个图片查看器,做个播放器, 他还会觉得所有程序都是绕着数据库吗?

编程语言也一样,如果你一直用着面向对象语言,就很多人误以为语言都应该面向对象. 你一直用着关系数据库,就很容易以为所有数据库都是关系型的. 只有当你接触一个反差很大的,颠覆你之前的认知的, 才能让你站在一个更高的高度上去体会以前所学习的那些知识.

就我本人言,我这二十几年来工作中,学习中,用了十几种语言, 对于跟语言打很多年交道的我,也曾一天两天学一门新语言并且用得还不错,但是真正对我自己编程思想产生质的飞跃的语言,只有那些反差很大的很非主流的语言,比如从汇编突然学C++, 比如从Python突然跳到Common Lisp.

最后举一个例子, 一个java程序员,他也可能学了C++或者其他面向对象类的程序设计语言,直到学到很高级很牛了,他应该可以把面向对象中常见的设计模式融会贯通,做到手里无剑,心中有剑,遇到要写什么代码,根本不需要去思考什么模式,反正自然而然就代码里用了某个或某些模式的某种变形.这个时候对很多人来说这已经是 "最高境界" 了,但是到这个层次的人并不少,只要你有足够时间,很多人都能磨到这一步. 此时问你个问题: 设计模式是什么? 或者为什么世界上要有设计模式这种东西? 他是一个值得表扬的东西还是值得批评的东西? 你也许可以回答,也许觉得这种问题没什么意义.

现在如果我说:"设计模式是面向对象语言的自身缺陷的表现,是因为语言本身有缺陷,才需要设计模式,设计模式是让语言的使用者浪费自己宝贵的时间来为语言设计者设计中欠缺的地方进行修补, 但因为完美的语言不曾存在过,所以设计模式总是需要的.不过面向对象的语言越强大,对设计模式需要的越少" 很多人会对这个产生激烈的争议,就算不产生争议,你最终勉强接受了我的观点,也很会觉得这个太激烈了,至少会觉得这个观点不是你自己会悟出来的. 但是相同的这个观点,在Scheme程序员眼里却是很正常的. 所以如果你是C# 程序员,也许Scheme是一个合适你的第2语言.至少会在更高的层次上去想刚才我说的问题,而发现确实C#的每个版本升级都让语言更强大,同时让某个或者某些设计模式不再需要(比如静态类让单例模式存在的原始基础消失了,扩展方法让装饰模式存在的基础消失了...虽然你依然可以用这些模式,但那已经是为了模式而模式了,而且完全没有必要了)这就佐证了面向对象语言越强大,模式越不需要. 但对于一个只学C#,Java,C++,Javascript的人是很难悟出这一点的.

说多了,其实最终表达的意思是: 对于一个经验丰富的程序员,选择一门跟主流或你所熟悉的技术偏差极大的语言. 我推荐Lisp系的语言.

java程序员第二语言_程序员如何选择自己的第二语言相关推荐

  1. java斗图表情_程序员之间的斗图表情包, java真的输惨了!

    表情包成了人与人聊天中不可少的分量,陌生人聊天表情包丢出去妥妥的拉近关系变熟络啊(¬_¬) 而且可以用表情包化解尴尬.缓解气氛,可以没话找话.忙的时候也可以当做结束语,显得比较有礼貌! 对于沉默寡言. ...

  2. 多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

  3. java excel 插件开发工具_程序员常用的15 种开发者工具推荐

    程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...

  4. java数据库的量级_程序员学Python还是Java?分析了8张图后得出这个结论

    Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手.但是对于初学者来说,非常困惑,因为时间和精力有限,上手必须要先学一门,到底选那个好呢,今天3分钟带你透彻 ...

  5. python送程序员收入_程序员学Python后惊叹,这么丰厚的收入是Java给不了的!

    原标题:程序员学Python后惊叹,这么丰厚的收入是Java给不了的! 你都用 Python 来做什么?? 发现很多人都在学习 Python ,但是没有明确的说明可以做什么,主流的功能是什么? 想知道 ...

  6. java装逼的话_程序员装逼指南(语言篇)

    原标题:程序员装逼指南(语言篇) 语言:千万不要说自己是做Java或者.Net的,一下子就屌丝了.PHP现在也不行,Python稍微有点烂大街,但还是明显要强过前几个.剩下的可以说自己是做Ruby的, ...

  7. java程序祝福新年快乐_程序员的新年祝福 Happy New Year

    搜索热词 愿你新年快乐,许下新年的新愿望,努力实现! C:printf("Happy New Year"); C++ : cout< Objectivec: NSLog(@& ...

  8. java异步队对联_程序员的春节对联集锦

    上联:为系统而生,为框架而死,为debug奋斗一辈子! 下联:吃符号的亏,上大小写的当,最后死在需求上! 横批:杯具程序员. 上联:算法数据思路清晰 下联:编译链接一气呵成 横批:码到功成 上联:思前 ...

  9. java ee程序员招聘_程序员招聘网

    程序员笑话集 1.只有程序员才能看懂 手持两把锟斤拷,口中疾呼烫烫烫.脚踏千朵屯屯屯,笑看万物锘锘锘. 2.借钱 程序员A:哥们儿,最近手头紧,借点钱? 程序员B:成啊,要多少? A:1000行不? ...

最新文章

  1. Nginx自定义模块编写:根据post参数路由到不同服务器
  2. 从贫困的“问题少年”到计算机博士,最后成为商界泰斗,“创业之神”吉姆•克拉克是如何走向封神之路的?...
  3. 运筹学(最优化理论)学习笔记 | 分支定界法
  4. 唯品会Java核心项目VJTools开源了
  5. Django之缓存和信号
  6. 工厂模式一之简单工厂
  7. HDU - 6641 TDL(数学)
  8. Origin null is not allowed by Access-Control-Allow-Origin 解决方法
  9. 浅谈Spring测试框架+junit4单元测试原理
  10. HDU1869---(最短路+floyd)
  11. k8s核心技术-资源编排(yaml)的编写方式---K8S_Google工作笔记0019
  12. 如约而至!第二期 Flink 极客训练营上线啦
  13. 关于使用CAD文件预览的使用
  14. Android 分区布局详解
  15. 安卓默认下载工具_PanDownload安卓内测版 — 不限速下载工具
  16. ea连接远程oracle报错,ea数据库连接错误
  17. 【Javafx】关于属性绑定需要在动画设置之后
  18. [转]最速下降曲线:重力场中两点之间曲线更快
  19. Python实现常见的排序算法
  20. 对于养鱼爱病的新手,给你们一些个人经验,觉得对可以体会

热门文章

  1. QQ三国行脚第三方软件检测机制
  2. C#版 - ZJNUoj1259 - 幸运数字——中高级 - 题解
  3. 猜猜在用计算机计算一道除法算式时,沪教版三年级下学期《第4单元+计算器》2019年单元测试卷与答案...
  4. 单硬盘MBR分区双系统引导解决方法
  5. Unity 3D模型做半透明剪影效果
  6. IDEA翻译插件(Translation)不能用啦?
  7. PHI InstructionPHI Node
  8. apk 在个别手机上安装失败,提示软件包损坏
  9. win2019操作系统服务器很卡,windows server 2019 远程桌面登陆后出现卡死
  10. mysql 创建只读用户