Sharpmark's Personal Home Page

编程五年(四)

今天把故事讲完。
中心搬到了信息中心四楼。我做了一组组长,当时还在做项目,记得因为自己的Asp.net基础,开学一个月做了一个仿CSDN论坛的XmlForums。先是分析过CSDN的一些数据,研究了它的一些结构,然后尝试自己开发。最终做出来一个能使用的,并找了我的几个朋友帮我测试,比较稳定,虽然功能不是很强。准备做成中心的官方论坛,部署的时候发现学院服务器.net framework是1.0的,我的是1.1,服务器是不能乱升级的,所以也就作罢了。
04年09月的时候,卡迪江还提出想做个J2ME的手机课程表下载。我一个人花了两天时间做完。当时Java一点不会,边学边做。不过毕竟没有做嵌入式经验,所以导致只能在电脑端的手机模拟器上运行,没有在真机器上试验。最后写完发现被人拿去演示,并归为己有。
到了04年11月份,帮助02级的一位(未经过同意,不在此署名)学长一起做了个基于用户行为的第二代浏览器。院一老师指导的,名字很酷,不过其实并没有多少技术含量。只是为了参加校攀登杯而做的,玩了些专业概念,弄了些很专业的名词写了篇论文最后是获了二等奖。我一向严重反对在科研上作假的事情,这次是无意上了贼船,一开始真想做个有突破性的东西,不过后来发现太难了,不可能一个月,两个月能弄出来。如开始所说,是帮助。还好我并没有实际参与到论文拟写过程,只是负责写了URL过滤、分类算法,所以并不算在我的编程历史上留下什么黑点……。这个程序是Delphi写的,因为我以前学过Pascal,所以上手很快。多说一句,希望大家不要对这位学长有所误会,这位学长是个很好的人,对我也有很大帮助,而且他学习也很可苦,编程水平也很高,为了比赛弄点高深的知识来震撼评委也还是可以理解的。
04年底,因为是学生会的小头目,所以给学生会无偿作了个校园文化网站,跟cloud合作的。她做网站美工,我做后台程序。她漂亮的前台将我简陋的后台装饰得很好。:),然后挂在中心服务器上跑了一段时间。在05年的时候随着中心服务器的被黑,也就灰飞云散了。后来在06年的时候,下一届学生会又把这个网站原封不动的挂上去了,现在还可以通过软件学院校园文化网站看到现在已经彻底看不到了。
04年10月,跟Jay、Jerry合作电子阅读器。当时加入的心态主要是觉得嵌入式没有研究过,想学学东西。三个人很努力的做了很久,到05年上半年才结束。我主要是写了大部分底层无关的逻辑代码。我们面对和解决了很多很难的问题,度过了快乐和紧张的半年。并做出了一个像模像样的东西,虽然还有一些小问题在里面。只是因为拖得太久了,我自身对嵌入式的兴趣也很少了,Jerry可能也没有什么激情了,做完也就这么完了。而我的大二也就如此过去了。
大二下学期期末,中心改组,我做了创新实践中心的技术部部长,管理的事情渐渐多了,很少能照出大块的时间专心于我的编程水平的进步。
大二下学期的暑假接了学院的宿舍楼管理系统,程序都写完了,不过后勤要求有个实时的图形界面。(各个楼层、房间等的平面图和信息的绑定),我去本部考察的时候,发现他们用Flash做的,-_-#,我蹩脚地用C#GDI+画着平面图,终于我还是崩溃了,图形设计比我想象的难很多,这个项目也就不了了之了。很是遗憾,不过也给我让我吸取了教训,让我开始膨胀的自信心和自以为是的编程能力开始反省和客观评价。
大三上学期的时候中心给信息中心做校园网平台的项目中的机房管理子系统,信息中心的李雅杰老师牵头,我、Jerry、WAKU、Brooklyn、华景煜五个人做,我做程序框架设计和逻辑部分代码编写;WAKU写界面;Brooklyn写数据操作和测试;Jerry和华景煜作数据库。做了一个学期,不过由于自身对项目需求没有确切了解,不切实际、双方出发点的不同等等原因,最终也还是不了了之了。
说完做的项目,说说上课与学习,面向对象C++我们是马瑞新老师上的,他偏重于OO语法,对思想讲得甚少,加之我大一上过曾老师的课,所以他的课上基本都在睡觉;现在想想,觉得挺不对了,毕竟人家是老师,我那么做太不尊重老师了。数据结构是蒋光远老师上的,讲得比较让人郁闷,以前也自学过,所以也是睡觉了…;最近学的于红老师的Java课我也是在睡觉,因为我看书比她讲得快~~。大学以来跟编程有关的课,我听过的有两门,一门是于红老师讲的VC/MFC,大三下学期学的,因为不会,所以认真听了。还有一门是大三上学期的曾葆青老师的计算机图形学,虽然叫做图形学,其实很多东西就是VC,学到了很多很多东西、思想。我认真做了他所有的作业,并将每次作业、课上讨论整理放在网上,本年级访问我的帖子的流量有两千多。这们图形学也是唯一一门他教过的课程,很多细节依然历历在目。还有一门数据库原理,虽然不是讲编程的,不过最后有一个大作业,我用C#写了个N层结构的MIS系统,个人比较满意,而且学到了很多东西。
然后再说说数模,数模比赛里面,我主要负责的依然是我的老本行,编程。校和全国的比赛完全用C++搞定,后来觉得光用C++做数模有点太说不过去,就在大三寒假学了Matlab,并在寒假参加的国际数模中算了两个公式。值得一提的是,国际数模中,我主要用的还是C++,第二天晚上一晚上猛写了2000+行代码,模拟了我们当时提出的4种调度算法,给出200组数据,然后再用Matlab将数据做成一张图表。贴在论文里面。唉,一个晚上啊,就一张图,为了小组的利益忍了。
我在大三下学期通过侯捷的《STL源码剖析》,研究了STL源码,C++功力精进不少。不过侯捷的东西还是很让人难以读懂,可能是文化背景不同吧。
最后以百度之星的比赛结束故事,因为它是故事发展到现在我最后一个写的程序。上周末参加百度之星初赛,写了整整10个小时的程序,虽然能不能进复赛还是个未知数,但是很久没有这么高强度的写程序了,也很久没有这么开心过了。我一直在寻找的就是那种感觉。昨天辞去了中心的职务,变成了一个真正的平民,感觉如此的轻松和惬意,准备开始重新开始我的新的编程五年。
总结一下:除去大一下学期荒废了之外,大学的两年半之内还是很认真地编程、学习了。大学期间共计写了代码约:28000行。以下为详细数据,所有代码我的电脑上都有,是实际的统计数据,但为了计算方便,一些做了舍入,结果只会少,不会多。大一做的网站模块:1000行;大二的XmlForums:2000行;学生会网站:1000行;给后勤、信息中心写的两个夭折的项目:3000行;电子阅读器:1500行;大学期间C++学习代码200行左右的写过80个;C#试验:200行左右写过10个;400行的写过5个;数据结构:200行左右的写过10个;OO思想实践代码:500行的写过4个。数据库大作业:2000行。MVC模型试验:1500行。数模:2400行;C#小程序:1000行的写过两个。
加上小学、中学的代码,一共50000行。绝大部分程序在我硬盘中都还能看到。恩,我的确有专门凑整数,不过五万行跟我实际编程量不会差很多,而且这个数字只会比实际的少,不会多。
加上小学、中学学的时间,一共是五年。很久了,也不算太久。对于我,只是一个开始。(未完待续)

