《黑客與畫家》讀書筆記(10-15章)

10 編程語言解析
2017-02-22
Fortran、Lisp、Cobol、Basic、C、Pascal、Smalltalk、C++、Java、Perl和Python,全都是高級語言。

11 一百年後的編程語言
2017-02-22
任何一種編程語言都可以分成兩大組成部分:基本運算符的集合(扮演公理的角色)以及除運算符以外的其他部分(原則上,這個部分可以用基本運算符表達出來)。
2017-02-22
我認爲,基本運算符是一種語言能否長期存在的最重要因素。其他因素都不是決定性的。
2017-02-22
你仔細審視一種語言的內核,考慮哪些部分可以被摒棄,這至少也是一種很有用的訓練。在長期的職業生涯中,我發現冗餘的代碼會導致更多冗餘的代碼,不僅軟件如此,而且像我這樣性格懶散的人,我發現在牀底下和房間的角落裏這個命題也成立,一件垃圾會產生更多的垃圾。
我的判斷是,那些內核最小、最乾淨的編程語言纔會存在於進化的主幹上。一種語言的內核設計得越小、越乾淨,它的生命力就越頑強。
2017-02-22
隨着技術的發展,每一代人都在做上一代人覺得很浪費的事情。
2017-02-22
效率低下的軟件並不等於很爛的軟件。一種讓程序員做無用功的語言才真正稱得上很爛。浪費程序員的時間而不是浪費機器的時間纔是真正的無效率。隨着計算機速度越來越快,這會變得越來越明顯。
2017-02-22
並行計算(parallel computation)
2017-02-22
性能分析器(profiler)
2017-02-22
(1)一百年後的編程語言在理論上今天就能設計出來;
(2)如果今天真能設計出這樣一種語言,很可能現在就適合編程,並且能夠產生更好的結果。

12 拒絕平庸
2017-02-22
埃裏克·雷蒙德寫過一篇文章《如何成爲一名黑客》(How to Become a Hacker)。文中有一部分專門談到,在他看來,如果你想當一個黑客,應該學習哪些語言。他建議從Python和Java入手,因爲它們比較容易學。想當高級一點的黑客,還應該學習C和Perl。前者用來對付Unix系統,後者用來系統管理和開發CGI腳本。最後,真正非常嚴肅地把黑客作爲人生目標的人,應該考慮學習Lisp:
Lisp很值得學習。你掌握它以後,會感到它給你帶來的極大啓發。這會大大提高你的編程水平,使你成爲一個更好的程序員。儘管在實際工作中極少會用到Lisp。
2017-02-22
軟件業是競爭非常激烈的行業,而且容易出現壟斷。在不考慮其他情況的條件下,某家公司的軟件更快更好用,就會把競爭者趕出這個市場。一旦你開始創業,你就會更深切地感受到這一點。一般情況是,創業公司要麼贏得一切,要麼徹底失敗。你要麼成爲富翁,要麼一無所獲。創業的時候,如果你選擇了錯誤的技術,競爭對手就會一舉打敗你。
2017-02-22
選擇使用哪一種技術的時候,你不能考慮別人的做法,只能考慮什麼樣的技術能最好地完成工作。
2017-02-22
大公司可以互相模仿,但是創業公司就不行。
2017-02-22
如果開發只在自己服務器上運行的軟件,這意味着你想用什麼語言就能用什麼語言。
2017-02-22
在Viaweb創業期間我從來沒有公開談論過Lisp語言。我們對新聞媒體閉口不談Lisp,如果你在我們的網站上搜索Lisp,只會發現我在個人介紹中提到過兩次,那是我寫的兩本關於Lisp的書。這是故意的,創業公司對競爭對手應該越保密越好。
2017-02-22
閉包
2017-02-22
Lisp代碼由Lisp數據對象構成。其他語言的源代碼一般由字符組成,字符串是主要數據類型之一,但是Lisp語言不完全是這樣。經過解析器處理之後,Lisp代碼就變成了你可以遍歷的數據結構。
如果你理解編譯器的工作原理,那麼事實是,與其說Lisp有一種很奇特的語法,還不如說它根本沒有語法。一般的源代碼程序經過編譯器解析會生成解析樹。Lisp的奇特之處就在於,你可以完全寫出程序,控制這種解析樹,進行任意的存取操作。Lisp的這種程序就叫做宏,它們可以用來生成其他程序。
2017-02-22
Ansi Common Lisp
注: 作者的另一本書
2017-02-22
編程語言不一樣,與其說它是技術,還不如說是程序員的思考模式。
2017-02-22
如果你爲創業公司工作,那麼這裏有一個評估競爭對手的妙招——關注他們的招聘職位。他們網站上的其他內容無非是一些陳腐的照片和誇誇其談的文字,但是招聘職位卻不得不寫得很明確,反映出他們到底想幹什麼,否則就會引來一大批不合適的求職者。
2017-02-22
最不用擔心的競爭對手就是那些要求應聘者具有Oracle數據庫經驗的公司,你永遠不必擔心他們。如果是招聘C++或Java程序員的公司,對你也不會構成威脅。如果他們招聘Perl或Python程序員,就稍微有點威脅了。至少這聽起來像一家技術公司,並且由黑客控制。如果我有幸見到一家招聘Lisp黑客的公司,就會真的感到如臨大敵。

