精彩回顾

我是一个explorer的线程

我是一个杀毒软件线程

我是一个IE浏览器线程

比特宇宙-TCP/IP的诞生

Unix、Linux、Windows三大帝国集团发表《关于比特宇宙推进经贸合作的联合声明》的消息很快传遍整个比特宇宙,位置偏僻的NextStep帝国也收到了这条消息。

NextStep帝国掌管着许多人类的文档数据,但是人类一直只能通过磁盘拷贝在比特宇宙的帝国间进行文件传输,效率极低。Steve是NextStep帝国政府的高级产品经理,《联合声明》发表的消息一传来,他敏锐的发现这是一个巨大商机。很快,Steve召集研发部门进行需求宣讲,由首席程序员Tim牵头着手来实现通过因特网来进行文档传输。

不过让Steve没有想到的是,项目还没启动就传来消息:已经有其他帝国抢先推出了文件传输协议——FTP。没想到被别人抢了先机,项目只好终止。
☆ 重新出发 ☆

没过多久,Steve发现,这个FTP虽然好,但还是不方便:帝国管理的文本文件居多,最好可以直接浏览,不用下载后再打开。更重要的是,我的这些文档之间有很多互相引用,要是能够在浏览的时候,能够自动点击把引用的文档打开,那就太方便了。

思来想去,说干就干,这回不能再让别人走在前面去了。

第二天,Steve召集研发部再次开会,进行新的需求宣讲,两个功能:

1、实现文本文档在线浏览,无需下载再打开

2、实现关联文档点击自动打开
Steve:给你们一个星期,下周我要看产品演示哈

Tim:······

收到需求的Tim当天下午就召集研发小组进行需求评估和技术方案讨论。

Tim:实现第一个需求倒是简单,我们用FTP下载后,然后直接给打开展示就可以了。关键这第二个需求,你们有没有什么思路?

研发组Jerry:首先得想个办法标记一下哪些地方是引用其他文档Tim:标记?好想法!

Peter:有了!咱们在文档中插入特殊的标记<a>把引用文档的关键字包裹起来,标记里面写上关联的文档地址,点击的时候自动把这个文档下载打开。但是在展示的时候,就只展示文字本身,标记就不要展示了,看起来就发现不了。

Tim:等等,有点绕,你能简单画一下吗?

Peter:喏,就像这样:

Tim:赞!好点子,就这么干!

☆ 一周之后 ☆

Steve:怎么样,小伙子们,可以看下效果了吗?

Tim:Jerry和Peter过来下,给产品大大展示下咱们的成果。

Jerry:好嘞,大佬看着哈,先收入账户,密码,然后···

Steve:等一下,干嘛要输入账户密码?Peter:因为文档是用FTP传输的,需要账户密码登录啊。

Steve:这我不关心,我们以后的业务是要面向比特宇宙所有帝国,都能公开浏览我们的文档,你整这太麻烦了,必须改!

Tim:先不说这个,先看功能演示吧。Jerry:好了,现在进来了,看吧我们用图形化的窗口界面直接在线可以浏览文档,不需要再下载到磁盘打开。

Steve:嗯,不错,文档关联跳转呢,给我看看。

Jerry:你看好了,你看到这个“泰迪”下面有下划线吗,这是可以点击的,人类一点我们就自动给下载泰迪对应的文档给展示出来了。

☆ 需求变化 ☆

Steve:嗯,整体看来还不错哈!不过我过来找你们除了看功能演示,还想通知一下,帝国除了文本文档,还有很多图片文件,你们迭代一个版本,把图片加到文档里面一起展示哈,下个星期就要。

Tim:啥?需求咋说变就变。

Steve:这不很正常嘛,加油,我看好你们。

下午,研发部会议室开始讨论新的产品需求。
Jerry:这Steve也太过分了,说改就改,说要就要。

Tim:哎,忍忍,谁让人家是老大,咱们得听啊。别光顾着抱怨,要把图片和文字一起展示,你们有什么思路没?

Jerry:没有思路。

Peter:我倒是想到了一个,之前咱们文档关联跳转不是用的标签吗,咱们图片也可以继续这个思路,用<image>标签来表示图片,和<a>标签一样,用属性来指定图片文件的路径,浏览器拿到以后自动下载图片文件不就可以展示了吗!

Tim:嗯,看来这个标签大法好啊!就这么干!等下,为了节省空间,就用缩写<img>吧!

