潘爱民:计算机程序的演进——我的程序人生三十年( 三 )

  • 网络开始普及 , 家庭和很多公共场所都有了网络 , 连接的方式可以是一根线 , 也可以是 Wi-Fi 无线 。 在这样的条件下 , 越来越多的程序加上了网络的能力 , 网络编程逐渐普及 , 但仍然属于高级编程技术 。 不过 , 通过很多中间件 , 编程门槛已经降低 。
  • 移动数据网络的普及 。 网络的进步是全面的 , 包括硬件基础设施和软件栈 。 移动数据网络相对不稳定 , 这对于软件编程是一个挑战 , 其复杂性来自于两个方面:对网络异常的处理 , 以及网络连接涉及到两方协同 。 然而 , 得益于移动操作系统原生提供的网络基础功能 , 网络编程的门槛被大大降低 。
  • 其次 , 网络的思想与操作系统密不可分 , 两者的演进更是紧密关联 。 网络的核心哲学思想是协议分层 , 每一层的功能实现只依赖于下一层提供的语义 , 同时也为上一层提供标准或约定的语义 。 操作系统也有类似的分层结构 , 层次越往上 , 离硬件越远;越往上 , 编程的门槛越低 。 网络的软件栈大部分位于操作系统中 , 相对应地 , 因网络带来的复杂性大部分由操作系统消化掉了 , 因此应用程序的编写并不显著地变得更加困难 。 譬如 , 移动数据网络带来的复杂性 , 绝大部分由移动操作系统处理了 , 它对上面提供的应用开发框架中并没有暴露出移动数据网络环境的复杂性 。
    然而 , 网络本身对于应用程序的编写还是有极大影响的 , 从软件设计到代码编写都有深远的影响 , 以下是一些显著的变化点 。
    • 网络编程最基础的模式是异步编程 , 以及对异常的处理和恢复 。 TCP 和 UDP 不仅是两个传输协议 , 更是两种编程思想 。 它们指导我们如何设计和编写服务器程序和客户程序 。
    • 对于在网络环境下运行的程序 , 我们编写的可能只是半个程序 。 另外半个程序可能在完全不熟识的人手里进行开发 , 可能在地球的另一侧 , 甚至不在地球上 。 我们需要遵守网络双方的约定、遵守对方的规范 , 或者要有足够的灵活性来应对可能的意外 。
    • 网络功能容易遭受性能和体验的问题 。 网络往往是一个共享资源 , 所以它的不稳定通常是可以预料的 , 编写网络功能的时候若处理得好 , 就有可能化解掉不稳定的因素;若处理不恰当 , 就会造成性能极差 , 乃至体验极差 , 甚至进程死锁或崩溃等 。 从这个角度而言 , 网络编程总是有优化改进的空间 。
    • 网络的不稳定带来了不确定性 , 导致网络程序的诊断变得困难 。 一方面 , 程序的网络环境可能会有抖动 , 导致网络行为可能无法重现 , 从而增加了诊断难度;另一方面 , 网络程序可能运行在物理上不可达的环境( 比如云主机 )中 , 这要求程序员对网络环境的理解要更加全面 , 否则难以从现象或错误代码来分析问题的根源 。
    潘爱民:计算机程序的演进——我的程序人生三十年
    文章图片

    计算机网络经历了大量的技术择优和淘汰 , 今天我们享受到的稳定网络和良好的网络应用程序是历史沉淀的结果 。 硬件上 , 我们的网络越来越稳定 , 无线网络的基站(或访问点)之间可以做到无缝切换;软件上 , 操作系统解决了大量的网络复杂性问题 , 留给应用程序的是相对容易实现的处理逻辑 , 比如方便处理的 HTTP 协议、无状态的远程请求、自动的离线缓存等等 。 在移动数据网络的早期 , 很多应用程序一遇到网络不稳定 , 就出现白屏、不响应 , 为了改善用户体验 , 应用开发人员需要编写大量的代码 。 随着移动数据网络的普及和稳定 , 以及移动操作系统的成熟 , 这一类应用代码已经大大减少了 。

    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。