大厂为啥都发苹果电脑?哪个系统是开发之王?

最近秋招火热进行中,今年大厂为了抢人才,各出奇招。比如腾讯校招支持 24 届应届生投递,京东校招开放 1.8 万个岗位、同时将校招生薪酬再次大幅上调!

图片

大厂除了薪资福利待遇能打之外,资源和配套设施也会更齐全一些,比如给研发人员配备的电脑是清一色的 Mac 苹果电脑。

图片

为什么大厂都发苹果电脑呢?难道真的就是因为苹果电脑更贵一些?还是因为有其他的理由?

其实有一个很重要的点:苹果电脑用的是 Mac 系统,而其他品牌的电脑基本不会使用 Mac 系统,大多数都是 Windows。

那么苹果系统到底是不是开发之王呢?学编程到底用什么电脑呢?

关于这个问题,其实网上争议不断,有同学表示苹果电脑性能好、Bug 少,妥妥的生产力:

图片

也有同学说开发 Linux 最好用,Mac 除了装逼,没啥用:

图片

作为一名 Windows、Mac 和 Linux 系统都使用了多年的程序员,我会结合自己的经历来给大家一些参考和建议。

接下来先分别聊聊每种操作系统的优点和不足吧。

Windows

先说下国内用户最多的操作系统 Windows。我第一次接触 Windows 还是在小学一年级,也算是用了近 20 年的 Windows 吧。一直到大三进入字节跳动实习前,我都是 Windows 的忠实用户。

当然了,大学前用 Windows 最主要做的事情不是学编程,而是打游戏。GTA、DNF、守望先锋,叫的上名字的游戏我基本都玩过,曾经也想过去开游戏直播哈哈。哦对了,前段时间确实开了几场黑神话悟空的游戏直播,这游戏你不用 Windows 电脑基本是玩不动的。

图片

Windows 相对于其他操作系统的优势之一,就在于能用它来玩游戏!

再延伸一点,可以说 Windows 的 软件生态非常丰富 ,无论是游戏、办公、甚至是看片儿,Windows 总有那么几款软件符合你的诉求。而且即使到了 2024 年,有些软件还是只有 Windows 版本的,比如我开直播要使用的软件,就只有 Windows 才有,所以只能用 Windows 电脑来直播。

图片

毕竟用户基数摆在那里,可以理解。

而且在 Windows 上使用软件、或者 “强制使用原本不能用的软件” 也是相对方便的,对于学生党来说,能节约很多时间和金钱成本。这点我就不展开说了,你懂的。

图片

此外,Windows 还有一些其他优点,比如。比如。。比如。。。

好,接下来说一下 Windows 的缺点。我用 Windows 多年,一个很不爽的体验就是它 不够安全、不够稳定 。盗版软件多、一不留神电脑就中毒了;电脑配置再高,还是不可避免地出现蓝屏和死机,丢了数据真的心态爆炸啊!

我们办公室里有一台 3 万多的 Windows 顶配主机,到了夏天偶尔还会出现蓝屏,相信大家也有过类似的经历吧。

图片

此外,Windows 升级比较频繁,而且每次升级的版本改动很大,经常出现 软件兼容性问题 ,导致原本正常使用的软件,更新系统后就不能用了。前段时间微软全球蓝屏事件,大家应该还没忘吧。

对于学编程的同学来说,Windows 还有 2 个问题。

首先就是 安装编程相关的环境比较麻烦 ,刚开始装个 Python、Java 啥的可能还好,等之后你要装 Docker、跑一些知名开源项目的时候,就知道有多麻烦了。虽然在 Windows 上可以使用 WSL(Linux 子系统)或者第三方虚拟机来辅助搭建编程环境,那也不如天然支持的要香呀。

还有就是 Windows 的 可定制性比较差 ,系统对用户不透明。绝大多数同学只是用它来办公还感受不到这点,但在你后面编程搭环境、尤其是学习一些系统安全知识的时候就会发现,很多时候你要修改系统设置时,很难找到对应的入口,或者就是必须反复重启电脑才能修改成功。

综上,个人感觉 Windows 更适合家用娱乐和基础办公。

Mac OS

我是从大三在字节跳动实习的时候,第一次接触到 Mac OS 系统,原因很简单,公司发的。

图片

