本文中作者分享了从一个刚入门的“菜鸟”到一个高级开发人员的经历。作者分步的描述了在每个阶段一个开发者应该干什么事情,很详细的解读了每个开发人员可能遇到的问题。与其把这篇文章归结为一篇技术博客,那还不如把它当成是一篇短篇小说,因为它不仅有趣,而且实用。如果你也想成为一个大神,那么快快阅读它吧!

关于题目中所提到的问题,很多学生或是一些刚刚开始他们软件开发职业生涯的人问过我(尤其是当我发布了这篇文章之后)然而,让我们先来看一些问题吧。

  1. "伟大"是一个相对的概念。作为一名"伟大"的软件程序员对不同的人可能意味不同。而我把“伟大”定义为那些可以领导一个软件工程师团队的人,那些可以轻松且高效处理开发周期中的任何一部分中的任何事物的人,或者是那些可以凭借自己出色的能力去解决开发过程中发生了的意外或者解决一些错误问题的人。

  2. 当您准备让您的事业更上一层楼的时候,那么阅读这篇文章可能会给您一个正确的指引。当然,通往成功有不同的捷径,对你而言,这篇文章或许不是最好的指引,不过,阅读以下也并无坏处。

那么我们就不再啰嗦,开始来阅读它吧!

首先,在这里并没有一个通向成功的神奇公式。然而,我只是想把我的经历,我的导师以及其他我尊重的开发人员的职业轨迹分享给大家,以了解如何去成为我心中所想的那个“伟大”的开发人员。我写这篇文章的意图是帮助那些和我以前有一样疑惑的,在刚开始不知道怎么去达到一个新的水平开发人员。

我记得当我大学毕业的时候也有很大的工作压力,其他开发人员总谈一些我不太熟悉的东西。这总是令我心烦。我只是刚毕业而已!我觉得我想要在这个“现实的世界”中成功。我也应该需要这些技能,我也应该要准备好。有些时候我开始去想,也许我只是没有得到良好的教育。

我很快意识到,许多开发人员都有这种感觉。好吧,我会第一个告诉你,它可能不是你缺乏教育的问题。真的,这里根本就没有问题!其实你已经了解了你所应该知道的知识(希望如此) 并且您可能不会知道一切在学校外才能学到的知识 (无论您的学校有多好)。很多伟大的软件开发人员的知识都来自于他们多年的经验 (一个原因是当你获得任何职业中的高级职位之前你并不具有这个工作经验) 。

这真是一件悲伤的事情...

这里仍有许多伟大的开发人员采取的一些路径和有用的方式,这些方法使他们更加快速的达到他们现在所处的位置。下面是我认为对我最有益的一些过程。

请记住这只是一个导引,为了帮助您在走向“伟大”的职业生涯中指对正确的方向

第 1 步: 选择一种语言,学习基础知识

在奔跑之前,我们一定要先学会走路。

对于很多的程序员,他们一开始就急于操作一切,在真正进步之前没有足够的耐心来学习一种编程语言。

请不要成为这样的人

选择一种你感兴趣,并且你在未来的几年编程过程中会用到一种编程语言。你想要选择一种东西并且拥有持久的价值。如果找到一份工作对你很重要,你可能想要选择一种目前最受欢迎的语言,并且在你学习和使用它的时候它将一直保持流行的状态。

一旦您已经选择好了要尝试和学习的编程语言,试着找一些书或仅仅讨论该编程语言的教程。我的意思是您不想找到一种能马上教你很多知识的学习材料。您现在需要找的就是一种仅仅讨论该语言的初学者的学习资料,而不是一个技术的百科全书。

第 2 步: 创建一些小工程

现在,你对一种编程语言有一个基本的了解,是时候把您的这些理解付诸于实践了,通过此来找出你的差距在哪里。做到这一点的最好的办法是试着建立一些东西。

在这一点上不要过于雄心勃勃 — — 但也不要太胆小。通过一些努力,为您的应用程序挑选一个想法是很简单的,但不要挑选一个需要数月时间才能完成的项目。试着将它局限于仅仅围绕使用编程语言。不要尝试做一些全栈的事情 (即从用户界面到数据库,您使用了所有的技术) — — 你可能需要使用一些种现有框架或 API。

对于您的第一个真正的项目,您可能会考虑复制一些已经存在的东西。寻找一个简单的应用程序,比如一个待办事项列表的 app 应用程序,然后尝试直接去复制它。不要让你自己站在学习设计技巧的角度去写代码

您即将要进入"只是它不能运行"的过程了。不要让这些问题使你沮丧。你要学习成为一个好的问题解决者,那么就永远不要让这些失败来阻止你向前。你并没没有失败。你只是发现了一种方法,只是在这种方法下,这个程序不能运行而已。那么就寻找另一个解决办法。解决一个问题可以有很多种不同的方法,有可能您的方法是另一个问题的答案。

