蚊章汇 - 程序员
type: channel
link: https://linuxcn.bwsl.wang/tag/%E7%A8%8B%E5%BA%8F%E5%91%98/
items: 适合程序员的十大 Linux 发行版（2022 版）
items: 硬核观察 #778 Linux 内核 6.0 正式发布，但更期待 6.1
items: 我给新手程序员的实用建议
items: 硬核观察 #701 FSF 仍坚持使用古老而自由的服务器硬件
items: 12 个给全等级码农们的编程资源
items: Android 工程师的一年
items: 程序员的学习之路
items: 程序员如何学习编码
items: 极客漫画：消沉的程序员 17
items: 极客漫画：消沉的程序员 16

适合程序员的十大 Linux 发行版（2022 版）
type: item
date: 2022-11-21T23:36:00+08:00
description: 我们点评了为程序员和开发人员提供的十大最佳 Linux 发行版（2022 版），以帮助他们完成工作和个人项目。程序员和开发人员在其工作或项目中会使用各种工具和应用程序，包括代码编辑器、编程语言编译器、附加组件、数据库等。如果你对现代开发者的工作流程进行分类，它包含以下典型的工作流程：访问代码库编程调试测试部署而这种典型的工作流程可能需要各种工具。一个标准的清单可能是这样的：代码编辑器简单的文本编辑器网页浏览器（网页开发者需要所有变体）数据库引擎一个本地服务器编程语言相应的编译器调试器监测或剖析工具（可执行文件或网络版）可以说，与 Windows 相比，Linux 是编程的最佳选择。（出于几个原因，我在本文中不对 macOS 进行比较。）Linux 是最佳选择的主要原因是，与 Windows 相比，在 Linux 发行版中已经预装具有现代技术的软件包和应用程序，或非常容易安装。因此，在这篇文章中，我们想列出 2022 年最适合程序员的 Linux 发行版。2022 年适合程序员的十大 Linux 发行版1、Fedora Workstation也许这个名单中最完美的 Linux 发行版是 Fedora Linux。它用于桌面的默认 Workstation 版通过其选择的软件包带来了正宗的 GNOME 桌面体验。Fedora Linux 的默认安装为你提供了所有主要的开发包，开箱即用。它们包括 PHP、OpenJDK、PostgreSQL、Django、Ruby on Rails、Ansible 等。通过 dnf 软件包管理器安装更多的应用程序是非常简单的，如 VS Code 编辑器和其他软件包。你也可以借助“ 软件 Software ”应用来安装，这是一个应用商店，你只需点击一个按钮就可以搜索和安装应用程序。Fedora Linux 支持 Snap 和 Flatpak，这给了你更多的灵活性。你也可以利用 Fedora 中的 RPM Fusion 仓库，这个仓库让你可以访问许多自由和非自由的软件包。由于许可证和其他明显的原因，Fedora Linux 不想在他们的主仓库中包括这些包。你可以在下面的官网上查看最新的 Fedora Linux。下载 Fedora2、Ubuntu Linux本列表中的第二个 Linux 发行版是 Ubuntu Linux。Ubuntu Linux 是目前在服务器和桌面上使用最多的 Linux 发行版。Ubuntu 提供长期支持（LTS）版本，有五年的官方支持（另外还有五年的维护支持），期间还有短期支持版本供高级用户使用。由于它很流行，所有最新的软件包和应用程序供应商都提供 Ubuntu（.deb）版本。因其流行，也带来了论坛和文档的大量支持，这对开发者来说是完美的，特别是当你在开发阶段被错误困住的时候。在下面的链接中了解更多关于 Ubuntu 的信息。下载 Ubuntu3、openSUSEopenSUSE 是全球在关键系统中使用的最稳定和最专业的 Linux 发行版之一。这个 Linux 发行版是企业级工作负载的首选解决方案之一，包括台式机、服务器和瘦客户机。它比 Ubuntu 和 Fedora 有一些优势。首先，它有两个变种：Leap 和 Tumbleweed。openSUSE Leap 是一个长期支持版本（LTS），提供最新的稳定性。openSUSE Tumbleweed 是一个滚动发布的软件，提供尖端的软件包。如果你的开发需要最新的软件包和硬件支持，那么 Tumbleweed 就是你的选择。如果你需要稳定性和一个运行时间较长、维护量较小的系统，请选择 openSUSE Leap。使用 openSUSE 进行开发工作的优势之一是其软件包管理器 YaST。使用 YaST 软件包管理器，你可以轻松地将许多事情自动化。除此之外，openSUSE 的软件交付方式也很出色。它的软件门户在网上，你可以访问它，搜索一个软件包，然后点击安装。如果与新用户相比，你对 Linux 有一定的经验，请选择 openSUSE 进行开发工作。下载 openSUSE4、Manjaro LinuxManjaro Linux 是一个基于 Arch Linux 的发行版，它使 Arch 的安装变得简单。它基于 Arch Linux，但带来了一些功能，如像 Ubuntu 或 Linux Mint 那样的图形化安装程序、 pamac 安装程序、精心策划的软件仓库等。Manjaro 有三种主要的桌面风格：GNOME、KDE Plasma 和 Xfce，可以满足几乎所有用户的需求。如果你想用 Arch Linux 和它的滚动发布包来满足你的开发需求，但又不想陷入安装原生 Arch 的麻烦，Manjaro 是你的完美选择。下载 Manjaro5、…

