ChatGPT加持下,软件开发前后端招聘数量均增长!谁说AI取代程序员?

thbcm阅读(199)

随着人工智能的发展,各行各业的就业者难免会担心自己的工作是否会受到影响。那么,哪些职业领域更可能面临被AI取代的风险?又有哪些职业已经感受到了AI的冲击?

为了更客观地看待这个问题,今天我们一起看看从2022年11月(ChatGPT 发布前一个月)至2024年2月14日期间,Upwork平台的自由职业工作数据,以此观察哪些工作受到了AI的显著影响。

Tips:数据来源于Revealera.com,这是一家专业的招聘趋势数据供应商。同时,Upwork的工作发布数据也以RSS源的形式公开,便于任何人进行查看。文末附原文链接。


1.哪些工作类别的数量下降最多?

通过分析Upwork上12个最热门工作类别的84天移动平均值,发现自ChatGPT发布以来,大多数工作类别的数量实际上有所增加。

然而,以下3类工作却遭遇重创:

● 写作:下降 33%

● 翻译:下降 19%

● 客户服务:下降 16%

写作类工作的大幅下降符合预期,因为ChatGPT等工具在文本生成方面表现出色。客户服务类工作的减少也与聊天机器人技术的应用相吻合。


2.哪些工作类别受影响最小?

除了上述类别外,其他大多数工作类别未受负面影响,甚至出现增长:

● 视频编辑/制作:增长 39%

● 平面设计:增长 8%

● 网页设计:增长 10%

● 软件开发(后端):增长 6%

● 软件开发(前端/网页):增长 4%

这其实令人有些意外,因为我们曾听到很多关于人们使用ChatGPT生成代码、插图甚至完整视频的故事。

那么这些岗位数量增长的原因可能在于

1.AI工具尚未成熟

现有的AI图像和视频生成工具尚未达到专业水准,需要人工进行大量调整和优化。

2.用户学习曲线

用户需要时间熟悉并掌握AI工具的使用方法,才能将其有效地应用于实际工作。

3.哪些工作类别的时薪下降最多?

工作数量下降和薪酬下降之间是否存在相关性?由于缺乏自由职业者实际收入数据,我们智能分析工作发布中指定的估计时薪范围,这只是一个近似估算。

从数据可知,翻译工作时薪降幅超过20%,受影响最严重;其次是视频编辑/制作和市场研究。

平面设计和网页设计工作表现出较强韧性,不仅需求增加,时薪也略有上升。

时薪变化可能受到多种因素影响,难以得出明确结论。但可以肯定的是,平面设计和网页设计工作在AI时代仍然具有竞争力。

4.哪些AI技能的工作发布量增加最多?

我们已了解到某些职业需求正在减少,那么随着人工智能技术的不断进步,又有哪些职业的需求正在上升呢?

我最初的想法是,随着大语言模型(LLM)的培训和微调需求上升,数据标注任务和机器学习的需求也应随之增长,工作机会应有所上升。

然而,事实证明,这两个预测都是错误的。尽管数据标注任务在初期确实有所增加,但在过去的十个月里,其数量已经趋于稳定。

而自ChatGPT发布以来,机器学习相关的职位实际上有所减少。

另一方面,有关生成人工智能内容、开发AI智能体、整合OpenAI/ChatGPT API和开发AI应用的工作变得越来越受欢迎。但最最热门的用例是什么?是聊天机器人。

自从ChatGPT和OpenAI API发布以来,与开发聊天机器人相关的工作数量激增了2000%。如果现在有一个AI的杀手级应用,那无疑是开发聊天机器人。

这让我得出一个结论:大多数公司并没有投身于那些令人兴奋的工作,比如开发自己的大语言模型或使用大量数据进行模型训练。

相反,它们更倾向于将OpenAI的API集成到他们的现有产品中,并开发聊天机器人来替代客户服务代表。

原文链接:

https://bloomberry.com/i-analyzed-5m-freelancing-jobs-to-see-what-jobs-are-being-replaced-by-ai/

“智能体”时代来临?来看看比尔·盖茨眼中的 AI 未来!

thbcm阅读(224)

