不少人都在想着如何成为一名高级工程师,而我想要的是先成为优秀的初级工程师。 算法
明年将是我正式受雇佣写代码的第15年了。(译者:老外的写代码职业生涯真的挺长的)编程
回首往昔,我第一天工做的日子仍然历历在目。那时的我天天都在格子间中写着SAP、算法、数据结构、SQL和C++,还涉及了更普遍的主题,包括知识管理和项目管理。我了解全部的这些知识,但我缺少的是在须要的地方使用这些知识的信心。设计模式
我花了不少年才得到这种信心,在那时,我也意识到实际上我只须要作到两件事就能够成功:数据结构
这二者都是养成的技能,不只须要努力,并且还要谦虚的认可本身的无知,并与适合的人交流以消除这种无知。这就像三个正在创建隔离围墙的工人的故事。框架
你问第一我的他在干什么。他说他在搭砖头,他并不担忧本身作的对或错。第二个工人说他正在建造一堵墙,但并不知道为何要建这堵墙。第三个眨着眼睛充满热情的工人说他正在建造一座大教堂。他为本身在建造大教堂时能发挥做用而自豪。ide
优秀的初级开发者应该像第三个工人同样。他们与大方向保持一致,而且按照本身的方法不断进步。他们知道本身正在解决什么问题,而且为本身在建造大教堂(软件开发)中发挥的做用感到自豪。最后你须要保持谦卑,埋头工做,你会获得你想要的。学习
还有一些我做为初级开发者时学到的比较好的东西想要分享给你。测试
Elbert Hubbard说过:编码
永远无知的秘诀是:对你本身的意见和知识感到满意。设计
The recipe for perpetual ignorance is: Be satisfied with your opinions and content with your knowledge.
你是一名初级开发者,你并无了解全部事情,这不要紧。即便在行业内打拼多年的资深工程师,也不是能了解全部的事情。无知并非错误,不暴漏出这种无知才是更严重的问题。
在开会、讨论、进行代码演练时,你会听到几件事,这些事会在你脑中转瞬即逝。不要伪装本身理解并点头,不懂就问。若是你不说出来,就错失了学习的机会,这最终会危及你的职业生涯。
在多年后的今天,我天天仍然会问许多问题。记住,没什么是愚蠢的问题,问一个愚蠢的问题并弄明白比成天坐在屏幕前要好得多。
加快得到缺失知识的速度最好的方法是在每个机会中暴露本身的无知。
Rasheed Ogunlaru说
读到的代码有多好,写出来的就能有多好。
How you look at the code is pretty much how you’ll see it.
我还记得个人第一个研发任务,须要我为现有功能编写出口,而我在这个任务上花了50个小时。周一我向领导汇报时,她说:“咱们有现成的实现这个功能的代码,你应该直接用,这样能更快作出来。“
我错在哪了?我没有去读已有代码。现实生活中,开发人员每每在读代码上花费的时间要比写代码多。即便是添加新功能或纠正缺陷,也须要了解已有代码。这没有捷径,读代码,读代码仍是读代码。
读代码可让你了解别人是怎么写代码的,以及有哪些你能够复用的库。须要注意的是:
记住,聪明的开发者不会重复造轮子。他们会尽量尝试服用并构建已有功能。这不只节省了时间,并且在共享代码的开发人员之间创建 了友情。
如今已经有了解决问题的办法了。因此当你尝试完成一个功能时,先看一下其余人是否已经解决了这个问题。这不是偷工减料,而是在努力完成。
Elbert Hubbard提到了一个避免批评的最佳技术:
想要避免批评就要什么也不说,什么也不作,什么也不成为。
To avoid criticism say nothing, do nothing, be nothing.
咱们全部人都喜欢接收赞美,在别人称赞咱们的工做时会感到很开心,这没问题。然而做为一名初级开发者,相比赞美,我认为你更应该接受建设性的批评。良药苦口利于病。
我记得我第一次接受一名资深工程师的代码审查。在40分钟时间内,他细致的审查了个人代码,结束时,他的评论比个人代码还要多。通过这么多努力,我真的很难过。但此次代码审查确实帮助我发现了个人短板,并向我详细展现了我能够改善的地方。这是我前进道路上的启明灯。
也就是说,想要获得建设性批评,就要主动寻求。我合做过不少资深工程师,他们从没拒绝过个人请求,即便他们很忙。固然,你须要根据他们的时间制定可行的日程,以进行有意义的会话。
若是资深工程师花时间帮你审查代码并提出一些改进意见,表示他们对你的工做颇有兴趣。不要浪费机会,主动上去寻求建设性批评。
正如Andy Marks所说:
若是你对你的代码感到自豪,就把它展现出来。若是你没有展现出来,意识到你的自豪感的人都是想与你合做的人。
If you take pride in your code, it will show up in the code. If you don’t it also shows. The people who recognize your sense of pride are people you want to work with.
Murat Ildan说过:
想要看到更多风景,就走出黑暗的山谷,爬上光明的山顶!
To see the big picture, get out of the dark valleys, climb to the sunny summits!
还记得咱们讲的三个工人的故事中那个知道本身在盖教堂的工人吗?关注大局每每就是这样。做为一名初级开发者,在大多数时间中,你只会接触一小段代码或者解决已有代码中的bug。你在完成分配给你的工做,这没有错。但若是你想成为整个交易的一部分;你须要花点时间找出交易的所有内容。
你调整视角,并询问有关代码如何适应整个系统的问题。
为何使用特定的设计模式?
为何使用特定的语言?
缺点是什么?它能够与你的代码一块儿使用吗?
这些代码是否易于维护?
等等……
最好也是最简单的方法是得到导师的指导。技术导师能够帮助你提升技能水平并经过大的项目帮你巩固。可是没有明确的方法去寻找技术导师。也许是一杯咖啡就能够打破僵局。
大多数初级开发者由于不理解功能或者对项目目标作出假设而犯错。花时间了解系统运做的实际状况将会对你成为优秀的开发者有很大帮助。
很长一段时间中,我都认为一名优秀的高级开发者就是拥有多年的开发经验(5年Java,7年Python等等……)。经验越丰富就越优秀。
可是我错了。一名优秀的高级开发者不只仅是只了解编程。他们充满好奇。他们是优秀的导师。最重要的是他们具备难以想象的代码意识,知道何时不作某事。例如,他们知道从头开始重写一个库只是为了使其更具备可读性,或者在团队选择旧框架时切换到新的框架并不老是明智的选择。他们不是在规则风险。他们是更加谨慎的作正确的事情。
不是每一个人在他(她)的职业生涯中都能成为“高级”开发者。一个好的高级开发者不只须要好的经验,还应该有正确的态度和能力,以便未来应用这些经验。资历与能力有关,与年龄无关。
就像Kevin de Leon说的:
若是你什么都不作,资历就没有任何意义。
Seniority means nothing if you do not do anything with it.
https://medium.com/swlh/how-to-be-a-good-junior-developer-cd86b77086fc