从一件小事看工程意识

2019 年 5 月 9 日 余晟以为

我经常开玩笑说,如果“工程师”也分种类的话,那么“软件工程师”看来是门槛最低的工程师了。

在“软件工程师”兴起之前,“工程师”是正式职称,需要经过专门考试的,内容不但包括专业知识,还有英语水平等等,之后还要申报、审批才能通过。严格说起来,“工程师”包括是一系列职称,从助理工程师,到工程师,到高级工程师,每一级都有严格的考评标准。你可以说它僵化、死板,但好歹有明确的规范。

“软件工程师”就不太一样了。差不多二十年前,大家还要去考“软件设计师”、“系统分析师”之类的考试,不用评审就可以获得相对应的职称。如今,似乎会写点代码就可以叫“工程师”了。

以前,评书大师单田芳常说:”会两下武把抄,就以为自己是侠剑客,打算行走江湖了?做梦!”单老的话有没有过时我不知道,但我能确定的是,不少“工程师”确实是缺乏工程意识的。从工作中的许多细节,都可以看出来。前些年,我们合作的开发团队就出过这种问题。

当时,合作团队的程序员用C#写了一段程序,访问某个RESTful接口总是拿不到想要的结果。本来我们认为,这个问题虽然诡异,但调起来并不麻烦,半个小时足够定义问题了。结果过了大半天,对方答复“还在调”,这意味着我们还只能继续干等……

为了保证进度,我派了一名架构师去提供帮助。他回来告诉我说:搞清楚了,原来他们一直在改C#代码,失败了就上网查,然后调整各种参数,再编译、部署、测试,试了很多次还是搞不定,现在还不确定到底是调用端问题还是服务端问题……

我说:怎么能这样呢,既然是RESTful的接口,用其它HTTP工具调试就可以了,cURL也可以呀。

架构师说:对呀,就应该这么调嘛。我也是这么跟他说的,但他们很执着,一定要用C#程序代码来定位问题……

在我看来,这就是典型的“会写代码但没有工程意识”的例子。在工程的世界里,比工具更重要的是知识和思维,是对世界的理解。既然是RESTful的接口,既然是走HTTP访问,那么重要的是按协议来判断,而不是限制在某个具体实现中尝试。即便最后确定是特定实现的问题,在分析问题时按照从上到下、从粗到细的顺序来,也可以迅速定位,而不用反复尝试。

当然我也理解,许多“工程师”更习惯的是写代码,用代码去解决各种问题,对编程语言之外的世界并不是很清楚。所以,如果按照编程语言的逻辑“应该是这样”,但现实却不如预期,他们往往束手无策。道理虽然如此,但解决不了实际问题,确实有点愧对“工程师”的称号。

对大部分从事互联网开发的程序员来说,一个共同的盲区就是网络相关的知识,我曾在公司里组织过专门的网络相关知识培训,发现这方面缺口很大,大家获益也很多。而且,就算有了解也不见得可以完全放心,网络的逻辑和代码的逻辑相差太多了,虽然我对网络也算略懂,但还是踩过大坑的。

有一次遇到一台远程的服务器,同机房的其它服务器可以访问,服务也正常,本地访问时,虽然ping正常,但是所有服务都不能访问,全部超时,只能通过其它机器来中转。

一开始大家也是各种排查,软件兼容性、系统兼容性等等,结果一无所获。这一次我有点经验了,想起去问问熟悉网络的朋友。他听完眯缝了一下眼睛,悠悠地说:你是不是开启了TCP参数里的tcp_timestamps?

我们再一次怀着将信将疑的态度去检查内核参数,果然,tcp_timestamps设置为1了。改掉这个设置之后,问题立刻消失,一切正常。从此我们都知道了,tcp的参数不是上网搜搜,照着改改就足够的。在写TCP相关的代码时,我们大多不会注意这点,但排错时,不清楚这点可能就得费大周折。

关于网络相关的知识,我之前推荐过一些书,也写过若干文章。正好,最近极客时间推出了《Web协议详解与抓包实战》的视频课。如果下面的问题也让你困惑,或者你有兴趣了解,不妨认真考虑。


你有没有这些困惑?

  • AJAX 跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么?

  • 缓存可以提升性能,但什么样的 HTTP 消息才会被浏览器或者代理服务器缓存呢?

  • 抓包时收到 4xx 或者 5xx HTTP 响应码,这意味着服务器端发生了什么?

  • 当我们维护 HTTPS 连接时,如果要优化TLS/SSL 的卸载性能,应该从哪里入手?

  • 定位问题时,发现本地的 TCP 连接状态中出现了FIN_WAIT、CLOSE_WAIT 或者TIME_WAIT,都是什么原因引起的?应该如何解决?

  • 想要提升 TCP 连接的传输速度,可服务器上相关的系统参数多达数十个,究竟该怎么调整?

  • 时下逐渐普及的 IPv6 ,在报文上到底与 IPv4 协议有何差别?

