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

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

本文转自(http://www.cnblogs.com/anrainie/p/5606570.html

一、想到哪儿写到哪儿

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

基础有什么用?

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。

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

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

小结

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

没有人有义务帮助你。

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

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

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

时间: 2024-11-01 11:59:28

[转]基础知识漫谈(1): 想到哪儿写到哪儿的相关文章

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

一.想到哪儿写到哪儿 给公司新员工培训,和网上的新手做交流,我最先强调的都是基础. 基础有什么用? 1.节省沟通成本 有天,java群里来了个新人,上来就提了一个问题: “我代码跑不起来,怎么办?” 这一看就是还没入门,没办法提供具体的信息. 于是有个有耐心的老鸟出来了,开始了一连串提问:异常栈看一下?有编译期异常吗?贴出你的main函数看看? 新人收到了问题并且抛出了你都在说什么异常. “你还是截图吧.”老鸟说. 这里涉及到了异常栈,编译期,main函数等等再基础不过的知识,有那么部分毫不客气

JAVA 蔡羽 基础知识漫谈

基础知识漫谈(1): 想到哪儿写到哪儿 http://www.cnblogs.com/anrainie/p/5606570.html 基础知识漫谈(2):从设计UI框架开始 http://www.cnblogs.com/anrainie/p/5609958.html 基础知识漫谈(3) 组合基础知识,设计游戏框架 http://www.cnblogs.com/anrainie/p/5614461.html 基础知识漫谈(4):讲讲元数据 http://www.cnblogs.com/anrain

基础知识漫谈(2):从设计UI框架开始

说UI能延展出一丢丢的东西来,光java就有swing,swt/jface乃至javafx等等UI toolkit,在桌面上它们甚至都不是主流,在web端又有canvas.svg等等. 基于这些UI工具包\框架,又产生了大量通用的或者业务性的UI框架,比如Draw2d.GEF.easyUI乃至国内的EChart.白鹭等等. 这些框架的业务范围各异,一个程序员的时间和精力有限,你不可能全部都掌握,又不能预言出是哪一个将来会独步天下,甚至,连当前哪一个最流行,都够打一阵嘴炮. 那,我们应该学什么?

基础知识漫谈(4):讲讲元数据

说几个风马牛不相及的词儿,spring的依赖注入定义,hibernate的数据映射定义,XML的DTD,再就是我们常说的报文格式. 如果对它们不甚了解,请参考章节一<想到哪儿写到哪儿>.有了基本的了解之后,应当隐约之中有一种感觉,“它们很相似”. 本篇文章要说的就是这个相似性,我管它叫做数据格式\元数据,DataSchema\MetaData.当然,元数据的定义是要大于数据格式的,本文将它们当成同一个概念. 什么是数据格式?看看这段XML(1): <Bean type=”com.nlo.

嵌入式中烧写程序的基础知识有哪些

在嵌入式的基础知识学习中,烧写程序是必备的知识点之一,需要把写的程序代码烧写到单片机上,在单片机上检验写的程序代码是否正确,是否能够正常运行,下面我们来学习下什么是烧写和固件.常见的几种烧写方式.三种编程方式的区别. 简单整理下固件.烧写的定义以及烧写过程的几种方式. 一.什么是烧写(下载)和固件 嵌入式系统需要预先将程序写入ROM/FLASH中,在启动时载入运行这些程序,将已经生成的程序写入ROM/FLASH的过程叫做烧写.这样固化在存储介质上的文件叫固件(firmware).那么烧写即为更新

C++文件基础知识

一切皆文件,对象和文件的前世今生是一个怎么样的故事?它们之间有什么样的爱恨情仇?...最近在追<国家宝藏>,情不自禁了. 因为之前对C++文件的相关操作一直没重视,写自己paper idea的时候,"书到用时方恨少"的感觉特别强烈,所以系统地学习了文件的基础知识.下面是自己写的一个读取文件内容,并保存到vector<vector<double>>中的代码. #pragma once#include<iostream>#include<

计算机基础知识对编程的重要性

码农和架构师的差别在哪里 从题目看文章,大家的第一想法是本篇文章是一篇讲述计算机基础知识和编程之间的关系,但是为什么开篇是这样的呢?当然这样的开篇并没有多大的意义,唯一的目的就是吸引读者而已. 纵观计算机专业的学生在毕业之后大多数会走向编写程序的道路,当然也会有部分同学有自己更感兴趣的事情,从而在毕业之后选择其他的职业.在这里根据我个人在毕业之后的编写程序的道路,写下一点总结,希望能和大家交流,有什么不对的地方,希望大家能给我指正,因为我个人觉得"三人行必有我师"是一句很有道理的话,每

写kibana4插件——基础知识

Writing Kibana 4 Plugins – Basics 从kibana4.2.0以上,可以为kibana编写自定义插件,并未所有kibana用户提供.本教程系列将引导您完成编写第一个插件的过程,并向您展示插件提供的一些可能性,例如添加自定义可视化,编写新的"应用程序"(从4.2.0开始,就你所知,Kibana本身和你喜欢它仅仅作为框架中的一个应用程序),或者在可视化的检查窗格中添加新的选项卡. 严重警告:Kibana提供了一个关于如何从4.2.0安装插件的界面.它不提供公共

Juniper-R&S-BGP:一些写在前头的基础知识

AS (autonomous system)自治系统 BGP提供环路防护机制(使用AS-Path属性) 一个AS,实际上就是路由器设置的一个控制和管理域.一个单独的管理域可以使用一个AS号来定义,并且只能赋予一个AS号. 应为BGP使用AS这个属性来标示路线,所以BGP又叫路径矢量路由协议Path-Vector Protocols. BGP路由协议的特性(待补充) BGP路由协议由很强的操控性 可靠传输:BGP使用TCP协议(TCP 179端口),TCP本身的特性(三次握手.ACK.序列号.校验