软件开发者需要掌握的技能

上传人:枫** 文档编号:456130120 上传时间:2023-09-23 格式:DOCX 页数:10 大小:13.45KB
返回 下载 相关 举报
软件开发者需要掌握的技能_第1页
第1页 / 共10页
软件开发者需要掌握的技能_第2页
第2页 / 共10页
软件开发者需要掌握的技能_第3页
第3页 / 共10页
软件开发者需要掌握的技能_第4页
第4页 / 共10页
软件开发者需要掌握的技能_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《软件开发者需要掌握的技能》由会员分享,可在线阅读,更多相关《软件开发者需要掌握的技能(10页珍藏版)》请在金锄头文库上搜索。

1、软件开发者需要掌握的技能现在,有这样一种主流观念,压垮了很多新手软件开发 者,那就是你需要学习很多东西才能成为软件开发人员,并 且很多人不知道从哪里开始起步。 这里我会尝试着具体 说明那些在你追求成为软件开发人员的路上将让你受益的 必要技术技能。 一篇文章当然不能详尽说明作为软件开 发者,你可能需要掌握的所有技术技能,但是我会列出最关 键的一些技术技能。 一、编程语言 我认为从这一条 开始说起是最合适的。 不懂编程语言,怎么能成为一个 真正的程序员? 不过,关于选择哪种编程语言去学习可 能并没有我们想得那么重要这一点,请允许我一笔带过。 相反,让我们谈一谈为什么我们要从一种编程语言开始,而 不

2、是试图去学习所有的东西。 许多新手程序员会试图一 次性或在第一份工作之前学习几种编程语言,以便于有备无 患。 虽然我认为你最终应该学会一种以上编程语言,但 我不建议提前这样做,因为这只会导致混乱,并且会分散你 需要学习的其他技能的精力。 相反,我建议你应该深入 研究,重点学习单一编程语言的来龙去脉,这样你才能对用 这种编码语言来写代码信心十足。 那么在你决定想要成 为什么样的开发人员的时候,怎么样才能尽可能地独树一帜 呢? 二、如何构造代码 在学习了一门编程语言之后或者最好是在学习的同时我坚信,你需要知道的下 一件事就是如何正确地构造你的代码。 有一个很好的资 源来帮助你学习这个非常宝贵的技能

3、:Steven McConnell的 Code Complete 。 我所说的构造代码是什么意思呢? 我的意思是,要写出好的,清晰的,易于理解的代码,不需 要大量注释,因为代码本身就是一种表达方式。 很多软 件开发者在他们整个职业生涯都不曾去学习这个技能,这是 不幸的,因为这是我以及其他许多人判断一个软件 开发人员技术和能力的主要方式。 良好的代码结构展示 了对这种技艺的热衷,而不仅仅是为了完成工作。 构建 代码是软件开发真正的艺术部分,但它也是至关重要的,因 为你和你的同事得花费相当多的时间来维护现有的代码,而 不是编写新的代码。 具体应该如何正确地组织代码我就 不说了,因为我已经给出了一个

4、很好的资源,但是要努力学 习如何从一开始就写出好的、干净的代码,而不是事后学习 这个技能。 我只能保证,即使你是个新手,如果你可以 写出好的、干净又简洁的、易懂的,本身就可以表达意思的 代码,那么任何面试官看到你的代码都会觉得你是一个有经 验的专业人士。 并且在一定程度上,或者至少在这条道 路上,因为你会将这个职业当作一种专业,而不是一份工作。 三、面向对象的设计 这一条是有争议的,特别是如果你 正在学习的编程语言并不面向对象,但是有大量的软件开发世界会按照面向对象设计的思维思考,所以你需要确保你了 解它。 面向对象的设计是一种将复杂程序设计分解为单 独的类或对象(类的实例)的方法,其中封装功

5、能且具有特 定的角色和责任。 在软件开发中,我们总是试图管理复 杂性。 从对象的角度思考可以帮助我们做到这一点,因 为它能让我们从一堆交互组件中定义并设计一个复杂的系 统,而不是作为一个整体的试图解决整个复杂性。 现在 的编程世界有着大量的函数式编程语言,但你在软件开发中 找到的最流行的语言和模式,仍然深受面向对象设计和分析 的影响。 你应该好好理解什么是类,继承的不同类型 何时使用它们还有理解像多态性和封装等术语。 四、算法和数据结构 如果你上传统院校学习并想获得计 算机科学学位的话,那么这是一个很大的考点。 算法是 解决各种计算机科学/编程问题的常用方法。例如,有若干常见的在程序上用于排序

6、的算法。每一种排序算法都有一 系列关于速度,内存大小要求,以及数据理想类型的不同属 性。 计算机科学领域有很多这样的算法,并且理解如何 变化这些算法来解决你可能遇到的棘手问题也很重要,当你 解决现实编程问题的时候。 通常情况下,擅长这些算法 可以让一个开发人员在 1个小时之内就能解决可能需要另一 个开发人员几天时间才能搞清楚的问题。 除非你熟悉和 擅长算法,否则你甚至不知道已经有了优雅的解决方案在那里。因此,仅仅只为这个原因,我认为这也是一个值得掌握 的宝贵技能。 数据结构也是如此,并且可以与算法结合 使用。 有几个所有软件开发者都应该熟悉数据结构中 的,包括: 数组或向量 链表 堆栈 队列