无论如何请记住,谷歌永远是你的朋友:)

第 3 步: 学习一个框架

现在是时候把重点放在学习一个框架上了。您已经熟悉了您的编程语言并且您已经建立了一个小应用程序,所以现在应该告诉你如何去构建更大更好的应用程序并且更快的生成它们。

框架可以在上述所说的地方帮助您进行开发。框架是一套其他开发人员编写好的代码库(通常人们参与创建它,但不是总是这样)并且您可以使用它。在这些库中已经实现了一些常用的功能,比如程序经常要处理的一些琐碎的事物和任务。在这个库中通常也会创建一些常用的数据结构,所以您不必亲自去做这些事。

出人意料的是,我见过很多开发人员把这一步跳过或忽略了,不过到最后他们还是只有回过头来学习它。框架可以帮助您把您的工作做得更好。您可能知道如何用您的语言实现哈希表或链表的数据结构,但很多时候这是只是在浪费时间和精力。因为这里已经有一个很好的框架帮您完成了这些事情。

花一些时间来学习框架的里里外外。它将帮助您更快地开发,并且不用重复的编写其中已有的逻辑。它也很周到的给您提供了一些函数库。所以你可以放心的使用这些"封装"的代码。

第 4 步:学习一门数据库技术

大多数软件开发人员需要知道一些数据库技术,因为大多数应用程序都有一个后端数据库。因此,您一定不能忽略学习此方面的时间和经历的投资。

在以前,如果您只是学了 SQL 语句(结构化查询语言) ,那么您在您的这一领域算是入门了。不过在现在,有很多种不同类型的数据库技术和查询语言充斥在我们的周围,并且它们正在被使用着。

我对您的建议是去学习最受欢迎的以及您选择的框架所要使用的数据库技术。例如,如果您选择 C# 作为编程语言以及 .NET 作为您的框架,那么 SQL Server 可能是您最好的选择,并且 SQL 语句将成为您的查询语言。另一方面,如果你选择了 JavaScript 和 Node.js,那么 MongoDB 将是一种很好的数据库技术,但 MongoDB 使用的是用来查询文档数据库(不是传统的关系数据库)的查询语言。

这些便是所有的您想探究的东西,因此您可以了解如何"获得"和如何分析持久性数据!

第 5 步: 找一份工作来支持现有的系统

很好,现在您已经有足够的技能和知识得来作为一个软件开发人员去找一个基本的工作。如果您告诉我您已经了解编程语言的基础知识,可以使用框架来工作,并且了解数据库技术以及建立了自己的应用程序,和很多雇主一样,我当然也想要雇佣你 。

现在,当然,这份工作可能不是您梦想的工作,而且它甚至可能会很无聊。它不再像创造新的东西那样的令人激动了,但这项工作的目的并不是去玩或者赚钱,而是学习和积累经验

和开发团队中的成员一起使用现有的应用程序,将帮助您拓展您的技能,可以了解大型软件系统是怎样进行构建的。可能您的工作是修复 bug 或添加一些小的事物,但是您可以学习,把你的技能投入到行动。

完全把您的精力放在这份工作上。学习一切你可以学习的东西。尽可能的把工作做到最好,不要去想赚钱,加薪的事情或者玩政治游戏 — — 这些东西到后来您都可以获得 — — 现在,只是专注地做这些有意义的工作,尽可能的扩充您的技能。

第 6 步: 学习结构化的最佳做法

当您到达这个步骤的时候!您已经知道很多了,您也拥有了很多属于您自己的经验了。恭喜!现在您想要关心的是自己是如何写好清洁、 可维护的、 可测试的、 可读的和友好 (我在这里把它排到了最后) 的代码。

通过阅读以下书本来扩充您的库:

  • 《代码大全2》

  • 《代码整洁之道》

  • 《重构》

  • 《修改代码的艺术》

  • 《编程珠玑》 -- (完成上面的练习)

语言特定结构的书如下:

  • 《Javascript语言精粹》

  • 《Effective Java》

  • 《Effective C#》

现在不要考虑和担心太多有关设计以及设计模式的问题。现在您只要集中精力学习如何在结构化过程中写好你的代码,并利用现有的系统来工作。你应该努力的去获得能够轻松地在您选择的编程语言上实现的算法的能力,并且很容易被阅读和理解。

第 7 步:学习第二门语言

现在您已经进步了很多了。当您进行到这一步的时候,您进步的最好的方式就是学习第二种编程语言。您也会毫不怀疑,当您到达这一步时,您也期望接触不仅仅是一种编程语言,现在您会想要把重点放在一种新语言 — — 理想的情况是一种和您以前使用的截然不同的语言。

