前言

作为程序员,我们怎么提升我们的代码能力?

在回答这个问题之前,我们需要先给代码能力下一个定义,搞清楚究竟什么是代码能力。只有找对了路才方便发力,很多同学对这个问题其实是不够清楚的。往往会觉得代码能力就是算法能力,就是去刷LeetCode或者是算法题。还有些同学觉得代码能力就是要多刷项目,项目做得多了,代码能力自然就上来了。

其实这两种看法我个人感觉都是有一点误区的,下面简单聊聊我自己的看法,希望能够帮助到大家。

语言基础

很多人看到这里估计要吐槽了,这不是废话么,程序员写代码语言没学会还怎么写代码?

其实还真不是废话,不同的语言有不同的特性,甚至有不同的原理,如果没有对语言基础有比较扎实的掌握,很容易犯一些低级错误。

举个简单的例子好了,之前认识的一个实习生,有一次写了这么一段Python代码,大家不妨看看有什么问题。


def funcA(param):if param is not None:return funcB(param)return Nonedef funcB(param):pass

不知道有多少同学能够看出问题在哪里,有一些同学可能会觉得是is not None的判断不对,应该写成not is None。其实问题不在这里,is not None才是标准判断的写法,只是这个问题当中的障眼法。真正的问题是在函数调用的部分,他把funcB写在了funcA的后面。

funcB写在后面有什么问题?

大家试一下就会知道,这样写Python解释器是会报错的,我们必须要把funcB写在funcA的前面。因为Python不是编译型语言是解释型语言,它是由解释器逐行执行的。所以它会先执行funcA再执行funcB,当它执行funcA的时候会发现funcB这个函数没有出现过,所以会抛出错误。

当时这位同学debug了半天也没有找到问题所在,甚至还一度以为是Python版本的问题。这其实不是他代码能力不行,而是对语言基础掌握不够扎实。

类似的例子非常多,因为每一门语言往往拥有大量自己的特性,如果我们对某一门的语言只是浅尝辄止,那么写出来的代码一定是非常不规范的。比如Java如果不知道抽象类,Python不知道可变参数、装饰器的话,很多时候写出来的代码看起来就是不舒服的,因为没有做到最简,会给人一种费了很大劲实现了一个很基础的功能的感觉。

所以语言基础也是代码能力的基础,大家不要看不起这个,觉得只要会基本的语法会写就可以了。其实这是大错特错的,一些特性和语法糖可能用得少,但是关键时候用起来是可以大大简化代码量以及增加代码可读性的。

代码规范

不知道大家有没有读过那些特别不规范的代码,我读过一些,真的是感觉眼睛被针扎了一样。

代码规范其实更多的不是能力,而是工程师自己的素养。素养高的工程师会自己主动了解当前这门语言的编码规范,绝不会怎么舒服怎么来。大家可以百度一下代码规范,每一门语言基本上都有自己的代码规范,而且这个规范是非常细致的,具体到变量名、类名、方法名、文件名、常量名怎么命名都有对应的规范。

不仅如此,还对一些特殊情况也做了限制,下面是我从Google的Java编码规范当中截取的一段,大家可以看下:

我们写出来的代码和这份规范越贴合,那么可读性也就越强,也就体现我们编码的素养越高。

代码规范其实并不仅仅包含编码的方面,同样还包含其他很多领域。比如数据库的连接池的使用,比如kafka的设置和使用,以及多线程的使用等等,都会有自己的规范。这些内容不仅是起到一个规范作用,当中的每一个点里面都是有对应的原理的,值得我们去深挖学习。

比如很多人都知道数据库需要用数据库连接池,那么请问为什么要用连接池呢?连接池的连接数又是怎么设置呢?其中的原理是什么呢?

看起来好像是面试题,但其中包含的就是我们对数据库连接底层的理解。我们弄懂了可能不仅在编码的时候用得到,也许在以后学习其他内容的时候也能串联起来。知识不是由许多点组成的,知识是一张网,需要把很多点串联起来。在我们串联之前,我们首先需要足够多的积累。

系统能力

系统能力是代码能力当中最高的要求,也是最贴合一个架构师能力的部分。

同样,我们来举个例子。比如你承接了团队当中的一个任务,开发一个新的系统。这个系统需要承接每秒100K请求的访问。这些请求的数据我们不是全部都要,需要做一定的抽样,并且还需要查询一些存储系统进行特征填充。最后把完整的数据存储下来。

现在这个任务交给了你,请问,这当中的性能瓶颈是什么?你该怎么设计这个系统当中的细节?

估计很多同学会把眼光放在100K这个数字上,觉得这个请求量非常大,可能系统能不能抗住是最大的风险点。但其实100K并不是重点,因为这些请求不需要返回,只是单纯的接收,100K并不是非常大。但是当中有许多隐藏的问题,比如说我们抽样怎么抽,是在线抽,还是先把所有请求存储起来一段时间之后再进行抽样?如果是存储起来再抽样,会不会内存扛不住?再比如我们会对存储系统发起的查询请求是什么量级?会不会影响存储系统?

实际上后来实践的过程果然发生了存储系统扛不住,导致抖动很厉害的情况。那这个问题发生了之后,我们又该怎么解决?

对这些问题的敏感、理解以及解决,需要的就是系统能力。也就是我们理解系统的能力,这当中涉及很多,需要我们有一定的操作系统的知识、分布式的知识,还需要对上下游的系统都有一定的了解。比如知道存储系统的性能不是很好,大批量的请求可能扛不住。这当中有一些是经验,更多的还是我们的基础能力。

提升之道

其实这三点看完,相信大家对于怎么提升应该都或多或少地有了一些自己的想法。

说穿了也没有什么大不了的,无非是三点,我们来做个简单的总结。

