日期:2011-10-23  浏览次数:20459 次

  写这篇文章一方面是为了放松一下疲惫一周的自己,一方面是为了给大家介绍一下学习经历,另外申请推荐到首页,多谢啦~

  本人Linux C程序员,专注服务器程序设计与服务器架构与优化,阅读过的源码涉及lighttpd,nginx,jabberd2,memcached等,主要热衷于钻研lighttpd,apache,nginx等Web服务器的设计与实现,对其架构与设计细节具有源码级别的认识。

  苦于终日敲C语言已经变得麻木不仁,并且本人具有一定的理想与对未来创业的展望,所以不希望停留在底层编码设计阶段,希望上层建筑也得到一定的升华,从而辅佐下层建筑,从而成为一个上层与下层兼容一身的牛逼的程序员。

  正如前面所说,起初关注的是apache源码,看了几日感觉人生短暂,不能全部花费在如此庞然巨物之上,所以购买了《Apache源码剖析》,借助这本神物将Apache的prefork,worker的多进程架构与实现细节统统纳入脑中。正因为Apache的学习有些偷工减料,同时发现太多的http与 mod的用途完全不懂,于是决定以一个轻量级的源码:lighttpd展开细致的源码剖析,誓死不罢休。

  阅读源码起初并不是很艰难,因为有过memcached的源码阅读经历,所以在阅读外围代码(相对于核心代码而言)时也是如鱼得水,颇有收获。随着进入核心代码的阅读,发现非常缺乏HTTP与WEB服务器的基础知识,举步难行。

  于是,购买了《构建高性能Web站点》一书,在3天内将其阅读完毕,收获难以言喻,配合不断的百度搜索优秀博文,借助它们对HTTP协议,WEB服务器架构设计,以及整个站点的组成方面得到了很重要的突破,虽然此时并没有太多的感悟与知识串联。随着继续这样的源码阅读与搜索学习,lighttpd代码被完整的稀里糊涂的看完了,其中掠过了某些Plugin(Mod)的阅读,而且对于Plugin架构的设计还有一点源码级别的疑惑(这个问题在后来公司实习过程中结合Jabberd2和实际的开发已经彻底领悟)。

  在此之后的一段时间内,会不断的思考lighttpd源码,不断的发现问题,于是更多的去搜索与思考,回顾源码细节,重新梳理源码体系。但还是遗留了若干的疑惑,所以不得不开始nginx的代码阅读,希望从中能找到答案,当然这个源码只读了很少的一部分,主要几种在http request的parse部分和多进程工作模型与I/O部分。

  此时,对于HTTP协议的交互实现原理已经达到了一定的认识,借助《构建高性能…》一书中对http协议的详细介绍,对所有的http字段都有了较为透彻的认识。

  讲到这里,发现要说的太多,只好快速的过度到Web学习阶段。

  学Web的原因很简单,文章一开始也提到了,我想做自己的事,而最快的方法无非是移动终端或者Web应用,而Web应用在PC端和移动终端都可以适用,并且Web应用也是任何应用的一个重要推广平台,其次Web服务器可以很快速的架设非Web类应用,其本身的分布式协议(Http),简单的访问方式(get/post),无状态短连接特性本身就是一个完美的神物,尤其对于我这种研究过Web服务器实现的人来说,我甚至可以看到协议之下的字节流。。。(哈哈)

  也就是在这之后,我到公司实习,很快的就因为工作任务接触到了C语言开发一个HTTP服务器,需要接受任何合法的HTTP请求,并存储转发其数据。这个过程是借助XML+Nginx提供的http_parser库快速开发实现的,基于epoll的多进程架构,其中还需要涉及到jabbered2的源码阅读(在公司期间花了一周多时间读RFC协议与源码)。

  随着与Web打交道的越来越多,并且公司要求每个人必须掌握C/PHP,于是Web的学习之路很快的提上了行程。

  从0开始总是艰难的,需要毅力。起初总是找不到正确的学习路子,我习惯于来CSDN听听大家的建议,给自己的计划做一些参谋,就像我现在小有成就就喜欢来写个文章分享分享放松放松(也有炫耀炫耀~)。咨询过之后,觉得摆在面前的html,css,js,ajax,php都是些神马东西,这么多怎么学。无奈,只能慢慢学,抱着无限对知识的渴望,在w3school花了最多三天时间,把html,xhtml,css,js,ajax,php,mysql全看完了,就是左边栏的内容全看完了。但是我一行代码也没敲过,看完很快忘干净了。

  放下了好几天,一直没动力再看。这时候,也就是2周前,我觉得我连一个静态页面都写不出来还怎么混下去,DIV+CSS定位一定要整明白,js怎么也得把基础折腾明白,jquery再说吧。我决定看视频学习,于是借助公司的高带宽让电驴尽情的挥洒汗水。。下载了两个系列的视频,一个是讲html+css的传智播客视频,一个是lamp兄弟联的PHP视频,它们都讲了html+css+js+ajax,我就先看了lamp的,一整天在公司里带着耳机看,下班回去看到半夜,恩。。。两个系列我都在3天左右看完了html+css部分,于是回家在自家路由器上架设了一个Linux服务器,在之上部署了lnmp,路由器NAT可以外网直接访问,配置花生壳DDNS,开始写静态页面练习CSS+DIV。

  写静态页面就是找个网站开始模仿,模仿样子不模仿代码。。。于是很快的发现写起来很简单,但用IE就出问题,调来调去都折腾不对,于是积极性被严重打击,休息了一天,来CSDN问了一下,结果自己找到一篇好博文,原来IE很多BUG需要特殊对待,比如我遇到的float块元素的margin是双倍的,这是导致我那些不兼容的主要诱因,于是我的页面开始在IE与非IE下渐渐的一致了,推倒重写了几次,参考了糗百等简单页面的代码,添加了弹出式下拉菜单,滚动广告,浮动跟随广告,也就顺便把js和dom练了练,感觉自信多了一点(C出身的我在大学期间是玩算法的,纯属炫耀,不解释)。

  渴望学习Web与真正学习Web这期间,我也出现过一些原则上的错误,比如买了《Python学习手册》并很快的将之看完,之后很快被遗忘干净(其实我是讨厌python的,因为它把函数封装到一个一个的库里,我讨厌简单问题复杂化)。在这之后,也就是前端的基本东西都掌握了之后,感觉应该深入php学习了,深入就不应该看视频!!视频对于入门真的很有帮助,我犹记得以前冲动学WINDOWS开发的时候看的孙鑫的视频,以及帮助我算法入门的严蔚敏数据结构视频(曾经一个寒假每天翘着腿看视频敲数据结构),必须承认视频是入门的法宝,但真正的深入修炼还是靠多读书,多思考总结,多敲代码试验,才能找到身为一个程序员的技术自信心。

  参考买什么书学习也是在当当,amazon观察了很久,最终决定相信同为

  “圣经”的《PHP和MYSQL Web开发》,我始终相信圣经的力量,就像相信《UNIX环境高级编程》,《UNIX网络编程》一样,虔诚的膜拜之。严重质疑与谴责那些在图书评价中说任何“圣经”书籍“太简单”,“印刷质量差”,“没光碟”等恶心行为,它们一定程度影响了我的正确判断。

  《PHP和MYSQL Web开发》是从上周中开始,今天周3看完的,大约5,6天左右。很多人一定要质疑我看书与看视频的速度与质量了,请尽情的质疑。。。其实看书的时候我是抱着这样一个计划看的:1,语法细节精通!2,注意addslashes,stripslashes,htmlspecialchars,urlencode等安全函数的用途(真是结合了很多额外的介绍才真正的正确把握用法,之前真的很多错误认识,太可怕了)3,重视后半部分的所有实例开发。4,获得足够多的Web开发自信。

  抱着无穷无尽对知识的渴望,我基本不休息的全天看书,不懂就敲,但发现好像人老了脑子不好使了,经常遇见不会的东西以为脑子会记住一会再查,结果一会就怎么都想不起来了,于是就合上书苦思冥想我刚才到底疑惑在哪里。。。发现这个问题之后,我就开始做笔记了,当然不是记我会什么,而是记下来我一会要敲代码试验试验这个问题。

  读完此书,我感觉自己已经集大成于一身,这是一种技术自信:首先,我相信我比普通的Web程序员拥有更多的底层认识(不包括客户端JS引擎),另外,我相信自己有足够的能力开发网站(前端+后端通吃,起初可能菜点,但我希望在工作中要求Web开发的工作任务来提高)。

  对于PHP的问题不多说了,这里大牛成群,我也只是初学乍道,但我发现其实任何一本书你完整的读下来都会形成体系,并且可以学到很多已经误解或者不曾留意的问题,非常珍贵。另外,我说的读书是指:给自己规定少于2-3周的时间,看完任何一本1000页以内的书。如果没有这种耐性,恐怕是永远看不完一本书了,或者说一个月两个月看完了,什么也没记住,实在是很不值得。