回顾12,展望13(技术篇)

终归是个搞技术的,所以怎么也得搞个总结与展望的特别篇,讲述过去一年的技术学习与成果,规划接下来一年技术学习的计划。

2012年,阅读较少,写的代码较多,经过几个小项目以及实习,终于觉得自己有点攻城师的样子了,甚感欣慰,哈哈。

罗列一下个人的小项目,虽然不复杂,代码量不多,代码也写得不漂亮,但自认为有那么点用。

  1. 百度音乐下载器:代码项目主页 (墙外)

  2. 简易FTP搜索引擎:代码项目主页 (墙外)应用(注:这个小项目断断续续做了一年,经历了几个版本,以及几次更新,目前看起来还不错)

  3. 基于Web的机器人远程控制:代码项目主页 (墙外)(注:这个项目就是我那尽是水的毕业设计啦,哈哈)

  4. 在线代码高亮,分享以及运行:代码(注:这个项目其实很不完整的啦,代码编译与执行部分根本没做防护措施,根本没法实际使用)

  5. Loven的个人静态站点:代码(注:其实绝大部分的代码都是loven自己写的啦,我主要写了实现总体动态效果的javascript程序,而且还是仿照的,不过难度比原来被仿照网站的要大很多)

顺便说说实习做的事情,正好为G1C1做个广告,哈哈。

实习主要实现一起公益网的部分功能,最后还完成了该网站的静态化,所以现在的一起公益网是个静态网站,不需要数据库,用户也无法提交数据。

后来一小段时间还维护公益品网,这网站有点意思的,欢迎大家访问看看。

过去一年写的代码中,个人兴趣小项目基本都是基于Python、JS实现,实习工作主要使用PHP。

除了写代码,我还迷上了翻译技术文章,markdown和restructedText格式的一些最早的翻译稿见https://github.com/youngsterxyf/Translation。后来的放在基于jekyll与github pages搭建的博客(注:近期随着Github被墙了)上。除了零碎的文章翻译,还开始翻译《The AWK Programming Language》一书,翻译稿见AWK程序设计语言,目前为止才完成第一章的翻译,再接再励!

其实12年,我还是读了点书的,但觉得阅读效果不好,决心重头开始阅读,故在此不表。

这样看来,12年,我虽做了些技术活,但都是些没啥技术难度的小应用,但令自己欣慰的是在学习方式上自己逐渐从死学转到实战,在应用中学习。13年希望自己挖掘一些自己感兴趣有技术深度的小项目来做。

13年技术学习计划

编程语言

编程语言对于码农来说是最重要的工具。程序员必须通过编程语言将想法转化为程序由计算机来执行。不会一种甚或多种编程语言的人称得上程序员么?不会编程的计算机从业人员是合格的么?而且,不同的项目选择不同的编程语言实现很多时候也是很关键的,所以程序员不管从实用还是从学习还是从兴趣角度,都应该多掌握几门编程语言。

目前,我最喜欢也最熟悉的编程语言是Python;基本掌握的有PHP,C/C++,Java;不熟悉但能写点程序的有JavaScript,Go;简单接触过只有肤浅的感性认识的有Scheme,Ruby,Haskell等。

从实用角度出发,2013年希望进一步掌握熟悉Python(甚至达到精通的程度),熟练使用PHP(工作可能需要使用),多写写C语言代码(方便进一步熟悉底层),尝试写一些Go语言程序(觉得Go简洁而强大,以后在服务器端应该大有前景),进一步了解JavaScript的特性(虽然基于各种库写了千行代码,但根本不熟悉这门语言,JS必将在web前端一统江湖啊),另外,由于要做运维工作,所以需熟悉Shell编程。

从兴趣角度,以及为了更全面地理解编程语言,希望自己能掌握一门函数式语言,暂定Haskell,因为目前看来Haskell的社区很活跃,学习资料也多,Haskell也有点学术研究产物的感觉,与工程实践产物的语言相互补充,因为自己不喜欢Java,所以也不考虑基于JVM的Clojure等函数式语言,虽然它貌似很火。


工具

