yejia80550708 发表于 2017-11-23 15:58

【好书推荐】你与Java的距离,或许只差一部经典

本期获奖的小伙伴有:nail78、sxcong、kangtian、renxiao2003、yehuafeilang话题背景:
      毫无疑问,Java 是这个星球上最为流行的编程语言之一,目前在软件类的Java软件开发工程师所占的比例最大,竟达到60%以上。根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的50%以上。      Java 语言发展的这 20 年也正是全球互联网迅猛发展的 20 年,Java 语言同时也见证了电商浪潮、移动互联网浪潮、大数据浪潮、云计算浪潮,所以在现今各大互联网公司身上都能看到 Java 的身影。      Java SE 9.0在2017年9月21日发布, JDK 9的核心变化就是引入了一种新的Java编程组件,也就是模块,按照Oracle的说法,它是一个可命名的、自描述的代码和数据集合,Oracle希望通过这种方式提升性能、安全性和可维护性。

话题讨论:
      1.你觉得Java 的开发效率比 C++ 高在哪里?      2.你如何看待JDK 9引入的模块技术?      3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?      4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?


讨论时间:11月23日—12月23日
活动奖励:择优选取5位童鞋送出技术图书《Java程序设计:基础、编程抽象与算法策略》一本[美]埃里克S.罗伯茨(Eric S. Roberts) 著陈昊鹏 译---------------------------------------

关于本书:与大多数有关Java编程语言的教材不同,本书没有针对Java语言的各种特性展开各个章节,而是从程序抽象的角度,围绕着编程思想来展开其内容。在针对具体问题的解决过程中,水到渠成地揭示Java语言的各种特性,使读者不仅知其然,而且知其所以然。哪怕你已经是熟练的程序员了,阅读本书你仍然会有一种耳目一新的感觉,你会发现从另一种维度来对你掌握的知识进行梳理时所呈现出来的不一样的视界。本书介绍的程序抽象包含了常用的数据结构和常见的简单算法,因此,它不但可以作为Java语言的学习材料,还可以作为数据结构的参考教材。事实上,这本书就是斯坦福大学的第二门编程课程的教材,有兴趣的读者可以在该课程的网站上下载更多的参考材料,以拓展对本书内容的理解。

样章试读:   




--------------------------------------------------------------------------------------------------------欢迎大家发帖讨论,分享是美德,也希望CU这个平台带给大家进步和成长,有任何问题,请站短联系!


技术讨论,请加QQ群:203848540


nail78 发表于 2017-11-23 17:23

   1.你觉得Java 的开发效率比 C++ 高在哪里?
   
       java没有指针操作;有垃圾回收机制,不用手动释放内存去回收;语言跨平台,不会因为平台不同考虑移植的问题;有很多成熟的框架。对新手来说,Java 的开发效率比 C++ 高。

   2.你如何看待JDK 9引入的模块技术?
      
      模块化后,更方便开发测试和维护;可以隐藏不想爆露的细节,更有安全性;应用可以更小,因为我们只引入需要的模块。

   3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?
   
      就使用人数来说,Node.js短时间内是很难超越Java的,很长一段时间,java还会是使用人数最多的语言。

   4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?

       Java语言不够简洁,太啰嗦,同样的功能,有些语言几行就解决了,java要写一大坨,这一点不让人喜欢。

aloki 发表于 2017-11-24 16:00

1.你觉得Java 的开发效率比 C++ 高在哪里?
   这要看这个问题是针对谁来说了。java的优势是在工程层面的,对新手很友好,不是特别懂也能写代码并且不容易出大错,然后在此基础上提供了很多工程支持,让它可以适应大型软件。用Java就像在开自动驾驶汽车一样。语言原理上没有什么奇技淫巧,所以也不用去研究,该用什么一个import完事。内存不用管,再怎么new也不需要担心内存泄漏,传递一律引用,也不用担心。C++对新手不是很友好,需要你深入探究语言的深层机理,这大概是C++开发效率低的原因之一。如果用枪械来比喻C++,那C++就是全部自己组装的超级加农炮,用好了威力十足,用不好会把自己的腿轰掉。

2.你如何看待JDK 9引入的模块技术?
模块系统极大地提升了大型系统的可维护性、可靠性、安全性。至少JDK本身还缺少这样的系统。通过这样的模块系统,模块图能够自动地构建。

