面向对象方法的优势简化软件开发的过程_软件开发技巧的途径

ac658d1a-8917-eb11-8da9-e4434bdf6706.png

软件开发的复杂性每天都在增加。几乎每年都会发布一个新的框架(例如AngularJS,ReactJS)和一个新的构建工具(例如Webpack,Rollup)。甚至每年都会发布新的JavaScript版本(ECMAScript 2015、2016和2017年即将发布)!

通常,在软件开发的其他领域中也存在相同的情况。
例如移动应用程序。2年前,苹果推出了一种新的编程语言Swift。iOS操作系统几乎每年都会发布具有新API和功能的新版本。

这对软件行业来说非常有用。但是对于我们软件开发人员来说,这是很大的负担。

不幸的是,人类的知识创造力令人印象深刻……但有限。您不能(也不应该)知道所有新框架和构建工具。

软件开发人员可以做什么?解决方案是应用有效的学习策略:接受编程基础知识

编程基础包括算法,数据结构和编程语言知识。

如果您想成为一名出色的软件开发人员,毫无疑问,您应该不断掌握趋势技术(例如React,Redux和Angular)。同时,他们付出了相同的努力来定期学习基础知识,例如算法,数据结构,编写伸缩性原理和简洁代码。

本文是我对如何处理开发复杂性的看法。此外,您会发现开发人员的精通进度的有趣划分。我将这些阶段命名为上下颠倒的三角形矩形三角形

1.概念

编程基础的重要部分是算法。算法是对应该执行以获得结果的操作的逐步说明。

使用编程语言将算法编码到计算机中。Web开发人员通常使用JavaScript进行编码,iOS开发人员通常使用Swift(或Objective-C)进行编码。

您应该知道的常见算法类别:

  • 排序算法:冒泡排序,插入排序,快速排序等
  • 搜索算法:二分搜索,广度优先搜索,深度优先搜索等
  • 最短路径算法:Bellman-Ford算法,Dijkstra算法等
  • 数学算法:斐波那契数列,最大公除数,最小公倍数等

现有算法的数量令人印象深刻。这些算法中的许多算法都是软件开发和联网的基础。

在学习算法时,我听到的第一个原因是开发人员无需确切了解特定算法的工作原理。您可能认为所有现有算法都已实现,测试并包含在标准库中。
或者您从来没有在JavaScript中使用Bellman-Ford算法的案例。

如果您确定要成为一名成功的软件开发人员,那么这种借口是错误的做法。要构建复杂且高质量的应用程序,您必须具有算法知识。

实际上,算法是在标准库中实现的,开发人员无需手动编写它们。但是,由于缺乏专业知识,开发人员无法查看何时使用特定算法很好地解决了问题。
存在具有算法的库,但是开发人员在有用时根本看不到这种情况。

详细学习算法是宝贵的经验。学习和掌握它们可以培养解决难题的直觉

强大的直觉是定义优秀的软件开发人员的原因。当然还有经验和纪律。

直觉是纯金。

数据结构也是必不可少的方面。学习它们将教您如何正确表示应用程序中的信息。

正确选择的数据结构具有巨大的好处。它使管理数据的代码更易于编写和维护。数据操作,存储,查询等操作更易于实现。

质量代码由有效的算法和方便的数据结构组成。

2.初学者:上下颠倒的三角形

为了简化表示,将编码能力划分为简化方案:

  • 基础知识:与算法,数据结构,计算机科学问题,应用程序设计原理(SOLID,KISS,DRY,SoC),可伸缩性相关的所有内容
  • 语言:与编程语言(JavaScript,Swift,Java),语法,运算符,变量,编译器相关的所有内容
  • 框架:与框架(AngularJS,ReactJS,Cocoa Touch)和平台(浏览器,NodeJS)相关的所有内容。

软件开发精通的第一级是初学者,它由一个倒置的三角形表示。

ad658d1a-8917-eb11-8da9-e4434bdf6706.png

每个程序员(包括我)都从这个级别开始。

初学者对特定的框架(例如ReactJS)感到非常兴奋。他遵循了一些框架教程,并且具有不错的理解水平。

此类开发人员的JavaScript知识对于使用ReactJS进行编程是必需的最低要求。他擅长定义变量,函数,ES2015模块和ReactJS组件。

但是他有像JavaScript的更深层次的概念,问题href="https://dmitripavlutin.com/gentle-explanation-of-this-in-javascript/">是如何this关键字作品,原型继承,提升和事件循环。

缺乏语言经验会对JavaScript中的组件编码方式产生负面影响。通常,黑客和变通方法仅用于使事情正常进行。

算法和数据结构的知识非常有限。
当应用程序的一部分可能受益于众所周知的算法时,开发人员看不到这一点,便开始发明轮子。而且,发明的轮子通常质量低并且浪费时间。

最常用的数据结构是数组和纯JavaScript对象。但仅此而已。

3.精通:矩形

