本文來自讀者對我博文的評論。遇到主動思考者,提出的主動思考過的問題,老賀是相當的興奮。
【問題】
老師,我嘗試着%¥#&……%……,但程式變得更多了,這樣還會提高效率嗎?
【答複】
很高興你能問出這樣的問題,這種主動思考,在我的實體課學生中真也不多。這牽涉到我們對于效率的多元認識。
多數情況下,效率指計算機的效率,要分時間效率(用時盡可能少)和空間效率(運作中少占用記憶體空間)。而注重時間效率的居多。于是,源代碼的行數多少,并不是決定時間效率高的關鍵,隻要最終目标代碼,讓計算機執行的操作少,時間角度自然就快。而另一次元的效率,我們也要認識到,那就是人的效率。計算機系統是由計算機和人綜合起來的,實際上,人的效率更值錢,這在現在人力成本增加的情形下,對一些公司很關鍵的事。對于不算太複雜的問題,或者計算機效率低,但也足以滿足需求的情況下,作為開發人員的“人”,不必為計算機的效率而花太多功夫。一個系統中最關鍵的環節,影響到系統性能的“瓶頸”部分,才值得去耗費大量的人力,以及絕頂聰明的腦袋,去追求計算機的效率。這也就是很多初級的程度員體會不到學算法的必要性的原因(盡管好的初級程式員,算法素養無時不刻在起作用)。你的解決方案,顯然計算機的效率高了,人的效率低了。更要命的是,算法弄複雜了,出錯的可能性更大了。任何的工程,遵循“簡單即是美”的法則。
回答這樣的問題,高興,就多說幾句。
當然,作為學習者,尤其是初學者,你的這種“人力低效率”,恰從學習角度是最高效率的,對訓練思維的價值是相當大的。将這種思考和質疑繼續下去!