我是怎么跌跌撞撞的变成全栈工程师的
故事应该是从2008年夏天开始的,对于那一年映像最深的除了汶川地震,北京奥运之外,还有JAVA。
java算是我第一次接触的跨平台的东西吧,决定要去学java的原因很简单,因为那时候我还不满16岁的大脑貌似对正在被教授的嵌入式C语言不太感兴趣,也许是那个时候教学太死板,我始终觉得:
既然要教我嵌入式,怎么说也得先弄个机器人什么的给我长长眼吧?
如果当年阿凯老师的银色手提箱里取出的是一个micro robot,而不是一块电路板(开发版),也许我会一点不犹豫的坚持在嵌入式这条路上走下去。后来懂得多了,才发觉,当年那块电路板上搭载的居然是arm处理器。
要知道,那时候开放手机联盟大概也才刚刚成立,android估计才进入测试阶段,嵌入式设备上大多运行的还只是KED桌面的Linux和WinCE。
然而,在完成了一个阿凯老师布置的任务之后,我就再也没有接触过所谓的嵌入式开发了。
那个任务大概是这样的:首先是读取Linux的串口,串口的终端是一块GPS天线,我所做便是实时读取这个串口文件。然后用C语言的字符串处理截取出来我需要的信息:高度,速度,纬度,经度。最后,使用另外一个GPRS模块,把这些信息发布出去。
我的任务完成的还算圆满,交叉编译之后烧到ARM板上还运行的不错,不过,在整个系统中,我所做的只是移动终端的开发,当我看到指挥中心的客户端时,我的心情…是震惊的。
这他妈的简直是黑客帝国嘛,一个个终端被分散出去,地图上不停的闪着小点点。简直是电影里才出现的呢!16岁的我瞬间被震撼到了。阿凯老师只说了一句,这是用java做的。事实上,后来到了部队也做出来了类似的GIS地图,只是苦于当时只是个义务兵,没钱买开发芯片和各种模块,领导也不重视,那个地图也仅仅是个能够分层的地图而已…
总之,那个时候就鬼使神差的迷上了java,阿凯老师擅长的不是java,我又跟亮老师学习了,刚接触不久就被OOP这种思想给征服了,受够了面向过程中的各种数据结构,面向对象里原生态提供的数据结构,原生态类库,让我第一次觉得编程原来还可以这样。
和所有09年前学习java的人一样,最终目标都定在JAVA EE上,我也不例外,大概学了一年的JAVA之后,我的眼界也逐渐开阔,也能用struts hibernate这类的框架做出来一些web应用了。
不过,毕竟还是太年轻,不知道怎么想的,突然对web开发有了一用莫名的轻视,感觉无非就是数据库的CRUD罢了,那个时候,似乎也还没有前端的概念,我的一些作品的页面也是丑的一塌糊涂。渐渐的对web开发没了兴趣,于是做回了老专业——嵌入式。
那个时候对嵌入式和手机开发,没有明显的界限,或者,那个时候手机开发就可以称得上是嵌入式了,于是我开始了我的Android之旅。
勉强算的上是国内比较早的Android应用层开发者了吧。大概是半年时间吧,一个软件公司找到了我,那是个当时西北地区为数不多的做android开发的公司,苦于招不到人,居然找到了我这个17岁的孩子。去公司面谈了一次,项目经理还给我出了一道算法题,具体记不清了,大概就是一个数列的获取和排列。大概也就五六分钟时间,我就给了代码,本以为会对我的算法指指点点,谁知道那货关于算法和程序功能都没有说半个字,甚至都没验证,反而是对我的编码规范大大的赞赏了一番。那就下个礼拜上班吧。
可是这个时候,老妈突然通知我回家当兵。据算命的说,如果我不当兵,可能会有牢狱之灾。老妈可能是看我一回家就做在电脑面前,不玩游戏也不看电影更不和女孩子聊天,每天都在电脑上敲一些她看不懂的英文字母。老妈虽然不懂,但是新闻还是经常看的,结合算命先生的话,再看看我的状态,不由得怀疑,我是在搞网络犯罪。天天旁敲侧击的教育我,君子爱财,取之有道之类的。
于是,2010年冬天,我终究还是跌跌撞撞的闯进了部队,走的时候,不知道哪根筋不对,居然带了一本《LINUX 环境下C语言程序设计》。
就这样,一个人,一本书,到了部队。
在此之前,我已经具备了一些成为全栈工程师的资格:
java语言基础
web开发的必备知识
HTML/CSS
移动开发
一些MVC MTV之类的开发模式。
到了部队就是在新兵连里训练,各种不适应,因为之前天天在家写代码,以至于身体底子特别差,刚开始的时候跑上1000米都喘的不行,于是训练的过程就是各种挨骂的过程,再加上遇到了个比较严厉的班长,基本上每天能够不挨骂那便是我最舒服的日子了,过了一段时间以后,身体的每一个块骨头都被骨膜炎蹂躏一遍之后,感觉整个人都脱胎换骨了一样,也就慢慢适应了,这期间,每个周末会有一天休息,我就拿起那本《LINUX环境下C语言程序设计》看,没有电脑,就在日记本上写代码,在大脑里编译,不知道这算不算是对自己的一种锻炼。这样的日子过了四个月,我才下连,我的连队在一个山沟里,下连没多久就开始执勤,主要是看犯人。
每次站在哨位上看到监狱里的犯人,我都会问自己,我来这干嘛来了?
事实上,这个问题我至今也没搞清楚。好在没过几天,值班室通知我接电话,电话那头是司令部的哪个首长,之前也没见过,问我程序能搞不,我说没问题。于是我就被调到了司令部作训股,全称是作战训练股,那会儿也不懂那是个干啥的单位,总感觉听名字还是挺牛逼的。
到了机关,每天都会在办公室里上班,不过比较尴尬的是,办公室配给我的仅仅是一台赛扬的处理器的台式机,那叫一个慢呀,而且根本没有外网。我在部队内网找了大概整整一天,编程的工具居然只有c++ builder,好在之前这个东西用的还算不错,于是,就开始了我在部队的第一个程序,基本上就是一个简单的管理系统,我甚至都没找到数据库,用的ini文件来存储数据。不过,总算开始敲代码了,这期间慢慢的也熟悉了新的环境,每天的工作也是比较繁琐的,除了写程序之外,还要负责司令部领导的生活起居,办公室的卫生,几个库房的卫生,每天还要雷打不动的站四个小时岗。
按照领导们的说法,我对电脑比较精通,于是又交给了我一个新的任务,那就是,视频剪辑。也就是把部队每个月的执勤,训练的视频资料剪辑出来,方便做一些分析呀之类的东西。于是,我就开始学习会声会影。
之前对于视频剪辑,图片处理之类的软件也没怎么接触过,感觉就是点点鼠标什么的,接触之后才发现,这里面也有大学问。所以也慢慢认识到,隔行如隔山,我们不能用自己的浅薄轻易的否定了别人的价值。
关于视频剪辑,后来我在大概第三年的时候专门参加过一次培训,培训内容直接上升到了电影的制作,授课的都是一些北京电影学院的教授和几个比较有名的导演。也算是长了见识,回来之后就买了个MacBookPro,在自己的单位用单反相机拍了一部微电影,用finalcut剪辑了出来,后来在全部队还获了奖,不过这都不是我想要的了。
再说回来,大概在第二年的时候,部队开始搞信息化,我被调整到了通信股一起搞建设,这次建设让我有了一种鸟枪换炮的感觉,指挥中心里所有全新的笔记本电脑和所有的台式机随便我用,最重要的是,我们接了一条外网!这个时候,上面信息化部门也来了一个帮助我们搞建设的参谋,这参谋也算是科班出身,和我勉强算是有点共同语言吧,我们两个一合计,觉得还是要搞出点软件来,不过,这货的编程功底确实差的一塌糊涂,于是我变成了主力。我用了差不多两天的时间在在网上复习了一下java的struts2框架,然后开搞。
由于确实在这方面没什么实战经验,而且要做的系统还是比较庞大的,直接命名为一体化平台,总之部队里的人员,车辆,作战,执勤,战斗力评估之类的全部要做进去。第一个难题就在数据库设计上,我一个人差不多折腾了三天三夜,才把数据库这块做好。然后就是各种业务逻辑,在这里也不便透露,总之,整个项目边开发边测试,差不多一个人折腾了一个半月时间才能跑。功能都实现了,可是问题来了,我的前端确实丑的惨不忍睹,于是,上面来帮忙的参谋动手了。
他用了一个叫做authwear的东西,做了一个固定分辨率的界面,不得不说,他的界面做的确实很好,在看他工作的时候我也学会了不少PS上的东西,以至于现在我的PS已经能相当于一个职业美工的水平了。与此同时,我用了半个月的时间自学了3DMAX,把我们所有目标做成了3D模型,并且按照海康的sdk,把实时视频监控也做到了这个系统里。
但是,把我的页面直接嵌套进他的界面里,B/S构架的应用直接变成了C/S构架,直接牺牲了程序的灵活性,以至于,我又一次改了代码,直接提供接口给他来调用。最后,得到了一个看起来很酷,但是牺牲了部分功能和灵活性的平台。
当这个平台被放在了指挥中心的大屏幕上,我在控制室为指挥中心里的将军调出来各个执勤点的视频,每一个战士的资料,战斗小组信息,车辆和装备信息的时候,一种成就感油然而生。
我的军旅生涯本该就这样结束的,9月份的时候,我被家里人内推,去了一次百度西北区总部,面试我的是他们的人事总监,他对我还算满意,并且也谈好了,推荐我去北京的百度无线部。我也就做好了再过两个月退伍的准备。
可是,之后的一次任务改变的我,任务甚至还有友邻部队的战友为此付出了生命的代价,参与完任务之后,我鬼使神差的写了一份留队申请,结果,就变成了一个士官。
转了士官之后,我被调到了另外一支部队,专业是网络维护员,用外面的话来说就是站长。负责网站建设,主要是ASP和PHP,这个新的单位对软件系统这块儿也没有特别的需求,以至于我在这里还是比较清闲的,直接的好处是,我可以花大把大把的时间去学习一些新的东西。
我也正是在这个时候开始学习python的,大概一接触python之后,我便彻底舍弃了java,我喜欢新技术,而且python真的很对我脾气,于是开始用django来做一些项目。日子就这样波澜不惊的过着,差不多持续了三年吧,只要没有其他的任务,我也每天坚持写代码,在这期间同时也学了SWIFT IOS开发,新的CSS和HTML,bootstrap以及jquery,并且在第四年的时候,受到原部队的邀请,回去用WPF重新实现了之前的一体化平台。
这一次,我一个人,让界面更酷,效率更高,软件更实用。
到此为止,我不知不觉的已经进步了许多,回头看看。
曾经的闭门造车,在完全没有网络的环境下开发,锻炼了我不择手段解决问题的毅力。
使用一些以前不屑于使用,或者认为太简单的工具,并且去研究它,发现了技术和艺术结合之后的新世界。
接触了许多硬件设备,维护部队的网络,发现了许多硬件和软件共同的地方。
接触了身边形形色色的人,有初中毕业的战士,研究生技术干部,学院教授,发现他们的可爱与可敬,让我改掉了自己心浮气躁,眼高手低的毛病,学会了尊重与学习。
从浮躁不安,自以为给我足够的设备和材料我能把卫星放上天的十七岁的不知天高地厚的少年变成了宠辱不惊,愿意踏踏实实做一点事情的老兵。
我发现自己在一点一点的进步,这些进步很多时候自己不能直接感受到,但他确实存在,虽然我现在也并不是什么技术大牛,但我愿意,踏踏实实的去创造一些自己喜欢的东西。
一个人,一台电脑。
浑浑噩噩的,就这么成了一名全栈工程师。