关于我和那些年我所追过的技术

关于我

姓名——文志新,网名——文翼,英文名——wenzhixin

邮箱——wenzhixin2010@gmail.com,github——https://github.com/wenzhixin

2010 年毕业于华南理工大学新闻与传播学院广告学(品牌传播学)专业,纯粹一苦逼的文科生,身边的同学基本上都去从事市场、策划相关的职业,为何我会踏上 IT 行业,说来也话长。

初触技术,参加计算机二级考试

由于条件限制,比较晚才接触到计算机电脑,大一下学期终于有了属于自己的台式电脑,那时候还不知道软件开发是什么概念,只知道 QQ 是用来聊天的,电脑可以用来玩游戏。

一次偶然的机会,上朋友(这里叫做 X 君吧)宿舍串门,说有在上《Visual Basic 编程》的课程,从 X 君那得知,可以用 VB 做出小软件,听完 X 君的介绍,就觉得挺好玩的。然后就开始查找相关的资料,上图书馆借阅相关的教程,捣鼓了一番,终于在自己的电脑上装上了 VB6.0,然后写了人生的第一个小程序——Hello,world!一开始,只是觉得好玩,但是没过几天热情马上就消散了。

有一天,X 君说他想报考计算机等级考试,问我有没有兴趣一起考,毕竟多个人的话有个伴。当时也没多想,就答应了 X 君,和他一起报了名(好像是 60 元)。考试时间是 9 月 20 日(也就是大二的开学),所以暑假可以有时间备考。当时对考试还是比较重视的,借了好几本相关的书籍(图书馆管理员的优势^_^),并且把笨重的台式机电脑从学校搬回了家里。

在备考的过程中,发现了可以自己写软件是一件很有乐趣和成就感的事情,还记得当时写了人生的第一个游戏——拼图游戏,可以支持自己选择图片,有关卡,第一关9格、第二关16格、第三关25格…

就这样,我便开始了我的技术之旅。虽然后面的考试有点戏剧化,我顺利通过了考试,X 君并没有通过。不过对我来说,X 君是我踏上 IT 行业第一个要感谢的人。

第一门技术课程

拿到证书之后,就开始关注技术相关的知识。VB6.0 在当时用的还是不多的,所以想着学点新的东西,只是苦于没人教,也没有人可以给我一个学习的方向。大学除了专业课之外,还有选修课程(其他学科)可以选择,在所有的选修课程中,只有一门《Java 程序开发》是和计算机技术相关的。

于是,在大二第一学期,开始了自己的第一门编程课《Java 程序开发》,Benny 是当时的老师,修选课一周只有一节课,并且是在晚上。对于我来说,还是比较珍惜这次学习的机会的,早早的预习了课本上的知识,每节课都会认真去听,并且把作业和课本习题都认真的过了一遍。只可惜一学期下来只教了前面最最简单的几章。

认识计算机学院 W 君

那段时间,在图书馆工作(图书管理员),认识了计算机学院的 W 君,W 君是一个学习十分认真,并且也比较喜欢编程。我们时不时地交流所接触的技术和学习的心得,当然自己的水平也仅仅是个初学者,更多的是我在向 W 君学习,虽然我们所学的不一样,W 君主攻 C++,我当时就只学了 Java,但是例如算法、数据结构这些也是相通的。

在学习的过程中,没有比自己做出小作品更加兴奋的了,例如小游戏、小程序。Java 要做图形界面的话,需要用到 Java Swing。相比 VB6.0 直接在界面上拖动控件,Swing 中的每个控件都是一个对象,需要在代码中生成并添加到界面上去。可能一开始接触的就是面向对象的概念,这种方式并没有觉得特别的困难。经过一段时间的努力,我的 Swing 的单机小游戏——五子棋总算出炉了。

给 W 君展示了之后,他没有鄙视我,还隔个三五天就过来陪我下我自己做的五子棋,并且给了我一些建议,例如支持保存录像、支持 AI、支持网络等等。这些建议都很好,可能是技术上的问题,后面并没有去实现。不过对他提到的 AI 算法这一块还是比较感兴趣的,然后后面一段时间就逛补算法相关的书。那时迷上了清华的 ACM 题库,并跟 W 君一起学习一起探讨算法的实现,后面好像也有做了大于 100 的题目。随着对算法的深入了解,才发现原来性能和运行时间是如此的重要。而 Java 对于高性能算法来说,多多少少显的力不从心。

