门门通还是精通一门
我一直希望计算机只有一种程序设计语言,哪怕是高级程序语言只有一种也行,这样我们就不必为学这种或那种语言而烦恼了;或者我们学习语言不费事,有一种学一种也行,也没有学不全语言的烦恼了。但是,两者都只是一种希望,不知道未来能否实现。
程序员进入了成长期,必然和程序语言打交道,这个时候学语言一定是和具体项目、应用、客户相关。学习语言已经不是一种个人爱好的选择,而是一种工作的选择。就如同扫雪时不仅需要扫帚,而且需要铁锹一样。
有的程序员在单位只负责一个系统的维护和升级工作,这可能只要掌握一种语言就足够了。有的程序员所在的软件公司会接来各种各样的项目,而各个项目应客户要求采用不同的语言开发,有的项目需要用C#开发,有的项目需要用Java开发,有的项目需要用PHP开发。当公司人手不够时,程序员必须学习多种语言才能满足工作的需要。因此,程序员因工作需要学习语言的数量是不一样的。
程序员不但因为工作需要要学习语言,还会为未来职业的发展而考虑学习语言。未来职业发展需要何种语言,需要掌握多少语言,这一切都是一个未知数。所以,大家潜意识里有一种多多益善的想法,恨不得有一门学一门,一个都不漏过。因此,程序员心理负担极为沉重,无论是在工作时,还是休息时,每每都在想“门门通还是精通一门”这个话题。
当然有一些程序员还没有改变新手时期对语言的认识,还是以个人的兴趣去选择语言和学习语言。就这一点而言,站在实用主义角度,我自己反对因个人兴趣而学习语言,除非个人兴趣和工作需要以及未来职业规划相一致,这种个人兴趣才是值得提倡的。反之,为学语言而学语言且该语言与现有工作以及未来职业无关,仅仅是因为这种语言自己没有学过,或语言很流行就去学,那是没有必要的。因为中国不缺那种不实用的语言,只缺实用的软件。
从我自己的成长经历来看,一个程序员一般至少要精通二门语言。这两门语言一个应该是面向过程的语言,一个是面向对象的语言。至于了解和掌握多少其他的语言,那就要根据工作需要和个人职业规划来定了。一般3~5门也就足够了。这也就是说,一个程序员一般要掌握五六种程序设计语言,其中两门必须精通,其他3~4门只要求一般掌握,可以利用它们进行编程就行了。
我想对成长期的程序员在语言选择方面、学习方面、实用方面谈一谈自己的看法,以供参考。
1.精通一门到什么程度
虽然很多程序员也知道要精通一门语言,但是他们并不清楚精通一门语言到底有什么标志。有的人会按照程序员掌握语言的时间来确认对语言的掌握程度。例如,如果一个人使用某种语言编了3年的程序,他自己或其他人就会认为他对这门语言很精通了。有的人会根据自己对这门语言的驾驭程度来说明自己对这种语言的掌握程度。例如,有的人认为自己编起程序来很顺手,不用查手册,说写就写,很熟练,几乎什么程序都能编出来,以此认为自己对这种语言很精通了。
编程时间的长短和编程的熟练程度仅仅是精通语言表现的一个方面。更重要的是程序员要掌握这门语言的适用范围、整体架构、语法规则、功能分类等基础理论方面的知识,并能利用这方面的知识,以最科学的方法解决现实中各种项目的各个问题。
通俗地说,如果你能当这个语言的老师(反映出对语言的理论和语言架构的掌握程度),又能熟练地用这门语言解决各种问题(反映出对语言的使用能力),那你就可以说你精通这门语言了。
如果有人让你介绍一下某种语言,你不会讲、讲不全、讲不透,说明你对这种语言的理论方面和架构方面的知识掌握得远远不够。有人问你一些这种语言的一些常见问题、一些常用的技巧、一些常见的错误,而你都无法解决和解释,说明你对这种语言的使用能力还不够充分,掌握还很肤浅。这些都说明你没有精通这门语言。
2.最好是精通两门
我感觉精通一门语言还是不够的。程序设计语言一般分两大类,一类是面向过程的语言,一类是面向对象的语言。如果要很扎实地在程序员这个职业中耕耘,最好精通两门语言,一门是面向过程的,另一门是面向对象的。如果怕时间和精力不够,我建议一定要精通一门面向对象的语言,因为在面向对象的语言中也包含了面向过程的编程内容。
3.其他3~4门要怎么才算掌握
现实中我们常常会找一本书去学习一种语言,也会用这种语言编写几段小程序,那这样究竟算不算对这种语言已经掌握了呢?怎样才算已经掌握了呢?我认为只要能用这种语言开发一个项目,开发中没有太多问题,那就可以算掌握了。当然,开发的时候,断断续续,走一步、查一步、问一步,问题如同连环绊脚石,这样则不能算掌握了。
4.不要太急于赶潮流
一些程序员往往对技术潮流关注过度,明明自己工作上用的是C语言,自己做的是后台维护的工作,但是,听说现在流行C#、Java,就老想有时间把C#、Java学学,不学可能就落伍了。
说实在话,如果不急于应用,最好等这门语言成熟以后,再决定学习也不迟。从各种语言的发展过程来看,有些语言的生命周期也只有短短几年时间而已。
5.语言是互通的
其实各种语言在本质上是相同的,它们有太多的共性,虽然有些个性,但是在实际中个性功能很少用到,用到时现学也不迟。因此,我们可以在精通一门语言的基础上,通过这门语言的结构去学习另外一门语言的结构,对这门的示例采用另外一门语言来编写,这样有对照、有比较地学进步应该会很快的。找出相同点,这是学习多种语言的技巧。
6.语言的无知与有知
现实中经常会有人问你,你知道什么什么语言吗?如果你不知道,千万不要觉得自己无知而羞愧。因为人的价值不在于你知不知道,而在于你知道后做了些什么。常言道“光说不练假把式”,为知道而知道,只会浪费实用的工作时间,影响自己实战能力的提高。在很多情况下,有知和无知可能会发生逆转。有意的无知?扔幸獾挠兄.硐值酶?哟厦鳌?
当然,我们可以关注一些语言方面发展的新闻,就如同我们每天关注国内新闻、国际新闻一样。能给自己留下印象的那就成功了,不能留下印象的那就算没看,传播新闻那可是媒体的事,我们权当休闲就行了。
特别需要提醒的是,对程序员来说,实用主义是比较好的,把现有的实用的语言掌握好,研究深入一些比什么都重要。人们可能都会有“这山望着那山高”的想法,但是只有站在这山上时,才能望到那山。
读后:
精通两门语言:C/C++、Java;
掌握一些:shell脚本类(包括shell命令行、awk、sed、grep等专项)、sql语言类(包括sql语句、plsql类、嵌入式sql类)、xml类;

