为什么我如此热爱编程?我的意思是,我从 让程序运转良好和确保它编写清晰、组织有序中 收获了多得不思议的满足。我总是被编程所吸引,我学得越多,我就越想学更多、越想提高更多。
我开心地坐在电脑前面,花费数个小时尽量描述最好的算法,只是为了解决一些乏味问题而用一个很少像人类语言的、难懂的语法,它只是像自然语言,因为它使用了一些简单的英语词汇。为什么是那样?是什么让编程如此快乐,我敢说是有趣?下面是我认为的最好的一些理由,它们组成了我认为是编程本质的东东。
创造性地解决问题
每一个编程问题都是堆满你大脑而需要解决的新挑战。即使你以前做过,仍然有一部分在你解决时会产生新的问题。你能在一个新的上下文实现,或者为了高吞吐量、数百万的用户或难以想象的低电力。那些问题需要创新才能克服。
你做的任何编程本身都是新的,至少对你是这样,因为如果不这样你将要使用你已经用过的软件。在大多数情况下,你试图解决的问题相对于多数人来说,是非常新的,你也在学习。你在学习问题域(Problem domain)【注1】,你在学习需求和约束,你在学习如何最好地解决眼前问题。
整个过程充满了如此多的创新。设计准则和代码规范是好的,但是它们从来不足以应付每种情况,或为任何更有趣的问题提供解决方案。编程首先是、且重要的是一个创新过程,你拥有的知识越多,你就越能在这些难题之间想到新颖的解决方案。
想法的表达
如果该解决方案是费解的,那么它有创新也不是足够的。我花了好长时间才理解,但是好的编程就像创新地解决问题一样,需要很好的写作能力。我过去常常认为,如果代码写得好,且做了它该做的事,就足够了,但是编程比这要深入许多。
除了只是告诉计算机如何做一些事情,好的代码有一个优雅的说法。如果这就是全部,我们应该仍然使用机器语言。不,编写良好的代码可以清晰地表达解决方案的想法和意图,因此它可以马上被其他程序员理解,包括将来的你。当这做到了,还存在一个比一系列执行之类更好的层级。
在代码里良好地表达想法是极其困难的。这和通过写作清晰地表达想法一样困难,两者需要终其一生来掌握。如果你继续致力于此,用你的整个生命提高编程的这个方面是可能的。
对他人的同理心
如果你正在制作的软件将被其他人使用,同理心对于一个成功的产品是必要条件。如果你能够把自己摆在客户的位置,真正感受客户在现有状况下的痛苦和沮丧,那么你会使客户的生活更加美好。
软件界面可以是让人恐惧的复杂、或清爽地简洁。它们可以是令人发狂的不一致或让人愉快的深思熟虑。在你的目标群体、他们在用你的软件之前已经具备的知识、他们不得不完成工作的需求和期望上,你想象得越多,你就越能更好地设计他们喜爱的软件。
制作人们感激和依赖的东西是极其让人满意的。为了这个目标,你需要知道他们的动机;为了这,你需要同理心。
分析思维
编程的另一个基础部分就是分析地思考问题。丢掉你的创新直觉还不够好。创新能够产生你需要找到目标的想法,但是冷酷的、艰苦的分析才是使你保持正确方向的罗盘,才是让你知道什么时候到达目的的“制造者”(maker)。
知道什么是重点关注的、能够采取好的措施和正确地解释结果,对于开发高性能软件是至关重要的。分析思维是关于开发好的判断,并应用到最相关的时间、地点的一切。这是一项技能,意味着 浪费数周或数月在不相关的优化上 和 快速弄清你的软件瓶颈并消除它们 之间的不同。
消除枯燥感
如果存在软件做得不错的地方,那就是它使单调工作自动化了。想想你最需要的软件、你每天使用的程序。把 你不得不手工做的事情 想象成 再现它们为你做的事情,你会感激软件已经从你的生活中消除了大量的、易于出错的枯燥感。
怀着一个 从你生活移除其它枯燥任务 的强烈愿望 将给你一种想象新软件完成那些任务的巨大能力。你甚至可以用编程消除单调的编程任务,事实上,大量被程序员开发的、为程序员创造的软件就是尽可能多地提高编程效率。当你有动机开发软件来做的时候,编程可以很好地做到,从你生活中移除各种枯燥感。
这些方面的任何一项------创新性地解决问题,想法的表达,同理心,分析思维和自动化------都适用于任何人类的努力,但是放在一起,它们是编程的本质。它们也包含了我热爱编程的原因。我在其它地方能够同时从事如此实际、理性和创新的工作吗?我无法想象其它工作,我宁可做我现在做的。
原文地址:http://sam-koblenski.blogspot.com/2014/04/the-essence-of-programming.html
注1:问题域(Problem domain)”指提问的范围、问题之间的内在的关系和逻辑可能性空间。软件工程:在软件工程中,问题域是指被开发系统的应用领域,即在客观世界中由该系统处理的业务范围。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。