本帖子最初于2014年6月3日发布,于2019年1月2日扩大和更新。

这是许多职业的全部常见故事:你多年上学,并用新鲜的文凭走出来。你立即抓住你的第一份工作,你埋葬在一堆不成文的规则和日常复杂性之下,没有人困扰警告你。

编程工作也不例外,即使是编码训练营的兴起:那些加速的学校承诺在几个月内教导你所需的一切。

事实证明,无论你获得的是计算机科学学位还是新兵训练营的证书,很可能你还没有为你的第一份编写软件的工作做好100%的准备。这里列出的基本技能——你可能在学校里学过,也可能没有学过——可以帮助你开始做真正的工作,而不用那么手把手地指导,也不会犯那么多错误。我们将这个列表分为三类:技术技能,习惯和心态,以及软技能。

技术技能

这五种技术技能应该是任何初学者的工具箱中的一部分。如果你没有在学校或新兵训练营学过这些,现在是时候跟上进度了:

1.版本控制系统

任何学校的毕业生都应该知道使用的基础知识Git或者另一个追踪计算机源代码的版本控制系统——就像她应该知道如何用这类语言编写程序一样RubyPython或Java。每个程序员都应该知道如何创建存储库,编辑和提交代码,以及分支,并有效地合并为使用Git的项目工作流的一部分。

掌握这一技能不仅仅是一个实际问题;有一个好的工作流支持你的工作将影响你如何编写代码。连续集成(CI)依赖于版本控制。您在离散,更可管理的任务中编写代码。没有版本控制,代码的代码可能很危险。

如今,版本控制系统在软件开发团队中无处不在,不了解Git基本机制的新员工加入公司将处于不利地位。了解版本控制系统也意味着你会更清楚为一个不使用版本控制系统的组织工作。

有关Git的介绍,请参阅箴Git由斯科特卡恰,可在网上免费下载。有关版本控制概念和系统的更广泛的调查,请参阅通过实例进行版本控制作者:Eric Sink,也可以在网上免费下载。

2. HTML和CSS基础知识

如果您现在从事的是应用程序开发工作,那么您很可能从事的是web应用程序,不管它们是否在公共互联网上。创建功能性HTML文档的能力是一种假定的技能——类似于制作Microsoft Word文档(或谷歌文档)。而现在,工作知识层叠样式表(CSS)与HTML专业知识相结合。

除了格式良好的HTML文档的机制之外,这里的关键知识不是理解神秘的特定于浏览器的技巧和标记,而是考虑语义文档标记以及了解如何将文档结构与演示分开。

3.开发人员工具包:IDE,编辑器和CLI工具

木工永远不会在学徒期只知道如何使用钢锯,所以重要的是计算机科学程序和编程训练营的毕业生知道比记事本或Pico更多的东西。

存在编程工具以操纵源代码和其他开发资源,使程序员的生活更轻松 - 通常更容易。UNIX命令行和标准unix工具,如bash shell,查找,grep和sed应该是每个程序员知识集的一部分。哎呀,甚至使用Windows的程序员可以使用这些工具Windows 10

我推荐使用命令行的介绍布莱恩霍根的小尖锐软件工具

4.正则表达式

正则表达式构成了一种功能强大的小型语言,程序员可以使用它以简单字符串搜索无法匹配的方式查找文本字符串中的模式。不幸的是,regexes(术语缩写)在编程界受到了那些似乎害怕语法的开发人员的坏名声。

不要听那些讨厌你的人的话。例如,如果您的程序的一部分,必须确保数据库中的零件号有五个字母、一个破折号和一个数字,那么使用类似的正则表达式/ ^ [a - z] {5} - \ d /美元验证模式的方法是您将如何完成这项工作。如果你不熟悉正则表达式,你可能很难读懂它们——但你从娘胎里出来就不知道它们是什么f = (9/5) * c + 32的意思。

5.SQL

用平面文件存储数据的时代已经一去不复返了。所有东西都进入和退出数据库SQL或结构化查询语言,是用来检索它的语言。

就像有人在一次meetup上对我说的那样,“我知道的所有SQL都是我在工作中学到的。为什么数据库是计算机科学课程的选修课?什么没有使用数据库?“

SQL是一种声明性语言,而不是过程性语言,这意味着它要求您学习一种思考解决问题的新方法。每个程序员都应该了解数据库规范化的基础知识,并且能够做到这一点选择(包括基本外部连接),插入更新删除

学习SQL和正则表达式的过程具有另一个巨大的好处:它要求您在不同的隐喻方面思考。SQL全部关于数据集的操作,而不是循环和分支的必要编程工作方式。正则表达式是关于在文本中查找模式,并考虑您要使用和转换的数据的哪些部分。添加新的范式和不同的思维方式有助于提高开发商的解决问题的技巧。

网上有很多SQL教程,但是SQL动物园很棒,我也喜欢吗艾伦·泰勒的SQL的假人。对于SQL学习的下一步,我建议您这样做Stephane Faroult'sSQL的艺术

心态、习惯和软技能

作为一个能力的程序员不仅仅是关于语言和工具。新程序员需要了解更多仅仅是特定的软件和语言。他们还需要了解如何与同事开发人员进行沟通,如何站在他们的祖先的肩膀上,以及如何最大限度地减少工作中的错误。这是这些软技能织布的地方:

6.清晰有效的书面沟通

程序员的工作不仅仅是用编程语言编程。你还必须为你的项目写发行说明。为版本控制编写提交消息。您为系统中的错误编写罚单。所有这些任务,以及更多的任务,都需要清晰有效的英语(或其他人类语言)交流,而这是计算机科学程序很少强调的技能。

