软件开发如何入门?开云 开云体育官网
不能详尽说明作为软件开发者你可能需要掌握的所有技术技能,但是我会列出最关键的一些技术技能。
选择编程语言,这是最重要的。前端开发,是现如今最热门的开发岗位,高级的前端开发工程师,在企业里面是非常欠缺的。成为前端开发工程师,第一步应该是学习HTML/CSS/JavaScript,这是基础,也是根本,JavaScript是根本里面的根本,叫根深蒂固。
许多新手程序员会试图一次性或在第一份工作之前学习几种编程语言,以便于有备无患。
虽然我认为你最终应该学会一种以上编程语言,但我不建议提前这样做,因为这只会导致混乱,并且会分散你需要学习的其他技能的精力。
相反,我建议你应该深入研究,重点学习单一编程语言的来龙去脉,这样你才能对用这种编码语言来写代码信心十足。
在学习了一门编程语言之后——或者最好是在学习的同时——我坚信,你需要知道的下一件事就是如何正确地构造你的代码。
我的意思是,要写出好的,清晰的,易于理解的代码,不需要大量注释,因为代码本身就是一种表达方式。
很多软件开发者在他们整个职业生涯都不曾去学习这个技能,这是不幸的,因为这是我——以及其他许多人——判断一个软件开发人员技术和能力的主要方式。
构建代码是软件开发真正的艺术部分,但它也是至关重要的,因为你和你的同事得花费相当多的时间来维护现有的代码,而不是编写新的代码。
具体应该如何正确地组织代码我就不说了,因为我已经给出了一个很好的资源,但是要努力学习如何从一开始就写出好的、干净的代码,而不是事后学习这个技能。
我只能保证,即使你是个新手,如果你可以写出好的、干净又简洁的、易懂的,本身就可以表达意思的代码,那么任何面试官看到你的代码都会觉得你是一个有经验的专业人士。
并且在一定程度上,或者至少开云体育 kaiyun.com 官网入口在这条道路上,因为你会将这个职业当作一种专业,而不是一份工作。
这有争议的,特别是如果你正在学习的编程语言并不面向对象,但是有大量的软件开发世界会按照面向对象设计的思维思考,所以你需要确保你了解它。
面向对象的设计是一种将复杂程序设计分解为单独的类或对象(类的实例)的方法,其中封装功能且具有特定的角色和责任。
从对象的角度思考可以帮助我们做到这一点,因为它能让我们从一堆交互组件中定义并设计一个复杂的系统,而不是作为一个整体的试图解决整个复杂性。开云 开云体育官网
现在的编程世界有着大量的函数式编程语言,但你在软件开发中找到的最流行的语言和模式,仍然深受面向对象设计和分析的影响。
你应该好好理解什么是类,继承的不同类型——何时使用它们——还有理解像多态性和封装等术语。
如果你上传统院校学习并想获得计算机科学学位的话,那么这是一个很大的考点。
例如,有若干常见的在程序上用于排序的算法。每一种排序算法都有一系列关于速度,内存大小要求,以及数据理想类型的不同属性。
计算机科学领域有很多这样的算法,并且理解如何变化这些算法来解决你可能遇到的棘手问题也很重要,当你解决现实编程问题的时候。
通常情况下,擅长这些算法可以让一个开发人员在1个小时之内就能解决可能需要另一个开发人员几天时间才能搞清楚的问题。
除非你熟悉和擅长算法,否则你甚至不知道已经有了优雅的解决方案在那里。因此,仅仅只为这个原因,我认为这也是一个值得掌握的宝贵技能。
当我开始编程的时候,我在数据结构和算法方面非常糟糕,因为我主要是靠自学的。
我一直都没有意识到它们的价值,很快,随着我遇到了一些我不知道如何解决的问题,我发现这些技能在真正的编程世界非常有用,而且解决起来相当简单——和有趣。
事实上,我认为这是软件开发最有趣的领域之一。解决难题并利用数据结构和算法来开发一个又干净又优雅的解决方案,真的很有意义。
学习这些东西是一个挑战,但非常值得。这是可以让你超越众多同行的技能之一。大多数软件开发人员都不擅长这个领域。
如果你想通过如微软或谷歌这样的大公司的面试,那么你一定得掌握这个技能集。
好的,通常它的意思是操作系统(OS),但也适用于其他可以充当类似于操作系统角色的抽象。开云 开云体育官网
例如,你可以是专注于Mac或Windows操作系统得Mac开发者或Windows开发者,你也可以是一名专注于特定的web平台的web开发人员。
具体确切的关于平台是什么就不讨论了——不同的人会有不同的看法——但这里我要定义平台为你开发的特定环境,它有自己的生态系统和特殊性。
再者,这是另一个我认为选择并非那么重要的技术技能,只要你选择了一个就好。
这意味着要熟悉平台本身,以及开发工具,惯用模式,还有大多数程序员在为那个平台开发时会使用的通用框架。
就拿C#举例。如果你是一个C#开发人员,那么你可以用这种编程语言为Windows,Mac,iOS,Android,Linux,甚至是嵌入式系统写代码。
除了学习特定的编程语言和平台,我高度建议去学习框架,或者更好的是,与之相配套的完整的开发堆栈。
框架就是一系列被用于在特定平台或多个平台上开发代码的库。它通常可以使得在该平台上的编程任务变得更加容易。
看这个C#的例子。大多数C#开发人员使用架来编写C#应用程序。 .NET框架包括许多库和类,能够让C#开发人员在更高的抽象级别上工作,因为每当他想做什么事情的时候,没有必要完全重新发明轮子。
例如,.NET框架的部分还包含了处理图像的代码。这类代码从头编写是极其困难的,所以框架极大地帮助了C#开发人员去编写需要以某种方式处理图像的代码。
堆栈则有点不同。堆栈是一组技术,通常包括一个框架,并且常一起用于创造一个完整的应用程序。
最后,Node.js是一个用JavaScript开发基于web应用程序的运行时环境。
有没有理解所有这些东西并不重要—— 除非你打算成为一个MEAN开发者——重要的是要明白,如果你知道所有这些技术和框架,开云 开云体育官网那么你就能够开发一个完整的web应用程序。
栈使得创建应用程序变得更容易,因为它们提供了一种许多开发者用来开发应用程序的通用范式,因此知识可以很容易地共享,并且你也能确定哪些特定的技能集市可以一起工作的。
学习堆栈真的是非常有价值,因为这意味着你拥有开发一个完整的应用程序所有必要的技能。很多使用特定堆栈开发应用程序的企业,更愿意雇用那些熟悉那类堆栈能够立马开展工作的软件开发人员。
即使数据库的景色在过去几年时间里已经改变了不少,但我不认为数据库会很快消失,因此对此了解一二总是不会错的,对吧?
当然,有些团队甚至有专门的数据库开发人员或数据库管理员(DBA),但是这并不能真正允许你不懂至少是基本的数据库知识。
此外,你可能会想知道如何以编程方式从你的代码与你所选择的平台和/或框架检索和存储数据。
在我们使用源代码控制之前,我们必须在网络上共享项目的所有文件,或者通过U盘来回查看存储在上面的不同软件版本。
当前,几乎所有专业的开发者人员都被期待懂得如何使用源代码控制来反复检查代码,并希望懂得合并来自多个源的变化。
最基本层面的源代码控制可以让你保持在一个软件项目中对不同的文件所做更改的历史记录。
具体就不细说了,但你应该知道如何熟练地使用至少一个源代码控制系统,并且你应该熟悉大多数基本的源控制概念。
有几种不同的软件应用程序,可以帮助软对自动化这两个任务,曾经是手动,当然对于某些团队而言,现在仍然如此。
一个复杂的构建系统可以运行单元测试或用户测试,运行代码质量检查,并提供关于代码库当前状态的一些报告。
你不必成为这些技术的绝对专家,但是了解至少这些系统如何工作的基础知识,以及构建和部署代码的过程,是非常重要的。
通常情开云体育 kaiyun.com 官网入口况下,创建和维护构建和部署系统的实际职责属于所谓的DevOps(developer operations的简写)——这个快速增长的领域。
我们习惯于写一串代码,然后扔给测试人员,让他们去找代码中的各种bug,然后我们再来修复bug。
随着越来越多的软件项目开始采用所谓的敏捷过程,(后面再方法这一点中我们再细谈),软件开发人员和测试人员不得不更密切地一起合作。
大多数开云体育 kaiyun.com 官网入口团队会声称他们正在做敏捷。敏捷本身是一个非常松散的概念,但也有一些做法和——原谅我的措辞——固定程序是你应该知道的,如果你不想只是纸上谈兵,想要打造一支敏捷团队的话。
我知道这些内容通通要掌握的话,有点多,而且我仅仅触及了大多数主题表面的东西。
如果你是正在学习的前端开发者,在使用JavaScript写代码的时候,大家可以注意以下这些规范准则。
开发者常常用来减少变量的另一个做法是:利用函数组合以及Point-free 的风格。
现在看一下inc()函数。注意它并没有是有function关键词,或者=语法。没有参数列表,因为这个函数内部并没有使用参数列表。相反的,它返回的是如何处理参数的一个函数。
下面我们看一下使用函数组合的例子。函数组合是把一个函数结果应用到另一个函数的处理流程。你可能没有意识到,你其实一直都在用函数组合。当你调用.map()或者promise.then()函数的时候,你就在使用它了。例如,它的大部分时候的基本形态,其实都像这样:f(g(x)).在代数中,这样的组合被写成:f ∘ g, 被称作“g后f”或者“f组合g”。
使用仿函数也能实现类似的效果。使用仿函数也能实现类似的效果。下面这段代码就是使用仿函数的一个例子:
如果函数组合对你来说像外星人一样深不可测,而且你也不确定如何使用,那么请认真回顾一下前面的话:
事件处理函数和生命周期的函数是个例外,要避免使用动词形式,因为他们通常是为了说明这时该做什么而不是他们作为主语自身要做了什么。功能应该和命名一致。
第二种方式稍好,但是给人的意思是这个生命周期方法要调用一个函数。componentWillUpdate(handler)读起来就像是这个组件要更新一个事件处理程序,这就偏离了本意。我们的原意是:”在组件更新前,调用事件处理”beforeComponentUpdate()这样命名更为恰当清晰。
Functional mixins 是把属性和方法添加到Object对象上的一种方法。函数一个接一个的组合添加在一起,就像是管道流一样,或者像组装线一样。每个functional mixin的函数都有一个instance作为输入,把一些额外的东西附加上去,然后再传递给下一个函数,就像组装流水线一样。
按照功能组织文件,可以有效避免在文件夹视图中不断的上下滚动,直接去到功能文件夹就可以找到要编辑的文件了。
ES6在2015年是标准化的,但在2017年,许多开发人员避免了简洁的箭头功能,隐式回报,休息和传播操作等的功能。人们以编写更容易阅读的代码为借口,但只是因为人们更熟悉旧的模式而已。这是个巨大的错误。熟悉来自于实践,熟悉ES6中的简洁功能明显优于ES5的原因显而易见:相比厚重的语法功能的代码,这样的代码更简洁。开云 开云体育平台开云 开云体育平台开云 开云体育APP开云 开云体育APP
扫一扫关注微信公众帐号