工作这几年来,经历了很多。从小白到中级(手机里有一款叫中国象棋的游戏,里面给对弈中电脑水平分为小白、菜鸟、新手、入门、初级、中级、高级、大师、特级大师,编程我暂且按照这样来区分)。
学校教给我的是从小白到入门(当然也不乏某些学霸直接跳过这些成为高级甚至大师级别,就大多数普通人来说都是从小白到入门)。
但每个人从小白到入门的过程是不一样的。有的人是天资聪明,也有的人是基础牢固(如果你数理化很不错,那么学编程也是一件很容易的事情),还有的人是勤奋苦练(我觉得我就属于这一类的)。
后来毕业后的第一份工作让我成为一名初级程序员,经过几年的磨练后,算是成为一个中级程序员。
为什么是”算是”而不是”是”?按照年限来说,一年初级,三年中级,五年高级。那么我达到了三年,刚好是中级。
三年的中级,让我有了独立开发网站的能力。
独立开发网站的能力包括哪些?需求理解、需求分析、数据建模。
前后端开发能力(包含开发过程中的问题解决)。
运维能力(写一个项目部署到Linux服务器、搭建各种软件环境和安装各种软件、监控服务器(CPU、内存、硬盘、软件运行是否正常)、线上问题排查等)。
测试能力(功能测试、性能测试(压测))。
一定的项目管理能力。
技术选型和框架搭建能力。
二次开发能力。
“抄”能力。
但三年的中级并未让我感到多么的高兴,因为于我而言还有很多要学习的,远远还没达到我心目中的”中级”。
不过有一点我还是很庆幸,因为这三年以来我还是处于不断成长当中。并没有将一年的工作经验重复三年。
这三年当中,给了我很多教训,也让我思考很多,于是便有了今天这篇文章。
回归正题,作为Java程序员,我觉得有两项通用能力,这两项通用能力,如果让大家来说?有人会说:
编码能力(点(算法)、线(设计模式、组织代码)、面(框架和学习、理解和应用)、体(操作系统、计算机网络、编译原理等))
业务能力(理解需求或问题能力、沟通和协调资源能力、预估和安排计划能力、调研和解决问题能力)
也有人会说:
学习能力
解决问题能力
沟通能力
我今天所说的两项通用能力,不是沟通,也不是学习,也不是解决问题。而是深入理解Java和数据库。
因为在我看来学习能力、解决问题能力、沟通能力这些,是一个人无论工作也好还是上学也罢,必需的能力(就好像穿衣吃饭是必需的,无时无刻我们不在学,不仅仅是工作也包括生活,无时无刻我们不在解决问题,不仅仅是工作也包括生活,无时无刻我们不在沟通,不仅仅是工作也包括生活)。
如果一个人22岁工作(上了四年大学),按照60岁的退休标准,职业生涯长达38年。
另外作为IT来说,就国内这个环境,大多数程序员不可能一辈子都是程序员(有人干了几年干不动了转行了,有人走向管理层,有人继续搞技术)。
同时程序员也不一定60岁退休,也许50岁或者40多岁。那么怎么算,至少20年。
20年时间,世界会发生天翻地覆的变化。人不学习很难适应社会。
学习的目的可以理解为两个方面,一个是不想被世界淘汰,另一个方面是不被解雇(工作是为了生存,也是为了生活,但是老板雇佣你来是解决问题的而非制造问题)。
社会是共同生活的人们通过各种各样社会关系联合起来的集合(这样看来沟通是必不可少的)。
为什么说Java和数据库是Java程序员的通用能力?我的理由如下:
第一、熟练掌握并深入理解一门编程语言决定你能走多远。
第二、任何商业应用软件都需要存储,而且数据库是最多的,而其中SQL能力是基础,也是最重要的一个。
为什么说熟练掌握并深入理解一门编程语言能决定你能走多远呢?第一、当你熟练掌握一门编程语言时,接下来你去学其它的编程语言,你会发现是一件非常容易的事情(因为编程语言有很多共通之处)。
第二、学习和使用该编程语言相关框架也是一件非常容易的事情。
那么最难的是什么?是理解,理解这门编程语言。
理解包含两个方面,一个是浅度,另一个是深度。
作为一个Java程序员,说真的,我对Java至今都处于浅度方面的理解而非深度(对于深度,我觉得读懂源码是必要条件)。
同时我也觉得不少人和我一样处于浅度理解。浅度理解并不影响实际开发工作的展开(但有些时候却成为生产宕机或突发问题的原因,我曾经的一个代码问题就把生产环境搞乱了),也不影响学习任意的框架或其它。
其实,我很痛恨浅度。因为浅度是一件很有危害的事情。原因如下:
程序是由算法和数据结构组成,而开发软件中你不一定会用算法,但是数据结构是必不可少的,如字符串、链表、数组、哈希、堆、栈、树等