☆ 需求再变 ☆

几天后,Steve又来到研发部。

“产品大佬,这还没到一周呢,别催哈”,Tim过来招呼。

“额,不是催你们,是和老板商量了一下,紧急追加两个新需求”,Steve拍拍Tim的肩膀。

“啥?又有新需求?”,Peter和Jerry放下手中的活,围了过来。

“嗯,就是要支持一下图文排版,可以指定文字的分段、字体、字号大小、颜色、对齐这些,让人类阅读起来视觉感受更舒服,哦漏了一个,图片也要支持大小和对齐”。

“这也太多了吧!”Jerry表示抗议。

“确实有点多,时间上也会给你们延后一点的,嘿嘿”,Steve龇牙笑着。

“这个我们得回去技术评估下,时间还不能马上给你,明天给你消息”,Tim答复到。

“不行,下午下班前得给我,我明天一早就要给老板做这个月的排期汇报了”,Steve不肯退让。

“行行行,那我们抓点紧”,Tim有点不爽了。

☆ 技术评估 ☆

午休过后,Tim再次召集大家开会。

Tim:大家有什么想法吗?

Jerry第一个发言:大哥,咱们还是应该强硬点,别什么需求都接。

Tim:再让他一回,下次我可不会这么轻易答应了,先说说眼前的事情吧!

Peter:继续发扬标签大法!

Tim:嗯,我的第一反应也是标签。

Peter:段落用<paragraph>,居中对齐用<center>

Tim:段落太长了,就缩写用<p>。字体、字号、颜色这怎么弄?

Peter:放在段落<p>里面的属性吧,我来总结一下,现在的版本是这样子了:

Tim:我感觉我们的文本文档里面标签数量都快超过文本内容本身了。

Peter:现在咱们这已经不能算是普通文本文件了,有很多其他信息在里面

Tim:不算文本文件,那叫什么?

Peter:要不叫超级文本文件,哈哈!

Tim:这名字太中二了,叫超文本文件吧,HyperText,你觉得怎么样,Jerry?

Jerry:嗯,挺好,我没意见。

Tim:专心点啊,咱们在工作呢!

Jerry:老大,我在想另外一个问题,关于文件下载这一块儿。

Tim:文件下载怎么了?有什么问题?

Jerry:Tim,这个FTP感觉用起来不爽,不仅需要账户密码,还需要建两个连接,一个控制通道,一个数据通道,甚是麻烦。

Tim:嗯,确实是,怎么,你有什么新的方案吗?

Jerry:我想重新弄一套协议,定制开发,专门用于咱们这套系统传输文本文件,哦不,是超文本文件。

Tim:好的,传输协议这事儿就交给你了!另外,标签的事情就由Peter来负责,你们各司其职,互相配合,下班前把开发计划排一下给我。

☆ 排期之争 ☆

“这是我们新的开发计划,你请过目,昨天下班时候想找你结果发现你已经走了”,Tim把开发计划交给了Steve。

“纳尼,这么点功能你们竟然要一个月?”,Steve简直不敢相信自己的眼睛。

“这次改动有点多,为了后面扩展新功能,我们要重新设计架构···”

“这个技术细节我不管,这些功能之前你们已经做过一段时间了,又不是从头做,15天,我只能给你们15天时间”,Steve砍价很凶。

“15天肯定做不出来,你这太夸张了”,这一回Tim并没有直接答应下来。

“加加班嘛,不就赶出来了”,Steve露出了熟悉的微笑。

“我给的时间已经都是算了加班的了”,Tim还是不肯就范。

“好吧,那我让一步,20天,最多20天,这个月底必须得给老板演示,不能再少了”,Steve的语气一下强硬了起来。

“唉,好吧,只能加班加点赶了。”,Tim终于还是同意了。

☆ 996 ☆

研发部进入紧急开发模式,开始了996的工作时间。

“产品一张嘴,开发累断腰啊”,Jerry向Peter抱怨着。

“你呀,少抱怨,我觉得这项目还是很有意义的,反正我是成就感很大”,Peter倒是不太在意。

“图样图森破,生活不止眼前的代码,···”,没等Jerry说完,Peter回到工位继续忙活去了。

产品经常变需求,我们的标签不能想一个是一个,得重新整体架构设计,考虑扩展性。Peter索性把文档内容全部用标签来描述:

而另一边,负责超文本传输协议设计开发的Jerry,抱怨归抱怨,抱怨完还是认真研究起来:

