对java的思考

  1. 神奇了, java实际上并没类似brew, npm, 这样的包管理工具, 同时代的ruby python php… 大家都有, spring boot接近了这个目标.
  2. java的数据结构数量遥遥领先, 然而并没有什么卵用, 一般情况下, 并没有节省工作量, 对比下php的数组->redis->mongo之间的自然映射.
  3. java其实并没有遵守, 一堆小项目就可以合出一个大项目这个原则. java项目基本都自己造轮子了. 原因是这种jar包或者说源码依赖的方式, 导致依赖就很不清爽.
  4. 简单的说, java虽然提供了很好地包组织方式, 但是, 其实不必依赖这个方式.
  5. 所以java搞了很多接口方面的事, 比如ejb, webservice……
  6. java更多的考虑构建大型系统, 因此, 他不是太区分包内和包外, 所以所有的东西都能用, 这个看上去很美, 实际导致各种臃肿和donkey work, 所以, 有衍生了一大票其他语言压根不会存在的工具, 以及其他语言压根不会存在的架构. 真牛了.
  7. java的世界大家善于闭着眼睛胡说八道, 比如ejb各种好, xml各种好, sql各种好…….然后, 某一天被指出了皇帝的新装, 才会恍然大悟. 对于各种技术只有追捧, 一点都不务实, 都不实践的.
  8. 要写java代码, 除非自己造轮子, 否则必须阅读基础类库的代码, 因为, java的依赖方式就是一竿子捅到底, 不了解细节就用一个类, 能坑死你.
  9. java虽然号称面向接口, 然而接口封装极不清爽, 既不简洁, 也不直观. 简单地说, 这货和sql一样的, 是一个数学家和思想家的产物.
  10. 在继承这件事上花了很多心思, 但是, 各个框架的目的都是: 不用继承.
  11. object就是万能指针…… 在类型处理上, java做的可也不算好.
  12. 打印或者输出时, 默认不会帮你toString, 会帮你打印运行时的名字(而不是值), 这事好神奇. 帮助jvm的开发同学定位问题?

知乎上看到一帮人玩命搞数据结构

java的数据结构确实有一定得问题, 不是太少了, 而是太多了, 其实需要用的并不多.

相关条目

  1. java本文
  2. javamake隔壁
  3. spring隔壁
  4. 2wayprogram尚未完工
  5. editorserver隔壁讨论编辑器

为什么会有jvm语言

http://www.drdobbs.com/jvm/a-look-at-the-main-jvm-languages-today/232600853?pgno=8

就是因为简洁,

  1. 用过任何一种p(php, perl, python, ruby)类语言的人, 都难以忍受java的唠叨, 唠叨到了老年痴呆的地步, 80%代码都是修饰性代码, 是必须要写的, 但是从语义角度其实是不必要的, 看看swift就能理解不少.
  2. 用过任何一种类似函数式的语言, 都无法忍受java这个弯弯绕的语法. 比如之前的匿名类, 现在虽然有函数式解决, 但是依旧不够简洁, 注解也是, 任何其他语言都不可能是这样的设计, 太绕了, 无用的语言成分太多了. 对比下JavaScript, 你就理解了, 哪怕最原始的c语言的函数指针也好过java这种弯弯绕的实现方式, 其实我们可以认为java的编译器写的很懒惰.

因此, 各路大神采用当年c++的做法, 用另一种语言生成java的源码或者字节码, 解决java编写的痛苦(真的是痛苦, 其他语言转过来就能感受到, .net除外).

  1. groovy 据说唯一的问题就是, 特别慢.
  2. scala
  3. kotlin 已经在android获胜.

我们在这里也顺便讨论下通常的错误吧

  1. 所有的括号语法事实上都令人心烦意乱, 尤其是大括号, 小括号, 中括号, 再加上尖括号. 并且>还有另外的N种用法, 比如输出, 比较, 位移……
  2. if判断是万恶的根源, 能否替代, 决定了语言的能力. \
  3. 自动生成代码最烦人的是, 改变了我输入的内容, 不论自动生成的是java还是html. 应该采用markdown的做法, 展示效果为html, 那么在展示的时候才考虑这个问题, 而不是随意的修改用户输入, 这是我反对使用任何类似ide这样的重型工具的原因, 不论是eclipse还是idea或者Dreamweaver, 他们的问题都是, 帮我做了太多事. 乱改我的代码, 其实说道这里微软笑了, 乱改代码一贯是微软的核心竞争力. 可以用markdown多行[1.]来展示, 虽然展示会变成顺序的, 但是, 源文件不会被修改.
  4. 最大的错误是面向对象, 把对象作为第一公民直接导致了语言的冗长, 目前的普遍思路是, 函数才是第一公民, 类是组织函数的方式. 变量是类的运行时.
  5. c++ 的stl已经比java先走了一步, 但是, 他们两家跑步也还没追上一般的正常语言.

必须也要列一下有点, java的优点还是特别突出的

  1. java是唯一一个, 特别重视考虑大型代码组织的语言
  2. 在组织大型软件时java确实有天生性的优势.
  3. 统一使用了原子数据java bean, 导致他在映射实际业务内容的时候, 有着先天性的优势.
  4. 他是接口驱动的. 互相之间的调用和组装确实是极大的丰富了. 构建精美的基础库, 用起来确实特别爽.
  5. 必须要了解这些基础库.
  6. 无用代码还是特别多.
  7. 他也是目录组织的. 但是他的类声明其实是无意义的, 因为目录和文件名已经定义好了. 包括他的包声明. 学过机械的都知道6个维度限制. 很多限制条件是无意义的, 比如固定轮, 大小轮之间的连杆, 就是一个无用限制.

对照linux

  1. 接口尽量简单, 一般都是单参数顺序.
  2. 所谓的多参数, 一般都是伪多参数, 因为参数都是枚举类型, 枚举多少个参数, 其实都还可以认为是单参数.

后记: java思路

项目需要用java翻译一个json为另外一个, 也就是要解析json, 经过一通辩论, 发现java程序的思路真的太绕了.

java程序员思路:

  • json->bean,
    • 此处除了要写目标bean之外,
    • 还用了另外一个json解析框架(fastjson),
    • 解析的调用过程还用了反射
  • bean->另一个bean. 这个是重头戏, 转化逻辑都在这里. 两个json的对应关系实际上也在这里.
  • 另一个bean->json

其他程序员思路:

  • json->另一个json
  • 一般的语言json解析都是系统核心包, 不需引入任何附加框架.
  • 最多对于两个json的keymap用一个key-value的数据结构.