10年程序员的编程语言感受与Go的结缘
因为小编最近在写两套教程,分别是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的结缘的更多相关文章
- 转:10年程序员谈.Net程序员的职业规划
从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去各个公司应聘,到现在开始面试那些战战兢兢的小程序员,回想起这近十年来的经验,看着还是 ...
- 10年程序员谈.Net程序员的职业规划(图/文)
原文地址:http://bbs.csdn.net/topics/390736769 从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去 ...
- 《程序员的呐喊》:一个熟悉多种语言的老程序员对编程语言、开发流程、google的战略等的思考,比较有趣。 五星推荐
作者熟悉二三十种编程语言,写了20多年代码.本书是作者对编程语言.开发流程.google的战略等的思考.比较有趣. 前面部分是作者对编程语言的一些思考.作者鄙视C++, Java,面向对象.比较有趣的 ...
- 10年程序员谈.Net程序员的职业规划(图/文) (转载)
转载地址:http://www.cnblogs.com/donghongtao/p/3611623.html
- 解决问题的能力 > 10倍程序员
如果第二次看到我的文章,欢迎右侧扫码订阅我哟~
- 代码传奇 | 身价10亿的程序员 雷军当年也为他打工——WPS之父 求伯君
他的前半生,值得我们每一个人深思. 在普通人眼里,他寂寂无名,只有年岁稍长的文化人,才听说过他传奇般的存在. 在IT人眼里,他是块活化石,中国第一的大旗除了他,没人敢抗! 他是求伯君,从一个浙江穷山村 ...
- Java 程序员应在2019年学习的10条面向对象(OOP)设计原则
面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 Observer 模式之类的设计模式,而对学习面向 ...
- [Mac A]为什么国外程序员爱用 Mac?
from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜 ...
- Java 程序员最喜欢使用的日常工具
多年来,Java 始终是企业应用程序的支柱.最近几年,Java 也是 Android 开发的首选编程语言.不过开发人员如何使用这种语言呢?一项新的研究阐明了主要使用 Java 的开发人员的工作类型,以 ...
随机推荐
- C++PRIMER第五版练习题答案第一章
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
- [bug] 安装MySQL8.0.15 失败,提示This application requires Visual Studio 2015 x64 Redistributable
参考 https://blog.csdn.net/weixin_44092289/article/details/88045666
- 理解RESTful架构——Restful API设计指南
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- 戴尔服务器如何配置远程管理卡(IDRAC9)适用于戴尔R740服务器
戴尔服务器如何配置远程管理卡(IDRAC9)适用于戴尔R740服务器 转: DELL IDRAC9 该配置方法适合于所有戴尔14G服务器,包括全系列戴尔服务器,标准版适用于R440/R540/R640 ...
- 更新索引库: $locate string 寻找包含有string的路径: $updatedb
更新索引库: $locate string 寻找包含有string的路径: $updatedb 与find不同,locate并不是实时查找.你需要更新数据库,以获得最新的文件索引信息.
- ansible-一键完成LNMP架构_期中架构
ansible-一键完成LNMP架构 ansible剧本托管地址 https://github.com/Gshelldong/ansible.git 网站架构图 ansible一键完成lnmp架构 a ...
- python 从2个文件中提取不相同的内容并输出到第三个文件中
#-*- coding: UTF-8 -*- import re import sys import os str1=[] str2=[] str_dump=[] fa=open("A. ...
- unity 使用OnDrag实现物体旋转
通过监听UGUI的OnDrag事件 实现对3D物体的旋转 实现IDragHandler接口 void IDragHandler.OnDrag(PointerEventData eventData) { ...
- .NET平台系列17 .NET5中的ARM64性能
系列目录 [已更新最新开发文章,点击查看详细] .NET团队使.NET 5大大提高了常规性能和ARM64性能.在<.NET5中的性能改进>博客中可以查看总体改进情况.在这篇文章中, ...
- MindSpore:自动微分
MindSpore:自动微分 作为一款「全场景 AI 框架」,MindSpore 是人工智能解决方案的重要组成部分,与 TensorFlow.PyTorch.PaddlePaddle 等流行深度学习框 ...