从2006年7月开始, 我已经工作4年半了, 现在的年龄也不小了, 需要整理一下我这一辈子的技术方向.
任何技术都是为了实现特定目标来做的. 我的目标不是很明确, 但是大致方向上面应该还行:
那就是做软件开发(好吧, 不是很具体). 可能是客户端, 或者web, 或者手机, 但是现在还是以客户端为主, web也有一部分, 这个还是走一步看一步吧. 我个人是倾向于往web方向发展, 但是限于水平问题, 还是暂留客户端开发.
考虑到技术过时, 以及自己喜好的问题, 我还是专注在开源社区, 尤其是GNU/linux领域.
因此, 这里整理一下我需要深入的方向:
- linux平台上面做开发.
- 客户端/web/手机方向上面的应用软件开发. (具体侧重根据项目需求)
以后随着时间的推进, 我要能够专注积累平台的经验.
下面我要列一下, 我未来(一辈子)的技术储备, 这个文章随时更新.
编程语言
我打算专注在下面几种语言上面, 它们都有对应的适用场景:
抽象能力从低到高:
C – ? – python – lisp
- C 底层平台语言 用来写性能相关/底层的代码, 以及阅读其他开源项目的代码. C语言是逃不过的, 并且至少在未来30年内不会被取代.
- python 动态语言. python的简洁, 清晰, 高效开发, 大量的库支持, 几乎所有领域都能够参与, 我采用它作为主力开发语言. 近来python使用者越来越多, 我也需要深入挖掘, 以应对开发者增多带来的技术贬值现象.
- ? 能够处理复杂度的静态语言 在C和python中间, 我觉得还是会有一个间隙语言, 需要足够的性能, 以及能够处理复杂度. 本来C++是挺适合的(它应用在在Qt和游戏业上面), 但是由于学习成本比较高, 以及对于我来说使用场景不多, 暂时不打算深入. 或许go/lua是好的选择?
- lisp 抽象语言 我需要有一个充分的抽象语言, 来让我能够用任何自己想用的方式来写代码. lisp简洁的语法, 以及强大的macro功能, 能够支持我的需求. 并且也带来一些优越感.
领域知识
上面只是语言工具的部分, 下面是具体的技术领域(所谓的内功):
算法
虽然我断断续续看了CLRS, 但是基础还是非常薄弱, 需要定期花时间学习..
linux
作为产品的基石平台, linux从内到外的了解都是需要的, 先跑LFS吧…
web
现在是web的时代, 我到现在都没有通读完过tcp/ip那套书, 以及对一些核心协议不是特别了解, 虽然能够使用, 但是该做的事情是逃不过的. 然后就是抽空看RFC.
编程能力
写代码的能力, 能够快速提出解决编程问题的方案, 并实现代码. 这样的能力什么时候都不会过时, 都值得训练. 需要经常做做题目…
设计能力
在不同场景下, 提出和验证方案, 并监督实现, 这个还是需要多多开发, 并经常针对项目做出总结.. 一直以来, 我都没有整理这方面的内容, 是该做这样的事情了.
具体技术
为了能够支持开发, 需要有强大的工具来做作成我的产品. 下面列出一些我需要深入研究的, 并且随着时间, 需要不断更新:
开发工具: emacs
- 能够根据需要设置成自己想要的方式.. 虽然我已经采用它开发超过2年, 但是还是很粗浅的应用, 不能按照自己的心意调整成想要的状态, 需要整理思路.
GUI库:PyQt
- 这是我主力的用来写界面的库, 但是我对它底层不是特别了解, 这方面需要提高.
- 最近出来了qml, 作为下一代的GUI语言, 我需要跟进时代.
web框架: django/web.py/Pyramid
- 现在我只是使用过框架, 没有对框架有深入了解, 这样是不够的, 平时开发的时候看不出来, 遇到问题的时候无法解决, 需要弄懂一些基础概念: 整体处理流程/模板机制/数据库
语言库: python库
- 虽然python库非常好用, 但是还是需要知道下面是如何实现的, 以减少对特定产品的依赖. 最好能够阅读python源码和python库源码.
结论
从上面列出来的东西来看, 我贪多嚼不烂了… 现在先慢慢实际使用lisp吧, 把我的一些python代码用lisp来实现..