微软semantic-kernel(SK)团队发布了一篇博客文章:Early Lessons From GPT-4: The Schillace Laws[1] ,微软的CVP , Deputy CTO Sam Schillace 根据他在GPT-4方面的经验制定了使用LLM创建软件的九项原则,称之为Schillace Laws of Semantic AI[2]https://learn.microsoft.com/zh-cn/semantic-kernel/howto/schillacelaws

在大模型LLM 时代确定一个开发实践定律的人肯定是大有来头,因此我去找了他的资料学习了一下,他有着发现了不寻常的经历,早在2004-2006年他自己创业,使用c# 构建的产品叫 Writely,也就是Google docs的前身, 2006年被Google收购了,他们当时的团队有4人,从Writely到Google Docs的转换的故事 如何避免软件工程中最昂贵错误的发生[3]

  在今年初,我与Sam Schillace会面时也讨论过有关重写的问题,它是Box的技术副总裁,前Google Apps负责人。我向他提了一个问题,“你们工程团队曾遇到过的最昂贵的错误是什么?”

他的回答是,“尝试从零开始开展代码重写。”

  Schillace的创业公司在2006年被Google收购了,他们当时的团队有4人,产品名字是Writely即Google Docs的前身。在他们发布了一个试验性的C#原型作品后,用户数很快就突破了50万。加入Google后,他们收到的第一个商业任务是进行项目迁移,从而充分利用Google的架构体系以实现高容量和高扩展性。每天用户数仍在快速增长,而他们也开始意识到之前所写代码的扩展瓶颈。

  我还在Google工作时,我知道Google的软件堆栈是不支持C#的。所以当Schillace说到这里时,我很自然地问到,“当你们进行从Writely到Google Docs的转换时,你们是不是只能从零开始?”。

  Schillace的回答是,“是的。”当他们开展重写工作时,有个合伙人提出边转换边重写,因为如果进行彻底推翻,将极大增加工作量。Schillace并不认同。最终,他说服团队只设置一个非常有限的重写目标,延后其它更多的目标工作。他们定下一个清晰的目标先把系统在Google数据中心运转起来,然后再整合12种不同的Google技术。他们花费了一个星期来调试并最终编译成功。调试过程中,很多错误是由于Java和C#不同的语义表达引起的,例如==双等号的不同含义。

  “这真的真的非常痛苦。”Schillace说道。继续奋战12个星期后,他们最终完成了一个“令人惊讶的,奇怪的,晦涩难懂的”代码库。但它也最终在Google数据中心里成功运转了,这也创造了一项纪录——被收购后最快适应Google架构的转换项目。如果他们不是摒弃了过多的目标,也许还不能这么快就完成。同时如果他们把更多精力放在代码质量上,时间也会用得更多,因为需要修正一堆堆的正则表达式。相反地,他们的目标是使Writely先尽快运转起来。

这样的故事是不是很熟悉,这样的事情在中国也是不断的发生,将C# 写的软件翻成他们喜欢的语言来编写。 这是最昂贵的错误:尝试从零开始开展代码重写。

Sam Schillace 在微软领导创建了semantic-kernel项目,选择使用C# 构建。 当然以后肯定是会支持各种语言的,目前已经预览支持Python。

Schillace 定律 背后的 Sam Schillace的更多相关文章

  1. 第一次OllyDbg逆向记录(分析思路和注意点&其他文章)

    OllyDbg 操作菜单栏.工具栏.快捷键 C++调用加强 目录 OllyDbg 操作菜单栏.工具栏.快捷键    1 一.    载入观察    1 1.静态载入观察:    1 2.OD动态观察  ...

  2. words2

    餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘 ...

  3. Mac OS X 背后的故事

    Mac OS X 背后的故事 作者: 王越  来源: <程序员>  发布时间: 2013-01-22 10:55  阅读: 25840 次  推荐: 49   原文链接   [收藏]   ...

  4. 那些IT行业的经典定律

    几十年来,IT界有一些非常著名的定律,蕴含着行业发展的大智慧,非常有趣,略作收集总结,再加上一丁点自己的浅见~ 一.摩尔定律:价格不变,集成电路上可容纳的元器件数目,约每隔18个月便会翻一倍,性能也将 ...

  5. 万级K8s集群背后etcd稳定性及性能优化实践

    背景与挑战 随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...

  6. 万级K8s集群背后 etcd 稳定性及性能优化实践

    1背景与挑战随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...

  7. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  8. atitit.管理学三大定律:彼得原理、墨菲定律、帕金森定律

    atitit.管理学三大定律:彼得原理.墨菲定律.帕金森定律 彼得原理(The Peter Principle) 1 彼得原理解决方案1 帕金森定律 2 如何理解墨菲定律2 彼得原理(The Pete ...

  9. 背后的故事之 - 快乐的Lambda表达式(二)

    快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...

  10. 前端精选文摘:BFC 神奇背后的原理

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

随机推荐

  1. 第一课 Markdown 实操

    1.Markdown (#加空格) 二级标题 (##加空格) 三级标题 (###加空格) 四级标题 (####加空格) 2.字体 Hello world 加粗(字体2边加**) Hello world ...

  2. curl下载远程图片到服务器

    <?php //curl下载远程图片到服务器 方法 function download($url, $path = 'images/'){ $ch = curl_init(); $names = ...

  3. redis中获取区间数据及获取总条数

    import redis REDIS_ITEMS_HOST: str = host REDIS_ITEMS_PASSWORD: str = pwd REDIS_ITEMS_DB: int = 4 #查 ...

  4. input button

    即使你在文本输入下方添加了按钮,它们也会在页面上彼此相邻. 这是因为 input 和 button 元素都是内联元素,它们不会出现在新的行上. <button type='submit'> ...

  5. PHP5-8各版本特性详解

    汇总 PHP5.1: autoload PDO MySQLi 类型约束 PHP5.2: JSON 支持 PHP5.3: 命名空间 匿名函数 闭包 新增魔术方法__callStatic()和__invo ...

  6. Tomcat和Maven安装与配置

    链接:https://pan.baidu.com/s/1aezz2pfCn0DCCPw8udQFXA 提取码:wd4f 一.网站发布1.1.为什么要用tomcat网页开发好了,该如何发布呢?我们需要一 ...

  7. ext表单合并行

    在js里加入方法 /*** 合并Grid的数据列* @param grid {Ext.Grid.Panel} 需要合并的Grid* @param colIndexArray {Array} 需要合并列 ...

  8. 基于CMMI的软件工程及实训指导 第一章

    第一章 软件工程基础 1. 软件工程概述 1.1 软件工程概念 软件工程是从管理和技术两方面来研究如何采用工程的概念.原理和技术方面并加以综合,指导开发人员更好地开发和维护计算机软件的一门新学科. 1 ...

  9. qt webassembly emscripten build 编译 环境搭建 JS调用C++传参

    环境搭建 本文主要是针对ubuntu/mac编译环境搭建和调试环境 可以直接参考下面的dockerfile qt wasm build docker pull colorlength/qt-webas ...

  10. JAVA面经-基础篇-线程

    1.创建线程有哪几种方式?   创建线程有3种方式,分别是继承Thread类.实现Runnable类.实现Callable类.   继承Thread类的步骤:     1. 定义Thread类的子类, ...