前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础能力决定了程序员发展空间2

基础能力决定了程序员发展空间2

作者头像
用户5829239
发布2019-11-13 13:54:40
4600
发布2019-11-13 13:54:40
举报
文章被收录于专栏:可持续开发可持续开发

在”基础能力决定了程序员发展空间”里面,谈论了基础知识对程序员成长的重要性,本文举例说明一下,让大家更容易理解基础能力的重要性。

公司有一个车载OBD的项目,之前使用的是人家的上位机(和车载OBD通信的服务器模块),为了支持更多的OBD设备,公司最近开始自己开发上位机,这就需要开发人员读懂上位机通信协议,这种通信协议是基于二进制数据格式的,对于之前没有协议经验的人,有一定的挑战。公司负责开发的人是一个只有2年工作经验的后台,之前从来没有这方面的经验。其实做好这个上位机需要具备几个基础能力,多线程基础知识,因为系统需要支持上万台在线设备,而且还需要高并发能力,还有一个就是协议理解能力。当然还有其它能力,比如TCP/IP的基础能力,因为排查问题是需要懂TCP/IP的,虽然使用了Netty框架,但解决问题是必须理解Netty的线程结构,还有TCP/IP通信的一些处理机制的。下面只讲讲协议的理解部分,我要求该程序员要先读懂协议,然后讲给我听,但第一次讨论,发现他根本没有找到重点,说自己都读懂了,看完了,经不住我2个问题。这样做,其实我是希望锻炼他自己的学习能力,希望他自己能够多发现问题,然后自己在关键点再点拨一下。

我给他一天来看这个协议,然后我自己花了5分种看这个协议,结果是他没有发现任何重点地方,我帮他把重点的地方梳理了一下。其实这种差异就在于基础能力不同,大学毕业不久我就仔细阅读了英文版的TCP/IP原理讲解和源码,相比TCP/IP的协议栈,这个协议简直太简单了,这就是基础能力的作用。要突破自己,是需要登高山的,去挑战最高的山峰,即使不能征服,也会增强你日后登其它山峰的信心。这个思路就是,通过去学习一些优质的软件,把握和发现一些人家的精妙的地方,然后去类推应用到后面自己的项目当中,因为很多协议设计的思路是相通的,掌握了这些思路,就掌握了精髓。掌握这些思路,必须去理解这些设计背后的应用场景,为什么这样设计,为什么不那样设计,不要只是简单的记住是这样的,需要多思考为啥是这样的,下面就拿OBD协议举例说明一下这种相通性。

1. 标识位转义普遍存在协议设计当中

2. 数据包切分合并

数据包切分合并在TCP/IP里面也存在,而且比这里设计复杂更多,为了保证数据包顺序,双向数据包都有序号,因为不同网段最大包大小不同,中途的路由器都可能切分大的数据包,标识好序号,接收方需要根据序号拼接起来。OBD协议设计了切包功能,也是因为传输的数据量会有变化,而且网络带宽情况也会有差异,对数据包进行切分,防止出现大包堵塞通道的问题。对于这个关键点,之所以我可以更加理解深刻,因为基础能力扎实。如果程序员开发的时候没有关注这种关键点,就会存在丢包的可能性,而数据包切分不一定总是发生,就导致了程序在开发测试环节都没有问题,但生产环境会存在失效的可能。软件的稳定性取决于开发设计人员对目标域问题理解的缜密性,前期设计时候思考越缜密,则后期软件越稳定,太多的疑难BUG都是因为开发人员的基础能力不足导致的。

上面就举两个例子说明一下,其实这种关键点太多太多,比如之前团队在使用消息队列出现了一个问题,花了将近一个礼拜才解决。问题的原因是之前的程序员对消息队列读操作函数理解不足,人为的读取了队列的首个消息,而把后面的忽略了。在开发和测试环节没有出现问题,因为消息少,当读取消息的时候,往往 都是只有一个消息,问题没有暴露,但在生产环境因为消息多,导致问题的发生。

我很讨厌程序员的一个口头禅,”我这里明明没有问题呀”,客户要的不是你那里没有问题,客户要的是他那里不出现问题。软件开发和设计软件需要能够从客户使用环境来思考问题,当然做到这点,基础能力是必须的,具体论述请您参看”测试是对思维严密性的考验”。

基础知识能力在问题排查中是至关重要的,很多程序员喜欢遇到问题去百度找,找不到就靠猜解决问题,不但非常耗时,而且多数情况不一定能够彻底解决问题。写了这几篇强调基础知识的文章,就是希望更多的程序员去加强基础知识,不要怕难,该去读源码就去啃。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可持续开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档