你的代码水平停留在几年前?
互联网是一个飞速发展的领域,程序员如果跟不上时代很容易被淘汰。
到底该学什么技术?
我相信每个程序员都有一段迷茫期,技术发展这么快,到底应该学习什么技术?刚开始学 Java web 的时候,我们都学过SSH,但是现在再来看,Struts 基本白学了,Hibernate 差不多也不用了,只有 Spring 是收益最高的。我相信很多学 web 编程的人还学过 vbscript,现在来看基本也没有什么用了。
与此同时,我们还要学习很多新技术。运维人员以前只要会点Linux shell 就行,现在必须会 Docker,k8s。前端人员以前会点 jQuery 就行,现在必须会 Node,React 等。
互联网发展的淘汰的速度如此之快,我们昨天还在拼命学习的东西,今天就没人用了,那么到底应该学什么?怎么学习?
谈谈我的几个观点
1. 颠覆性技术出现,一定要跟进。不一定要精通,但是基本的了解一定要有。比如最近出现的区块链、AI这种新的领域。还有在老的领域中的新技术,比如前端的 webpack、mvvm,后端的 Spring Boot、Spring Cloud、Docker、k8s等。你需要去了解这些技术,并且弄明白它为什么火,而其他技术为什么没落了。
2. 不要只关注共性,主要研究新技术独特之处。比如很多学后端的是 C 出身,后来学习 Java,这时候应该把重点放在虚拟机,接口上面,而不是数据类型,控制语句等。再学习 Node 的时候,应该注重单线程模型,回调处理。再学习 Go 的时候,注重 goroutine 并发。如果学了4种语言,都只能写点Hello World,if else,其实和只学一种没有区别。
3. 基础知识要深入研究。第2条讲的是学习新技术的时候要研究新技术的特别之处,但是并不意味着基础就不需要研究。相反,很多地方都用到的基础知识,一定要刨根问底。比如我们在写 web 前端、web 后端、配置 nginx 时,都绕不开 http 和 https 协议。所以 http 和 https 作为几项技术基础就有必要深入研究。
但是懂得很多语言,知道很多技术,不一定能写出高水平代码。
代码水平如何衡量?
我很多时候都在想什么样的代码是好代码,什么样的系统是好的系统。一个完全没有 bug 的系统是不存在的。我想一个好的系统是可调试的、可扩展的、可配置的,好的代码是可读的、鲁棒性强的、松耦合的、可测试的、可以快速定位的。
可以运行,没有故障的系统肯定是好的系统。但是没有故障几乎是不可能的,我觉得好系统的另一个指标就是出故障了能够快速找到问题代码,并且能够快速进行故障恢复。
而我们在设计系统或者写代码的时候就要考虑这些因素,好的代码其实很多时候就取决于写代码那个人的代码素养。
什么是代码素养?
很简单的一个数学问题,4的平方根是多少?有多少人会回答2呢?
写代码也是一样,很多人都只会考虑一种情况,这其实不是智商也不是能力问题,只是考虑问题的时候是否严谨。当你告诉他这个地方需要判空,那个地方需要加 try catch 的时候,他往往不以为然,觉得这只是一时没考虑到而已。
很不幸,这种素养很难短时间内养成,而这种没有代码素养的人,写大项目或者复杂系统,写出来的代码将是灾难。
就像一堆沙子,你把水倒进去,你根本不知道哪里在漏水,但是到处都在漏水,水一下子就没了,你只能推翻重写。而好的代码应该像一块铁板,水倒上去滴水不漏。
代码素养只能靠平时慢慢积累,多看别人是怎么处理细节的,自己写完代码后多想想 test case,多多测试。
代码水平绝对不是会多少种语言,会多少个框架。而是你在写代码的时候的种种思考,对细节的处理,对各种情况的判断,代码的清晰程度等等。
所以,你的代码水平提升了吗?
转载声明:本文转载自公众号【程序员私房菜】。
原文链接:https://mp.weixin.qq.com/s/JEO_ZKGzKlFps-6HCtemcA
- 点赞
- 收藏
- 关注作者
评论(0)