程序员的职业生涯是一段充满起伏的有趣经历。考虑到其陡峭的学习曲线,完全可以预见你将经历挫折、启蒙、骄傲自大这几个时期,以及穿插其间的各种心路历程。在这篇文章中让我们轻松一下,通过一系列搞笑 gif 图来回顾其中的每一个阶段 。
阶段1-菜鸟
初入职场的日子,我们都充满激情。在此期间,你毫无头绪,根本不知道该做什么。就像鱼儿离开了水,每一行代码对你来说都是个迷。Doctype?哈?见鬼,这个<div>到底是干什么用的?第一个阶段令人生畏、让人提心吊胆,却又激动人心。到底有多少种该死的语言要学啊?
不过,你最大的优势或许就是你不知道水有多深(译者注:原文”you have no idea how deep the rabbit hole goes”,典故出自《爱丽丝梦游仙境》中爱丽丝掉进了一个深不见底的兔子洞)。学习HTML只是向前迈出的一小步。
阶段2-起步
虽然花了些功夫,你最终还是学到了足够的知识,迈出了你进入编程世界的第一步。尽管第一阶段完全是“我该怎样/该从哪里开始?”的懵懂状态,到了第二阶段你已开始慢慢地建立自己的技能体系。当然,CSS定义样式的语法对你来说依然陌生,但至少你能够在刚买的代码编辑器中改动一下代码,并在浏览器中看看改动的效果。那真是一种美妙的感觉!
阶段3-极度沮丧
想象一下你在洞穴里迷路,打着手电照亮每一个隧道以寻找出路。每走一步,你都希望看到一丝光亮。不幸的是,我们这一行的学习曲线非常陡峭。我只能很抱歉地说,那一丝光亮不会持续很长时间。你必须做好在这个阶段花费数百小时的准备。当你绝望地试图搞清楚那些让你抓狂的东西是什么意思的时候,你需要不断,不断,不断地阅读技术书籍。
如果你觉得太过沮丧而难以承受,请平复一下心情,想想我们每一个人都曾在职业生涯的这个阶段或那个阶段有过和你一样的感受。你不是一个人在战斗。坚持下去,不久之后你就将到达“顿悟”阶段。
阶段4-顿悟时刻
“顿悟”那一刻是世界上最棒的感觉之一:一瞬间,突然,你“搞定了”“哦哦哦,现在我终于明白了”。拿我自己来说,我发现编程中的重大突破通常出现在夜里,此时其他人正在睡梦之中。当我读了八遍代码之后,原本捉摸不透的地方,现在至少有点儿清楚了。
这个阶段,你学的所有技术和语言都开始派上用场了。
阶段5-脆弱的代码
如同之前的阶段,“脆弱”阶段也相当漫长。在这一阶段,你成功地构建了应用程序并实现了预想的结果,但是底层代码无法应对客户需求的突然改变(At this point, you are successfully building applications and achieving your desired end result, but the underlying code is one client feature-request away from popping。译注:but 后半句不大好翻译,还望高手解救。)。此时,你编写的方法长达几十行,而测试的观念尚未在你脑海中形成。
但至少你在做一些实际的东西了。就目前来说,请将你在GitHub上的pull请求局限于书写文档和改正拼写错误。不要低估了这些工作能给他人带来的帮助。
阶段6-模仿
模仿阶段很重要。模仿你心目中的大神编写的代码——甚至是一行行地复制他们的代码,除此之外没有什么更好的办法来学习恰当的编程技巧了。别灰心,每种带有艺术性的职业生涯都少不了模仿阶段。幸运的是,GitHub让这种无声的崇拜比以往更容易了。当然,复制代码只能帮到你这么多,但它开了个好头。模仿那些能够启发你的人,最终,你将开始形成自己的风格。
阶段7-自以为是
此时,你终于开始陷入这样一种境地:你当然还有巨大的改进空间,但自信心也在快速膨胀-或许太快了!人们常说,在头几年里,你还不足以认清自己有多无知!
在这个阶段,避免冲动让自己变得太骄傲自大。骄傲自大对任何人都没好处,只会让未来更出色的你在回顾过去时连连摇头。当你想要在GitHub、Reddit或者StackOverflow中留下嘲讽性的评论“哥们,学学怎么编程吧”的时候,千万别这么做。不久以前你自己也曾是个十足的菜鸟。请传递正能量,而不是打击别人。我们在同一条战线上,只是处于不同的阶段。
阶段8-学习Vim
如果你曾观察过与你共事的开发者,惊讶于他在代码编辑器中操作的速度,那么他有可能是在用Vim。尽管Vim的学习曲线十分陡峭,但一旦你精通了它,你的工作流程在旁观者看来也将如魔术一般神奇。
这是你开始掌控你的编程技术和工作流程的阶段,合适的工具跟技术一样重要。
阶段9-当代码成为艺术
尽管要花上数千小时,但终有一天,你看着自己的代码,阅读起来就像操作命令行那样轻松,你会意识到它简直就跟艺术品一样。你的代码有版本控制、良好的抽象、完美的可测试性、可伸缩性,而且易于阅读。在你职业生涯的某个阶段,你可能曾陶醉于自己能够写出神秘、令人困惑但能正常运行的代码。但是,利用编程语言中每一个可能的技巧和隐藏特性,或者只是为了炫耀自己的聪明才智而把复杂的逻辑简化为一行代码,这些都不是成熟开发者的标志。相反,它展现的是一个自以为是的开发者,完全不为将来的代码维护者着想。
当代码的可读性和它实现的功能对你来说同样重要时,代码就变成了艺术。到了这个阶段,你就是在为人类而不是为机器编写代码。
阶段10—经验丰富
当编程成为一种本能,你就到达了职业生涯的下一个阶段。此时你不再思考语言和框架层面的东西,而仅仅是发现问题并从你的开发工具箱中选择正确的工具来提供解决方案。一个经验丰富的开发者懂得西部牛仔式的单枪匹马蛮干为何很少是正确的道路。与项目组所有成员讨论每一个新特性、准备白板、编写故事(译者注: story)、生成测试,这些都是在开始写第一行实际代码前完成的工作。
至此,你已成为一个成熟、思虑周全、其他人都愿意与你共事的开发者。恭喜!
阶段11——摇滚巨星
很少有人能达到这个阶段。摇滚巨星阶段是职业生涯的巅峰。除了日常工作,你经常在研讨会上发言,成为无数开源项目背后的领军人物;你要抽时间通过邮件列表参与到web的未来发展并为之贡献力量,同时还要在IRC上帮助新人。你是那种以编写编译器和解析器为乐的人。
别人称呼你为摇滚巨星或是忍者,但你厌恶这类标签。你比其他任何人都清楚——学无止境!
原文链接: Jeffrey Way
译文链接: http://blog.jobbole.com/56252/
相关推荐
程序员的成长是一个循序渐进的过程,每个阶段都有其特定的目标和挑战。以下是根据标题和描述中的内容,详细阐述的十个阶段: 1. **基础学习阶段**: 这是程序员的起点,通常在学校的环境中进行。学习计算机科学的...
- **项目选择**:可以根据自己的兴趣爱好选择一个具体的项目,如开发一个小型的信息管理系统(MIS)。 - **项目实施**:从需求分析到设计、编码、测试直至部署的整个过程。 #### 推荐工具: - **数据库**:可以考虑...
本文章是关于一个程序员的成长的六个阶段。
引用是C++中的另一个重要概念,它为变量提供了一个别名,使得可以通过别名来操作原变量。引用的声明语法为“数据类型& 别名 = 原名”。使用引用时,必须在定义时就进行初始化,且一旦初始化后,引用与原变量的绑定...
每个境界都代表了一个程序员成长的不同阶段,无论是从技术能力还是思维方式上都有着质的飞跃。当然,这十个境界并不是固定不变的,每个人的成长路径都是独一无二的。对于大多数程序员来说,能够达到第五或第六境界就...
本书《程序员十层楼》通过对程序员技术能力的细致划分,提出了一个包含十个层次的程序员技能体系,以帮助读者更清晰地了解和定位自己的技术水平。在这一体系中,作者周伟明从自身丰富的软件开发经验和对程序员职业的...
《程序员道路的十个层次》是一份深度探讨程序员职业生涯发展的文档,旨在帮助程序员明确自我定位,规划职业路径。这篇文档从入门新手到顶尖专家,详细描绘了程序员在技术成长过程中的十个不同阶段,每个阶段都有其...
这篇文章是关于一个老程序员的历程,反映了他在编程领域不断学习和成长的过程,以及他在社会中找工作的艰辛。文章提到了VB程序员的三个境界,分别对应编程能力的不同阶段: 1. 菜鸟级:所有代码都只放在窗体文件中...
因为它几乎扼杀 第一阶段:编码机器 这是最低级的阶段,程序员拿到详细设计文档,上面连许多方法接口都定义好了。重构一些代码,写一些实现,调用一些既定的API,然后花许多时间在各种各样的场景测试上面。从做...
【程序员的十层楼】是一个比喻,用于描述程序员在技术成长过程中的不同阶段。这个概念主要是为了分析和比较中国与西方程序员的技术水平。通过设定不同的技术层级,我们可以更清晰地了解程序员所需掌握的知识和技能,...
周伟明将程序员的技术层级划分为十个层次,每个层次代表了程序员在技术能力和职业发展上的不同阶段。以下是对这十个层次的简要概述: ### 第1层:菜鸟 这是程序员职业生涯的起点,门槛较低,只需具备基本的计算机...
这个故事讲述了一个中专生如何通过坚韧不拔的精神和对计算机的热爱,最终成为一名程序员的经历。主人公的成长经历充满了挑战,但也充满了乐趣和收获。 在初识电脑的阶段,面对每周仅有的上机时间,主人公和朋友小辉...
这篇文章“程序员十层楼:程序员的修炼”旨在描绘程序员从初学者到资深专家的成长路径,为不同阶段的程序员提供一个自我评估和提升的标准。下面将详细探讨这个成长体系中的各个层次及其所代表的知识点。 1. **入门...
(A) : (B)`用于比较两个参数并返回较小的一个,是C语言中的高效选择。 - 在宏中使用括号防止参数的副作用,例如`MIN(*p++, b)`可能导致意外的行为。 3. 预处理器标识`#error`的作用: - `#error`用于在预处理...
4. **继承**:继承允许一个类(子类)继承另一个类(父类)的特性,这样可以复用代码并创建层次结构。理解单一继承和多重继承,以及虚基类的概念,是进一步掌握C++的关键。 5. **多态性**:多态性使得不同类的对象...
而程序员的年龄与学习能力之间的关系是一个被广泛讨论的话题,文档认为一个拥有扎实基础和强烈学习意愿的程序员,能够适应技术变革,持续保持竞争力。同时,文档也提到了一个有趣的现象,即随着时间的推移,认为...