水羽哲(@麦可思哲),偶尔喜欢折腾代码,大部分时间都是宅着,看书、追剧、冷笑话,座右铭:沉默亦诚恳;
导语:本期采访对象水羽哲,任职于技术社区InfoQ。这个文科专业的90后,自认为不是程序员,却对编程这件事儿充满热情。在刚结束的“百度开放云骑士之夜”编程马拉松上,他开发的营销插件平台获得了一等奖及一万元的现金奖励。他不执迷于写出优美的代码,甚至会用动物和植物给变量命名!他更擅长解决生活中的具体问题,握紧了程序这把利器,向问题左右开弓!一切只为了实现想法,一切只为了coding for fun!
文科生的编程之路
最开始写的一个程序是为恶作剧,写了个client的程序模拟登录人人网,每小时自动向所有好友扔一次番茄,搞得大家那几天把我给屏蔽了。
技术人攻略:你从什么时候开始接触编程?
高中时开始接触到编程这个事情,得益于我高中时的好哥们儿,他是我迄今认识的最聪明的人,他每天就捣鼓文曲星来编程。我觉得非常酷,于是就跟着一起学,用的是Basic语言。上课也不好好听讲了,整天就想着怎么编程(让班主任看了会疯的……)。当时文曲星上流行一款类似于仙剑奇侠传的RPG游戏(英雄坛说),我哥们儿模仿那个游戏写了一个类似的。但我当时还是以写小应用为主,解决自己学习上遇到的问题,例如解二元一次方程,三元二次方程。还写了一个关于洋流和经纬度关系的学习程序,对地理学习起到挺大的帮助。写完这些应用后觉得很爽,又搞了一个好玩的,就是把前面女生+前后三排一共9个同学的个人信息录到文曲星里,然后给前面的女生说他能知道你周围所有人的信息,当时单纯啊,同学就真相信了。
技术人攻略:大学期间怎么过的?有没有做一些有意思的应用?
大学学的是信息管理,虽然也学编程,但主讲管理和经济。这个专业是管理学院开设的,算是文科专业,毕业拿的是管理学的学士学位。08年赶上经融危机,于是我写了一篇2000字的关于货币政策的文章投给院报,杯具了……整体感觉得经济学的预测缺乏反馈的过程,理论模型的应用也得等多年以后,成就感不强。当时体育又不好,想着一定要培养一个特长,就重新去学编程。升大二的暑假开始学C语言,后来C学得不怎么样,把C#先学会了。教材用的是《C# Primer Plus》,先把书上的案例敲到电脑上执行,后来就开始自己写程序。最开始写的一个程序是为恶作剧,人人网在4月1日愚人节前后可以对好友扔番茄,每当登录就看到屏幕上一个番茄扔过来,页面会卡好几秒。之前提到的高中那个哥们儿让我写个脚本,那时候还不知道脚本是什么,就写了个client的程序模拟登录人人网,每小时自动向所有好友扔一次番茄,搞得大家那几天把我给屏蔽了。当时也不懂怎么打包程序,把程序发给我哥们之后不能用,后来才发现他用的是.net 3.5,但是我已经升级到了4.0,所以类库不完全兼容。因为这个原因觉得client开发太重,发给别人很麻烦,修改bug也很慢,于是开始转向web开发。
学web开发需要掌握MVC,大二下学期给我们系建网站,发现在Visual Stidio下创建项目,就可以自动生成MVC。接下来又开始准备全国文科计算机大赛,打算做一个任务管理的工具,类似于doit.im,主要功能是进行任务管理和任务提醒,并且支持课程表导入。团队一共3个成员,另外两人都不太会开发,于是就边学边做。当时为了有覆盖全平台的噱头,就要写各种客户端。但是我们几个都没有iPhone,就想到用html5,当时html5开发没有现在方便,用了jquery mobile来实现效果,同时写了一个基于Windows phone 7的应用,还做了一个chrom插件。当时的理念是所有的客户端都是通过API接口调用,不允许大家使用私有的接口,这样用户能够看到他们授权了哪些客户端,可以随时解除绑定,算是受开放平台的影响。同时学习了人人和微博的API,任务提醒可以发送到人人网和微博账号。最后结果只是获了个优胜奖。其实现在看来当时的想法还是很幼稚的。
不同服务之间调用中,开始只知道用SOAP传数据,但又非常不喜欢XML,后来知道用REST实现起来很简单。当时朋友送我一本GoogleAPI的书《Google API大全 : 编程·开发·实例》,知道什么是API后,可以省事很多,不用重复创造轮子了。
后来新浪推出SAE,赶紧申请内测。当时SAE只支持PHP,于是边看PHP边写程序,写了一个淘宝降价提醒的工具,同时还调了Sina微博的API。现在还记得测试的第一个商品是一款阿尔卡特的老人机,只要降价就可收到新浪微博发的提醒。里面对于降价的提醒是发一个http请求检查所有的商品url请求,让后它在自己去跑一个for循环,结果查询的数据量稍微一多就会超时,那会也不知道还可以用队列来做。
还有一件比较有成就感的事是写了一个成绩查询的页面,因为我们学校外网不能访问校内的信息,为了方便同学们回家之后查询考试结果,就写了个页面中转,为了方便大家使用就嵌到人人的应用中,其实就是嵌入一个iframe。毕业那天因为以后不能维护了,就在人人网上写了篇日志说明原理,日志的访问量惊呆了。也把代码放出来了。当时还没有微信,现在有学弟做了基于微信的类似应用。
不过会写程序对考试成绩倒是没有什么帮助,好多同学基本上不编程,但是考试成绩好,呵呵,自己算是本末倒置了。记得学数据库时候要交大作业,写的是一个仓储管理系统,。本来老师布置这个作业是为了我们练习SQL语言,但我当时有点投机取巧,偷懒用了C#的LINQ,这样就不用自己写SQL,所以完成得特别快。可到数据库考试时候就悲催了,不会写SQL语句,虽然实际编程没有问题。
有段时间没事情干,就准备考研,当时觉得高数看不懂,通过计算搜索引擎Wolframalpha接口写了个页面,然后就在自习室里Happy的把高数的解积分方程输入手机看验证结果,还能给出图表,帮助你理解数学概念。虽然做这个花了我很多时间,但是后来数学也没好好学。:P
技术人攻略:遇到问题怎么解决?
当时写程序遇到不会就搜索,发现总搜到Stack over flow这个问答社区。刚开始不了解程序社区的世界、流派,所以也是摸着石头过河。2010年7月13号注册了github账户,当时没有看懂git是什么,所以也没有用,只是发现能看别人的代码,我是各种命令行都不感冒。所以也从没有加入开源社区,当时对开源的理解就是开放源代码就行了,于是把数据库作业的源代码放出来供其他同学下载,后来有同学的毕业设计还是基于这个改的。
我不是程序员
我一直觉得自己写的代码很烂,写程序只是为了解决问题,也从来不写测试、文档,而且会用很奇怪的方式去命名。我写程序只是为了做东西,实现想法。我就是想写有意思的产品。
技术人攻略:你这么喜欢编程,为什么毕业之后没做程序员,而是做了技术编辑?
我一直觉得自己写的代码很烂,写程序只是为了解决问题,也从来不写测试、文档(坚决不提倡,个人风格而已!),而且会用很奇怪的方式去命名。例如我觉得某个方法联想到动物,就用动物的名字命名,给编辑群组写的Raven中,我把翻译文章命名为bean,感觉翻译一篇文章就像捡了个豆子,原创内容比较重要,就命名为西瓜。所以我的代码没有可维护性,只有自己看得懂。
毕业的时候也面试过淘宝,从保定赶到天津参加面试。底子一般,对方觉得不适合做开发,问我要不要调到另一个北京团队的产品经理组面试,我觉得也不错答应了,然后也没有下文了,呵呵:)InfoQ是我的第二份面试,没想到很顺利的获得了offer。虽然职位是技术编辑,但媒体工作的好处是可以和很多大牛交流,所以就过来了。而且我一直都还是在写程序,编辑的工作虽然和程序员有偏差,但是还是在向目标前进。
技术人攻略:你觉得自己是一个程序员吗?
肯定不是啊。我写程序只是为了做东西,实现想法。我就是想写有意思的产品。其实我的编程过程是很痛苦的……但是最终看到实现的结果是很爽的:P
技术人攻略:和进大公司比起来,你是更喜欢在创业团队工作吗?
什么类型的公司倒无所谓,我更在乎是否能做出让用户喜爱的产品。我自己擅长写工具类的应用,我喜欢那种创意能被人所用的感觉。也有朋友让我帮忙写社区类应用,但是我不喜欢,因为不擅长做社区运营,我还是更偏爱工具类的。2013年我给自己定的目标是做一个让更多人喜欢的产品,起码能有1000个用户吧。
技术人攻略:你在技术领域有没有特别喜欢的一个人或者某一类人?
我很欣赏Google,主要是欣赏他们的工程师文化,他们的产品会颠覆你的想法,让我感觉很棒。例如Google glass,还有GAE,我19岁生日那天还在倒腾GAE呢。后来转学Python,也是因为Google 使用Python编程,当时顿时觉得这门语言好神奇。虽然现在Google关闭了很多服务,可是瑕不掩瑜。不过Google Reader太可惜了,当时学很多东西都是通过Google Reader进行的。
技术人攻略:在技术媒体能够有更广的视角,有没有什么可以分享给我们的感受?
我其实不太擅长跟人打交道,我一直认为程序是工具,所以国内的技术公司里,比较欣赏阿里的程序员,他们的眼界很开阔,不仅擅长用技术去解决商业问题,还有很多创新,不把自己限定为一个程序员。偏激点,程序员就是一个工具,好多技术强人大家不一定认识,反而是很多有价值的产品大家会认识。早期我也认为开发要用一些牛的技术,但现在认为以技术为导向不容易出一些好的东西,我自己也是以想法为导向。
技术人攻略:你平时除了程序以外还关注什么?
喜欢看《海贼王》和《火影忍者》、看书,看德川家康、设计中的设计、三体、冰与火等,最近在学Ukulele,还有其它一些奇奇怪怪的书,别人要是告诉我说这本书很奇怪,我就会有兴趣看一看,仅仅为了好玩。
技术人攻略:谈谈你在“百度云骑士之夜”上获奖的应用吧?
是一个跑在BAE上的微信插件营销平台,目标就是做一个微信API市场。一方面,小企业做微信公众账号营销,需要基于微信做大量的开发,我的目的是提供一些API,帮助他们简化开发过程。例如把验证、log、图表等方面有共性的功能抽取出来,企业只需把精力集中在业务本身。另一方面,我希望帮助开发者建立一个API销售的渠道,开发者可以提交API到这个平台上,通过企业的购买获利。
技术人攻略访谈是关于技术人生活和成长的系列访问,欢迎和我们有共同价值观的你关注“技术人攻略”,邮箱 devlevelup@gmail.com,新浪微博 @devlevelup,希望能成为技术人成长的精神家园。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。