硬核观察 #778 Linux 内核 6.0 正式发布，但更期待 6.1
type: item
date: 2022-10-03T18:27:00+08:00
description: Linux 内核 6.0 正式发布，但更期待 6.1没有遇到意外，Linus Torvalds 于今天推出了 Linux 6.0 稳定版。不过，虽然是新的大版本号，但是 Linus Torvalds 一如既往地重申，“希望每个人都清楚，主要版本号的变化更多是因为我手指头已经数不过来了，而不是任何重大的根本性变化。”这个版本号的前一个版本号是 5.19，曾有提议将此版本命名为 5.20。另外，这也标志着 Linux 内核 6.1 的合并窗口开启.Linus 说，“与 6.0 不同，6.1 有许多相当核心的新东西”，比如内核对 Rust 初步支持、能够大幅提升性能的 MGLRU 等等。6.1 将于今年年底发布。消息来源：Phoronix老王点评：好吧，让我们继续期待 6.1。2022 全球程序员薪资排行榜，中国倒数第九CodeSubmit 对二十多个国家的程序员的薪酬做了调查，前三名是：美国、瑞士和以色列。其中美国平均年薪 11 万美元。中国在二十多个国家中排名倒数第九（或者说位列中游），平均年薪 23,790 美元。而倒数第一和第二是尼日利亚（7,255）和印度（7,725）。此外，按编程语言划分：Go 和 Ruby 是收入最高的语言，均为 12 万美元左右；Python、Java、JavaScript 稍少一点，11 万美元。消息来源：CodeSubmit老王点评：中国程序员薪酬不算高并不意外。不过印度居然倒数第二，所以，印度的 IT 行业真的发达吗？黑客利用开源软件和虚假工作机会进行钓鱼式攻击微软威胁情报中心称，一个钓鱼黑客组织一直在使用木马化的开源应用程序和 LinkedIn 招聘诱饵来诱骗科技行业员工。他们发现该组织自 4 月底以来使用 PuTTY、KiTTY、TightVNC 等软件安装程序进行这些攻击。这和我们之前 报道 的谷歌 Mandiant 发现的情况一样。消息来源：ZDNet老王点评：这种被带木马的开源软件钓鱼的员工真的合格吗？我觉得各个企业是不是模拟一下这种钓鱼测试。

