通常我们说程序员需要在某个技术方向积累一定的厚度,能够运用技术有效解决实际问题。但是,当程序员长期沉浸在某种技术中时,往往会出现另外一个问题,那就是:看问题的时候,受限于自身的技术积累。我打算从几个角度来探讨这个话题。一定有某种技术最适合解决某个问题。有些人熟悉C++。当开始一个新的产品或项目时,比如做一个AndroidApp,他们会考虑如何使用C++来实现目标,所以他们会寻找可以在移动端使用的C++框架,比如Qt,比如NDK+NativeActivity...这是一种受限于现有技术的情况。其实我们完全可以跳过C++的壁垒,直接上Java!在我看来,技术是用来解决问题的。当我们要解决某个问题,达到某个目标时,可能有很多种技术,每一种技术都可能可以实现,但不同的技术面临的困难和付出的代价不同。成本肯定不一样!对于企业和个人来说,应该选择综合成本最低的技术。我们在选择技术方案的时候,应该问“这个技术适合解决什么样的问题?”,“什么样的技术最适合解决这类问题?”问题?”。如果你总是用自己掌握的技术尽力去解决所有的问题,虽然这种对未知的担忧、对变化的恐惧、对尝试的恐惧是可以理解的,但我认为这不是一种健康的、健康的方式。良好的态度,也不是有益的习惯,它实际上发出了一个警告信号,“你被你所学的技术所奴役”。要知道,我们学习技术是为了解决问题,我们需要能够灵活、有效地控制和使用我们掌握的技术,而不是把自己交给某种技术,被技术所左右。一字螺丝用一字螺丝刀,内六角螺丝用内六角扳手。这是一个非常直接和简单的道理,我们在生活中会下意识地遵循这个规律,但是一旦面对科技这样比较复杂的事物,我们往往无法回到事物的本源,这就需要我们去思考。拒绝改变技术跳槽时的hnology当一个程序员掌握了一门技术(比如Java、C++、Qt、Spark...不使用Spark的公司。不会用Qt的帖子不考虑。。。其实我觉得这个没必要。当然,学习一门技术是要付出代价的。用熟练的技术解决问题,会给你一种信手拈来、事半功倍的感觉。这是非常好的。可是等等!你真的打算在你的余生中将自己限制在某种技术上吗?你以为你是做了N年程序员才掌握这门技术的吗?我不这么认为。你精通某项技术,这对你来说当然是一个很重要的收获。但这绝不是最重要的。真正重要的是以下两点:学习能力?解决问题的能力?是的,你没看错,这才是程序员掌握一门技术后真正收获的。你通过掌握和精通一门技术,发现自己的学习模式,确认自己的学习能力。如果你什么都懂,那么学习其他技术会快很多,因为你在学习中获得的经验和认知是具有普遍性的。所以,我认为,发现自己的学习模式,强化自己的学习能力,是核心和重要的收获之一。还有,技术就是一把剑,这把剑的威力,就看使用它的人如何因地制宜、审时度势地使用它了。攻防之道妙在心。真正的高手,能摘叶飞花伤人。这就是解决问题的能力。同样是太祖长拳,在乔峰手中,有着毁灭性的气势和震撼人心的威能。这是乔峰的能力,独立于太祖长拳之外。程序员也是如此。所以解决问题的能力是一个非常重要的收获。如果你确认你已经获得了学习和解决问题的能力,那么具体的技术并不重要,它不应该成为你选择新工作或新产品的绊脚石。没有界限,天高海阔任你遨游。招人的时候,一定要精通某项技术。我们会发现,大部分公司在招聘开发工程师时,都会列出“精通J2EE”、“精通MySQL”、“熟悉Hadoop”等非常详细的技术要求。对于公司来说,招聘有相关经验和技术的人才,可以大大降低一个产品(项目)的成本,这无可厚非,因为公司对成本很敏感。但是对于程序员来说,有时候这是不公平的。这种不公平体现在两点上。一是没有相关技术经验的程序员会失去学习新技术的机会,对于刚毕业或者打算转技术方向的程序员来说更是残酷。二是技术匹配的程序员,自身的发展会因为公司的这种倾向而受到限制,甚至会停滞不前。他们会认为你只是想用我现有的技术和经验来解决你的问题。技术人员的价值在不断克服新挑战的过程中得到提升。如果他们失去了面对这种挑战的机会,他们的能力和水平将停滞不前,甚至倒退和下降。其实在我看来,在招聘人员的时候,有没有相关的技术并不是最重要的。程序员有没有学习和解决问题的能力是关键!具有优秀的学习能力,能够快速掌握产品所需的各种技能;具有解决问题的能力,他必须能够解决新产品开发中不时出现的各种事故。也就是说,公司在选择程序员的时候,应该从一个人的天赋和能力出发,而不是专注于某项特定的技术。合适的人会给公司带来更多。与合适的人一起,成功是可以预期的。总之,不管你是程序员,还是需要程序员的公司,都应该从人才的核心做起,发现关键的人才和能力。不要被特定的技术蒙蔽了双眼,不要让已有的技术成为负担,不要让你的视野受到必要的限制。心无边际,未来无止境。