去年,比尔·盖茨发表了一篇题为《AI将彻底改变计算机的使用方式》的长文,深入浅出地阐述了他对人工智能未来发展趋势的预测。

他认为,人工智能将迎来全新的形态——“智能体”(Agent),并将深刻地改变我们与计算机的交互方式,甚至重塑整个软件行业。

我们一起来看看他怎么说。



从“应用”到“智能体”:交互方式的革命



比尔·盖茨指出,现有的计算机交互方式仍然相对“笨拙”。我们需要根据不同的任务选择不同的应用程序,例如使用Word写文档、使用Excel处理数据等等。

而未来的“智能体”将彻底改变这种现状。

他预测,在未来五年内,人工智能将发展到能够理解自然语言,并根据用户的个人背景知识完成各种任务的程度。

届时,我们不再需要打开各种应用程序,只需要直接告诉“智能体”我们想要做什么,它就能自动帮我们完成。

这种“智能体”将比现有的任何应用程序都更加智能、主动和个性化。它能够跨应用程序执行任务,记录用户的行为,并随着时间的推移不断学习和改进,提供更加精准的信息和建议。

智能体:四大领域的颠覆者



在当今的商业领域,众多企业推出的所谓”智能”产品,其实质不过是一些基础的自动化工具,我们更倾向于称它们为机器人(Bot)。

这些机器人被集成在各种应用程序中,通过人工智能技术来执行一些特定的任务,比如对文本进行修饰或扩展。但它们缺乏记忆能力,无法记住用户的使用习惯或偏好,因此提供的服务往往显得机械而冷漠。

而真正的智能体则大不相同,它们更加智能、更加主动。在用户提出问题之前,智能体就能够根据用户的需求提供合适的建议。

它们能够跨越不同应用程序,处理各种任务,记录用户的行为,识别用户的动机和意图。随着时间的推移,智能体会不断学习和适应,变得更加精准,为用户提供更加个性化和有用的信息和建议。

比尔·盖茨认为,“智能体”将在医疗健康、教育、生产力和娱乐购物等四大领域发挥巨大作用。

在医疗领域,“智能体”可以帮助病人进行初步的疾病分类、提供治疗建议,甚至协助医生进行诊断和制定治疗方案。这将极大地缓解医疗资源不足的问题,尤其是在贫困地区。

在教育领域,“智能体”可以为学生提供个性化的学习辅导,帮助老师从批改作业等繁琐的工作中解放出来,从而将更多精力投入到教学中。

在生产力领域,“智能体”可以帮助我们自动完成各种工作任务,例如撰写商业计划书、制作演示文稿、整理电子邮件等等,从而极大地提高工作效率。

在娱乐购物领域,“智能体”可以根据我们的兴趣爱好推荐电影、音乐、书籍等,为我们提供更加个性化的娱乐体验。

技术挑战与社会影响



智能体的潜力无疑是巨大的,它们将全面渗透到我们日常生活的各个角落,对软件行业乃至整个社会产生深远的影响。

在计算技术领域,我们经常提到的”平台”,如安卓、iOS和Windows,是应用程序和服务运行的基础。而智能体有望成为新一代的平台。

开发应用程序或服务时,你无需精通编程或图形设计。只需向智能体表达你的需求,它便能自动进行编码、界面设计、甚至logo创作,并将成品发布到应用商店。

智能体市场不会由任何一家公司独占,未来将有多种AI引擎可供选择。目前,智能体还依赖于Word、Excel等软件,但它们终将实现独立运行。

虽然现在许多智能体是免费的,但随着时间的推移,我们可能会为这些高效、智能的智能体付费。这将改变商业逻辑,企业将不再需要迎合广告商,而是真正以用户为中心,为他们定制智能体。

然而,在这些智能而复杂的智能体成为现实之前,我们仍需解决众多技术难题。

例如:如何构建能够存储和处理用户个性化信息的数据库?如何确保不同“智能体”之间能够协同工作?如何防止“智能体”被滥用或造成危害?

除了技术挑战之外,“智能体”的普及也将带来深远的社会影响。

