核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的的优势,这就是核心竞争力。
那么程序员的核心竞争力是怎样的呢?一名优秀的程序员肯定有以下的几种能力:
1.编程能力
这个毋庸置疑,做为一名程序员,能写代码、写高质量的代码,可以说是基本功,离开了这个,就像无根之木,无源之水,谈再多也没用。这个可以和公司内的高手学,私下利用业余时间丰富理论知识,多看一些开源代码,从模仿到动手尝试、再创新。
2.分析解决问题的能力
本质上来说,老板请你来都是来解决问题的,你能解决问题,才能体现你的价值,才有加薪的筹码。
一个项目、一个任务,或者一个bug,都可以看做是一个问题,你是否能够快速的分析情况,脱离表象找到问题的根源,或者把一个大问题分解成若干可以处理的小问题,并在规定的时间内解决它,可以说是考量你技术水准的重要唯一标准。
这种能力如何培养呢?
两种途径:
(1).丰富的行业经验,你经历的多了,自然就会知道该怎么处理了,俗话说没吃过猪肉还没见过猪跑嘛,大概就是这个意思。
(2).有意识的学习一些方法论,锻炼自己的结构化思维,不仅仅是对工作,对生活的方方面面,都挺有用的。推荐关注一下刘未鹏的《暗时间》,是专为程序员写的方法论,他本身也是一名程序员。一些厉害的PM,基本上不摸代码了,但是听手下人说一下情况,还是能快速的找到根结,离不开他们的从业经验和系统的思维方法。
3.良好的工作态度
不同的公司有不同的文化氛围,有比较看重的价值观。且以为对于程序员来说,最重要的一个态度,就是不能凑合。一般的程序员在发现问题以后,东试试西试试,能解决问题就行了,但是优秀的程序员觉得不会妥协,一定会试图去分析产生问题的原因,根本的解决方法,甚至要去看Linux内核代码也毫不妥协。
4.自我学习的能力
众所周知,程序员是一个很苦逼的职业,技术更新日新月异,产品换代更是以月为单位计,不学习如何能长久?
这里的学习又分为两大块,一块为技术知识的学习,包括编程技能,基本原理,算法结构以及与工作环境密切相关的知识,另外值得特别一提的是经典开源代码的学习,这是成为高手的必经之路;
另一块为产品知识、行业动态的学习,国内一般情况是写代码比较好或者比较久的人,就开始带团队,如果没有这方面的积累,就会比较困难,另外就算一门心思做技术,多了解一些也有利于加深对需求、功能的理解,不是什么坏事。
5.沟通能力
听说读写都很重要,对新手来说听和说尤其值得注意。
听是说一个任务下来,要听清楚问题是什么,需求是什么,有什么条件,听清楚了再动手。说是要表达有条理,说的清楚来龙去脉,说的清楚解决问题的思路。有些工作了好几年的程序员,连一个复杂点的问题是怎么回事,都说不清楚,东一下西一下,一点逻辑结构都没有,很明显他的思路就是混乱的。
这里还要补充提两点,一个是问,不清楚的一定要问,不要装,其实你进公司做三天事,你大概是个什么水平,什么样的思维模式,你的领导就一清二楚了,装也没用。
另一个是反馈,一件事领导交待给你,你要在关键结点给他反馈,告诉他做的怎么样了,有什么困难,下一步准备怎么做,需要什么支持等等。不要等到领导来问,才告诉他你有什么问题搞不定,我不知道别人怎么样,反正我对这种情况是深恶痛绝的,这样搞两次以后,我基本上就不会把很关键的任务交给这个人了。
6.不断总结归纳
对一个问题,一类问题,以及不同类型的问题,善于归纳整理,不断反思自己的问题,即便是不出bug的代码,你经过一段时间去回头看,也有很多思考不正确不合理的地方,有很多优化点,如果你觉得自己的代码一向牛逼,毫无破绽,那你一定是原地踏步,毫无进展。
工作经验需要日积月累,但有些人工作3年就超越了那些工作10年的人,工作年限并不能代表你的工作能力,只有不断增强自己的核心竞争力才能在公司处于一个至关重要的岗位,薪资才能快速增长。
对于软件开发人员来说,通常,他们职业发展有几个选择:专注于技术,成为技术专家;转型到技术型销售、技术支持等;所以要想走得远一点,必须有一项本领是过人的。 随着技术成长,从技术性管理到高级管理。这是大家都看得清楚的方向,也都在向这些方向的金字塔尖努力。但是无论那个方向都要学会多读书。
程序员要根据本身的基本素质、技术能力选择开发层次,由低到高,逐步发展。 也是一名程序员本身具备相应素质的循序渐进的发展轨迹,包括很强的技术背景和综合管理才能等素养,这也就是所谓‘两条腿走路’的职业规划发展路线。”如果这样的话,我相信你总有一天能达到自己的理想标准。
学习、学习、再学习
程序员是一种既具备蓝领特质,常常又被人认为是白领,通过它还可以转化成金领的职业。那如何从一个码农到引领行业技术变革的领袖,关键是程序员要不断的提升自己的核心竞争力,要不断的进行学习和自我升级,一万小时的投入能够让人变成专家,而以下几点会让程序员更加高效的学习。
精通两种语言
没有错,这里明确指的就是两门,是要有不同内涵的两门,其中一门是要主流的,关键还要都精通。要求就这一些,原因如下所述:不同语言有不同的思想内涵,如java是静态的、面向对象的, Python是动态的,C是面向过程的,R语言的向量化思想很重要。一个精通了java的程序员往往写Python、R效率会很低,因为他写出来的都是基于java思想的逻辑。所以一定要掌握语言的精髓,学习两门不同内涵语言有助于你举一反三,增强学习能力,其中一门主流语言会让你更容易找工作而生存下来,另外主流语言通常是最经典、最完善、最严谨的语言。而人的精力是有限的,语言大多又是相通的,两门足矣。
掌握计算机基础原理
基础包括计算机组成原理,不同平台的操作系统,数据库内部机制等,要深刻理解一段程序在计算机内转化成0和1是怎么运行的。往往在程序开发和运行过程中出现的性能瓶颈,罕见的异常或是某些难以重现的bug,都是因为缺乏对于计算机整个体系的基础知识而无法下手解决。因此不要忽视大学里学过的一些知识,要与实际工作进行联系。
经历完整的项目或产品周期
年轻的程序员们在社会复杂的氛围中容易浮躁而频繁的跳槽换工作,这种行为是极度不可取的。这会让你失去经历完整项目或产品周期的机会,从而使你一直重复某些环节的工作。有些问题是无法在开发的初期遇到,有些问题甚至要到程序运行了几年后才会暴露出来。事实上在职场中,一个在同一项目历经几年的程序员是受欢迎的,因为他知道所有做项目、做产品会碰到的任何困难与问题。
熟悉设计原理及思想
要写出好的程序就要时刻遵循软件设计思想,虽然这个是架构师和设计师的工作,但是一个优秀的程序员应该具备这样的能力,不仅可以有助于你理解设计的思路,也可以在局部程序的编写过程中发挥的淋漓精致,从而使软件变得扩展性强、维护性高。具体做法是多读懂一些设计模式的书,多看懂一些架构巧妙精细的开源软件,再联系实际工作中的软件程序,和你周围的资深程序员、设计师、架构师多做讨论,这一系列的化学反应足以让你迅速成长。
训练思维逻辑
程序归根到底体现的还是人的思维逻辑,是计算机按人的想法进行执行的指令集。因此程序员就好比是一个指挥官,写程序就好比是作战指挥,思路清晰、考虑周详非常重要。程序员每周可以利用周末做一些帮助逻辑训练的程序题、算法题,甚至可以是数学题。贵在坚持,长此以往,程序员对于具体需求建模的敏感度、效率会大大加强,写出的程序简单而有效。
总结
上述提到的几点只是帮助程序员找到努力的方向,关键还是需要程序员去实践、去学习。付出了多少汗水,终究会有多少回报,所以提升核心竞争力的关键还是不断去学习、学习、再学习。