基础知识漫谈(1): 想到哪儿写到哪儿

简介: 一、想到哪儿写到哪儿 给公司新员工培训,和网上的新手做交流,我最先强调的都是基础。 基础有什么用? 1、节省沟通成本 有天,java群里来了个新人,上来就提了一个问题: “我代码跑不起来,怎么办?” 这一看就是还没入门,没办法提供具体的信息。

 

一、想到哪儿写到哪儿

给公司新员工培训,和网上的新手做交流,我最先强调的都是基础。

基础有什么用?

1、节省沟通成本

有天,java群里来了个新人,上来就提了一个问题:

“我代码跑不起来,怎么办?”

这一看就是还没入门,没办法提供具体的信息。

于是有个有耐心的老鸟出来了,开始了一连串提问:异常栈看一下?有编译期异常吗?贴出你的main函数看看?

新人收到了问题并且抛出了你都在说什么异常。

“你还是截图吧。”老鸟说。

这里涉及到了异常栈,编译期,main函数等等再基础不过的知识,有那么部分毫不客气的新人就说了,为什么你不讲得通俗易懂点儿呢?

通俗易懂,是需要成本的。

异常即是程序不期望的异常情况,它处理不了交给程序员自己来处理了。是个再基础不过的数据结构,出现它就说明栈顶的元素,是最后入栈的。那么,看到你出错后控制台抛出的那堆文字没有?贴出来,距离XXXException最近的通常就是最关键的信息。

你看,就算精简为“控制台抛出的那堆文字”,比较起来,是不是“异常栈”更加节约双方的时间,毕竟以当前IT业界的薪资水准,老鸟可能已经浪费了公司好几十块。

更何况,可能有人是连“控制台”都无法理解的,这就涉及到了作用2。

 

2、方便他人界定你的水准

我见过一份简历,quartz、POI、easyUI、jquery等等,写了一堆。这人自己可能觉着,这些名词高端,厉害,可是呢,看看这份技能表:

 

 

就暴露出了他的问题,此人并不懂他所说的这些名词是什么。

至少,一个有基础的程序员就不会写上熟悉xml、json、dom4j技术,也不会把“在线支付”和servlet\jsp放在同一栏下面。他无需长篇累述自己的技能树多么丰满,合适的内容,合理的排版,本身就代表了他的水准。

 

3、解决未知的问题

“有没有例子可以参考?”

“有没有视频教程可以看?”

“能不能帮我远程一下?”

一般来说,挨了这三连怼的老鸟无不火从心起,但凡有例外,要么脾气太好要么姑娘太好看。

合适的解决方案:搜索关键字->查看文档->阅读源码->询问老鸟关键字->*。

从来没到过的问题如何解决呢?或者扩展一下,我写的功能,如何适应未来千奇百怪的需求呢?当然,这其实本质还是个码量和阅读量的问题,篇幅和精力都不足够支撑我讲好这个问题,但凡我说好了,那等同我也写完了一本《Effective Java》。

我把学习分为几个阶段:

基础理解阶段,你看到一个基础知识点,开始理解它的含义,看到具体的实例能反应出它所对应的基础知识。比如看到Animal cat=new Cat()能反应出它体现了如下知识点:声明、实例化、引用、多态。

串联阶段,把知识点串联起来,构建出它本源的样子,比如上面的例子,结合JVM相关知识,脑海里出现一张粗略的堆栈图,就像这幅图:

 

 

 

这样的能力不光可以用于向本源推测,也可以主动的把知识点组合,玩味出新的结构,比如,新需求是“根据配置来产生动物”。

那么,我们分析会有一个根据配置项来产生动物实例的构建工具。代码可能长下面的样子:

Animal animal=AnimalFactory.createAnimal(“猫”);

在createAnimal里,我们对字符串进行if判断,决定到底是new Cat还是new Dog

事实上,这样的结构已经有人总结在了GoF里。诶,GoF是什么?忘了本段是说什么的吗?

进阶阶段,具备串联知识点的能力之后,就应当有看到未知技术逆推具体实现的能力。比如hibernate,它的功能是什么?核心在于“实现持久层和数据层的同步”,也就是说,数据表和JavaBean\POJO的映射。那么,我们来思考,假如从来不存在hibernate类似的ORM框架,要如何实现这个功能呢?

