我的最糟糕程式碼列表

唐小娟發表於2012-12-27

昨天HackerNews上的一個討論帖,讓我想起了我小時候寫的非常非常糟糕的程式碼。老實說,我不是非常害怕。每個人都會說類似的話:“我從十歲開始程式設計!”沒有人會問他們十歲時寫什麼程式碼。大部分人直到長大,獲得一個職業的時候才編寫出像樣的程式碼。

我現在很期待那些12歲就設計作業系統的人們的評論。:)

我從九歲就開始程式設計了,因為我們學校開了一門程式設計課。沒有這門課的話,我可能變成一個作家或者語言學家。謝謝你ZRI,還有那個我永遠不記得名字的教授。你們太棒了!

那時我使用了Logo,非常有趣,但真正有趣的是我十一歲時接觸到了Pascal。我不知道對於一個11歲的小孩來說什麼樣的才是一個好程式設計師,我所知道的是按照現實的標準來看,我是個可怕的程式設計師。

下面是過去的十三年裡,我創造的可怕的程式碼的一個不完全列表。

 

1. 一個數學教學程式

年紀:11歲

技術:Pascal和文字的“圖形”

我想做個數學練習題的程式,我用了隨機,這樣可以生成無窮多的例子。

但是,我不知道GotoXY,所以不會在螢幕的某個位置列印些東西。所以我用了很多步在 WELCOME 這行前列印空行。

我需要很多步,因為我還不會迴圈 – 每行都是硬編碼的空行。

已經淹沒在歷史中的程式碼。

 

2. 一個太空侵略者的遊戲

年齡:11歲

技術:Pascal和BGI圖形演算法

English: One of several aliens found in the se...

這不是我做的太空入侵者(圖片來源:Wikipedia)

我叫它太空入侵者 —— 我根本不知道真正的太空入侵者遊戲。我的僅僅是在上空有兩個太空飛船,可以從下面射擊它們。

我發現了BGI圖形演算法,所以我可以在螢幕上繪製漂亮的影象。我這次知道了迴圈了。問題是我不知道矩陣,所以我幾乎有200個全域性變數。我記得最大的問題是,Pascal會報錯“嘿,你的程式碼不可以那麼長!”所以我將變數定義分成了幾行。

已經淹沒在歷史中的程式碼。

 

3. 一個“作業系統”

年紀:12至13歲

技術:Pascal,文字影象和滑鼠驅動

Personal DeskMate Desktop

(類似這個)

我想在我的電腦上做一個基本的介面,看起來和Turbo Pascal 7一樣酷。我管它叫作業系統儘管它僅僅是在DOS上的一個虛擬Shell上執行的程式。

它有很多完成多工的程式 —— 我不記得到底有多少了,但我記得有很多選單,你可以點選選單到相應的地方。你甚至可以執行本地的程式(我經常用它來執行Doom)。你當然可以對介面進行設定,甚至可以以不同的使用者登陸。

有一種輸入密碼的祕密方法,所以你有可能進入管理模式,弄亂其他使用者的設定。

第二個版本有更好的GUI(沒有截圖,對不起)

我最後不得不學習使用函式,因為GOTO不能跳到超過4000行。所有的那些“程式”都可以執行嗎?這是單一的程式碼庫,而不是不同的程式。

哦,我仍舊有個問題,我不得不將全域性變數的定義分成很多行。

這個程式也淹沒在歷史中了。

PS:後來我試著用BGI圖形來實現它,但我沒有完成繪製視窗。

 

4. 太空入侵者 v2

年紀: 12或13歲

技術: Pascal和BGI

那時我還是不知道真正的太空入侵者遊戲,所以我做的這個遊戲中,你要射擊上面來回飛的兩個對手。當你把它們射下來後,又有新的飛出來。

我想可能是由於程式碼的限制,所以敵人才那麼少(陣列大小?為對手設定的變數數?不知道)。

這個遊戲最棒的一點在於你可以買武器和彈藥,而機器人玩家用光彈藥時就會撞向你。

因為某種原因,在你的操作器上有一個頭是土豆的人會給你提示。現在沒有截圖了,但我可以用紙和筆來重現畫面。

那次我不再用GOTO。我仍舊不知道程式碼的可讀的重要性,所以大部分的變數都是a, aa, ab等。但我開始縮排我的程式碼了!很好玩。

這個程式碼也淹沒在歷史中了。

 

5. 太空入侵者 v3(可能還有其他的名字)

年紀:13歲

技術:Pascal, 24點陣圖像, 滑鼠驅動, BMP動畫庫

這是我創造的第一個看起來不錯的遊戲。但由於記憶體的限制,你仍然一次最多隻有四個對手,但他們可以在二維空間裡飛,而不是隻在上面左右來回飛。

你可以用滑鼠來操控,所以飛船上安置了滑鼠,你可以通過點選來射擊。非常好玩。這也是我第一次使用BMP動畫庫和24點陣圖像 —— 真的很炫!