13 書呆子的復仇
2017-02-23
快速排序(Quicksort)算法
2017-02-23
這種算法是1960年提出的,至今仍然是最快的通用排序方法。
2017-02-23
如果你創業的話,千萬不要爲了取悅風險投資商或潛在併購方而設計你的產品。讓用戶感到滿意纔是你的設計方向。只要贏得用戶,其他事情就會接踵而來。如果沒有用戶,誰會關心你選擇的“正統”技術是多麼令人放心。
2017-02-23
總的來說,你的經理其實不關心公司是否真的能獲得成功,他真正關心的是不承擔決策失敗的責任。所以對他個人來說,最安全的做法就是跟隨大多數人的選擇。
2017-02-23
第一,不同語言的編程能力不一樣。

第二,大多數經理故意忽視第一點。

14 夢寐以求的編程語言
2017-02-23
腳本語言(scripting language)
2017-02-23
布賴恩·柯尼漢和丹尼斯·裏奇合寫的《C程序設計語言》(C Programming Language)
2017-02-23
開發大型程序的另一個方法就是從一次性程序開始,然後不斷地改進。
2017-02-23
函數庫的使用應該符合程序員的直覺,讓他可以猜得出哪個函數能滿足自己的需要。
2017-02-23
大多數人接觸新事物時都學會了使用類似的過濾機制。甚至有時要聽到別人提起十遍以上他們纔會留意。這樣做完全是合理的,因爲大多數的熱門新商品事後被證明都是浪費時間的噱頭,沒多久就消失得無影無蹤。
2017-02-23
所以,發明新事物的人必須有耐心,要常年累月不斷地做市場推廣,直到人們開始接受這種發明。
2017-02-23
簡單重複同一個信息就能解決這個問題。你只需要不停地重複同一句話,最終人們將會開始傾聽。人們真正注意到你的時候,不是第一眼看到你站在那裏,而是發現過了這麼久你居然還在那裏。
2017-02-23
“最好的文字來自不停的修改”。所有優秀作家都知道這一點,它對軟件開發也適用。設計一樣東西,最重要的一點就是要經常“再設計”

15 設計與研究
2017-02-23
假定你正在設計一種工具,你可以把目標用戶定爲初學者,也可以定爲專家級用戶。一種人眼裏的優秀設計可能在另一種人眼裏卻是糟糕無比。這裏的重點是你必須選出某些人作爲你的目標用戶。
2017-02-23
我覺得,除非設定目標用戶,否則一種設計的好壞根本無從談起。
2017-02-23
如果目標用戶羣體涵蓋了設計師本人,那麼最有可能誕生優秀設計。
2017-02-23
如果目標用戶與你本人差別很大,你往往會假定目標用戶的需求比你本人的需求更簡單,而不是更復雜。低估用戶(即使出於善意)一般來說總是會讓設計師出錯。
2017-02-23
如果你覺得自己在爲傻瓜設計產品,那麼很可能不僅無法設計出優秀產品,而且就連傻瓜也不喜歡你的設計。
2017-02-23
在軟件領域,貼近用戶的設計思想被歸納爲“弱即是強”(Worse is Better)模式
2017-02-23
那就是如果你正在設計某種新東西,就應該儘快拿出原型,聽取用戶的意見。
2017-02-23
開發軟件的時候,我有一條規則:任何時候,代碼都必須能夠運行。如果你正在寫的代碼一個小時之後就可以看到運行結果,這好比讓你看到不遠處就是唾手可得的獎勵,你因此會受到激勵和鼓舞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章