大家好,今天跟大家聊一个常见的话题。作为程序员,我们如何提高自己的编码能力呢?在回答这个问题之前,我们需要先给编码能力下一个定义,搞清楚什么是编码能力。只有找到正确的道路,你才能发挥自己的力量。很多同学其实对这个问题还不够清楚。我经常认为编码能力就是算法能力,也就是刷LeetCode或者算法题。也有一些同学认为,编码能力就是多做项目。项目多了,代码能力自然就上来了。其实我个人觉得这两种观点有点误会。我简单说一下自己的看法,希望对大家有所帮助。LanguageBasics很多人看到这里都会吐槽。这不是废话吗?程序员不学习编码语言怎么写代码呢?事实上,这真的不是废话。不同的语言有不同的特点,甚至有不同的原理。如果没有扎实的语言基础,很容易犯一些低级错误。让我给你一个简单的例子。之前认识的一个实习生写过这样一段Python代码。你不妨看看哪里出了问题。deffuncA(param):ifparamisnotNone:returnfuncB(param)returnNonedeffuncB(param):pass不知道有多少同学能看出问题出在哪里。有的同学可能会觉得判断isnotNone是错误的,应该写成notisNone。其实问题不在这里。isnotNone是标准的判断写法,只是在这道题中蒙了眼。真正的问题出在函数调用的部分,他在funcA之后写了funcB。后面写funcB有什么问题?你试试就知道了,Python解释器会这样报错。我们必须在funcA前面写funcB。因为Python不是编译型语言而是解释型语言,它是由解释器逐行执行的。所以它会先执行funcA,再执行funcB。当它执行funcA的时候,会发现函数funcB还没有出现,所以会报错。当时这位同学调试了半天也没找到问题所在,甚至还以为是Python版本的问题。这不是因为他的编码能力不好,而是因为他没有扎实地掌握语言基础。类似的例子还有很多,因为每一种语言往往都有大量自己的特点。如果我们只是对某一种语言有所体会,那么写出来的代码肯定是非常不规范的。比如Java不知道抽象类,Python不知道可变参数和装饰器,写出来的代码往往看起来不舒服,因为它不是最简单的,而且会让人费很大力气去实现。感觉是一个很基础的功能。因此,语言基础也是编码能力的基础。别小看这一点,认为只要会基本语法,会写字就可以了。其实这是大错特错。有些特性和语法糖可能用得少,但在关键时候用到,可以大大简化代码大小,增加代码的可读性。代码规范不知道大家有没有看过那些特别不规范的代码。看了一些,真觉得眼睛被针扎了一样。其实代码规范更多的不是能力,而是工程师本身的素质。素养高的工程师会主动去了解语言目前的编码标准,永远不会这么舒服。可以百度查看代码规范。基本上每种语言都有自己的代码规范,而且这个规范非常详细。变量名、类名、方法名、文件名、常量名都有相应的名称。规格。不仅如此,对于一些特殊情况还有限制。以下是我从谷歌的Java编码规范中截取的一段话。你可以看一下:我们写的代码越符合这个规范,可读性越强,我们的编码素养就会越高。事实上,代码规范不仅仅包括编码方面,还包括其他很多领域。比如数据库的连接池的使用,比如Kafka的设置和使用,以及多线程的使用等等,都会有自己的规范。这些内容不仅起着规范作用,而且其中的每一点都有相应的原则,值得我们深入挖掘和学习。比如很多人都知道数据库需要用到数据库连接池,那为什么要用连接池呢?如何设置连接池中的连接数?原理是什么?看似一道面试题,其实包含了我们对数据库连接底层的理解。我们了解到,可能不仅仅在编码的时候用到,以后学习其他内容的时候也可能串联起来使用。知识不是由很多点组成的,知识是一张网,需要很多点串联起来。在我们进行串联之前,我们首先需要足够的积累。系统能力系统能力是代码能力中要求最高的,也是架构师能力中最适合的部分。再举个例子。例如,你在团队中承担了开发新系统的任务。本系统需要承担每秒100K请求的访问。我们不需要所有请求的数据,我们需要做一定的采样,还需要查询一些存储系统进行特征填充。最后,存储完整的数据。现在这个任务交给你了。请问,性能瓶颈是什么?你如何设计这个系统的细节?估计很多同学会把注意力放在100K的数量上,认为请求量很大,系统可能能否抗住是最大的风险点。但其实100K并不是重点,因为这些请求不需要返回,只是接收而已,100K并不是很大。但是隐藏的问题很多。例如,我们如何采样?我们是在线抽样,还是在抽样前将所有请求存储一段时间?如果先存储再采样,内存会不会装不下?另一个例子,我们向存储系统发起的查询请求的数量级是多少?会不会影响存储系统?事实上,在后来的实践过程中,存储系统无法处理,导致严重抖动。出现这个问题后,我们应该如何解决呢?对这些问题的敏感性、理解和解决需要系统能力。也就是我们对系统的理解能力,这里面牵扯很多,需要我们对操作系统、分布式知识有一定的了解,对上下游系统有一定的了解。例如,知道存储系统的性能不是很好,可能无法处理大量的请求。这一部分是经验,更多的是我们的基本能力。提升之道其实看完这三点,相信大家应该对如何提升有了一些自己的想法。说白了,没什么大不了的,无非就是三点,简单总结一下吧。语言基础要扎实,所学的语言不能只局限于一点点,而是要有更深的理解。当然,这不仅仅是说说而已。肯定需要大量的针对性练习,还需要看其他大牛的代码来学习。需要遵守代码规范,不仅是变量的命名和一些特殊情况的处理,还需要了解一些场景下的系统使用规范。需要充分了解系统,仔细考虑每一个环节。需要积累一些操作系统和分布式的知识。点数和技能点数。从这三点总结来看,似乎没什么大不了的,大家都可以轻松做到。但实际情况告诉我们,道理越简单,实现起来就越难。我希望你不要低估他们。本文转载自微信公众号「TechFlow」,可通过以下二维码关注。转载请联系TechFlow公众号。
