有了这些技能,你将成为一名优秀的程序员!
我强烈建议软件开发人员不仅要有应付自己工作的技术技能,还要发展自己的“软技能”。我仍然不能否认技术技能仍然至关重要。
我的意思是,如果你不会写代码和开发软件,那么你所学的所有软技能对你来说都是“屠龙技能”。也许你会成为一名优秀的经理和教练,但你不会成为一名软件开发人员。
所以我假设你有兴趣成为一名优秀的软件开发人员。让我们来谈谈你进入软件开发行业需要知道的技能。
安定下来的能力
现在我们要谈论一个让许多初级软件开发人员感到不知所措的话题,因为他们会觉得有太多的事情要知道,他们不知道从哪里开始。
我将尝试解构这个问题,只讨论最重要和最有价值的技能,这些技能可以让你迅速成长为一名软件开发人员。
因此,毫无疑问,下面将简要介绍最重要的技术技能。
apl 语言
我认为我们最好从这个话题开始,不是吗?
如果你想成为一名程序员,但你甚至连一门编程语言都不懂,那你就大错特错了。你知道我的意思,对吗?(如果你不明白,请参考欧内斯特·沃雷尔的系列电影,它们非常有趣。(
我们将在第5章详细讨论如何选择编程语言,所以我们在这里不再重复。然而,我想说的是,选择学习哪种编程语言并不像你想的那么重要。相反,让我们来谈谈为什么我建议学习“一种”编程语言,而不是试图在阳光下学习每一种编程语言。
在找到软件开发的第一份工作之前,许多初学者尽最大努力学习几种编程语言,以增加他们找工作的份量。但是我认为,虽然你最终应该学会掌握一种以上的编程语言,但我不建议你在早期阶段学习很多编程语言,因为这只会导致混乱,这会让你在学习其他技术技能时失去所有的精力。相反,我建议您关注编程语言的来龙去脉,这样您就可以自信地声明我有能力用这种语言编写代码。
如何构造代码
在学习了一门编程语言之后,即使是在学习的过程中,你也需要知道如何正确地构造你的代码。这是我坚定的信念。
那么“结构化代码”到底是什么意思呢?
我的意思是:编写高质量的、干净的、易于理解的代码,这些代码无需太多的注释就可以理解,因为代码本身是用于交流的。
许多软件开发人员在他们的整个职业生涯中都没有学到这种技能,所以他们只能被描述为“任重而道远”。因为包括我在内的许多人都评判软件开发人员的技能和竞争力。
好的代码结构反映了一个人对技术的奉献,而不是敷衍了事。结构化代码实际上是软件开发过程中的一个艺术部分和关键部分,因为您和您的同事通过代码进行交流和合作,并且您必须花费大量时间维护现有代码,而不是长时间编写新代码。
我向你保证,即使你是一个初学者,只要你能写出高质量、简洁明了、易于理解的代码来表达它的结构和意义,任何看到你的代码的面试官都会认为你是一个有经验的专业人士。
不仅如此,在某种程度上,你会成为一名专业人士,至少在通往这个方向的路上。因为你把这个职业看作是一个专业,而不仅仅是一份工作,这是真正手艺的象征。
面向对象设计
有些人可能会质疑这一点,尤其是当你没有学习面向对象编程语言的时候,但是在软件开发领域有很多面向对象的设计思想,所以你需要确保你理解它。
面向对象设计是一种设计复杂程序的方法,它将复杂的程序分解成单个类或代表特定角色和职责的对象(类的实例化),在这些类或对象中封装了函数。
在软件开发领域,我们一直坚定不移地管理复杂性。以“对象”的方式思考将帮助我们定义和设计复杂的系统。我们将把一个系统看作一组相互作用的组件,而不是试图把这个复杂的组合作为一个整体来处理。
今天,函数式编程语言多种多样,但是你会发现最流行的软件开发语言和模式仍然部分或全部受到面向对象设计和分析的影响。因此,您应该深刻理解什么是类,牢牢掌握不同类型的继承关系,并清楚地理解面向对象的术语,如多态性和封装。
算法和数据结构
如果你想通过大学或学院的传统学位教育获得计算机科学学位,你会发现这个内容是最难破解的。
算法是解决各种计算机科学/程序设计问题的常用方法。例如,有几种常用的算法可以根据指定的要求对事物进行分类。根据速度、内存大小和里昂的数据类型,这些排序算法的性能是不同的。
在计算机科学领域有许多这样的算法。知道如何根据这些算法编写自己的程序来解决实际问题是非常重要的,尤其是当问题非常困难的时候。通常,精通各种算法的开发人员可以在一个小时内解决其他开发人员几天内什么也做不了的问题。
如果你不能掌握各种算法,你就不会知道优雅的解决方案已经比比皆是。因此,仅仅因为这个原因,我认为算法是一种有价值的技能。
数据结构也属于类似的类别,通常与算法一起工作。
所有软件开发人员都应该熟悉以下常用的数据结构,包括:
数组或向量;
链表;
堆栈。
排队。
树木;
哈希表;
收藏。
通过掌握数据结构和算法,许多编程问题可以轻松而平静地解决。
当我第一次开始学习编程时,我对数据结构和算法感到困惑,因为我自学了大部分内容。我不知道它们的真正价值,直到我参加了一个名为“顶级程序员”的网站上的比赛,我发现了解数据结构和算法会给你带来很大的好处。
很快,这些技能在编程的现实世界中发挥了重要作用,因为我遇到了一些简单而有趣的问题,在我认真学习算法和数据结构之前,我不知道如何解决这些问题。
事实上,我认为算法和数据结构是软件开发中最有趣的领域之一。算法和数据结构可以用一半的努力来解决困难的问题,并且使用数据结构和算法可以开发出简单而优雅的解决方案,并且结果非常好。
学习这项技能是一项挑战,但它是值得的。这是一项能让你脱颖而出的技能。因为大多数软件开发人员在这个领域几乎没有什么技能。
如果你想通过微软或谷歌这样的公司的面试,你必须掌握这项技能,这是必不可少的。
开发平台及其相关技术
你应该至少有一个开发平台的经验,并且精通相关的技术或框架。
我说的平台是什么意思?一般来说,它指的是操作系统,但也可以指类似于操作系统的其他抽象概念。例如,你可以是苹果开发者或视窗开发者。前者侧重于苹果操作系统,而后者侧重于视窗操作系统。你也可以成为专注于特定网络平台的网络开发者。
在这里,我不想陷入关于特定平台的争论。不同的人会有不同的意见,但为了方便当前的讨论,我会把一个平台作为一个特定的环境,你的个人职业发展会随着不同的环境有不同的生态和特点。
同样,类似于选择哪种编程语言,我认为选择哪种平台并不重要,重要的是你必须选择一种。
每个公司雇佣的开发人员通常被固定在一个特定的平台或技术上。如果你有ios平台的开发经验,你会更容易找到一份ios开发的工作。这意味着您需要熟悉平台本身,以及程序员在这个平台上开发时通常使用的开发工具、惯用模式和通用框架。
你可能认为你选择的编程语言决定了你选择的平台。事实上,这种情况很少发生。以c#为例,今天的c #开发人员可以为视窗、ios或安卓平台编写代码,也可以为苹果、linux甚至嵌入式系统开发程序。因此,不管你选择哪种语言,你需要选择的是一个平台。
框架或堆栈
除了学习特定的编程语言和平台之外,我强烈建议您学习一个框架和与该框架相关的完整的开发堆栈。
什么是框架?什么是堆栈?
框架是一系列在特定平台上或跨多个平台编写的库。通常,框架可以使平台上的一般编程任务变得更容易。
回到刚才的c #例子。大多数c #开发人员使用。net框架来编写c #应用程序。世界上有许多图书馆和班级。net框架,它允许c#开发人员在更高的抽象层次上工作。每次他想写点什么,他不需要从头开始。例如。net框架包含图像处理的代码。毫无疑问,从头开始编写这些代码非常困难。因此,该框架给c#开发人员带来了巨大的好处,使他们不需要编写代码,只需要以某种方式熟练地操作库函数。
堆栈略有不同。堆栈是创建完整应用程序所必需的一系列相关技术,通常包括一个框架。
例如,公共平均堆栈。它是mongodb、express.js、angularjs和node.js的统称。mongodb是一种数据库技术,express.js是一个基于node.js创建网络应用程序的框架,angularjs是一个用于创建网络应用程序用户界面的前端javascript框架,node.js是一个用于开发网络应用程序的javascript运行环境。
你是否理解上述技术并不重要,除非你是平均堆栈的开发者。理解这一点很重要,如果你理解了以上所有的技术和框架,你就可以开发一个完整的网络应用程序。
堆栈可以使创建应用程序变得更容易,因为它提供了一个通用的范例,这需要许多开发人员使用它来开发应用程序,因此很容易共享知识,并且您可以确定一组特定的技术在协作工作中是有效的。
学习堆栈非常有价值,因为它意味着你拥有开发一个完整应用程序所需的所有技能。许多公司使用特定的堆栈来开发应用程序,所以他们尽最大努力寻找熟悉堆栈的开发人员,希望他们能赢得竞争。
数据库基础知识
虽然在过去的几年里数据库技术发生了很大的变化,但是我不认为数据库会很快消失,所以我认为你应该对数据库技术有所了解。你怎么想呢?
在写这本书的时候,有两种主要的数据库技术:关系数据库和文档数据库。在我看来,今天的开发人员至少应该熟悉关系数据库的知识,并且可能还需要对文档数据库有一定的了解。
在软件开发中,数据库通常用于存储应用程序数据。当然,一些软件开发团队有全职的数据库开发人员或数据库管理员,但这不能成为不了解数据库基础知识的借口。
至少,您需要了解以下机制:
数据库如何工作;
如何执行基本查询语句来获取数据;
如何插入、更新和删除数据;
如何连接数据集。
此外,您可能需要知道如何使用您选择的平台和/或框架来编写程序来检索和存储数据。
大多数开发人员可以编写与数据库交互的代码。
源代码控制
源代码控制是任何软件开发项目的重要组成部分。
那时,在我们这个时代,没有源代码控制。我们要么在网络上共享项目的所有文件,要么用手来回传递软件的不同版本。我为自己不止一次参与这些荒谬的“游戏”而感到羞愧。然而,那时我年轻又愚蠢,所以你不必这样做。
现在,几乎所有的专业开发人员都应该知道如何使用源代码控制来签入和签出代码,并且能够合并来自多个源代码版本的更改。
源代码控制最基本的要求是软件项目中每个文档和代码的所有变化的历史记录都保持完整;它还允许多个开发人员同时处理同一段代码,并将这些更改合并在一起。
我们不会在这里讨论源代码控制的细节,但是你应该至少熟悉一个源代码控制系统和源代码控制的基本概念。
在当今的软件开发世界中,几乎所有的专业软件开发团队都将使用某种源代码控制系统。
构建和部署
今天,大多数软件开发项目将应用某种自动构建和部署系统。
这些任务过去是手工完成的。现在,有几种不同的软件应用程序可以帮助团队实现这两项任务的自动化。对于一些团队来说,这两项任务仍然是手动的。
那么,什么是构建和部署?问得好。
你知道如何编写代码并将其检查到源代码控制系统中吗?在您完成签入后,最好确保代码有效。这就是构建系统的目的。构建一个系统的基本功能是编译所有的源代码,并确保没有编译错误发生。
复杂的构建系统还可以运行单元测试用例或用户测试用例,对代码执行质量检查,并提供代码库的当前状态报告。
部署系统将负责将代码部署到生产环境或测试环境中。
你不需要成为这个领域的技术专家,但是理解这些系统如何工作以及构建和部署代码的过程是非常重要的。
如今,在正常情况下,创建、维护、构建和部署系统领域最热门的话题是devops(devops的缩写)。然而,这并不构成你不知道如何操作这个过程的原因。
试验
在过去,开发人员不需要知道很多关于测试的知识。我们会写很多代码,然后像扔掉行李一样把它们扔给一群测试人员。他们会在我们的代码中发现各种各样的错误,然后我们会修复这些错误,如此而已。
像这样的日子一去不复返了。如今,越来越多的软件项目采用了所谓的敏捷过程(我们将在下面的“方法论”部分讨论更多的敏捷主题),软件开发人员和测试人员必须在敏捷过程中更紧密地合作。
质量已经成为整个团队的责任——我更愿意强调它一直是这样的。因此,你需要了解一些关于测试的知识。您应该至少熟悉一些基本术语,例如:
白盒测试;
黑盒测试;
单元测试(不是真正的测试);
边界条件;
测试自动化;
验收测试。
一个好的开发人员(我假设你至少想成为一个好的开发人员)会在把自己编写的代码交付给别人之前测试它。
如果你真的想被视为专业人士而不仅仅是黑客,这是无可争议的。
排除故障
许多软件开发新手的梦想在调试器面前破灭了。
每个人都想写代码,对吗?但是没人想调试他们的代码,对吗?明白我的意思吗?现在是见证真相的时候了。
作为一名软件开发人员,你花了90%的时间努力找出为什么我的代码不能正常工作。我知道这一点都不令人兴奋。我知道你每天都幻想写新代码,但现实世界不是这样。
如果您使用类似于“测试驱动开发”的方法,您可能会在调试器上花费更少的时间。然而,无论如何,你必须学会如何调试你自己和别人的代码,这是不可避免的。因此,与其对你必须做的事情心不在焉,不如咬紧牙关,真正学会如何有效地进行调试。
方法学
害怕你需要知道的一长串技能吗?如果没有,我将不得不在这里添加另一个,但我保证这是最后一个。
当一个软件开发团队开始编写代码并努力完成工作时,在大多数情况下,他们会使用一些至少他们会假装遵循的方法。(顺便说一下,请注意:不要期望任何团队真的遵循他们声称正在使用的软件开发方法。在这里,我不想玩世不恭,我只是一个现实主义者,我碰巧知道许多人说他们正在实现一些软件开发方法,比如scrum,因为他们每天都有一个会议,每个人都必须站在那里。(
因此,至少了解一些最常见的软件开发方法背后的基本思想是非常重要的。这里我想强调瀑布开发和敏捷开发。
要学习c/c++编程知识,如果你想成为一名更好的程序员,或者如果你在学习c/c++方面有困难,你可以来到up主页的c++编程学习圈,那里不仅有学习视频和文档,还有更多志同道合的朋友。欢迎初学者和想转行的朋友。与你交流和成长会比你自己更快!up还上传了一些c/c++学习视频教程和c语言基础教程,有兴趣的朋友可以看看~谢谢阅读!
文章来源:www.atolchina.com