当您仅仅只是很了解一种编程语言的时候,您很难了解哪些概念在软件开发中对您使用的编成语言而言是独特的,哪些概念超越了某一特定语言或技术。

当您选择一种新的技术并且学习完它的里里外外时,您会开始以不同的方式看问题。这样您就会对一些编程问题有不同的看法,然而这些问题在您的第一语言中您并没有考虑过。这已经毫无疑问是一种帮助我学习黑客来加速我开发的能力的一种方法。所以请不要跳过这一步!

有句俗话说的好"当您拥有一把锤子时,任何东西看起来都像一个钉子"。这的情况说的就是如果您不摆脱束缚去把第二种语言学得就像您的第一语言那么好,那么您就不会发现您有惊人的能力。

第 8 步: 建立一些实质的东西

这一步才是是真正的乐趣所在。现在是时候来使用你已经拥有的开发技术来开发一些比较大并且比较新的东西了。创建一些你以为你能做的项目吧。

选择一个可以用上您的所有技能的项目。请确保把数据库、 框架和一切您需要用来构建一个完整的应用程序的东西进行合并。这个项目至少会花费您一个星期的时间,并且在这期间您需要认真思考其中的一些东西。您可以通过这个项目来挣取一部分钱,试这样的话你会认真的对待它,并且激励着你一直坚持做下去。

选取一个完全由您自己从头开始从上到下创作的并且可以自豪的给您的朋友家人进行展示的项目。这样会提升您的自信心,会让您自己知道你可以和这些最好的开发人员一起坚持下来把这项工作完成,当您以后在面试一份工作的时候,这将成为一个给你的雇主进行展示的重要的资本。

第 9 步: 找一份工作,创建一个新的系统

很好,现在是时候再去找一份工作了。当你达到这一步时,你几乎已经获得了你可以在这个工作中获得的所有好处--尤其是您仍然只做那些维护性的工作。

现在是时候去找一份具有挑战性的工作了。理想情况下,你想要找一份可以和一个团队来共同建立一些新东西的工作。

你可能不是这个应用程序的构建者,但参与创建这个应用程序将帮助您扩展您的技能以及在不同的方面挑战你,这比仅仅保持现有的代码更具有益处。

第 10 步: 学习设计的最佳做法

现在是时候从初级开发人员变成高级开发人员了。初级开发人员维护系统、 高级开发人员构建以及设计它们。(这是一个泛泛的概括,很多情况下,一些高级的开发人员也维护系统)。

现在你应该准备好来建立一个系统了,但现在你需要学会如何来设计它们。

你应该将您的学习重点放在设计的一些好方法上,一些高级的主题如下:

  • 设计模式
  • 控制 (IOC) 的反演
  • 测试驱动开发 (TDD)
  • 行为驱动开发 (BDD)
  • 软件开发的方法,例如: Agile, SCRUM,等等
  • 消息总线和集成模式

完成此列表所列举的内容可能会花费您一段时间 — — 在这些领域里面你永远不会觉得自己已经学到了足够多的技术。首先要保证你在做的事是重要的-这很大程度上取决于什么东西吸引你、你想要从事什么样的职业。

你在这里的目标不是去建立一个别人设计的系统,而应该形成你自己的关于应该如何设计软件以及如何为不同的问题设计不同的体系结构的观点。

完成了!你的人生完整了!

我只是开个玩笑。你永远不会真正的完成学习,这也是作为一个开发人员的有趣的地方 — — 这里总是有很多的东西需要去学习以及总有新的思想和技术被创造着。

下面有一些东西,在你完成这 10 个步骤的过程中你也可以遵循。我难以在每一步一一列举它们,我会在这里简要的列举它们:

— — 整个时间你都在学习东西,你还应该也教教别人。不管你是一个初学者或专家,你都有价值的东西可以去教别人,此外,教学是学习的最好方法之一。记录下您的过程和旅程,一路走来帮助别人的事情。

— — 永远不要停止学习,永远都不要停止阅读,至始至终的阅读书本,总是会提高你自己的。你永远不会完成你的学习旅程。你也永远不能知道所有的东西。如果你在你职业生涯的过程中不断的学习,你会不断超越你的同龄人。

— — 在这一路走来的过程,不只是学习,还要做。把你正在学习的一切付诸行动。留出一部分时间来练习你的技巧以及编写代码来创建一些东西。你可以阅读所有学习打高尔夫球的书籍,但是如果你不挥动球棒去练习,你永远不会成为 Tiger Woods。

如果你喜欢这篇文章,请花一分钟把它分享给你认为可能会对他们很有用或者会订阅我的博客 @ jasonroell.com 的人或跟随我的 LinkedIn 账号。让我知道在你们的评论中来了解你们在软件开发者的旅程的收获吧!

原文地址:https://www.linkedin.com/pulse/how-become-great-software-developer-jason-roell