于是乎,开始接触和学习 C 语言,C 语言在性能和运行时间上,是杠杠的。不过对 C 语言,当时只是为了实现算法而去写的代码,并没有深入的学习,大部分是把用 Java 写的算法移植成了 C 而已。现在想想,假如当时有去深入学习 C,或许,后面的 ACM 小组比赛、网易有道的算法比赛也不会只拿了安慰奖吧。

在这里要特别感谢 W 君,没有他的鼓励和支持,也不会让我有在自己感兴趣的软件开发上坚持下去的信心。

参加计算机三级考试

在通过了二级考试之后,给我的鼓舞还是比较大的,所以又报了第二年 3 月份的计算机三级考试——数据库技术。虽说是数据库技术,但是考试内容大部分是理论知识,例如计算机原理、操作系统、数据库原理、数据库系统这些,但是也没使用数据库去存东西,所以实际上可以用到的还是挺少的。所以这次的考试变成了所谓的应试考试,为了应付考试去背那些理论知识,后面也顺利通过了考试,这貌似又说明了中国的教育问题——应试教育。不过考试对于个人来说,作用还是挺大的,它会驱使你去学习新的东西,这些理论在当时看虽然作用不大,但是万丈高楼平地起,要是没有学习这些理论,也不能在这一行业走的太远。

第二门也是最后一门技术课程

大三的时候,我报了第二门(也是最后一门)计算机的选修课《网页开发》,只记得是个女老师,课程的主要内容是 HTML 和 CSS。也是从那个时候开始接触的网页三剑客:DreamWeaver,Fireworks,Flash。立马对这种将代码显示为页面内容,然后就可以看到效果的编程产生了很大的兴趣。但是像 DreamWeaver 这些工具,老师也不教要如何使用,只能自己捣鼓一番,加上当时一起上课的有好几个同班同学,自然的大家的作业就由我负责了,当然不能辜负大家对我的期望。

当时看到很多网站的小游戏都是用 Flash 开发的,用到的是 ActionScript 2.0,很想自己也做几个来玩玩,可能是在设计这一块没什么天赋吧,对于舞台、时间帧这些不是很感冒,学了好段时间,连个小游戏都没能设计出来。不过倒是帮当时的 GF 做了一个《七月七日晴》的 MV,忘记是要交什么作业来着了。

想用 Flash 做游戏的想法虽然以失败告终,但是并没有打消我做游戏的念头,刚好那时有了诺基亚的智能手机,塞班 S60 V3 的系统,需要用 C++ 来进行开发,苦于 C++ 也只是懂些皮毛,但是塞班设备也支持用 J2ME 来进行开发。这不是又回到熟悉的 Java 了吗?J2ME 的游戏开发是基于 Canvas 的,在画布上生成对象,并实时的变换,有了之前 Swing 的经验,J2ME 上手很快,做了好几个小游戏,例如贪吃蛇、俄罗斯方块、接糖果这些比较经典的。在自己的手机上玩自己开发的小游戏,多多少少有些小兴奋。

在这之前,其实还没真正的考虑过自己的职业问题,对软件开发仅仅只是因为兴趣、觉得好玩、看到自己的小作品会觉得有些成就感。确实是该好好考虑就业的问题了,但是就当时所学,要找软件开发的职位,自己的知识和经验还远远不足,那么是往 Java,J2ME,Web,还是 Flash 呢?

迷茫?坚持还是放弃?

那段时间很迷茫,看到那些招聘信息上都是要求计算机专业或者软件专业的,而自己是文科专业,肯定连简历都通不过,加上软件开发并没有实际的项目经验,属于门外汗或者半桶水状态,而自己的专业知识也没学好。同班的有几个同学当时辅修了计算机,也都放弃了。而我,一个只上过两节计算机选修课的人,又有什么理由去坚持,去跟别人抢饭碗。

可能也是由于自己是个比较执着那种,不想让那两年的努力付诸于流水,所以最后还是选择了自己比较熟悉的 Java。根据招聘信息上的要求,我把目标定在了 J2EE(Java 的企业版) 和 SSH(Struts + Spring + Hibernate)上。但是一开始接触 SSH,环境的搭建就花了一天的时间,然后跟着视频教程一步一步的学习。

