写于:2013年12月2日23:59:09
晚上正在和网友讨论南阳OJ的时候,忽然一个高中同学告诉我说,明天就是我生日了。我一查,真的是诶☺
忽然之间心里面感到一阵感动。我都忘了自己的生日是什么时候了,没想到还有人记得这么准确。然后马上拿起电话和朋友聊,直到他寝室人都催了好几遍。
但是同时心里面还有一种说不出的淡淡忧桑。已经23岁了。写代码也有一年了吧。
我还记得去年的这个时候,我还在捧着老谭的书,一个一个字的啃。那时候知道的不多,就知道能看懂老谭的书对我来说就是一种成功。那年的冬天,因为怕烤坏了电脑,我屋子里没有电暖扇,除了手上戴一副露指手套,披一件厚衣服,就没有其他的保暖措施了。但是我依然在坚持。有很多次,冻得腿都快抽筋了,我就跪在椅子上,弓着上半身继续写那些我一知半解的代码。就因为这段时间写代码的习惯,我已经改不了冬天戴露指手套的习惯了,也算是意外收获吧。
其实那时候是很羡慕那些计算机专业的朋友的。因为他们有现成的资源,不会的东西还可以问老师,有了新的见解还可以和同学交流。而我就只能捧着一本书,看着VC6上的错误提示,一行一行的百度他们的翻译。
那时候我就明白,想要赶上那些有着良好资源的人,我就只能付出比他们更多的努力。
一直到今年夏天的时候,我还在看老谭。房间里面没有空调,热的好像蒸笼一样。经常是热的实在受不了了,就干掉一瓶啤酒,甚至直接往身上泼一盆冷水,然后擦干手继续写代码。那是我最困难的时候。
说实话,我在高中不是努力的人,也许是没有找到自己喜欢的东西。当我能够脱离老谭的书本,双手在键盘上飞快的舞动,写出一个又一个属于自己的程序的时候,虽然可能只是一个排序,也可能只是一个OJ入门的A+B,但是我心里面是非常激动的。第一次为了一个目标可以坚持这么久,第一次有苦尽甘来的感觉。
当然也是有痛苦的,否则也不是我最困难的是时候了。那时候我能搞定的,也只是简单的排序一类的问题。我第一次听说的项目就是学生信息管理系统。从我开始学C,我就想要做出一个带界面的。不过在现实面前,我看清楚了自己的实力有多差。我开始明白以我的实力,做出CMD下的学生信息管理系统都是不可能的事,更何况是带界面的。那时候也真是不自量力啊。
于是我开始学JAVA,只为了做出界面,买windows程序设计,只为了能用C语言做出界面。我也开始刷各种OJ,只为了能提高编程思维。不过在现实面前,我被狠狠地嘲讽了,我也狠狠地摔倒了。每天JAVA,WIN32,OJ轮流转,得到的不是JAVA做出来的界面,也不是win32可执行程序,更加是几天没有一个OJ能AC的。有一次老师问我是怎么坚持下来写代码的,我说写不下去了,就抽根烟,一拍桌子,一踹椅子,接着干。这是我的原话,那时候我也是在失败面前这么做的。我清晰的记得,多少次在深夜,带上耳机狠狠的敲着键盘,只为了一道OJ题目能够AC。有很多次,我实在是坚持不下去了,心说休息一下吧,在床上躺一会儿就睡着了。然后我躺了一会儿,实在是受不了那种无数次的失败还是没有一个AC的感觉。愤愤的爬起来,接着写代码。甚至有一次一下子干了半斤白酒,还是睡不着,强忍着醉意继续写代码。那时候我真的理解了什么是汗水伴着泪水。因为有很多次我就是留着眼泪在敲键盘。每天扔在身后的草纸都能有两箩筐。现在想起那时候的艰辛,都不知道应该说我天真还是说我无知的好。
俗话说一分耕耘一分收获,事实证明老话都是有道理的。
经过了那段汗水伴着泪水的时期,我学到的不是JAVA,也不是怎么刷OJ题目,而是怎么去看待自己的失败,怎么看待自己的短处,怎么找到自己的优势,还有就是学会做自己能做到的事情。我从来不是那种有了想法就可以马上写出代码的人。就拿学生信息管理系统来说,一直到今年八月份,我才能独立写出来。这个小小的项目我写了五六次。每次都是一写就是一个星期。今年暑假快结束的时候,我才刚刚学完链表。于是用了是整整三天的时间,写完了一个学生信息管理系统。虽然还有缺陷,但是毕竟我能完整的写出一个程序了。等我测试完的时候,我喝了四瓶啤酒,好好醉了一次。这才是苦尽甘来啊。
到今年大三,我已经脱离了菜鸟的范畴(最后会有我对于菜鸟和高手的理解),这是事实。我以为我可以做界面了。但是JAVA不是我的方向。WIN32又太难。于是我买了QT的书,希望可以做出一个界面。理所当然的我又一次失败了。我以为我可以,其实我还差的太远。不过我并不沮丧。起码在两个月以前,我已经明白了自己应该走什么样的路。于是我把那些不适合我的书都放起来,开始认真的重新学习怎么刷OJ,怎么设计算法,怎么用伪代码和流程图描述一个算法。不过不知道是我智商太低了,还是真的没有天赋,无论多么简单的题目,我就算能AC,也要好几个小时才可以搞定。我第一次忍不住怀疑自己了。我是不是真的适合程序员这条路,为什么那么多次的努力都没有回报,为什么别人用半年的时间,就可以达到我难以望其项背的高度,为什么别人的代码就那么简洁,为什么我看不懂算法导论上最简单的插入排序,,,,那么多的为什么,我真的坚持不下去了,不论我怎么鼓励自己,我都不愿意再面对写了一天的代码,竟然还是erroranswer的提示。我暂时放弃编程了。给自己找的理由就是先学好英语和数学。每天看电影,听音乐,困了就睡,不困就喝醉了睡。
那段时间,我刻意不去想代码的事情。用酒精麻醉自己,希望可以忘掉那些烦人的代码。不过很快我发现,我早就离不开编程了。虽然一直没有AC过,但是那种十指在键盘上飞舞的感觉,太让我怀念了。有一次在睡梦中,我发现我把南阳OJ的所有题目都给十分干脆的AC了,结果一兴奋,我醒了,然后很干脆的失眠了。望着天上的明月,忍不住心里一声轻叹,终究是喜欢编程啊。
痛定思痛,认真思考了自己过去的得失,终于明白,没有良好的数据结构和算法基础,再好的想法都是空谈。认真规划了自己做第一个带界面的学生信息管理系统的学习计划。打算先把数据结构和算法学好。
把CPP和老谭重新翻出来,找回了南阳OJ账号的密码,不是一个一个挨着刷,而是先把语言入门的简单题目全部AC,虽然我现在也没有把语言入门里面的全部AC掉,但是在这一个月的时间里,我感觉我不再是以前那个只知道低头写代码的新手了。对于稍微复杂的题目,我开始先写伪代码,然后反复推敲,再上机测试。终于在AC某道题目之后,我感觉我又找回了自我。不管有没有AC,我一直在努力的写代码,不论我最后在编程上成功与否,写代码都是我这一生的兴趣。
现在的我,不再羡慕那些计算机专业的学生,我知道他们中的很多人都没有学会利用那么好的机会,其实环境还不是和我一样。
最后,我踩灭一个烟头,结束这段写代码历程的记录。我看着身边的黑暗,想着手边那么多的经典著作,我已经不再害怕,因为我已经知道自己该怎样去安排这长长的代码人生。
//我对于菜鸟和高手的理解
菜鸟:
什么是菜鸟?
我觉得菜鸟就是还在纠结语法,比如什么叫循环,什么叫函数,如何定义指针,怎样使用动态数组等等
如果没有学会最基本的语法,那肯定是菜鸟无疑。
当然我说的也只是基本语法,完全掌握C的语法,那就只有看懂C语言标准才行
这个阶段,我用了六个月
新手(菜鸟的进阶):
学会了基本语法,就可以写一些OJ题目了,比如入门里面的ASCII码排序,日期计算,如果做这些题目的时候,不再纠结于语法,而是专注于程序的流程控制,那么基本上就是新手了。总结来说,就是不会被语法错误分心,而是考虑怎样完成一个小程序
入门(专注于数据结构和算法):
等到一些基本的算法,例如排序,闰年的判断,公约数公倍数,素数这些都可以分分钟搞定的时候,其实已经不由自主的开始学数据结构和算法了。
程序=数据结构+算法
数据结构和算法是通用的
这两句话也是我现在想要做到的。
入门阶段,不再专注于语法和主函数的流程控制,函数的形参定义,而是考虑一个程序,应该用什么算法,用哪种数据结构
不过还是不能完全搞定数据结构,算法也只是模仿,而不能创新
这个阶段,也应该可以稍微脱离某一种语言。比如同样的目的,可以用C搞定,也可以用VB搞定。当然局限于比较简单的问题
简单来说,能用某种语言搞定一些稍微复杂点的问题
当然还有现实问题,比如这个时候已经可以去一些公司实习,解决一下简单的软件的模块等等
我现在就是一只脚迈进入门,一只手还拿着语法书的阶段。这是我对自己的定义。也算是我现在能力的总结
高手(入门的进阶):
毕竟我不是高手。所以我只能说一下我心中的这个阶段是怎样的
这个阶段,已经完全脱离某一种语言的限制。只要搞定了算法,用什么语言都是可以搞定问题的。
也就是说数据结构已经不再是问题的所在了。而是专注于算法设计,算法分析,从而找到最合适的算法
我觉得这个阶段,一般的OJ题目已经不在话下了。只要有时间就可以搞定
所以这个阶段除了专注于算法设计外,已经可以开始做东西了。比如做软件,搭建一个贴吧,搞一个论坛什么的
大神(我一生的追求);
到了这个阶段,眼中的程序已经不再是ASCII码的组合了。而是在和CPU对话。也就是程序即我,我即程序的境界
由于水平太低,没有办法描述 o(╯□╰)o 只能心向往之