第一節 程式設計的精義
僅僅就程式設計序來說,實在是一件很簡單的事,甚至可以說是一種勞力活。兩千年前的寓言,已經成就了一位工程名家:愚公。這位名家的身上,濃縮了專案組織者、團隊經理、程式設計人員、技術分析師等眾多角色的優秀素質。他的出現,遠遠早於計算機發展的歷史,甚至早於一些西方國家的文明史。
從《湯問篇》中所述的愚公移山這一事件裡,我們看到了原始需求的產生:
「懲山北之塞,出入之迂」
也看到了專案溝通的基本方式:
「聚室而謀曰」
然後,我們還看到愚公確定了這個專案的目標:
「畢力平險,指通豫南,達於漢陰」
並通過研討,擇定了乙個井然有序的、可以實現的技術方案:
「扣石墾壤,箕畚運於渤海之尾」。
這個專案,動用了三名技術人員和一名工程管理人員:
「(愚公)率子孫荷擔者三夫」
並獲得了一名力量較弱,但滿富工作激情的外協:
「鄰人京城氏之孀妻,有遺男,始齔,跳往助之」。
基本上,這已經描述了「愚公移山」整個工程的概況。接下來,我們應該注意到愚公作為程式設計人員的基本素質。在與「河曲智叟」
的對答中,他敘述了整個工程的程式設計實現。 ø
「雖我之死,有子存焉」,這裡描述了可能存在的分支結構,即「
if」條件判斷。
ø「子又生孫,孫又生子;……子子孫孫,無窮匱也」,這裡描述了完成這個工程所必須的迴圈結構。
作為優秀的程式分析師,愚公論述了這個迴圈的可行性:由於「山不加增」
,所以條件「山平」
必將成立(「何苦而不平」
),所以這不會是乙個死迴圈。
在愚公的論述中,我們看到了程式設計的根本:順序、分支和迴圈。龐大若「愚公移山」這樣的工程,都是可以通過這樣簡單的程式設計來實現的。這,就是程式設計的精義了。
第二節 能不能學會寫程式的問題
我經常會被人問到「(我)能不能學會寫程式」這樣的問題。
這個問題由來已久。上溯七八年,程式設計師還是很少有人從事的職業。聽說的人少,真正了解的人也不多。而當乙個程式軟體被裝在電腦裡並開始執行時,人們便開始驚訝於程式設計師的厲害。所以「能不能學會寫程式」甚至成了一些人對自己的智力考評,所以便有人向我這樣發問。
愚公都能明白的程式設計精義,那些向我發問的智叟們又怎麼會不明白呢?
所以除了先天智障或後天懶惰者,都是可以學會寫程式的。如果你能確信,自己知道在早上起床後: ø
如果天冷則先穿衣服後洗漱
;
ø如果天熱則可反之
;
ø日復一日直到死亡。
那麼你就可以開始程式設計了。甚至,如果你認為以下條件成立: ø
如果有類似於生病、不能行動,以及意外的緊急事件,則當日可以略過。
那麼你就可以開始向設計師發展了。因為你已經具備了一項常人不具備的基本素質:折中。
第三節 程式= 演算法+ 結構
程式設計作為一種行為時,我們只需要知道其邏輯方法就可以了。所謂程式設計實際上就是把一件事情交給計算機去做,你認為這件事該如何做,就用「程式語言」的形式描述給計算機。如果你原本就不明白如何去做,那麼你也不要期望計算機去理解你想要做什麼。
所以程式設計的第一要務是先把事情分析清楚,把事件先後的邏輯關係和依賴關係搞清楚,然後再去寫**實現。一接到任務就開始coding的程式設計師,通常就是加班最多的程式設計師。
記住:積極工作和勤於思考都要佔時間。
第乙個完成關於程式設計本質思考的人,提出了乙個公式「程式= 演算法+ 結構」。這個公式的精彩之處,在於它沒有任何的地方提及**。甚至可以說,在這個公式裡,**是不存在的。
存在的只是思想。
演算法是對乙個程式的邏輯實現的描述,而結構是邏輯實現所依附的資料實體。只要開發人員將這個程式的演算法設計出來,並把結構描述出來,那麼程式就定型了。剩下的事,簡而言之,就是勞力活。
提出這個公式(algorithms + data structures = programs)的人是被稱作「pascal語言之父」的瑞士計算機科學家尼古拉斯
·沃思(niklaus wirth)。這個公式是他的一本書的名字。尼古拉斯
·沃思因為提出「結構化程式設計」的概念而獲得2023年的圖靈獎。正是他的學生,菲力浦
·凱恩(philippe kahn)建立了borland公司,才有了後來的turbo pascal和delphi。
在計算機專業所學的課程中,同時講述演算法和結構的只有 「資料結構」。現在,請你放下手邊這本書,再去讀讀被你扔到不知哪個角落的《資料結構》。請仔細看看,你將發現,在所有的演算法描述中,有且僅有順序、分支和迴圈這三種執行邏輯。簡單若順序表,複雜如樹、圖,它們的演算法都是用這三種執行邏輯來描述的。
第四節 語言
成天討論這門語言好,或者那門語言壞的人,甚至是可悲的。不但是悲其一葉障目,更要悲嘆於那種大愚若智的自得心態。
第五節 在沒有工程的時代
在沒有工程的時代,上面所說的就是乙個程式設計師的全部。他們掌握了一門語言,懂得了一些生活中最常見的邏輯,他們用程式的方式思考和學習了一些演算法,並根據前人的經驗,把這些演算法執行在一些資料結構之上。最後,我們就看到了他們寫的程式。
在沒有工程的時代,出現了非常非常多的人物。其中有演算法大師、有遊戲大師、有語言大師、有掙錢的大師……
唯獨,沒有工程大師。嗯,可以理解嘛,那是沒有工程的時代。好蠻荒,好遠古的。
【愚公移山記:移山伊始】
智叟無法阻止愚公移山的計畫,於是便讓兒子順道去經商。而鄰人京城氏的兒子,也在數年後隨他們遠遊求學去了。
大道至簡第一章
第一節主要講的是程式設計的精義,其中講到程式設計序是一項勞力活。先引入愚公移山的故事,愚公作為乙個兩千多年前的古代人,那時候還沒有計算機,更沒有程式設計,而他的身上卻濃縮了專案組織者 團隊經理 程式設計人員 技術分析師等眾多角色的優秀素質。他先是確定了專案的目標 即 畢力平險,指通豫南,達於漢陰 然...
讀大道至簡第一章有感
首先,我想說我寫的並沒有任何有用的東西,我發布的這篇文章僅僅是我個人的所感,是為了完成作業,如有雷同,純屬巧合。剛看這本書 老師硬性布置得作業 我是帶著一種隨意的心情看的,並沒有想過細細品讀這本書,完全是為了任務而來。讀了之後才發現這本書還是有許多可取之處的。本書剛開始,講述了乙個愚公移山的古老寓言...
大道至簡 第一章 讀後隨筆
在讀這本書的之前,我上網查了 大道至簡 的含義。以下是搜尋出來的結果 大道至簡的含義就是最有價值的道理其實是最樸素的道理,很重要的道理其實是很平常的道理。大道至簡應是一種境界,就像讀一本書,初讀,是從簡單到複雜,再讀是從複雜到簡單,讀熟了就只剩乙個綱了,這就是簡。大道至簡也是一種哲學,無論是做人還是...