分享

真正的精通Java是种什么样的境界?

 Frank_Chia 2017-12-15


作为一名软件开发者,要追求的,应该是不断地提升自己分析问题把握事物关键点,实事求是地给出切实可行且能“一剑封喉”的优雅解决方案的能力,再提升一点境界,就是要不断提升自己创新的能力(即创造新东西、提出新思路、解决新问题的能力)。

我个人认为,花费大量的时间去'精通'某种语言、某个平台和某些工具,其实是本末倒置。所以,不要追这种'精通”,看上去学富五车很牛逼,其实孔乙己一个罢了。

----------北京理工大学 计算机学院讲师金旭亮

不知道什么样算“真正的”精通Java。答主编程不少年了,几年前还在 FLAG 工作时 peer review top 10% 的水平,所以厚颜自称较熟练吧。总结下自己现在的状态。(不限于Java,现在工作用Java + Scala + TypeScript,私人项目用 Java + Kotlin, 之前 c++ 什么也写过一堆,对大多语言都通用)。

  • 还是会查API,会去谷歌/StackOverflow。Java生态系统很大,如果用到第三方库,特别如Spring之类要点极多且每版都会调整。强记API不是做不到,实在是没有意义。需要记得每个库都有哪些主要类,每个类提供哪些方向的功能。具体参数,及表现细节依靠查文档。

  • 知道 JDK 内部大致是怎么实现的,能躲开绝大部分明雷。至于一眼看出Byte Code,抱歉做不到。代码调优靠Profiler,纯手动调优不推荐。

  • 一遍编译无Bug做不到,且没有必要。编译器的最大的作用就是查缺补漏,靠人工去一个个文件排查不是不能,实在是浪费时间。一般写码流程如下:

  • 先定大致方向,写初稿。

  • 觉得写差不多了就开始敲编译,靠报错把最后不编译的部分修完。

  • 编译过了就跑测试,看看有没有Break现有功能。

  • 把现有的break修完开始写新测试。这是找Bug的主要过程,通过测试找Bug比靠脑力排查有效率的多。因为你只要写什么样的情况期待什么样的输出。出现意想不到的结果靠Debugger来排查哪里想叉了。

  • 写测试的同时一般会对API设计有新的想法,依靠已写的测试做一两轮Refactoring。

  • 多写多试多改,靠测试把Bug挤完。当别人还在纠结怎么设计完美API怎么一遍写完无Bug时,我们已经改完几稿趟完一堆暗雷可以提交了。

  • 这流程还有好处是测试比较全,写出的东西不会轻易被别人Break。

  • 会把复杂的问题简单化。经常会有新人向我吐槽,隔壁大神好牛,代码美如画,各种技术吊炸天,可惜看不完全懂。不像你的代码,从头到尾简简单单好像也没什么特别绕的东西,写出来就是能用。有经验的程序员会知道项目里大部分同事都是平均水平,你如果挖空心思写出的牛掰代码,可能很多人看不懂,维护起来一定会出错。如何封装复杂的逻辑,用简单的接口藏起烧脑的内容,是程序员走向成熟的标志。

  • 知道Eco System里都有什么开源选择, 不必要的轮子不要造,该造的时候能提供充分的理由说明为什么现有的开源不能满足,必须自己来。

  • 不迷信大开源/大公司项目。使用第三方库会去看源代码,看哪里写的好哪里写的不理想。哪怕Java语言本身也有不少设计缺陷 (Criticism of Java),参考别人的经验教训,认识到现有工具的不足,在自己设计时避免同样的错误。

  • 同意ClevelandAlto说的,认识语言的优缺点,选择正确的工具。不适合用Java时候不要用Java。

一个程序员学习平台分享给你们,让你在实践中积累经验掌握原理。主要方向是JAVA工程师。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java学习交流群:282711949

注:加群要求

1、大学学习的是Java相关专业,毕业后面试受挫,找不到对口工作可以

2、在公司待久了,现在过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的

3、参加过线下培训后,知识点掌握不够深刻,就业困难,想继续深造

4、已经在Java相关部门上班的在职人员,对自身职业规划不清晰,混日子的

5、有一定的C语言基础,接触过java开发,想转行的

小号勿扰,不喜勿加

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多