例如,当“智能体”能够代替人类完成大部分工作时,我们该如何重新定义工作的意义?我们该如何分配社会资源?我们该如何应对由此带来的伦理和社会问题?



尽管面临着诸多挑战,但比尔·盖茨对“智能体”的未来充满信心。

他相信,在不久的将来,“智能体”将彻底改变我们的生活方式,并将人类社会带入一个全新的时代。

正如比尔·盖茨在文中所说:

“在不远的将来,智能体会迫使人类去思考,我们这么做是为了什么?……在所有答案都是已知的情况下,每个人还想要去上学吗?每个人都有大量的空闲时间,你还能有一个安全和繁荣的社会吗?”

这些问题值得我们深思。面对“智能体”时代的到来,我们既要满怀期待,也要做好充分的准备,以迎接这个充满机遇和挑战的未来。

Rust语言为什么在2024年依然流行?真的安全、快速又可靠吗?

thbcm阅读(220)

Rust 是一种系统编程语言,近年来因其独特的安全、性能和并发性支持而备受关注。

作为编程学习者,你对Rust的了解有多少呢?为什么它在2024年仍然流行?它的核心优势及常见误解有哪些?一起往下看看~

Rust的核心优势



Rust的诞生是为了解决C和C++等传统系统编程语言中长期存在的内存安全问题。


随着开发者们越来越意识到内存安全和性能的重要性,Rust独特的优势开始显现,并迅速吸引了大量关注。

1.安全

Rust的设计理念是“内存安全,无惧并发”。它通过所有权、借用和生命周期等机制,在编译阶段就能有效地防止空指针解引用、数据竞争和缓冲区溢出等常见错误,从而提高代码的可靠性和安全性。

2.性能

Rust强调零成本抽象和编译时评估,能够生成与C/C++相媲美的高性能代码。这使得Rust成为开发对性能要求苛刻的应用程序,例如游戏引擎、操作系统和高性能计算软件的理想选择。

3.并发性

Rust提供了安全且易于使用的API来处理线程和共享数据,简化了并发编程。开发者可以更轻松地编写高效、可靠的并发代码,充分利用多核处理器的性能。

4.跨平台兼容性

Rust支持在多个平台上运行,包括Windows、macOS和Linux,方便开发者构建跨平台应用程序和库。


关于Rust的常见误解



误解一:Rust总是比其他语言快

Rust强调零成本抽象和内存安全,但这并不意味着它在任何情况下都比其他语言快。算法效率、编译器优化和硬件架构等因素都会影响最终的性能表现。

在某些场景下,例如简单的脚本任务和快速原型设计,其他语言可能更具优势。

误解二:Rust的内存安全保证以性能为代价

Rust的所有权和借用系统确实引入了一些运行时检查,但这些检查通常非常轻量级,并且在编译优化过程中会被消除。

实际上,Rust的所有权模式可以实现更有效的内存管理,从而在某些情况下获得比依赖垃圾回收机制的语言更好的性能。

误解三:Rust无法实现与C/C++相当的低级性能

Rust提供了“不安全块”等机制,允许开发者在必要时绕过安全检查,直接操作内存。

此外,Rust的零成本抽象和与底层硬件的紧密集成使开发者能够编写与传统系统编程语言性能相媲美的高度优化代码。


Rust与软件开发



Rust的未来充满希望。它专注于内存安全和消除错误,为系统级编程、嵌入式系统以及其他注重性能的领域提供了一种可靠的解决方案。

虽然一些遗留系统可能仍然依赖C或 C++,但Rust凭借其安全性和性能优势,正逐渐成为一种引人注目的替代方案。

随着Rust社区的不断壮大和丰富的库与工具生态系统的日益完善,Rust将在软件开发领域发挥越来越重要的作用。

Rust的崛起为软件开发领域注入了新的活力,也为开发者们提供了探索新技术的机会。

你写代码爱写注释吗?程序员:我不写,但别人最好写!

thbcm阅读(219)

知乎上有个关于“如何看待程序员不写注释这一现象”的讨论,浏览量达到78W+,热度很高。

可见大家对这个话题还是很感兴趣的,我浏览了大部分回答,发现大家的观点可以归纳为以下几点:

