为程序员量身定制的12个目标

标签: 生活感悟 | 发表时间:2013-02-21 12:24 | 作者:唐福林
出处:http://blog.fulin.org

对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前。新年伊始,我整理了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教程、视频和资源》)

    学习一门新的编程语言

    编程语言起起落落。如果只了解一门语言,程序员的解决问题能力以及职业前景都会因此受到限制。花上整整一个月时间吸收一门新语言或者一个新的编程范式,并用它写一个小程序。

    下面是一些可以学习但不是非常主流的编程语言:

    RacketHaskellScalaErlangClojureSML/NJOCamlSqueakPrologDatalog.

    如果你无所不知,那么你可以实现一门新的编程语言。

    自动化

    程序员拥有最强大的待开发技能就是将虚拟和现实自动化的能力。如果你从来没有造过一个机器人,那么 去做一个吧。至少学会使用 Lego Mindstorms或者玩一玩 Arduino board

    检查一下你每天的任务,看看其中有哪些可以完全或者部分自动化。自动化在家庭生活里已经有了长足的进步,甚至可以像 Insteon那样对系统进行DIY。

    投资一个月的时间来进行自动化:

    • 调整你的邮箱过滤器或者设置procmail
    • 为频繁进行的工作编写自动化shell脚本
    • 编写shell脚本帮助写作
    • 学会如何使用cron工具
    • 改造橱柜灯由感应控制
    • 尽可能地用无线替代有线
    • 停止手动同步:将信息存到云端
    • 安装一个远程控制音频系统
    • 通过你的服务器控制家里的空调
    • 安装数字监控摄像头
    • 安装数字内部通话系统,儿童监控系统
    • 让咖啡机自动打开
    • 为宠物安装自动给水槽
    • 为宠物安装自动感应门
    • 将Roomba改造成个人信使

    译注:

    procmail:procmail软件包包含一个自动的邮件管理器,可以很好的过滤和排序邮件。

    Roomba:Roomba是iRobo公司生产的定时智能机器人。

    学习更多数学知识

    计算机科学本质上讲是数学的一个学科。好的数学家中间会产出优秀的程序员。不要让你的数学能力丧失殆尽。

    考虑每年花一个月时间复习列表中的一项:

    逻辑学、离散数学、微积分、概率论、统计学、抽象代数、数论、范畴论、偏序理论 (《 数学是成就卓越开发人员的必备技能》)

    关注安全

    很少有程序员具备好的安全习惯。如果你对自己的数字安全很在意,你就会对你写的代码安全性更加关心。确保你在每个站点都使用了唯一的高安全系数密码。使用加密的密码管理器来管理你的密码,例如 PasswordSafe或者 KeePassX。如果你还没有对整个磁盘加密,留出时间完成它。(在Mac上可以轻松完成)

    每年都要研究过去12个月中前10位的安全漏洞。他们是如何发生的?在编程中需要怎么做能够避免在你的代码中出现这些漏洞?

    下面是另外一些你需要尝试的安全任务:

    • 在Apache中加入SSL验证
    • 使用RSA或AES实现密码系统
    • 试着破译你的无线网络密码
    • WireShark侦听你的网络通讯
    • 设置基于密钥的无密码ssh登录
    • 自己运行nmap;配置你的防火墙
    • 建立端口扫描
    • 为USB驱动器加密
    • 监控日志文件
    • 设置cron任务定期更新你的程序

    译注:

    nmap:linux下的网络扫描和嗅探工具包

    备份你的数据

    每年花一些时间检查你的备份策略。

    花一个月时间将备份花费的时间减到最小。

    使用基于云的备份服务,比如 MozyCarbonite,很容易建立无缝自动备份。

    更全面地防御可以选择为每个人分发硬盘,对每台电脑使用像Time Machine这样的自动备份工具进行备份。

    对重要文件使用异地远程仓库进行版本控制。

    学习更多理论知识

    计算机科学有丰富的理论基础。

    了解最新进展的同时还要加强对经典开发理论的掌握。

    • 每年在下列主题上花一个月时间:
    • 形式语言
    • 自动机与可计算性理论
    • 计算复杂性理论
    • 形式化方法
    • 语义学
    • 算法与数据结构

    译注:

    形式语言:按一定规律构成的句子或符号串的有限或无限的集合。

    自动机:是有线状态机(FSM)的数学模型。

    可计算性理论:研究计算的可行性和函数算法的理论。又称算法理论。它是算法设计与分析的基础,也是计算机科学的理论基础。

    计算复杂性理论:计算复杂性理论是理论计算机科学的分支学科,使用数学方法对计算中所需的各种资源的耗费作定量的分析,并研究各类问题之间在计算复杂程度上的相互关系和基本性质,是算法分析的理论基础。

    形式化方法:在逻辑科学中是指分析、研究思维形式结构的方法。

    语义学:研究自然语言中词语意义的学科。也可以指对逻辑形式系统中符号解释的研究。

    对于刚起步的程序员,可以先看一看下列文章:

    译注:

    CEK:CEK机器是由Matthias Felleisen和Dan Friedman开发的λ-演算的力学模型。

    Haskell:一种纯函数式编程语言,以美国数学家Haskell Brooks Curry命名。

    接触艺术和人文

    工程师往往轻视艺术。他们没有意识到艺术和人文是基础升华的重要因素。史蒂夫·乔布斯乐于指出将技术与人文结合的重要性,事实也却是如此。

    艺术和设计原则同样适用于人和计算机之间的交互。不要忽视这些原则。艺术和人文的训练让直觉更加敏锐,而这方面的练习是难以用数字来计量。工程师需要知道如何衡量那些他们不能计量的事物,而不是只是统计他们可以计量的内容。

    每年至少有一个月学习下面列出的主题:

    • 工业设计
    • 哲学
    • 摄影
    • 绘画
    • 素描
    • 音乐及音乐理论
    • 电影
    • 文学

    社会科学同样会对计算机科学家有很大帮助,尤其是经济学和哲学。

    向新的软件学习

    一个为自己的软件寻找灵感的好办法就是向新的或新型应用程序学习。例如,如果你从来没有尝试过3D建模软件,可以 尝试Blender。抑或是,如果你从来没有接触过LaTeX,请真诚地试着去了解它。

    在学习过程中,请注意你喜欢什么和讨厌什么。真诚地问自己,这些观察到的内容是否在你的软件中存在。在工作中很难看到自己的缺点,但发现别人的不足却很容易。天下没有哪个父母认为自己的孩子长得难看。请学习看到自己作品的不足。

    完成一个自己的项目

    如果你整天为别人写代码,那么为自己写程序能让你记得当初为什么会成为程序员。每年为自己选择的项目分配一个月的时间,完成核心功能,将其开源发布。

    转自:http://lujun.info/2012/01/%E4%B8%BA%E7%A8%8B%E5%BA%8F%E5%91%98%E9%87%8F%E8%BA%AB%E5%AE%9A%E5%88%B6%E7%9A%8412%E4%B8%AA%E7%9B%AE%E6%A0%87/

    相关 [程序员 目标] 推荐:

    为程序员量身定制的12个目标

    - - 唐福林-博客雨
    对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前. 新年伊始,我整理了12个月的目标,每个目标都是对技术或个人能力的挑战,而且可以年复一年循环使用. 接下来我会对这些建议逐个介绍. 程序员们会担心锻炼耐心付出的努力得不到应有的回报. 其实,培养耐心只要付出很小的投入就能够得到相对而言很大的收获.

    从程序员到项目经理:项目管理三大目标

    - - 研发管理 - ITeye博客
    从程序员到项目经理:项目管理三大目标. 项目管理的三大目标即时间、成本和质量,实际是告诉项目经理应重点关注什么因素,项目控制应该做什么工作. 三大目标虽然简单,但如果能将其真正贯彻到自己的行动中,那么对项目计划制定、过程控制等工作,均能起到引导作用. 有了努力的方向,项目经理也就可以真正告别“盲目”了.

    普通程序员、文艺程序员、2B程序员

    - 可可 - 宇宙的心弦
    希望能引起广大苦逼的正在学或者已经学过c++人的共鸣和会心一笑吧. 如何辨别自己在现实还是虚拟世界.

    如何面试程序员?

    - bluesnail - 阮一峰的网络日志
    你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

    程序员的本质

    - Allen - 译言-电脑/网络/数码科技
    来源What do programmers really do?.   很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员. 另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题. 甚至不少程序员对他们是做什么的都没有清晰的概念.   在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:.

    程序员人生之路

    - myartings - 博客园-首页原创精华区
       程序员人生之路(强烈推荐,分析的透彻. ),某程序达人的人生感悟,估计没有半个甲子的时间,是绝对不可能感悟出来的.    相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心. 在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人.

    程序员装B指南

    - Qing-Run - 博客园-首页原创精华区
    1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好. 一个用来查资料,一个用来写代码. 总之要显得信息量很大,效率很高. 2.椅子不一定要舒服,但是一定要可以半躺着. 3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善. 沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子.

    程序员收入报告

    - diaoxsh - cnBeta.COM
    最近,波兰的程序员Chris(也叫KreCi)公布了他的第十四期程序员收入报告. 数据显示,上月是目前为止他收入最多的一个月. Chris的收入并不是指他的工资或薪水,Chris是一个自由职业者. 他的收入也不是来自个人承包软件工程的收入,他更像是一个果农,种了优良的果树,只要不断的给这些果树施肥浇水,这些果树会给他带来源源不断的财富.

    程序员的利器-SourceInsight

    - Alex - 博客园-首页原创精华区
    作为程序员,大部分时间是在已有的代码上代码工作. 要对已有的代码进行调整,首先就要搞清楚当前代码中蕴含的逻辑关系. 所以常常有程序员调侃说花了大半天时间看代码,最后写代码的时间只有几分钟. 所以,对已有代码的分析质量将影响(甚至会决定)最终代码修改的质量. SourceInsight在代码分析上给予程序员极大的帮助.