vlambda博客
学习文章列表

高效程序员的敏捷开发好习惯-02

即使你已经在正确的轨道上,但如果只是停止不前,也仍然会被淘汰出局。



学无止境


逆水行舟,不进则退


    软件开发行业是一个不停发展和永远变化的领域。程序员需要持续不断的学习和充电。虽然有一些概念一直有用,但还有很多知识很快就会过时。从事软件开发行业就像是在跑步机上,你必须一直跟上步伐稳步前进,否则就会摔倒出局。

    对于新技术,我们需要持续的关注与学习。给自己投资,也要努力对团队投资,让大家与时俱进。学习新的技术与新的开发方法,同时需要摒弃陈旧和过时的开发方法。那些曾经你认为很明白的事情,现在也许并不是你想象中那样。

    “唯有变化是永恒的。”在当今快速发展的IT时代尤其如此。如果你觉得自己已经学完了所有知识,那你就大错特错了。你也许会想:“软件技术的变化如此之快,势不可挡,这是它的本性。继续用你熟悉的语言做你的老本行,你不可能跟上技术变化的脚步。”怀着这种心态吃老本,总有一天你会发现自己已经被时代所淘汰。

    技术发展的步伐如此快速,简直让人们难以置信。就以Java为例,你掌握了Java语言及其一系列的最新特性。接着,你要掌握Swing、Servlet、JSP、JDBC、Spring、MVC、Web......并且不幸的是,你如果只是掌握了当前工作中需要的技术还不够。那样的工作也许几年之后就不再有了,或者你更换工作时发现外面的世界使用的技术已经超出了你现有的技术储备了,那么你也将会出局。

跟踪变化

    你不需要精通所有技术,但需要清楚知道行业的动向,从而规划你的项目和职业生涯。你能嗅到将要流行的新技术,知道它们已经发布或投入使用。如果必须要把工作切换到一种新的技术领域,你能做到。

  • 如何才能跟上技术变化的步伐呢?

1、迭代和增量式的学习。每天计划用一段时间来学习新技术,它不需要很长时间,但需要经常进行。保持对新技术的敏感性与积极性,时刻保持着危机感。当你听到一些不熟悉的术语或者短语时,简要地把它记录下来。然后在计划的时间中深入研究它。

2、了解最新行情 。网上有大量关于学习新技术的资源。各种社区,文档,专业网站、博客、邮件订阅等。可以了解其他人遇到的问题,以及他们发现的很酷的解决方案。

3、参加用户组活动。听讲座,加入各种技术的用户组。

4、参加研讨会议。各种计算机技术相关的大会,各种厂商召开的开发者大会等。利用这些机会向专家学习,了解各种最新的技术趋势与解决方案等。

5、如饥似渴地阅读。找一些关于软件开发和非技术主题的好书,也可以是一些专业的期刊和商业杂志,甚至是一些新闻。

对团队投资


    “不要和别人分享你的知识——自己留着。你是因为这些知识而成为团队中的佼佼者,只要自己聪明就可以了,不用管其他失败者。”你是否如此或是在工作中遇到如此的团队成员呢?我相信大家在工作经历中一定遇到过,他们不仅对技术分享持有警惕,也对现有的业务系统实现持有封闭式的想法。他们为了保持个人在团队或公司里的重要性、专家地位、不可替代因素等会尽量考虑将核心的技术或业务系统牢牢的掌握在自身手上。

    然而团队中的开发者们各有不同的能力、经验和技术。每个人都各有所长。不同才能和背景的人混在一起,是一个非常理想的学习环境。在一个团队中,如果只是你个人技术很好还远远不够。如果其他团队成员的知识不够,团队也无法发挥其应有的作用:一个学习型、分享型的团队才是较好的团队。

    每个人都比你厉害吗?嗯,那太好了!如果你是团队中最好的队员,就没有动力继续提高自己。如果周围的人都比你厉害,你就会有很强的动力去追赶他们。你将会在这样的游戏中走向自己的顶峰。

“总是要成为你所在的那个乐队中最差的乐手。如果你是乐队中最好的乐手,就需要重新选择乐队了。我认为这也适用于乐队之外的其他事情。”——Pat Methany

    我们可以定期在团队内举行技术分享会,它可以是新技术、现有技术;可以是具体的算法、设计思想、新语言、框架、项目管理、沟通技巧等不一而足。通过分享会可以增进每个人的知识和技能,并帮助大家聚焦在一起进行沟通交流。唤起人们对技术和技巧的激情,将会对项目大有裨益。这样做,会让每个人都觉得自己越来越聪明。整个团队都要了解新技术,并指出如何使用它,或者指出需要注意的缺陷。