我给新手程序员的实用建议
type: item
date: 2022-08-22T00:14:54+08:00
description: 做一个高效的、充满好奇心的问题解决者吧！这会帮助你成为一名成功的程序员。你是否曾经遇到过这样一种情况：你想解决一个问题，并且你在 YouTube 或 Google 中找到了相关的教程。嗯，你觉得看会了，可真做起来，却止步不前，大脑一片空白。你感觉自己每一行代码都看懂了，可一旦离开了那个教程，就步履维艰。如果你在 HackerRank 或 LeetCode 上看过别人的解题过程，你就能体会到，一个有追求的程序员第一次看到这些挑战时，他会是何种感受。举例来说，假设你正在学习一门新语言，在你刚开始理解这门语言的基础知识的时候，你看了一个教程，摩拳擦掌，结果发现自己无法独立应用学到的知识，这反过来可能会导致你怀疑自己的知识和能力。把教程付诸于实践你应该从头开始吗？如果你这么做，你可能很快就会发现自己重复学习了很多次相同的知识点。虽然从头开始并不一定是种浪费，但是，你该如何变得更高效呢？死记硬背在编程中完全是行不通的。话虽如此，但你也不能够忽视熟悉语法的重要性。因为，死记硬背和养成习惯之间是有明显区别的。习惯是很难打破的。要养成多使用编程语言的常规语法、函数、方法、模式、范式和构造的习惯，这样你才能掌握它。掌握一门编程语言需要大量的创造力和练习。练习语法是非常必要的，直到它们能在你的脑海中自然地浮现，就像血液在血管里流动一样。“问题解决”的工作原理那么，你该采取什么样的方案呢？这实际上取决于许多因素。这些因素可以是任何东西，下至技术限制，上至用户需要。世界上有无数的问题，每个问题都有许多解决方式。如何选择一个最好的？这就需要 “问题解决” problem-solving 的技巧了。 下面是一个简单的例子。你需要把两个数相加，让它们等于 6。显然，你有多种方式可供选择：3 + 3 = 6 或 4 + 2 = 6 或 5 + 1 = 6同理，如果你需要让两个数字，经过一次减法、乘法或除法运算后，得到的结果为 6。你仍然有很多选项，包括：8 - 2 = 6 或 12 / 2 = 6 或 3 * 2 = 6每种方案都有它固有的限制，且各不相同。当你在现实生活中尝试做出一个高效的方案时，你必须要考虑到所有的限制。这个方案可行吗？有什么障碍吗？有可操作性吗？是否可扩展呢？而如何最小化约束，并做出一个最优方案，就取决于问题类型和业务需要。练习很重要编程的目标不仅仅是解决问题。因此，从工程视角理解代码如何工作始终是一个优势。这就是代码审查在企业级开发中发挥作用的地方。编程的最低要求是具备基本的编码知识，包括语言的语法、函数和方法。归根结底，“写代码”是需要你去写的，所以练习总是有助于提高你的技能。流畅的写作和复杂方案的开发都来自于持续的学习和训练。学习编码我撰写和分享这篇文章，是为了鼓励新程序员去探寻自己的内心，寻找那个“优秀的问题解决者”。请不要停止相信自己。要成功编码，你需要培养许多习惯。下面是我在学习编码时保持高效的方法：一个包含语法、方法和函数 速查手册 总能应付不时之需。将问题分解成更小的部分，便于追踪。尝试理解代码运行的核心概念。构思解决方案时，大可发挥你的创造力 —— 但刚开始还是要注重基础。在练习时，创建尽可能多的应用和组件。永远不要从 Stack Overflow/Exchange 等开放平台上复制/粘贴代码，特别是在不了解上下文的情况下。跟着教程做了一遍后，尝试从头开始构建所有内容。即使你只能独立完成一半，那也仍然是一个成就。祝我们所有人好运！via: https://opensource.com/article/22/8/coding-advice-new-programmers作者：Sachin Samal 选题：lkxed 译者：lkxed 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