1️⃣不写注释可能会给自己和他人带来麻烦,因为随着时间的推移,即使是自己也可能会忘记代码的意图。

2️⃣如果代码的可读性很高,那么注释可能显得多余。

3️⃣只要有详尽的文档,代码就不需要注释。

4️⃣程序员在写代码时可能不愿意写注释,但在阅读别人的代码时,却希望对方有注释。

还有人总结了程序员最讨厌的四件事:写注释、别人不写注释、写文档、别人不写文档。

注释是代码的重要组成部分,但很多程序员却不愿意写,这是为什么呢?

1.程序员不写注释的原因



● 节约时间

一些程序员认为编写注释会消耗过多时间,因此经常忽略这一步骤。然而,精心编写的注释实际上是程序员对代码深层次理解和分析的反映,它对于增强代码的可读性和维护性至关重要。

● 认为注释可读性低

有些程序员认为代码本身应足够清晰,因此不需要额外的注释。但事实上,代码的解读通常需要特定的背景知识,而恰当的注释能够为那些不具备这些知识的人提供额外的指导和帮助。

● 偷懒

一些程序员可能出于懒惰或其他因素,选择忽略编写注释。这种行为不仅会降低代码的清晰度和可维护性,还可能对团队的协作精神和工作氛围造成不良影响。

2.如何解决这一现象



● 加强注释阅读的重要性

团队应当重视注释在提升代码质量和促进团队合作中的作用,鼓励开发者养成编写注释的良好习惯。例如,在代码审查过程中,应当特别留意注释是否规范、详尽,确保能够为代码的理解和维护提供有效支持。

● 提供更多的样板注释

公司可以制定一套代码编写规范和注释样板,为程序员提供标准化的注释模板。这种做法不仅能够简化注释的编写过程,降低其难度,而且有助于确保注释的一致性和质量。

● 强制要求写注释法规

当新成员加入团队或新任务被分配时,团队可以强制要求程序员在提交代码前添加必要的注释,这有助于逐步培养团队成员对注释重要性的认识和习惯。

● 提高代码可读性

程序员应当致力于提升代码的可读性,确保代码结构条理清晰、变量和函数命名规范,遵循良好的编程风格可以减少对注释的依赖。

● 使用适当的编码工具和插件

一些编码工具和插件具备自动生成注释的功能,这可以显著减少程序员手动编写注释的工作量,还可以提高编写注释的效率。

● 鼓励交流与分享

团队应该鼓励成员之间的交流与分享,以增强程序员对注释重要性的认识,并从中获得实际的好处。

新手程序员如何判断自己的代码是高质量还是烂代码?

thbcm阅读(250)

“五年工作经验,代码质量却不如三年程序员?”

这句话或许有些夸张,却也反映出代码质量参差不齐的现状。

那么,究竟什么是高质量的代码?如何才能写出让同行称赞、让机器流畅运行的代码呢?

今天我们就来聊一聊这个程序员进阶的必经之路。

高质量代码:不仅仅是让机器能懂

代码的优劣是一个相对的概念,高质量代码并非一个绝对明确的概念,我们难以为其设定一个精确的界定。

然而,基于日常开发中的实践经验,我们可以从几个关键维度来衡量代码的质量:

1.可读性:代码是写给人看的

很多人误以为代码只需要机器理解就够了,但实际上,代码首先是写给人看的。

优秀的代码应该像一篇结构清晰、逻辑严谨的文章,让其他程序员能够轻松理解其意图。

这包括规范的命名、合理的注释、清晰的分层结构以及高内聚低耦合的设计。

2.可维护性:代码是需要不断迭代的

现实中的软件开发很少是一次性的——即开发部署后无需再进行任何迭代的情况。大多数情况下,我们需要不断地在一个已有模块上添加新功能和新代码。

因此,高质量的代码必须具备良好的可维护性。这种可维护性在代码层面上可以通俗地概括为:能够方便地修正bug,对旧代码进行修改,以及添加新功能。

这些修改所需的成本,比如是否容易引入新bug、对现有逻辑的破坏程度,以及所需的时间等等,都是衡量代码可维护性难易的重要指标。