首先不要两个通道,FTP太复杂了,咱就弄最简单的请求——响应模式,控制信息和数据信息在一个通道中完成,但是要明确的分开。有了,用2个换行符,把头部和正文数据分开。像这样:

这天,Tim来到Jerry工位,Jerry给Tim讲解了自己最新的设计。

“嗯,确实简单了不少,但是你要留点扩展性,这产品经理经常加需求,变需求,不能写的这么死,需要灵活一点”,

Tim提了些建议。“可以举例说明下吗?”“比如你看啊,对文件不一定是下载,也可能有上传功能,或者修改功能,你不能只有下载,虽然简单但扩展性太差”。

“咱不就是做个文档在线浏览吗,怎么会上传修改这些呢?”,

Jerry还是不太理解。“今天只是浏览,说不定下次就还要修改,上传呢,产品经理谁说的准!”

“行,我明白了,我再仔细琢磨琢磨,谢谢老大的建议”。

“嗯,加油,有什么疑问可以随时找我交流”。

Tim走后,Jerry开始重新审视自己的设计:看来得加动词来描述操作类型,用GET表示下载,用POST表示上传,用DELETE表示删除······文件类型以后可能也会多元起来,得加类型字段进行描述,就用Content-Type来表示吧还有,考虑的再完善,以后可能还是会改,我得给协议也编一个版本号,便于以后的兼容。

☆ 月底了 ☆

很快到了月底,演示前一天,Tim再次召开会议。

Tim:明天就要给领导演示了,你们都推进的怎么样了,把最新的情况给我说一下。

Peter:老大,我对超文本文件格式进行了重新设计,这是我的手册。我给这套规范取了一个新名字:超文本标记语言——HyperText Markup Language,简写HTML。可以实现对文字、图片的展示和排版,完美的实现Steve提的需求。

Tim:嗯,非常棒,Jerry,你呢?

Jerry:我的新的文件传输协议也弄好了,就定名成超文本传输协议:HyperText Transfor Protocol,简写HTTP。专注于传输HTML文件以及相关的其他文件。

Tim:好,我总算放心了,大家最后再Check一下,明天的演示不要出岔子。

第二天,演示非常顺利,效果让领导不断称赞,Tim和他的团队这段时间的付出总算得到了领导的肯定。

几天后的月总结会上,Steve向帝国国会演示了这个产品,并在会议上决定向比特宇宙正式发布,其他帝国只需按照HTTP协议规范和HTML语言规范就可以发布&浏览文档,还公布了项目中产品的正式名称:
使用HTML语言规范编写的文档:网页
提供网页的机构:网站
负责网页浏览的机构:浏览器

☆ 后续 ☆

很快,这一套标准得到了越来越多的响应者,无数帝国的企业开始盯上了这块市场,竞争激烈。
没多久,以IE公司、Chrome公司、Firefox公司为首的几家企业,逐渐瓜分了浏览器市场。其中IE公司在Windows帝国集团拥有众多分店,市场占有率最高。而Chrome公司和Firefox公司则在Linux帝国、Windows帝国、OS X帝国都开拓了市场。

网站市场的竞争同样激烈,而笑到最后的是Apache、Tomcat和nginx几家巨头。由于Windows帝国制度的管控,这几家跨国集团都重点发展自己在Linux帝国集团的实力,曾经败在Windows帝国集团的Linux集团凭借Web业务的发展,打了一个漂亮的翻身仗。

越来越多的帝国用上了HTML网页技术,并用HTTP连接,而使用这套技术构建的网络也有了一个新的名字:World Wide Web——万维网。

未完待续·······

彩蛋夜已深,一个黑影出现在IE浏览器公司的代码区,准备写入一条JMP指令,劫持IE的首页。没想到有人快他一步,目标位置已经被修改。沿着JMP跳转的方向望去,竟然是···
欲知后事如何,请关注后续精彩:《浏览器主页锁定之战——IE:我太难了》

扫码关注,更多精彩