下一个级别是熟练的开发人员,用矩形表示(我希望将自己归于这个级别!)。

af658d1a-8917-eb11-8da9-e4434bdf6706.png

熟练的开发人员已经很好地掌握了ReactJS框架和JavaScript语言。他的代码中的骇客数量很少。

熟练的开发人员可以看到某些数据结构或算法使代码更加高效的情况。但是直到有限的水平。

例如,应用程序具有一个组件,该组件经常在具有很多元素的数组中进行搜索。如果很少更改数组,则开发人员认为对数组进行排序是合理的。并且当需要执行搜索操作时,请使用二进制搜索算法,在这种情况下,该算法非常有效。

在矩形情况下,开发人员能够创建高质量的应用程序,但效率最高。

4.专家:三角形

上层是专家开发人员,他掌握了所有三个方向:基础知识,语言和框架。他由一个具有坚实底数的三角形表示。

b0658d1a-8917-eb11-8da9-e4434bdf6706.png

专业的开发人员能够看到某些算法的效率,并在必要时应用它们。他从选择正确的数据结构中受益,使数据操作变得简单。

挑战是从可用算法中选择最适合具体情况的算法。这是获得最大可能性能的平衡过程。

由于编程语言是一种表达算法思维的工具,因此开发人员所写的语言无关紧要。专家可以使用多种语言:JavaScript和Ruby,或C ++和Java。

5.建议

趋势框架甚至语言都迟早会消失。它们将被更好的工具所取代:这是进化的必然结果。您可以做的就是强调基础知识。

当然,基础知识很难学习。许多算法很难理解和记住。我的建议只是为了好玩:您可能会多次阅读复杂的算法。考虑一下可以带来特定数据结构的好处。挑战自己,变得越来越好。

b1658d1a-8917-eb11-8da9-e4434bdf6706.png

尽管基本面很困难,但还有一个令人愉悦的好处:它不会经常更改。从80甚至70年代开始并没有创建任何重要的新算法或数据结构。一次又一次地学习它们,然后不时重复它们,那么您就很好了。

面试过程

像Google,Apple和Microsoft这样的大型软件公司都非常重视算法和数据结构。这些公司的采访中包含许多计算机科学问题,白板编码,平衡树等。

我读过许多帖子,批评这种方法,公司会查询错误的技能。他们说开发人员在“现实世界”编程中不处理排序算法或平衡树。
您可以轻松地击败这样的论点:我从未遇到过精通算法和数据结构的程序员,然后声称这是浪费时间。此外,大多数人声称这些很重要。

我个人同意计算机科学面试问题。由于软件开发行业发展如此迅速,因此公司需要具有扎实背景的开发人员。

一方面,这样的开发者可以有效地解决复杂的问题。另一方面,他可以轻松适应新的语言和框架,以适应快速发展的行业。

最后,成为一名专业人员真的很高兴。如果系统询问您:“请使用Dijkstra的算法解决此问题[…]”。没问题!拿粉笔,轻松解决问题,并给他们留下深刻的印象

采取行动

成为主人没有捷径。使您变得更好的是学习练习

不断学习和练习。

您可以同时向三个方向前进。基本原理,语言和框架同样重要。JavaScript开发人员可以从以下内容开始:

  • 基础知识:Steven S. Skiena的《算法设计手册》
  • 语言:Kyle Simpson的《JavaScript入门》系列
  • 框架:React:启动和运行 Stoyan Stefanov

在这些方向上巩固自己的基础之后,再上一个台阶:

  • 代码的质量和可读性: Robert C. Martin 编写的干净代码(我最喜欢的书之一)
  • 面向对象的设计和可伸缩的代码:设计模式:可重用的面向对象软件的元素

原著作者:德米特里·帕夫鲁汀

文章来源:国外

原著链接:

Dmitri Pavlutin Blog​dmitripavlutin.com
b2658d1a-8917-eb11-8da9-e4434bdf6706.png

PS:原著文章内容为英文版本,建议使用360极速浏览器进行翻译阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库(4): 创建并选择数据库

目录 (1)创建数据库yang (2)使用yang这个数据库,让yang变成当前数据库 (3)每次启动mysql会话时在使用前先选择这个固定的数据库 (1)创建数据库yang create database yang; 返回: (2)使用yang这个数据库,让yang变成当前数据库 use yang;…

Java 字符串拼接的各种玩法

java中字符串拼接各种方式与执行效率 由于String对象是不可变对象,因此在需要对字符串进行修改操作时(如字符串连接和替换),String对象总是会生成新的对象,所以其性能相对较差。   String常量的累加操作:…

mysql数据库(5): 创建表

目录 (1)查看有哪些表 (2)创建一个宠物表关于名字,主人,种类,性别。 (3)查看下创建的表 (4)查看某个表内容 (1)查看有…

谷歌浏览器外贸版_外贸 网站移动端优化 浅析

