代码改变世界

平凡不愿平庸,两年的编程心路

2010-06-06 21:28  撞破南墙  阅读(9580)  评论(78编辑  收藏  举报

我现在是大学二年级的学生。即将到达大三。

         我写这篇文章没有别的意思。只是最近的一次思想震动非常之大。想总结一下自己的经历和心路历程。希望给后来者一个参考。特别是像我一样在一个普通的大学。没有很强大的师资,没有老师在课堂上 SICP,没有很好的技术氛围,大多数机会都得靠自己争取,自己努力。

         但是我们对计算机狂热,希望成为下一个比尔盖茨或者Linus Torvalds,如果你也有同感,或者通过我的分享有所收获那么我就很高兴了。

 

1不得其门入

      和大多数刚进大学的新生一样,幻想能在大学这个新的起点上,崭露头角,成为一代牛人。为自己定制了很多计划,策划了自己的大学生活,尽管很多都夭折了。大一的上个学期整个就傻傻的老老实实的学C语言,用一个画图的类库graphics.h 。写了一个很古老的开车游戏。后来那个游戏在换硬盘的时候丢失了。那时候真的不知道自己能做什么。有力却不知道往哪里使,胡乱的看了很多书,比如VB,VBscript,很多黑客的书(特迷这个),计算机网络,但是很多只是test,demo没有实战,也没有交流,又由于进了几个社团的职务,忙着班干和学习的事,很苦闷学习没有什么进展。值得庆幸的是把C语言课本上的知识都尽力掌握好。因为我一开始就想学好计算机编程。我觉得那时候最需要的就是有个人来告诉我,如何成为一个很牛的程序员。

他应该要建议我:

1 培养能力。学习知识的能力,思考的能力等。(他们属于所谓的 元知识 第7小节)

2 学好基础的课程。比如计算机网络,数据结构等等。(他们基本涵盖了整个编程世界各种华丽的高层建筑的必须要了解的基础。)

3 特别要学好算法。算法(Algorithm)是一系列解决问题的清晰指令。我自己觉得编程如果没有了算法和设计模式,那就真的是码代码。

我记得第一次在班里做自我介绍的时候说,我是一个“电脑狂人”,同样另外一个人也说过这样的话,后来,我们两个就真的是班里和年级里编程比较厉害的两个人。

 

2另一个世界

  大一下学期我们进了学院的“基地”,是学院弄的一个大教室,自己搬电脑进去,在里面不定期开设培训班,平时就自己在里面学习。由于水电网费空调都不要钱,我们现在还享受其中。在那年的清明前后,我们分花了一周学习html,css,第二周学习c# 语言和ASP.NET,整个下来,经过痛苦的开始的学习阶段,我们终于能拿别人的CMS 科讯什么的,去做一个动态的网站,还会自己学数据库链接,还封装成了类。现在发现好多人还把连数据库写在 .cs 一个 Button事件里觉得无语。不管我们当时做的有多么陋,感谢基地提供了那么好的机会,让我们终于打开了编程世界的大门。我们突然发现一切原来如此简单,不就是增删查改吗?几个sql语句就搞定了,返回来数据绑定就好了。然后再学习一下几个内置对象Session cookie 什么的,不懂的百度 谷歌就解决了。当时真的觉得很。感觉自己想要什么效果都可以搞定。那时我为我们学校做了一个学校的公用房查询系统,特别是其中用到的excel导入数据库,大大的解放了生产力,让我切身的认识到计算机是多么的伟大。。

     迷茫1语言的选择

    那时候我们还了解到了PHP和java,那两个我都有接触,当时的LAMP组合确实给我们非常大的诱惑。整套的开源,极低的企业成本,而且是可以去看源代码。还有java也是 J2EE+Linux 也是一套开源。如果说php的应用范围相对比较窄,那么java则是更大的诱惑,我另外一个同学就在那时候转去了java阵营。当是他考虑的应该是.NET的封装太厉害了,不开源,而且一个ASP.NET页面很多的乱码(指的是viewstate 其实可以自定义的).就我个人来说,当时没选PHP是因为他的范围窄了仅限web, php是脚本语言被迫“开源” 。在java和.NET的选择的时候,只是因为学java没有服务器让我架设,外面也多少PHP的,校内托管的服务器也是不支持JSP的网站的。我希望自己的东西能够被应用就用了ASP.NET+Access的组合做东西。我是实用主义,实践者。

     如果时光倒流,我会这样考虑问题,

1选择技术,要参考技术的公司。Delphi就是一个很好的例子,下一个是java,也许下一个是.NET,而谷歌会成为下一代的MS,但现在来说MS还是很强势而且会强势足够久。足够久就够了,以后管他呢。而C#和MS确实也是蛮有创新的能力,频繁的更新多多少少了证明了些。

2关注并学习一下动态语言的“动态”,比如JavaScript,ruby 什么的。否则真的会井底之蛙。

3不要花过多的时间在语言的选择上,只有在深入的实践后才会真正知道什么好什么不好。

    迷茫2我们无所不能吗

    想要什么效果?在线编辑?上传下载?xml?Ajax?没问题。等等我去百度。我想很多人经历过这个阶段。

我们经历这个阶段是有历史原因的:

 1我们没有可以指导我们的老师,我们的辅导员不是计算机专业的,我们的计算机专业老师都是只管好自己一亩三分地,自己的不做项目,也不是TRUE程序员,他们只是教课的老师。

2我们的狂妄也是因为生活在自己的小圈子,没有接触到国内的技术社区,只是知道做东西。为了技术而技术追求更好的设计模式(不管他是否真的必要),追求更大的灵活和性能(多数据库其实有时候根本没必要,滥用存储过程)。

但是很多东西我都没有很多的思考,只是知道copy这段代码,这个类就可以解决了,其实自己并未理解。很多只是知道what,而不知道who更别说why

一句话,对技术的理解太肤浅也太浮躁了。

 如果时光倒流,我想我会学得更扎实,设定一个技术的底线,比如学前台只需要学到 html+css,而不是用Dreamweaver设计。 C#学到IL就好了。学知识要先知道他是什么WHAT,然后是HOW他为什么是这样,最后是why。曾经看到过博客,牛人的学东西往往喜欢看书、文档,而新手则喜欢看视频和实例。停留在只知道几个函数的调用上,吹捧几个技术词汇,了解也仅限于封装好的调用常常会让人空虚,很空虚。

 

3寻找自我

      大二的上学期开始接手做一个社团的会长和一个部长还有一个公益组织的成员(负责网站等技术),开学,招新,无尽的开会。有那么一两个月很少写代码,由于之前认为coding is just so so,另外按照自己的计划,大二我要训练自己学会做团队管理的东西,那段时间我在完善了一个档案管理系统。是之前暑假的时候做的,用到了我那时候接触到的最“前”,最炫的技术,那时候我用了很多存储过程,Ajax,动态反射工厂,其实很多根本没必要。一两个月之后,带社团也带的比较累了。在学校其他的一些组织也做的很累了。

    (从学管理转回技术)  

    我也领悟到了,技术是我的根本,技术是我的核心竞争力。即时我要用技术做跳板或者其他,我也要把技术学的更好,得到更多的机会。

开始渐渐放手让新生做一些事。终于空出了手做自己的事。这时候我开始帮学校的校办做一个网站,由于之前的CMS网站是用别人的CMS,真的是怕了那些BUG。于是着手自己写了一个经典3层的ASP.NET+ACCESS的系统,不为别的就为自己用着方便,想添加什么功能自己动手,就算出错,自己也知道在哪出的错。用ACCESS是为了数据库的方便,如果以后在外面的服务器的话也不用买sql数据库,省钱。完全没有采用Ajax,不必要。界面倒是请了个美工,设计的非常漂亮。

      这个时候,我觉得自己比以前成熟了,呵呵,感觉实用主义还是不错的。只是我的技术相对落后了好多。我那时候还没理解MVC。没有用O/R,不理解

AOP,IOC。

         我开始思考以后的路应该怎么走。一个学期就这样过去了。那时候我想我继续我的黑客 梦,我觉得那样很酷,不想一直做网站系统那么无聊乏味,而且会很有钱,但是有风险。我本来决定了花几个月的时间学习汇编,做木马,外挂,破解。整个寒假很多时间我都花在从0开始学16位汇编,用的是王爽的那本,下载很多破解的视频。经常混看雪。我那时候想的是通过学习那些技术去赚钱,而且够底层。而最后改变我的是开复自传告诉我的,

         谷歌的有一句话是不作恶,后来我听说华为也有一句话叫小胜靠智,大胜靠德

         我放弃了自己的决定。先做人再做事。开始转会web开发。回到我原定的计划。

         (从学hack转回web开发) 

         大二的下学期来了我开始认真的混迹博客园,我觉得这是成长非常快的一段时期,接受了很多的言论和思想。迎来了新的技术迷茫期,特别的迷恋技术的堆砌,比如多框架的整合,什么spring.net,nhibbernate.等等,就特别崇拜。就像ASP ->webform->mvc的轮回一样。我开始回到崇拜技术的时期了。特别

是用了mvc框架发现原来一切变得如此简单,居然可以从页面接收对象,然后一个updatemode就搞定了更新,linq让世界变得如此简单,那段时间我简直疯了。一下子接收了那么多提高开发效率的东西真的太兴奋了,你可以想象我直接做档案管理系统的时候几十个字段的接收,赋值,验证,sql语句,想想都让人发疯。开学的时候我们接了一个主要是cms的网站。这时候我用MVC+Linq做的后台。之后要帮做一个东西,我疯了似的用上了WPF+AEF。现学现卖。现在想想都让人头大。当时还计划学dynamic data 。。后来耽误了,到现在都没学了。

         (专注就是强大,深入才会了解)

        慢慢了解到。要做什么就要做到极致,技术服务于产品,客户关注的产品而不管技术,半吊子的产品没有一点价值。做cms就做到自己的极致,于是在做完那个cms之后,我开始用了一个月把自己想法进行优化。那时候我也开始觉得开始认真写博客。于是又了一个系列效率CMS的博客文章。优化之后,真的也是确实大大的提升了效率,维护也变得更简单云云。。

         在专注的深入过程我深深的感觉到自己对c#,.NET的了解是如此的浅薄,这些在博客中都有提及到。几乎是重学了linq和泛型等。到现在还不敢说自己真的会了。于是开始看一些比较深入的书比如c#高级编程。想看IL的书。

 

4Web开发是世界的全部吗?

       答案当然是NO,那天,我在闪存里说“[life]重新认识了什么是编程,什么是程序员。

       缘由就是那天我和我们学院的老师交流了一下。他见我们一直在做web开发。建议我们多研究一些算法。多做一些相对更通用,更算法的学习。建议我们多学习一下相对底层 通用的东西 和更好东西。比如STL BOOST ACE(??听音是这个念)。如果我们要学习编程为什么不找最好的类库。而C++是c#和java的根源。c++就是这么一个宝库。不管是设计模式,算法他的类库做的都是最好的。而我们的c#和java完全封装了这些算法。我们平时编程没办法了解到他们的细节。(而这些我认为也是我们需要了解的。)而我也从《代码之美》的序1看到未来的编程世界是整合的世界。我们也是走整合之路(对我们新手做web开发这几乎是必然的),但我们更应该保持创新和对算法的敏锐

他做了一个很好的比喻。一开始大家的资质都一样,只是由于我们选的方向不同(有的做算法等的研究,有的做高度封装的应用),

 就好像上坡一样,有的是成60°的坡,有的是30°的坡,开始的时候差不多,过了十年八年,高度就相差太远。          

          怎么说呢。很多话无法一一赘述。我感觉和老师的交流,为我点亮了什么是一个真正的程序员该做的。虽然即使没有他,我也在一步一步的逼近,但是一下子点亮,省去了我多少的探索。感谢分享者。不管是老师还是博主。而我希望把这把火继续传递下去。

         而我跟老徐大哥交流,他也说这是必须的。老赵书托 托的书也是很多都是这个意思。

        我写这篇文章没有别的意思。只是最近的一次思想震动非常之大。想总结一下自己的经历和心路历程。希望给后来者一个参考。特别是像我一样在一个普通的大学。没有很强大的师资,没有老师在课堂上 SICP,没有很好的技术氛围,大多数机会都得靠自己争取,自己努力。

              但是我们对计算机狂热,希望成为下一个比尔盖茨或者Linus Torvalds,如果你也有同感,或者通过我的分享有所收获那么我就很高兴了。

 

另外让我来给新手们推荐几个博客吧。

刘未鹏 | Mind Hacks 和他的 TopLanguage 论坛。

老赵点滴 - 追求编程之美

 

如果你觉得不够的话,那么你就通过他们的网站去寻找他们的朋友。牛人都是聚集的。