业余时间的编程实践
我很认同王阳明的知行合一这一说法,所以我非常喜欢在实践中去学习和锻炼技术。计算机学科是一门强调实践的学科,技术本身不能是目的,技术只是实现想法的手段。可惜这一点我明白的太晚了点,对于技术本身有太多执念。
我最早是大二开始,利用业余时间陆陆续续接一些订单的。最早开始是帮一些老师、学长做点WinForm 的桌面程序,几百块钱的小订单,既能提升技术,又能赚点小钱补贴一下大学的花销。大二的暑假,一位老师牵线搭桥,要帮一家德企做一个官网,我是一顿操作猛如虎,又是CSS,又是JQuery一顿操作,搞出来几套网页模板让客户来选(见下图),客户都不太满意,沟通过几次后意向就不大了。后面我接触到WordPress这套CMS系统,直接用这个工具给客户建站,套用了几套模板,老外倒是挺满意,并最终买了单。回想起来,这可能是我第一次认识到:原来借助于工具的力量能够如此在短时间内快速提升自己的能力,同样的事情,学会实用合适的工具,能达到事半功倍的效果。只可惜,当时认识的还不够深刻,后面一断时间内还是觉得只有自己写的程序才是靠谱的。
大三开始,我就能接到一些高深的项目了,比如一个灾时道路交通救援相关方向的博士课题:在一个中大型路网中,面对作随机发生的自然灾害如何找到及时有效的道路救援方案。最开始我也是对这个问题一筹莫展的,因为这是一个复杂的MTSP问题,这里我详细描述一下:“TSP问题是计算机领域的一个经典NP完全问题,描述为:“一个销售员从某起点开始,必须访问n个城市且每个城市只访问一遍,最后到达原起点,试求解这样的线路;MTSP问题是对TSP问题的更加深入的探讨:有m个销售员共同访问n个城市,要求每个人由起点出发找到一条巡回路线后再回到原起点,彼此之间的线路要求没有交集城市,每点仅仅能走一次。” 这个课题里面的情况要探讨的是求解指定点集的MTSP问题,是对MTSP问题的进一步改进,描述为:“在一张图中,要求M个销售员由同一起点出发再汇集到同一终点,他们要通过该图中的指定的一个交叉点集,并且彼此之间的线路不能有交集,每点仅能走一次。”
我这个人相对比较笨,但是有个优点,如果遇到难题我会就这持续不断去思考这个问题,吃饭想、如厕想、洗澡想,有时候睡觉也想。电影《银河补习班》里面父亲马皓文对儿子马飞讲:你要一直想一直想,想着心中的目标,你就能成功!我大概就是这种的类型。
终于我想到了曾经在图书馆看过的一本书《游戏编程中的人工智能技术》,这本书以非常形象几个游戏的案例“扫雷机游戏”“手势识别”“登月飞船”,带读者实现了几个人工智能领域的核心算法--遗传算法、神经网络算法。我想到,既然遗传算法也可以被拿来求解局部最优,那为什么不能用在这个图论最优解问题上,所以我以此为基础开始展开研究。经过几个月的努力,我终于完成了针对这个问题的算法确定和程序开发工作。这个算法大概长下图这个样子:
由于当时还没有后来流行的机器学习的库比如scikit-learn,SciPy,所以只能自己动手敲了程序的全部代码,同时在这么过程中也学习一些GIS的知识比KML、Google Earth API等,以下是当时作品的一些截图材料:
自此以后,我对偏学术的软件程序设计方向产生了兴趣,因此我接一些有意思的中科院、博士或者硕士相关课题:比如实现一套python爬虫框架,去爬取微博、各大招聘网站的相关内容,然后基于NLP中文分词相关算法去自动做中文文章中的相关术语识别(自动识别文章的中心论点);根据论文《基于局部相似性的复杂网络社区发现方法》去实现一个社交网络中的人际关系自动社群分类程序(Ward聚类算法);实现一套脑电波设备对接程序,记录脑电波信号和控制步进电机转速... ...
这里面最有意思的要数跟一位苏州大学女硕士一起配合实现的针对于运动内衣材料舒适性研究的课题,这个课题使得我成为了可能是中国大陆对女性胸部数据最为了解的程序员。
这张图戳中了我一段时间内的笑点,图中男子因为没有穿戴胸贴去跑马拉松而导致乳头出血,鲜血染红了他的运动衣。男人尚且如此,女性在运动时候的苦恼可想而知,所以这就是女性运动内衣的重要性。
要研发一款适合女性的运动内衣,可不是加点海绵垫这么简单,这项研究离不开大量的试验数据,需要通过在女性胸部帖上传感器,同时引导她们做相对剧烈运动,记录这些运动数据,经过对运动数据进行分析比对,才能得出各种材料优劣结论。但是这里面有一个参照系的问题,传感器传回来的数据是基于地面参照系(GCS)的,这是不准确的:女性的胸部,我们可以把它们想象成一对弹簧,在运动的时候,这对弹簧是受到躯干的拉扯而向上运动的,所以最直观的运动参照系应该选取躯干而不是大地。
香港理工大学的周捷博士在2011年的博士毕业论文《New methods of evaluating breast motion in braless and sports bra conditions》提出了一种新专门用于研究乳房运动的坐标系建立方式,该坐标系建立过程如下:“以通过两乳头连线BR-BL的与水平面平行的平面与左乳左右最边缘的两处交点为参考点BI、BO,BI-BO的连线和过BR-BL连线上BL点的垂直线的交点是为新坐标系BCS的原点O,取过O点的BR-BL平行线为Z轴,在平面BI-BO-BL中垂直于Z轴的即为X轴。”记录在乳房这个坐标系内各个点的运动状态,是比较能够真实反应乳房相对于躯干的运动状态的,但是想要做这个转换却需要非常复杂的数学算法,原文中以用14页的篇幅描述了这种矩阵变化算法(P65~P78),有兴趣的朋友可以读一读。作者并没有提供相关的算法程序,于是乎我通过数月的研读,最终将这套算法化为了不到600行的MATLAB程序。该程序能够将文件内的GCS数据转换为BCS数据再进行图形绘制以此来比对位移和压力的情况,如下图:

