程序员的12个目标

程序员的12个目标

对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前。新年伊始,我整理了12个月的目标,每个目标都是对技术或个人能力的挑战,而且可以年复一年循环使用。

01. 变得有耐心

02. 保持健康

03. 拥抱变化带来的不适应

04. 学习一门新的编程语言

05. 自动化

06. 学习更多数学知识

07. 关注安全

08. 备份你的数据

09. 学习更多理论知识

10. 接触艺术和人文

11. 向新的软件学习

12. 完成一个自己的项目

接下来我会对这些建议逐个介绍。

变得有耐心

程序员们会担心锻炼耐心付出的努力得不到应有的回报。其实,培养耐心只要付出很小的投入就能够得到相对而言很大的收获。下面是开始锻炼耐心可以尝试的一个列表,只要全身心投入其中任意一项,都可以在一个月左右脱离门外汉(成为有经验的新手)的阶段:烹饪、徒步、滑雪、天文、慢跑、木工、武术、舞蹈

保持健康

程序员通常久坐少动,因此在日常工作中会面临健康问题,但通常都被我们忽略了。一年中花整整一个月来调整你的生活习惯、饮食和生活环境,这会促使你养成持久、健康的生活习惯。每年去一趟诊所检查血压、胆固醇和血糖,看看这些指标最近有什么变化。如果你的手腕开始疼痛或者已经疼了很久,马上停掉手上的工作开始与“鼠标手”(重复性劳损)作战。注意你的坐姿,尤其是肩膀和脖子。我使用了矫姿器来帮助治疗。

跟踪你的体重、摄入以及燃烧的卡路里。如果有必要,可以改变生活方式以养成健康的饮食习惯和减肥。

程序员的常见健康问题

拥抱变化带来的不适

在我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 ,请真诚地试着去了解它。

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

完成一个自己的项目

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

程序员的12个目标

对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前。新年伊始,我整理了12个月的目标,每个目标都是对技术或个人能力的挑战,而且可以年复一年循环使用。

01. 变得有耐心

02. 保持健康

03. 拥抱变化带来的不适应

04. 学习一门新的编程语言

05. 自动化

06. 学习更多数学知识

07. 关注安全

08. 备份你的数据

09. 学习更多理论知识

10. 接触艺术和人文

11. 向新的软件学习

12. 完成一个自己的项目

接下来我会对这些建议逐个介绍。

变得有耐心

程序员们会担心锻炼耐心付出的努力得不到应有的回报。其实,培养耐心只要付出很小的投入就能够得到相对而言很大的收获。下面是开始锻炼耐心可以尝试的一个列表,只要全身心投入其中任意一项,都可以在一个月左右脱离门外汉(成为有经验的新手)的阶段:烹饪、徒步、滑雪、天文、慢跑、木工、武术、舞蹈

保持健康

程序员通常久坐少动,因此在日常工作中会面临健康问题,但通常都被我们忽略了。一年中花整整一个月来调整你的生活习惯、饮食和生活环境,这会促使你养成持久、健康的生活习惯。每年去一趟诊所检查血压、胆固醇和血糖,看看这些指标最近有什么变化。如果你的手腕开始疼痛或者已经疼了很久,马上停掉手上的工作开始与“鼠标手”(重复性劳损)作战。注意你的坐姿,尤其是肩膀和脖子。我使用了矫姿器来帮助治疗。

跟踪你的体重、摄入以及燃烧的卡路里。如果有必要,可以改变生活方式以养成健康的饮食习惯和减肥。

程序员的常见健康问题

拥抱变化带来的不适

在我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 ,请真诚地试着去了解它。

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

完成一个自己的项目

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


相关文章

  • C语言编译全过程介绍
  • C 语言的编译链接过程要把我们编写的一个c 程序(源代码)转换成可以在硬件上运行的程序(可执行代码) ,需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作系统的启动代码和用到的库文件进行组 ...查看


  • 编译原理基本知识
  • 编译原理基本知识 基本概念 ⏹ 程序生成过程 ⏹ 源程序 ---用汇编语言或高级语言编写的程序称为源程序. ⏹ 目标程序 ---用目标语言所表示的程序.可以是介于源语言和机器语言之间的"中间语言",可以是某种机器的机器语 ...查看


  • 第2章程序员自我定位
  • 第 2 章 程序员自我定位 有这样一句名言:"方向比努力重要,能力比知识重要,健康比成绩重要-". 对于刚步入社会的大学生来说,这句话的含义显得更加确切.更有现实意义.人生就像一种旅行,如果选错了方向或者迷失了方向,将很 ...查看


  • 青岛版初中信息技术九年级上册教案
  • 第1单元 感测技术 单元教学目标 知识目标 1.了解感测技术的概念: 2.了解感测技术的地位和作用: 3.掌握传感器的基本原理: 4.了解感测技术在机器人方面的应用: 5.了解感测技术在现实生活中的应用. 技能目标 1.能够识别身边的感测技 ...查看


  • [软件测试的艺术]精华摘要(六)
  • 当程序无法实现其最终用户要求的合理功能时,就发生了一个软件错误. 软件开发过程在很大程度上是沟通有关最终程序的信息,并将信息从一种形式转换到另一种形式.由于这个原因,绝大部分软件错误都可以归因为信息沟通和转换时发生的故障.差错和干扰. 1. ...查看


  • 程序员职业规划
  • 毕业五年规划 1. 程师 个人分析: 个人认为我的性格具有两面性,我喜欢在安静的环境下去看书,在有的时候与朋友聊天分享彼此的欢乐.也喜欢打羽毛球.跑步.旅游,享受大自然的美景.陶冶自己的情操.另外,我也具有团队合作精神与协作能力,比较强的动 ...查看


  • 应用安全评估方法
  • 1.1.1 应用安全评估 应用评估概述 针对企业关键应用的安全性进行的评估,分析XXX 应用程序体系结构.设计思想和功能模块,从中发现可能的安全隐患.全面的了解应用系统在网络上的"表现",将有助于对应用系统的维护与支持工 ...查看


  • 微处理器与应用实验报告
  • 微处理器原理与应用实验日志 微处理器原理与应用实验日志一 指导教师 实验时间: 学院 专业 班级 学号 姓名 实验室 实验题目: 熟悉并使用传送类指令 实验目的: 1. 熟悉并掌握Keil C51 的基本用法: 2. 掌握MCS-51 传送 ...查看


  • HNXQ-EP-03环境目标.指标及管理方案控制程序
  • ISO9001/14001质量环境管理体系文件 程序文件 环境目标.指标及管理方案控制程序 1 目的: 明确环境目标及指标的制定.评审.修订及宣传的职责和程序,明确环境管理方案的制定.评审.修改的方法. 2 范围 适用于公司环境目标.指标及 ...查看


  • 单片机实验Kiel软件的使用和C程序调试
  • 实验一:Kiel 软件的使用和C程序调试 一.实验目的: 1.通过实验学会用C语言进行程序的设计. 2.学会应用keil-uvision集成调试软件对C语言程序进行调试.掌握C语言程序的编辑.编译.运行.单步调试的过程和通过寄存器.存储器. ...查看


热门内容