3.可扩展性:代码要拥抱变化

软件开发领域有一句名言:“唯一不变的就是变化本身”。

在软件开发中,SOLID原则中的开闭原则是至关重要的,它提倡代码应该对修改保持封闭,同时对扩展保持开放。

这一原则强调了高质量代码的可扩展性。面对业务的持续迭代,开发者应当专注于使代码能够通过最小的改动来适应新功能的需求。

也就是能够以最小的代价来适应新的需求,而不会牵一发而动全身。

4.可复用性:代码要避免重复造轮子

在日常编程工作中,遵循“不要重复发明轮子”的原则至关重要。这具体体现在代码层面上,意味着应避免编写大量重复的代码段。

高质量的代码应保持简洁性,并且能够通过抽象和封装,将重复的代码逻辑抽离出来,以实现代码的复用。

通过这种方式,我们不仅能够减少代码的冗余,降低维护的难度,还能提高开发效率。

5.可测试性:代码要经得起考验

单元测试是开发人员确保代码质量的关键手段之一,因此,代码是否易于编写单元测试,也是评价其质量的一个重要标准。

如果代码难以进行单元测试,这通常暗示着代码设计可能存在一些问题,如过度耦合、缺乏抽象或接口定义不清晰等。你可能需要重新考虑其设计,通过重构来提高代码的可测试性。

这不仅有助于及时发现和修复bug,还能在长远中提高代码的可维护性和可扩展性。

想要写出高质量的代码并非一蹴而就,需要不断学习和实践。

前端入门有哪些技巧或经验分享?

thbcm阅读(215)

在互联网飞速发展的今天,前端开发作为连接用户与网络世界的桥梁,其重要性不言而喻。然而,对于许多初学者来说,面对浩如烟海的前端知识体系,常常感到迷茫和困惑。

前端学习是一个螺旋上升的过程将理论学习与实战演练紧密结合,才能真正掌握前端开发的精髓。

迈入前端世界的大门,首先需要掌握的是HTML、CSS和JavaScript这三大基石。

1. HTML:构建网页的骨骼

HTML是一种标记语言,用于构建网页的基本结构和内容。学习HTML的关键在于理解各种标签的含义和用法,并通过不断的练习来熟练掌握。

在学习过程中,需要注意以下常见错误:

● 缺少结束标签

每个标签都需要有始有终,否则浏览器将无法正确解析代码。

● 错误的嵌套

HTML标签的嵌套需要遵循一定的规则,否则会导致页面结构混乱。

● 大小写错误

虽然HTML标签对大小写不敏感,但为了代码的可读性,建议统一使用小写字母。

● 属性错误

每个标签都有一系列属性,需要根据实际情况进行设置。

● 忘记引号

属性值需要用引号括起来,否则会被视为无效属性。

2. CSS:打造网页的颜值

CSS用于控制网页的样式和布局,赋予网页丰富多彩的视觉效果。学习CSS的关键在于理解盒模型、选择器、层叠等核心概念,并能够灵活运用各种样式属性。

以下是CSS学习中需要避免的一些常见错误:

● 盒模型错误

设置元素的宽度和高度时,需要考虑内边距和边框的影响。

● 浮动错误

使用浮动布局时,需要及时清除浮动,避免影响后续元素的布局。

● 选择器错误

选择器用于选中需要设置样式的元素,选择器错误会导致样式无法生效。

3. JavaScript:赋予网页生命力

JavaScript是一种脚本语言,用于实现网页的交互功能和动态效果。学习JavaScript的关键在于理解变量、数据类型、函数、DOM操作等核心概念,并能够运用JavaScript编写各种逻辑代码。

以下是JavaScript学习中需要关注的一些重点和难点:

● 变量声明

使用varletconst关键字声明变量,避免变量污染全局作用域。

● 类型问题

JavaScript是弱类型语言,需要注意类型转换和类型判断。

● 异步问题

理解异步编程的概念,掌握Promise和async/await的用法。

● 作用域问题

理解JavaScript的作用域链和闭包的概念。

● 对象引用问题

JavaScript中的对象是引用类型,需要注意对象传递和修改的问题。