这个项目非常成功:一方面那位女硕士顺理通过了毕业答辩并且也因此还作为中国代表参加了位于新加坡的行业大会,向全世界的与会者做了详细的汇报;另一方面尽管我没有像以往一样获得物质回报,但是却因为精湛的编程技术而获得女神的芳心,最终抱的美人归,所以说码中自有黄金屋,码中自有颜如玉。
当然,我业余时间做的程序也不尽全是偏学术性的,也有偏应用类的,比如安卓手机助手(2012)、PHP在线培训考试系统(2015)、无线AP管理系统(2016)、美容院管理系统(2017)、微信公众号程序(2017)、微信商城(2018)等等,总之是五花八门,各种技术尝鲜。

安卓手机助手(2012)

PHP在线培训考试系统(2015)

先后参与编程和运营过的微信公众号和小程序
前段时间,我们公司有小同学想要离职,理由是在公司学不到东西,没人带他。我想以自己的亲身经历告诉他,真正想学技术是没人能拦得住的。瀚码技术并不是一家以007,996的为文化的公司,即使工作占据了日常生活中的一部分时间,但是我们仍然有大量的业余时间。如何高效的在常规时间内完成本职工作,如何充分的利用业余时间为自己充电,这是每个积极向上的技术人所要自己摸索的课题。一个正确的职业观应该是:公司是付工资请人来解决问题的,而不是请人来学习的。切不可产生为了公司、为他人而学习的错误的想法,更不该认为在工作中有人去带去教是天经地义、理所当然的,职场人应该树立起正确的职场观念,如此才是对自己和公司负起了责任。
下一篇《我的程序员生涯--步入职场(三)》
全部 0条评论