硬核观察 #701 FSF 仍坚持使用古老而自由的服务器硬件
type: item
date: 2022-07-19T05:13:57+08:00
description: FSF 仍坚持使用古老而自由的服务器硬件自由硬件日益稀缺，但自由软件基金会（FSF）仍然在坚持其理念，它的服务器配置都相当古老，因为新一代的硬件都含有非自由的私有固件。FSF 最近表示它更换了最后一台运行非自由 BIOS 的机器。目前它有两个数据中心和逾百个虚拟机。英特尔和 AMD 在 2013 年之后发售的 CPU 都不支持自由 BIOS。这些 CPU 都会在 BIOS 中安装私有固件，如英特尔管理引擎（IME）。这些 CPU 也会拒绝运行未经过 AMD 和英特尔私钥加密签名的固件，而他们只会签名自己的非自由固件。消息来源：FSF老王点评：从自由软件和开源软件两个略有分歧的路线开始，现在看起来开源软件越来越广泛，而自由软件面临的局面越来越艰难了。因为，那些“拥抱”开源的企业发现，开源对他们是有利的，而自由软件则不是。各国程序员平均年薪，美国第一，中国仅相当于美国的 1/5一家招聘平台统计分析了 20 多个国家的软件开发者在 2022 年的薪资状况，并列出了排名数据。据统计，2022 年年薪最高的三个国家为：美国（11 万美元）、瑞士（9.8 万美元）和以色列（7.2 万美元）。而中国为 2.4 万美元，约折合人民币 16 万，仅相当于美国程序员平均收入的 21.6%。就全球使用的编程语言而言，Golang 和 Python 语言薪酬最高，PHP、JavaScript 语言最低。消息来源：Code Submit老王点评：今天正好在朋友圈看到一位朋友的信息，曾经的一位专业的 IT 女工程师，去跳槽到一家做减肥的微商公司。不由得感慨，在中国做 IT 真是艰难啊。不过，之前我们发过的另外一个消息显示，美国对 IT 专家的缺口很大，以至于业界要求政府加强计算机教育。Fedora 37 有望装备基于网页的全新 Anaconda 安装程序在今年早些时候，红帽公司宣布正在为 RHEL/Fedora 的 Anaconda 安装器开发全新基于网页的用户界面。即将于今年秋季发布的 Fedora 37 虽然会保留基于 GTK 的 Anaconda 安装器，但也会提供下一代基于网页的 Anaconda 安装器，带来全新的界面和安装体验。全新的界面更加现代化，未来将会彻底替代现有基于 GTK 的 Anaconda 安装器。消息来源：Phoronix老王点评：这倒是不错，其实采用网页可以有更丰富的表现力和功能。