…呃,是待续,还会有(五),故事讲完了,总是要上升思想高度,总结个什么中心思想的。这个下次说。

编程五年(三)

大一到现在故事比较长,估计要分几次讲完。这次不是从大一讲起,而是从高三的假期开始。
由于高一高二上课总是睡觉,到了高三才开始恶补已经为时已晚,尤其是像英语、物理这样要求长期积累的课程。从小到大一直都是随着性子来,喜欢学什么就学什么,不喜欢就不学,导致一直很偏科,这也终于在高考的时候终于体现出来。严重的偏科只能使得我沦落在大连理工。当父母大摆筵宴庆祝我考上重点大学的时候,我很清楚的知道这里并不是我所向往的地方。我说“沦为”一定会有很多人觉得不爽,我并没有觉得大连理工不好,只是它还不是足够的好,足够到让我满意;大连理工有很多比我强的人,但是不是足够的多。我想在更好的环境求学,但我不想给父母负担,考上了就来吧,毕竟专业还是自己喜欢的。当时报志愿第一填的是软件工程,第二是数学系,第三是建筑艺术系。等录取之后才知道,这三个院系的分数线跟我报的正好相反……。
高三暑假,拿到通知书后,便去了书店买了本Lippman写的《Essential C++》中文版,侯捷译。看了一章觉得很拗口,内容组织也很差(也不知道是他们两个谁差),以至于后来很少再碰Lippman和侯捷的著作。又因为那时是假期,我也有女朋友,所以一直没有什么心思学习,那本书也就成了摆设。
9月,顺利到了大连。开始了大学的生活,当我充满斗志的开始新生活的时候,前女友离开了我。我很伤心,天天跟同学去网吧玩魔兽来麻痹自己。很快就将学业荒废了一个学期。那时本部创新院我连听都没有听过,不然应该能进去,挺遗憾的,他们也该觉得挺遗憾的:)。
直到大一的下学期,我读了读者上一篇《爱情大转移》爱的目标大位移》才开始振作,或者说,开始通过学习、工作让自己变得很忙,来麻痹自己。大一下学期开始上C++课程了,教材发下来后,我破天荒地上了两个晚上的自习(上大学以来头一次),把发下来的教材看完了。可能是因为以前有底子,看起来不很费力,一天将C++过程部分看完,一天看完面向对象部分。虽然很多细节不清楚,面向对象思想也没有,但是用C++编写面向过程的程序已经没有什么问题。
没多久就开始上课,任课老师是软件学院都熟悉的Ma Ruixin老师。虽然感觉他人挺好,不过讲课讲得一般,看得出来他对C++也不甚了解(果然后来他改讲.Net C#了),而且内容我也都会,所以每次去了都坐最后一排看闲书。看哪本闲书呢?Scott Meyers的《Effective C++》第二版,英文版。它对我很有意义,我的第一次C++水平飞跃就是因为它还有后面提到的曾老师。看了它,我才知道原来C++是这么用的。我的读的第一本英文原版书也是它。当时自己英文水平烂得很,所以同时借了本第一版的中文版对照阅读,两版内容有一些不同,中英排版也有一些不同,所以看得让人很郁闷,不过还是硬着头皮看完了,那本书一共看了一个月,每天只要有闲时就看,所以一个月很长了。本部图书馆里面唯一一本从头到尾都看完的《Effective C++》就是我看的,那本很好找,因为其他的书都是全新的或者只有前几页是旧的,只有我看得那本有零星的铅笔作的笔记(在书上写东西可是违反校规的行为,大家勿学!我也在反省~)。
C++学习过程中,钱能的C++教程也让我学到不少东西。中学之前是研究算法和语法,大一才开始明白内存在编程中的地位和含义。C++期中考试全年级第一,也就算开始出名了。我还做过级队报编辑,负责专业课板块,写过《小然谈编程》系列,不过出了两期,学校不给钱印,也就停了。
下半学期开设了交响乐欣赏课程,我开始逃课跟02级听曾葆青老师的OO(面向对象)C++,虽然我去的时候课程已经讲到virtual function了,不过还好OO的语法我已经基本都会了,曾老师课上得几个例子(ATM、龟兔赛跑)对我学习OO思想起了很大的作用,还有他讲课时的风趣幽默的风格、以及讲课中处处体现他深邃的思想和丰富的经验都给了我很深的印象。在他的课上能学到好多语言之外的东西。虽然只上过3、4节课,但他对我的影响非常深远。
还有一件很重要的事情发生在大一,准确说是在04年03月28日,我进入了科技实践基地(也就是后来的创新中心),当时是卡迪江负责,收进来人负责软件学院网站维护和在开发工作。那时,我开始了学习.net之路。先学的是Asp.net连个数据库阿,做些界面元素阿。学了段asp.net之后,又开始学习C#Win窗体编程。Wrox系列的红皮书看了十多本,不过大多是停于语法和一些特性的使用。对.net底层原理了解甚少。那个时候我一直认识是大学以来学习最快的时候,每天都在拼命的看书,从图书馆借,在寝室看,然后到基地实践。
后来马瑞新老师说暑假做个.net的项目,口岸物流的,我毛遂自荐加入。当时项目里面全是研究生,只有我一个本科生,还是一年级……。大二开始正式做,不过没有做多久我就退出了,跟研究生没法交流,而且自己水平也还有限。听说后来这个项目也没有做下去,那些研究生们也就混了个毕业论文不了了之了。
接着,大二搬家了……

编程五年(二)

这次写中学时期的编程学习历程。
考中学没有费什么事就轻松考上了。上了中学发现同班同学中有以前跟我一起学编程的刘晓亚。并在初中二年级的时候,家里给我买了我的第一台电脑。联想台式机。一万的价格(PII CPU+32M内存+3G硬盘……)。不过买回来以后我可没有用来编程。我只是用来玩游戏了,在玩的过程中也开始从感性角度了解了电脑,最开始我连硬盘和内存都分不清楚,慢慢的俨然一个电脑小高手。玩了一年,上了初三,迫于升学压力,妈妈又禁止我动电脑了。等顺利升入高中之后,电脑又重新归我了,高一赶上学校搞得“研究性学习”,我开始接触一些办公软件,作图软件等等,并尝试自学3DS Max,未果(你看机器配置就知道肯定未果了……)。高一的时候,还认识了一个计算机老师叫张鹏华。虽然他并没有教我们什么编程技巧,不过跟他在一起做研究性课题的时候,还是学到了很多电脑文化,在一定程度上打开了我的眼界并度过了很多快乐的时光(比如说他教我们MMX读做妈妈叉,PPT读做泡泡糖……)。我的上一个Space的名字SingSongForYou就是为了纪念他,而取自他原来的邮箱ID。听说他前几年去了北京,做了程序员,呵呵,祝他好运!

高二上学期的时候遇到了学校剩下的唯一的计算机老师付红燕老师。说句实话她的计算机水平并不如我,不过她依然是我的老师,我依然很尊重她。而且是她组织我们参加了NOI(全国大学生信息学奥林匹克竞赛),那时我跟刘晓亚参加了,我们也是在那个时候才开始真正熟悉了。高二上学期,我吸取上次NOI考试的教训,开始自学Pascal语言(因为语法优美、面向过程、运行速度快),接触了程序函数的相关概念,当时也疯写了一段时间的Pascal代码;并买了《离散数学》和《数据结构与算法》自学。那段日子很苦,除了高中的学习压力还要额外学东西。记得当时的体育课是自由活动,男生全部在外面玩篮球或者玩乒乓球,女生有一些也出去玩,玩什么我就不知道了,有一些女生在教室不愿出去。因为学算法的关系,我基本体育课也不出去,只有我一个男生坐在角落里面学习,她们则在教室里面疯玩、聊天。感觉很尴尬,真想冲出去,不过一直忍着,我需要学习。周末还要去上NOI比赛的备战班,一学就是一天。
到了年底,比赛终于开始了,4道题,之前只研究算法,居然不会读写文件,所以3、4题从文件中读数据的题目只好放弃了……{-_-#},前两题都做了。最后阅卷人运行程序的时候,第一题顺利通过,第二题前几个测试数据也通过了,最后一个运行后没有出来结果。我说“算了吧,可能是程序不行。”老师居然安慰我说:“没事,再等等……,你的算法是对的。”我说:“是我水平不行,算了吧,已经超时了。”所以最后老师终止了程序。因为我用的是递归而在规定时间没有出来结果,如果用非递归(人工实现堆栈调用)效率会快很多,就能算出结果了。很可惜,不过也没有办法,说明还是我的水平不到家。最终我拿了个省二等奖(省第12名),无缘晋级全国联赛。

比赛之后,因为以前的QBasic功底,学了点VB6编程,又通过付老师向学校借了本VB6的书开始自学,理解了诸如事件驱动的含义、控件等等。并做了一些小程序,现在还记得的是Click Me,猜数字等等,现在他们还躺在我的硬盘中。等到了下半学期,我的VB已经玩得很顺了(恩,是玩,还开发不了大程序),于是开发了一个计算器程序,并取了个很狂的名字“算遍天下”。一直做到0.4.4版左右。各种科学计算、进制转化、单位换算……,功能还是很强大的。当时很认真,把写完的程序打印出来,然后上课没事的时候拿出来研究研究,优化优化,反反复复写了N多个版本,并写了非常详细的注释。我现在的自认为比较良好的编程风格就是从那个时候开始的。随着“算遍天下”的完成,我也进入了高三,待遇与初三一样,一年不碰电脑……。于是我的编程之旅便再一次停滞了。

现在回头想想,如果我最初学的是C,可能我在高中的时候就能更早的接触C++了,会VC了。不会像现在一样还是VC入门阶段。当最开始教Basic的时候,就注定了我与Basic语言大系的不解之缘。高中的时候,因为计算机特长,在学校也算是小有名气了。更重要的是结识了很多志同道合的朋友,虽然他们中不是所有都在学编程,不过仍然能互相学习。张谦,永远比我快几拍,我总能从他身上学到好多东西,比如他高一用Baidu搜索mp3,我快高三才知道Baidu是个什么玩艺;刘晓亚,我们有相同的学习经历,总能在一起讨论有趣的问题,不过他比我聪明很多,现在在南京大学学软件,我们很久没有联系了,挺怀念跟他一起聊天的时光,不知道他近况如何。

高中时候,我在算法理论上有了些进步,但个人感觉不大。学VB的时候也没有抓住什么要领,过于钻于细节和满足于写出个小程序的成就感而迷失了方向,止步不前。不过在这个过程中,还是极大的锻炼了自己的自学能力和查资料的能力(高二的时候已经抱着MSDN猛看了……)。
细数编程的时间,只有一年而已。算算写的程序,Pascal的算法程序写过几十个,每个200行,约30*200=6000;计算器代码长度算过,是2000行,来回反复重写,所以总计约写了2000*2=4000行;其他的VB程序杂七杂八保存至今的写了也有2000行左右。共计约是12000行。(未完待续)

编程五年(一)

说明:最近学校网络一直很烂,上不了Space,所以托小郭同学代为更新。内容是我写的,不过没法编辑格式,等我能登陆了再行修改。另外,本文有一些编程的专业词汇,看不懂没太大关系,能看懂大概思路就好。
那天学习太累了,便计算起自己编程已经有多少年,写过多少行代码了。虽然我是从小学就开始学习编程,但中间还是荒废了很多的时间。以实际学习编程的时间来算,已经5年了;估算写过的程序和项目,已经写了五万行了。按照中国的传统,逢五一小庆,逢十一大庆。所以写此文以做“小庆”。
第一次接触计算机是在1994年(我小学三年级下学期),太原少年宫的计算机班,讲的是BASIC,可惜我去的时候课程已经开了大半,听了几节,不过什么也听不懂,一个月后,老师选拔能听懂的继续教课——内容是五笔打字(居然要先会编程然后才能学五笔……)。我就顺利被淘汰了。
1995年下半年,在我小学四年级暑假的时候妈妈给我报了学校的计算机班开始学习计算机,记得面试的时候老师问:“你会英文字母么?”(现在想想真幼稚……),刚好我前段时间妈妈教过我,我就一个一个背出来,然后就顺利地进入了计算机班。
班上一个人一台286/386那样的电脑(用5寸盘软启动那种,我现在家里面还有几张如古董般的五寸盘。)先讲了一个月的五笔字型,当时就不怎么熟练,后来因为家里面一直没有电脑,所以五笔字型也就淡忘了,到现在我都是在用拼音打字。一个月后,学校的计算机班开始讲编程。恩,还是QBasic,我还记得我学的第一条语句是“LET X = 1”意思是将1赋值给x变量。从此我就踏上了一条编程的不归路,直到现在。
记得课程先由学校内部的杨老师讲了一个月,后来换了外面请来的史老师讲。杨老师和史老师都是大约二十多岁的年轻女老师。杨老师的样子已经记不得了,史老师的模样还能依稀记得,长得很清秀。课程又讲了几节课,内容很慢,很简单,现在看也就只是顺序结构的程序和输出指令,每次我都很轻易的做对。有一天史老师看了我的程序,然后对我说:“恩,除了有点小毛病,程序整体思路写得不错,你是不是觉得这里讲得很慢?”我说:“恩,是讲得挺慢的。”史老师说:“那你下周直接来我家上课吧。”
于是我开始每个周末(这时,小学五年级已经开学了)在太原市四中里面史老师家的小班上课。这个班小到只有5~6个人。大家在史老师不大的小屋子里面上课,没有电脑,每个人一个小本,一只笔。去的时候发现这个小班早就存在,都是史老师在各个学校教编程时找到的比较聪明的孩子,而且史老师已经把循环讲完了。于是我得边跟着学,自个还得补漏的。好在是小班,有什么问题都能很快得到详尽的、针对性强的解答,老师会手把手教会每一个细节。一个月后我就成了小班写程序最快、正确性最高的学生了。史老师组织我们买了5本装的《信息学(计算机)奥林匹克》,那是我的第一套正规读物,保存至今,现在我寝室的书架子上还放着第五本《高级本》。我们开始学习上面的内容。后来史老师结婚搬家,我们几个就去她的新家学习,小班人因为跟不上或者个人原因越来越少最后只剩下3个人。
再后来到了五年级下半学期可能是因为史老师觉得学费有些太少了(一人一个月交50元),所以又开设了一个比较大的班,大约20多人,周末的时候在一所中学的教室上课。我依然是班上数一数二的老师得意门生,有几次老师收学费的时候,我递给她钱,她走到我身边,悄悄把钱还给我,并小声对我说:“你的学费不用交了。”现在想想,可能是因为老师觉得我是他的得意门生吧?在班上,我还认识了一个人——刘晓亚,这个下次再提。
后来,上了六年级,学了一小段时间后因为要准备考初中,然后妈妈就没有让我再学编程了,等再碰它的时候,已经是高中了……。很怀念很感谢史老师,没有她,我也就不会走上这条路。高中毕业的时候曾跟刘晓亚想去看她,但是没有找到她。等以后有机会一定要去看她,并非常非常的感谢她!
回头想想,不得不承认我有学编程的天赋,学的一直很快,逻辑算法部分大部分都是小学时学的(也就是说我的算法水平其实一直没有什么长进。惭愧啊!)。我到现在都很佩服当时的我,看一段程序,马上就能背下来,不是刻意的,只是很自然的。有时候很多代码我并不一定理解,但是看一次之后在纸上就能一字不差的复写下来。这样大量的代码积累对我后来的编程也是大有裨益的。
除了最开始的两个月碰过电脑之外,其他时间都是在纸上写的。看到一道题目,先想思路,然后写在本子上,再然后自己在脑子里面调试,最后交给老师,老师在脑子里再调试一次……。环境很艰苦,但是这样做也极大的锻炼了我的逻辑思维能力和调试能力。这也可能就是为什么我的代码写出来比一般的人(当然有很多高手写出来的比我强得多)的精炼、逻辑严谨,bug少的原因吧?到现在我家里面还有5, 6本当时写的程序。没有一个真正运行过。
小学阶段一共学了一年半左右的时间(三年级一个月+四年级假期两个月+五年级一年),这一年半的时间里面学习的都是BASIC,不是现在的VB/VB.net大系,是那种需要写行号,没有缩进,没有函数,充满了GOTO语句的代码,所以我觉得我的逻辑思维能力也是在这种恶劣的环境下生存并一点一点磨练出来的。在这一年半的时间里面,保守估计一下,按照5个笔记本*每本100页*每页20行=10000行代码。恩,在这一年半的时间里面,至少写了一万行代码。(未完待续)

关于我的小测试-你了解我么?

学校的破网啥也不说了,坏的时候比好的时候多。今天终于可以上Space了。赶快发一篇。前些天找到个网址可以自己出题给别人做。所以我给大家出两份,如果有兴趣的可以做做看。每份10道题,四选一。每人限答一次,提交时填个我一眼能看出来是谁的名字。凡是不认识的ID一律删除。一个人答多次,取分数最低的一次。题目一旦放上去,就不会更改,当然可能会有所添加。

点击链接进入答题环节:

独孤然的了解程度测试

独孤然的爱情测试

注意,测试不是目的,更好的了解我才是目的。所以,我把题目、答案公布,并附带我对选项的评论。强烈建议在做之前不要看答案。

答案及讲解:

阅读全文 »

页码: 1 2 下一页