简单的说 Struts 负责表示层,Spring 负责逻辑层,Hibernate 持久层也就是跟数据库打交道。弄懂这三个框架各自的作用,以及如何集成到一起还是花了不少时间的。当然最重要的还是实践,一开始我是打算做个留言板先来练手,服务器用 Tomcat6.0,数据库使用 MySQL,开发工具用 MyEclipse。在实践的过程中,也渐渐的明白了很多关键的知识点,例如 Struts 的 MVC(Model,View,Controller)、Spring 的依赖注入、以及 Hibernate 的 O/R(对象/关系)映射。

参加软考

为了到时可以给自己加分,在学习 J2EE 的同时,我还报了计算机技术与软件专业技术资格(水平)考试——程序员。跟等级考试不太一样,软考的知识覆盖面很广,基本上计算机相关的理论知识都要考到,不过不用上机,这对于一个非计算机专业的来说,作用还是很大的,对计算机基础知识有了比较全面的学习和巩固。后面努力也没有白费,考试也顺利通过了。

开始找项目做

到了大三第二学期,我试着找计算机学院的 SRP 项目,看能不能顺利通过面试,然后通过实际的项目学习更多的开发经验。没想到顺利的通过了面试,带项目的是计算机学院的一个女老师,姓高。高老师带我参观了实验室,在那里认识了好几个计算机学院的师兄,他们正在做一个财务管理系统,使用 C# + asp.net,数据库是用 SQLServer。对我来说,全部都是刚刚接触的新东西,所以大部分都是在学习,他们有时还要给我讲解代码。现在想起来挺惭愧的,在项目中没有发挥什么作用,可能还拖了他们的后腿,所以做了一半我就退出了,不过不管怎么说,很感激高老师和那些师兄们让我有了一次学习和锻炼的机会。

当时专业课里面有唯一一门与计算机技术相关的课程——多媒体技术。而教我这门课的胡老师也是现在唯一一个有联系的老师。我们的期末作业是每个人做一份多媒体相关的作品,可以是个人网站、视频短片、音频作品、电子杂志等等。我的作品不用说当然是网站了,不过并非是个人网站,而是想做一个作业管理系统,方便老师查看和评价课程作业。这个想法很快得到了胡老师的支持,因为可以自己选择擅长的技术,我选择了 SSH,数据库用 MySQL,服务器使用 Tomcat。管理系统功能比较简单,就是提供上传和支持在线查看作业——网站、视频、音频、电子杂志,当然也要支持打分和评论功能。

到系统上线的时候遇到了部署上的问题,因为学院用到的服务器还是比较旧的(硬盘竟然不是 SATA 接口的),需要重装 Windows Server 2003,而自己对这一块也不熟,最终也没有搞定。只好把服务器放在自己的台式机上,而上这门课总共有五个班(加上其他两个专业)的学生,所以只能每天都开着机器,有出现问题就及时修复。因为这个我认识了好几个其他班的同学,还好系统并没有太大的问题,完成了提交作业的功能。

实习:Web 前端

大四开始找实习,也是因为胡老师的推荐,才有幸到广东有线的技术部门,虽然没有用到 J2EE 和 SSH 那些,不过到那边接触和学习了我现在所在的行业——web 前端开发,所以胡老师是我转 IT 行业特别要感谢的人。

在实习单位,我的主要工作是将美工人员设计的 ps 页面,使用 HTML、CSS 来实现,然后用 JavaScript 实现一些交互特效。而页面一般是活动宣传用,不用太复杂。当时,负责前端开发的是 Y 君。

刚开始的时候,我对实际的工作流程还不是很了解,所以就搬了椅子到 Y 君的座位旁,看他是如何工作的,然后有不明白的地方就会问他。在他的指导下,我学会了使用 DreamWeaver 开发工具,编写 HTML 的基本标签,然后再通过设置 CSS 样式属性,从而实现自己想要的页面。

下班回到宿舍,我就拿一些比较火的网站练习,例如从最简单的百度,到比较复杂的新浪等等,先自己模仿实现,然后再进行对比,看看自己那些方面做的不足。通过实际工作加上自己练习这种方法,我很快熟悉了大部分的 HTML 标签和常用的 CSS 样式属性。

有一天,部门老大跟我说需要实现一个比较简单的业务办理系统,主要功能是提供用户填写咨询、购买、以及投诉表单,然后后台对这些信息进行查看处理,使用 asp.net 和 SQLServer。问我有没有胜任这份工作。我当时觉得功能也不多,对我来说应该没什么问题,不明白的话就请教其他同事就可以了。

