因为小编最近在写两套教程,分别是Java语言基础教程和Go语言的基础教程,并且这 2 门语言,小编在实际的工作中也都有用过

而且 www.helloworld.net 社区的后台,就是用Go语言写的,而且正是小编负责的。况且小编在工作中是用Java的。

所以对这两门语言还算比较了解,所以本文对这 2 种语言聊聊小编自己的感受与看法

,也顺便聊聊小编这10年来,各种编程语言的一些感受

本文观点仅仅代表自己,仅供参考

不希望引起语言好与坏之争。

小编的C++开发经历

最初小编我刚毕业的时候,是做C/C++开发的 , 主要是研发 Windows 桌面软件。用过微软的 MFC , WTL 也用过 Qt 跨平台的框架

了解过 C++桌面软件开发的人都知道 ,C++写界面,是非常痛苦的,没有好用的界面库,MFC丑陋,复杂,WTL 只是界面框架

但是也很难实现漂亮的界面,后来也接触过 Qt 以及自绘的UI框架,总得来说,C++开发桌面客户端软件,真的没有前端爽,很痛苦。

导致你整天想着这个按钮怎么实现,那个编辑框文本怎么垂直居中,而不是把重心放在业务上。总之,吃力不讨好。

况且C++不光是画界面没有其它端(比如前端,安卓,IOS)容易,连常用的库也没有他们的全。很多还要造轮子。

甚至每个C++开发工程师都有自己一套字符串操作的工具类,而Java中,一个 String 类全部搞定了。

做了 3 年的C++开发,但是随着后来安卓手机的兴起,越来越多的软件开始有了安卓版本,安卓当时也越来越火了。

想到C++桌面软件开发有可能会落寞,所以,在同学(安卓开发)的帮助下,小编转行开始了 安卓开发的生涯。

小编的Android开发经历

因为大学是计算机专业,在大学里面学过C/C++ , 也学过 Java ,所以,转行做安卓,也不是太难。甚至有点惊讶的感觉。

记得有一件事记忆特别深,之前做C++开发的时候, 解析 json 串,忘了当时用的一个什么库了,只是记得解析的时候,

需要手动一个key一个 key 的去解析,获取值。

做安卓开发的时候,同学当时告诉我有一个 Gson 库,可以直接把 json 串转成对应的类,也可以直接把类转成 字符串

当时看到这感觉用Java写东西太爽了,库那么多,很多事都不用操心 ,C++转安卓后,写Java那叫一个爽

感觉从原始的刀耕火种时代,到了现代时代 。

转眼间,开发安卓也有了6,7年了,Java现在用的,不说是专家吧,至少也算是个高级水平吧,随着Java语言的深入

也慢慢觉得Java虽好,但是也有一些不太好的地方了。

比如Java语言太啰嗦,现代的语言,比如 dart,go, swift ,这些出现的较晚的,都是简单化了。

语法简单,写起来也舒服。Java 虽然在Java 10 也有了 var 关键字,定义变量不用再写又臭又长的一大堆了,但是现在用的最多的还是 Java8

还有Java的虚拟机,导致特别的消耗资源 。

比如 Java 的 Spring 那一整套解决方案,有人戏称是配置工程师,想要什么功能,只需要在配置一下就行了。(前提是你得记得住怎么配置或者知道怎么搜索)

可见 Java Spring 这套有多成熟 ,但是也带来了,黑箱操作,很多人只知道配置,不懂得其中的原理

编译出来的是什么?是一个可执行文件吗?是可以 jar 包吗? 监听的 ip地址和 端口 是在哪里写的?main 函数在哪?

很多初级的甚至做了5,6年 Java 的人(主要用 Spring的),并不清楚这里面的原理

当时Java的好处也是非常的多,Spring 那一套提供了一篮子解决方案,用来企业级开发,最稳定不过

国内的阿里,JD等公司,都是在大规模的用 Spring ,Spring几乎成了Java的代名词了

那小公司更不用说了,只要选择Java开发,99%的都会选择 Spring了

当然小编是做Android开发的,并不是做 Web 开发的。

后来接触 web开发,也是因为要做一个 开发者专属的技术社区,也就是本文刚开始提到的网站 www.helloworld.net

由此小编和后来的 Go语言有了交集

