輸出.1
一旦某人開始高談闊論就要小心了,它在為自己的無能找借口。我從不覺得對著國際形勢指點江山,揮斥方瓊的三和大神和在鏡頭前一副無限不屑態(tài)度侃侃而言的三百斤教授有什么本質(zhì)的區(qū)別,因為它們做的事在底層邏輯上都是為了得到外行的認同,去改變它人的認知。
客觀事實并不會因此有任何變化。
事實上我現(xiàn)在做的,和我要做的也是一樣的事。
我釋然了,我的進廠大概是命運使然。作為第一批接觸移動互聯(lián)網(wǎng)的人,初中的時候我學(xué)會了刷鉆,刷機,免流,內(nèi)存修改,還用手機作為IDE開發(fā)了第一個安卓app——一個解一元二次方程的軟件。我覺得自己很聰明,自己比周圍的所有人都聰明,至少只有班上最聰明的人才能和我交流編程。
這樣聰明的我知道了,原來世界上有個東西叫“青少年信息學(xué)奧林匹克競賽”,力扣也有類似的比賽,起初以為是周賽加強版,然后泡了一杯茶做了一天沒做出一道簡單題。
曾經(jīng)還以為一個木函的開發(fā)者是什么天才,后來發(fā)現(xiàn)只是調(diào)用API原來我也可以,現(xiàn)在發(fā)現(xiàn)那個“我也可以”的想法和信競職業(yè)選手相比,幾乎低了一個次元。
我也以為自己邏輯思維很好,直到需要定義狀態(tài),需要證明可以貪心……我發(fā)現(xiàn)我的邏輯思維幾乎為0。大概是這樣,周圍都是0.004,我是0.04,所以我覺得我很強,可力扣人均0.5甚至有的0.99,我四舍五入就是0了。
大概CF人均1.2吧,我不是很懂。
環(huán)境是這樣。我也從小就很喜歡計算機,但是只在每周一節(jié)的微機課才能碰到,而且就算家里有了電腦大概也只是多了幾個DNF搬磚號。
退一萬步,回到根本的問題。
對于軟件開發(fā)而言,算法和數(shù)據(jù)結(jié)構(gòu)的意義在哪?我沒有學(xué)過任何算法,冒泡排序都不會,可我還是獨立開發(fā)了很多軟件。
提高軟件運行效率的話,最多的手段是多線程,而非算法。
多數(shù)情況下,軟件開發(fā)中設(shè)計模式的重要性遠遠大于算法,設(shè)計模式和算法正好相對,它提升的是人的效率,而這和錢是直接掛鉤的。
像HashMap,Treeset這種底層庫,確實用到了諸如紅黑樹之類的結(jié)構(gòu),可就算我不知道這一點也不影響我的使用,屏蔽實現(xiàn)細節(jié)本身就是面相對象的核心思想。
像Redis這種軟件,用到了跳表這種數(shù)據(jù)結(jié)構(gòu),但是又有誰會,并且有能力,有動機造這種級別的輪子呢。
結(jié)論就是,實際開發(fā)中算法幾乎一無是處。我們多數(shù)人需要解決的問題,都不至于用到算法,也不至于用算法來造新的輪子。
但這一切并不是毫無意義的。我寫過一個分割文件的軟件,第一個分片的前幾個字節(jié)存儲了下一個分片的信息,下一個分片同理。
這其實就是鏈表的思想,盡管我沒有用過鏈表,但第一時間還是這樣想了。
于我而言事情就很清晰了。我喜歡設(shè)計模式是因為這里面包含了諸如奧卡姆剃刀一類的哲學(xué)思想,這種去除重復(fù),解除耦合的感覺很爽。
我以為算法更接近數(shù)學(xué),但現(xiàn)在我發(fā)現(xiàn)算法也是一種思想。只不過它針對的問題更加廣泛,更加底層,但這絕不是無用的。
我瞎猜的,輸入框下面的自動提示,應(yīng)該有用到字典樹,如果讓我來實現(xiàn)就用字典樹……當然更大的可能是直接調(diào)用了startWith,不過startWith可能就是字典樹實現(xiàn)的?應(yīng)該不至于,需要太多額外內(nèi)存了……
除此以外,我感覺算法訓(xùn)練讓我理解問題的能力提升了很多,不僅是編程,這對于我思考任何抽象的問題都是有幫助的。
遇到一個未知問題除了睡大覺,還有了一些思考的底氣。