本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。
说实话,这是一篇我早就应该写的文章,我也不知道为什么我能拖这么久。
但好像从来也没有读者朋友们催我写过这类文章,这为我的拖更提供了很好的理由。
为什么说我早就应该写这篇文章了呢?
主要还是因为去年年底的时候,OpenAI推出了一个火遍全球的爆炸性产品,ChatGPT。
在此之前,我都从来不认为OpenAI跟微软会有什么关系。直到后来我查询了一下OpenAI的股权结构,才发现微软的持股比例竟然高达49%,是OpenAI的最大单一股东。
这就不奇怪为什么谷歌百度看到ChatGPT后如临大敌一般了。并且马斯克还在推特上吐槽,OpenAI已经偏离了他创立时的开源初衷,成为了一家被微软控制的盈利机构,
事实上,OpenAI和微软的合作确实非常紧密。
在ChatGPT推出后不久,OpenAI就将自己更高级的GPT4提供给了必应使用,我们在内部体验了新必应的能力后,确实都感觉到大为震撼。
另外新必应还和Edge浏览器进行了深度绑定,那段时间为了能够快速推出带有新必应功能的Edge浏览器版本,我们组着实有几位同事周末都在加班。
这种自己做的产品莫名其妙就卷入到了世界最中心热点的感觉还挺奇妙的,我在抖音上刷到一些科技博主介绍新必应功能时,甚至还能看到自己做的新版Edge浏览器的主页界面。
其实那个时候我就想写一篇文章,也来介绍介绍ChatGPT和新必应了。但是由于我们是内部体验资格,领导特意在邮件里说明了,不要将截图流出到外部。虽然那个时候已经有外部博主也能体验到新必应了,我想了想怕把控不好度,就还是作罢了。
其实ChatGPT发展到这里,我也不知道未来会继续走向什么方向,甚至我觉得可能过段时间,这波AI的热度就过去了。
没想到就在不久之后,微软又推出了一个王炸型产品,Microsoft 365 Copilot。这次是将GPT4的能力应用到了Office领域当中。
众所周知,微软Office系列的功能深不可测,绝大多数的用户甚至连其中10%的功能都使用不到。
而有了Microsoft 365 Copilot,你再也不需要去网上搜索那些高级的Word用法,复杂的Excel公式,精美的PPT制作方法了。你只需要用文字告诉Copilot你想要什么,它就会按照你的需求自动生成你想要的一切,从而让每个用户都能轻松解锁Office剩余90%的功能。
这就属于我完全预料不到的发展方向了,因为ChatGPT虽强,但目前还只是能处理文字层面的问题问答,或许还不足以对以往的工作模式带来天翻地覆的改变。
但Microsoft 365 Copilot这次直接将AI延申到了一个全新的领域,这带来的可能是生产力的聚变。再夸张点说,甚至可能会是一次新工业革命的开始。
这波我持续看好AI。
Microsoft 365 Copilot在最近确实赚足了眼球,但今天我要介绍的并不是它。其实早在两年前,微软就推出了另外一个版本的Copilot,叫GitHub Copilot。
这里为了防止有些小伙伴还不知道,特意说明一下,微软在2018年就收购了GitHub。
那么什么是GitHub Copilot呢?
简单一句话概括,那就是借助AI的能力,让程序员可以更加轻松高效地完成自己的编码工作,从而提升生产力。
我们都知道,GitHub并不是一家AI公司。因此,GitHub Copilot背后接入的其实就是OpenAI的Codex。
那么Codex又是什么呢?这是OpenAI研发出的一个拥有人类自然语言模型编程能力的人工智能接口。简单点说,就是允许我们使用人类语言来写代码了,你告诉它你想要什么功能,Codex会自动将其翻译成对应的编程语言。
这个功能后来也被ChatGPT接入了,相信有不少朋友早已体验过了ChatGPT强大的编程能力,其实背后就是由Codex在默默地帮助我们写代码。
GitHub Copilot我在之前就已经被同事反复安利过了很多次,却迟迟一直没有使用。究其原因还是懒,懒得去对一些新些事物进行尝试和学习,这个习惯确实不好。
后来我终究还是没能抵过微软员工可以免费使用GitHub Copilot的诱惑,也开始用了起来,于是就有了这篇文章。
是的,GitHub Copilot是没有免费版本的,个人版需要支付10美元/月,企业版需要支付19美元/人月。