外贸 网站移动端优化 浅析自2015年推出所谓的Mobilegeddon以来,移动设备的重要性一直在不断增长, 网站移动端优化 就成了不得不引起重视的问题,同学们从事谷歌SEO优化工作就必须考虑不断变化的环境,从而在对应的项目上进行相关的操…

开机f8修复电脑步骤_电脑无法开机怎么办,8 种情况的修复方法

电脑故障千奇百怪,其中最令人慌张的一定是无法开机。导致电脑无法开机的原因太多了,但线索却是最少,我们唯一知道的事实就是:什么都不起作用了。作为非专业维修人员,如果解决电脑无法开机的问题?老实说小A并…

mysql数据库(6):将数据装入表中

目录 (1)一条数据一条数据的插入 (2)批量插入 (1)一条数据一条数据的插入 INSERT INTO pet VALUES(hanhan,洋洋,hehe,f,2022/2/5,NULL); 返回: 空就填为 null (2)…

Java Pattern类和Matcher类的使用

java.util.regex 是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern 和 Matcher。 Pattern 对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为 Pattern 对象,然…

mysql数据库(7):表中检索信息

目录 (1)选择所有数据 (2)修改表内容 方法一 方法二 (3)单独选择某一行 (4)选择特殊列 (5)分类行 (6)日期计算 (…

saas- -m ihrm 项目_Convertlab等企业入选腾讯SaaS加速器二期名单

全球TMT2020年10月30日,10月29日,腾讯SaaS加速器二期入选名单正式公布。Convertlab从超过1500个报名项目中脱颖而出,入选腾讯SaaS加速器全球40强。入选的40家企业覆盖零售、医疗、金融、教育、工业、地产等13个领域,总估值超700亿…

mysql数据库(8):获得数据库和表的信息

目录 (1)查看有哪些数据库 (2)选择数据库 (3)查看该数据库中有哪些表 (4)查看表结构 (1)查看有哪些数据库 show databases; 返回: &#xf…

energy in transition课文翻译_备战四六 | 四六级翻译常考固定表达,速记!

80个固定表达四六级翻译内容一般涉及:中国传统文化、旅游活动、历史事件、经济政治、社会发展等相关的词汇。今天和大家分享四六级考试中常考的固定表达。1. 随着经济的繁荣 with the booming of the economy2. 随着人民生活水平的显著提高 with the remarkable imp…

mysql数据库(9):常用查询的例子

目录 (1)可以使用以下语句创建示例表 (2)执行语句后,查看表所包含内容 (3)列的最大值 (4)拥有某个列的最大值的行 方法一: 方法二: &#x…

mysql数据库(10):数据 备份

目录 (1)备份某个数据库下的固定某些表 (2)对单个或多个库进行完全备份 (3)对所有库进行完全备份(建立all.sql文件) (1)备份某个数据库下的固定某些表 目标&#xff…

华为5720设置静态路由不通_静态路由理论知识详解

一、简介静态路由是一种需要管理员手工配置的特殊路由。静态路由在不同网络环境中有不同的目的:当网络结构比较简单时,只需配置静态路由就可以使网络正常工作。在复杂网络环境中,配置静态路由可以改进网络的性能,并可为重要的应用…

正则表达式的运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。 相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序: 运算符 描述 \ 转义符 (), (?:), …

mysql数据库(11):恢复数据

目录 (1)先登录 (2)查看数据库有哪些 (3)新建一个空表text (4)删除数据库yang (5)恢复数据库 (1)先登录 mysql -h localhost -u root -p (2)查看数据库有哪些 show databases; 返回: (3)新建一个空表text create database text; 返回: (4)删除…

c语言sin程序怎么写_用数控铣床加工六芒星,程序应该怎么写?

就用D50MM圆柱毛丕,D10的铣刀粗略写一个,仅代表个人观点哈~主程序:O0000G17G40G49G80G90G54G0G90G54X27.Y-12.5Z50.S2000M3Z3.G1Z0.F300M98P50001G0Z50.M05M30子程序:O0001G91G1Z-2.F300G90G41D1G1X21.65Y-12.50F300G1X7.22X0.Y-25.X-7.22Y-1…

Java数字格式化

数字的格式在解决实际问题时使用非常普遍,这时可以使用 DedmalFormat 类对结果进行格式化处理。例如,将小数位统一成 2 位,不足 2 位的以 0 补齐。 DecimalFormat 是 NumberFormat 的一个子类,用于格式化十进制数字。DecimalForm…

mysql查询三个月内的_如何在三个月内自学攻克雅思6.5分?

新西兰留学移民经历分享-进行时(3)编者按:选新西兰留学前,看过很多博主的帖子,让一个从没到访过新西兰的我有了多一些了解和规划。现在也希望能把自己的经历分享给大家,同时作为人生中比较大的一个决定,想用文字记录全…

Java大数字运算

在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。 BigInteger 类 如果要存储比 …