我学编程这几年(1)

最近总想对自己的技术进行一个梳理。一直没有提笔写,今天晚上刚好有时间,就整理整理。就按时间顺序写吧:

竞赛篇

      我学编程很早,我初二第一次参加NOIP(全国信息学奥林匹克竞赛省级联赛)普及组(初中组)的比赛。当时初赛考的是一些计算机基本知识,很多东西类似大一教的计算机导论里面学到的东西,比如进制转化等等。当时老师没有通知我参加复赛,因为初赛通过就可以拿一个市级的奖励,而且我又不会编程,去参加复赛也是白去。第一次比赛就如此草草收场。但是这激励了我好好学习相关的内容。当时我的指导老师是刘卉老师,当时她听说了华师一的孙俊峰老师教的不错,于是带我去那里求学。记得第一次去的时候,刘老师请我在学校附近的“三环”餐厅吃了点东西。然后我们两个人一起走到了华师一(当时还在千家街)去上课。本来一开始自己看的是QBasic,孙老师说我们都在用Pascal,然后告诉我了很多Pascal的好处。于是我想都没想就更换了语言。这件事情对我产生了很大的影响……在此以后,我对于Basic这一系的语言基本无爱,而且在比较长的时间里面使用了Pascal,甚至后面还一度想学习Delphi……至此,我开始了竞赛型编程的道路。

      这段时间,主要学习的是算法和数据结构。初中对我来说,学习的最扎实的就是递归。当时在孙老师那里学习,前面的基础东西,比如条件、循环等都没有问题。孙老师说,一个分水岭就是递归,这让我当时很恐慌。当时用来讲课的例子是八皇后问题。当时一直不理解什么是递归,什么是深度优先搜索。但是当时孙老师教编程的方法,也就是我学编程的方法很简单,就是背。从第一个约瑟夫问题开始,到八皇后,和后面的最长不下降子序列,我都是背的。当时每周去上一到两次课,上课的时候讲点新东西,平时都是自己练习。我就在数学课上、语文课上、所有的课上背诵、默写。估计当时很多老师都觉得我在不务正业,但是谢谢老师们,没有过多的干涉。但是背诵和默写也解决不了问题。自己还是不理解DFS,那怎么办呢?太简单了,我找了一张很大的纸,然后在上面模拟。当时孙老师说,凡是计算机可以做的,在无限的时间和空间下,人都可以做。于是我就开始模拟程序的每一步,突然一下子,我好像就明白了递归,明白了DFS。这个方法后来我也经常的使用。初三的时候,我拿到了NOIP普及组一等奖。但是当时由于种种原因,没有继续学习下去。然后去弄数学竞赛和中考。一直都为这件事情感到惋惜。

      高中的时候,自恃有点基础,好高骛远。不扎扎实实的搞基本功,跑去弄网络流、图匹配、高级数据结构。当时觉得貌似学会了一个高级的东西就很NB,殊不知,当时的学会,最多只是学会了默写标称。但是由于对基本思想掌握的不牢固,在建模上简直一塌糊涂,这就导致不会运用。最后高中竞赛成绩很一般,保送进入了武汉大学。

      保送之后,自己在想,继续做竞赛还是做工程实战。当时很羡慕能写点小工具的人。但是自己明明仿佛都知道如何做小工具的原理,但是不会写界面成了让我很苦恼的意见事情。但是当时由于对高中竞赛成绩的不满,个人选择继续竞赛。相对高中,做了一些题目。但是相对其他的大神来说,我的态度还是很不端正的。最后在Dumbear和ISea两位大神的包养之下,我还是拿到了Regional的金牌。谢谢大腿们。在此之后,我果断选择了退役……机缘巧合,获得了MS的实习机会,开始了新的篇章:

