引言

原文:Introduction

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

流程,创造力和质量。在阅读本书的同时,将这三个词写入你的脑海中。流程、创造力、质量。这本书可能充满了重要主题的练习,每个程序员都应该知道它们,但是从书中获得的真实知识就是这三个词。我写这本编程书的目的是告诉你,我所知道的是,软件中最重要的三个常量。没有流程,你会迷失在想知道如何开始,并有维持长期项目的进展的问题。没有创造力,你将无法作为程序员解决每天遇到的问题。没有质量,你不知道你所做的任何事情是否良好。

教你这三个概念很简单。我可以简单地写三篇博客文章,并说:“你去看看,然后你就知道这三个字是什么意思。” 这不会让你成为一个更好的程序员,绝对不是一个可以在未来 10 到 20 年内自食其力的开发者。仅仅知道大概的流程并不意味着,你可以在现实实践中实际应用它。阅读关于创造力博客文章,并不能帮助你弄清如何写出有创造力的代码。要真正理解这些复杂的主题,你将需要将其内在化,最佳方式是将其应用于简单的项目。

当你通过书中的练习,我会告诉你,你将要处理的三个中的哪一个。这是我相对其他书籍的一个改变,其中我试图暗中让你在无意中学习概念。这次我会明确表达,因为很重要的一点就是,把这个概念牢牢地保存在你的头脑中,这样你就可以在练习过程中实践了。然后,你将评估你对应用这个实践的尝试效果如何,以及下一次可以做些什么来改进。本书的一个重要组成部分是,能够客观地反思自己的能力,以及改进自己的能力。在完成一些其他目标的同时,通过专注于一种技术或实践来做到它。

除了流程,创造力和质量外,你还将学习五个重要主题,我认为现代程序员需要掌握它们。这些可能会在未来发生变化,但是它们在过去近十年间是至关重要的,因此除非技术发生了巨大的变化,否则它们仍将适用。即使是一些东西,像第六部分中的 SQL,也仍然是相关的,因为它教你如何构建数据,以便在后面不会在逻辑上崩溃。你的次要教育目标是:

  • 入门 - 你可以通过执行快速的 Hack 来了解如何启动项目。
  • 数据结构 - 我不教给你每一个单一的数据结构,但是让我们开始更完整地学习它们。
  • 算法 - 不能处理的数据结构相当无意义。
  • 解析文本 - 计算机科学的基础是解析,知道如何实现它,可以帮助你学习编程语言,当他们变得流行的时候。
  • 数据建模 - 我将使用 SQL 来教会你,以逻辑方式为存储数据建模的基础知识。
  • Unix工具 - 命令行工具在本书中用作要复制的项目,然后你还可以学习 Unix 命令行高级工具。

在这本书的每个部分,你将一次性专注于三个实践中的一个或两个,直到最后,在第七部分中,你将构建一个简单的网站来应用它们。大作业并不吸引人。你不会学习如何创建下一个创业公司,但他们是很好的小项目,将帮助你在学习 Django 时应用你所熟悉的知识。

完全是个人的事情

许多其他的书被设计为,在团队背景下教你这三个概念。当这些书向你讲述流程时,全部都是如何在项目中与另一个人合作来维护代码。当他们教授创造力时,全部都是如何和你的团队开会来向客户询问问题。可悲的是,这些“专业”书籍绝大部分都没有教授质量。这一切都很好,但是对于大多数初学者来说,这些团队风格的书籍有两个问题:

  • 你没有团队,所以你不能练习它们教给你的东西。面向团队的书籍专为那些初级程序员而设计,它们已经有工作,并需要在刚加入的团队工作。在这种情况发生之前,任何团队导向的书籍对你来说都是无用的。

  • 如果你自己的个人过程,创造力和质量是一团糟,学习如何在团队中工作有何意义?尽管“团队精神”的粉丝们说,绝大多数的编程任务都是独立完成的,你对自己的技能的评估通常是独立完成的。如果你在一个团队工作,但是你的代码始终是低质量的,并且你不断向团队成员寻求帮助,那么你的老板会给你较低评价。由于它们始终讨论团队有多厉害,当一个初级程序员无法单独工作时,他们从来不会责怪团队。他们责怪初级程序员。

这本书并不会帮助你成为一个在大企业混日子的优秀程序员。这本书帮助你提高你的个人技能,使你得到一份工作时可以独自工作。如果你改善你的个人流程,那么你会成为一个更强大的团队贡献者。这也意味着你可以启动和发展自己的想法,这是绝大多数项目开始的地方。