我的最糟糕代碼列表

jopen 11年前發布 | 11K 次閱讀 代碼

英文原文: swizec.com  編譯:  伯樂在線- 唐小娟

        昨天 HackerNews 上的一個討論帖,讓我想起了我小時候寫的非常非常糟糕的代碼。

        老實說,我不是非常的害怕。每個人都會說類似的話:“我從十歲開始編程!”沒有人會問他們十歲時寫什么代碼。大部分人直到長大,獲得一個職業的時候才編寫出像樣的代碼。

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

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

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

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

        1. 一個數學教學程序

        年紀:11 歲

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

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

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

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

        已經淹沒在歷史中的代碼。

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

        年齡:11 歲

        技術:Pascal 和 BGI 圖形算法

我的最糟糕代碼列表

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

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

        我發現了 BGI 圖形算法,所以我可以在屏幕上繪制漂亮的圖像。我這次知道了循環了。問題是我不知道矩陣,所以我幾乎有 200 個全局變量。我記得最大的問題是,Pascal 會報錯“嘿,你的代碼不可以那么長!”所以我將變量定義分成了幾行。

        已經淹沒在歷史中的代碼。

        3. 一個“操作系統”

        年紀:12 至 13 歲

        技術:Pascal,文字圖像和鼠標驅動

我的最糟糕代碼列表

        (類似這個)

        我想在我的電腦上做一個基本的界面,看起來和 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 截圖

        年齡:20-21 歲

        技術:Javascript, Adobe AIR

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

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

        代碼在 GitHub 上:Twitulater

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

        年齡:22 歲

        技術:python, django, 數據庫

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

        當新數據進入系統后,你可以給相關的節點加力。

        很簡單的東西。

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

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

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

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

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!