3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?
      不会。因为适用范围不同。Web服务器端一直都存在两个阵营,以Java/C#为代表的工业设计语言和以PHP/RoR为代表的快速开发语言。前者一直牢牢地占据着企业应用开发市场,而后者则普遍认为更适合灵活多变的互联网,Node.JS显然是属于后者的。
      由于Node.JS和Java分属不同的阵营,如果要说超越那应该是Node.JS代表的快速开发语言阵营超越了工业设计语言阵营,但两个阵营目前在各自的领域都有很大的护城河,使得这种事情几乎是不可能发生的。

4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?
Java是静态强类型语言,这对于构建一个稳定而安全的应用来说是一个很大的优势,但是与一票动态语言相比,这种静态的类型检查也限制了开发人员编写代码时的创造性和灵活性。其次,Groovy、Scala、JRuby等运行在Java虚拟机上的语言,它们既有简洁优雅的语法,又能充分利用Java虚拟机的资源,极具竞争力;再者,Java在云计算时代也面临以Go语言为主的容器生态圈的挑战。

Java还需要改进的地方
·Java 语义上对“模式匹配”有更强的支持,如今的 switch 语句能力还是比较欠缺,可以向 Erlang, Scala 等语言借鉴。
·多线程并发处理,Java 做的已经很好了。不过可以在多进程多线程配合,以及语言级别数据管道表示上,可以进行改造和优化。
·JDK9 会有 HTTP/2 client 端的能力,但毫无疑问会有更多更好的三方库出现,JDK 可以和这些三方库通力合作,提供一个更好 API 界面和 SPI 参考实现。
·Java 在云计算方面遇到的最大问题是占用内存过大。

forgaoqiang 发表于 2017-11-27 15:41

占坑等待试读后回复下

文峰聊书斋 发表于 2017-11-28 09:08

google已经将cotlin定义为安卓第一开发语言,java已经不是google安卓第一语言了,cotlin针对java的一些缺点做了改进。建议是新手就别学java,直接学cotlin吧。

sxcong 发表于 2017-11-28 10:39

      1.你觉得Java 的开发效率比 C++ 高在哪里?
为什么都说java开发效率比c++高,我怎么感觉用c++开发比java高的多? 其实谁比谁好这种问题要有前提条件的,比如开发企业应用,ERP,CRM等,或者WEB,Java有大量成熟的框架可用,所以开发快。如果开发个音视频采集编码传输解码播放,Java勉勉强强地先弄出个界面,然后再利用JNI调用C的东西,怎么可能比c++效率高?

      2.你如何看待JDK 9引入的模块技术?
还是比较有效的,但首先要说服用户升级。
      3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?
不可能超越的,还是那句话,现在运行项目不可能替换,历史原因。
      4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?
Java社区自己也认识到问题了,比如kotlin的出现,总体来讲还是向前发展的。不过,既然说了语言发展如此迅猛,做开发时肯定是选择最合适的语言做合适的部分。比如网络通信,虽然Netty在Java社区有很高的声誉,但实际上用libevent, libuv,boost会更优先考虑。更不用说在mysql, redis, nginx等第三方工具的配合下,语言本身起决定作用的因素已经降低了。比如PHP+apache性能的弱点可以弥补。

kangtian 发表于 2017-11-28 10:50

1.你觉得Java 的开发效率比 C++ 高在哪里?
      1)Java SE自带相当完备的类库,涵盖图形、网络、集合、多线程等,相对而言C++的标准类库还比较简陋。
      2)自带垃圾回收,更完备的异常处理机制。
      3)更纯粹的面向对象模型,抛弃了多重继承、操作符重载等晦涩的概念。

2.你如何看待JDK 9引入的模块技术?
      似乎并没有涉及语言的新特性,只是让类之间的关系更清晰。

3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?
      有可能。抛开android应用不谈,java越来越固化在企业级web开发领域,越来越依赖那几个框架,也就是说java作为一个通用开发语言正在丢失疆土。而Node.js作为专注于网络应用开发的语言没有java那么大的包袱,轻装上阵,弯道超车不是没有可能。

4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?
      java的挑战在于自身的包袱,全才往往不敌专才。改进,我能想到的就是缩减核心类库的规模,将非核心功能的类库作为可选的。

shenlanyouyu 发表于 2017-11-28 12:37

回复 5# 文峰聊书斋

cotlin???!!!!kotlin,好吧,自己都没有搞清楚。

renxiao2003 发表于 2017-11-28 18:36

1.你觉得Java 的开发效率比 C++ 高在哪里?
Java是纯面向对象的开发语言,没有指针,自动垃圾回收机制,单重继承,各种开源框架,极大的简化了Java开发人员的工作,增大了开发效率。
      2.你如何看待JDK 9引入的模块技术?