觉得以前自己过于折腾,总想找到更好的工具来使用,却不知所谓更好的多半要更熟悉才能明白,所以针对常用工具链中的每一环精通一个工具,相比同时掌握几个功能类似的工具,更为重要,回顾自己的折腾史,大浪淘尽沙,终觉着如下几个工具值得学习精通。

  1. Linux --- 挑一个发行版深入使用学习,不同的发行版本质上大同小异,因为对于我这种层次的码农来说,Linux最重要的是命令行及其工具链,极其便于编程开发与批量任务。当然,也不必排斥Windows之流。

  2. VIM --- 虽然接触使用VIM的时间较长,但没有用心学习过,决心之后长久投入其怀抱,学好用好。

  3. Git --- 天天使用Github,但由于是一个人在自娱自乐,所以只会Git的基本用法,遇到特殊情况就有些头疼了,而且我们得熟悉天天在一起的伙伴,是不?

  4. Latex --- 虽然对于普通的文档编辑,office之流已经够用了,但对于一个有志青年,在初步认识Latex之后,大悟文档编辑也可以有更高的追求,一切复杂都抵不过纯文本的简单之美。故希望在基于office满足基本的文档编辑需求之外,自己能够有个Latex的理想追求。


理论学习

2013年想进一步学习编译原理分布式系统网络,特别是编译原理,本科时候完全水过,根本没有正儿八经地学习。网络的话,是觉得现在的开发与应用对网络的依赖性越来越强。分布式系统,是认为任何大的系统,本质上都趋向于分布式,原理都相似。

虽说理论要学习,但得以实践为主导,在实践的同时加强理论学习。


个人小项目

昨天刚看到一篇文章《The joys of having a Forever Project》 。确实我们应该始终有自己想做的事情,作为程序员,也就应该有自己想做的项目,这种项目或出于方便大众、节约大家的时间,或为了验证自己的理论学习,或为了实现自己的某个创意想法,原因不一而足,但一旦自己空闲的时候,就愿意为其写几行代码,那么在生活工作的劳累中你也能够感受到自身的充实圆满。

关于个人小项目,目前仅有一个,就是想为自己和女朋友做个website,记录共同走过的光阴,个性化展示文字,图片,视频等。

其他的以后看是否有新的想法。


书籍阅读

非技术的书籍目前想阅读《历史研究》、《GEB》、《明朝那些事儿》。《历史研究》是本大部头,很早就买了,一直没静下心来;《GEB》也是本大部头,之前翻过几页,觉得不是很理解,就放下了,现在想重新拿起来读一遍;《明朝那些事儿》这书,原本并不在意,后来有次在某个桌游店翻了几页,觉着甚是不错,将历史写得生动有趣,与黄仁宇的《万历十五年》相比,虽没有那样的学术严谨性,但有趣好读是很重要的嘛。

技术书籍,根据前面说明希望学习的技术,目前想阅读《C++对象模型》、《编译原理》(龙书)、《Python源码剖析》、《TCP/IP详解》(第一卷)(第二卷有点厚,估计只能翻翻,没那么多时间阅读)。分布式系统方面,估计会阅读一些经典论文。


源码阅读

一直觉得自己写的代码不甚高明,不简洁也没有美感,所以想阅读一些优秀的开源项目源码,借鉴一些别人的东西。目前想阅读memcached(分布式缓存)、requests(Python的HTTP库),另外随着阅读《Python源码剖析》,也阅读一点Python的源码。

希望13年,在这方面有所突破,阅读一两个不大的项目源码。


翻译

个人觉得“慢”才能有所积淀。也有话说“学习的最好方式是教别人学”。所以翻译这个事情虽然会耗费许多时间,但要想翻译得对,翻译得好理解,所谓“信达雅”,必须对文本及其相关的东西有充分的理解,才能办到。那么翻译的过程也就成了一个深入学习的过程,时间长久的“慢”的积累,就会有较大的进步。另外,翻译也能帮助别人。

目前翻译任务主要有:

  1. 继续翻译《The AWK Programming Language》一书,现在才翻译了一章,所以任重而道远啊;

  2. Requests文档;

  3. 若读到写得好且有深度的技术文章,也会翻译。


如此看来,13年要做的事情好多啊,有点过度计划的感觉啊,哈哈。不过只要自己能够分清主次轻重缓急,应该不会有问题。

希望自己每天进步一点点。