当你掌握了HTML、CSS和JavaScript的基础知识后,就可以尝试开发一些小项目来巩固所学知识,比如个人博客网站、Todo List应用等。

在项目开发过程中,你会遇到各种各样的问题,此时前端学习的旅程才刚刚开始。

想要真正成为一名优秀的前端开发者,你需要不断学习新的技术、框架和工具,并积极参与开源项目和技术社区,与其他开发者交流学习。

4种好玩又实用的编程语言!你都“玩”过哪个?

thbcm阅读(199)

在众多编程语言中,选择哪一种开始学习或者应用于项目,常常困扰着大家。

如果想要兼顾趣味性和实用性,Python、JavaScript、Go和Rust都是不错的选择。

这四种语言各自拥有独特的优势,覆盖了从前端网页到后端服务器,甚至系统级编程的广泛领域,并且都拥有活跃的社区和丰富的学习资源。



Python:简洁易用的全能选手



Python以其简洁明了的语法和强大的标准库著称,被誉为最容易学习的编程语言之一。无论是网站后端开发、数据分析、机器学习还是简单的脚本编写,Python都能轻松应对。

丰富的第三方库,例如用于数据处理的NumPy、Pandas,用于数据可视化的Matplotlib、Seaborn,以及用于机器学习的TensorFlow、PyTorch等,使得Python几乎可以应用于任何领域。

对于初学者来说,Python友好的语法和丰富的学习资源能够帮助他们快速入门,并通过编写有趣的项目来巩固知识。

对于专业人士来说,Python强大的功能和丰富的生态系统能够帮助他们高效地完成各种工作。

JavaScript:构建网页的基石



JavaScript是构建交互式网页的基石,也是前端开发的必备技能。它通过操作HTML和CSS,为网页增添了动态效果和交互体验。

近年来,随着Node.js的兴起,JavaScript也开始涉足后端开发领域,成为全栈开发的热门选择。

在前端开发领域,React、Vue等JavaScript框架的出现,大大提升了开发效率和用户体验。

而在后端开发领域,Node.js结合Express、Koa等框架,能够快速构建高性能的网络应用和API接口。

Go:高效稳定的并发能手



Go语言,也称为Golang,由Google开发,是一种语法简洁、性能优越的编译型语言。它以其对并发编程的良好支持而闻名,非常适合开发大型网络服务和分布式系统。

Go语言内置了goroutine和channel等并发原语,使得开发者能够轻松编写高并发程序,充分利用多核处理器的性能。

同时,Go语言拥有强大的标准库和活跃的社区,提供了丰富的网络编程、数据处理等工具,方便开发者快速构建高性能、高可靠的应用程序。

Rust:安全高效的系统语言



Rust是一门专注于安全、并发和性能的系统级编程语言。它通过严格的所有权机制、借用检查和生命周期管理,有效地避免了内存泄漏、数据竞争等常见问题,保证了程序的稳定性和安全性。

Rust非常适合开发对性能和安全要求极高的系统软件,例如操作系统、数据库、网络协议等。

虽然学习曲线相对陡峭,但Rust强大的功能和活跃的社区正在吸引越来越多的开发者加入。

—-

Python、JavaScript、Go和Rust,这四种编程语言,代表着不同的编程范式和应用领域,为开发者提供了多样化的选择。

无论是追求简洁易用、快速开发,还是注重性能、安全和并发,都能在这四种语言中找到适合自己的选择。

微软弃用安卓,中国员工获配iPhone 15!什么情况?

thbcm阅读(303)

微软近期宣布了一项新政策,规定自2024年9月起,其在中国的员工在工作时间内仅能使用iPhone手机,不得使用基于安卓系统的设备。

微软指出,所有使用Android手机的员工都可以获得一部128GB版的iPhone 15,作为他们的工作手机。

微软的这项新措施是其全球“安全未来计划”(Secure Future Initiative)的一部分,目的是确保所有员工都能通过Microsoft Authenticator和Identity Pass两款应用程序进行安全的身份验证。

什么是“安全未来计划”?

