偶是不太敢称自己为专家,对于一些软件、框架的掌握,偶甚至都不敢说自己“精通”,最多也就是熟练掌握,倒不是因为偶谦虚,一方面确实认为想要在一个领域达到专家的水平是非常有难度的,自认为达不到这个程度,另外一方面,就是觉得如果是软件、框架这个层次,不一定非要做到专家水平,设置可以说没必要做到专家的程度。
01. 需要多长时间才能熟练掌握一个软件或框架具体给一个时间长度没有意义,因为难易程度不同、每个人的基础不同、学习的背景和出发点不同:
偶认为最快掌握一个框架,就是“被逼无奈”、“走投无路”的时候,为了解决项目上的某个棘手的问题,学习一个作为解决方案的框架或软件,这个过程是最快的;偶曾经开发一个新项目,时间周期特别的紧,项目中需要使用 Kafka,从搭建、集成、使用,再到略加深入的研究,前后大概花了两周的时间;当然,也只能算作“熟练掌握”罢了;
在学习 Kafka 的过程中,因为之前偶对 RabbitMQ 有一定的了解,所以学习起来会比较快,很多的时候偶是在比较两者的不同,而如果对消息队列没有一点了解的程序员学习 Kafka,可能会花费更长的时间;
如果工作中没有特殊的要求,偶学习一门框架的时间可能就长短不一了,可能几天、几周,甚至是几个月,而更多的时候,因为没有碰到过实际的问题,所以你很可能不会把每一个框架都做深入的研究。
02. 为什么说软件、框架这个层次,不一定非要做到专家水平跟其他的行业相比,软件行业的变化很快,技术更新的频率极高,比如医生可以始终在某一个非常小的领域进行研究,偶就研究眼科,或者就一直做牙医,做一辈子,成为眼科的专家,但是程序员不行,你说偶一辈子就研究 Spring 吧,将自己的技术积累押宝在当前某一个流行的软件或框架上,这个风险非常大;短期内可能会有成效,但是大家的职业寿命要四十年甚至更长。
有些程序员在某些大公司混的风生水起,非常熟悉公司的技术栈,但是当他换一个公司、换一个平台的时候,可能就会遇到发展的瓶颈;这是因为作为的“某一领域的专家”,只是依赖于当前公司这个平台,但不一定可以匹配市场的需求,错把平台资源当成自己的能力。
那大家究竟应该学习什么?偶十几年前刚成为 Java 程序员的时候,最流行的就要数 SSH 了,也就是 Spring 、Struts 和 Hibernate,现在再看看,Struts 几乎绝迹,Hibernate 半死不活,Spring 虽然很火,也是因为版本迭代的很快;
所以十年前偶要是选择了一直研究 Spring 还好,要是选择押宝了 Struts ……
软件、框架的更新时很快的,大家不能把主要的精力放在它们身上。
在学习 Spring Cloud 、Dubbo 的时候,也要学习架构设计和演变;
在学习编程语言的时候,也要学习设计模式;
在学习通信框架的时候,也要把网络模型学习好;
学习 Angular、React、Vue 一堆框架,不如先把精力放在 HTML/CSS 上…
总之,基础打得牢,框架学的快,不要把百分百的精力都放在这些不断变化的框架上。
偶将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。