python中item是什么
AI 编程距离程序员还有多远?如果说 GitHub Copilot 的到来,让众多开发者看到了希望,那么初创公司 Kite 的倒闭,也让我们认清了现实。
Kite 是一家使用 AI 帮助开发者编写代码的初创公司,也是 Python 代码自动补全的神器。一直以来,因为其在「Intelligent Snippets」功能的加持下,可以帮助 Python 程序员减少一半的操作,而备受大家喜爱,甚至此前 Python 之父 Gudio van Rossum 在使用之后,也强烈推荐。
然而这款工具经历了几年的迭代之后,11 月 16 日,Kite 创始人 Adam Smith 发布一则《Kite is saying farewell》(Kite 正在说再见)的公告,正式宣布 Kite 开发工作已经停止,日后该团队也不再支持 Kite 的软件,就此为 Kite 画上了句号。
Kite 失败的两重因素:技术超前与不赚钱
对于这款工具的突然停更,Adam Smith 也在公告中从两个维度分析了 Kite 业务失败的主要原因。
一、Kite 早在 10 多年前诞生,然而当时的技术还不成熟,未能实现人工智能辅助编程的愿景
在 Adam Smith 看来,Kite 建立了当时最先进的 AI 来帮助开发者,但它没有达到开发者所需的 10x 改进的突破,因为机器学习在代码上的最新技术还不够好。现如今出现的 GitHub Copilot 虽然展现了很大的发展前景,但仍然有很长的路要走。
Adam Smith 表示,“Kite 最大的问题是,最先进的模型不理解代码的结构。我们在为代码建立更好的模型方面取得了一些进展,但这个问题是非常工程化的。要建立一个能够可靠地合成代码的生产质量的工具,可能要花费超过 1 亿美元,目前还没有人尝试。”
二、Kite 未能实现商业化,产品不赚钱
作为一款旨在用 AI 帮助开发者提升 10x 生产力的工具,Adam Smith 直言,Kite 团队起初并没有将赚钱排在业务的第一位,这也是后来他们花了很长时间才弄清楚的失败原因。
对于 2014 年成立的 Kite 而言,由于当时环境下构建一款超前概念的 AI 代码自动补全工具,无论是在技术还是落地应用层面,都存在着巨大的挑战。因此,Kite 创建之初,便花了很大的功夫去构建世界一流的工程团队。
在工程团队人员集结之后,Kite 才去专注于产品研发。然而,或是自身低估了 Kite 产品研发的难度,也或是高估了市场人才的技能,仅是这两个流程,Kite 团队便花费了 5 年的时间去组队与研发。
直到 2019 年,Kite 才达到产品与市场的契合度,正式面向开发者推出。
初发布时,Kite 仅支持 Python,即使如此,也受到了很多用户的喜爱。
次年,Kite 相继支持 Java、Kotlin、C/C++、Objective-C、C#、Go、TypeScript 等十多种编程语言,也可以在 VS Code、Vim、Sublime、Atom、Android Studio 等开发环境中工作。
那时 Kite 官方表示,在该工具的帮助下,活跃开发者甚至每天只需编写由大约175 个“单词”组成的代码。
凭借这些便捷性,Kite 后来开始大力发展用户群体。对此,Adam Smith 表示,“我们在这方面执行得很好,将我们每月活跃的开发者用户群发展到 50 万名,而营销支出几乎为零。”
如果说前面几个创业的流程,Kite 走得顺风顺水,那么作为创业公司,要持续发展下去的源泉必然是实现营收。遗憾的是,Kite 产品未能产生收入,其拥有的 50 万开发者也并不愿意付费使用。
Adam Smith 在公告中指出,「我们的诊断是,个人开发者不会为工具付费。他们的经理可能会,但工程经理只想为离散的新功能付费,也就是说,让他们的开发人员在写代码时快 18% 的速度并没有引起足够强烈的共鸣。」
Kite vs GitHub Copilot
正是因为这两点,即使 Kite 后来也开启了新的业务探索,如代码搜索,也依然未能拯救这款工具的颓势。
其实一定层面上,Kite 也是一款与 GitHub Copilot 竞争失败的代码补全工具,因为从功能性上来看,GitHub Copilot 不仅在去年上线了代码搜索 Code Search 平台,也基于 Codex 引擎提供的支持,会分析开发者正在编辑的文件以及相关文件中的上下文,并在文本编辑器中提供建议。相对 Kite 而言,GitHub Copilot 背靠大厂的支持,其整体功能更为成熟与完善一些。
如今面对 Kite 在 AI 工具领域的出局,Adam Smith 遗憾地说道:
“我们为建立 Kite 做出了无数的牺牲。我们拿着低于市场价的工资来维持并延长我们的跑道,工作时间也很长,尤其是在公司成立的前几年。我们团队工程师拥有顶尖的背景,也经常被外界‘觊觎’。但我们想以一种特殊的方式为世界做出贡献,在 Kite,我们通过巨大的努力和承担我们的项目可能不成功的风险来做到这一点。
很遗憾,最终它没有成功。我们抓住了一个机会,我们可以大大加快世界上的软件开发速度。我们进行了实验,尽管每个人都做出了巨大的努力,但实验并没有成功。
如今事后诸葛亮来猜测过去的决定,这太容易犯错了。鉴于我们在 2014 年创办 Kite 时所知甚少,我只能满怀爱意地回顾我们当初冒险的勇气。正是因为有这样的勇气,我们才生活在一个快速进步的世界里。”
程序员为什么拒绝为工具付费?
随着技术的快速迭代,Kite 的离场,令人惋惜,但是对于其归咎失败的原因之一是:个人程序员拒绝为工具付费,也引发了 HN 平台上不少开发者的热议。
很多开发者认为,程序员之所以不愿意为工具付费,一方面是因为其商业模式不可接受,另一方面则是功能没有达到自己付费的预期。
其中网友 @malwrar 分享道:
我不喜欢依赖于可能在一个月内失去的东西,或者通过这种方式把我拴在互联网上。我认为那更像是一种服务,而不是一种工具。我更喜欢只买一次就能用的东西,但这种商业模式可能也会夭折,因为人们会盗用那些没有被拴在服务器上的组件的东西。
我想要说的是,我想买工具,但现在人们只是在租用。就个人而言,我在很大程度上希望这成为某人开源的项目,这样我可以真正拥有我的工具。
@JRPT 则表示:
我从未使用过 Kite,但我尝试了两次 GitHub Copilot,发现它充其量是微不足道的(最坏的情况是分散注意力)。在使用这款工具的时候,如果不仔细检查和修改它,我就不会使用其中的任何代码。但这仍然是一个巨大的帮助,仅编写测试所节省的时间就可以为此付费。我的猜测是 Kite 将自己定位为 Copilot 的免费替代品,然后无法获利。
@Dijit 认为:
作为初创公司的首席技术官,我注册的订阅服务数量之多令人难以置信,我花费了 8 美元、19 美元,重要的东西要 49 美元、99 美元不等。
有些工具很值得,如 GitLab、Confluence、Jira、1Password、Copilot、codepen、JetBrains、Visual Studio、Docker Desktop 等。
最令人沮丧的是:
1)我需要证明这些费用各自带来的价值,有些东西是很好的,但在纸面上带来的价值太小。
2)你不能只为一些人启用或购买工具,这样有巨大的重叠,而且这种重叠越来越大。
我明白人们需要得到报酬,但这些工具产品层出不穷。我已经在订阅这类的工具上花费了支持员工工资的 7%-13%。
其实,当前 Kite 的大部分代码已经在 GitHub(https://github.com/kiteco)上开源了,包括数据驱动的 Python 推理引擎、Python 公共包分析器、桌面软件、编辑器集成、GitHub 爬虫和分析器等等。最终,基于这种业务模式,Kite 折戟创业期,Adam Smith 表示,「我们迫不及待地希望人工智能能彻底改变编程。这不是我们开始时希望的结果,但我们庆祝每个人的勇气和贡献,他们使实验得以实现」。
最后,你认为什么样的 AI 软件工具会成功?你会为哪种 AI 编程工具而付费?
参考资料:
https://www.kite.com/blog/product/kite-is-saying-farewell/
https://news.ycombinator.com/item?id=33685209
☞
上彩泉4313python中lambda和itemgetter的区别 -
车泳饰18379403876 ______ operator.itemgetter函数 operator模块提供itemgetter函数用于获取象哪些维数据参数些序号(即需要获取数据象序号)面看例 a = [一,二,三] >>> b=operator.itemgetter(一) //定义函数b获取象第一域值 >>> b(a) 二 >>> b=operator.itemgetter(...
上彩泉4313vb中 控件.item是什么意思 -
车泳饰18379403876 ______ .item是用在控件数组中的一个属性,控件数组的建立可以通过复制一个控件后粘贴,或者选中控件后在属性面板中设置index值(从0开始) 变成控件数组后就可以通过“控件.item(序号)”来访问此控件组中相应的那个控件了.
上彩泉4313python中的extend和append的区别 -
车泳饰18379403876 ______ 如果你说的是list的话,append是添加一个item,而extend需要参数是一个iterator,添加一系列item. 如果a = [1,2], b=[3,4], a.append(b)后,a为[1,2,[3,4]]. a.extend(b)后,a为[1,2,3,4].
上彩泉4313如何用python 中with 用法 -
车泳饰18379403876 ______ 在Python中,如果一个对象有__enter__和__exit__方法,就可以在with语句中使用它. with块结束时会调用相应的__exit__中的代码.因此,我们不需要再写相应的代码去close,无论是因为什么原因结束with. with open(...) as f: print(f.readall())等价...
上彩泉4313python中的re可以识别<span>标签吗 -
车泳饰18379403876 ______ 方法如下: rex = r'<a.*? title="(.*?)".*?>.*?</a>' 补充一些正则表达式的知识: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## \D 匹配任意非数字字符. ## x? 匹配一个可选...
上彩泉4313java语言中item=item*(1.0/i)是啥意思 -
车泳饰18379403876 ______ 单从你这句话来看,就是将item的 i 分之一赋值给item.如果i是5,就是item的值变为原来的五分之一. 求采纳
上彩泉4313python中type((''))为什么是str而不是tuple -
车泳饰18379403876 ______ 因为('')在python中被视为''所以是str 如果想要当作tuple则要写为('',)>>> ('')''>>> ('',)('',)>>> type(('')) == type('') True>>> type(('',)) == type('') False>>>
上彩泉4313python 对一个数组的处理,如题: -
车泳饰18379403876 ______ def split(array): group = [] item = [] for x in array: if x != 0: item.append(x) elif len(item) > 0: group.append(item) item = [] if len(item) > 0: group.append(item) return group array =[0,2,0,0,34,4,3,2,0,0,0,0,4,2,3,0,0] split(array)
上彩泉4313基于python的scrapy爬虫,关于增量爬取是怎么处理的 -
车泳饰18379403876 ______ 对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段.item['Url'] = response.url 然后在数据端把储存url的column设置成unique.之后在python代码中捕获数据库commit时返回的异常,忽...
上彩泉4313django 模板如何判定变量在一个列表中? -
车泳饰18379403876 ______ 没有python本身那么方便的语句 需要自己在循环里加判断,比如这样:{% for item in list %} {% ifequal item var %} .... do somthing ....{% endifequel %} {% endfor %} 不过我还是建议尽量在模板里少做一些事情,模板毕竟不是用来提供计算的,只是一个展示用的框架而已.