点击关注加星标,江湖要事早知道css
一日之计在于晨,一年之计在于春,对于程序员来说,挑战自我很重要。有创造力的以及技术性的休整是可行的。给本身的新年列个计划清单,一块儿在新的一年更好地成长吧!前端
进入真实生活程序员
程序员们过度沉迷于数码设备,在数码设备以外也别有一番天地。正则表达式
所以,在真实生活中的投资会带来相对多的回报。算法
这里有一个起步表,表中是真实生活中可供尝试的活动。对于每一项活动,若是你真心付出一个月,你就再也不是一个新手(而是一个富有经验的初学者):shell
作饭编程
远足vim
滑雪安全
天文学服务器
慢跑
举重
木工
武术
跳舞
保持健康
咱们每每会忽视这些挑战。
每一年,花一整月的时间,调整你的锻炼、饮食以及环境,来培养持久的健康习惯。
每一年去一次诊所,测量血压、胆固醇以及血糖。观察这些数值是怎样随时间而变化的。
若是你的手腕开始疼痛或者已经疼了一段时间了,如今就停下来,采起措施,预防重复性劳损(RSI)。
把目标放在改进姿式上,重点关注肩膀和脖子。我使用姿式纠正带:
(对,它对男人也适用)
跟踪体重、卡路里摄入以及卡路里消耗。若是必要的话,改变生活方式,来培养更健康的饮食和减肥方法。
若是你原本就很健康,就考虑一年的结协力量和肌肉的实验吧。
在过去的几个月,我一直在试着使用能够将桌子改造为站立式办公桌的附件,我不只在心灵上,并且在身体上都有新鲜感。
我估计我站一天能多消耗360卡路里,然而我以为它的做用还不止这些。由于站立让我整体上活动得更多了。我发现,相比于坐着,个人注意力在站着时更加集中。
跳出温馨区
从我 20 岁出头起,我观察比我年长的同伴,尝试发现为何有些人停滞不前,而另一部分人一直精力充沛。
答案是温馨。
温馨致使技术僵化。
一个系统,它能正常为咱们服务,并且咱们一直在坚持使用它。
可是,技术在进步,那些局限于温馨的人绝对认识不到这些进步的益处。
惯例之因此变为温馨的,是由于它原来就是不温馨的。
清单中的事情,可能让你在刚开始感到不舒服:
换成德沃夏克键盘。
从 emacs 编辑器转化到 vim 编辑器或者反过来。
中止使用鼠标。
使用不一样的窗口管理器。
从奶油和糖转变为不加牛奶的咖啡或者不通过调味的茶。
花一整个月的时间试试『流行新垃圾』。
每周关掉手机一天。
学习使用单手输入设备。
尝试使用不一样的操做系统。
对于一个小项目,尝试不一样的版本控制系统。
每周强制断网一天。
试试饮食上的约束:纯素食主义、素食主义、不含奶类等等。
天天吃一种你不喜欢的食物。
少用有利手臂(dominant arm)。
学习用非利手(non-dominant hand)写字。
开始写博客。
报名参加公众演讲。
听一种你并不喜欢的音乐一个月。
在医院或退休之家作志愿服务。
一周禁食一次。
去一个用不一样语言或者有不一样文化的国家。
从你不喜欢的种类里选读一本广受欢迎的小说。
从你不喜欢的种类里选观一部备受推崇的电影或片子。
学会开手动档汽车。
质疑一些你相信的事。
作一些不同的事情,一个月以后,决定是否想继续这样作,或者看看能不能找到这样的方法,能把新事物和旧事物最好的东西融合起来。
举个例子,当用了 10 年的 emacs 转用 vim 时,在插入模式下,我设置了 emacs 风格的快捷键,可是我用的编辑器是 vim 。
更新:读者 Shae Erisson 为欣然接受不温馨续写了『3 的规则』:当已经有3我的推荐你尝试同样东西的话,你必须尝试一下。
他还给出了一个『 15 分钟规则』:给某个东西(好比一部电影或电视节目) 15 分钟的评判时间。若是你在 15 分钟以后不想继续下去了,就放弃它。
这两条规则我都喜欢。
学习一门新的编程语言
编程语言起起落落。
只懂一门语言的程序员,他们解决问题的能力和事业前景会受局限。
用它写一个不大的程序。
这里有一些非主流的可供学习的语言:
Racket.
Haskell.
Rust.
Scala.
Erlang.
Clojure.
SML/NJ.
OCaml.
Squeak.
Prolog.
Datalog.
miniKanren.
若是你有足够勇气,试一试依赖类型(dependently-typed)编程语言或者定理证实系统(theorem-proving systems):
Agda.
Coq.
Idris.
若是你没有编程语言能够去学了,本身发明一个。
自动化
程序员具有的最有力而未被利用的技能就是,使虚拟和现实自动化的能力。
若是你历来没作过机器人的话,作一个吧。
至少玩玩乐高头脑风暴机器人吧:
或者玩玩 Arduino 板或树莓派:
观察你作的平常活动,而后决定哪些能所有或者部分自动化。
家庭自动化技术很是发达,借助 DIY 系统,例如 Insteon,不少东西都成为可能。
花一个月的时间来作一个自动化的项目:
调优你的邮件过滤器或者安装 procmail。
设置 shell 脚本,自动化常常性的操做。
新建一个 shell 脚原本帮助你写做。
学习怎样使用 cron 工具。
把壁橱的灯和运动检测器链接在一块儿。
在可能的地方用无线代替有线。
中止手动同步:把它移到云端。
安装远程声控系统。
用你的服务器来控制你的恒温器。
安装数码安全摄像头。
作一个内线通话系统或者婴儿监视器。
让你的咖啡机自动打开。
为宠物安装自动加水的盘子。
作传感器控制的宠物门。
破解 Roomba,让它成为快递员。
多学点数学
计算机科学是一门与数学相关的学科。
成为好的程序员的前提是成为好的数学家。
不要让你的数学才能消失。
考虑每一年花一个月时间温习这些主题中的一个:
逻辑学。
离散数学。
微积分。
几率论。
统计学。
抽象代数。
数论。
范畴论。
序理论。
专一于安全
若是你在乎本身的电子信息安全,你将会更在乎本身代码的安全性。
检查一下,在每一个网站上,你是否在用独特、复杂的密码?
用加密的密码管理器管理你的密码,例如 PasswordSafe 或者 KeePassX。
若是你还没习惯全盘加密,那么抽出时间作一下。(在 Mac 机上,设置它不难。)
每一年,研究一下过去12个月的高危漏洞。他们是怎样发生的?什么样的编程习惯可以防止这些问题在你的代码中出现?
这里是你能够尝试的其余安全任务:
学习 SSH 还能作什么。
在 Apache 上安装 SSL 安全证书。
实现一个加密系统,例如 RSA 或者 AES。
尝试破解你的无线网络的密钥。
用 WireShark 嗅探你的网络交通。
设置无需密码、基于密钥的 ssh 登陆。
本身运行 nmap。配置你的防火墙。
设置端口敲门(port-knocking)。
作一个加密的 U 盘。
安装日志文件监视器。
设置 cron 做业(cronjob)来规律地更新软件包。
备份你的数据
每一年,花时间来反思你的备份策略。
用一个月的时间,最小化作备份的成本。
(我最近把个人不少工做文件放到了 Copy 里,它是一个灵巧的类 DropBox 应用,有比 DropBox 更多的免费存储空间。经过这个推荐连接来获得多余的 5 GB。)
选择容灾方案:为每台电脑指派单独硬盘,借助像 Time Machine 的工具,打开自动备份。
用版本控制来管理关键文件,将他们存储在异地服务器中。
多学点理论
计算机科学有着丰富的理论结构。
跟上新进展,复习你已经掌握的经典理论。
每一年花一个月,学习相似下面的理论:
形式语言。
自动机和可计算性理论。
复杂度理论。
形式化方法。
语义学。
算法和数据结构。
对于初学者,你可能想看看这些帖子:
用 Haskell 语言写 CEK 形式的(或者语义学上的)解释器。
用推导来进行语法分析。
被遗忘的方法:怎样从 Okasaki 的红黑树中删除元素。
用推导的方法,使用 Scheme 语言对正则表达式进行模式匹配。
将正则表达式转化为非肯定有限状态自动机(NFA)。
对艺术和人文学科有所涉猎
工程师每每轻视艺术。
工程师没有意识到的是,艺术和人文成就了卓越的技术。
史蒂文 · 乔布斯喜欢指出联系技术和人文的重要性,并且真的是这样。
不要对这些理论一无所知。
艺术和人文训练直觉,而且使其变得敏锐。这个过程是以一种很难量化的方式进行的。然而这种直觉对于在量化领域中工做的咱们来讲,是必要的。
工程师须要学习怎样度量他们不能计算的东西,而不是只计算他们能度量的东西。
每一年至少花一个月,多学学相似下面的理论:
工业设计。
哲学。
摄影。
绘画。
写生。
音乐和音乐理论。
电影。
文学。
社会科学也对计算机科学有不少贡献。具体来讲的话,试试经济学和心理学。
学习新软件
要为你本身的软件得到灵感,一个好的方法就是,学习一个或一类新应用。
举个例子,若是你历来没有用过 3D 建模工具,试试 Blender。
或者,若是你历来没学过 LaTeX,真心地付诸一试。
在你学习的过程当中,把你喜欢的和不喜欢的东西都记录下来。
扪心自问,这些观察是否反映到了你创造的软件中?
在你本身的做品中指出坏毛病很难,但给别人的做品挑毛病就很容易。
每一对父母的孩子都是漂亮的。
学会认识本身丑陋的小孩。
完成一个我的项目
若是你成天老是为别人写代码,就要记住,程序员之因此成为程序员,是由于他为本身写程序。
每一年把一个月的时间花在你本身选择的项目上。
实现那个项目的核心部分。
使其开源,将它发布到世界。
往期精彩回顾
从Java小白到收获BAT等offer,分享我这两年的经验和感悟
程序员江湖里有什么?
1.做者是收获BAT头条等大厂研发offer的求职老司机,后台回复“少侠”能够得到个人微信,欢迎和我交流技术学习和求职心得。
2.天天早上九点分享一篇关于程序员成长与生活的文章,包括但不限于:求职攻略、学习方法、技术干货、成长感悟等方面的内容。
3.后台回复“资料”便可得到3T海量学习资料,资料涵盖各个技术方向,包括Java、C++、前端、大数据、移动开发等方向。对于每一个方向,都包含了基础、进阶、求职等部份内容。