不过大家也不用这么快就被劝退了,个人版是有60天免费试用期的,因此我觉得至少可以去体验和了解一下。
购买完成之后,接下来在你常用的IDE商店去下载安装GitHub Copilot插件即可,像JetBrains旗下所有的IDE、微软的VS Code等都是支持的。

插件安装完成后,我们就可以去体验GitHub Copilot强大的编程能力了。
刚才有说过,Codex是可以使用人类自然语言来进行编程的,那么就来试一试吧。
创建一个新的Android项目,并打开activity_main.xml,我们通过编写注释的方式来描述我们的需求:

可以看到,需求描述完之后,GitHub Copilot就会自动根据我们的需求给出代码提示建议。这时只要按一下Tab键,就能让这些提示建议上屏了。
这种功能如果是放到半年前的话,相信足以让绝大部分的人感到震惊。但是现在大家都已经见识过ChatGPT的强大编程能力了,所以这种程度的代码提示可能也就见怪不怪了。
但不得不说,虽然GitHub Copilot和ChatGPT背后对接的都是Codex,但GitHub Copilot还是有它的优势的,因为它会拥有更加充分的代码上下文环境,这是ChatGPT所不具备的。
是的,如果你再仔细观察一下上图,你会发现,GitHub Copilot是知道我们是在ConstraintLayout中编写布局的,所以给出的代码建议也是按照ConstraintLayout的语法规则来写的。
而如果我们将同样的注释放在Compose环境下再去描述一遍,得到的结果如下图所示:

因此,GitHub Copilot总是能够根据当前的代码环境给出相应的代码建议。这些代码不一定能保证是完全正确的,但是根据我的观察,通常都是比较有参考价值的。
说到代码的正确性,前段时间文心一言刚刚发布,我在抖音上刷到一个博主,他给文心一言出了道题,让它使用php编写一段生成1万个8位数邀请码的代码,结果如下:

最离谱的是,这位博主竟然说这段代码完全正确,也真是让人哭笑不得。
由此可见,不管是ChatGPT还是文心一言,它的能力再强也需要一个懂行的人掌舵。外行人甚至连对错都无法区分,说能取代程序员还是为时过早了。
不过我确实好奇Codex是否能够很好地处理这道题目呢?我通过GitHub Copilot进行了一下验证,正确性大家自己来看吧。

除了主动告诉GitHub Copilot要写什么代码外,其实更多情况下它会自动在我们编写代码时给出一些贴心的建议,从而让你的编码工作更轻松。
我们都知道,GitHub Copilot只能根据大数据的机器学习训练进行智能的代码推荐,它是不可能了解我们的业务需求的。
比如最近我在编写一个Compose的布局时,希望让每个子元素的宽度都充满父布局。
GitHub Copilot不可能知道我心里所想的需求,所以一开始给出的都是一些并非我想要的建议。
但是一旦我完成了第一个子元素的编写,GitHub Copilot就好像突然懂得了我的需求一样,后面的每个子元素都能给出准确的建议了,如下图所示:

这种情况会非常常见,因为绝大多数情况下,我们是不太需要主动想着如何去使用GitHub Copilot的,但它总是能够在我们的编码过程当中适时地给出一些能够让你会心一笑的建议。这里我没法给出太多具体的场景示例,但是只要你用过了之后,一定能明白我在说什么。
除了提高编码效率之外,GitHub Copilot还可以用于快速完成一些之前很多程序员不太愿意做的琐碎的事情,比如说写注释、写单元测试等等。
为你的代码写好详细的注释这是一个非常好的习惯,但可能并没有太多程序员能真正做好这一点,都觉得写注释太麻烦了。
而GitHub Copilot可以根据代码的逻辑自动生成相应的注释,我们可能只需要稍微引导和调整一下生成的内容就行了,这就让这些本来琐碎的事情变得非常轻松。
这里我还是拿刚才生成1万个8位数邀请码的代码进行举例,这次我们反过来,让GitHub Copilot根据现有的代码逻辑自动帮我们生成注释,如下图所示:

