C#、C++、Java、Python选择哪个好?

2023-11-18

一个好的程序员不能把自己绑定在一种语言上,不能把自己就定义为JAVA程序员,C#程序员,等等。语言没有高下之分,只有适用的场景。好的程序员,应该有很快学会一种新的语言,并解决实际问题的能力。在我二十年的程序生涯中,有过不止一次,因为项目,一两天学一种语言的基本语法,然后边Google函数和库用法,边完成项目,然后项目完成后就扔一边的经历。

但是学习的顺序却是有迹可循的,我们可以根据不同的重要程度来选择自己想要学习的语言,接下来我们就来谈谈C#、C++、Java、Python四种语言学习的优先程度。

作为一个20年的老程序员来回答一下。

1998毕业,现在自己做一家IT公司,依然喜欢写代码。

工作这么多年,正式项目用过的语言有:Pascal/Delphi,dBase/FoxBase,FoxPro,VB,VBScript,JavaScript,COBOL,C/C++,Lua,Java,C#,各种数据库的SQL。

最早学的是Pascal,大学里面学数据结构用的,毕业以后用delphi写了一个小项目,然后再也没有用过。

dBase/FoxBase也是学校里面学数据库的时候教的,然后毕业以后用的是FoxPro,也是做了一个小项目,后面基本就没用了。

VB/VBScript作为主力语言,从1998年用到2002年,对,那时候做ASP。也用VB写过还算有规模的EXE的项目。至今书橱里面那本《VB5金典》依然保佑一席之地。VB做快速开发真的很好用。然而就压根没看过。那已经不是VB了。

因为Web开发基本上没有断过,JavaScript一直陪我到现在。

COBOL是原来在对日外包公司工作的时候,接了日本一个野村证券的项目,居然是COBOL,然后,作为新技术研发部的负责人,当仁不让上了。边学边做项目,做完就扔了。

C是从开始编程就学的,断断续续用一点点,2003年做银行项目的时候,用IBM小型机,Tuxedo中间件,然后只能用C/C++语言编程(那个时候银行还不怎么接受Java)。然后自己开始创业,做游戏,用OpenGL做了一个游戏引擎,跨平台的那种,一次编写,Windows、Android、iOS都能跑。C++写的。中间尝试了一下Lua,写了两个小游戏,觉得对程序的掌控能力还是比C差远了,就放弃了。

最后就是Java和C#这对双子星,是用的时间最长,做过项目最多的。C#是从2001年开始,beta版本开始学的。记得第一个项目是2002年6、7月的样子吧,那时候公司接了一个比较大的Web项目,本来是准备用ASP做的,结果那时候我正好在学C#,然后看了一下说是10月份会发布正式版(时间大概是那样吧,年数长了,记忆有点模糊),然后仗着自己是项目负责人,外加老板不懂技术,就擅自决定用C#来做。项目做完大概是10月份,在项目上线的前几天,微软发了正式版ASP.Net1.0,项目有惊无险的上线了。现在想想有点作死的感觉。如果微软把.Net正式版的发布时间往后推一个月,很难想象老板会拿我怎么样。

Java差不多跟C#同时学的,然后一直做啊做,从EJB做到SSH,再到Android。那时候年轻,学习的精力旺盛,然后觉得C#和Java似乎差的不是太多。

PHP看过,没用过。Python看过,没用过。还有Ruby,看过,没用过。我说看过的意思大概就是写过Hello World,但是没有拿来做过项目。

我是真的喜欢写程序,所以有什么新奇的东西,都喜欢拿来跑一跑。

然后说说对编程的看法。

首先,我认为,语言没有高下之分,只有应用场景之分。作为一个技术决策者,拿到任何一个项目,首先第一个考虑的,不是怎么做,而是用什么做。如果你拿到的是一个Web项目,我认为,在很多情况下,JSP、PHP、甚至Node.js基本上都是等价的,应该都能够很好的完成项目的开发,选择什么技术开发,看自己所拥有的资源禀赋和具体情况。如果手下一帮弟兄都是搞Java的,当然JSP啊,如果手下小弟都是做C#,当然啊。当然,项目有特殊要求的除外,比如,如果甲方是银行,那估计就没法用了,如果是有客户端的项目,当然C#+WinForm啊,如果是做安卓,当然Java啊。