随着更多的工作成为远程,更多的团队通过电子邮件连接,协作平台如松弛因此,用书面英语清晰有效地沟通变得更加重要。

7.使用库和其他现有代码

新的开发人员通常会学习如何通过编写自己的代码来解决问题,但是聪明的开发人员知道何时利用现有的代码来解决常见的软件问题。例如,当经过验证、调试和彻底测试的代码库随时可用时,开发人员不应该浪费时间试图编写代码来从URL中提取主机名。

(要了解一些常见的编码任务,请参阅我的文章你永远不应该自己编写的7件事。)

8.防御性编程

即使是最好的程序员也会犯错;世界上的很多事情都不在我们的控制范围之内,事情总是有这样或那样出问题的习惯。防御性编程关于与这些简单的真理来说是关于来的。

例如,如果事情没有出错,我们就不必检查file open是否成功,也不必断言客户id是有效整数,甚至不必测试代码以确保其工作正常。

程序员需要明白,编译器警告是一种很有帮助的工具,它使生活变得更容易——而不是要避免的麻烦。事实上,聪明的开发人员会尽可能多地使用自动化的质量检查点来发现代码中的潜在问题。每个程序员都应该知道为什么每个PHP程序都应该以error_reporting (E_ALL),以及为什么所有的JavaScript程序都应该包含“use warnings”指令。

防御性编程的另一个重要方面是拥有安全心态。在一个大多数应用程序都面向web的世界里,程序员必须考虑输入的可能性,这些输入不仅是意料之外的,而且是恶意的。SQL注入攻击例如,都是基于盲目使用不可靠外部数据的程序的。

9.调试

所有程序员都应该能够使用交互式调试器进行调试,或者在整个代码中随意地喷印语句。通过逐步细化来跟踪问题的能力非常重要,程序员不能凭感觉来学习。

值得注意的是,缩小问题的能力以找到根导致的能力,能够有效地沟通。编写有效的错误报告需要找到核心问题,但它还要求清楚地沟通的能力,以便其他人可以理解您在谈论的内容。

10.团队合作

很少有编程工作允许你完全独立工作,即使是那些独立工作的程序员也不能从别人那里学到东西。在几乎所有情况下,您的代码必须与其他程序员的代码交互,而且在许多情况下,您的代码实际上会与其他人的代码混合在一起。不管他们多么有才华,不能与他人在项目中合作的程序员将会大大降低甚至是负生产力,大大降低他们对组织的价值。

奖金:在现有代码上工作

在计算机科学学校,课堂作业通常是一个新的、新项目。在现实世界中不是这样的。新雇佣的软件工程师的第一件事是修复bug跟踪系统中的ticket #8347。在此之后,他们必须在现有的系统中使用已建立的代码库添加一个新的小的补充功能。如果幸运的话,编写新代码来解决新问题将会在几个月后出现。

Here’s one way that schools—whether in a Computer Science degree program or at a programming boot camp—could make assignments more like the real world of software development: After the class does assignment #5, Alice would review Bob’s code as assignment #6, discussing what’s good about it and what could be improved. Then, assignment #7 would be Alice extending the functionality of Bob’s code.

如果原始程序是脆弱的或损坏的,那么修复它的任务就落在了Alice身上——当然,不允许说Bob或他的代码的坏话。

培养这些技能的另一种方式是为开源项目做贡献。在开源领域工作涉及到许多在本文中讨论过的相同技能:

  • 版本控制
  • 远程团队工作
  • 书面交流
  • 基于释放的项目
  • 利用现有代码
  • 建立现有代码
  • 测试驱动的发展

关于如何参与开源的想法,请参阅我的文章初学者为开源项目做出贡献的指南

双倍奖励:我们边走边学!

把最后一点看作是计算机科学毕业典礼演讲的一个花絮:新的开发人员需要知道我们是所有在我们去的时候学习,寻求帮助没有错。我已经看到了新的软件工程师,他们尴尬地在手册或互联网上寻找术语语法或函数的特定调用约定。

不要。作为一个软件开发人员,您的工作是解决问题,而不是记住参数的序列字符串的子串函数。别担心,随着时间的推移和足够的练习,你会发现你需要看手册的次数越来越少。

但是,它不是所有关于在线寻找答案并将它们粘贴到你的代码中。查找问题的答案堆栈溢出就目前的情况而言是很好的,但重要的是您必须准确地理解要剪切和粘贴到代码中的内容。一个技巧是避免直接从网上复制和粘贴。相反,请手动重新输入。这有助于确保您读取放入程序中的每个字符。

如果你是一名新开发者,不管你是刚毕业还是在人生后期改变职业,我希望这篇文章能够为你提供一些进一步探索的想法和领域。如果您是一名经验丰富的软件工程师,那么我希望这个列表能提醒您一些重要的事情,或者它能激励您帮助组织或社区中的初级开发人员。

最后,我想推荐两个基本书籍所有软件开发人员:代码完成,第2版经过Steve McConnell;和实用的程序员:从熟练工到大师,通过安迪·亨特戴夫·托马斯。。两者都包含关于软件建设的实践的永恒建议,属于每个程序员的书架。

Andy Lester已经从事开源工作20年了,他为Perl的模块做出了许多贡献CPAN以及在全国各地的开源会议和用户团体上发言。他是搜索工具的作者ACK.和他的书土地你喜欢的技术工作《实用书架》出版。查看贴子

有兴趣为New Relic博客写作吗?亚搏体育登入网给我们发一份建议书!!