作为一个十几年 Windows 忠实用户,我刚开始用 Mac 非常不习惯,无论是界面、快捷键还是终端。所以就是白天工作用 Mac,下班就换成自己的 Windows 笔记本。

记得我当时有个同事,他就疯狂给我安利 Mac 怎么怎么好用、怎么怎么高效。我当时还心想:哼,哥们用 Windows 效率也贼高好吧。

但没想到,用了半年之后,我就 “真香” 了,从大四开始,我基本上就把 Mac 作为自己的主力机了。

先说说我感受到的 Mac OS 的优点吧,首先就是我用了 Mac 几年了,几乎没有发生过死机。虽然也死机过,但次数屈指可数,明显比 Windows 的 稳定性高

Mac 上 安装软件也很方便 ,就跟我们手机上装软件一样,Mac 有自己的正版的应用商店,安装软件更高效、软件更好管理、也更安全。

有同学说了:Windows 也有应用商店呀?

但你用 Windows 的时候会从商店里下载么?

图片

而且个人感觉 Mac OS 的界面也更好看大气,当然,这个也可能和 Mac 电脑本身的屏幕和设计有关。所以做前端开发和设计的同学用 Mac 的体验会更好一些。不过这一点在如今的影响是越来越少了,因为很多其他品牌的电脑都在仿苹果的设计。

此外,如果你是一个苹果控,那么你还能感受到 Mac 生态系统的强大,各设备间同步数据真的非常方便。哪怕像我一样除了电脑之外不用苹果生态,使用 Mac 也不会有任何负面体验。

对学编程的同学来说,Mac OS 最大的亮点莫过于它是 基于 UNIX 操作系统 的,自带了很多开发工具和终端,而且终端的很多命令和企业开发常用的 Linux 系统类似,便于我们搭建环境和学习命令行的使用:

图片

在 Mac OS 中使用 Homebrew,想装什么开发环境和库都很方便:

图片

此外,苹果电脑近几年持续进化,芯片从 M1 到 M3 的跃进,带来的是更丝滑的系统使用和编程开发体验。同等配置(比如 16 G)下,开发的流畅度和开发软件打开的速度都比 Windows 要快很多,也基本没出现过软件卡死。

很多 Windows 笔记本的续航能力都不如 Mac,对于程序员来说,出去旅游啥的可能还会带着电脑。像我如果出门带 Windows 笔记本,电量不到 10% 的时候我就已经汗流浃背了,所以还要带个大充电器;而如果带 Mac,哪怕开很多软件,电量也够撑 1 天,充电器都不用带了。而且我平时基本上工作完直接就把 Mac 笔记本盖子合上,第二天直接打开,电量基本上没少。

大厂为什么使用 Mac 更多?还有 2 个很重要的原因。

第一个是安全,可以防止员工安装一些风险软件,而且大厂一般都会在电脑上装监控软件,你的几乎任何行为都会被记录。印象比较深刻的是,我当时用腾讯的工作电脑在家办公,好像是想下载什么软件来着,公司的 IT 机器人就给我发来警告了,给我吓得够呛。

第二个就是软件开发的一致性。由于线上部署项目一般会用 Linux 服务器,所以本地用 Linux 或 Mac OS 开发,更容易保持跟线上环境的一致,可以减少出现 Bug 的概率。比如经典的文件路径问题,如果你用 Windows 开发 + Linux 部署,可能需要额外写适配代码。我之前讲 代码生成器共享平台项目 的时候,很多同学就表示被文件路径坑了。

当然,Mac OS 也是存在缺点的,首先就是对于我这种白票党来说,我发现 Mac 上的很多软件不能让我自由地去使用;而且 Mac 目前的软件数还是没法跟 Windows 比的,很多 Windows 上好用的软件在 Mac 上没有相应的替代品。所以用了 Mac 后,很多游戏基本就不能自由地去玩了。

也是出于这点,我那喜欢玩单机游戏的表妹高考结束后,我给她送了一台苹果电脑。

图片

但对卷王来说,这也许也是它的一个优点?

最后,Mac 电脑还有一个问题,就是它的价格还是相对贵了一些。

Linux

除了 Windows 和 Mac 这两种面向大众用户的操作系统外,对绝大多数程序员来说,Linux 系统是必须要会使用的 !因为目前绝大多数企业内的项目都是部署在 Linux 服务器上的。