其次,作为一个好的程序员,应该至少会三种以上语言,这样你能够充分接受不同语言的风格,更关键的是你会去关注不同技术社区的讨论,开阔眼界,对编程的本质会有更深刻的体会,然后你会觉得,看任何语言都是差不多的。我经常对公司的技术人员讲,要用Java的编程思想来写C#的代码。这是不同技术社区的风格体现出来的。在Java的社区,你能看到更多的对模式、框架的讨论,而微软虽然自己做的东西很讲究模式和框架,但似乎更喜欢做好一堆全家桶给你,让你去做快速开发。

第三,对各种语言的感受,写起来最爽最有成就感的当然是C,那种一切尽在掌握的感觉是很奇妙的。不过我现在公司没有C/C++程序员了,因为公司不做游戏了,我也有起码5年没碰C了。我最喜欢的还是C#,我很崇拜安德鲁,C#的语法和机制真的设计的很精妙:泛型、delegate/event、Attribute、Lamda表达式、函数式编程,总觉得这个语言的设计给人一种特别的精致美感,能满足我对一门好的语言的所有的想象。自从.Net Core以后,跨平台也不是问题了。相对Java来说,我更喜欢C#。当然,我是不会排斥Java的,只要做Java能赚钱。

第四,我觉得数据结构真的非常重要,如果你想成为高手的话。在学校里面,一定要把这门课反反复复的学习。当然,如果你只想做做Web开发,写写网页的话,当我没说。

最后,对计算机专业的学生来说,我认为,在大学就是要打好基础。语言的东西真的不难,所有语言的编程思想都是想通的,语法其实也都大同小异,无外乎顺序结构、循环结构、分支结构。不用太焦虑应用型的开发,这些东西其实学起来是很快的。重要的是基础。C语言是必学的,学好C,让你对计算机的原理(数据结构、寄存器、内存、硬盘读写等等)有更深刻的认识。然后,为了工作,学学Java,学学C#。数据结构、编译原理这样的课程,当你工作年限变长,开始写架构、开始做性能优化的时候,你会觉得特别有用。当然,最开始的简单开发任务基本上用不着。不过,不想做高手的程序员,当然不是好程序员,是吧?

还有,其实我是非常建议,作为程序员,C#是必学的,不是因为我个人喜欢C#,是因为,实际上,按照我的习惯,在做项目的过程中,我经常会写一些小工具,而这些小工具,很多时候当然都是写成exe啦,所以,一般我都会选择用C#来写。

以上就是一名工作了20年的老程序员的感言,大家可以根据他的回答,来排序自己的时间学习。

文章来源:网络 版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#、C++、Java、Python选择哪个好? 的相关文章

