编程很难 编程不涉及设计和规划 我们是活生生的调试器 考虑所有可能的场景 用户体验 性能和优化 安全 团队合作使梦想成真 与他人良好合作 编程很难

2025-05-27

编程很难

编程不涉及什么

设计和规划

我们是活生生的调试器

考虑所有可能的情况

用户体验

性能和优化

安全

团队合作让梦想成真

与他人良好合作

编程很难

编程不涉及什么

编程不是敲击键盘并尽可能快地打字。它不是刻意记住键盘快捷键并最终让鼠标过时。它不是学习每一种编程语言,如果这真的有可能的话。优秀的程序员的定义不在于其电脑的品牌、价格、性能和操作系统,也不在于他们对代码编辑器和IDE的偏好——VS CodeAtomIntelliJ IDEAVimNotepad++或其他。与许多好莱坞电影所展现的普遍看法相反,编程绝对等同于黑客。

此外,它不仅仅是记住编程语言的语法和内置功能。逻辑、条件、if语句和算法(尤其是排序算法)并不能真正描绘出编程的全貌。数学、递归、计算机科学和设计模式也无法真正展现编程的本质。虽然它们是编程的重要组成部分,但它们只是整个谜题中的一小部分。

设计和规划

在编写任何一行代码之前,项目的设计和架构都会经过彻底的规划,以确保 或者至少增加顺畅的开发周期。软件设计正是在这一阶段发挥作用。工具链、流水线、公共和内部API的抽象层、模块化、对象关系以及数据库结构都在此开发阶段进行规划。

我们是活生生的调试器

编程这门艺术要求我们打破思维定式,用最务实、最有效、最可行的方案来解决问题。这或许就是为什么我们更有可能成为家中的“IT 人员”或“客服”。修复故障实际上是​​我们的工作。“编程”仿佛成了“解决问题”的另一种美化说法。

换句话说,我们就像活生生的调试器,无论在电脑上还是电脑外,都离不开它。正因如此,懂得如何阅读和编写文档至关重要。合适的文档——可以是几页详细的文档,也可以是一些简单的代码注释——是程序员最重要的生命线之一。没有它,我们就会迷失在黑暗中,无法履行调试员的职责。我们几乎无法取得任何进展,因为我们的大部分时间都花在了实验和研究框架或遗留代码库的工作原理上。总而言之,这将导致极其糟糕的开发者体验

考虑所有可能的情况

调试本身就已经够难了。更糟糕的是,代码的执行通常不是线性的。大型项目由于语句的程序逻辑,会包含多个可能的执行路径的“分支” if。我们必须考虑一种可能的情况和错误,尤其是当它涉及用户输入时。跟踪每条可能的执行路径所需的认知负荷使编程更加困难。

用户体验

跳出开发的世界,我们设身处地为普通用户着想。除了提供功能、添加新功能、修复错误和记录代码库之外,我们还关注普通用户如何与我们的应用或软件进行交互。我们会考虑多种因素来打造卓越的用户体验,例如(但不限于)可访问性、可用性、用户友好性和可发现性、UI 设计、配色主题、功能动画和性能。

性能和优化

说到这里,性能本身就是编程的一个重要方面。我们,尤其是那些拥有计算机科学背景的人,都努力使用和编写最节省时间和空间的算法。我们痴迷于微秒级的深不可测的时间尺度,以便最大限度地利用我们可用的内存、CPU 和 GPU。

在 Web 开发中,网络优化是一个需要掌握的重要概念。我们费尽心思压缩HTML、CSS 和 JavaScript,只为最大限度地减少服务器响应的负载。图片和其他杂项资源也被压缩并采用延迟加载,以最大限度地减少用户在页面变得有意义且可用之前需要下载的数据量。

然而,有时我们会过于执着于性能。如果我们不必要地专注于优化代码库的某些部分,而不是专注于如何才能真正提高进度和生产力,那么过早的优化就会成为一个问题。在这种情况下,我们必须明智地判断代码库中哪些部分真正需要优化。

安全

除了软件的用户界面和逻辑之外,作为程序员,我们还要对用户的安全负责。在数据被觊觎和货币化程度极高的时代,确保用户个人信息的安全比以往任何时候都更加重要。我们采取额外的措施来保护私人数据,因为用户信任我们的软件。如果我们不履行这一责任,我们就根本不算真正的程序员。