懂得丢弃

    敏捷的根本之一就是拥抱变化。既然变化是永恒的,你有可能一直使用相同的技术和工具吗?我们在不断学习新技术和新方法的时候,也需要学会如何丢弃。丢弃掉老旧过时的一些技术、设计、思维定式等。

    如果你想的是:“这就是我一贯的工作方法,并且是有原因的。这个方法也很好的为我所用。我一开始就掌握了这个方法,很明显它是最好的方法。从此以后就不要再改变了。” 但是随着科技进步,曾经非常有用的东西往往会靠边站。它们不再有用了,它们还会降低你的效率。

    例如,在过去,电脑和CPU曾经非常昂贵并且性能有限,而现在它们越来越便宜与强大。过去,为了达到想要的性能,大家可能会将大部分精力聚焦在各种诸如内存分配、优化编译等细节上。现在,开发者的时间才是紧缺和昂贵的资源。当某个功能点你花耗了一天的时间,通过各种难以理解的技巧去实现它。结果只需要简单的增加一点内存或扩展一下CPU的规格就能解决时,前者的开发与维护成本反而成倍于后者。

    打破旧习惯很难,根深蒂固的习惯不可能轻易地就丢弃掉。更难的是自己还没有意识到这个问题。丢弃的第一步,就是要意识到你还在使用过时的方法,这也是最难的部分。另一个难点就是要做到真正地丢弃旧习惯。思维定式是经过多年摸爬滚打才构建成型的,已经根深蒂固,没有人可以很容易就丢弃它们。

    学习新的东西,丢弃旧的东西。在学习一门新技术的时候,要丢弃会阻止你前进的旧习惯。新技术会让人感到有一点恐惧。你确实需要学习很多东西。已有的技能和习惯为你打下了很好的基础,但不能依赖它们。往往我们需要逼迫自己跳出现有的舒适圈,尝试去接受与使用一些新的工具和技术。比如你可以尝试更换一种更友好、更智能的集成开发环境开始。
    
打破砂锅问到底

    在计算机世界中很多问题都会影响你的应用系统。为了解决问题,你需要知道许多可能的影响因素。当找人询问任何相关的问题时,需要让对方耐心的回答你的问题,直到你彻底的弄明白为止。

    如果你想的是:“接受别人给我的解释。别人告诉我问题出在了什么地方,我就去看什么地方。不需要再浪费时间去追根究底。”有时候还有时间压力以及老板的耐心有限。那往往带来的结果就是为了快速修复或实现功能,你对系统一知半解,在你写下第一行代码的时候可能就埋下了新的隐患。

    在你加入一个新的团队或接手一个历史项目时,原有的团队成员可能比你更了解这个系统。但他们也是人,有时他们也会忘记一些东西。你的问题甚至会帮助他们理清思路。你从一个新人的角度提出的问题,给他们提供了一个新的视角,也许就帮助他们解决了一直令人困扰的问题。

    不停地问为什么。不能只满足于别人告诉你的表面现象。要不停地提问直到你明白问题的根源。你要能感觉到真正地理解了问题,而不是只知道表面的症状。

把握开发节奏

    在许多不成功的项目中,基本上都是随意安排工作计划,没有任何的规律。那样的随机安排很难处理。你根本不知道明天将会发生什么,也不知道什么时候开始下一轮的全体“消防演习”。

    敏捷项目会有一个节奏和循环,让开发更加轻松。我们需要更具远见,保持不同的开发节奏,防止所有事情同时发生,也不会随机发生,时间也不会不可预知。避免陷入到无限恶性循环中无法抽身。每天感觉自己或团队都在忙得团团转,但是真正有意义的产出却极少。

    规划好团队或自身的开发迭代周期。当时间到的时候,迭代就完成了。一个迭代周期不宜过长或过短,在这个迭代周期中,你可以调整功能实现的顺序,先难后易,先紧后松。尽量让你的进度保证可靠与真实。每天工作结束的时候,都能完成自己的工作,你手上没有遗留下任何重要的任务。下班离开公司前运行测试,并提交一天完成的代码,开心地收工。

    运用有规律的开发节奏,会更容易达到目标,并确保项目不停地前进。解决任务,在事情变得一团糟之前。保持事件之间稳定重复的间隔,更容易解决常见的重复任务。项目开发需要有一致和稳定的节奏。编辑,运行测试,代码复审,一致的迭代,然后发布。

    工作时间保持高效率,集中精力解决任务,不要搞得经常加班。在每天结束的时候,测试代码,提交代码,没有残留的代码。

    如果你发现每天大部分精力都被各种不断冒出的会议、维护、bug等搞得焦头烂额的时候,就需要停下来好好想想,为什么会出现这种状况?我们是否需要考虑提供一些机制或工具来解放你。

    如果类似的问题不断的重复出现时,我们是否有更好的方法来一次性解决它。有时候你为了节省当下的时间,快速的处理掉它。但是当下一次问题复现的时候一切又得重来一次。最终你不仅没有节省自己的时间反而损耗更多,还会不停的打断你的正常开发状态,影响你的心情,干扰你的视线,影响你的开发效率。


“生命不息,学习不止”


推荐阅读















 
长按二维 码关注
觉得作者写得不错,点个【在