12 个给全等级码农们的编程资源
type: item
date: 2020-01-05T18:20:40+08:00
description: 无论你身处编程旅程中的何处，这 12 篇编程文章都有你需要学习一些东西。“学习计算机编程的最佳时间是 20 年前，其次是现在。” — 计算机科学的谚语（也许是）无论你是新程序员、经验丰富的 Web 开发人员、后端大师、头发花白的系统程序员，还是其他神秘物种的计算机极客？无论你身处广阔的软件开发人员生态系统中的何处，在我们领域中唯一不变的就是需要了解新技术及其应用方法。这是过去一年来阅读量最大的 Opensource.com 文章的集合，我很高兴在这里与你分享它们。好好学习无论你的技能或兴趣是什么，学习如何编写计算机程序都可以将特定领域的知识变成一种超能力。不幸的是，至少从现在开始，还不可能通过坐在计算机前面接受电磁辐射就能学会如何编程。在这之前，我推荐这些出色的文章来帮助激发你的编程技能。它们解决了一些重要的问题，例如考虑学习哪种语言以及不同的入门方式。你应该学习哪种编程语言？（译文）学习 Python 的 12 个方式（译文）你可以使用树莓派学习的三种流行编程语言（译文）利用 Python 引导孩子的计算机思维（译文）天天向上经验丰富的程序员知道，与学习编程相比，唯一更难的就是使你的技能和知识保持最新。但是我们是自学成才的一族，总是希望提高我们的专业知识和理解力。即使我们不期望使用新技术，我们也知道总会有人问起它们。这些有关 Rust、WebAssembly 和 Podman 的文章是开始学习软件技术一些即将出现的趋势的好地方。为什么要在 WebAssembly 中使用 Rust？使用 WebAssembly 扩展命令行领域免 root 的 Podman 如何工作？为什么选择 Rust 作为你的下一种编程语言老兵不死尽管新技术层出不穷，但回顾过去可以帮助你前进。当今惊人的技术是建立在昨天的工具之上的，即使我们从未使用这些传奇语言编写过代码，它也将使我们很好地理解这些工具的功能和局限性。这一系列文章集中于 C 语言、用 AWK 编写的实际应用程序，以及对流行度下降但也许还没有消亡的计算机语言的有趣讨论。C 的巨大影响如何写好 C main 函数（译文）用 AWK 喝咖啡（译文）你最喜欢的“死”语言是什么？学习不止无论你在编程过程中处于何处，总有更多东西需要学习。我希望这些来自 2019 年的顶级资源能帮助你为 2020 年做好准备。感谢作者们和你——读者。via: https://opensource.com/article/19/12/programming-resources作者：Erik O'Shaughnessy 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