7、树 哈希 集合 通过熟练掌握数据结构和算法,你 可以轻松又优雅地解决许多艰难的编程问题。 当我开始 编程的时候,我在数据结构和算法方面非常糟糕,因为我主 要是靠自学的。 我一直都没有意识到它们的价值,直到 我和一个名为 TopCoder 的网站竞争,而他们对数据结构和 操作算法的了解使之有了很大的竞争优势。 很快,随着 我遇到了一些我不知道如何解决的问题,我发现这些技能在 真正的编程世界非常有用,而且解决起来相当简单和有 趣。 事实上,我认为这是软件开发最有趣的领域之一。 解决难题并利用数据结构和算法来开发一个又干净又优雅 的解决方案,真的很有意义。 至少到写这本书为止,目 前最好的资源是 G

8、ayle Laakmann McDowell 的Cracking the Coding Interview。在这本书中,作者涉及了所有你需要了解的关于算法和数据结构的内容。 学习这些东西是 一个挑战,但非常值得。这是可以让你超越众多同行的技能 之一。大多数软件开发人员都不擅长这个领域。 如果你 想通过如微软或谷歌这样的大公司的面试,那么你一定得掌 握这个技能集。 五、开发平台及相关技术 你应该具 备一些经验,并至少掌握一个开发平台以及与之相关的技术或框架。 我所说的平台是什么意思呢? 好的,通常 它的意思是操作系统(OS),但也适用于其他可以充当类似 于操作系统角色的抽象。例如,你可以是专注于

9、Mac或Windows操作系统得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.js 框架。 AngularJS

12、 是一个用于为 web 应 用程序创建用户界面的前端 JavaScript 框架。 最后, Node.js是一个用JavaScript开发基于web应用程序的运行时 环境。 有没有理解所有这些东西并不重要 除非你 打算成为一个MEAN开发者重要的是要明白,如果你知 道所有这些技术和框架,那么你就能够开发一个完整的 web 应用程序。 栈使得创建应用程序变得更容易,因为它们 提供了一种许多开发者用来开发应用程序的通用范式,因此 知识可以很容易地共享,并且你也能确定哪些特定的技能集 市可以一起工作的。 学习堆栈真的是非常有价值,因为 这意味着你拥有开发一个完整的应用程序所有必要的技能。 很多使用特

13、定堆栈开发应用程序的企业,更愿意雇用那些熟 悉那类堆栈能够立马开展工作的软件开发人员。 七、基 础数据库知识 即使数据库的景色在过去几年时间里已 经改变了不少,但我不认为数据库会很快消失,因此对此了 解一二总是不会错的,对吧? 当前主要有两种数据库技 术:关系数据库和文档数据库。 现在的开发人员至少应 该熟悉关系数据库,并稍微了解文档数据库。 在软件开 发中,数据库经常被用来存储应用程序的数据。 当然, 有些团队甚至有专门的数据库开发人员或数据库管理员(DBA),但是这并不能真正允许你不懂至少是基本的数据 库知识。 最起码,你应该知道: 数据库如何工作 如何执行基本的查询来获取数据 如何插入、

14、更新和删除 数据 如何连接数据集 此外,你可能会想知道如何以 编程方式从你的代码与你所选择的平台和/或框架检索和存 储数据。 大多数开发者被期待能够编写与数据库进行交 互代码。 八、源代码控制 源代码控制是任何软件开 发项目的组成部分。 在我们使用源代码控制之前,我们 必须在网络上共享项目的所有文件,或者通过 U 盘来回查看 存储在上面的不同软件版本。 虽然我很不想承认,但我 的确不止一次地玩过这个把戏。 但是,我还年轻。我蠢。 你却没必要像我这样。 当前,几乎所有专业的开发者人 员都被期待懂得如何使用源代码控制来反复检查代码,并希 望懂得合并来自多个源的变化。 最基本层面的源代码控 制可以让

15、你保持在一个软件项目中对不同的文件所做更改 的历史记录。 它还允许多个开发人员在同一时间工作于 相同的代码,然后合并这些更改。 具体就不细说了,但 你应该知道如何熟练地使用至少一个源代码控制系统,并且 你应该熟悉大多数基本的源控制概念。 在当今软件开发 领域,几乎所有专业的软件开发团队都会使用某种源代码控 制。 九、构建和部署 现在,大多数软件开发项目都 有着某种自动化的构建和部署系统。 有几种不同的软件 应用程序,可以帮助软对自动化这两个任务,曾经是手动, 当然对于某些团队而言,现在仍然如此。 你问什么是构 建和部署? 好问题。 你知道如何写代码,并检入到 源控制系统吗? 拥有一些方法来确保

16、代码可在你检入 后真正能工作很不错。 这就是构建系统的用武之地。 最起码,构建系统将编译所有代码,并确保没有编译错误。 一个复杂的构建系统可以运行单元测试或用户测试,运行代 码质量检查,并提供关于代码库当前状态的一些报告。 部署系统将负责部署代码要么到生产机器要么可能到某种 测试环境。 你不必成为这些技术的绝对专家,但是了解 至少这些系统如何工作的基础知识,以及构建和部署代码的过程,是非常重要的。 通常情况下,创建和维护构建和 部署系统的实际职责属于所谓的 DevOps(developer operations 的简写)这个快速增长的领域。 但是,这 并不妨碍你至少了解关于这个过程如何工作的基础知识。 十、测试 曾几何时开发者并没有必要知道太多关于测试 的内容。 我们习惯于写一串代码,然后扔给测试人员, 让他们去找代码中的各种bug,然后我们再来修复bug。 切不可再如此。 随着越来越多的软件项目开始采用所谓 的敏捷过程,(后面再方法这一点中我们再细谈

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号