作为一个从业快 10 年的程序员, 我想给新入行的程序员们一些建议. 这些建议是我希望自己可以在毕业时就读到的, 也希望它们可以帮助你成为一个更好的程序员.
简单归纳一下, 总共有 7 条:
保持健康
编程之外的爱好
持续学习
正确应对犯错
不要囿于角色
展示你的创意
刻意练习手速
下面我来详细说说每一点.
保持健康
三寸气在千般用, 一旦无常万事休.
人只要有成就事业的勇气, 毅力和自信心, 干什么都有希望. 如果变成无常鬼(死了), 就什么也谈不上了.
--《金瓶梅》
首先要说的当然是健康, 脱离了这个本钱, 一切都无从谈起.
久坐, 不运动, 睡眠不足, 不注意及时补充水分, 长期的伏案工作等都会对健康造成很大的影响, 而不幸的是, 程序员这几样全都占了. 很多程序员往往年纪轻轻就已经有了各种各样的疾病: 颈椎病, 腰椎间盘突出, 高血脂 / 高血压, 胆结石, 腱鞘炎等等, 关于程序员过劳死的新闻更是隔一段时间就来刺激一下我们的神经.
研究表明, 长期保持同一姿势 (不论坐着还是站着) 对身体都有不同程度的害处, 而且这种害处是无法事后弥补的. 也就是说, 如果白天上班坐 8 个小时, 那么就算你下班后去健身房练一个小时也于事无补. 这几年很流行的 "站立式办公" 也是一样, 如果你白天站立时间过久, 会对膝关节造成较大的压力, 同样会损害健康. 比较推荐的方式是, 写 30-40 分钟代码就起来走一走, 喝杯水, 远眺一会, 跟同事聊聊天.
我知道, 作为程序员我也常遇到那种写代码写 High 了连厕所也不想去的时候. 不过为了长远的健康, 还是要养成良好的习惯.
戒除不良习惯
除了长时间保持同一姿势之外, 许多程序员还有各种不良习惯. 比如:
吸烟
喝酒
嗜糖(碳酸饮料, 其他高糖饮料)
这些习惯一般都会被美其名曰提神, 大家都知道, 程序员加班在业界算是比较常见的, 萎靡不振是常态. 然而这些号称提神的方法, 其实没有一个是真正管用的. 这些不良习惯说到底都是一种 "毒瘾", 跟吸食大麻在本质上并无二致. 不过好消息是你完全可以戒除这些不良习惯, 只需要坚持一段时间, 让 "毒瘾" 过去就好了(和真正的毒瘾一样, 它们更多的是精神依赖, 一旦你战胜了自己对它的精神依赖, 就可以获得自由).
我在大学和刚开始工作的前几年, 也有烟瘾. 写代码写累了就会去办公室外边冒一根, 那种一氧化碳中毒带来的短暂微醺感确实令人有放松的错觉, 但是抽完烟回来写代码会感觉更累. 而且口中老感觉有异味, 咽喉不适, 最主要的是精神萎靡, 终于有一天我受不了了, 决定戒烟(事实上和很多人一样, 之前也有过无数次的戒烟). 当烟瘾发作的时候, 我就去喝杯水, 晚上则站站桩(站完之后口齿生津, 神清气爽). 刚开始的 3 天是最难的, 一周之后我基本可以控制住去抽烟的欲望, 然后就越来越轻松, 完全感觉不到烟瘾对我的影响了. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
碳酸饮料, 高糖饮料也是一样. 在饮食本来就不充裕的自然界, 我们的祖先遇到了富含可以为身体提供能量的糖(比如蜂蜜), 自然会大量摄入. 这种嗜糖的基因在今天还在不断的产生作用, 但是不同的是, 我们现在可以很轻松的在食物, 饮料中摄入比身体所需多得多的糖. 这些糖会给健康带来很多问题, 比如肥胖, 高血糖, 冠心病等等.
更多时候, 我们想要喝饮料更多的是精神上的依赖, 也就是上面说到的 "毒瘾". 戒除对糖的依赖比烟和酒要困难一些, 因为生活中有很多陷阱, 比如酸奶, 面包, 饼干, 水果等等.
零度可乐的陷阱
现在香烟的包装上印有焦油含量, 有 10mg 的, 有 15mg 的. 焦油含量是影响一支烟口感的重要因素, 通常说的 "绵" 其实是说焦油含量较低, 这会让你感觉比较健康. 然而陷阱是, 一支烟抽完觉得不过瘾, 神经感受到的刺激不够强烈, 这会驱动你抽第二支, 结果吸入的焦油反而更多. 本来 15mg 焦油的一支烟就可以让你过瘾, 现在两支 10mg 的才能达到同样的效果, 相当于摄入了 20mg.
零度可乐也是一样, 那种无糖的有着甜味的添加剂会刺激你对糖的渴求, 你需要摄入更多的糖来抵消这种虚幻的渴求, 然后变得更不健康. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
有人可能会说, 没有这些嗜好, 那活着有什么意思呢? 相信我, 当你戒除了这些 "毒瘾", 有了一个健康的体魄, 才真正能体会到活着的乐趣. 当你为这些嗜好所控制, 产生的那种病态的舒适感其实是虚无缥缈的.
一些建议
有规律的做一些运动可以缓解颈椎, 腰椎的不适, 可以加快新陈代谢的速度, 消耗多余的, 会沉积下来的能量. 比如比较容易接触到, 也容易上手的运动:
瑜伽 / 普拉提
乒乓球
跳绳
选择一个适合自己的运动方式, 然后将其培养成一个习惯(比如坚持每周两次瑜伽, 或者每天中午打 30 分钟的乒乓球). 如果这些和工作有冲突的话, 比如公司要求长期晚上加班, 那你可以考虑换一家公司.
培养一个编程之外的爱好
如果让不同的人对程序员打标签并排序, 宅一定会排在前三. 在任何的聚会上, 程序员总是很容易被识别出来的: 聪明, 戴眼镜, 话不多, 略显闷骚, 聊天容易冷场等等. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力. 其实也难怪, 长期钻研技术, 沉浸在非黑即白的二进制世界, 爱刨根问底, 这样很容易把天聊死.
我建议新手程序员可以找一个编程之外的爱好, 一来可以拓展自己的社交圈, 周末可以有个不一样的过法(而不是宅在家里写代码); 二来可以帮助你成为更好的程序员.
你肯定有过这样的经历: 一个编程问题一直困扰着你, 试了很久都找不到解决方法, 结果出去散了会儿步, 或者和别人唠家常, 突然脑海里灵光一闪, 想到了问题的答案. 事实上, 我们大脑的工作方式就是如此奇妙, 换一个完全不同的上下文就可以让大脑得到很好的休息, 而且往往可以产生 1+1>2 的效果. 写代码写累了去听听音乐, 或者打一会乒乓球就可以很好的缓解疲劳, 甚至可以打开思路, 产生新的灵感.
一些建议
学习一项与编程无关的技能, 比如:
乐器(如吉他, 架子鼓)
绘画 (素描, 水粉, 水彩等) 或者书法
制作美食
某一项武术(拳击, 泰拳, 空手道等)
这些看似毫不相干的爱好可以帮助大脑休息. 另外需要注意的是, 你无需真正成为某一项爱好的专家, 不要有额外的压力: 担心演奏不好, 没有绘画天赋等等. 没关系, 它只是一个爱好而已.
我自己就尝试过很多不同的爱好, 比如素描, 书法等.
持续学习
软件开发是一个需要终身学习的行业 (其实如果你不想做那种混吃等死的人的话, 基本上每个行业都是这样). 我毕业的时候, SSH(Spring Struts Hibernate) 是 web 开发的主流, jQuery 则是前端的新锐. 有一些企业开始尝试 Adobe 的 ActionScript, 不过这个语言很快就消逝在了人们的视野中. 基于 jQuery, 但是融入了 MVC 理念的 Backbone.JS 提供更高级的抽象能力, 成为了开发 "大型" 前端应用的首选; 紧随其后的, 大而全的 Angular.JS 则通过内置的双向绑定, 依赖注入, 完善的测试支持等让前端开发变得和后端开发一样健全; 再后来虚拟 DOM,Reactive 范式的 React 栈则又一次颠覆了前端的开发方式. 虽然现在还不知道下一次的颠覆会在哪里发生, 但是可以肯定的是它一定会发生.
除了基础框架之外, 各种构建工具也是层出不穷, 从最早和后端放在一起的 maven,rake, 到基于 Node.JS 的 grunt, 再到 gulp, 到 webpack, 最后又回归到 NPM script. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
程序员被裹挟在技术演进的洪流中, 不能自已. 作为程序员, 你不但要非常扎实的掌握基础知识(操作系统原理, 计算机网络, 数据结构, 算法等), 还需要有非常强的快速学习能力, 以及愿意不断去学习的态度, 而后者可能更重要. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
一些建议
读书
通过视频 / 文本教程等学习新技术
建议新手每天抽出一个小时来读书, 周末可以多读一些. ThoughtWorks 有个读书雷达, 是一个很不错的书单, 包括了很多的经典书籍. 读书之外, 还可以在线学习一些教程, 比如 Tutorialplus 和 Egghead 等, 都非常值得经常去看看, 如果有比较新鲜有趣的技术, 不妨自己亲自动手试一试.
关于英文能力
毫不夸张的说, 英文能力是优秀程序员和普通程序员的华丽分割线. 有了好的英文能力, 可供你学习的资料库会立刻扩大数百甚至数千倍: 海量的优质免费教程, 视频, 和优秀的中文教程一样, 它们都深入浅出, 通俗易懂, 风趣幽默, 只不过中文的会比较少, 而且一般总是会滞后于英文版本而已.
英文能力不但可以帮你熟悉各种前端库, CSS 框架等的介绍. 还可以让你学习世界各国程序员对各种库的测评, 框架的使用心得, 踩过的坑等等. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
我在 2012 年加入 ThoughtWorks 的时候, 面试时磕磕绊绊的说不出话来. 等到 6 个月试用期结束的时候, 已经可以出差去澳洲和客户的 OPs 谈笑风生了. 2013 年的 8 月, 在印度普内, 我已经可以用英文给来自世界各国的学生讲课.
除了更顺畅的和不同文化的人交流, 讨论问题之外, 可以明显感觉到学习的速度变得更快, 更有效率.
我自己实践过的一个比较有效的方法. 我每天会花两个小时 (早晚各一个小时) 看澳洲之音上的视频, 我会听写出视频中的每一句话, 如果听不清就重复, 有的句子可能会重复十遍. 听到最后, 视频中的每句话我都能听懂, 而且能一边听一边写出来. 这样坚持了差不多 3 个月, 我基本上就可以听懂客户的需求澄清, 开会的时候也可以比较完整的听明白每个人讨论的点.
其实诀窍就是坚持, 这 3 个月中, 每天两个小时, 我没有一天间断. 过了这一关之后, 就很容易了, 尽量多听多说就好.
另一个提高的方法是翻译书, 我更建议你跟另外一个有经验的同事一起翻译, 大家互相监督, 也有个照应, 比较不容易半途而废.
正确应对犯错
斯坦福大学的 Carol Dweck 教授通过一些实验和后续的研究提出了很有名的心智模型 (Mindset) 理论, 简而言之, 她发现不同的人们对待失败这件事有着完全不同的态度: 有一类人害怕失败, 失败后会变得不能接受, 而且容易否定自身并影响进一步的尝试, Dweck 教授称这类人为固定型思维模式(Fixed Mindset); 而另一类人则 "喜欢" 失败, 视失败 / 犯错为学习的一种方式, 他们更关注过程而不是结果, Dweck 教授称其为成长型思维模式(Growth Mindset).
Dweck 在演讲中提到, 通过向成长型思维模式的转变, 关注从失败 / 犯错中学习, 人们的潜力可以得到很好的发挥, 也更容易获得理想的结果.
很多新人不敢尝试, 又不愿意让同事知道自己的不足, 这样的态度会导致他更倾向于选择更容易的工作, 这样就可以避免暴露自己的不足, 久而久之就会形成恶性循环. 其实企业对于新人的期望一般都不会很高, 对于新人犯错也是有容忍度的, 新人要勇于承认自己的不足, 勇于尝试新的事物, 勇于犯错并从中学习. 前端全栈开发交流圈一起学习交流: 619586920
承认自己的不足在刚开始是一件很困难的事情, 不过在尝试过几次之后, 你就会发现其实也没有那么恐怖. 你慢慢会喜欢那种不带任何包袱的, 全身心聚焦在学习本身上的快乐.
不要被角色限制
都梁在《血色浪漫》里有段描述陕北农民的文字:
钟跃民惊讶地发现, 在如此贫困恶劣的生存状态下, 村民们却很少愁眉苦脸, 他们始终很乐观, 他们最喜欢谈论的话题是饮食男女. 在饮食方面, 由于他们没见过更好的食品, 所以坚持认为酸汤饺子和油泼辣子是天下最美味的食品, 如果有人提出世上还有很多更好吃的东西, 那大家会一致认为此人太没见过世面, 这八成是没吃过酸汤饺子, 才在这儿胡咧咧.
就像酸汤饺子并非天下最美味的食品一样, 开发也不是世界上最牛逼的工作. 任何一个良好的, 健康的产品, 项目都需要不同的角色共同配合, 共同努力. 如果仅仅将自己局限在程序员这一角色, 时间久了未免会有坐井观天的狭隘.
作为程序员, 既可以往上游去探索需求的梳理, 用户痛点的分析, 业务价值的挖掘, 又可以向下游如测试的编写, 产品的发布, 运维监控. 视野开拓了, 才有可能对产品有整体的了解, 也更容易在程序员这个角色上做的更好.
作为新人, 能在自己擅长的方面发挥长处当然很好, 但是如果仅仅局限在自己擅长的方面则未免太过单薄. 如果你在前端非常有经验, 那么除了将这些经验和知识分享给别人之外, 你还可以向别的角色学习他们擅长的技能, 比如向测试学习自动化, SBE 等; 向后端学习高性能, 高可用服务器的技术, 数据库设计及优化, API 设计等; 向 DevOps 学习运维技能, 自动化 provision 技能等等. 前端全栈开发交流圈一起学习交流: 619586920
这些不同的技术不但可以让你的视野更加开阔, 也可以为自己以后尝试不同的角色和机会打好基础. 以我自己为例, 我刚工作的时候是一个 Java 开发, 后来开始做产品的前端开发. 换了工作后又跑到 Linux 下用 C 写服务. 再后来加入 ThoughtWorks 后, 正经职位是开发, 不过在项目上还兼职过一段时间 QA, 在有些项目上, 当 UX 不在场的时候还可以做些简单的设计, 在技术社区当讲师, 还在一些客户现场做过咨询顾问. 我自己觉得在不同的角色上切换非常有意思, 我自己也很享受整个过程.
展示你的创意
将一个创意, 复杂概念或者想法简洁而准确的描述出来是一个非常重要的能力. 我见过太多的程序员都是沉默寡言, 讲东西声音又小, 又紧张, 即使有很好的想法也难以完整的表述出来.
不过这个能力是可以锻炼的, 只需要借助原型的制作就可以了:
画图
静态原型
纸上原型
俗话说, 一图胜千言. 你只需要学习一些简单的绘画技巧就可以大大提高自己的表述能力.
通过用静态页面(html/CSS/JS),mock 数据等方式, 快速的将创意表达出来是程序员的一个优势, 你可以用静态数据, 数据文件等方式, 通过一些简单的代码快速的作出可以做交互的原型, 然后通过和用户不断确认的方式来渐进增强, 这种做法可以避免太大的浪费, 尽早的将客户价值交付. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
原型并不局限在草图, 可以工作的静态页面, 还可以是一个清晰简洁的演讲. 基于 PPT 的原型还可以用来分析目前产品痛点, 对比方案的优劣, 展示自己的看法等等. 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
纸上原型是另一种低成本, 可供快速交流沟通的原型方式:
手速
关于程序员是否要求很快的手速是一个颇具争议的话题. 支持者认为这属于基本功, 每个程序员都应该打字都很快; 反对者则认为程序员的价值在于思考并解决问题, 追求速度快, 那还不如招个打字员. 我个人的观点是, 好的程序员应该有很快的手速(包括打字的速度, 但不局限于此).
我在 ThoughtWorks 西安办公室组织过很多次提升手速的工作坊, 比如三周三页面, 闪电计划等. 基本原则就是对一个具体的 "作业", 不断的重复练习. 前端全栈开发交流圈一起学习交流: 619586920
最近带两个新人, 我给他们布置了一个简单的作业:
来源: http://www.qdfuns.com/article/51117/fb76f691fd3f2b83fdd46b0b7ca40c96.html