编程的本质

为何我如此热爱编程?个人意思是,我从 让程序运转良好和确保它编写清晰、组织有序中 收获了多得不思议的知足。我老是被编程所吸引,我学得越多,我就越想学更多、越想提升更多。html

我开心地坐在电脑前面,花费数个小时尽可能描述最好的算法,只是为了解决一些乏味问题而用一个不多像人类语言的、难懂的语法,它只是像天然语言,由于它使用了一些简单的英语词汇。为何是那样?是什么让编程如此快乐,我敢说是有趣?下面是我认为的最好的一些理由,它们组成了我认为是编程本质的东东。程序员

创造性地解决问题

每个编程问题都是堆满你大脑而须要解决的新挑战。即便你之前作过,仍然有一部分在你解决时会产生新的问题。你能在一个新的上下文实现,或者为了高吞吐量、数百万的用户或不可思议的低电力。那些问题须要创新才能克服。web

你作的任何编程自己都是新的,至少对你是这样,由于若是不这样你将要使用你已经用过的软件。在大多数状况下,你试图解决的问题相对于多数人来讲,是很是新的,你也在学习。你在学习问题域(Problem domain)【注1】,你在学习需求和约束,你在学习如何最好地解决眼前问题。算法

整个过程充满了如此多的创新。设计准则和代码规范是好的,可是它们历来不足以应付每种状况,或为任何更有趣的问题提供解决方案。编程首先是、且重要的是一个创新过程,你拥有的知识越多,你就越能在这些难题之间想到新颖的解决方案。编程

想法的表达

若是该解决方案是费解的,那么它有创新也不是足够的。我花了好长时间才理解,可是好的编程就像创新地解决问题同样,须要很好的写做能力。我过去经常认为,若是代码写得好,且作了它该作的事,就足够了,可是编程比这要深刻许多。dom

除了只是告诉计算机如何作一些事情,好的代码有一个优雅的说法。若是这就是所有,咱们应该仍然使用机器语言。不,编写良好的代码能够清晰地表达解决方案的想法和意图,所以它能够立刻被其余程序员理解,包括未来的你。当这作到了,还存在一个比一系列执行之类更好的层级。性能

在代码里良好地表达想法是极其困难的。这和经过写做清晰地表达想法同样困难,二者须要终其一辈子来掌握。若是你继续致力于此,用你的整个生命提升编程的这个方面是可能的。学习

对他人的同理心

若是你正在制做的软件将被其余人使用,同理心对于一个成功的产品是必要条件。若是你可以把本身摆在客户的位置,真正感觉客户在现有情况下的痛苦和沮丧,那么你会使客户的生活更加美好。优化

软件界面能够是让人恐惧的复杂、或清爽地简洁。它们能够是使人发狂的不一致或让人愉快的深思熟虑。在你的目标群体、他们在用你的软件以前已经具有的知识、他们不得不完成工做的需求和指望上,你想象得越多,你就越能更好地设计他们喜好的软件。设计

制做人们感激和依赖的东西是极其让人满意的。为了这个目标,你须要知道他们的动机;为了这,你须要同理心。

分析思惟

编程的另外一个基础部分就是分析地思考问题。丢掉你的创新直觉还不够好。创新可以产生你须要找到目标的想法,可是冷酷的、艰苦的分析才是使你保持正确方向的罗盘,才是让你知道何时到达目的的“制造者”(maker)。

知道什么是重点关注的、可以采起好的措施和正确地解释结果,对于开发高性能软件是相当重要的。分析思惟是关于开发好的判断,并应用到最相关的时间、地点的一切。这是一项技能,意味着 浪费数周或数月在不相关的优化上 和 快速弄清你的软件瓶颈并消除它们 之间的不一样。

消除枯燥感

若是存在软件作得不错的地方,那就是它使单调工做自动化了。想一想你最须要的软件、你天天使用的程序。把 你不得不手工作的事情 想象成 再现它们为你作的事情,你会感激软件已经从你的生活中消除了大量的、易于出错的枯燥感。

怀着一个 从你生活移除其它枯燥任务 的强烈愿望 将给你一种想象新软件完成那些任务的巨大能力。你甚至能够用编程消除单调的编程任务,事实上,大量被程序员开发的、为程序员创造的软件就是尽量多地提升编程效率。当你有动机开发软件来作的时候,编程能够很好地作到,从你生活中移除各类枯燥感。

这些方面的任何一项------创新性地解决问题,想法的表达,同理心,分析思惟和自动化------都适用于任何人类的努力,可是放在一块儿,它们是编程的本质。它们也包含了我热爱编程的缘由。我在其它地方可以同时从事如此实际、理性和创新的工做吗?我没法想象其它工做,我宁肯作我如今作的。

原文地址:http://sam-koblenski.blogspot.com/2014/04/the-essence-of-programming.html 注1:问题域(Problem domain)”指提问的范围、问题之间的内在的关系和逻辑可能性空间。软件工程:在软件工程中,问题域是指被开发系统的应用领域,即在客观世界中由该系统处理的业务范围。

相关文章
相关标签/搜索