可以看到,效果还是非常好的。我只需要进行稍微的用词引导,GitHub Copilot就能立刻明白我的意图,并进行剩余的注释补全。
我的同事之前也开玩笑地说过,自己写代码时的思路时不时就被GitHub Copilot拿捏了,副机长的技术比机长还好怎么办。
确实,我相信现在世界上没有任何一个程序员的技术能比Codex更高了,但副机长技术再好也只能是给建议,最终拍板以及保证代码正确性的还是只能靠我们自己。
看到这里,相信你已经能够体会到GitHub Copilot强大的功能了,那么它难道就没有什么缺点吗?
这当然是不可能的。
首先,GitHub Copilot无法做到每次都给出精确无比的建议,满嘴跑火车的情况并不在少数。ChatGPT也有很多类似的情况,相信大家用过的应该都能感受到。
除此之外,我个人觉得GitHub Copilot最让人感到不够聪明的一点是,它的一切数据都来自于云端大数据的训练,而没有本地学习的能力。
我举一个例子吧,输入法大家肯定每天都在用,如果我们有一些频繁输入的词汇,打得次数多了,输入法就会更加倾向于将这些词汇的排序提前。这应该是再基础不过的能力了吧?
但GitHub Copilot却并没有这样的功能,某些我本地特有的代码模板,即使我敲了再多遍,下次再换一个文件输入时,GitHub Copilot依然不知道我想要的是什么,因为它的云端训练不到我本地特有的这些代码。
从工作原理的角度上讲,这种情况我完全能理解。不过每当发生时,我确实会在这一瞬间感觉它还不够聪明。
好了,以上就是我对GitHub Copilot所想要介绍的一切了。
看完之后你的感想是什么?
每个人或许都会有不同的想法,我个人的想法是,GitHub Copilot很好,但是我可能并不会愿意为其支付每个月10美元的费用。
因为GitHub Copilot提高的只是工作效率,我并不觉得它可以帮助提高我的编程能力。相反,使用GitHub Copilot之后,很多原本需要思考和分析的代码,现在都可以省略了。
而如果你是一个企业老板,那么我会大力推荐你,一定要为每个员工都购买一份GitHub Copilot,这是真的可以提高你的企业生产力的工具,并且它的费用相比于程序员的薪水来讲几乎可以忽略不计。
另外,本文全篇介绍的其实都还是上一个时代的GitHub Copilot版本。目前GitHub又推出了一个更加强大的Copilot X,我还没有拿到测试名额,所以不知道具体有多么的强大。
但这个崭新的AI时代真的在以日新月异的速度变化着,让我们一起来见证吧。
如果想要学习Kotlin和最新的Android知识,可以参考我的新书 《第一行代码 第3版》,点击此处查看详情。
我刚读了这个答案Convertingupper-casestringintotitle-caseusingRuby.有如下一行代码"abc".split(/(\W)/).map(&:capitalize).join&:capitalize到底是什么?在我自己将它放入irb之前,我会告诉你,它不是有效的ruby语法。它必须是某种Proc对象,因为Array#map通常需要一个block。但事实并非如此。如果我单独将它放入irb,我会得到syntaxerror,unexpectedtAMPER。 最佳答案 foo(&a_proc_o
我正在学习Ruby,遇到了inject。我正处于理解它的风口浪尖,但当我是那种需要真实世界的例子来学习一些东西的人时。我遇到的最常见的例子是人们使用inject来添加一个(1..10)范围的总和,我不太关心这个。这是一个任意的例子。在实际程序中我会用它做什么?我正在学习,所以我可以继续使用Rails,但我不必有一个以Web为中心的示例。我只需要一些我可以全神贯注的目标。谢谢大家。 最佳答案 inject有时可以通过它的“其他”名称reduce更好地理解。它是一个对Enumerable进行操作(迭代一次)并返回单个值的函数。它有许多有
西安华为OD面试体验开始投简历技术面试进展工作进展开始投简历去年一整年一直在考研和工作之间纠结,感觉自己的状态好像当时的疫情一样差劲。之前刚毕业的时候投了个大厂的简历,结果一面写算法的时候太拉跨了,虽然知道时dfs但是代码熟练度不够,放在平时给足时间自己可以调试通过,但是熟练度不够那面试当时就写不出来被刷了。说真的算法学到后期我感觉最重要的是熟练度和背板子(对于我这种普通玩家来说),面试题如果一上来短时间内想不出思路就完蛋了。然后由于当时找的工作不是很理想就又想考研了。但是考研是有风险的,我自我感觉自己可能冲不上那个学校,而找工作一个没成可以继续找嘛。本着抱着试试看的态度在boss上投了简历,
2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动
♥️作者:白日参商🤵♂️个人主页:白日参商主页♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!🎈🎈加油!加油!加油!加油🎈欢迎评论💬点赞👍🏻收藏📂加关注+!「想体验ChatGPT中文聊天?」那快进来,你用不上算我输项目场景:项目条件一、那就开始吧1、安装ChatGPT-Desktop2、OpenAPI设置二、使用实例恭喜你!!!配置成功了!!!API和URL都是博主免费提供给大家的!!!恭喜你!!!配置成功了!!!API和URL都是博主免费提供给大家的!!!🎈🎈加油!加油!加油!加油🎈欢迎评论💬点赞👍🏻收藏📂加关注+!项目场景:近几个月可以说ChatGPT是火得一
我们将Rails和EventMachine一起使用,当与Passenger一起使用该组合时,需要进行一些非常具体的设置。经过大量的试验和错误,我让EventMachine初始化工作得很好,但我想更好地理解代码。正如您在下面的代码片段中看到的那样,我们的初始化程序会检查乘客,然后在重新启动EventMachine之前检查它是否是fork进程。ifdefined?(PhusionPassenger)PhusionPassenger.on_event(:starting_worker_process)do|forked|#forpassenger,weneedtoavoidorphanedt
我现在正在努力学习Ruby和RubyonRails。我正在学习LearningRails,第1版,但我很难理解其中的一些代码。我通常使用C、C++或Java工作,因此Ruby对我来说是一个很大的改变。我目前对数据库迁移器的以下代码块感到困惑:defself.upcreate_table:entriesdo|t|t.string:namet.timestampsendendt变量来自哪里?它实际上代表什么?它有点像for(i=0;i另外,:entries是在什么地方定义的?(entries是我的Controller的名称,但是这个函数怎么知道的?) 最佳答案
RTS在阿里云视频直播的基础上进行底层技术优化,通过集成阿里云播放器SDK,支持在千万级并发场景下节点间毫秒级延时直播的能力,弥补了传统直播存在3~6秒延时的问题,确保了超低延时、低卡顿、秒开流畅的直播观看体验。本文介绍了基于RTS超低延迟直播优化强互动场景体验的最佳实践方案,并以阿里云播放器Aliplayer为例,详细介绍RTS超低延迟拉流接入、自动降级、排障信息获取等逻辑的实现,助力企业打造互动直播行业的产品竞争力。适用场景该方案适用于对超低延迟直播有诉求的客户,尤其是业务中存在强互动场景直播的场景。强互动场景直播主要是指对主播和观众存在互动,或观众存在更高实时性观看、画面互动需求的情况,
BigData/CloudComputing:基于阿里云技术产品的人工智能与大数据/云计算/分布式引擎的综合应用案例目录来理解技术交互流程目录一、云计算网站建设:部署与发布网站建设:简单动态网站搭建云服务器管理维护云数据库管理与数据迁移云存储:对象存储管理与安全超大流量网站的负载均衡二、大数据MOOC网站日志分析搭建企业级数据分析平台基于LBS的热点店铺搜索基于机器学习PAI实现精细化营销基于机器学习的客户流失预警分析使用DataV制作实时销售数据可视化大屏使用MaxCompute进行数据质量核查使用Quick BI制作图形化报表使用时间序列分解模型预测商品销量三、云安全云平台使用安全云上服务
看起来不像一个普通的Ruby类,那么它到底是什么呢?一个大的Ruby“block”,一些被解析的自定义元语言?只是好奇。我知道您可以在Fastfile中使用Ruby;该范式达到了多远,您可以在Fastfile中定义类或函数,还是必须仅保留faSTLane支持的“channel”概念? 最佳答案 Doesn'tlooklikeastraightRubyclass不是一个类,不是。但仍然是普通的ruby。有点DSL魔法。这意味着您可以自由地定义类或以其他方式做任何您想做的事情,只要您仍然正确配置faSTLane(调用lane方法等等)。