补上了之前没学好的 C#、asp.net,我还学会了用 Visual Studio 进行开发,并且会写简单的 SQLServer 语句。至于页面的,先做好静态页面,然后在通过 asp.net 进行渲染就搞定了。

接触新技术

随着对前端技术的了解,我接触到了 AJAX(Asynchronous Javascript + XML)技术,简单来说就是异步更新。之前做的页面都是那种传统表单,当点击一个请求之后会跳转到新的页面中去。而使用 AJAX 可以在不刷新页面的情况下局部更新想要的内容,从而提高页面操作的用户体验。通过学习把这技术应用到了直播页面中,当你点击某个频道的时候,会通过 AJAX 请求后台获取指定频道的投票信息。

当时其他部门做电视机顶盒的同事,需要做一个开机界面,实现 3D 旋转效果,然后控制遥控器就可以切换菜单。在技术部门也没有人熟悉做这个,后面讨论了一番决定使用 Flash 来做,因为只有我有用 Flash 做过开发,所以这个光荣的任务就分派给了我。上面说到我对 Flash 那种舞台、时间帧的动画方式不太感冒。Flash 天生是为了 designer(设计者)设计的,界面还有 Flash 的动画概念和程序开发人员格格不入。

幸运的是,Adobe 推出了 Flex,可用于构建具有表现力(富客户端)的 Web 应用程序,使用 Flash 做的动画效果用 Flex 也完全可以做到,并且 Flex 使用的是面向对象语言 ActionScript3.0,更适合我这种有过 Java 开发经验的人。知道了 Flex 之后,我兴奋不已,这下终于可以使用自己喜欢的方式来做开发了。只是后面找遍了学校的图书馆,发现竟然连一本 Flex 相关的书籍都没有(因为当时刚推出不久)。

然后,我就买了第一本(考试的不算)技术类的书籍——《Flex 企业级 Web 应用》,书的内容挺全面的,一开始是基础知识,后面是实践部分。Flex 的界面使用 mxml(后缀名.mxml)来进行布局的,有点类似于 html 的标签吧,然后样式(后缀名.style)也跟 css 差不多,而主要语言是 ActionScript3.0(后缀名.as)则是跟 JavaScript 相类似。很快就把书看完了,并且 google 了 3D 旋转效果的相关文章,然后做出来的效果貌似还不错,很炫。于是,我把使用 asp.net 的一部分页面(例如频道投票信息)也用 Flex 实现了 。

实习结束后,又找了两个项目做,可以使用自己擅长的技术来做,所以我就选择了 Flex + Java,前端和后台使用 WebService 进行交互。一个项目是帮国企做的,数据库要求是用 Oracle,我对 Oracle 是完全没接触过,相对于 MySQL 来说,使用 sqlplus 还是比较麻烦的,然后后面让我做项目的人还要经常指导我,教我如何写 SQL 语句。

选择与工作

找工作的时候我做了三份简历,分别是 Java 开发、Flex 开发和 Web 前端开发。Java 和 Web 没什么优势,最后选择了现在的公司,以 Flex 软件开发工程师的职位。在实际的项目开发中,我又接触了 Web 前端相关的开发,以及 使用 PHP 编写后台代码,PHP 是比较简单的语言,我也没有学习,直接就开始编写代码了,然后要用到一些 API 的时候就直接上官网查阅就OK了。

这两年学到了很多东西,接触的最多的应该就是 Web 前端相关的技术了。框架库 jQuery,并写了好多个 jQuery 插件;单页面应用,MVC 框架,例如:Backbone、Undercore、AngularJS 等等;包管理:AMD、CMD、seajs、spmjs、Grunt;CSS 框架:Bootstrap 等等。

有几个一接触就喜欢上的:操作系统 Ubuntu(包的管理十分方便,可以使用 shell 脚本)、浏览器 Chrome(快,可以开发自己的插件)、IDE WebStorm(web 前端必备利器呀)、版本控制 git(分布式控制)、后台 nodejs(使用 JavaScript 编写)、服务器 nginx(轻量级)、开源网站 github(练级平台)。

其他项目用到的技术:Android(手机应用)、WordPress(博客系统)、Cordova(webapp)、postgresql(数据库)、raspberry pi(开发板)等等。

技术之路漫长而修远兮,吾将上下而求索。用技术改变不了世界,那么就用技术改变自己吧。

(写了好几个晚上,一个不小心写的有点多了,所以后面工作的写的比较简单,未完待续吧……)

— 记于 2013-11-12