微软的”安全未来计划”于2023年末启动,是一项旨在加强公司产品和服务安全性的内部战略。通过创新技术、文化改革和严格的安全管理,该计划致力于应对日益复杂的网络安全挑战,并提升整体安全水平。

计划的核心目标是减少微软产品中安全漏洞的发生,并加快修复这些漏洞的速度。此外,微软还致力于为用户提供更安全的默认设置,并推广使用微软身份验证库,以更有效地保护用户账户信息。

Microsoft Authenticator,一款基于微软身份验证库的移动应用,是该计划的关键组成部分。

它不仅支持身份验证,还提供安全登录功能。启用双重验证后,用户必须通过该应用批准所有登录请求,从而显著提高账户的安全性。

与此同时,Identity Pass作为一款企业级身份验证应用,与Microsoft Authenticator功能相似,但专为企业办公环境设计。

使用Identity Pass需要提交更严格的身份证明和自拍照,确保了其在企业级应用中的安全性和可靠性。

Android系统为何不是首选?

我们都知道,Android操作系统安装应用程序的方式相当自由,用户可以随意下载应用安装包,但只有通过官方Google Play应用商店下载的应用程序才能保障其安全性。

更为关键的是,这两款应用的Android版本依赖于谷歌的GMS服务才能正常运行。

首先,它们需要使用谷歌的FCM服务来提供推送通知。正如之前提到的,用户在登录个人或办公账户时,需要在应用中批准登录请求,否则请求将被拒绝。如果应用无法接收到通知,用户就无法进行登录批准。

此外,GMS还提供了一系列的安全服务和API,这些服务可以帮助应用检测设备的安全状态,并防止应用在可能被破解或不安全的设备上运行。对于身份验证应用来说,这些安全服务是至关重要的。

然而,由于Google Play和GMS服务在中国大陆地区不可用,中国员工理论上无法通过官方渠道获取并使用这两款应用。

因此,微软为员工提供iPhone手机,以推进其“安全未来计划”,确保员工能够使用安全的身份验证工具,这在逻辑上是合理的。

通过使用iPhone,员工可以利用苹果的App Store和APNS消息推送服务,确保他们能够安全地使用Microsoft Authenticator和Identity Pass,从而保护他们的数据安全和个人隐私。

为什么Python运行速度这么慢?有什么解决方法吗?

thbcm阅读(202)

说起简单易学的编程语言,你一定会想到Python;然而,说起Python,许多人在说完它的优点后,会接一句“但是就是慢……”

与其他编程语言相比,Python的速度一直是它为人诟病的一点。但究竟是什么原因导致了它的速度瓶颈?我们一起来探究一下。

1.抽象级别

为了更好地理解Python的速度问题,我们需要先了解编程语言的抽象级别。

简单来说,抽象级别越高,语言就越接近人类的思维方式,也更容易理解和使用;反之,抽象级别越低,语言就越接近机器语言,执行效率也越高。

C++、PHP、Java、Python等编程语言被广泛认为是现代或高级语言,原因在于它们具备跨平台的特性,能够在各种系统上运行。

相比之下,汇编语言则需要针对不同处理器的指令集编写特定程序,这就意味着同一段代码无法在不同CPU架构的计算机上通用。

金字塔的每一层都存在着一定的层级差异。在这个层级结构中,我们首先可以识别出过程式编程语言,例如C语言。

使用C语言时,程序员需要对程序的每一步有清晰的认识和控制,这使得C语言在执行效率上非常出色。然而,这种控制的精确性也带来了复杂性,并在一定程度上限制了其灵活性。

而有些语言通过提供更易于阅读和灵活的代码编写方式,来简化编程任务。Python就是这类语言的代表。

Python语言的语法简洁明了,使得它几乎可以应用于任何领域,并且易于快速开发和实现。

但Python在执行效率上可能不如C语言等底层语言。为什么呢?



2.解释型语言

与C++等编译型语言不同,Python是一种解释型语言。

编译型语言在执行前会将代码一次性转换为机器码,而解释型语言则是在运行时逐行解释执行代码。

这种“实时翻译”的方式虽然赋予了Python更大的灵活性,但也带来了额外的开销。

