琐碎的想法(三)对Java的批评的看法
编写本文的目的
在大环境下,Java是一个饱受争议的语言,一方面在工程上它的流行程度非常高;另一方面,越是资深的软件工程师就越容易对这个语言感到不满。
在这种情况下,博主希望每一个Java程序员能够耐下心来好好看看对于Java的批评,独立思考。
P.S.如果你认为它优秀, 一门优秀的编程语言应该是经得起时间的检验,也经得起批评的。
PP.S.如果你认为它不足,需要合理地黑,而不是人云亦云。
对Java的经典批评
译文《Java语言学校的危险性(译文) - 阮一峰的网络日志》
本文批评了一种现象,美国一些大学将Java作为入门的编程语言,让很多连指针和递归都不理解且不懂编程的毕业生进入了编程的市场(Java比较简单,无法区分一个软件工程师的优劣)。《Why Java Sucks and C# Rocks (1):比较的意义与目的》
本系列文章的意义在于通过和C#编程语言的对比,劝导Java程序员转向Scala等其他JVM平台上的语言(尤其指出了某些特性不仅仅是缩减代码长度,更是它们从设计到使用上更符合逻辑,直觉)。
个人的看法
从理性上,博主非常认同上述文章的观点,但是主观情感上,Java是自身第一个深入学习的编程语言,主观上一定会有所倾向。
一开始,想从下面几个角度辩解,
- Java有些蹩脚的地方是在于对之前版本的兼容,这主要是取舍问题。
- Java的亮点在于JVM,而很多文章基本不谈。
- Java的设计问题在新版本后正一点点被弥补,可以期待Java11今后的发展。
- 在工程上,的确Java的生态会比其他的要好一些。
...
但是在博主读了下面这篇文章《122. 十年学会编程》后,释然了。
要成为一个真正的编程人员,只会一门编程语言是绝对不够的。
是一个Java开发者,并不意味着你放弃了其他编程语言。这本来就是一个非零和博弈。
为什么你不去学习一下新的编程语言呢?
如果你觉得有一些道理,那么从现在开始吧!
琐碎的想法(三)对Java的批评的看法的更多相关文章
- AVL树(三)之 Java的实现
概要 前面分别介绍了AVL树"C语言版本"和"C++版本",本章介绍AVL树的Java实现版本,它的算法与C语言和C++版本一样.内容包括:1. AVL树的介绍 ...
- 二叉查找树(三)之 Java的实现
概要 在前面分别介绍了"二叉查找树的相关理论知识,然后给出了二叉查找树的C和C++实现版本".这一章写一写二叉查找树的Java实现版本. 目录 1. 二叉树查找树2. 二叉查找树的 ...
- 伸展树(三)之 Java的实现
概要 前面分别通过C和C++实现了伸展树,本章给出伸展树的Java版本.基本算法和原理都与前两章一样.1. 伸展树的介绍2. 伸展树的Java实现(完整源码)3. 伸展树的Java测试程序 转载请注明 ...
- 二叉堆(三)之 Java的实现
概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的Java实现(完整源码) ...
- 左倾堆(三)之 Java的实现
概要 前面分别通过C和C++实现了左倾堆,本章给出左倾堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的Java实现(完整 ...
- 斐波那契堆(三)之 Java的实现
概要 前面分别通过C和C++实现了斐波那契堆,本章给出斐波那契堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆 ...
- (第三章)Java内存模型(下)
一.happens-before happens-before是JMM最核心的概念.对于Java程序员来说,理解happens-before是理解JMM的关键. 1.1 JMM的设计 从JMM设计者的 ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- 三种java 去掉字符串中的重复字符函数
三种java 去掉字符串中的重复字符函数 public static void main(string[] args) { system.out.println(removerepeatedchar( ...
随机推荐
- 【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法
1.线程的创建与运行 (1).继承或直接使用Thread类 继承Thread类创建线程: /** * 主类 */ public class ThreadTest { public static voi ...
- jsonp详解及跨域请求
什么是JSONP? JSON是一种轻量级的数据传输格式语言,被广泛应用于当前Web应用中.JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进行数 ...
- 轻松理解UML用例图时序图类图的教程
摘自https://zhuanlan.zhihu.com/p/29874146 写在前面 当你老大扔给你这样的图,或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不(一)知(脸)所(懵 ...
- eclipse下的jetty远程调试设置
在windows下的jetty远程调试设置1.首先说明的是windows下的jetty是通过命令java -jar start.jar来启动的,因此要想设置成远程调试模式,则要改用命令java -X ...
- C语言3中循环语句的比较
(1)while和do-while循环只在while后面指定条件,在循环体中应包含使循环趋于结束的语句如(I++):for循环可以在表达式三中包含使循环趋于结束的操作,可以设置循环体中的操作全部放在语 ...
- JAVA静态代理和动态代理理解
代理 代理是英文 Proxy 翻译过来的.我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了. 她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人. 按理说,顾客可以直接从厂家购买产品,但 ...
- Command3
压缩和解压 gzip gunzip .gz 指定文件必须带后缀 gzip file filename.gz zip unzip .zip unzip filename.zip directory zi ...
- mysql 应用 持续更新2 转载
作者:彼岸Queen旅行链接:https://www.zhihu.com/question/27334963/answer/266624031来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- Java 实现简单的 Socket 通信
Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层.本文介绍了 Java socket 简单用法. 1. 传输层协议 传输层包含了两种协议,分别是 TCP (T ...
- 【MyBatis】MyBatis CRUD
MyBtis CRUD 文章源码 基于代理 DAO 的 CRUD 根据 ID 查询操作 在持久层接口中添加 findById 方法: public interface UserDAO { /** * ...