? ? 前些天買了一本新書《枕邊算法書》([韓] 林栢濬 著;崔盛一 譯铃芦,人民郵電出版社襟雷,2018),也是想作為睡前讀物看看咧虎〖瞥剩看了一個晚上征唬,確實如書名所言总寒,文章主要以作者的經歷理肺,寫的比較貼近程序員生活,不像傳統(tǒng)的一些算法或編程書比較刻板妹萨。這么寫的優(yōu)點是作者通過自己的經歷乎完,從自身角度出發(fā),通過一個個實際遇到的小問題小故事囱怕,寫得生動有趣娃弓。當然台丛,也有缺點砾肺,因為從自身出發(fā),所以有些想法很主觀侠坎,對現在的國內開發(fā)者实胸,并不一定完全合適。
? ?先說說看了第一章前幾節(jié)的一些共鳴:對自己編寫的代碼進行單元測試庐完,是“必須”的门躯,而非“可選”環(huán)節(jié)讶凉。這點我深有感觸染乌,不能因為趕進度慕匠,自己都不測試一下就把代碼提交台谊,至少在團隊協(xié)作中锅铅,每個人要對自己編寫的代碼負責减宣,這確實是工作態(tài)度問題。大部分情況下贼邓,查找bug是考驗韌勁和注意力的過程闷尿,與奇思妙想或精妙構思相比,查找bug更多地需要毅力统舀。經常調試別人的代碼時提高編程能力的捷徑之一誉简。這點我非常同意,因為我自身工作的原因闷串,經常要對別人的代碼進行二次開發(fā)烹吵,而這個過程可以學到很多技巧毛甲。而即使有遇到不明白的地方,由于工作原因只损,也會迫使自己去學習跃惫,或者去請教相關的知識爆存。
? ? 而一些作者主觀的內容先较,也很明顯,也可能和作者國籍有關曾棕,有些我甚至覺得太為難自己翘地。第一章里作者就幾次通宵熬夜癌幕,這種不放棄的毅力值得學習勺远,但我不支持常年加班熬夜,身體健康更為重要谚中,畢竟“活著才能寫出代碼”宪塔。而他的另一個觀點某筐,“不能再承諾時間內完成任務的人冠跷,壓根算不上是程序員”南誊,我想了下,也許他是沒遇到過需求一天變三變的產品經理吧蜜托。此外抄囚,作者覺得想“一下子”解開算法問題的都只是編程菜鳥,“高手”應該是一步一步向著最終目標前進的橄务。我覺得幔托,真正的高手才是那種“靈光一閃”,然后“一下子”解決問題的人,一步一步按部就班解決問題并不一定是“高手”重挑,但是可以說是“閱歷豐富”嗓化,至少很穩(wěn)健。比如小學生做數學題:8x134谬哀,按部就班的學生會列“豎式”進行一步一步按位乘法計算刺覆,真正的高手會是8x134=8x(125+9)=1000+72=1072. 此外,作者覺得有紙筆的情況下史煎,3分鐘以內應該能解開愛因斯坦的那道邏輯題。我才疏學淺,開了個excel表記錄,花了大概5分鐘解開了谓苟。這種謎題如同作者所言像查找bug時找凌亂的線頭,其實毅力更為重要仑撞,大家不用糾結是3分鐘座舍,還是5分鐘采蚀。另外我想說的是,好記性不如爛筆頭,借助工具可以讓你更有效地提高效率袁滥。
接下去分享一下昨天看到的幾個趣題,確實不錯。
1. 一個島上有N個和尚姜挺,紅眼睛是被詛咒過的拧篮,如果知道自己是紅眼睛,當晚就會自裁高氮。但是他們規(guī)定,不能告訴別人或者問別人自己的眼睛顏色,島上也沒有鏡子或其他可以看到自己眼睛顏色的條件费彼。直到有一天雇卷,一個游客來玩,說了一句:你們之中至少有一人是紅眼睛。接下去島上發(fā)生了可怕的事踊赠。 這個故事最終從遞歸角度來講缤灵,解釋了所有情況,淺顯易懂。
2. 大家要習慣寫“防御型代碼”立倍,增加代碼的健壯性寝志。作者用了個很通俗易懂的例子來說明了Java中常見的NullPointerException,一道數學題:假設a=b, 那么a平方 = ab浸颓,a平方-b平方=ab-b平方棵磷,(a-b)(a+b)=b(a-b),a+b=b,b+b=b,2b=b,2=1。實際編程中經常遇到這種類似的看起來很低級的錯誤,因此需要寫“防御型代碼”規(guī)避類似的“低級錯誤”巢音。
3.挑戰(zhàn)一下自己梧躺,用Java或其他編程語言編寫一段代碼秃诵,內容是輸出這段代碼本身牵咙。
4. 愛因斯坦的那道邏輯題:五個國家的人住在5棟屋子里,彼此愛好不同的飲料溪食、香煙,養(yǎng)不同的寵物。①英國人住紅房子饮睬。②瑞典人養(yǎng)狗。③丹麥人喝茶胁附。④綠房子緊鄰在白房子左側郎哭。⑤綠房子主人喝咖啡。⑥抽“長紅”牌香煙的人養(yǎng)鳥茶敏。⑦黃房子主人抽“登喜路”牌香煙。⑧正中央房子的主人喝牛奶。⑨挪威人住在最左側房屋亲铡。⑩抽Blends牌香煙的人住在養(yǎng)貓人隔壁葡兑。?養(yǎng)馬人住在抽“登喜路”牌香煙的人隔壁。?抽Bluemaster牌香煙的人喝啤酒。?德國人抽Prince牌香煙。?挪威人和藍房子主人相鄰手负。?抽Blends牌香煙的人與喝礦泉水的人是鄰居雹姊。問:誰養(yǎng)鳥???
這道邏輯題我正好身邊沒紙筆,借助了excel祈惶,感覺和做數獨差不多,線索還是很線性很明顯的扮匠。