首页 >>  正文

item在python中的意思

来源:baiyundou.net   日期:2024-09-20

作者 | 苏宓

出品 | CSDN(ID:CSDNnews)

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

","force_purephv":"0","gnid":"94ef6dc0a4f06cdbb","img_data":[{"flag":2,"img":[{"desc":"","height":"80","s_url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752.gif","width":"640"},{"desc":"","height":"241","title":"","url":"https://p0.ssl.img.360kuai.com/t0189d61ae97f8b6e4b.jpg","width":"588"},{"desc":"","height":"409","title":"","url":"https://p0.ssl.img.360kuai.com/t01b78a555e97c079d8.jpg","width":"1080"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1669028647000,"pure":"","rawurl":"http://zm.news.so.com/ab945e25e3e1133ce0beb048652ffe40","redirect":0,"rptid":"a922af6b0c1b6411","s":"t","src":"CSDN","tag":[{"clk":"ktechnology_1:github","k":"github","u":""},{"clk":"ktechnology_1:pilot","k":"pilot","u":""}],"title":"失败告终!历经 8 年研发的 Python 代码补全神器 Kite 停止开发

习翠齐4933如何用python 中with 用法 -
席养嵇18651454207 ______ 在Python中,如果一个对象有__enter__和__exit__方法,就可以在with语句中使用它. with块结束时会调用相应的__exit__中的代码.因此,我们不需要再写相应的代码去close,无论是因为什么原因结束with. with open(...) as f: print(f.readall())等价...

习翠齐4933python中lambda和itemgetter的区别 -
席养嵇18651454207 ______ operator.itemgetter函数 operator模块提供itemgetter函数用于获取象哪些维数据参数些序号(即需要获取数据象序号)面看例 a = [一,二,三] >>> b=operator.itemgetter(一) //定义函数b获取象第一域值 >>> b(a) 二 >>> b=operator.itemgetter(...

习翠齐4933for循环(python) -
席养嵇18651454207 ______ 区别很大的.... python是使用 缩进 (一般推荐使用4个空格) 来标注代码块 而非使用括号 第一段代码中 for i_record in i_list: ... for u_record in u_list: 后面2个for语句处于同样的缩进 则表示他们的执行顺序是先后顺序 而第二段代码中 2个for语句则表示嵌套循环了

习翠齐4933请问python中 items = re.findall(reg,html)括号内的怎么理解? -
席养嵇18651454207 ______ 括号里面的两个是参数,位置不能调换.findall是re对象里的一个方法,这个方法需要2个参数:reg,html.这两个参数应该在上面的代码有定义.你可以把“方法”理解成一个生产机器,“参数”就是原材料.那么方法的返回值就是生产机器生产出来的产品.

习翠齐4933python中str.find和 in list的区别使用 -
席养嵇18651454207 ______ 在一个str中查找特定的字符串,使用string1.find(substring)的语法,这种查找时一种模糊查找;但是在一个list中,如果判断是否包含某个项目,是一个绝对的相等的比较,空格都需要匹配;所以使用查找匹配时可以采用的方法是:1.将list转化为str之后模糊匹配:比如 if str(list1).find(substring) != -12.将list中的所有的字符串都去掉特殊字符以及空格;比如:for item in list1:item.replace(' ','') 再用if substring in list1:

习翠齐4933用Python怎么统计一个列表的元素种类和各个种类的个 -
席养嵇18651454207 ______ 比如你可以这样(用isinstance()函数来判断类型): intCount = 0 #用来记录列表中的int元素个数listCount = 0 #记录list元素个数a = [1,'a',2,[1,2]]for i in a: #遍历a if isinstance(i,int): #判断i是不是int intCount += 1 elif isinstance(i,list): #判断i...

习翠齐4933python里面可以定义结构体吗 -
席养嵇18651454207 ______ Python中没有专门定义结构体的方法,但可以使用class标记定义类来代替结构体,其成员可以在构造函数__init__中定义,具体方法如下.复制代码代码如下:class item:def __init__(self):self.name = '' # 名称 self.size = 10 # 尺寸 self.list = [] # 列表 a = item() # 定义结构对象 a.name = 'cup' a.size = 8 a.list.append('water')

习翠齐4933python里一个字典列表,如何判断一个value在不在这个列表里 -
席养嵇18651454207 ______ #dict的values()方法,可以遍历也可以直接in判断是否存在 a = {'a':1, 'b':2, 'c':3} if 4 in a.values(): print('exit')

习翠齐4933python列表里面有字典,该怎么读取字典中的value -
席养嵇18651454207 ______ 如题,例子是asin = [{'asin': b2b}] 取出其中的value,使用如下代码就可以了[item[key] for item in asin for key in item]

习翠齐4933django 模板如何判定变量在一个列表中? -
席养嵇18651454207 ______ 没有python本身那么方便的语句 需要自己在循环里加判断,比如这样:{% for item in list %} {% ifequal item var %} .... do somthing ....{% endifequel %} {% endfor %} 不过我还是建议尽量在模板里少做一些事情,模板毕竟不是用来提供计算的,只是一个展示用的框架而已.

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024