谈谈Java程序员进阶的那些知识和方向

记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackoverflow/github的搬运工,其实个人觉得也没什么不好的,闻道有先后,术业有专攻,确实有工作岗位就需要这样的职位。但是计算机行业的发展有其方向,工程师的职业发展也有其方向,随着经验的积累,可能这样的人回头再看看自己写的代码也会觉得不太好。那么如果有一天这样的人想换工作,或者应聘体质比较完整的公司,可能还是需要潜心修炼的,下面笔者从两个方面谈谈Java程序员进阶的那些知识和方向,笔者不打算从基础的东西讲起,比如Java语言基础,多线程,IO,如果有责方面的需求请参考领域内的那些神著,但是切记,最好看原版,远离粗制滥造的翻译版。

1. Paradigm

除了Java语言基础,通常在每种语言中还有很多paradigm,这些paradigm往往是衡量老鸟和新手的地方,比如函数命名,异常处理,泛型等等,下面用异常处理的两种类型来说明,笔者见过很多的Java程序员写过很多年的代码仍然分不清楚其中的区别。

Checked 和 unchecked exceptions

Unchecked exceptions
一般用于表示程序中的Bug, 比如函数调用中的非法参数异常,Java 创始人对Unchecked exceptions的解释是Unchecked exceptions是通常不可以恢复的运行时异常,换句话说,Unchecked exceptions 其实就是RuntimeException,常用的Unchecked exceptions有IllegalArgumentException, NullPointerException, 和 IllegalStateException,Unchecked exceptions通常不需要添加到函数签名列表,并且在调用方不需要强制使用try..catch。

Checked exceptions
通常用于表示函数执行过程中的一些pre condition 没有得到满足,这些条件通常超出了函数的控制范围,比如无效输入,数据库连接问题,网络异常,文件丢失等问题,Checked exceptions的父类是Exception,Checked exceptions需要添加到函数签名列表,并且在调用方需要强制使用try..catch来捕获Checked exceptions。

2. 效率和速度

记得有一次一个朋友的老板和客户谈了一个项目,客户想先看看效果然后做决定某些功能是不是他想要的,于是老板问下面的一个工程师需要多久做出一个demo,这个人想了一天,说最快也要一个月,老板觉得太慢,于是问另外一个工程师,他给出的结论是demo只需要3天,结果3天的确实做完了,而且没有加班。那么为什么差这么多呢,脚本语言,脚本语言可以大幅的提升工作效率,特别是原型设计阶段,下面以Groovy操作XML为例加以说明。假设有很多这样的XML数据需要处理,试想一下如果使用Java会是一番什么样的景象呢。

<books><book name="Effective C++"><author>Scott Meyers</author></book><book name="More Effective C++"><author>Scott Meyers</author></book><book name="C++ Primer"><author>Stanley B. Lippman</author></book><book name="Core Java"><author>Cay S. Horstmann</author></book><book name="Effective Java"><author>Joshua Bloch</author></book>
</books>

下面演示一下如何通过Groovy Script驾驭上面那段XML, 输出配对的书名和作者,并且过滤出所有Scott Meyers的著作,可以看出,除了打印输出,几乎所有的需求只要一行代码就可以解决。