首先,我们要有和数据库沟通的工具和配置,java可以选用jdbc,数据库相关配置可以使用xml、json、bean任意方式。我们也可以看到,hibernate底层就是jdbc,也有Configuration这个配置入口。

然后要有种配置方式让数据表和Bean达成统一。为什么?因为它们的信息量不一致,包含的信息是相交的关系,比如,它们都有类似的数据类型(varchar->String),又有互不相融的内容(索引和约束),得出结论,我们需要一个映射工具,来使相交的部分匹配,并且补充缺失的内容。于是,我们可以推论出,hibernate一定有个映射工具(xml和annotation)。

再后,为了适应多种不同的数据库,每一条语句可能都有不同的表达,比如Oracle有Number(*,*)这个类型,对于mysql就不适用,我们需要设计一个数据库的适配器。在hibernate里,这个部分叫做方言,Dialect。

经过这样的分析过程,不管是实现新的需求,还是分析未知的框架,都具备了理论上的基础。

就我个人的见解,达到这个阶段的程序员,才能称之为合格。

 

小结

道理说多了,来尝尝鸡汤。

没有人有义务帮助你。

乐于助人的老鸟只会帮助有价值的新手,不求反哺,至少要有成就感,是吧?

本就该在大学搞定的内容,为什么要别人花费自己的青春和公司的人工来为你补习?

基础是看上去艰涩玄乎,却是能应用在工作里的东西,切勿忽视。我有个高中老师常把一句话挂在嘴边“现在你记住就好,以后你会懂。”有时候我想,要是那时候听了这话,该多好。

 

目录
相关文章
|
机器学习/深度学习 Linux vr&ar
ARIMA差分自回归移动平均模型
ARIMA是**差分自回归移动平均模型**的引文缩写,其中AR表示的是自回归模型,MA表示的是移动平均模型,I表示的是差分。一般写成ARIMA(p,d,q),p是自回归阶数,q是移动平均阶数,d表示差分的次数。
1763 0
ARIMA差分自回归移动平均模型
|
9月前
|
缓存 Ubuntu 网络安全
使用 Docker 快速搭建最新版 Flarum 论坛
本文分享了使用Docker在4核4GB的Ubuntu 20.04云服务器上搭建Flarum轻论坛的经验。通过Nginx-Proxy和ACME伴侣自动配置SSL,并使用Docker Compose部署Flarum及MariaDB容器。关键步骤包括:创建Nginx-Proxy容器、配置Flarum容器及其环境变量、设置桥网络连接以及更新Flarum版本。文中提供了详细的Docker Compose配置示例和必要的环境变量设置,帮助读者顺利搭建并运行Flarum论坛。
|
Java 应用服务中间件 Maven
从零到英雄:一步步构建你的首个 JSF 应用程序,揭开 JavaServer Faces 的神秘面纱
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的 Java EE 标准,用于构建企业级 Web 应用。它提供了丰富的组件库和声明式页面描述语言 Facelets,便于开发者快速开发功能完善且易于维护的 Web 应用。本文将指导你从零开始构建一个简单的 JSF 应用,包括环境搭建、依赖配置、Managed Bean 编写及 Facelets 页面设计。
259 0
|
存储 SQL 安全
分布式 PostgreSQL,Citus(11.x) 效用函数
分布式 PostgreSQL,Citus(11.x) 效用函数
843 0
|
机器学习/深度学习 人工智能 运维
预约直播 | 流批一体机器学习算法平台Alink介绍及应用
阿里云AI技术分享会第五期《流批一体机器学习算法平台Alink介绍及应用》将在2022年10月12日晚18:00开启直播,精彩不容错过!
预约直播 | 流批一体机器学习算法平台Alink介绍及应用
|
C语言 芯片
STM32 实战之点亮LED
STM32 实战之点亮LED
|
机器学习/深度学习 人工智能 算法
Adobe认证和Adobe软件有什么区别?
Adobe认证和Adobe软件有什么区别?
|
关系型数据库 MySQL Java
ElasticSearch Top Hits
ElasticSearch Top Hits 使用 ES聚合查询展示其他字段
324 0
|
SQL 关系型数据库 MySQL
Mysql进阶优化篇02——索引失效的10种情况及原理(三)
文章目录 1️⃣ 数据库调优的场景 2️⃣数据准备
Mysql进阶优化篇02——索引失效的10种情况及原理(三)
|
SQL 消息中间件 存储
SQL、DML和DDL
SQL、DML和DDL
303 0
SQL、DML和DDL