我思考越深就越坚信,如今的程序员的最大挑战是没有时间学习新知识。当在学校时,人们都有大量的时间来学习新工具和新技术,但一旦完成学业,有了全职工作,我们就拿不出足够的时间来学习新东西了。而我们这个行业的变化却是日新月异,对于一个职业程序员,每周至少有40小时‘真正’工作时间,完全没有时间和精力去掌握各种的新兴编程语言,框架和技术,更别说精通了。我想这也就是为什么编程是年轻人的游戏的原因。
想象一下,你在一个大公司里,在一个稳定可靠的技术架构上写程序。如果你在这个项目上一干数年,但却没有时间在工作之余学习新的东西,那么,当项目完成时,也就是你的技术过期之日。至少你的市场选择不多了。此时也许你希望找到相似的技术工作(很可能是无聊和重复性的工作,但我猜大多数人都会有数次这样的经历),或花一些时间来学习最新最流行的技术(没有人会为此给你报酬),或干起非技术性的管理工作(也许是得到晋升)。
一旦你干起来管理工作,你在技术上将会越落越远。我见过一些走上这条道路的人,没过多长时间,他们就已经没有信心再去重拾编程的老路了。他们似乎忘记了曾经在编程界的骁勇。这种过早的从编程活动上的退休在我看来就是一种浪费,应该避免。
对于这个问题,有一些很容易理解的解决办法:
形成学习气氛。在公司里,学习他人并帮助他人,教学相长。
招聘一些善于学习的人,让他们在工作中引入新技术。
在学校里,我们有固定的学习制度/习惯,我们会严格遵守,去学习和实践。一旦离开了学校,大部分的我们再也不会延续这种习惯。是的,有动力的人会仍然读书,读博客,不让自己落伍。但即使最有理想的程序员也很容易跟不上时代。尤其是当我们有了配偶,孩子和贷款等。
能让我们保持进步最好的方法是在工作中和同事一起学习。我很希望公司能够贡献20%的时间来搞技术读书会、研讨会等,这些活动能让同事们相互激励保持进步。我认为团队中的每个人都应该花一些时间在一些非重要的上做一些前沿技术(至少对你是新的技术)的尝试。除此之外,团队成员应该和一些其他项目的人一起交流。这对公司员工有好处,也能让公司获得更多有经验的人。
我认为必须让同事成为我们的老师,公司应该鼓励开发人员相互学习,相互教育,传授经验。在公司内部要成形成教、学一体的风气。有一点很好,这些教和学很容易看出效果,它能在团队的开发工作上体现出来。如果你没有积极的从别人那学习,或没有积极的帮助他人,这说明你没有全身心的投入到团队中。
另外一个可以解决缺乏学习机会的方法是招聘一些善于解决问题、善于学习的人,让他们在工作中带入新的技术架构。当你的公司了已经有了很好的学习文化和技术风气,这种做法尤其有效。我在想,如果没有重新学习大量技术的压力,有多少大公司的中层管理人员会愿意重返编程活动。
如果让我来招聘程序员,我不会列出20多个重要技术掌握指标,只有一个要求:
招聘善于研究问题的人。应聘人要有能力和愿望学习新的知识,并把自己这些年学到的知识教授给他人。
你并不掌握最新最流行的技术,这些年只是在开发一款出色的产品?没关系,这最新最流行的技术并不难。如果你在你最近的项目中表现的很出色,你同样也会在我们的项目中表现的出色。
请放心在你的招聘启事中使用上面的话。也许我也会去应聘!