小编和Go语言的开发经历

说到Go语言,不得不提HelloWorld开发者社区(www.helloworld.net) , 当初是在2018年,有了做一个开发者专属的技术社区的想法

技术选型的时候,首先要决定的是,后台到底是用什么语言写?用什么框架写?

用 Java写,用 SpringBoot 那一套,事实上这一套对我很有吸引力。至少以后有什么问题,这一套都有对应的技术方案。

但是同时,也在网上搜一些Go语言相关的文章 ,因为之前业余的时间了解过Go语言,所以知道Go语言有一些很棒的特性。

比如:语法简洁,函数返回多值,天生支持并发,使用通道进行多个协程之间的同步和同信,丰富的网络编程接口

当然还有人诟病Go没有泛型,其实这一点吧,小编个人认为这是一个优点,因为小编在做C++的时候,泛型真的很难理解,泛型写出来的代码

也真的很晦涩难懂,尤其是 STL 中的源码。

到了Java中,泛型虽然比C++中的简单了点,但是还是太难理解,所以小编宁愿多写几个函数,也不想要泛型,因为这玩意太费脑子了。

说了费脑子,小编了解到 swift 语言,把 ++ 操作符给废除了。因为 ++ 可以用在前面++i ,也可以用在后面i++ ,而且意义还不一样

所以啊,一个编程语言,主要看背后设计的思想,swift就认为这种 前加加, 后加加, 没有必要,干嘛要费劲的去区分他们的区别呢

所以在 swift 中,只能使用 i = i + 1 这种方式(低版本的 swift 还是有 ++ 操作符的),我觉得这种解放心智的设计是好的。

因为前加加,后加加,区分得开,区分不开,反应不出啥,啥都反应不出来。

要跑题了,说到 www.helloworld.net 开发者社区, 最后各种资料学习Go, 也接触到了 gin , iris 等框架, 至少用 go 写web 程序

语言本身就支持的,就提供了一接口,net 包中提供了相当丰富的接口,用来写 web ,而且 gin ,iris 这些web框架,封装的也不是很深

这正是我所需要的:不想要那种封装的太深的东西,只靠配置,让我不知道里面的具体原理流程

但是又不想要那种最原始的,什么都不封装,我觉得 gin , iris 正是我需要的这种框架。

还有一个原因,就是,Go语言编译出来的,只有一个可执行文件 ,扔到服务器上就能跑起来,提供服务了

连 nginx 这种都不用安装 。就直接提供80服务了,这个相于对 Java, 服务器上几乎 什么都 不用安装

编译出来一个可执行文件,命令行执行,就OK了,这个对运维太友好了。不用安装 tomcat ,不用安装 JDK ,不用配置环境,不用安装nginx

这一点也是最吸引我的地方

还有就是,Go语言开发的效率相当的高,性能也很高,被称为 21 世纪的 C 语言

所以最终,还是选择了 Go ,作为 www.helloworld.net开发者社区的后台语言

Java和Go的比较

这种话题最容易引起语言的好坏之争,因为本身程序员手里都有一种用的非常熟练的工具,比如有的人用JAVA很多年了,用的很顺手了

比如有的人只接触过 Go ,就一直说Go的各种好。事实上这些是不公平的。至少你要2种语言都用过,都有过实际的项目经验。

才能更公正一点,事实上,语言是分好坏的。这个小编认为是存在的。

Java与Go ,现在的争论很多,Java 二十多年的历史了,各种框架,库,解决方案非常的成熟,而且性能不差

是现在很多企业的首选语言,但是也不否认Java存在的一些问题,而这些问题,在Go里面,可能就没有。

Go语言,Google大力推广的,内部也在使用的,它的出现,必然是因为解决一些问题而出的

但是出来的较晚,各种库,解决方案没有Java的丰富。

所以,现在这两种语言谁也代替不了谁。但是小编个人认为,未来在服务端编程方面,一定是Go的未来

现在的Java和Go语言之争,就像当年的 Java与PHP之争一样

历史总是惊人的相似,时间会回答一切。我们安静的见证就好。

至少在现在,会这两种语言之中的任何一种,都是不缺少工作的。

C++到 Java,再到 Go, 有什么感受

作为过来人,可能第一感觉就是,C++ 吃力不讨好,可能C++和Java,前端,安卓同样的工资待遇,但是干 C++的心更累