每次运行代码时,解释器都需要解析、分析和执行代码,这无疑降低了程序的运行速度。

3.全局解释器

CPython是Python的默认解释器,它使用全局解释器锁(GIL)来保证线程安全。GIL就像一座独木桥,同一时间只允许一个线程执行Python字节码。

虽然GIL能够有效防止多线程冲突,但也限制了Python在多核处理器上的并行处理能力。

即使在多核环境下,Python程序也只能利用单个核心进行计算,这无疑制约了程序的运行速度。



4.动态类型

Python是一门动态类型语言,这意味着开发者无需在声明变量时指定其类型。这种灵活性虽然方便了代码编写,但也增加了程序运行时的负担。

在动态类型语言中,解释器需要在运行时确定变量的类型,并根据类型执行相应的操作。

相比之下,静态类型语言在编译阶段就确定了变量类型,因此能够进行更积极的代码优化,从而提高程序的执行效率。



5.垃圾回收

Python使用垃圾回收机制来自动管理内存。垃圾回收器会定期清理程序中不再使用的对象,释放内存空间。

垃圾回收机制虽然减轻了开发者的负担,但也带来了一定的性能开销。

垃圾回收过程需要占用一定的CPU时间,而且垃圾回收的时机也难以预测,这可能会导致程序运行出现卡顿。

编程语言越来越多,为什么C/C++还没有被现在的时代淘汰呢?

thbcm阅读(224)

近年来,随着人工智能、大数据等领域的兴起,各种新兴编程语言层出不穷,例如Python、Go等,它们以更简洁的语法、更丰富的库以及更友好的开发体验,吸引了大量开发者。

在这样的背景下,不少人开始质疑C/C++这类“老牌”语言的未来,认为它们终将被时代淘汰。

然而,C/C++ 真的会消失吗?答案或许是否定的。

与其说 C/C++ 会被淘汰,不如说它们在某些领域具有独特的不可替代性,这种不可替代性决定了它们在未来相当长一段时间内依然会占据重要地位。

C/C++的不可替代性源于其对底层硬件和实现细节的精细控制能力。

与Python、Java等高级语言相比,C/C++代码能够更直接地映射到汇编语言,程序员可以清晰地了解代码的执行过程,并进行精确的优化。

以 C 语言为例,一个简单的 if…else 语句,其对应的汇编代码简洁明了,程序员可以根据实际需求对代码进行精雕细琢,最大限度地压榨硬件性能。

反观高级语言,由于其代码执行需要经过多层抽象和转换,程序员往往难以掌控最终的执行逻辑,更无法进行底层优化。

正是这种对底层细节的掌控力,使得 C/C++ 在以下领域展现出不可替代的优势:

1.操作系统和嵌入式系统

操作系统作为计算机系统的核心软件,对性能和稳定性有着极高的要求,而嵌入式系统则受限于硬件资源,需要代码精简高效。C/C++能够直接操作硬件资源,精细控制代码执行流程,是开发这类系统的首选语言。

2. 游戏引擎开发

游戏引擎需要最大限度地利用硬件资源,渲染出逼真的游戏画面和流畅的游戏体验。C++凭借其高性能和对硬件的精细控制,一直是游戏引擎开发的首选语言,几乎所有主流游戏引擎都使用C++编写。

3. 加密与安全领域

加密算法和安全软件对性能和安全性要求极高,需要程序员对代码执行过程有完全的掌控,以避免潜在的漏洞和攻击。C/C++在这方面具有天然优势,能够满足加密与安全领域对代码安全性和执行效率的苛刻要求。

—–

当然,C/C++也并非完美无缺,其语法相对复杂,开发效率较低,学习曲线也比较陡峭。

但瑕不掩瑜,C/C++在某些关键领域依然具有不可替代性,这种不可替代性决定了它们在未来相当长一段时间内依然会是开发者不可或缺的工具。

总而言之,C/C++的未来并非由其他语言的兴起所决定,而是由其自身特性和应用领域所决定。

只要操作系统、游戏引擎、加密安全等领域依然存在,C/C++就不会消失,它们将继续在这些领域发挥着不可替代的作用。

联系我们