为什么呢?

因为 Linux 系统是开源的,更安全;而且它是可定制的,可以根据业务场景和项目的实际情况打造出性能更高、成本更低、稳定性更高的系统。

但是,必须要学 Linux 不意味着我们要有一台安装 Linux 系统的电脑,更不意味着我们要把自己的 Windows 电脑重装为 Linux 系统,从而去使用 Linux 的界面。像我大学的时候折腾过自己的微软 Surface 电脑,给它装了个 Ubuntu kylin 和 Linux Mint 操作系统,感觉也并没有想象中的好用。

其实绝大多数情况下,我们只需要花几十块钱租一个云服务器或者在本地搭个虚拟机,通过 XShell、SecureCRT 之类的工具连接上它,就足够学习和部署项目了。相信很多同学的个人博客,也是像我一样搭在了 Linux 云服务器上。

如果你是学习 C++ 开发或网络安全方向的同学,要对 Linux 掌握得更多一些。Java 后端或者前端开发同学会用 Linux 部署项目、学学常用命令基本上就够了。

如何选择?

那说了那么多,大家到底用哪个操作系统来学编程呢?

这个问题当然没有标准答案,要根据你当前 所处的环境、你的使用习惯和预算 综合选择。

先说环境。比如你现在是个大学生,学校的老师都用 Windows 讲课,给的软件包资源也都是 Windows 的,那么使用 Windows 系统无疑可以降低你入门的成本;而当你进了公司后,如果身边的同事都用 Mac 或 Win,那你最好和他们保持一致,搭环境、传软件和代码包、甚至是别人来帮你改 Bug 都会更方便一些,可以快速上手项目。

然后是习惯。其实学编程的时候(尤其是初期),我们保持自己之前的习惯就好了。比如你之前用 Windows,那就用它学编程,怎么快怎么来。不用再去换电脑熟悉新的快捷键、或者非要自己安装个 Linux 系统之类的。你的时间足够,想怎么折腾怎么折腾。但是我更建议初学者把重心放在学习基础上。

此外,千万别纠结说必须得有个什么操作系统才能学编程,或者学到某个程度就必须要换电脑。

目前绝大多数开发工具的风格在任何系统上基本都是统一的,比如 VS Code、JetBrains 全家桶等等,基本不会出现没有某个操作系统就不能学的情况(开发 Mac 应用除外)。而且哪怕你要使用其他的系统,可以搞云主机、或者用 VM Ware、Parallels Desktop 之类的虚拟机软件,在自己的主电脑上运行别的系统。

像我自己目前主要是使用 Mac 来开发、用 Windows 来开直播和带做项目、用 Linux 云服务器来部署项目。

图片

 本文转自:程序员鱼皮

原文链接:大厂为啥都发苹果电脑?哪个系统是开发之王?

