更新於 2022/02/11閱讀時間約 5 分鐘

用array還是list?要為了喝牛奶而養一頭牛嗎?

蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
既然沒有內建array,那就找替代方案吧!替代方案有兩個,一個是用list,另一個是用array或numpy這兩個module。
根據官網的文件說明,list的time complexity和C、Pascal的array一樣,而array這個module所提供的method,在index的時候, 速度會比list稍慢。既然「稍慢」,那應該不會慢到像蝸牛散步這種讓人抓狂的慢才對。不過有一個官網沒提到的問題是,array這個module只能處理一維的array,而我需要的,是二維的array。把二維array轉成一維array來處理,對於被matlab蹂躪過的人來說,實在是小菜一碟。怎麼說呢?因為matlab的迴圈是出了名的慢,尤其是巢狀迴圈,那真的就是蝸牛散步了,所以遇到巢狀迴圈時,如果很在乎速度,都會想辦法減少迴圈的層數。處理二維array時,如果需要用到兩層迴圈,那就把二維array轉成一維array,這樣就不需要兩層迴圈了。當然啦,matlab提供了一些方便的function來處理這些問題,只是明明可以很直觀處理的問題,因為程式語言本身特性的關係,還必須花費額外的心力來搞這些有的沒有的,有時還真是讓人圈圈叉叉的,難怪現在程式語言越來越多,而且替換速度越來越快,畢竟要處理的問題越來越複雜,型態也越來越多樣化,順了姑意,逆了嫂意,沒法大家都滿意。
如果採用array這個module,那就要自己寫function來處理二維、一維array的轉換問題,這似乎不是個好主意。至於numpy這個module呢?看來是好用許多,寫起來應該會很順暢。不過……最後決定還是用list來寫。為什麼咧?其實原因很簡單,既然是剛開始學,那就該把基本內建的東西摸熟一點,所以除非萬不得已,就別用一些有的沒的module吧!
其實要不要用別人寫好的東西,是個很有趣的問題,仔細追究起來,跟工、商業上的許多發展軌跡與碰到的問題,還真是有著異曲同工之妙。
在以前open source還沒這麼遍地開花的年代,別人的東西就意味著白花花的銀子。所以囉,要不要為了喝牛奶而養一頭牛,就成了挺令人傷腦筋的問題。一切都自己來,好處是可以掌控全局,哪邊可能會有問題都一清二楚,品質掌握在自己手上,但缺點是要從頭做起,需要的時間長,能燒的鈔票要夠多,才能燒出結果。那如果用別人的東西呢?好處是,很多工作別人都做好了,不用自己來,開發時間可以縮短許多。缺點呢,就是外來的東西品質要如何確保,是個難題。還有啊,以後版本升級時,可能還要再花錢。還有啊,萬一它倒了怎麼辦?!還有啊,萬一它被其他公司買走,而買它的那家公司,收費、授權方式都改了,這時候怎麼辦?!萬萬萬一,買它的那家公司,居然就是你的競爭對手,那…… Java就是個活生生血淋淋的例子。Java原本是Sun的,然後Oracle買下了Sun。Google的Android用到Java,然後Oracle告Google。這裡頭牽扯到的授權問題複雜得很,雖然法院後來判Google勝訴,但誰也說不準接下來會不會有續集。
現在open source這麼多,只要遵守授權規定,白花花的銀子可以少花很多了,只是其他問題依舊存在。就拿品質來說吧,幾年前就發生過這麼一件事,沒記錯的話,應該是有隻非常多人用的程式發現了bug,引起了非常大的騷動。只是好玩的是,那隻程式短短的沒幾行,就只是處理簡單的字串而已,自己寫的話,也花不了幾分鐘。只是啊只是,大家現在都用別人的東西用習慣了,反正又不花錢,於是就連很基本隨手可以處理的問題,都要拿別人的東西來用,而且可能會毫無戒備的認為,這些大家都在用的東西一點問題都沒有,才會有這樣的事情發生。
想到工業界的例子。台積電,這個被吹捧為「護國神山」的大公司,就是靠著幫別人養牛的商業模式崛起的。原本的產業結構是一條龍全包式的,Intel就是這麼樣的一家公司。想要進入這樣的產業,除了銀子要比山高之外,還得要上、中、下游的技術全都具備,那可就不是一個「難」字可以形容的了。不過自從台積電搞了個晶圓代工的新商業模式之後,整個產業結構產生了很大的變化,IC設計公司也才如雨後春筍般出現,這些IC設計公司要是沒有晶圓代工廠幫忙,應該很多連出生的機會都沒有,更不要說像現在這麼會賺錢了。
說實在的,我覺得以投資人的眼光來看,公司就只有讓你賺錢的和讓你賠錢的這兩種,什麼「護國神山」,那是拿來矇人的。有再響亮的名號,如果不能讓你賺到錢,那就該棄之如敝屣,犯不著為了個別人吹噓出來的名號,和自己的銀子過不去。
總之,用與不用別人寫的東西,各有各的優缺點,就像解optimization的問題一樣,絕大部分都只能找到local optimum,很難有絕對的標準可以找到global optimum。所以囉,既然沒時間壓力,可以不講求效率,那能自己寫就自己寫,一杯咖啡、一曲音樂,零食…… 沒有,會肥!悠悠哉哉地享受寫程式的樂趣囉。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.