需要夯实语言基础,对于学习的语言不能浅尝辄止,需要有比较深刻的理解。当然这一点也不是说说而已,肯定需要针对性的做很多练习,也需要阅读其他大牛的代码进行学习。
需要遵守代码规范,不仅仅是变量的命名、一些特殊case的处理,还需要理解一些场景下的系统使用规范
需要充分理解系统,对每一个环节仔细推敲,需要积累一些操作系统、分布式的知识点和技能点。
从这三点总结来看,好像没什么大不了的,每个人都能很轻易做到的样子。但实际情况告诉我们,往往越是简单的道理,越是难以做到,希望大家不要轻视了它们。

如何提升你的代码能力?相关推荐

  1. 深度学习研究生如何快速提升代码能力,写出高效的代码?

    深度学习代码与前端代码区别 深度学习的代码能力与开发后台或者前端的工程代码能力不是一个概念. 写前端代码:脑海中是整个工程的架构,写代码则是把这些架构用 code 具体化. 写深度学习代码:脑海中浮现 ...

  2. 代码流程图_助力理解js代码,进阶JavaScript代码能力——js2flowchart

    引言 js2flowchart 是一个可视化库,可将任何JavaScript代码转换为漂亮的SVG流程图.你可以轻松地利用它学习其他代码.设计你的代码.重构代码.解释代码.这样一个强大的神器,真的值得 ...

  3. 【工作思考】如何提升自己的编程能力?

    文章目录 前言 一.代码评审 为什么要进行代码评审? 二.持续学习能力 三.良好的编程习惯 代码注释 避免深度嵌套 拒绝长函数 重视自测 文档编写 重构你的代码 学会思考 四.多接触开源项目 五.总结 ...

  4. 如何提高代码能力:程序员的成长之路(下)

    继续上篇 6. 持续学习和自我提升 技术行业日新月异,作为程序员需要不断学习和自我提升,以跟上技术的发展潮流,并不断提高自己的代码能力.以下是一些持续学习和自我提升的建议: a. 学习新技术和工具:保 ...

  5. linux中pss用法,使用 pss 提升你的代码搜索能力 | Linux 中国

    原标题:使用 pss 提升你的代码搜索能力 | Linux 中国 搜索代码库是开发者每天都要做的事情.从修改 bug 到学习新代码,或者查看如何调用某个 API,能快速在代码库中导航的能力都是一大助力 ...

  6. 8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法

    8种提升程序猿编程能力的方法 对于程序员来说,提高自己的编程能力,算是给自己定的职业发展目标之一,不过定一个成为编程大神的目标很容易,具体做起来可能就不是一件简单的事了.首先,既然决定"我要 ...

  7. 自我提升解决bug的能力(一)

    我和大家分享一个我的自我提升解决bug的能力(满满的干货).一名优秀的程序员会具备较强解决bug的能力.如果你觉得自己不够优秀,解决bug能力不足,学习处于被动的状态.那我要大声的告诉你请不要迷茫,陷 ...

  8. 该如何提升自己的编程能力?

    这里北大青鸟信狮教育为广大程序猿从某知名网站上搜集了一篇某程序猿发表的关于如何提升自己的编程能力的观点,点赞的人数很多,也希望能对程序猿有所帮助. "计算机科学有两类根本问题.一类是理论:算 ...

  9. java游戏项目分享,适合的零基础java项目,提高你的代码能力

    来了,来了 !!! 你们想要的游戏项目,给你们整理好了!!! (坦克大战.俄罗斯方块.飞机大战.贪吃蛇游戏.黄金矿工.桌球游戏.尚医疗) java基础(必学) 小白入门到精通>>> ...

最新文章

  1. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定
  2. Ubuntu 被曝严重漏洞:切换系统语言+输入几行命令,就能获取 root 权限
  3. 更改IE的默认搜索引擎
  4. SpringBoot异常处理ErrorController详解
  5. python之ORM操作
  6. 康美药业财务造假给股民造成的损失,股民该怎么办?
  7. 【华为云技术分享】《跟唐老师学习云网络》—我的网络概念
  8. 算术运算导致溢出。_【S7200指令教程】数据运算指令ADD SUB MUL DIV
  9. 为什么要避免大事务以及大事务如何解决?
  10. MonkeyTest——简单无脑的移动端自动化测试(初级篇)
  11. 四叶草Clover引导界面的快捷键大全
  12. c++随笔-删除文件
  13. 阿拉伯数字转中文大写的方法
  14. 什么是前向纠错(FEC)?FEC最全解析
  15. 《网络渗透检测第一章 信息收集》
  16. frp点对点udp方式内网穿透ssh,不走服务器流量
  17. 脑波震动(一):头部脑波震动
  18. 教师计算机返岗实践方案,国培计划返岗实践方案
  19. python实现日历功能_Python方法完成农历日历功能代码
  20. 【毕业设计】基于Stm32的家庭气象仪 天气监控系统 - 物联网 单片机 嵌入式

热门文章

  1. 光纤收发器怎么连接?
  2. [渝粤教育] 广东-国家-开放大学 21秋期末考试财政学10573k1
  3. 【渝粤教育】国家开放大学2019年春季 2508学前儿童语言教育 参考试题
  4. 【渝粤教育】电大中专新媒体营销实务 (16)作业 题库
  5. Zigbee 联盟更名为连接标准联盟
  6. php只能写入7字符,如何在PHP 7之前解决“必须是字符串的实例,字符串给定”?...
  7. 最小/大加代数(Min/max-Plus Algebra)
  8. 【通信原理课程设计】8PSK调制解调技术的设计与仿真(MATLAB)
  9. Java基本语法(14)--for循环结构
  10. pythonclass全局变量_python的局部变量,全局变量,类变量,实例变量