Java坑死你
对java的思考
- 神奇了, java实际上并没类似brew, npm, 这样的包管理工具, 同时代的ruby python php… 大家都有, spring boot接近了这个目标.
- java的数据结构数量遥遥领先, 然而并没有什么卵用, 一般情况下, 并没有节省工作量, 对比下php的数组->redis->mongo之间的自然映射.
- java其实并没有遵守, 一堆小项目就可以合出一个大项目这个原则. java项目基本都自己造轮子了. 原因是这种jar包或者说源码依赖的方式, 导致依赖就很不清爽.
- 简单的说, java虽然提供了很好地包组织方式, 但是, 其实不必依赖这个方式.
- 所以java搞了很多接口方面的事, 比如ejb, webservice……
- java更多的考虑构建大型系统, 因此, 他不是太区分包内和包外, 所以所有的东西都能用, 这个看上去很美, 实际导致各种臃肿和donkey work, 所以, 有衍生了一大票其他语言压根不会存在的工具, 以及其他语言压根不会存在的架构. 真牛了.
- java的世界大家善于闭着眼睛胡说八道, 比如ejb各种好, xml各种好, sql各种好…….然后, 某一天被指出了皇帝的新装, 才会恍然大悟. 对于各种技术只有追捧, 一点都不务实, 都不实践的.
- 要写java代码, 除非自己造轮子, 否则必须阅读基础类库的代码, 因为, java的依赖方式就是一竿子捅到底, 不了解细节就用一个类, 能坑死你.
- java虽然号称面向接口, 然而接口封装极不清爽, 既不简洁, 也不直观. 简单地说, 这货和sql一样的, 是一个数学家和思想家的产物.
- 在继承这件事上花了很多心思, 但是, 各个框架的目的都是: 不用继承.
- object就是万能指针…… 在类型处理上, java做的可也不算好.
- 打印或者输出时, 默认不会帮你toString, 会帮你打印运行时的名字(而不是值), 这事好神奇. 帮助jvm的开发同学定位问题?
知乎上看到一帮人玩命搞数据结构
java的数据结构确实有一定得问题, 不是太少了, 而是太多了, 其实需要用的并不多.
相关条目
- java本文
- javamake隔壁
- spring隔壁
- 2wayprogram尚未完工
- editorserver隔壁讨论编辑器
为什么会有jvm语言
http://www.drdobbs.com/jvm/a-look-at-the-main-jvm-languages-today/232600853?pgno=8
就是因为简洁,
- 用过任何一种p(php, perl, python, ruby)类语言的人, 都难以忍受java的唠叨, 唠叨到了老年痴呆的地步, 80%代码都是修饰性代码, 是必须要写的, 但是从语义角度其实是不必要的, 看看swift就能理解不少.
- 用过任何一种类似函数式的语言, 都无法忍受java这个弯弯绕的语法. 比如之前的匿名类, 现在虽然有函数式解决, 但是依旧不够简洁, 注解也是, 任何其他语言都不可能是这样的设计, 太绕了, 无用的语言成分太多了. 对比下JavaScript, 你就理解了, 哪怕最原始的c语言的函数指针也好过java这种弯弯绕的实现方式, 其实我们可以认为java的编译器写的很懒惰.
因此, 各路大神采用当年c++的做法, 用另一种语言生成java的源码或者字节码, 解决java编写的痛苦(真的是痛苦, 其他语言转过来就能感受到, .net除外).
- groovy 据说唯一的问题就是, 特别慢.
- scala
- kotlin 已经在android获胜.
我们在这里也顺便讨论下通常的错误吧
- 所有的括号语法事实上都令人心烦意乱, 尤其是大括号, 小括号, 中括号, 再加上尖括号. 并且>还有另外的N种用法, 比如输出, 比较, 位移……
- if判断是万恶的根源, 能否替代, 决定了语言的能力. \
- 自动生成代码最烦人的是, 改变了我输入的内容, 不论自动生成的是java还是html. 应该采用markdown的做法, 展示效果为html, 那么在展示的时候才考虑这个问题, 而不是随意的修改用户输入, 这是我反对使用任何类似ide这样的重型工具的原因, 不论是eclipse还是idea或者Dreamweaver, 他们的问题都是, 帮我做了太多事. 乱改我的代码, 其实说道这里微软笑了, 乱改代码一贯是微软的核心竞争力. 可以用markdown多行[1.]来展示, 虽然展示会变成顺序的, 但是, 源文件不会被修改.
- 最大的错误是面向对象, 把对象作为第一公民直接导致了语言的冗长, 目前的普遍思路是, 函数才是第一公民, 类是组织函数的方式. 变量是类的运行时.
- c++ 的stl已经比java先走了一步, 但是, 他们两家跑步也还没追上一般的正常语言.
必须也要列一下有点, java的优点还是特别突出的
- java是唯一一个, 特别重视考虑大型代码组织的语言
- 在组织大型软件时java确实有天生性的优势.
- 统一使用了原子数据java bean, 导致他在映射实际业务内容的时候, 有着先天性的优势.
- 他是接口驱动的. 互相之间的调用和组装确实是极大的丰富了. 构建精美的基础库, 用起来确实特别爽.
- 必须要了解这些基础库.
- 无用代码还是特别多.
- 他也是目录组织的. 但是他的类声明其实是无意义的, 因为目录和文件名已经定义好了. 包括他的包声明. 学过机械的都知道6个维度限制. 很多限制条件是无意义的, 比如固定轮, 大小轮之间的连杆, 就是一个无用限制.
对照linux
- 接口尽量简单, 一般都是单参数顺序.
- 所谓的多参数, 一般都是伪多参数, 因为参数都是枚举类型, 枚举多少个参数, 其实都还可以认为是单参数.
后记: java思路
项目需要用java翻译一个json为另外一个, 也就是要解析json, 经过一通辩论, 发现java程序的思路真的太绕了.
java程序员思路:
- json->bean,
- 此处除了要写目标bean之外,
- 还用了另外一个json解析框架(fastjson),
- 解析的调用过程还用了反射
- bean->另一个bean. 这个是重头戏, 转化逻辑都在这里. 两个json的对应关系实际上也在这里.
- 另一个bean->json
其他程序员思路:
- json->另一个json
- 一般的语言json解析都是系统核心包, 不需引入任何附加框架.
- 最多对于两个json的keymap用一个key-value的数据结构.