从一件小事看工程意识

余晟 余晟以为 Today

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

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

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

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

当时,合作团队的程序员用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 协议详解与抓包实战》视频课中,陶辉老师会把自己十几年积累的第一手经验毫无保留地分享给大家。

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


订阅 substack 体验古早写作:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::