程序员如何持续提升自己的开发技能
这个世界唯一不变的就是变化,IT圈子不外如是。计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术。因此,作为一名程序开发人员,我们更要通过不断的学习来提高自己的技能。
如何选择读物
程序员需要的技能改变是如此之快,尤其是那些热点的/快速演变的领域,找到这些领域合适的阅读材料有时不那么容易。几点建议:
利用好关注该类技术的那些网站。比如,在我学习iOS的过程中,我一直关注 RayWenderlish.com 和iOSDeveloperTips.com,它们都有定期较新的内容发布。
如果你是想找些书籍,请尽量选择电子书而不是纸质书,编程是一个变革飞快的行业,除非是Knuth的《计算机程序设计艺术》,很多书几个月就过时了。
选一个实际的项目
记住这句咒语:“我听见的,我忘了;我看见的,我能想起来;我做过的,我理解”。
阅读是有益处的,但要想真正的理解某个编程语言/库或者技术,你只能亲自动手,真正的参与到一个使用这种语言/库/技术的项目中。”完成一个项目并 在其中运用到你想学的技能或特性”是一个很具体的可衡量的目标,”学习某种语言/库/技术“则太笼统了。一个清晰的目标有助于你了解你的进展。完成一个项 目则会使你获得宝贵的经验,有些甚至可以写到个人简历中。尽一切可能来用构建一个完整的项目的方式来学习,而不是根据阅读得来到东西学习一个范例。
绝大多数人都知道实际做项目而获得的经验是很必要的。难处在于怎样找到一个点子来开始一个项目。一些建议:
你这种新技能能否开发出一个家人或者朋友正需要使用的应用?我有几个小侄子,我发现给他们开发游戏是一个学习XNA/Cocos2D的绝佳方式;我很快还会为他们写一个基于Sprite Kit的游戏。
有没有什么开源项目正在使用你所学的新知识?你会发现贡献模块甚至创建项目给开源社区是一个很好的学习手段。有时从一个已有的项目继续工作比从头开始更加容易。
有没有什么盈利/非盈利组织可能用到基于这种新技能的应用?如果是这样,搞定它不但可以使你学习并开发出一个应用,并还可能获得一个用户群来给你提供大量的反馈。
教别人的同时学习
当我在微软作为布道者,想程序员们宣讲时,我常常撰写入门指南的演讲稿和在线材料。有些,我负责的是一些我很熟悉的领域,但微软拥有如此众多的工具和技术,并不断有新的东西涌现出来,我经常发现自己不得不学习新知识才能完成教程。
这也成为了一种非常好的手段来促织我学习新东西,因为教这些东西,你必须搞懂它们。由于你得把这些新东西转化容易理解的内容,传递给你的听众,以此 为目标促使你必须有合理的学习手段和方法。Floor Drees,一个澳洲的技术宣讲/布道者说到,“坦诚的说,我觉得教别人的过程能促使自己学的飞快,我鼓励每一个人去培训新人,即使你觉得自己也还只是个 新人。”
如果你能得到合适的研究和学习资料(幸运的是,在微软我通常能很容易的找到),并有足够的时间和工具去试验一些迷你的项目来得到更深入的理解,并且你很喜欢当一名老师(无论一对一或一对多)或者作者,你也许想要尝试教学的过程中来学习。
搞定拦路虎
当你的开发技能到了一定水准,你会偶尔遇到拦路虎:一些短时间内搞不定或理不清头绪的问题。
这是个好事,真的!如果你从不尝试新东西,那当然会发现已有东西对你来说都毫无挑战,这也意味着你没有真的在“求学”。最好的/有价值的学习经历正 是那些拼命搞定某一问题的时光。你极尽所能尝试各种方法并最终找到了解决方案,这就好像你在黑暗中探索,努力拼接出一条成功之路,这种能力在日后也会陪伴 着你。
在这段探索之路,你需要以下几个技巧:
找找看,确认是否你自己或者别人已经有一个项目解决了相似的问题
利用好在线开发者论坛。Stack Overflow是你的朋友,他这些年帮我解决了好多的问题。很多开发者社团也维护自己的论坛,确保自己检查过这些站点。
参加课程
很多程序员有这样的机会通过“构建自己的项目/看其他人的项目/教授课程“来学习。但这不是所有人的习惯,有人喜欢在教室里接受传统的课程。幸运的是这些同学也有很多可选的方案。
很多学校和社团都提供了对外公开的的编程课。如果你所在的城市有一些技术人员或者黑客交流中心,那么在那通常也有针对他们团体的一些编程指南,有时这是免费的。
在有些城市,那有新手入门课堂,在那你可以学习一门语言或一项技术,它通常会有一些密集的课程和上手小实验,这种培训通常持续几天或者几周。如果你 有商业上的需求,需要对程序员进行某种企业级工具/技术的培训,例如微软/甲骨文/Java或者SOA/云计算/敏捷开发,那么你可能需要找到某个类似 Web Age Solution这样的培训机构来帮助你完成。
推荐阅读: