程序员从初级到大牛的蜕变程序员
程序员从初级到高级的蜕变
软件开发是一个奇怪的行业,市场远远供不该求。这是一个已经存在多年的问题,并且随着时间的流逝,愈演愈烈。
咱们严重缺少可以知足需求的人才。这个行业至关年轻。大多数软件项目是失败的。几乎全部的项目都会超出预算。咱们解决问题的最佳指导方针能够归结为——“用一些通用方法去解决问题,固然这些方法经常无论用,因而,惟一能作的就是不断地尝试,逐个看看是否奏效”。
如今咱们把淫浸代码时间超过3年的开发人员称为“高级开发人员”。这些人一般把持领导岗位,最终作出来的东西,你懂的——很是糟糕。
软件开发人员的成长阶段
做为程序员,咱们生活在复杂的系统和变量世界中。能够这么说,即便是执行一个简单的,定义明确的,重点突出的任务,都使人难以置信的难,尤为是若是你对你手头的工具,或者是你正在工做的代码库不是那么有经验的话。
1、 初级程序员
初级开发人员是这样的,刚从学校出来,就像坐井观天中的青蛙同样,自认为何都会。忽然间,你发现本身面对的问题,靠学校中的那点知识是远远不够的。问题要更复杂,更凌乱,没有理论上说的那么纯粹。你正处于放弃仍是坚持的分叉路口,你不知道该怎么办。
对策就是专心致志,专心致志地不遗余力学习。初级开发人员须要大量的指导、监督和辅导,不然他们将会在这一阶段呆上很长一段时间。所以,实际上你也能够将这一阶段视为策略和平常技术的吸取消化时期。
初级开发人员关注代码,而不注重开发,他们不明白二者之间的区别。若是一个程序员表示“要是代码不须要面向全部用户,那他们会更喜欢编码”,那么我能够判断这是一个初级开发人员。
一个优秀的初级开发人员给定一个已知任务以后,就可以迅速良好地执行。
中级开发人员逐渐可以意识到失败(一般是他们本身的失败)模式,并认识到比起实际构建匆匆忙忙去作重点任务其实所须要的时间和精力更多,而且也不会由于有人说要改一改而一会儿垂头丧气。他们也经历过自觉得写出了引觉得豪的内容,实际上证实是垃圾的悲惨遭遇。
2、 中级程序员
中级开发人员寻寻觅觅于用正确的方法去构建,去解决问题,他们会经过实验、文献和与其余程序员的讨论去发现这些正确的方法。这实际上已是学习软件架构的水准,而再也不是构建代码(咱们在学校里学的就是这个)水平。
没有受到监督的中级开发人员构建的系统之因此失败的缘由和初级开发人员的失败缘由大相径庭。初级开发人员会构建一堆稍微有点用的算法。而优秀的中级开发人员会跳出《Design Patterns》和《Domain Driven Design》的禁锢。虽然这些都是学习构建大型OO系统的好书,可是直接应用理论只会致使死板的设计结果,不重要的地方灵活多变,重要的地方却又死板没法更改。
你能够信任中级开发人员构建的系统,他们的系统毫无疑问比初级开发人员作的要好,可是时间久了,依然会有各类问题出现,成为拦路虎。一个可悲的事实是,绝大多数高级开发人员,甚至团队领导者其实都还只是——中级开发人员。固然,大多数人都没有这样的自我觉悟,缘由是他们根本没有和更高水平的人一块儿工做过。
一个优秀的中级开发人员应该懂得使用代码来解决问题只是一种手段而不是目的。然而,他们仍然深爱着纯粹的设计,仍然渴望寻求所谓“正确的方式”来构建软件。
优秀的中级开发人员依然须要少许的监管。毫无疑问,他们可以提高代码设计,并在设计讨论中发挥重要做用。他们是开发团队中的主力。可是,对于他们,进一步的指导和更高层次的监管依然相当重要。
3、 高级程序员
高级开发人员熟悉失败。他们已经经历过编写的代码在低于设计和超越设计的状况下都失败的状况。他们深思熟虑,在面对问题时,可以心智成熟地评估成功与失败。高级开发人员已经跳出了中级开发人员深爱的复杂性,开始沉迷于简单。
高级开发人员悉知本身的长处和短处,力争尽量地扬长避短。
高级开发人员深知理论联系实际的重要。他们明白,世上没有所谓的构建软件的“正确方式”,创建良好软件的惟一途径是要将理论适应客户、代码库、团队、工具和组织的需求。
高级开发人员理解并权衡领域涉及的一切,同时会思考如何去支持设计模式、库、框架和流程。
高级开发人员不只仅了解自我,还知晓组织和客户的工做方式和价值观,以及对于组织和客户而言成功相关的重要和不重要的因素。一旦出现问题,高级开发人员会千方百计地去解决。“这不是个人工做”——他们永远,永远也不会说这样的话语。
高级开发人员内心明白,他们的工做应该是提供解决问题的办法,而不是写代码。
不像中级开发人员辛苦耕耘于枯燥的平常工做,高级开发人员会退一步,去思考是什么致使了这些无聊的工做。他们会评估修复根本问题的成本,要么直接解决这些问题,要么研究起来以便于最终完全解决。
高级开发人员明白,单枪匹马是搞不定项目的。他们的主要做用是帮助团队变得更好,同时争取我的共同进步。
高级开发人员深入理解,领导一职表明的不是权力,而是受权,不是方向,而是服务。
若是你的团队中一个高级开发人员都没有起到领导做用,那么你的项目是注定要失败的。一队伟大的中级开发人员当然能让你走得很远,可是他们构建的软件的好日子倒是屈指可数的,其最终结果要么是关门大吉,要么是高风险高成本的重写。高级开发人员才是惟一能胜任选择技术和平台的人。
简单粗暴的分类方法
我很是讨厌如今流行的根据工做经验年限来给程序员划分档次的方法。多年的经验的确能让你增长见识,但这都是一些几乎毫无心义的背景信息。
更重要的是,咱们的行业须要刚从大学毕业活力四射的年轻人,也须要那些有着15—20年工做经验的老程序员。咱们应该从团队和企业的角度来思考人才组成。 算法
Andaoid特效
设计模式