Java真的很不错,优等生,有时候找不出什么出挑的毛病。有一些不太好的地方,但都不是实质性问题

Go 我是真的很喜欢,写过Go的人,都会有这样一种感受吧,这语言写起来要爽一点,但是Go的第三方库,还是要再丰富一点才好

这10年的开发经历,从 c++, java, go ,也写过一段时间的前端(vue) ,中间创业过一年,写过一年的PHP

总得来说,语言只是工具,能正确使用工具,解决问题就好

但是解决同一种问题,有多种工具时,这里面就有好有坏了,有取有舍了,个中选择,懂的人自然懂

如果你是一个学生,如果你刚工作,如果你是做后端的,建议你一定要看看Go语言

如果你是一个工作多年的人了,相信哪种语言对你来说也不太重要了

10年程序员的编程语言感受与Go的结缘的更多相关文章

  1. 转:10年程序员谈.Net程序员的职业规划

    从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去各个公司应聘,到现在开始面试那些战战兢兢的小程序员,回想起这近十年来的经验,看着还是 ...

  2. 10年程序员谈.Net程序员的职业规划(图/文)

    原文地址:http://bbs.csdn.net/topics/390736769 从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去 ...

  3. 《程序员的呐喊》:一个熟悉多种语言的老程序员对编程语言、开发流程、google的战略等的思考,比较有趣。 五星推荐

    作者熟悉二三十种编程语言,写了20多年代码.本书是作者对编程语言.开发流程.google的战略等的思考.比较有趣. 前面部分是作者对编程语言的一些思考.作者鄙视C++, Java,面向对象.比较有趣的 ...

  4. 10年程序员谈.Net程序员的职业规划(图/文) (转载)

    转载地址:http://www.cnblogs.com/donghongtao/p/3611623.html

  5. 解决问题的能力 > 10倍程序员

    如果第二次看到我的文章,欢迎右侧扫码订阅我哟~ 

  6. 代码传奇 | 身价10亿的程序员 雷军当年也为他打工——WPS之父 求伯君

    他的前半生,值得我们每一个人深思. 在普通人眼里,他寂寂无名,只有年岁稍长的文化人,才听说过他传奇般的存在. 在IT人眼里,他是块活化石,中国第一的大旗除了他,没人敢抗! 他是求伯君,从一个浙江穷山村 ...

  7. Java 程序员应在2019年学习的10条面向对象(OOP)设计原则

    面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 O​​bserver 模式之类的设计模式,而对学习面向 ...

  8. [Mac A]为什么国外程序员爱用 Mac?

    from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜 ...

  9. Java 程序员最喜欢使用的日常工具

    多年来,Java 始终是企业应用程序的支柱.最近几年,Java 也是 Android 开发的首选编程语言.不过开发人员如何使用这种语言呢?一项新的研究阐明了主要使用 Java 的开发人员的工作类型,以 ...

随机推荐

  1. Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR

    一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...

  2. windows下安装python 且 安装pip

    1.安装python 第一步,windows下面的Python安装一般是通过软件安装包安装而不是命令行,所以我们首先要在Python的官方主页上面下载最新的Python安装包.  下载地址是:http ...

  3. Linux利用nc命令脚本批量检测服务器指定端口是否开放

    一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...

  4. WIN10 分区 C盘 至少250-300G E盘至少700G

    win10 就2个分区 C盘 至少250-300G  E盘至少700G

  5. Python检查 文件备份是否正常 云备份进程是否正常运行

    场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...

  6. 070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  7. shell基础之for循环语句

    For语句 格式:for name [ [ in [ word ... ] ] ; ] do list ; done for 变量名 in 取值列表; do 命令 done 或者 for 变量名 in ...

  8. 手机APP远程空气质量监测应用

    http://club.gizwits.com/thread-3876-1-1.html

  9. DDD中限界上下文与通用语言的作用

    什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即 ...

  10. 微星msi B450M+i5-8500+1060成功黑苹果

    经过几天的努力,终于成功装上黑苹果! N卡1060目前只能装10.13.6(17G65),10.14版本N卡是没有驱动的,即便装上后也是8M的显存 详细教程网上一大堆,我就不做一份了.推荐大家看一下黑 ...