不觉间,又有许久没有更新过博客了,伴随着这些年的编程历程,经历了许多困难,每次挺过去后,其实学到的知识还真是很多的,找资料时,翻阅了好多论坛,谷歌一直是我的最爱,感谢codeproject,感谢开源的作者,阅读他们精湛的代码,不知不觉让自己进步不少,最关键的还是多少得跟着敲一遍,然而我算是有代码洁癖的把,总喜欢修改成自己风格的代码,也经常提取中间的好的部分,融入自己的程序中,呵呵。
转眼间,光阴如水,逝去的是青春,累积的是阅历,经验。编程,软件行业,是人外有人,天外有天,总是有着不可逾越的大山,许多大牛也在指点着江山,我等小菜唯有望尘莫及,但也不至于妄自菲薄。
回想起这些年,做过的东西不可谓不多,涉猎的知识也是颇为宽广,有过迷茫,有过懒惰,在C的道路上,我倒是一直坚持着。从初学编程,练习指法,完整写出demo,以后便是疯狂的练习,泡论坛,找资料,在网上找寻各种代码,基本上都用MFC模拟了一遍,或增加功能,或修改风格,最当初完成的一个让我很满意的便是结合了文件过滤驱动,进程保护,屏幕截取,U盘数据”窃取“,等一些rookit技术做出来的远程控制软件,在学校,蓝同学的屏幕,悄悄弹出个框吓吓对方,感染,关机等。 从学校出来后,便是软硬件结合在做了,不过这会儿仍停留在windows上,应用层,钩子,PCI驱动,保护模式下编程,研究启动,硬盘文件系统,DOS程序等。对MFC虽不甚深入,但做界面程序,或是写一个完整的项目代码是不存在问题的。期间让我觉得很有感触的是grub4dos项目,这是我真正深入过的第一个开源代码。感谢不点大师,他的那句话,一直让我觉得很有哲理:“简单就是美”,当然原话可能不是这样,这也是我学C以来,感触很深的一点。简单的哲学。
期间,慢慢接触到了Linux平台开发,当时是简单做了一个进程监控程序,在进程退出后将其启动,首次接触到守护进程的概念,当然还有管道,进程间通信等很多知识。做过Windows程序后,再做其他平台的开发,其实可以很明显的发现一些现象,系统间的原理都是一样的,不同的只是平台间的接口而已。越做越能感觉到,技术不再是唯一,语言也不再很重要,思路才是关键,算法是王道,对系统的熟悉,只是让你可以少走弯路,高效。这次的Linux接触只是浅尝辄止,后面很长一段时间便搁下了,这是一个很优秀的平台,有着自身非常迷人的风采。
后面,我继续维护着MFC上的应用程序,然后发现,我是不喜欢做界面的,枯燥乏味。辗辗过后,我跳了一家公司,说是团队更为贴切,都是小伙伴们,一起创业。这时,我接触到了2.4G,无线通信,单片机,嵌入式系统,各种有意思的玩意,有了前面积累的基础,学习起来并不是复杂,唯一让我印象很深刻的是,其专业性,资料的欠缺,以及出现问题后的那种无助感,尤其是调板子,琢磨半天之后,发现问题竟然在硬件上,或许是某个元件焊错了,晶振不起振,管脚虚焊。。。 不觉间,自己学着看原理图,分析故障,像硬件方面的同事学习,进步是很快的。出现这些问题后,可能会一下子找不到头绪,这时候我觉得首先再仔细看一遍代码,加入调试信息,或断点,或printf,总之找出错误的所在,实在没法子了,考虑搜索引擎,虽然嵌入式相关的资料较之Windows之类的少之又少,或者别人的问题和自己的有所出入,但或多或少是能有一点灵感的,毕竟你遇到的可能别人也遇到过。不过还是真有不少问题,别人很难帮助到你,只有自己静下心来分析,调试,或看data sheet,或勘误手册,或是联系对方技术,有时候,一下子没办法解决的,倒不如先放一放,或者去散散步,不定在途中就顿悟了。
伴着一个不全的厂家demo,全英文的data sheet,有时候真想抓狂。做嵌入式平台,让人感觉很有激情,各种移植,各种花样百出的硬件在你手中玩得顺溜溜的,很有成就感啊。一开始的CC2430,再到STC单片机,后面是STM系列,由8位到32位,接触I2C,SPI,USB等总线,了解字体在LCD屏的显示过程,一串数据在经过主控,到无线模块,再被对端收到,解码,显示,不得不说,这一度让我着迷,这段时间,也是我工作最疯狂的时候。
好不容易折腾到产品快出了,不断变化的需求将这一切打断,更可怕的是,老板的资金链断裂,不可预料的危机来了,撑了不多长时间,终于还是倒了。这时候,真是很伤感的,且不说劳务纠纷,而是这些付出让我不甚甘心,不过也感谢这段时间的学习,让我完成了一个变化的过程。
不久后,我便开始了新的旅程,接触到了FreeBSD平台,深入学习开源的pfSense,裁剪系统,定制内核,编译镜像,构建新的应用。疯狂学习网络知识,理解FreeBSD系统的构成,源码的管理,Shell脚本等,也越来越感觉到Unix/Linux的无限魄力。不多久,我们自己的防火墙便基于这个系统诞生了。中途,因为公司小,杂七杂八的事时常会有,陆续着又做了很多小应用,或应用协议的代理,或邮件过滤,或LCD显示屏控制,智能负载均衡,数据采集终端,单双向文件传输等。也因此与开源结下了不解之缘,当然不全是开源代码,但其中却有很多思想,深刻的影响到了自己。
业余时间,写了点小代码,钩子,OpenSSL的图形化工具,证书认证,二维码识别,自动网页登录器等等,深入研究过的开源代码也是越来越多,让我感觉很重要的一点是,提取有用的代码,或是汲取好的思路,算法,融入自己的代码中,行成自己的风格。
代码只有自己多敲,多理解,平时多看别人的好代码,多分析,多抽取,或是凝练代码,个人非常不建议直接复制代码。只有自己感悟了,才是自己的东西,才能在需要用到时,立刻能想起,这才是对自己有益的。开源的代码往往因为过于庞大,让人心生畏惧,只要抓住主线,切合自己的项目需要,这便不是太难的事了。
渐渐的,不再因为自己使用的是C语言而骄傲,不再因为自己在命令行的终端敲命令而觉得牛逼,这些年来的编程经验,只让我学会了一件事,“虚心学习,用心钻研,没有做不下去的事情。再难解决的事情,也有解决方案,做软件做到后面,说白了,也就是想思路,做方案“。至于实现的方式方法,就以实际遇到的情况而定了,平台系统的选择,编程语言的选定,扩展性,稳定性,可维护性,涉及到的性能优化,算法和数据结构的应用等等,小项目有小项目的做法,设计一个架构,考虑到各种情况,显然是不现实的,在小公司,一切都以效率,时间为重,没必要那么多条条框框,适合自己的便是好的,简单的可控的,便是最有利的。满足最起码的需求后,再或多或少考虑一些设计上的事情才是有意义的。至于代码风格,注释,命名等,这都算是基本常识了,统一便好。
呵呵,废话说了一大堆,近来,将陆续贴上自己学习中,或工作中,或业余时间,实现过,做过的一些应用代码,与大家一起学习,共同进步。编程这条路,向来孤独,只好在孤独中寻找些乐趣了,或许共享便是其中之道把。你的一个不经意,或许就是别人解脱苦闷的那一刻。
最后,再多说一句,让我们像开源致敬把!