println"--solidmango design start--"
languages = new XmlParser().parse(‘TestXML.xml')

println "Books and authors"languages.each {println "<<${it.@name}>> authored by ${it.author[0].text()}"
}def languagesByAuthor = { authorName ->languages.findAll { it.author[0].text() == authorName }.collect { it.@name }.join(', ')
}println"-------------------------"
println "Languages by Scott Meyers:" + languagesByAuthor('Scott Meyers')println"--solidmango design end--"  

输出:

--solidmango design start--
Books and authors
<<Effective C++>> authored by Scott Meyers
<<More Effective C++>> authored by Scott Meyers
<<C++ Primer>> authored by Stanley B. Lippman
<<Core Java>> authored by Cay S. Horstmann
<<Effective Java>> authored by Joshua Bloch
-------------------------
Languages by Scott Meyers:Effective C++, More Effective C++
--solidmango design end--

小节

人总是要成长的,大公司在招聘的时候通常会考量一下面试者是否懂球,希望大家共同进步。

谈谈Java程序员进阶的那些知识和方向相关推荐

  1. 从Java程序员进阶到架构师,6大核心技能要领详解

    " java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计. 希望能真正帮助到从程序员进阶到架构师之路的朋 ...

  2. 从Java程序员进阶架构师,必看的书单推荐!

    算法与数据结构: 数据结构(严蔚敏) java数据结构和算法(美:拉佛) 算法导论 大话数据结构 剑指Offer 程序员面试金典 编程珠玑 编程之美 程序员笔试面试最优解 数据结构与算法经典问题解析( ...

  3. java程序员进阶必读书单

    以下是我推荐给Java开发者们的一些值得一看的好书,从java基础开始到高级,以及从高级进阶到架构等的书单. 基本都是经典之作,可以利用工作闲暇的时间,系统阅读. [外链图片转存失败,源站可能有防盗链 ...

  4. 从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!

    如何从程序员进阶到架构师?今天完整的把我积累的经验和技能分享给大家! 作者:陈睿|优知学院创始人 数据结构+算法=程序 数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及 ...

  5. Java程序员进阶——Spring依赖注入原理分析

    Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...

  6. java 内存 开发 经验_有一到五年开发经验的JAVA程序员需要掌握的知识与技能!...

    JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为什么他们能达到如此境界? ...

  7. Java程序员进阶架构师的五个阶段,你到了哪各阶段?

    之前有个讨论:实现同样功能,简洁代码一定比复杂代码效率高吗?有的说,还得看算法,如果算法相同,简洁代码效率应该会高一些.有的说,即使算法相同,简洁代码也不见得比复杂代码效率高,而应尽可能减少循环的使用 ...

  8. 五年Java程序员进阶架构师的一些心得以及职业生涯规划

    1. 引言 搞Java的弟兄们肯定都想要达到更高的境界,用更少的代码解决更多的问题,用更清晰的结构为可能的传承和维护做准备.想想当初自己摸着石头过河,也看过不少人介绍的学习路线,十多年走过来多少还是有 ...

  9. Java程序员进阶架构师推荐阅读书籍

    [IT168 技术]作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些 ...

最新文章

  1. 两个使用 Pandas 读取异常数据结构 Excel 的方法,拿走不谢!
  2. 25 岁“天才少年”曹原再发一篇 Nature!9 个月的第三篇 Nature!
  3. 【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
  4. 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )
  5. Python中read( )与readlines( )的使用
  6. linux编码 form表单,Linux curl 模拟form表单提交信息和文件
  7. Java之Socket与HTTP区别
  8. python 读取地震道头数据_python地震数据可视化详解
  9. Python之路【第五篇】:Python基本数据类型
  10. Android 8款开源游戏引擎
  11. java三步 网易_Java基础:三步学会Java Socket编程·网易学院·教程
  12. springboot+vue旅行社旅游拼团系统java
  13. 德州大学计算机系郭小虎2021,2021年德州农工大学排名U.S.News世界大学排名第130...
  14. CentOS下MySQL安装失败,报socket '/tmp/mysql.sock错误解决方法
  15. 《哈佛大学公开课:幸福课》学习笔记(3)
  16. 一加9 Pro和小米11 Pro哪个好?做了超多功课最终选择了它
  17. Python:1020 月饼
  18. Mq报错:Caused by: com.rabbitmq.client.ShutdownSignalException
  19. C++ 数据存储类型
  20. com.netflix.client.ClientException: load balancer doer not hava available server for client: XXX 的报错

热门文章

  1. 集成模型Xgboost!机器学习最热研究方向入门,附学习路线图
  2. 朴素贝叶斯(NaïveBayes)
  3. 当代研究生应当掌握的5种Pytorch并行训练方法(单机多卡)
  4. 纯Python实现Torch API,康奈尔副教授为自己的课程创建了DIY教学库
  5. 树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者
  6. 翻遍用AI检测新冠的论文,一篇临床可用的也没有?!
  7. 知识蒸馏在推荐系统的应用
  8. 这届清华新生太难了吧!C++作业难到上热搜,特奖都说做不了,大厂猎头已密切关注...
  9. 男人们聚会时,都聊些什么?
  10. 牛X!Github项目中文榜,你想知道不想知道的都有!