对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前。新年伊始,我整理了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/NJ OCaml、 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 风格的解析器(或语义分析器)
译注:
CEK:CEK机器是由Matthias Felleisen和Dan Friedman开发的λ-演算的力学模型。
Haskell:一种纯函数式编程语言,以美国数学家Haskell Brooks Curry命名。
分享到:
相关推荐
我们的模板设计简洁,专为程序员量身定制。它们强调了技术技能和项目经验,同时也考虑到了可读性和清晰度。每个模板都可以轻松地进行个性化,以反映您的个人品牌和职业目标。 我们的程序员简历模板大全包括: 1. **...
4. **量身定制**:每个模板都可能需要根据个人情况调整,以适应不同的职位要求。在使用模板时,务必根据自己的经历和目标进行个性化修改,使简历更具针对性。 5. **关键词优化**:在撰写简历时,注意使用行业关键词...
这意味着压缩包内可能包含的学习资源是针对程序员量身定制的,旨在提高他们在专业领域的英语阅读能力,而不仅仅是基础的日常英语。 标签“程序人生”进一步扩展了主题,它不仅关乎技术技能的提升,更可能涉及程序员...
《程序员求职面试宝典》是一本为准备求职的程序员量身打造的综合指南,它涵盖了面试真题、求职技巧以及职业规划等多个方面,旨在帮助程序员在竞争激烈的IT行业中脱颖而出,找到理想的工作。以下是对这些关键知识点的...
黑马程序员英语单词册是为程序员量身定制的英语词汇大全,涵盖了计算机领域的600个必备英语词汇。这些词汇是程序员在工作和学习中经常需要使用的,了解这些词汇可以帮助程序员更好地掌握英语,了解国际前沿技术,...
- **量身定制**:每份简历都应根据应聘的岗位进行调整,突出对应技能和经验。 - **清晰简洁**:避免过于复杂的排版和字体,保持简历整洁易读。 - **关键词匹配**:研究职位描述,确保简历中的关键词与之匹配,以通过...
- 量身定制:根据应聘岗位调整简历内容,突出与职位需求相关的技能和经验。 3. 简历模板的选择: - 技术风格:适合强调技术专长的程序员,通常包含代码样例或技术栈图示。 - 商业意识:强调项目管理和团队协作...
《程序员职业小白书——如何规划和经营你的职业》是一份为初入IT行业的程序员量身定制的指南。这本书深入浅出地介绍了如何在快速发展的IT领域中,制定个人职业规划,提升技能,以及如何有效经营自己的职业生涯。以下...
"求职:程序员简历模板合集"是一个专门为程序员量身定制的资源,旨在帮助他们更好地构建自己的专业形象,提升求职成功率。这个压缩包包含了15个精心设计的简历模板,其中4个专注于大数据领域,其余11个适用于更广泛...
这个标签进一步强调了文档内容的重点,即专门为软件程序员量身定制的简历样本。标签的目的是帮助用户通过关键词快速识别和搜索相关资源,对于那些不熟悉如何编写IT行业简历的人来说尤其有用。 【压缩包子文件的文件...
【程序员简历模板-单页单色风格12.zip】是一个为程序员量身定制的简历模板,旨在帮助求职者高效地展示自己的技能、经验和项目经历。这个压缩包内包含了一个名为"程序员简历模板—单页单色风格12.docx"的文档,提供了...
【Java程序员面试宝典】是为Java程序员量身定制的一份求职指南,旨在帮助程序员在求职过程中更好地准备和规划自己的职业生涯。以下是对标题和描述中所述知识点的详细说明: 1. **职业规划**:首先,程序员应理解...
【描述】:这份“程序员简历参考—单页单色风格2.zip”压缩包包含了一个以.doc格式的文档,是为程序员量身定制的简历模板。模板设计以单色为主,目的是让求职者的专业技能成为焦点,避免过于花哨的设计分散招聘经理...
【程序员简历模板—单页单色风格19.zip】是一个为程序员量身定制的简历模板,旨在帮助求职者高效地展示自己的技能、经验和项目经历。这个压缩包内包含了一个名为"程序员简历模板—单页单色风格19.docx"的文档,提供...
【程序员简历模版实用版】是为IT专业人士量身定制的一款简历模板,旨在帮助程序员在求职过程中更加专业、高效地展示自己的技能和经验。简历模版涵盖了必要的个人信息、教育背景、求职意向、技术能力、工作经历、项目...
此"ASP.NET项目开发资料"压缩包显然为初至中级ASP.NET程序员量身定制,旨在提供一个学习和实践的起点。 该资源包可能包含以下几部分: 1. **项目图片**:这些图片可能包含了项目的设计草图、用户界面UI示例或者...
【描述】:“程序员简历参考—单页单色风格24.zip”说明了该压缩包中包含的资源是为程序员量身定制的简历模板,这种模板通常以清晰、专业的格式展示候选人的技术能力、项目经验以及教育背景,帮助求职者在众多应聘者...
【程序员简历模板-单页单色风格31.zip】是一个为程序员量身定制的简历模板,旨在帮助求职者以简洁、专业的形式展示自己的技能、经验和项目成果。此模板以其单页设计和单一色调,强调了内容的清晰度和阅读效率,使...
【程序员简历模板-单页单色风格21.zip】是一个为程序员量身定制的简历模板,旨在帮助求职者高效地展示自己的技能、经验和项目经历。这个压缩包内包含了一个名为"程序员简历模板—单页单色风格21.docx"的文档,提供了...
【程序员简历模板—单页单色风格13.zip】是一个为程序员量身定制的简历模板,旨在帮助求职者高效地展示自己的技能、经验和项目经历。这个压缩包内包含了一个名为"程序员简历模板—单页单色风格13.docx"的文档,提供...