陶辉是谁?

陶辉,现在是智链达 CTO。他曾担任阿里云高级专家,也在华为、腾讯、思科等公司从事过服务器端的研发工作。相信陶辉来讲 Web 协议详解与抓包实战,一定会带给你不一样的收获。为什么这么说?

  • 在华为他负责 iMAP 网管系统的研发,在通过 SNMP 等协议管理众多网络设备的过程中,对路由器交换机如何处理协议栈、选择路由、转发报文等流程有了深入的理解;

  • 在腾讯QQ空间,通过使用自定义的、基于 TCP 的 Qzone 协议传递巨量的数据,他对如何设计出高性能、可扩展的应用协议有了丰富的实践经验;

  • 在思科他从事 Nginx 服务的研发,对 Web 服务器如何高效地处理 HTTP 协议有了全面的认识;

  • 在阿里云作为 VPC 软件自定义网络项目中的管理系统架构师,他通过基于 Intel DPDK 自建网关、自定义网络层协议等工作,对 IDC 内部网络系统有了深刻了解。

在《Web 协议详解与抓包实战》视频课中,陶辉老师会把自己十几年积累的第一手经验毫无保留地分享给大家。

课程目录


限时订阅福利

1.限时优惠 ¥99(原价¥129),另外,新用户还能获得 5 元优惠券,购买专栏更便宜。

2.再强调一下,上新优惠,只需 ¥99,原价要¥129。

点「阅读原文」,立即试看或订阅。

登录查看更多
0

相关内容

程序员(俗称“码农”)有专业和业余之分,而软件工程师(Software Engineer)是一种比较正式的称谓,也是专业(职业)程序员的别称。软件工程师有时也被称作软件设计师。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【硬核书】不完全信息决策理论,467页pdf
专知会员服务
348+阅读 · 2020年6月24日
【经典书】贝叶斯编程,378页pdf,Bayesian Programming
专知会员服务
247+阅读 · 2020年5月18日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
34+阅读 · 2020年4月5日
专知会员服务
123+阅读 · 2020年3月26日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
【新加坡国立大学】深度学习时代数据库:挑战与机会
专知会员服务
33+阅读 · 2020年3月6日
前端微服务在字节跳动的落地之路
前端之巅
41+阅读 · 2019年9月19日
阿里技术专家:优秀工程师是怎样炼成的?
51CTO博客
8+阅读 · 2019年6月15日
深海打捞K-129,冷战中的奇迹工程【六】
余晟以为
12+阅读 · 2019年5月31日
深海打捞K-129,冷战中的奇迹工程【四】
余晟以为
6+阅读 · 2019年5月21日
我在知识星球这一年
码农翻身
10+阅读 · 2019年2月28日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
这是我看过解释TensorFlow最透彻的文章!
AI前线
6+阅读 · 2018年6月27日
SVM大解密(附代码和公式)
AI100
6+阅读 · 2018年4月7日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
16+阅读 · 2018年2月7日
Arxiv
9+阅读 · 2016年10月27日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【硬核书】不完全信息决策理论,467页pdf
专知会员服务
348+阅读 · 2020年6月24日
【经典书】贝叶斯编程,378页pdf,Bayesian Programming
专知会员服务
247+阅读 · 2020年5月18日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
34+阅读 · 2020年4月5日
专知会员服务
123+阅读 · 2020年3月26日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
【新加坡国立大学】深度学习时代数据库:挑战与机会
专知会员服务
33+阅读 · 2020年3月6日
相关资讯
前端微服务在字节跳动的落地之路
前端之巅
41+阅读 · 2019年9月19日
阿里技术专家:优秀工程师是怎样炼成的?
51CTO博客
8+阅读 · 2019年6月15日
深海打捞K-129,冷战中的奇迹工程【六】
余晟以为
12+阅读 · 2019年5月31日
深海打捞K-129,冷战中的奇迹工程【四】
余晟以为
6+阅读 · 2019年5月21日
我在知识星球这一年
码农翻身
10+阅读 · 2019年2月28日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
这是我看过解释TensorFlow最透彻的文章!
AI前线
6+阅读 · 2018年6月27日
SVM大解密(附代码和公式)
AI100
6+阅读 · 2018年4月7日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Top
微信扫码咨询专知VIP会员