程序员必备的十大基本技能及十三项软技能

新手程序员必备十项技能

拉勾导读:初出茅庐的你带着仍残留墨香的毕业证书踏上工作岗位,马上就被书上没写的规则和各种繁杂的日常事务来了个下马 威。这样的故事实在是司空见惯,编程工作也不例外。没有几个学生能 100% 为自己的第一份真正的工作做好准备(开发人员求职神器:URL)。如果你不想成为其中之一,请学学以下这 10 项无需手把手指导就能学会的基本技能:

1、版本控制系统(VCS)

VCS 也许是计算机课程最大的疏漏。这些课程光记得教如何写代码,但却往往忘记教学生如何去管理代码。每一个程序员都应该懂得利用 Git 或 Subversion 有效地创建 repository(仓库),编辑与提交代码,进行分支与合并,了解项目工作流。

2、学会写作

身为程序员要写的不只有代码。你还要写项目的发布说明,给版本控制写提交消息,在系统里面写漏洞报告。这些和许多地方都需要清晰有效的文字交流—但这个技能计算机科学却很少强调。

3、正则表达式

正则表达式本身就是一门语言,每一个现代程序员都要擅长。每一门现代语言都支持正则表达式或者有相关标准库。如果代码需要校验某字符串是否含有 5 个字符、1 个破折号和 1 个数字,你应该马上就能写出 /^[A-Z]{5}-\d$/。

4、库的使用

现在已经是 2014 年,所以没人需要用正则表达式从 URL 析取主机名了。因为每一门现代编程语言都有执行常用功能的标准库。

程序员需要明白,那些经过开发、测试和调试的代码通常要比自己重新写的代码更好。更重要的是,无需编写的代码实现起来要快得多。

5、SQL

很多人的 SQL 都是在工作中学会的。数据库怎么会是选修课呢?有不用数据库的吗?

把 数据存进平面文件的时代已经结束了。一切东西都要进出数据库,而 SQL 则是存取数据的语言。这是一门说明性语言,不是程序语言,所以用它来解决问题时需要新的思考方式。每一个程序员都应该了解数据库标准化基础,能够执行 SELECT(及 INNER、OUTER JOIN)、INSERT、UPDATE 和 DELETE。

6、会用IDE、编辑器及CLI工具

只懂用锯子的木匠永远也无法出师,所以计算机专业毕业的人只懂 Notepad 或 pico 令人惊诧。编程工具帮助操纵代码及其他数据,令程序员生活变得容易。所以每一个程序员都应该知道命令行、shell 脚本、find、grep 及 sed 的使用。

7、调试

每一个程序员都应该知道利用交互式调试器或在代码中点缀一些输出语句来调试程序。通过逐步求精来跟踪问题的能力实在是太重要了。

8、防错性编程

错误总是难免的,哪怕是明星程序员也不例外。失控是世界的常态,出错毫不奇怪。防错性编程正是理解了这个事实。如果东西不会不出错,我们就不会检查文件打开成功与否,不会检查客户 ID 是否合法数字,不用测试代码是否允许正确。

程序员需要知道,编译器告警是有用的工具,可让我们生活得更舒适,而不是要避而远之的麻烦事。每一个程序员都应该知道为什么每一个 PHP 程序都要这样开头:

1set_error_reporting(E_ALL)

每一个 Perl 程序都要写上这些语句:

1use strict; use warnings;

9、团队协作

很少编程工作会让你自己一个人完成,如果你经常这么做,智力会受损,表现会变弱。你的代码必须与别人的交互或者混合。再有才的程序员,如果无法与别人协作,都会给项目造成负面影响,并迅速成为组织的负担。

10、利用现有代码

在学校的时候,每一次作业都是一个新项目。但现实世界不是这样的。对于刚工作的人来说,所接到的第一项任务往往是修改代码漏洞。然后,再在现有代码库的基础上为现有系统增加一个小功能。设计新代码那是几个月后的事情,如果幸运的话。

做程序员,仅仅成为码农是远远不够的。下面是云和数据整理出的CTO、高层执行人员和HR共同认为程序员必备的13项技能和软技能。