随机推荐

  • screen 使用

    screen 是一款能够实现多窗口远程控制的开源服务程序 基本使用 安装screen yum install screen 创建blackup会话 scrren S blackup 查看已有会话列表 screen ls 恢复会话 scree
  • RabbitMQ消息确认机制

    消息确认 基本流程 说明 生产者发送消息到RabbitMQ Server后 RabbitMQ Server需要对生产者进行消息Confirm确认 消费者消费消息后需要对 RabbitMQ Server进行消息ACK确认 消息确认模式 Rab
  • iterable java_如何在Java中将Iterable转换为Collection?

    iterable java There are various ways to convert Iterable to Collection in Java programming language 有多种方法可以用Java编程语言将Ite
  • BUUCTF--[第二章 web进阶]死亡ping命令

    BUUCTF 第二章 web进阶 死亡ping命令 本文只是对官方wp进行了一点修改 因为在测试过程中发现8080端口弹不回flag 在本地测试也是一样的结果 但是把端口修改成8089 其他端口应该也可以 并且nc监听方式为 nc lvp
  • C++ 之 常量成员函数

    常量成员函数 const member function 可读取类中的数据成员 但不能修改 1 声明 1 1 const 关键字 参数列表后 加 const 关键字 声明为常量成员函数 表明其不被允许修改类的数据成员 下面的类 以年 月 日
  • 【技术经验分享】计算机毕业设计Python+SparkML知识图谱新闻推荐系统 新闻数据分析 新闻爬虫 新闻大数据 新闻可视化 大数据毕业设计 大数据毕设 机器学习 深度学习

    开发技术 Python爬虫 springboot vue js SparkML SparkALS 机器学习 深度学习 协同过滤算法 说明 后端使用SpringBoot Mybatis Plus框架 前端使用Vue js Element Pl
  • Element UI 框架中Loading 区域加载的使用方法

    给自己打个小广告 有开发APP 小程序 网站 后台系统需求 或者 想学习前端的可以私信我哈 Loading 加载用于加载数据时显示动效 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img MgPFZSRk 16602
  • 怎样提升Java水平

    怎样提升Java水平 想更快更好地提高你的Java编程水平 除了在日常工作中积累经验外 你还可以在空闲时间通过学习来提高你的技术技能 首先Java 理论基础不会太差 一个Java基础理论知识都很差的Java程序员 那么你期望他的Java代码
  • docker安装rocketmq4.6.1(精简版)

    一 创建文件 mkdir p usr local rocketmq server logs usr local rocketmq server store usr local rocketmq broker logs usr local r
  • 黑白色老照片一键上色在线工具,让老照片漂亮起来

    每个人家中多少都有一些老旧的黑白照 或是当初拍照时只有拍黑白 跟彩色照片比虽然别有一番风味 但有时候还是会想看如果是彩色不知道会变怎样 会不会更好看 而这款 线上工具就能帮你实现 只要把你的黑白照上传 它就会透过 AI 技术自动帮你上色 我
  • idea中相同包不聚合

    idea中创建子包不折叠 项目场景 问题描述 原因分析 解决方案 项目场景 提示 idea使用中出现的问题 突然发现相同包不能聚合了 问题描述 提示 相同包不能聚合 突然出现很多路径相同的很多包下的文件 原因分析 提示 不小心将设置动了 解
  • 95-38-055-Buffer-UnpooledDirectByteBuf

    文章目录 1 总述 1 1 局部图 1 2 概述 1 总述 1 1 局部图 1 2 概述 Netty的UnpooledDirectByteBuf在NIO的DirectByteBuf上采用组合的方式进行了封装 屏蔽了对程序员不友好的地方 并使
  • 如何使用js创建一个构造函数及重写toString的方法

    在js中使用function可以创建一个函数 也可用创建一个构造函数 这个构造函数可用于实例化对象 代码如下
  • 解析Java-throw抛出异常详细过程

    首先 我们知道Java有3种抛出异常的形式 throw 执行的时候一定抛出某种异常对象 throws 出现异常的可能性 不一定会发生 系统自动抛出异常 throw用在一个语句抛出异常的时候 throw an instance of exce
  • MySQL最常用的二种存储引擎MyISAM和InnoDB的介绍

    1 MyISAM 默认表类型 它是基于传统的ISAM类型 ISAM是Indexed Sequential Access Method 有索引的顺序访问方法 的缩写 它是存储记录和文件的标准方法 不是事务安全的 而且不支持外键 如果执行大量的
  • 轻松拿结果-第二部分 同力 -第五章 用制度保障业绩

    第五章 用制度保障业绩 制度的保障 体现的是管理者的监管能力 也是守护胜利果实的有力保障 只有铁的纪律 才能拿到铁的结果 商场如战场 在公司您们就是带兵打仗的将军 有一个销售员踢球时伤到了腿 在他休息的两个月里 业绩却没有落下一点 都是整个
  • html5 悬停边框,Html,css:在悬停时更改行的边框颜色(Html,css: Change a row's border colow on hover)...

    Html css 在悬停时更改行的边框颜色 Html css Change a row s border colow on hover 我正在使用DataTables 我试图在行悬停时将行的顶部和底部边框更改为红色 以下没有改变颜色 tab
  • 消息的顺序消费

    首先 需要保证顺序的消息要发送到同一个messagequeue中 其次 一个messagequeue只能被一个消费者消费 这点是由消息队列的分配机制来保证的 最后 一个消费者内部对一个mq的消费要保证是有序的 我们要做到生产者 messag
  • 强化学习笔记(5)-回合策略梯度算法

    以下为阅读 强化学习 原理与python实现 这本书第七章的学习笔记 在之前学习到的强度学习方法中 都是通过学习最优价值函数来获得最优策略 现在换一个角度来思考 我们可以通过用含参函数来近似最优策略 并在迭代中更新参数值 这就是策略梯度算法
  • C#、C++、Java、Python选择哪个好?

    一个好的程序员不能把自己绑定在一种语言上 不能把自己就定义为JAVA程序员 C 程序员 等等 语言没有高下之分 只有适用的场景 好的程序员 应该有很快学会一种新的语言 并解决实际问题的能力 在我二十年的程序生涯中 有过不止一次 因为项目 一