在安全方面,我们永远不能太过谨慎。作为一条经验法则,我们“永远不要相信用户输入”。不遗余力地清理数据和用户输入甚至可以被视为“最佳实践”。如果我们不小心处理,不仅会将我们的软件和基础设施置于巨大的风险之中,还会面临泄露敏感用户数据的风险——而这些数据正是我们作为程序员承诺要保护的。

然而,安全并非仅限于用户数据和输入。病毒、蠕虫、特洛伊木马、广告软件、键盘记录器、勒索软件以及其他形式的计算机恶意软件仍在全球蔓延,困扰着数以百万计的计算机和设备。即使经过数十年的硬件和软件技术改进,也不存在坚不可摧的系统。安全只是一门不断磨练的技术,但永远不会完美,因为总会有少数好奇的人调查和搜索一切可能的“入侵”系统的方法。

因此,无论用例和用户群如何,我们在设计软件时都将安全视为首要任务之一,甚至至高无上的。我们这样做是为了保护用户免受上述威胁的影响,这些威胁可能导致数据丢失、文件损坏、系统崩溃等诸多不便。

团队合作让梦想成真

即使与编程无关,团队合作在软件开发中也扮演着极其重要的角色。任何大型项目都充满复杂性和变数,单凭一个人不可能以快速的定期迭代节奏,或在客户或任何监督机构的严格期限和时间限制下开发出高质量的软件。

这就是为什么我们拥有多个团队,每个团队都专注于编程的诸多方面。一个人永远不可能拥有有效且紧密地整合各个方面所需的全部技能和知识。一个团队可能负责 UI 设计和可访问性,而另一个团队可能负责软件本身的功能。如果各个专业团队的能力能够整合在一起,最终的软件将在财务和实际限制范围内,拥有最佳的功能、用户体验、性能和安全性。

对于时间管理和按时完成任务而言,工作流程的组织和自动化至关重要。我们花时间合理配置构建工具和流程,因为这样做可以在未来节省大量时间。通常情况下,随着时间的推移,投资回报率会更高。

与他人良好合作

为了更好地诠释团队合作的理念,我们与同事建立了良好的关系,因为最终项目的成功很大程度上取决于其背后团队的成功。我们努力营造一个互助的工作环境,让经验丰富的前辈悉心指导新人。

由于我们是一个团队开发软件,因此我们必须留意其他人阅读我们的代码。为了保持开发周期的长期可持续性,项目的可读性和可维护性与逻辑和功能同等重要。我们始终坚持编写优质、易读的代码,并提供信息丰富的提交信息和文档,因为这些无疑有助于我们和其他人更好地理解我们的代码。

说到让别人阅读我们的代码,代码审查是学习编程最佳实践的绝佳机会。它也是让我们熟悉代码库及其底层设计和架构的另一种方式。虽然建设性的批评意见令人不快,而且接收方难以接受,但将其视为合理的建议,对于我们提升程序员水平至关重要。

编程很难

编程涵盖了功能之外的诸多方面,例如用户体验、性能、安全性和团队合作。仅仅专注于某一方面而忽略其他方面是不够的。对于规模巨大、意义重大的项目来说,这并非只是敲几行代码那么简单。要想成功,需要大量的周密计划、精心设计、周全考量和团队合作。事实上,编程时,思考的时间比敲代码的时间要多,尤其是在长时间的调试过程中。

说到底,编程的本质在于持续不断的学习。适应能力和持续学习是在这个行业生存的关键。如果我们不尽职尽责地持续学习,就无法保持竞争力。在这个技术飞速发展、瞬息万变的行业中,我们必须跟上它的快速步伐,否则最终只会被淘汰。

最后,我想以对全球所有开发者辛勤工作的认可来结束这篇文章。为了撰写这篇文章,我不得不反思一个开发团队的日常工作流程。我不得不深入研究编程和软件开发中许多通常被忽视的方面。从那时起,我对电脑里安装的所有软件都更加感激。为此,我鼓励每个人今天都感谢一位程序员,无论经验如何。如果没有他们,我们会怎样?

永远不要将他们的辛勤工作视为理所当然。

文章来源:https://dev.to/somedood/programming-is-hard-2p87
PREV
停止 Console.Logging!用 Chrome 调试 JavaScript
NEXT
Twitter 技术面试系统设计示例