产品vs程序员:你知道www是怎么来的吗?的更多相关文章

  1. 原来,多年以来,我一直是个curl/CRUD程序员

    curl,就是create,update,remove,list的首字母简写.说是CRUD似乎更流行些,不过无所谓,知道是一个意思就好. curl程序员,就是增改删查程序员,中文说增删改查更加顺口. ...

  2. 这群程序员疯了!他们想成为IT界最会带货的男人

    随着网红主播越来越火,通过直播带货种草的形式也成了今年双12的热点. 不过,网红主播带货早已见怪不怪,但你们见过程序员直播带货吗!? 近日,趁着阿里云双12年末采购节,阿里云邀请了一波程序员GG来为大 ...

  3. 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good

    浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...

  4. .NET程序员我是如何通过一个产品在2年内买车买房

    刚开始写博客不足之处望大家多多指点,少一些质疑多一些帮助,我们就能成为朋友. 我写博客的目的其实很简单就是为了分享知识,如有幸能申请当MVP那是最好不过了,这个过程对于“大牛”来说很快,但对于我来说估 ...

  5. 产品经理与程序员矛盾&相处

    产品运营 - 知乎https://www.zhihu.com/topic/19551958/hot 产品经理与程序员矛盾的本质是什么? - 知乎https://www.zhihu.com/questi ...

  6. 为什么现在很多年轻人愿意来北上广深打拼,即使过得异常艰苦,远离亲人,仍然义无反顾? 谈谈程序员返回家乡的创业问题 利基市场就是那些不大不小的缝隙中的市场 马斯洛的需求无层次不适合中国。国人的需求分三个层次——生存、稳定、装逼。对应的,国内的产品也分三个层次——便宜、好用、装B。人们愿意为这些掏钱

    信念.思考.行动-谈谈程序员返回家乡的创业问题 昨天晚上在微博上看了篇 <为什么现在很多年轻人愿意来北上广深打拼,即使过得异常艰苦,远离亲人,仍然义无反顾?>,有些话想说. 感觉很多人的担 ...

  7. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  8. 传播正能量——做一个快乐的程序员

    引子 今天在博客园看到施瓦小辛格的文章我们搞开发的为什么会感觉到累,顿时有感而发.自己本来不擅长写文章,更不擅长写这种非技术性的文章,但是在思绪喷薄之际,还是止不住有很多话要说.针对从客观上说&quo ...

  9. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

    注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...

随机推荐

  1. Eclipse下载安装并运行第一个Hello world(详细)

    Eclipse下载安装并运行第一个Hello world(详细) 1.下载安装和配置JDK JDK详细的安装教程参考:https://www.cnblogs.com/mxxbc/p/11845150. ...

  2. diff算法

    diff算法的作用计算出Virtual DOM中真正变化的部分,并只针对该部分进行原生DOM操作,而非重新渲染整个页面. 传统diff算法 通过循环递归对节点进行依次对比,算法复杂度达到 O(n^3) ...

  3. nyoj 1112 求次数 (map)

    求次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个新的字符串,i 属于[0,strl ...

  4. Mybatis动态SQL(where元素、set元素、if元素)

    Mybatis动态SQL(where元素.set元素.if元素) - where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句.而且,若语句的开头为“AND”或 ...

  5. opencv各种小例子

    图像腐蚀 #include <opencv2/highgui/highgui.hpp>//OpenCV highgui 模块头文件 ~ #include <opencv2/imgpr ...

  6. flex一些属性

    // 改变主轴的方向 flex-direction: column; // display:flex的子元素无法设置宽度 // 子元素有个flex-shrink属性,表示在父元素宽度不够的情况下是否自 ...

  7. Orleans 3.0 为我们带来了什么

    原文:https://devblogs.microsoft.com/dotnet/orleans-3-0/ 作者:Reuben Bond,Orleans首席软件开发工程师 翻译:艾心 这是一篇来自Or ...

  8. 原创|我是如何从零学习开发一款跨平台桌面软件的(Markdown编辑器)

    原始冲动 最近一直在学习 Electron 开发桌面应用程序,目的是想做一个桌面编辑器,虽然一直在使用Typore这款神器,但无奈Typore太过国际化,在国内水土不服,无法满足我的一些需求. 比如实 ...

  9. SpringSecurity动态加载用户角色权限实现登录及鉴权

    很多人觉得Spring Security实现登录验证很难,我最开始学习的时候也这样觉得.因为我好久都没看懂我该怎么样将自己写的用于接收用户名密码的Controller与Spring Security结 ...

  10. java struts2 debug

    出了一堆bug 改的顺序和哪个起了作用不太记得了 下面列出遇到问题的顺序:1java.lang.NoSuchMethodException:没这个方法 代码是改正后的,出错的时候保证class ,ac ...