版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件开发者需要掌握的技能现在,有这样一种主流观念,压垮了很多新手软件开发 者,那就是你需要学习很多东西才能成为软件开发人员,并 且很多人不知道从哪里开始起步。这里我会尝试着具体说明那些在你追求成为软件开发人员的路上将让你受益的 必要技术技能。一篇文章当然不能详尽说明作为软件开发者,你可能需要掌握的所有技术技能,但是我会列出最关 键的一些技术技能。一、编程语言我认为从这一条开始说起是最合适的。不懂编程语言,怎么能成为一个真正的程序员?不过,关于选择哪种编程语言去学习可能并没有我们想得那么重要这一点,请允许我一笔带过。 相反,让我们谈一谈为什么我们要从一种编程语言开始,而 不是试图去学习所有的东西
2、。许多新手程序员会试图一次性或在第一份工作之前学习几种编程语言,以便于有备无 患。虽然我认为你最终应该学会一种以上编程语言,但我不建议提前这样做,因为这只会导致混乱,并且会分散你 需要学习的其他技能的精力。相反,我建议你应该深入研究,重点学习单一编程语言的来龙去脉,这样你才能对用 这种编码语言来写代码信心十足。那么在你决定想要成为什么样的开发人员的时候,怎么样才能尽可能地独树一帜 呢? 二、如何构造代码 在学习了一门编程语言之后或者最好是在学习的同时我坚信,你需要知道的下 一件事就是如何正确地构造你的代码。 有一个很好的资 源来帮助你学习这个非常宝贵的技能: Steven McConnell
3、的 Code Complete 。 我所说的构造代码是什么意思呢? 我的意思是,要写出好的,清晰的,易于理解的代码,不需 要大量注释,因为代码本身就是一种表达方式。 很多软 件开发者在他们整个职业生涯都不曾去学习这个技能,这是 不幸的,因为这是我以及其他许多人判断一个软件 开发人员技术和能力的主要方式。 良好的代码结构展示 了对这种技艺的热衷,而不仅仅是为了完成工作。 构建 代码是软件开发真正的艺术部分,但它也是至关重要的,因 为你和你的同事得花费相当多的时间来维护现有的代码,而 不是编写新的代码。 具体应该如何正确地组织代码我就 不说了,因为我已经给出了一个很好的资源,但是要努力学 习如何从
4、一开始就写出好的、干净的代码,而不是事后学习 这个技能。 我只能保证,即使你是个新手,如果你可以 写出好的、干净又简洁的、易懂的,本身就可以表达意思的 代码,那么任何面试官看到你的代码都会觉得你是一个有经 验的专业人士。 并且在一定程度上,或者至少在这条道 路上,因为你会将这个职业当作一种专业, 而不是一份工作。 三、面向对象的设计 这一条是有争议的,特别是如果你 正在学习的编程语言并不面向对象,但是有大量的软件开发世界会按照面向对象设计的思维思考,所以你需要确保你了 解它。 面向对象的设计是一种将复杂程序设计分解为单 独的类或对象(类的实例)的方法,其中封装功能且具有特 定的角色和责任。 在
5、软件开发中,我们总是试图管理复 杂性。 从对象的角度思考可以帮助我们做到这一点,因 为它能让我们从一堆交互组件中定义并设计一个复杂的系 统,而不是作为一个整体的试图解决整个复杂性。 现在 的编程世界有着大量的函数式编程语言,但你在软件开发中 找到的最流行的语言和模式,仍然深受面向对象设计和分析 的影响。 你应该好好理解什么是类,继承的不同类型 何时使用它们还有理解像多态性和封装等术语。 四、算法和数据结构 如果你上传统院校学习并想获得计 算机科学学位的话,那么这是一个很大的考点。 算法是 解决各种计算机科学 /编程问题的常用方法。例如, 有若干常见的在程序上用于排序的算法。每一种排序算法都有一
6、 系列关于速度,内存大小要求,以及数据理想类型的不同属 性。 计算机科学领域有很多这样的算法,并且理解如何 变化这些算法来解决你可能遇到的棘手问题也很重要,当你 解决现实编程问题的时候。 通常情况下,擅长这些算法 可以让一个开发人员在 1 个小时之内就能解决可能需要另一 个开发人员几天时间才能搞清楚的问题。 除非你熟悉和 擅长算法,否则你甚至不知道已经有了优雅的解决方案在那 里。因此,仅仅只为这个原因,我认为这也是一个值得掌握的宝贵技能。 数据结构也是如此,并且可以与算法结合 使用。 有几个所有软件开发者都应该熟悉数据结构中 的,包括: 数组或向量 链表 堆栈 队列 树 哈希 集合 通过熟练掌
7、握数据结构和算法,你 可以轻松又优雅地解决许多艰难的编程问题。 当我开始 编程的时候,我在数据结构和算法方面非常糟糕,因为我主 要是靠自学的。 我一直都没有意识到它们的价值,直到 我和一个名为 TopCoder 的网站竞争,而他们对数据结构和 操作算法的了解使之有了很大的竞争优势。 很快,随着 我遇到了一些我不知道如何解决的问题,我发现这些技能在 真正的编程世界非常有用,而且解决起来相当简单和有 趣。 事实上,我认为这是软件开发最有趣的领域之一。 解决难题并利用数据结构和算法来开发一个又干净又优雅 的解决方案,真的很有意义。 至少到写这本书为止,目 前最好的资源是 Gayle Laakmann
8、 McDowell 的 Cracking the Coding Interview 。 在这本书中,作者涉及了所有你需 要了解的关于算法和数据结构的内容。 学习这些东西是 一个挑战,但非常值得。这是可以让你超越众多同行的技能 之一。大多数软件开发人员都不擅长这个领域。 如果你 想通过如微软或谷歌这样的大公司的面试,那么你一定得掌 握这个技能集。 五、开发平台及相关技术你应该具备一些经验,并至少掌握一个开发平台以及与之相关的技术或框架。 我所说的平台是什么意思呢? 好的,通常 它的意思是操作系统(OS),但也适用于其他可以充当类似 于操作系统角色的抽象。 例如, 你可以是专注于 Mac 或 Wi
9、ndows 操作系统得 Mac 开发者或 Windows 开发者,你也 可以是一名专注于特定的 web平台的web开发人员。 具 体确切的关于平台是什么就不讨论了不同的人会有不 同的看法但这里我要定义平台为你开发的特定环境,它 有自己的生态系统和特殊性。再者,这是另一个我认为选择并非那么重要的技术技能,只要你选择了一个就好。 企业通常会聘请开发人员针对特定的平台或技术开发软件。 你作为 iOS 开发者将更容易找到工作,如果你专业于那个特 定平台的话。 这意味着要熟悉平台本身, 以及开发工具, 惯用模式,还有大多数程序员在为那个平台开发时会使用的 通用框架。你可能会认为编程语言的选择决定了平台,
10、但实际上事实情况很少是这样的。就拿C#举例。如果你是一个C#开发人员,那么你可以用这种编程语言为 Windows , Mac, iOS, Android , Linux ,甚至是嵌入式系统 写代码。 所以, 不要仅仅只是选择语言; 还要选择平台。 六、框架或堆栈 除了学习特定的编程语言和平台,我高 度建议去学习框架,或者更好的是,与之相配套的完整的开 发堆栈。 什么是框架? 什么是堆栈? 框架就是一系列被用于在特定平台或多个平台上开发代码的库。它通 常可以使得在该平台上的编程任务变得更加容易。 看这 个 C# 的例子。大多数 C# 开发人员使用 .NET 框架来编写 C# 应用程序。.NET框
11、架包括许多库和类, 能够让C#开发人员 在更高的抽象级别上工作,因为每当他想做什么事情的时 候,没有必要完全重新发明轮子。例如, .NET 框架的部分还包含了处理图像的代码。这类代码从头编写是极其困难 的,所以框架极大地帮助了C#开发人员去编写需要以某种方式处理图像的代码。堆栈则有点不同。 堆栈是一组技术,通常包括一个框架,并且常一起用于创造一个完整的应用程 序。 例如,有一个常见的称为 MEAN 的栈。它代表 MongoDB , Express.js, AngularJS ,和 Node.js。 MongoDB 是一个数据库技术。Express.js是一个用于创建web应用程序的 Node.
12、js 框架。 AngularJS 是一个用于为 web 应 用程序创建用户界面的前端 JavaScript 框架。 最后, Node.js 是一个用 JavaScript 开发基于 web 应用程序的运行时 环境。 有没有理解所有这些东西并不重要 除非你 打算成为一个 MEAN 开发者重要的是要明白, 如果你知 道所有这些技术和框架,那么你就能够开发一个完整的 web 应用程序。 栈使得创建应用程序变得更容易,因为它们 提供了一种许多开发者用来开发应用程序的通用范式,因此 知识可以很容易地共享,并且你也能确定哪些特定的技能集市可以一起工作的。 学习堆栈真的是非常有价值,因为 这意味着你拥有开发
13、一个完整的应用程序所有必要的技能。 很多使用特定堆栈开发应用程序的企业,更愿意雇用那些熟 悉那类堆栈能够立马开展工作的软件开发人员。 七、基 础数据库知识 即使数据库的景色在过去几年时间里已 经改变了不少,但我不认为数据库会很快消失,因此对此了 解一二总是不会错的,对吧?当前主要有两种数据库技术:关系数据库和文档数据库。 现在的开发人员至少应 该熟悉关系数据库,并稍微了解文档数据库。在软件开发中,数据库经常被用来存储应用程序的数据。当然,有些团队甚至有专门的数据库开发人员或数据库管理员 ( DBA ),但是这并不能真正允许你不懂至少是基本的数据 库知识。 最起码,你应该知道: 数据库如何工作
14、如何执行基本的查询来获取数据 如何插入、更新和删除 数据 如何连接数据集 此外,你可能会想知道如何以 编程方式从你的代码与你所选择的平台和 /或框架检索和存 储数据。 大多数开发者被期待能够编写与数据库进行交 互代码。 八、源代码控制 源代码控制是任何软件开 发项目的组成部分。 在我们使用源代码控制之前,我们 必须在网络上共享项目的所有文件, 或者通过 U 盘来回查看 存储在上面的不同软件版本。 虽然我很不想承认,但我 的确不止一次地玩过这个把戏。 但是,我还年轻。 我蠢。你却没必要像我这样。当前,几乎所有专业的开发者人员都被期待懂得如何使用源代码控制来反复检查代码,并希 望懂得合并来自多个源
15、的变化。最基本层面的源代码控制可以让你保持在一个软件项目中对不同的文件所做更改 的历史记录。它还允许多个开发人员在同一时间工作于相同的代码,然后合并这些更改。具体就不细说了,但你应该知道如何熟练地使用至少一个源代码控制系统,并且 你应该熟悉大多数基本的源控制概念。在当今软件开发领域,几乎所有专业的软件开发团队都会使用某种源代码控 制。九、构建和部署现在,大多数软件开发项目都有着某种自动化的构建和部署系统。有几种不同的软件应用程序,可以帮助软对自动化这两个任务,曾经是手动, 当然对于某些团队而言,现在仍然如此。你问什么是构建和部署?好问题。 你知道如何写代码,并检入到源控制系统吗?拥有一些方法来
16、确保代码可在你检入后真正能工作很不错。这就是构建系统的用武之地。最起码,构建系统将编译所有代码,并确保没有编译错误。 一个复杂的构建系统可以运行单元测试或用户测试,运行代 码质量检查,并提供关于代码库当前状态的一些报告。部署系统将负责部署代码要么到生产机器要么可能到某种 测试环境。你不必成为这些技术的绝对专家,但是了解 至少这些系统如何工作的基础知识,以及构建和部署代码的过程,是非常重要的。 通常情况下,创建和维护构建和 部署系统的实际职责属于所谓的 DevOps( developer operations 的简写) 这个快速增长的领域。 但是, 这 并不妨碍你至少了解关于这个过程如何工作的基
17、础知识。 十、测试 曾几何时开发者并没有必要知道太多关于测试 的内容。 我们习惯于写一串代码,然后扔给测试人员, 让他们去找代码中的各种 bug ,然后我们再来修复 bug。 切不可再如此。 随着越来越多的软件项目开始采用所谓 的敏捷过程, (后面再方法这一点中我们再细谈) ,软件开发 人员和测试人员不得不更密切地一起合作。 质量已真正 成为了整个团队的责任我倒是更想说,它一直都是。 随之而来的是,你需要了解一些关于测试的东西。 你至 少应该熟悉如下基本术语:白盒测试黑盒测试单元测试(不是真的测试)边界条件测试自动化验收测试 一个好的开发人员我假设你至少想成为 一个优秀的开发人员会在将代码交给
18、别人之前测试自 己的代码。 如果你真的想被认为是专业的,并非浪者虚 名,那么这一条没有商量余地。 十一、调试 嗯,很 多新手软件开发人员在调试时都感觉自己像是在用鸡蛋碰 石头。 每个人都希望写代码,没错吧? 但好像没有 人愿意调试自己的代码? 这就是真相。大约 90的 时间软件开发人员是用来搞清楚到底为什么代码不能正常工作。我知道你只是想能够整天写新的代码,但是此路不通。如果你采用如测试驱动开发这样的方法,那么你可能会少花很多时间在调试上, 但无论如何,不管你做什么, 不管你如何努力,你都不得不学习如何调试代码或其他人的 代码。 因此,与其采取一种随意的方式来做一些你不得 不做的事情,还不如咬紧牙关竭尽全力学会如何有效地做好 这件事情。十二、方法有没有被我列出来的需要知道的事情清单吓倒?好吧,还有一个一一但是我保证这是最后一个。虽然一些软件开发团队才刚开始写代码,不择手段只要完成任务即可,但是大多数团队还是至少遵循 某种方法的。出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度城市轨道交通设备维护与检修合同范本3篇
- 二零二五年度房产证办理专业委托代理合同
- 2025年度私人购车二手车寄售及经纪服务合同3篇
- 2025年度环保型爬架租赁及维护合同3篇
- 二零二五年度企业孵化器项目引进与孵化合同3篇
- 2025版网络数据保管员聘用合同标准版2篇
- 二零二五年度新型纱窗材料研发与应用合同2篇
- 二零二五年度城市轨道交通招标合同管理规范6篇
- 课程设计打印图纸模板
- 二零二五年度合同担保书撰写指南与合同担保合同审查3篇
- 2024年露天煤矿地质勘查服务协议版
- 部编版四年级上册道德与法治期末测试卷
- DB11T 1805-2020 实验动物 病理学诊断规范
- 人教版小学六年级下册音乐教案全册
- 2024年资格考试-WSET二级认证考试近5年真题附答案
- 中国移动-AI+智慧城市安全解决方案白皮书2024
- 个体工商营业执照变更委托书
- 2024版【人教精通版】小学英语六年级下册全册教案
- 人教版历史2024年第二学期期末考试七年级历史试卷(含答案)
- 预算法及实施条例测试题(含答案)
- DL∕T 1802-2018 水电厂自动发电控制及自动电压控制技术规范
评论
0/150
提交评论