玩具篇

      在MS,我承担开发了一个内部使用的小工具。或者可以说是一个微型的IDE的一部分?很感谢Balto童鞋,当时给了我足够的时间和新任。当时从头学习C#和WPF,一两周左右开始写东西。现在回头想想,当时做的简直就是一坨屎啊!而且开发的好慢,时间都用来学习如何开发了。从最初做一个页面都好费劲,到后面简单的东西可以很快的做出来,复杂的东西也知道如何找到帮助文档来完成开发。感觉自己的提高还是很明显的。

      但是由于开发经验的有限,我一直没有把我做的工程开发归结到实战里面,而是归结到了脆制玩具……希望在不久的未来能够在一线磨练自己,尽快提高的产品级的实力吧。在在微软待了小半年之后,我回到了学校。和一帮朋友做了一个金融Q&A系统的脆制玩具之后,开始了现在做的项目的开发。当时做金融Q&A系统真心是初生牛犊不怕虎,虽然没想做的真的可以用,但是现在反思一下,觉得当时的技术水平还是不够的。目前对这个系统的看法仍然和当时一致,主要分为:数据采集、问题理解、答案抽取、答案生成、反馈学习这么几块。当时开发时间很紧,没有采用机器学习的相关技术,更多的自然语言处理方面都是采用的基于语法和句子结构的分析。反馈学习方面也只有一套简单的打分系统。现在回想起来,如果重新做,应该会比当时好很多。

     后来,我保研了。负责当前这个项目的开发,最初一个Fulltime(本屌丝),一个parttime(D大神)两个人搞。后面慢慢加入了一些其他人。从最开始,我就觉得不靠谱,用户自己都不明白需求是什么,而且我们的用户貌似也不稳定……所以准备快速出原型,不断迭代。于是,我们有了第一个纯客户端版本的玩具。后来又做了一个Client的版本。再后来W童鞋加入进来,我们开始弄B/S架构的玩意。其实就是拿asp.net写个网站……一路弄过来,慢慢的尝试给团队引入StyleCop、Code Review等东西,但是都木有能够坚持下来。数据库也是完全木有事先预定,而是我随手设计一个,发现不够用了再直接删除了重新来……不过好歹我们坚持使用了SVN,做了一点版本控制……在这段时间里面,我觉得我学到的是这么几点:1.保持好的心态;2.对html、css、js、asp.net等都有了一个初步的了解;3.不挑活了,什么活都可以做;4.亲身参与、导致了很多很多的错误。

 

当初很天真的认为,在学校里面很自由,和童鞋一起试试错,提高也会很快的。但是现在发现,这样子可能会导致我们在错误里找不到出路,学了很多很杂的东西,但是自己的核心竞争力却在逐渐的消失。回想这段时间,我对于计算机科学的基础,比如:操作系统、编译原理、数据库的认知提高并不多。数据库可能还用的多一点,但是在设计的时候,如何注意几个基本范式,什么时候应该使用什么样的数据库,依然没有概念。实战啊,还是缺乏实战。同时,我对软件工程这件事情的理解,除了多了一些错误的经验之外,依然不知道什么是对的。我很想在团队里面尝试敏捷,尝试TDD。但是如何编写有效的单元测试,却一直没有得到解决。而且由于一开始代码没有单元测试,也没有注意各种设计,使得代码的耦合度太高,很难拯救了……

记得以前有人告诉过我,在小团队,你有很多的机会试错,可以承担很多的东西,可能可以成长迅速。但是在成熟的团队,你可以学会什么是对。也许你试了很多次错误,但是依然不知道什么是正确。我现在对这句话很赞同。每个人的时间都是有限的,我不想去赌是否会在不断试错中找到什么是正确(而且就目前的情况来看,这个可能性实在是太低了,因为我们承担的任务远远超出了我们的能力范围),我想去成熟的地方学习什么是正确的!

我不想再把时间花费在研究如何做一个好看的Logo或者如何引导用户找到自己的需求上,我希望我能够承担起和目前自己能力相匹配和自己兴趣相匹配的任务上。我希望能够去学习,如何写出稳定的、易读的、高效的代码,如何能够做出好用的产品,如何进行大规模的软件开发,如何去写基础架构,如何去选择数据库,如何去设计数据库,如何去选择服务端的开发架构并且实现它。

把业余时间用在看看操作系统或者数据库内核上,用在看看网络协议上,用来研究设计模式、实现模式上,而不是花在如何绕开人家的验证机制,如何让老板或者客户明白他们的想法不切实际上。这些远远超出我承受范围的东西,见鬼去吧!

转载于:https://www.cnblogs.com/hibix/archive/2013/02/27/note.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值