Android 工程师的一年
type: item
date: 2018-07-27T07:01:41+08:00
description: 这幅妙绝的题图来自 Miquel Beltran我的技术生涯，从两年前算起。开始是 QA 测试员，一年后就转入开发人员角色。没怎么努力，也没有投入过多的个人时间。你可以从我为何从生物学转向技术和我学习 Android 的一年 这两篇文章中找到些只言片语。今天，我想谈谈是自己是如何开始担任 Android 开发人员这个角色、如何换公司以及作为 Android 工程师的一年所得所失。我的第一个职位角色我的第一个职位角色， Android 开发者，开始于一年前。我工作的这家公司，可以花一半的时间去尝试其它角色的工作，这给我从 QA 职位转到 Android 开发者职位创造了机会。这一转变归功于我在晚上和周末投入学习 Android 的时间。我通过了 Android 基础纳米学位、Andriod 工程师纳米学位课程，也获得了 Google 开发者认证。这部分的详细故事在这儿。两个月后，公司雇佣了另一位 QA，我转向全职工作。挑战从此开始！比起给他们提供一台笔记本电脑和一个 git 账号来说，要把某人转变为胜任的开发角色，显然困难重重。在这里我解释一下我在那段时间遇到的一些障碍：缺乏预期我面临的第一个问题是不知道公司对我的期望。我认为他们希望我从第一天起就有交付物，虽然不会要求像那些经验丰富的同事一样，但也要完成一个小任务就交付。这种感觉让我压力山大。由于没有明确的目标，我一直认为自己不够好，而且是个伪劣的冒牌货。缺乏指导在公司里没有导师的概念，环境也不允许我们一起工作。我们很少结对编程，因为总是在赶项目进度，公司要求我们持续交付。幸运的是，我的同事都乐于助人！无论何时我卡住或需要帮助，他们总是陪我一起解决。缺乏反馈那段时间，我从来没有得到过任何的反馈。我做的好还是坏？我应该改进些什么？我不知道，因为我没有得到过任何人的评论。缺乏学习氛围我认为，为了保持常新，我们应该通过阅读博客文章、观看演讲、参加会议、尝试新事物等方式持续学习。该公司在工作时间并没有安排学习时间，不幸的是，其它开发人员告诉我这很常见。由于没有学习时间，所以我觉得没有资格花费哪怕十分钟的时间来阅读与工作相关且很有意思的博客文章。问题不仅在于缺乏明确的学习时间津贴，而且当我明确要求时，被拒绝了。当我完成突击任务时，发生了一个例子，我们已经完成了任务，因此我询问是否可以用剩下的时间来学习 Kotlin。这个请求被拒绝了。另外的例子是我想参加一个 Android 相关的研讨会，然后被要求从带薪年假中抽出时间。冒充者综合征在这公司缺乏指导、缺乏反馈、缺乏学习氛围，使我的开发者职业生涯的前九个月更加煎熬。我有感觉到，我内心的冒充者综合征与日俱增。一个例子就是拉取代码进行公开展示和代码审查。有是我会请同事私下检查我的代码，并不想被公开拉取，向任何人展示。其他时候，当我做代码审查时，会花好几分钟盯着“批准”按纽犹豫不决，在担心审查通过的代码会被其他同事找出毛病。当我在一些事上持反对意见时，由于缺乏相关知识，担心被坐冷板凳，从来没有大声说出来过。某些时间我会请同事私下[...]检查我的代码，以避免被公开展示。新的公司，新的挑战后来，我手边有了个新的机会。感谢曾经和我共事的朋友，我被 Babbel 邀请去参加初级 Android 工程师职位的招聘流程。我见到了他们的团队，同时自告奋勇的在他们办公室主持了一次本地会议。此事让我下定决心要申请这个职位。我喜欢公司的箴言：全民学习。其次，公司每个人都非常友善，在那儿工作看起来很愉快！但我没有马上申请，因为我认为自己不够好，所以为什么能申请呢？还好我的朋友和搭档推动我这样做，他们给了我发送简历的力量和勇气。过后不久就进入了面试流程。这很简单：以很小的程序的形式来进行编码挑战，随后是和团队一起的技术面试，之后是和招聘经理间关于团队合作的面试。招聘过程我用周未的时间来完成编码挑战的项目，并在周一就立即发送过去。不久就受邀去当场面试。技术面试是关于编程挑战本身，我们谈论了 Android 好的不好的地方、我为什么以这种方式实现这功能，以及如何改进等等。随后是招聘经理进行的一次简短的关于团队合作面试，也有涉及到编程挑战的事，我们谈到了我面临的挑战，我如何解决这些问题，等等。最后，通过面试，得到 offer，我授受了!我的 Android 工程师生涯的第一年，有九个月在一个公司，后面三个月在当前的公司。学习环境对我来说一个大的变化就是每两周会和工程经理进行面对面会谈。那样，我很清楚我们的目标和方向。在需要如何改进、需要如何提供帮助及如何寻求帮助这些事情上，我们得到持续的反馈和想法。他们除了提供内部培训的的福利外，我还有每周学习时间的福利，可以学习任意想学的。到目前为止，我正利用这些时间来提高我的 Kotlin 和 RxJava 方面知识。每日的大部分时间，…

