因为边肖最近写了两套教程,分别是Java语言的基础教程和Go语言的基础教程,而这两种语言在实际工作中也被边肖使用过。
而www.helloworld.net社区的背景是用Go语言写的,这是边肖的责任。此外,边肖在工作中使用Java。
所以我对这两种语言相当了解,所以这篇文章谈谈边肖自己对这两种语言的感受和看法。
顺便说一下,我也谈谈过去10年边肖各种编程语言的一些感受。
本文观点仅代表自身,仅供参考。
我不想引起语言好坏的争论。
00-1010刚毕业的时候在做C/C开发,主要是开发Windows桌面软件。使用了微软的MFC,WTL也使用了Qt跨平台框架。
了解过C桌面软件开发的人都知道,用C写接口很痛苦,没有好用的接口库,MFC又丑又复杂,WTL只是一个接口框架。
然而,很难实现一个漂亮的界面。后来我也接触到了Qt和自绘UI框架。总的来说,用C开发桌面客户端软件真的没有前端那么酷,很痛苦。
它会让你整天思考如何实现这个按钮,以及如何垂直居中编辑框的文本,而不是专注于业务。简而言之,这是一份吃力不讨好的工作。
除此之外,C不仅不像其他终端(如前端、安卓、IOS)那样容易画界面,而且常用库也没有他们的完备。许多人需要制造轮子。
甚至每个C开发工程师都有自己的一套用于string操作的工具类,但是在Java中,一个String类就完成了。
经过三年的C开发,但是随着安卓手机的兴起,越来越多的软件开始有了安卓版本,安卓也在那个时候越来越流行。
想到C桌面软件的开发可能会寂寞,在同学的帮助下(安卓开发),边肖转行到安卓开发事业。
小编的C++开发经历
因为大学是计算机专业,我在大学里学过C/C和Java,所以转安卓也不是太难。甚至有点惊讶。我记得一件事,我记得非常深刻。之前做C开发的时候,分析json字符串,忘记了当时用的是什么库。我只记得我分析的时候。
需要手动逐个键解析来获取该值。
我在开发Android的时候,同学告诉我有一个Gson库,可以直接把json字符串转换成对应的类,或者把类转换成字符串。
当时用Java写感觉好爽。图书馆太多了,你不必担心很多事情。C转安卓后,用Java写很酷。
感觉从原始的刀耕火种时代到现代。
转眼间,安卓已经发展了6、7年。Java现在正在使用,别说专家了,至少是高级水平。随着Java语言的发展,
我也觉得Java不错,但是也有一些缺点。
比如Java语言太啰嗦,现代出现较晚的dart、go、swift等语言都是简化的。
语法简单,写起来舒服。虽然Java在Java 10中也有关键字var,不需要写很多臭烘烘的长定义变量,但是现在使用最多的还是Java8。
还有Java虚拟机,导致特殊的资源消耗。
比如Spring在Java中的整个解决方案,有人戏称它为配置工程师,你想要什么功能,你只需要配置就可以了。(前提是你要记得怎么配置或者知道怎么搜索)
可见Java Spring有多成熟,但它也带来了,黑盒操作,很多人只知道配置,却不知道原理。
什么是编译?是可执行文件吗?它是一个罐子包装吗?监视器的ip地址和端口写在哪里?主要功能在哪里?
很多连做了5、6年Java(主要用Spring)的初学者都不知道原理。
当时,Java有很多优点。Spring为企业级开发提供了一篮子解决方案,这是最稳定的。
阿里、京东等国内公司都在大规模使用Spring,Spring几乎成了Java的代名词。
小公司就更不用说了,只要选择Java开发,99%都会选择Spring。
当然,边肖做的是安卓开发,不是Web开发。
后来,我接触了网络开发,因为我想成为一个开发者专属的技术社区,也就是本文开头www.helloworld.net提到的网站。
因此,边肖和后来的围棋语言有了交集。
小编的Android开发经历
说到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, 有什么感受
作为wydbks,可能第一感觉就是,C++ 吃力不讨好,可能C++和Java,前端,安卓同样的工资待遇,但是干 C++的心更累
Java真的很不错,优等生,有时候找不出什么出挑的毛病。有一些不太好的地方,但都不是实质性问题
Go 我是真的很喜欢,写过Go的人,都会有这样一种感受吧,这语言写起来要爽一点,但是Go的第三方库,还是要再丰富一点才好
这10年的开发经历,从 c++, java, go ,也写过一段时间的前端(vue) ,中间创业过一年,写过一年的PHP
总得来说,语言只是工具,能正确使用工具,解决问题就好
但是解决同一种问题,有多种工具时,这里面就有好有坏了,有取有舍了,个中选择,懂的人自然懂
如果你是一个学生,如果你刚工作,如果你是做后端的,建议你一定要看看Go语言
如果你是一个工作多年的人了,相信哪种语言对你来说也不太重要了