但為了給背景的星星製造視差效果,浪費了太多地資源,以致沒有足夠的資源留給移動和設計。陣列的大小以及螢幕上子彈數仍舊給我帶來了不少的麻煩。

最後我放棄了這個專案因為一直有“空指標”的錯誤,而那時我並不知道什麼是指標。

這個程式碼也淹沒在歷史中了。

 

6. 太空入侵者3D(可能還有其他的名字)

年紀:13歲

技術:Pascal, 24點陣圖像

我想設計一個3D引擎,但不幸的是失敗了。基於宇宙是立體的事實,我想更新螢幕上的一切,也包括看不見的。

但我加入了兩個物體之後就用光了記憶體(16MB的記憶體),僅能移動一步了,所以這個“遊戲”是完全沒用的。

這個程式碼也淹沒在歷史中了。

 

7. 一個日曆應用

年齡:14歲

技術:Delphi

我想這個應用可以追蹤任務。它為你顯示日曆,當然也是由我手動開發的。你可以新增任務,之後提醒你。但我不知道閏年如何計算日期(並不僅僅是“除以4”)。它讓我在全國程式開發競賽中獲得了第三。

這個程式碼也淹沒在歷史中了。

 

8. ww2射擊遊戲

年齡:14歲

技術:Delphi

當你想用Delphi開發一個2D遊戲,想著能通過迅速變換視窗中的影象來做跑動的動畫效果時,你很有可能失敗。我用了幾個月的時間才把選單弄好,加上了不錯的圖片和音效,但我最終對開發遊戲失去了興趣。

這個程式碼也淹沒在歷史中了。

 

9. 早期網站

年紀:15-16歲

技術:PHP

這段時期我不太記得某一個專案了。我為網路動漫做了許多小網站,以及幾個大網站。

最主要的問題是我仍舊沒有丟掉動態程式中所習慣的狀態的概念,HTML作為一種無狀態協議一直困擾著我。所以我的程式碼中充斥著全域性變數。我花了大量的時間學習session的工作原理。

已經淹沒在歷史中的程式碼。

 

10. Chlorine Boards – 製作網站的系統

年齡:17-20歲

在我厭倦了phpBB的模組和外掛後,我開始製作一個可以建立網站的開源系統,一個模組不需要知道另一個模組的資訊。

甚至有某些很大型的網站都在使用它,我說服了一個網站中介僱傭我,因為我使用這個系統。

但有下面的失敗:

* 使用關係型資料庫的方式非常錯誤(最開始)。那時我不知道多對多關係的工作原理。

* 我自己寫了模版,使用了非常差的 模版-php 編譯器來完成程式碼。

* 包管理器不能處理依賴

* 一切都是單態模式

* 還有我想不起來的

程式碼仍舊在sourceforge上:Chlorine Boards

 

11. 用PHP開發的文字挖掘引擎

年齡:19-20歲

在Zemanta釋出他的文字挖掘系統的同時,我也開始開發我的。用PHP從零開始。它產生自標籤雲,效果相當棒 —— 甚至可以完成造句,找詞語搭配等。

但我發現用Perl來寫正則式的時候有很嚴重的問題,因為PHP的正則式解析引擎不夠快。

提醒一句:不要將語句提取器寫成正則式,即使PCRE允許你這麼做。

我想那些擴充套件了這個程式碼的人肯定很恨我。

淹沒在NDA的程式碼。

 

12. Twitulater

Twitulater截圖

Twitulater截圖

年齡:20-21歲

技術:Javascript, Adobe AIR

想法很簡單–一個twitter的客戶端,讓你根據正在發生的事情對對話進行篩選。可以將連結放在不同的標籤頁中,可以邊tweet邊對話。在TweetDeck之後進行了較大改動,但比TweetDeck在許多方面都做得更好一些!

但它有很多bug,最終失敗了。當你有一個20,000行的javascript程式碼時,而它是由一個不知道如何寫出簡單的程式碼的傢伙寫的(譬如他不知道Javascript如何處理閉包,事件如何工作),這是非常可怕的錯誤。

程式碼在github上:Twitulater

 

13. 一個基於力的圖團分析器

年齡:22歲

技術:python, django, 資料庫

沒有許多機器學習的經驗,我把影象分解物體的集合,有許多力作用在物體上。然後你可以執行物體模擬程式,最後屬於一類的節點會飛到一起,你可以使用網格切分演算法挑選出重疊的部分。

當新資料進入系統後,你可以給相關的節點加力。

很簡單的東西。

但實際上我並沒有實施真正的“尋找圖團”的演算法。我甚至不知道“尋找圖團”的真正名稱是什麼,我想我是這個新領域的第一人。

開始我使用關聯式資料庫,你應該猜得到,這行不通。計算僅僅一個結果就要很多秒,甚至幾分鐘。從資料庫中取資料是難以維持的。我使用App Engine和它的BigTable時,情況稍稍有點改善。

現在回想起來,我應該使用圖形資料庫的,那時候它們正好很火!

或者,應該使用一個開始不是那麼複雜的演算法,可能會有幫助些。

這個程式碼我不要意思拿出來。

相關文章