程序员常讲的「写死」是什么鬼?

13 评论 43248 浏览 121 收藏 5 分钟

「写死」是什么意思?写死还是不写死,这是一个纠结的问题。

程序员嘴里说的「写死」是什么意思?可以不写死吗?不写死就会增加难度吗?「写死」和「不写死」不可调和吗?究竟怎么决策选用那种方法?

今天谈谈这个话题,也顺便说下「打底数据」和「云端控制」的设计方法。

首先明确「程序员嘴里说的写死」到底是什么意思?本篇文章中,我们的举例都以客户端写死为例进行说明,其他程序亦然。程序员所说的是指对一些参数或配置写死。写死意味着除非发下一个版本,否则这个数据不可更改。比如微信下面的四个TAB,就是写死的,因为那四个TAB永远不会变。在程序实现的时候,程序员问是否要写死,其实是探求这里是否会变化。如果不变,那就写死。

不写死又会增加多大难度呢?

不写死意味着这个数据是变化的,可运营的,那这个运营数据应该在服务器端进行配置,再由客户端拉取下来,然后运行时启用新的配置数据,多出的成本是需要设计一条协议拉取这项配置或参数,然后应用到程序中,如果已经有这样的运营配置协议,那直接配置即可。

我们去兰州拉面,跟老板说,给我来碗“牛肉面,毛细,不要辣椒”,需求非常明确,所以上桌的面一定是这样,只要订单下了,基本没有任何变化的空间,除非你再要一碗。

而你对女友说:“下面给我吃”,你女友可能会给你用白水煮一碗面,然后问你“要什么调料”,这个时候,你就可以加上“饭扫光”,“老干妈”等一些调料了。

  • 二者的本质区别是一个发生在编译时,一个作用于运行时。
  • 二者并不互斥,有的时候是要一起配合的,既要本地写死,也要云端可控。

假设你是一个资讯客户端的产品经理,一个资讯客户端经常有这些TAB或者叫频道:推荐、热点、视频、本地、美图、娱乐、体育、汽车。

可这些频道的数据是可运营配置的,可以调整顺序,可以调整文案,可以新增一个频道(比如增加一个叫岛国的频道),也可以删除某一个运营效果不好的频道。

一个好的产品设计是,本地要默认写死一些频道,这些频道通常是一个资讯客户端不怎么变化的,每次都要展示的,这些成为打底数据或者叫default默认数据,如果没有这份写死的数据,你的客户端运行起来,就会头部没有任何信息,等网络数据回来才有展示,或者无网络时,就像出了bug一样没有任何展示。所以打底数据主要解决用户体验问题,无网络或初次启动时,给用户隐喻这个客户端已经在正常运行。

展示了打底数据之后,此刻发起云端请求,请求云端运营数据,拉取成功之后,将新的频道数据覆盖本地数据,如果此次请求失败,则继续展示本地数据,保障用户浏览。在拉取成功的情况下,应该把新的频道数据覆盖本地Default打底数据,保证客户端下次启动展示上一次成功拉取的频道数据。

这是客户端产品和程序设计的基本逻辑,希望不要割裂开看本地数据和云端数据的问题,二者配合效果更佳,就像奥利奥要沾牛奶吃。

#专栏作家#

给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。

本文原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自PEXELS,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 开车了

    来自广东 回复
  2. 怀疑你在开车

    来自河南 回复
  3. 写的不错!还需要再融会贯通

    来自菲律宾 回复
  4. “下面给我吃”、“岛国” ➡

    来自浙江 回复
    1. 好,给你

      来自北京 回复
    2. 好,给你

      来自重庆 回复
  5. 老司机一言不合就踩油门

    回复
  6. 感觉TAB什么的看是什么软件,有的架构上写死了,有的刷新的话就可以从服务器重读以新格式运行,主要看软件的架构吧。欢迎老司机矫正。

    来自河北 回复
  7. 每篇文章读起来都很有意思,对我们PM来说,这种格调的技术文章才是上班之路的伴侣 💡

    来自日本 回复
  8. 果然生动形象

    来自云南 回复
  9. 😀

    来自云南 回复
  10. 下面给你吃

    来自重庆 回复
  11. 果然是老司机

    来自北京 回复