程序员的学习之路
type: item
date: 2018-05-23T19:05:00+08:00
description: 2016 年 10 月，当我从微软离职时，我已经在微软工作了近 21 年，在业界也快 35 年了。我花了一些时间反思我这些年来学到的东西，这些文字是那篇帖子稍加修改后得到。请见谅，文章有一点长。要成为一名专业的程序员，你需要知道的事情多得令人吃惊：语言的细节、API、算法、数据结构、系统和工具。这些东西一直在随着时间变化——新的语言和编程环境不断出现，似乎总有一些“每个人”都在使用的热门的新工具或新语言。紧跟潮流，保持专业，这很重要。木匠需要知道如何为工作选择合适的锤子和钉子，并且要有能力笔直精准地钉入钉子。与此同时，我也发现有一些理论和方法有着广泛的应用场景，它们能使用几十年。底层设备的性能和容量在这几十年来增长了几个数量级，但系统设计的思考方式还是互相有关联的，这些思考方式比具体的实现更根本。理解这些重复出现的主题对分析与设计我们所负责的系统大有帮助。谦卑和自我这不仅仅局限于编程，但在编程这个持续发展的领域，一个人需要在谦卑和自我中保持平衡。总有新的东西需要学习，并且总有人能帮助你学习——如果你愿意学习的话。一个人即需要保持谦卑，认识到自己不懂并承认它，也要保持自我，相信自己能掌握一个新的领域，并且能运用你已经掌握的知识。我见过的最大的挑战就是一些人在某个领域深入专研了很长时间，“忘记”了自己擅长学习新的东西。最好的学习来自放手去做，建造一些东西，即便只是一个原型或者 hack。我知道的最好的程序员对技术有广泛的认识，但同时他们对某个技术深入研究，成为了专家。而深入的学习来自努力解决真正困难的问题。端到端观点1981 年，Jerry Saltzer、 Dave Reed 和 Dave Clark 在做因特网和分布式系统的早期工作，他们提出了 端到端 end to end 观点，并作出了经典的阐述。网络上的文章有许多误传，所以更应该阅读论文本身。论文的作者很谦虚，没有声称这是他们自己的创造——从他们的角度看，这只是一个常见的工程策略，不只在通讯领域中，在其他领域中也有运用。他们只是将其写下来并收集了一些例子。下面是文章的一个小片段：当我们设计系统的一个功能时，仅依靠端点的知识和端点的参与，就能正确地完整地实现这个功能。在一些情况下，系统的内部模块局部实现这个功能，可能会对性能有重要的提升。该论文称这是一个“观点”，虽然在维基百科和其他地方它已经被上升成“原则”。实际上，还是把它看作一个观点比较好，正如作者们所说，系统设计者面临的最难的问题之一就是如何在系统组件之间划分责任，这会引发不断的讨论：怎样在划分功能时权衡利弊，怎样隔离复杂性，怎样设计一个灵活的高性能系统来满足不断变化的需求。没有简单的原则可以直接遵循。互联网上的大部分讨论集中在通信系统上，但端到端观点的适用范围其实更广泛。分布式系统中的“ 最终一致性 eventual consistency ”就是一个例子。一个满足“最终一致性”的系统，可以让系统中的元素暂时进入不一致的状态，从而简化系统，优化性能，因为有一个更大的端到端过程来解决不一致的状态。我喜欢横向拓展的订购系统的例子（例如亚马逊），它不要求每个请求都通过中央库存的控制点。缺少中央控制点可能允许两个终端出售相同的最后一本书，所以系统需要用某种方法来解决这个问题，如通知客户该书会延期交货。不论怎样设计，想购买的最后一本书在订单完成前都有可能被仓库中的叉车运出厍（LCTT 译注：比如被其他人下单购买）。一旦你意识到你需要一个端到端的解决方案，并实现了这个方案，那系统内部的设计就可以被优化以利用这个解决方案。事实上，这种设计上的灵活性可以优化系统的性能，或者提供其他的系统功能，从而使得端到端的方法变得如此强大。端到端的思考往往允许内部进行灵活的操作，使整个系统更加健壮，并且能适应每个组件特性的变化。这些都让端到端的方法变得健壮，并能适应变化。端到端方法意味着，添加会牺牲整体性能灵活性的抽象层和功能时要非常小心（也可能是其他的灵活性，但性能，特别是延迟，往往是特殊的）。如果你展示出底层的原始性能（LCTT 译注：performance，也可能指操作，下同），端到端的方法可以根据这个性能（操作）来优化，实现特定的需求。如果你破坏了底层性能（操作），即使你实现了重要的有附加价值的功能，你也牺牲了设计灵活性。如果系统足够庞大而且足够复杂，需要把整个开发团队分配给系统内部的组件，那么端到端观点可以和团队组织相结合。这些团队自然要扩展这些组件的功能，他们通常从牺牲设计上的灵活性开始，尝试在组件上实现端到端的功能。应用端到端方法面临的挑战之一是确定端点在哪里。 俗话说，“大跳蚤上有小跳蚤，小跳蚤上有更少的跳蚤……等等”。关注复杂性编程是一门精确的艺术，每一行代码都要确保程序的正确执行。但这是带有误导的。编程的复杂性不在于各个部分…