1****、Java**

2016年,开发人员掌握Java绝对不会错。Java能力是目前为止被高层执行人员和HR誉为最频繁的追捧技能。Java已被证明是当今市场中高度可移植和宝贵的技能。

2****、大数据**

大数据相较于去年继续扩大,而且在这几年里也没有任何放缓的迹象。开发人员必须有全面的商业智能和分析产品,机器学习工具和其他可以转移、存储和汇总大量数据解决方案的知识。只有这样,他们才能帮助公司存储,交互和分析大数据,以便于做出更好的业务决策。

3****、掌握全栈**

现在许多顶级公司都在寻求可轻松应对各种技术和平台的全栈开发人员。

4****、涉及开发运营**

炽热的就业前景并不是考虑在简历中添加开发运营经验的唯一原因:开发运营实践会让你成为一个更优秀的开发人员和一个更有价值的合作者。
  开发运营实践还可以提高团队凝聚力和业务敏捷性,这是一种能让企业加速领先一步的边缘技能。

5****、多样化**

相比前几年,现在的企业希望寻找更丰富的技能。Java和C#仍然占据市场部分份额,但是当你去看那些在上次经济衰退之后成立的公司,那么你将看到各种类型的语言需求:Ruby on Rails,Python / Django,Node.js,以及在出现的函数式编程语言中,Scala是最普遍的。

6****、使用源**

特别是自由职业者,指向GitHub上的代码,能够表明你的工作完成得很好,并通过了同行审查。
  如果公司本身正在探索GitHub以便于添加技术到他们的堆栈,那么你不上谁上?

7****、敏捷**

敏捷开发应该成为2016年程序员的必备技能。熟悉敏捷和精益方法——将大项目分解成小故事,确定优先排序,适应变化,并提供最大价值。

8****、安全性**

根据研究报告,去年深受安全漏洞之害的公司知道2016年什么技术对他们而言是最有用的。
  随着云计算使用的增长,安全性和合规性越来越为组织所担忧,这导致了对安全,合规,治理和数据管理专家的需求热潮。

9****、移动开发**

移动开发者备受追捧,尤其是那些可以广泛发布自己作品的开发人员。要成为一个成功的移动开发者不是通过特定的技术技能来实现的,而是通过商务头脑实现的。
  编写代码仅仅是项目的第一阶段。知道如何推广移动app,如何吸引和留住客户,才是成功的推动力。

10****、云计算**

当涉及到云计算中的职业机会时,它并不全部意味着工具。TEKsystems说,企业希望招聘到有业务能力,包括项目管理和与供应商谈判能力的开发人员,并且这将成为一种持久的趋势之一。
  此外,我们需要更多“推动业务”类型的技能,但不太需要战术工作,因为云供应商现在越来越对此负责。

11****、物联网**

现在的物联网不但作为了一种雇佣需求,也是一种天才工程师想探索的技巧。
  而且这不再只针对嵌入式系统工程师,你即使是一个Java开发人员,也可以做这个。协议如Wi-Fi Halo,以及可穿戴和IoT设备开放轻量级SDK的出现,为开发人员不再局限于显示器和构建针对周围事物和环境的东西打开了很多机会。我们还可以看到由于这些工具的问世,很多硬件/软件开始协同设计。

12****、有说服力**

客户管理技能是很重要的,特别是巧妙但令人信服的推延能力,这在发布的替代品更有价值的时候很有用。也需要能够教育客户关于软件性质的口才,引导他们选择可更好满足他们长远目标的做法。

13****、变通**

如果你是团队中有着10x生产力又全栈的开发人员,那么对你的服务要求比供给更多。但是,如果你还是新手或正在转行,那么正确的态度可以让你的面试—留用—录用过程大不相同。
  作为一个优秀的团队成员,应该成为解决方案的一部分,而不是问题的一部分,愿意伸手帮助团队成员,有一种志愿服务理念,并努力提高对团队有价值的产品或文化。

推荐阅读更多精彩内容