热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java很傻,但是IDE很聪明

对于编程语言来说,什么是生产力?我觉得,更高的抽象层次就是生产力。执行效率很重要,但是在很多情况下,程序员的效率更重要的,而且语言的执行效率是可以发展的。该优化的时候,我们再来考虑

对于编程 语言来说,什么是生产力?我觉得,更高的抽象层次就是生产力。 执行效率很重要,但是在很多情况下,程序员的效率更重要的,而且语言的执行效率是可以发展的。该优化的时候,我们再来考虑优化的事情。 对于语言来说,最重要的是把程序员脑子里的东西,用最高效的方法记录下来。

C语言比机器语言有更高的抽象层次,所以我们认为C语言比机器语言有生产力。 Java比C语言更抽象,所以我们认为Java比C更有生产力。 逐渐的,我们发现,Java已经满足不了生产力的需求了。

在编程 语言百花齐放的今天,我们发现各种新出的神奇的语言。几乎所有了解过(更)高级语言的人都会说: 我靠!还能这么写?我吭哧吭哧在这里敲半天,人家一句话搞 定了? 在人家看来,我就是一个人肉的编译器,手写中间语言。。。

Java抽象层次太低,导致表达能力太弱。别人一句话的事情,在你这里要讲半天。 Java本身就有太多的重复(duplication),而且缺少一些高级特性。 虽然也在发展,比如说foreach,比如说annotation,这都提高了抽象层次。 但是发展的太慢了,这有很多原因,向下兼容性应该是最主要的一方面。

总之, Java不是一个生产力语言,表达能力太弱。 而作为Java程序员,确实也没啥语言上的尊严了。那Java程序员怎么办?如何保持自信,树立正确的人生观价值观。 或者说,Java程序员如何提高自己的抽象层次,少做脏活累活?

学习更高层次的抽象

了解一些其他高级语言,知道什么样是好的。 别人一句话信息量太大了,我们要先能听懂,知道人家说什么,知己知彼(最重要的是知道自己有多搓)。 Java sucks,但是Jvm很牛逼,可以了解一些Jvm上的高级语言,比如Scala、Clojure。了解函数式编程、闭包、并发等等。 语言只是表达思想的一种方式,应该更关注你想表达的东西。 到了一定高度以后,新学一种语言,只要了解一下基本发音,就能说个八九不离十,甚至比那种语言的Native Speaker还说的好。

IDE很聪明

Java最大的好处,就是足够成熟,市场占有率高。 Java程序员的需求,就是市场的需求。Java拥有有最成熟的IDE,一群的商业公司想方设法取悦Java程序员。

《Java很傻,但是IDE很聪明》

Java程序员的苦逼之处在于,他们做了很多编译器的活。有个折衷就是,可以把部分人肉编译器的活,交给IDE。 让IDE充当编译器,把你告诉它的话,编译成中间代码,也就是Java。 虽然别人一句话的事情,我这边还是要说十句。但是现在我们可以告诉IDE三句话,让IDE转成十句。 手打一个基本的循环花了10多秒,用IDE只需2秒。

如果语言是把人们心里所想的东西表达出来,那么IDE语言其实也算一种广义上的语言了。 而且IDE语言还有个好处就是,它与Java之间足够平滑,完全的无缝。

我们这样分析一下抽象层次: 人脑 > IDE等输入设备 > 编程 语言(Java) > 机器语言or虚拟机上的机器语言(bytecode)。 人脑是最高级的,想出一个想法只需要一瞬间, 但是转化成编程语言,则需要很大的精力。人脑和编程语言之间有一个鸿沟。 而一个足够智能的输入设备,可以缩小这个鸿沟。 IDE语言把很多重复琐碎的操作,设计为原子操作。你仅需要考虑IDE的原子操作便可以了。 不仅仅减少敲击键盘的次数,而且可以减少你考虑的细节,提高你的抽象层次。

