編程的本質

爲何我如此熱愛編程?個人意思是,我從 讓程序運轉良好和確保它編寫清晰、組織有序中 收穫了多得不思議的知足。我老是被編程所吸引,我學得越多,我就越想學更多、越想提升更多。html

我開心地坐在電腦前面,花費數個小時儘可能描述最好的算法,只是爲了解決一些乏味問題而用一個不多像人類語言的、難懂的語法,它只是像天然語言,由於它使用了一些簡單的英語詞彙。爲何是那樣?是什麼讓編程如此快樂,我敢說是有趣?下面是我認爲的最好的一些理由,它們組成了我認爲是編程本質的東東。程序員

創造性地解決問題

每個編程問題都是堆滿你大腦而須要解決的新挑戰。即便你之前作過,仍然有一部分在你解決時會產生新的問題。你能在一個新的上下文實現,或者爲了高吞吐量、數百萬的用戶或不可思議的低電力。那些問題須要創新才能克服。web

你作的任何編程自己都是新的,至少對你是這樣,由於若是不這樣你將要使用你已經用過的軟件。在大多數狀況下,你試圖解決的問題相對於多數人來講,是很是新的,你也在學習。你在學習問題域(Problem domain)【注1】,你在學習需求和約束,你在學習如何最好地解決眼前問題。算法

整個過程充滿了如此多的創新。設計準則和代碼規範是好的,可是它們歷來不足以應付每種狀況,或爲任何更有趣的問題提供解決方案。編程首先是、且重要的是一個創新過程,你擁有的知識越多,你就越能在這些難題之間想到新穎的解決方案。編程

想法的表達

若是該解決方案是費解的,那麼它有創新也不是足夠的。我花了好長時間才理解,可是好的編程就像創新地解決問題同樣,須要很好的寫做能力。我過去經常認爲,若是代碼寫得好,且作了它該作的事,就足夠了,可是編程比這要深刻許多。dom

除了只是告訴計算機如何作一些事情,好的代碼有一個優雅的說法。若是這就是所有,咱們應該仍然使用機器語言。不,編寫良好的代碼能夠清晰地表達解決方案的想法和意圖,所以它能夠立刻被其餘程序員理解,包括未來的你。當這作到了,還存在一個比一系列執行之類更好的層級。性能

在代碼裏良好地表達想法是極其困難的。這和經過寫做清晰地表達想法同樣困難,二者須要終其一輩子來掌握。若是你繼續致力於此,用你的整個生命提升編程的這個方面是可能的。學習

對他人的同理心

若是你正在製做的軟件將被其餘人使用,同理心對於一個成功的產品是必要條件。若是你可以把本身擺在客戶的位置,真正感覺客戶在現有情況下的痛苦和沮喪,那麼你會使客戶的生活更加美好。優化

軟件界面能夠是讓人恐懼的複雜、或清爽地簡潔。它們能夠是使人發狂的不一致或讓人愉快的深思熟慮。在你的目標羣體、他們在用你的軟件以前已經具有的知識、他們不得不完成工做的需求和指望上,你想象得越多,你就越能更好地設計他們喜好的軟件。設計

製做人們感激和依賴的東西是極其讓人滿意的。爲了這個目標,你須要知道他們的動機;爲了這,你須要同理心。

分析思惟

編程的另外一個基礎部分就是分析地思考問題。丟掉你的創新直覺還不夠好。創新可以產生你須要找到目標的想法,可是冷酷的、艱苦的分析纔是使你保持正確方向的羅盤,纔是讓你知道何時到達目的的「製造者」(maker)。

知道什麼是重點關注的、可以採起好的措施和正確地解釋結果,對於開發高性能軟件是相當重要的。分析思惟是關於開發好的判斷,並應用到最相關的時間、地點的一切。這是一項技能,意味着 浪費數週或數月在不相關的優化上 和 快速弄清你的軟件瓶頸並消除它們 之間的不一樣。

消除枯燥感

若是存在軟件作得不錯的地方,那就是它使單調工做自動化了。想一想你最須要的軟件、你天天使用的程序。把 你不得不手工作的事情 想象成 再現它們爲你作的事情,你會感激軟件已經從你的生活中消除了大量的、易於出錯的枯燥感。

懷着一個 從你生活移除其它枯燥任務 的強烈願望 將給你一種想象新軟件完成那些任務的巨大能力。你甚至能夠用編程消除單調的編程任務,事實上,大量被程序員開發的、爲程序員創造的軟件就是儘量多地提升編程效率。當你有動機開發軟件來作的時候,編程能夠很好地作到,從你生活中移除各類枯燥感。

這些方面的任何一項------創新性地解決問題,想法的表達,同理心,分析思惟和自動化------都適用於任何人類的努力,可是放在一塊兒,它們是編程的本質。它們也包含了我熱愛編程的緣由。我在其它地方可以同時從事如此實際、理性和創新的工做嗎?我沒法想象其它工做,我寧肯作我如今作的。

原文地址:http://sam-koblenski.blogspot.com/2014/04/the-essence-of-programming.html 注1:問題域(Problem domain)」指提問的範圍、問題之間的內在的關係和邏輯可能性空間。軟件工程:在軟件工程中,問題域是指被開發系統的應用領域,即在客觀世界中由該系統處理的業務範圍。

相關文章
相關標籤/搜索