Java罪大惡極
最開始就是想要搞黑客,外掛之類的東西才學的編程,奈何學了Java以后漸漸走遠了……
直到現(xiàn)在,了解了WIN的API,學了一些X86匯編還有ARM匯編以及一些數(shù)據(jù)結(jié)構以后,依舊連一個簡單的游戲外掛都寫不出來,于是開始懷疑人生……編程可能真的是需要天賦的。
當然,一開始直接去改植物大戰(zhàn)僵尸之類的東西肯定是沒問題的。然而上來就挑戰(zhàn)安卓平臺,還是一個已經(jīng)和外掛對抗多年的游戲,確實有些眼高手低。Unity的游戲編譯到安卓平臺,會把原本的C#代碼轉(zhuǎn)換成il中間碼,大概就類似Java的smali碼……然后這個il中間碼又會被轉(zhuǎn)換成C++的代碼,最后把C++代碼編譯成so文件……安卓手機都是ARM處理器,所以so文件存儲的是ARM匯編代碼,和X86不同,網(wǎng)上能夠找到的ARM匯編的資料很少,而且大多是為嵌入式開發(fā)提供的。結(jié)果就是,到現(xiàn)在我還不知道怎么更改一條指令的參數(shù)……因為ARM并不是說某個字節(jié)對應指令,某個字節(jié)對應參數(shù),一條指令對應的四個字節(jié),其中兩個字節(jié)改動都會導致指令變化……甚至像MOV R0,#0這種帶常數(shù)的指令,16進制里面都看不到0這個數(shù)字。具體的規(guī)則網(wǎng)上也沒可以參考的資料,直接給我看到腦溢血……
這就是習慣了JAVA的癥狀——總是想著用現(xiàn)成的東西,從不自己研究。
初學冒泡排序的時候我就在想,直接Array.sort()不就行了嗎,還整幾層for循環(huán)那么麻煩……
學那些數(shù)據(jù)結(jié)構的時候也是,想著用List不就行了,隊列什么的也都有現(xiàn)成的,還去自己實現(xiàn)有什么意義,實際開發(fā)又用不上。
這種想法養(yǎng)成習慣,最后就變成一個代碼巨嬰,什么都是直接拿來用,麻煩一點點的東西都不愿意自己去實現(xiàn)……
還有就是內(nèi)存。
對于以前的程序員來說,JAVA幫忙解決了內(nèi)存分配,回收的問題,肯定是皆大歡喜的。但是對我而言,因為JVM做的過于完美,導致我在很長一段時間對內(nèi)存的概念是模糊的。
初次看到C的malloc函數(shù)還覺得很奇怪,覺得變量申明的時候就已經(jīng)分配了內(nèi)存,重新malloc一遍意義何在。
還有學C++時,覺得析構函數(shù)這種臃腫的東西為什么經(jīng)歷了那么多版本還沒被閹割……
以前覺得C++好撈,寫個類麻煩又臃腫?,F(xiàn)在看,C++才是那個真正對我好的語言;JAVA甚至連程序員掌控內(nèi)存的能力都要剝奪,企圖把那些本該了解操作系統(tǒng)的程序員都變成JVM的奴隸,實在惡劣。
和面相對象思想一樣,JAVA中用戶只關心結(jié)果而不必關心內(nèi)部實現(xiàn),所以JVM掩蓋了一些操作系統(tǒng)本身的特性。導致我直到18年才知道Windows系統(tǒng)的內(nèi)存分頁等等特性,雖然那一年才剛買電腦……
最后還是通過匯編語言把空缺的這一塊補了。
總結(jié),JAVA讓程序員很難直接接觸到數(shù)據(jù)結(jié)構,算法,內(nèi)存,操作系統(tǒng)……這些核心的東西,拉低了全體程序員的水平,罪大惡極。