门门通还是精通一门(程序员)相关推荐

  1. spring data jpa从入门到精通_程序员笔记:Spring Data JPA入门

    什么是JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是为了 ...

  2. 一个开发10年程序员论:零基础学习Python最正确的步骤

    往期好文推荐 学习Python不需要程基础? 很多人都在问Python学习步骤应该如何安排?多长时间可以达到精通呢? 当然了,如果你想要爬虫或者web开发的项目视频源码也可以,都是小编在网上找到的一些 ...

  3. 程序员怎样学习python_一个开发十年的程序员论:学习Python最正确的步骤(0基础必备)...

    很多人都在问Python学习步骤应该如何安排?多长时间可以达到精通呢? Python学习步骤应该怎样安排: 首先,学习Python编程技术,自学或者参加培训学习都适用,每个人都有自己的学习方式和方法. ...

  4. 32个程序员萌翻全场的瞬间!

    来源:大数据DT 本文多图,建议阅读8分钟 本文为你介绍程序员萌翻全场的瞬间! 有些职业的人拥有天然萌的属性,比如--程序员.为啥?因为-- "程序员"即计算机程序编制员(真正的名 ...

  5. 禁毒学、油画、乌尔都语……字节跳动程序员的专业有多奇特丨技术同学大数据报告...

    在字节跳动,有超过两万名技术人才,他们分布在 11 个国家的 32 座城市里. 从 18 岁的实习生到 60 岁的专家,这群字节跳动技术人有着不同的经历和故事. 有人写 Go,有人写 Python,不 ...

  6. 程序员面试之MySQL数据库表的设计

    如果要选择一门程序员必备的技能,那答案无疑是数据库,而MySQL是首选.很多企业在面试过程中会提问MySQL数据库表设计要注意什么,接下来小千就给大家讲解一下. MySQL相较于MSSQL SERVE ...

  7. 32个程序员泪(méng)流(fān)满(quán)面(chǎng)的瞬间

    导读:问:萌字怎么写?答:十月十日. 所以,Today is Monday 萌day,你卖萌了吗? 有些职业的人拥有天然萌的属性,比如--程序员.为啥?因为-- "程序员"即计算机 ...

  8. 我打算写一个《程序员的成长课》

    已经2019年了,新年新气象.在新的一年里,我想做件有意义的事儿.具体是什么事呢?这里先留个悬念. 我是一个爱思考的人,我也工作好几年了,这段时间内心突然有个想法:程序员的个人成长有规律可循吗? 没有 ...

  9. 优质的国外程序员网站

    在学习计算机编程相关技术时,必须知道一些有用的网站,以便随时掌握信息,了解技术前沿和学习新技术.下面是整理的一些国外干货网站列表.由于大多在墙外,部分网站可能需要梯子,请自备.下面开始技术之旅吧. 索 ...

  10. 史上最全!每个程序员必须知道的学习网站!

    在学习计算机科学(CS)时,必须知道一些有用的网站,以便随时掌握信息,了解技术前沿和学习新技术.下面是你应该访问的一些网站的不详尽的列表,十分建议收藏备用! 索引 当你遇到困境时 新闻 初学者的编码实 ...

最新文章

  1. pandas筛选dataframe列名称中包含特定字符串的数据列(select columns contains specifiec substring in dataframe)
  2. HSI颜色空间及其应用
  3. 分类评分函数 score function
  4. mysql版本 hibernate_Mysql 不同版本 说明
  5. web端兼容性测试相关知识
  6. STM8单片机 ADC模拟看门狗中文资料错误
  7. NodeJS + Sequelize + Mysql + Vue + Bootstrap
  8. 通过两点求圆心的公式
  9. 西门子博途v14 SP1 S7-1200之间的以太网双边通讯(两个S7-1200 在一个项目中)
  10. 电子邮件(E-mail)和电子邮件协议
  11. caxa发生文件读写异常_文件和异常
  12. 磁盘分区助手一键迁移操作系统——易我分区大师
  13. 刘强东学习亚马逊:控制供应链 技术是最大障碍
  14. iOS应用崩溃日志揭秘
  15. 栈(简单介绍及其应用)
  16. 神经网络与深度学习-课后习题
  17. python elasticsearch 提示 ‘update‘ API and will be removed
  18. 上海亚商投顾:A股三大指数涨跌不一 ChatGPT、机器人概念齐掀涨停潮
  19. three.js笔记2--两点画线
  20. 工作进度所占总进度的比例

热门文章

  1. Spring boot启动报错ERROR 5208 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter
  2. iphone 升级后闪退
  3. 已知ip地址如何算默认网关
  4. Android控件详解之网格控件
  5. 写给三维建模入门小白的建议
  6. 装饰者模式 增加功能;动态代理减少功能 只要完成自己部分功能 (繁杂部分交给他人处理)...
  7. 老九学堂 学习C++ 第九天
  8. html meta标签的常用写法
  9. python中offset的意思_python覆盖从offset1到offset2的字节
  10. BF,KMP算法(万字图文详解)