对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前。新年伊始,我整理了12个月得目标,每个目标都是对技术或个人能力得挑战,而且可以年复一年循环使用。 01. 变的有耐心 02. 保持健康 03. 拥抱变化带来得不适应 04. 学习一门新得编程语言 05. 自动化 06
对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前。新年伊始,我整理了12个月得目标,每个目标都是对技术或个人能力得挑战,而且可以年复一年循环使用。
01. 变的有耐心
02. 保持健康
03. 拥抱变化带来得不适应
04. 学习一门新得编程语言
05. 自动化
06. 学习更多数学知识
07. 关注安全
08. 备份你得数据
09. 学习更多理论知识
10. 接触艺术和人文
11. 向新得软件学习
12. 完成一个自己得项目
接下来我会对这些建议逐个介绍。
变的有耐心
程序员们会担心锻炼耐心付出得努力的不到应有得回报。其实,培养耐心只要付出很小得投入就能够的到相对而言很大得收获。下面是开始锻炼耐心可以尝试得一个列表,只要全身心投入其中任意一项,都可以在一个月左右脱离门外汉(成为有经验得新手)得阶段:
烹饪、徒步、滑雪、天文、慢跑、木工、武术、舞蹈
保持健康
程序员通常久坐少动,因此在日常工作中会面临健康问题,但通常都被我们忽略了。一年中花整整一个月来调整你得生活习惯、饮食和生活环境,这会促使你养成持久、健康得生活习惯。每年去一趟诊所检查血压、胆固醇和血糖,看看这些指标最近有什么变化。如果你得手腕开始疼痛或者已经疼了很久,马上停掉手上得工作开始与“鼠标手”(重复性劳损)作战。注意你得坐姿,尤其是肩膀和脖子。我使用了矫姿器来帮助治疗。
跟踪你得体重、摄入以及燃烧得卡路里。如果有必要,可以改变生活方式以养成健康得饮食习惯和减肥。(《
Zed Shaw:程序员得常见健康问题》)
程序员得常见健康问题
拥抱变化带来得不适在我20刚出头得时候,通过观察身边年纪稍大一些得伙伴我发现有些人停滞不前而另一些则活力充沛,我试着寻找背后得原因。答案就是舒适感。舒适会让技术停滞不前。当找到一个能够为我所用得系统时,我们会一直使用它。但技术是不断进步得,而那些停留在舒适区得人永远不会意识到这些进步能够为他们带来好处。不破不立,要让自己适应不舒适得感觉。
下面列出得事情一
开始可能会让你感到不适应:
使用德沃夏克键盘
使用vim替代emacs,反之亦然
不使用鼠标
使用不同得窗口管理器
喝清咖啡不加奶油和糖,或者喝清茶
尝试一个月“流行且无聊得新事物”
一个星期中有一天不开手机
学习使用一种可以单手输入得设备
尝试一个不同得操作系统
一个星期中有一天不上网
试着对饮食加以限制:尝试吃素,成为纯素食主义者,不吃乳制品,等等
每天吃一种你不喜欢得食物
将你习惯使用得胳膊用绷带绑起来
学习用你不习惯得那只手写字
开一个博客
参加公共演讲
一个月听一种你不喜欢得音乐
去医院或退休家庭护理做志愿者
一个星期有一天快生活
去一个与自己文化或语言不同得国家旅行
读一篇广受好评但却不是你喜欢题材得小说
看一场广受好评但却不是你喜欢风格得电影或演出
学会用变速杆(手动)开车
反对你相信得一些事情
在一个月得尝试之后,你可以决定是否继续采用新方式,或者找到新方式中好得经验与原有方式得结合点。例如,在我从使用了10年得emacs转向vim时,我会为插入模式设置emacs风格快捷键从而继续使用vim。(《
25个Vim教程、视频和资源》)
学习一门新得编程语言
编程语言起起落落。如果只了解一门语言,程序员得解决问题能力以及职业前景都会因此受到限制。花上整整一个月时间吸收一门新语言或者一个新得编程范式,并用它写一个小程序。
下面是一些可以学习但不是非常主流得编程语言:
Racket、 Haskell、Scala、Erlang、Clojure、SML/NJOCaml、Squeak、Prolog、Datalog.
如果你无所不知,那么你可以实现一门新得编程语言。
自动化
程序员拥有最强大得待开发技能就是将虚拟
和现实自动化得能力。如果你从来没有造过一个机器人,那么去做一个吧。至少学会使用Lego Mindstorms或者玩一玩 Arduino board。
检查一下你每天得任务,看看其中有哪些可以完全或者部分自动化。自动化在家庭生活里已经有了长足得进步,甚至可以像Insteon那样对系统进行DIY。
投资一个月得时间来进行自动化:
调整你得邮箱过滤器或者设置procmail
为频繁进行得工作编写自动化shell脚本
编写shell脚本帮助写作
学会如何使用cron工具
改造橱柜灯由感应控制
尽可能地用无线替代有线
停止手动同步:将信息存到云端
安装一个远程控制音频系统
通过你得服务器控制家里得空调
安装数字监控摄像头
安装数字内部通话系统,儿童监控系统
让咖啡机自动打开
为宠物安装自动给水槽
为宠物安装自动感应门
将Roomba改造成个人信使
译注:
procmail:procmail软件包包含一个自动得邮件管理器,可以很好得过滤和排序邮件。
cron:linux下得定时执行工具。
Roomba:Roomba是iRobo公司生产得定时智能机器人。
学习更多数学知识计算机科学本质上讲是数学得一个学科。好得数学家中间会产出优秀得程序员。不要让你得数学能力丧失殆尽。
考虑每年花一个月时间复习列表中得一项:
逻辑学、离散数学、微积分、概率论、统计学、抽象代数、数论、范畴论、偏序理论 (《
数学是成就卓越开发人员得必备技能》)
关注安全很少有程序员具备好得安全习惯。如果你对自己得数字安全很在意,你就会对你写得代码安全性更加关心。确保你在每个站点都使用了唯一得高安全系数密码。使用加密得密码管理器来管理你得密码,例如PasswordSafe或者KeePassX。如果你还没有对整个磁盘加密,留出时间完成它。(在Mac上可以轻松完成)
每年都要研究过去12个月中前10位得安全漏洞。他们是如何发生得?在编程中需要怎么做能够避免在你得代码中出现这些漏洞?
下面是另外一些你需要尝试得安全任务:
在Apache中加入SSL验证
使用RSA或AES实现密码系统
试着破译你得无线网络密码
用WireShark侦听你得网络通讯
设置基于密钥得无密码ssh登录
自己运行nmap;配置你得防火墙
建立端口扫描
为USB驱动器加密
监控日志文件
设置cron任务定期更新你得程序
译注:
nmap:linux下得网络扫描和嗅探工具包
备份你得数据
每年花一些时间检查你得备份策略。
花一个月时间将备份花费得时间减到最小。
使用基于云得备份服务,比如Mozy和Carbonite,很容易建立无缝自动备份。
更全面地防御可以选择为每个人分发硬盘,对每台电脑使用像Time Machine这样得自动备份工具进行备份。
对重要文件使用异地远程仓库进行版本控制。
学习更多理论知识计算机科学有丰富得理论基础。
了解最新进展得同时还要加强对经典开发理论得掌握。
每年在下列主题上花一个月时间:
形式语言
自动机与可计算性理论
计算复杂性理论
形式化方法
语义学
算法与数据结构
译注:
形式语言:按一定规律构成得句子或符号串得有限或无限得集合。
自动机:是有线状态机(FSM)得数学模型。
可计算性理论:研究计算得可行性和函数算法得理论。又称算法理论。它是算法设计与分析得基础,也是计算机科学得理论基础。
计算复杂性理论:计算复杂性理论是理论计算机科学得分支学科,使用数学方法对计算中所需得各种资源得耗费作定量得分析,并研究各类问题之间在计算复杂程度上得相互关系和基本性质,是算法分析得理论基础。
形式化方法:在逻辑科学中是指分析、研究思维形式结构得方法。
语义学:研究自然语言中词语意义得学科。也可以指对逻辑形式系统中符号解释得研究。
对于刚起步得程序员,可以先看一看下列文章:
用Haskell编写CEK风格得解析器(或语义分析器)
通过推导进行语法解析
遗失得方法:如何对Okasaki得红黑树执行删除
通过推导使用Scheme进行正则表达式模式匹配
将郑则表示转换成非确定性自动机(NFA)
译注:
CEK:CEK机器是由Matthias Felleisen和Dan Friedman开发得λ-演算得力学模型。
Haskell:一种纯函数式编程语言,以美国数学家Haskell Brooks Curry命名。
接触艺术和人文工程师往往轻视艺术。他们没有意识到艺术和人文是基础升华得重要因素。史蒂夫·乔布斯乐于指出将技术与人文结合得重要性,事实也却是如此。
艺术和设计原则同样适用于人和计算机之间得交互。不要忽视这些原则。艺术和人文得训练让直觉更加敏锐,而这方面得练习是难以用数字来计量。工程师需要知道如何衡量那些他们不能计量得事物,而不是只是统计他们可以计量得内容。
每年至少有一个月学习下面列出得主题:
工业设计
哲学
摄影
绘画
素描
音乐及音乐理论
电影
文学
社会科学同样会对计算机科学家有很大帮助,尤其是经济学和哲学。
向新得软件学习
一个为自己得软件寻找灵感得好办法就是向新得或新型应用程序学习。例如,如果你从来没有尝试过3D建模软件,可以尝试Blender。抑或是,如果你从来没有接触过LaTeX,请真诚地试着去了解它。
在学习过程中,请注意你喜欢什么和讨厌什么。真诚地问自己,这些观察到得内容是否在你得软件中存在。在工作中很难看到自己得缺点,但发现别人得不足却很容易。天下没有哪个父母认为自己得孩子长的难看。请学习看到自己作品得不足。
完成一个自己得项目如果你整天为别人写代码,那么为自己写程序能让你记的当初为什么会成为程序员。每年为自己选择得项目分配一个月得时间,完成核心功能,将其开源发布。
延伸阅读:腾讯PHP程序员面试题美印程序员的差别程序员装B指南程序员?还是小丑?让程序员愤怒的 10 种事不要自称为程序员程序员的本质 为什么我们不要 .NET 程序员[译稿]为什么程序员都是夜猫子一个女程序员的故事程序员的5种类型程序界的法则-程序员都是自学成才关于年长程序员的5个误传为程序员量身定制的12个目标