我的最糟糕代码列表

昨天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时,情况稍稍有点改善。

现在回想起来,我应该使用图形数据库的,那时候它们正好很火!

或者,应该使用一个开始不是那么复杂的算法,可能会有帮助些。

这个代码我不要意思拿出来。

收藏 2 评论

关于作者:唐小娟

唐小娟:热爱互联网的程煦媛 个人主页 · 我的文章 · 12

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 真牛逼,9岁开始就接触了,看来兴趣要从小时候开始挖掘!

  • macazy   2013/05/11

    如何做到那么快学习好一门技术的?
    一年了 我还在C的泥潭里挣扎

跳到底部
返回顶部