模块技术简化了JDK的引入机制,原来必须要导入大包才可以运行,现在仅需要导入需要的包就可以,减少了内存需求。
      3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?
我觉得有一定的可能,现在Node.js即支持服务端编程,又支持客户端编程,而且各种框架和插件也很全。
      4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?
Java主要要加强在人工智能和机器学习领域的发展。这样就更加完美了。

yehuafeilang 发表于 2017-11-29 11:05

1.你觉得Java 的开发效率比 C++ 高在哪里?
      这个说起来估计得一大篇了,这里挑重点的说一下,Java其实也是由C++发展而来,保留了C++的大部分内容,其程序编写方式类似于C++,但是摒弃了C++的诸多不合理之处。使得Java句法更清晰,规模更小,更易学,同时更趋于健壮性,安全性和平台无关性。我个人的体会主要是以下几点:
一是Java里没有让人头痛的指针;
二是自动内存管理。Java 程序中所有的对象都是用 new 操作符建立在堆栈上的,这个操作符类似于 C++的“new”操作符。Java 自动进行无用内存回收操作,可以不需要我们太在意释放内存资源。
三是多重继承。C++支持多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以 Java 不支持多重继承,但允许一个类实现多个接口。可见,Java 既实现了 C++多重继承的功能,又避免了 C++的许多缺陷。
四是操作符重载。Java 不支持操作符重载,操作符重载被认为是 C++的突出特征。在 Java 中虽然类可以实现这样的功能,但不支持操作符重载,这样使用 Java 语言编程就更简单了。
五是goto语句。Java不提供goto语句,避免程序跳来跳去,使得程序更简洁易读,增强了程序的健壮性。
六是跨平台。秉承着一次编译处处可用的理念, 对于需要支持多个操作系统的应用,Java跨平台太好用了。
七是字符串。C 和 C++不支持字符串变量,在 C 和 C++程序中使用“Null”终止符代表字符串的结束,在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,在整个系统中建立字符串和访问字符串元素的方法是一致的。Java 字符串类是作为 Java 语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用“+”进行连接操作,极大地提高了编程效率。
八是众多开源框架。
九是Javadoc。Java一开始就提供了Javadoc,而且自带类的文档都不错,不用去翻看头文件。

2.你如何看待JDK 9引入的模块技术?
Java 9的模块是以Java平台模块系统的形式,将JDK分为运行、编译或构建时的一组模块。模块化被称为“可传递”的变化,这可以更好地理解跨模块的依赖关系。Java 9的模块化方面包括应用程序打包、模块化JDK以及将源代码重新组织到模块中。在构建时,构建系统将强化编译模块并加强模块边界。JDK和Java运行环境(JRE)的镜像将被重构,以此来处理模块。同时,JavaFX UI控件和CSS API也将被模块化。有几点吧:
一是模块化技术让Java的程序更加容易轻量级部署
二是改进组件间的依赖管理,引入比Jar粒度更大的Module
三是改进程序性能和安全性

3.Node.js官方宣称明年它将超越Java,你认为Node.js会超越 Java 吗?为什么?
两种语言各有优势,但是说Node.js明年要超越Java,我认为还是不会的。Node.js是一个服务器端的JavaScript解释器,强在IO,但是在计算性能要求高、需要精密控制内存的分配和释放的场景、实时性要求很高的场景就比较弱势了,而JAVA除了上述场景下有优势,并且企业级应用程序开发,已经经历那么多年,各种框架,应用都很完善了,Node.js想要超越Java很难。

4.编程语言发展如此迅猛,你认为Java在未来将遇到什么挑战?有哪些方面需要尽快改进?
      如今随着云计算、深度学习、大数据和人工智能等技术日新月异的发展,当前的应用场景也发生了翻天覆地的变化,不仅仅对 Java 的发展速度提出了更高要求,也影响着 Java 技术的发展方向。传统的大型企业或互联网应用,正在被云端,容器化应用、模块化的微服务甚至是函数所替代。Java 需要在新的计算场景下,改进开发效率,推出更易用的集合 API 等,还有就是进一步改进启动和运行性能、优化计算资源使用。目前,相当一部分的 Java 类库和虚拟机特性都是针对长时间、大数据量、高并发等复杂任务进行的优化,但是在很多云计算场景中,短时间、无状态的函数正在成为常见的计算单元。那么在这种场景下,Java 必须进行相应的改进和创新,才能保持和强化目前在软件开发领域的竞争力。
页: [1] 2
查看完整版本: 【好书推荐】你与Java的距离,或许只差一部经典