天天看點

我可能對計算機科學這個5個字有一些誤解

故事背景

  1. 從來沒有思考一下或者問問自己,什麼是計算機科學?
  2. 是以對計算機有一些誤解
  3. 對科學也有一些誤解

計算機

我以為看了《深入了解計算機系統》就真的懂計算機了。其實,是一點兒也不懂。停留在什麼樣的層面呢?知道。就好比一個智者,經曆了滄桑,最後對我說了很多有哲理的話,因為我沒有相應的經曆是以我也隻是聽聽,隻是知道曾經有這麼一個智者告訴了我某個道理,至于我了解了嗎?應該是不了解的,不懂。也許直到有一天,自己有某個機遇,經曆過了類似的東西,就會豁然開朗。

那停留在什麼樣的層面呢?

  1. 隻是知道計算機大緻架構體系。
  2. 隻是知道需要用數字化的思維來了解這個世界。
  3. 隻是知道用計算思維來跟計算機交流,可是什麼是計算機思維呢?好像也從來沒有 問過自己。
  4. 隻是知道這些硬體,作業系統,程式設計語言,他們好像都是一種"設計",或者說更是一種行業标準規範,而這些标準規範來得是非常不容易的,因為需要大量的人力和物力去趟坑,最後爬起來的。
  5. 隻是知道系統級程式設計和應用級程式設計。
  6. 隻是知道系統軟體就是對硬體的一個抽象,知道CPU,RAM,磁盤,網絡。而網絡就是一個I/O裝置。
  7. 隻是知道整個存儲的架構體系。
  8. 隻是知道問題的抽象,系統抽象和資料抽象的能力是比較重要的。總之,抽象事物的層級能力很重要。
  9. 隻是知道計算機的基本概念。程序,線程,記憶體,寄存器,虛拟記憶體。

而這些基礎的概念是怎麼運作的,又是怎麼影響程式的。都不了解。

知道一些計算機基本思想:

  1. 空間換時間。(記憶體和緩存的使用)
  2. 時間換空間。空間成為瓶頸,切分資料分批次處理。
  3. 分而治之。把任務切分,分開執行,既可以做到解耦,又加快了速度。
  4. 異步處理。消息中間件的使用。
  5. 并行。利用多核的優勢同時處理一個業務邏輯。
  6. 離使用者近一點兒。CDN。
  7. 一切可擴充。業務子產品化,服務化(無狀态化)。

科學

我以為小時候,說夢想要成為科學家。就明白什麼是科學了。長大了,我發現對科學這個詞是有一些誤解的。以為動手抄寫幾行代碼,跑成功了,就完事了。其實不是的。

反思

計算機

  1. 這種機器是建立在數學原理上的,是建立在已知事實上的。一般在使用或者編碼過程中發現的問題,理論上都是可以解決的。至少需要培養自己這麼一個信念,那怕是自己騙自己。
  2. 有事沒事,還是應該寫幾行代碼,好讓CPU轉一轉,發發熱,而不是一邊想着變得優秀,一邊又少實踐,少練習,整個就是自己騙自己。還活在一種空想的狀态中不能自拔,因為動手實踐是一件痛苦的事情。
  3. 博覽群書的前提是先讀懂一本書,甚至這本書需要讀兩次。并且需要實打實地用手把書中的代碼敲一次,然後寫寫心得體會。而不是看看理論,就開心地以為自己會了。當需要動手做出一個功能來的時候,才真的體會到理論的無力感,就是因為動手少了,實踐少了。
  4. 把每一個小demo都敲出來,然後反複地測試,記錄結果,分析記錄結果的原因,最後得到一個比較好的做法。

科學

  1. 科學需要觀察現象。做大量測試,然後記錄每次測試的結果,去分析記錄的資料,最後得到一個規律性的結果。這個才是科學的定義吧。
  2. 滿足科學的條件是很辛苦的,因為很多時候,寫完代碼是不想做過多的測試的,累,總想着還有測試工程師呢。交給他們吧。其實錯了,當真正問題發生了,就特别尴尬。是以,無論是怎樣的一個小功能,自己還是需要做非常完備的測試,這個時間和精力的投入是非常有價值的。

小結

  1. 建立一種信念,相信計算機技術是可以達到自己預想的結果的,并且很穩定,如果實在不相信,那麼請自己做大量的實驗,甚至開啟服務讓它不知疲憊地跑上個幾天幾夜,看看出現了問題了嗎。
  2. 無論怎樣理論都代替不了實踐。實踐的越多,人與人之間的差距就會越大。
  3. 引用最經典的話:“我聽過了,我就忘了;我看見了,我就記得了;我做過了,我就了解了”。
  4. 告訴自己動手實踐看似慢一些,其實走的更快。

繼續閱讀