所以说, Java很傻,但是IDE很聪明。把人肉编译器的工作交给IDE吧,体验被伺候的感觉。

  • 用好hot key

    能不用鼠标尽量别用,前提是有一个好的IDE(eclipse很难做到)。

  • 用好snippet

    不再手写for int i = 0; i \,而使用itar + Table。

  • 用好refactor

    先写new Object(); extract variable,自动生成Object obj = new Object();而且用好refactor,对写好Clean Code作用最大。

  • 用好quick fix

    int a = 1, b = 2; 直接写 int c = add(a, b); 然后quick fix,让IDE补充参数和返回值。

我换到IDEA也不久,很多想法都很初级,这没关系,熟练使用IDE需要大量的练习。 音乐家每天在家苦练弹钢琴一样,我们码农其实也应该花时间磨练自己最基本的技能。

就像武侠小说中的武功招式一样,招式其实就是在一些特定场景下的一系列动作。 比如说对手在我后面距离两米,我转身175度,使用80%的内力斜踢右脚,就可以一招致胜一样。 武功招式把这一系列动作凝练成一个名字。高手过招,过的是原子操作,细节啥的,都不需要考虑。 甚至有的武侠小说里面高手可以打嘴炮,最后还输的心服口服。这就是层次。

我经常做一些TDD(Test-Driven Development)的kata, 比如说一个StringCalculator。 学习这个做法来源于《Clean Coder》 (这本书对我影响非常大,最大的一点估计是程序员每天工作11小时,8小时给公司,3小时给自己)。 在练习中不断的精简每一个动作,每一个动作都做到无可挑剔,并和自己的IDE完全融合起来,找到一个最短路径。 这样,我们在实际工作中,技由心生,砍瓜切菜,攻城跋扈。

Intellij IDEA是一款好产品

最后回到主题, 我想说,作为一门广义上的语言来说,IDEA设计的很好。 原子操作的设计,快捷键的控制等等,真的是在用心的做一款(能赚钱的)产品,想码农之所想。

之前发过一篇黑Eclipse的文章说,Eclipse没有Preference的快捷键。 我指的是没有“默认快捷键”,可配置不是一个好的挡箭牌。 设计快捷键需要非常强的规划能力和一致性,而大部分程序员都没有这个能力和精力(折腾vim自定义快捷键超过10小时,而且不满意的同学请举一下手)。 一般程序员需要的是一套优良的解决方案+可配置。

还有一个很重要的原因,我喜欢暗色背景。 就像在烈日下搬了一上午砖的民工期待一片云彩那样,我希望能有一个完美的暗色主题来对得起我四百度的眼镜。 曾经折腾Eclipse的Editor暗色背景插件(只有Editor区域,其他区域不行),发现与各种Diff工具不匹配(Diff工具没有暗色背景,直接用深色作为高亮,瞎了),各种不爽,最后又换回来。 一下午过去了,你说啥,生产力?几乎为零。

码农界有很多圣战,Linux or Windows、Vim or Emacs、Eclipse or IDEA。 码农一般都是最懒的人,当他知道有另外的工具可以以一种更懒的方式完成自己现在的工作。 他会心向往之。这些圣战其实不仅仅是口水战、打嘴炮,往往代表了码农们对生产力的思考。

我觉得评价两个IDE哪个好用,这个一般没有定论,很主观。不过我觉得有一个方法,让某一个人练熟在两个IDE环境下的kata,看他如何做到路径最短,自己写的最爽。从这个标准来看,我站在IDEA这边。

码农真是容易满足,不得不说,最近换了个IDE,感觉自己幸福指数都提升了不少。 我仅用了一周的IDEA,就已经变成一个Eclipse黑。当然了,鼓励竞争,谁家产品好咱用谁家,后面E家好用咱再换回来。

关于作者

李先Loki,网易惠惠网工程师。

via 伯乐在线


推荐阅读
  • 汇编语言标识符和表达式(四)(表达式与符号定义语句)
    7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 工作中频繁在不同Linux服务器之间切换时,频繁输入密码不仅耗时还影响效率。本文介绍如何通过设置SSH密钥认证,简化登录流程,提高工作效率。 ... [详细]
  • 本文详细记录了一位求职者在搜狐进行的两次面试经历,包括面试的具体时间、面试流程、技术问题及个人感受。通过本次面试,作者不仅获得了宝贵的经验,还成功拿到了搜狐的录用通知。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
author-avatar
mobiledu2502856247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有