程序员如何学习编码
type: item
date: 2018-03-06T20:52:12+08:00
description: HackerRank 最近公布了 2018 年开发者技能报告的结果，其中向程序员询问了他们何时开始编码。39,441 名专业人员和学生开发者于 2016 年 10 月 16 日至 11 月 1 日完成了在线调查，超过 25％ 的被调查的开发者在 16 岁前编写了他们的第一段代码。（LCTT 译注：日期恐有误）程序员是如何学习的报告称，就程序员如何学习编码而言，自学是所有年龄段开发者的常态。“尽管 67％ 的开发者拥有计算机科学学位，但大约 74％ 的人表示他们至少一部分是自学的。”开发者平均了解四种语言，但他们想学习更多语言。对学习的渴望因人而异 —— 18 至 24 岁的开发者计划学习 6 种语言，而 35 岁以上的开发者只计划学习 3 种语言。程序员想要什么HackerRank 还研究了开发者最想从雇主那里得到什么。平均而言，良好的工作与生活平衡，紧随其后的是专业成长与学习，是最理想的要求。按地区划分的数据显示，美国人比亚洲和欧洲的开发者更渴望工作与生活的平衡。学生倾向于将成长和学习列在工作与生活的平衡之上，而专业人员对薪酬的排名比学生高得多。在小公司工作的人倾向于降低工作与生活的平衡，但仍处于前三名。年龄也制造了不同，25 岁以上的开发者将工作与生活的平衡评为最重要的，而 18 岁至 24 岁的人们则认为其重要性较低。HackerRank 说：“在某些方面，我们发现了一个小矛盾。开发人员需要工作与生活的平衡，但他们也渴望学习“。它建议，专注于做你喜欢的事情，而不是试图学习一切，这可以帮助实现更好的工作与生活的平衡。via: https://mybroadband.co.za/news/smartphones/246583-how-programmers-learn-to-code.html作者：Staff Writer 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

极客漫画：消沉的程序员 17
type: item
date: 2017-11-01T16:39:28+08:00
description: 测试覆盖 （ Testing coverage ） ，指测试系统覆盖被测试系统的程度，一项给定测试或一组测试对某个给定系统或构件的所有指定测试用例进行处理所达到的程度。 如果在写代码的人仅为可运行而编码，那么在后边会出现一系列的连锁反应，任何没有经过真构思之后书写的代码，都会带来巨大的维护成本吧。昨天 (2017.09.05) 刚刚读到一篇 为什么你的前段工作经验不值钱，不同的人对这里边的那个题的考虑程度是不同的。但我们在每次开始编码之前，都应该以 “代码可用 - 代码健壮 - 代码可靠 - 对需求的宽容” 为规格来约束自己。译者简介：GHLandy —— 生活中所有欢乐与苦闷都应藏在心中，有些事儿注定无人知晓，自己也无从说起。via: http://turnoff.us/geek/the-depressed-developer-17/作者：Daniel Stori 译者：GHLandy 校对：wxy 合成：GHLandy 点评：GHLandy本文由 LCTT 原创编译，Linux中国 荣誉推出

极客漫画：消沉的程序员 16
type: item
date: 2017-05-08T16:58:00+08:00
description: 哎，又是 Bug 和 Debug！ 感觉代码之中永远脱离不了这个魔咒啊！还真是尴尬。不知道，编码之间进行详细的规划，能不能尽量避免那些不必要的 Bug？译者简介：GHLandy —— 生活中所有欢乐与苦闷都应藏在心中，有些事儿注定无人知晓，自己也无从说起。via:http://turnoff.us/geek/the-depressed-developer-16/作者：Daniel Stori 译者：GHLandy 校对：wxy 合成：GHLandy 点评：GHLandy本文由 LCTT 原创编译，Linux中国 荣誉推出