<think>好的,我现在需要帮助用户了解大厂在AOSP开发中使用的IDE、编译和预览的工作流程。首先,我应该先回忆一下AOSP的基本情况,然后结合用户提供的引用内容,整理出相关的信息。 用户提到的引用内容中,引用[1]提到了build文件夹和outputs目录,类似于Android的结构,这可能涉及到编译输出的路径。引用[2]和[3]讨论了HarmonyOS的Ability框架和双内核,可能与AOSP的关系不大,但用户的问题是关于AOSP的,所以可能需要专注于引用[1]和[4]。引用[4]提到了grub,属于引导加载程序,可能和编译流程中的引导部分有关,但暂时可能不直接相关。 接下来,我需要确定AOSP开发常用的IDE。根据经验,大厂通常使用Android Studio进行应用开发,但AOSP本身的开发可能更多依赖命令行工具和特定的IDE配置。不过,像IntelliJ IDEA或Eclipse可能有插件支持,或者开发者会配置这些IDE来编辑AOSP的代码。另外,Visual Studio Code也是一个流行的选择,配合插件使用。 然后是关于编译流程。AOSP的编译通常使用make命令或者Google引入的m和mm脚本,以及envsetup.sh来初始化环境。用户提到的build文件夹可能包含编译系统的配置,比如Makefile或者其他构建脚本。编译过程可能涉及选择目标设备(lunch命令),然后执行make命令。输出目录可能在out文件夹下,生成系统镜像等文件。 关于预览,可能涉及到模拟器的使用,比如通过emulator命令启动编译后的镜像,或者使用Android Studio的模拟器进行测试。此外,大厂可能有自己的设备农场或云测试平台,用于快速验证编译后的系统。 工作流程方面,大厂可能会采用持续集成(CI)系统,比如Jenkins或者Google内部的系统,自动化编译和测试流程。代码提交后触自动构建,运行单元测试和集成测试,确保代码质量。开发者本地修改代码后,使用增量编译加快速度,生成镜像后进行验证,再提交到代码库。 需要确认这些信息是否符合用户的引用内容。例如,引用[1]中的build文件夹和outputs目录,可能对应AOSP中的out目录,存放编译产物。引用[4]提到的grub可能是在编译引导加载程序时的部分,但可能不是用户关注的重点。 总结下来,回答的结构应该包括: 1. 常用IDE:Android Studio、IntelliJ IDEA、VS Code,配置方法。 2. 编译流程:初始化环境、选择目标、执行编译。 3. 预览方式:模拟器、真机调试。 4. 工作流程:代码管理、持续集成、自动化测试。 需要确保引用相关的内容,比如引用[1]提到的outputs文件夹可能对应编译后的输出路径,可以引用这一点。其他引用可能关联度不高,但需要尽量自然地融入回答中。 现在需要检查是否有遗漏,例如大厂是否有特定的工具或流程优化。例如,Google内部可能使用Bazel进行构建,但AOSP默认使用Soong(基于Bazel)。大厂可能定制自己的构建脚本或工具链。此外,代码审查流程(如Gerrit)也是重要部分,但用户可能更关注编译和预览。 最后,生成相关问题,需要围绕AOSP开发工具、编译优化、工作流程优化、与HarmonyOS的对比等方面。</think>### AOSP开发工具与工作流程解析 #### 一、常用IDE与工具链 大厂在AOSP开发中主要依赖以下工具: 1. **Android Studio**:用于应用层开发,通过SDK工具链与AOSP代码结合。开发者可导入AOSP模块进行调试[^1]。 2. **IntelliJ IDEA/VS Code**:通过配置代码索引和插件(如Bazel、GN语法支持)编辑底层C++/Java代码。例如,VS Code的`C/C++`插件可解析AOSP头文件路径。 3. **命令行工具**:编译依赖`repo`管理代码仓,环境初始化脚本`source build/envsetup.sh`为关键步骤[^4]。 #### 二、编译流程 1. **环境初始化** 执行以下命令加载编译环境变量和函数: ```bash source build/envsetup.sh lunch <target> # 选择设备类型,如aosp_arm-eng ``` 2. **编译命令** - 全量编译:`make -j$(nproc)`(并行编译加速) - 模块编译:`m <module_name>`或`mm`(需在模块目录执行) - 编译产物默认输出到`out/target/product/<device>/`,包含系统镜像(如`system.img`)[^1]。 3. **增量编译优化** 大厂常通过`ccache`缓存和`ninja`构建系统减少重复编译时间。例如,Google的Soong构建系统已集成ninja[^4]。 #### 三、预览与调试 1. **模拟器运行** 编译后启动QEMU模拟器: ```bash emulator -show-kernel -no-snapshot # 禁用快照以实时加载修改 ``` 2. **真机刷写** 使用`fastboot flash`刷入镜像: ```bash fastboot flash system system.img ``` 3. **动态调试** - **Logcat**:通过`adb logcat`查看内核和框架层日志。 - **GDB/LLDB**:附加到进程调试原生代码,需在编译时启用`DEBUG`标志。 #### 四、大厂工作流程优化 1. **代码托管与协作** - 使用`repo`管理多仓库,配合Gerrit进行代码审查。 - 例如,Google内部通过Critique(类似Gerrit)实现大规模团队协作[^2]。 2. **持续集成(CI)** 自动化编译验证流程示例: ```mermaid graph LR A[代码提交] --> B(触CI) B --> C{编译通过?} C -->|是| D[运行单元测试] C -->|否| E[邮件通知开发者] D --> F{测试通过?} F -->|是| G[合并到主分支] F -->|否| E ``` 3. **自定义工具链** 部分企业会替换AOSP默认工具链,如使用Clang替代GCC编译内核。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值