热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

数据结构应该教会我们什么?

数据结构作为大学计算机相关专业的最基础的课程之一,我相信很多软件开发的从业者都能够列举一些具体的数据结构,比如栈、链表,树,图等。但它对我们实际的开发过程有什么用呢?可能很多人都会说,没有太大用处,数据结构中学的东西,工作中基本都用不到。之所以有这样结论,在笔者看来,是因为我们只学会了数据结构交给的我们的术,而没有学会其背后更本质的道。

数据结构作为大学计算机相关专业的最基础的课程之一,我相信很多软件开发的从业者都能够列举一些具体的数据结构,比如栈、链表,树,图等。

但它对我们实际的开发过程有什么用呢?可能很多人都会说,没有太大用处,数据结构中学的东西,工作中基本都用不到。

之所以有这样结论,在笔者看来,是因为我们只学会了数据结构交给的我们的术,而没有学会其背后更本质的道。

我们的现状

在很多的软件开发过程中,说实话,数据结构并不是一门必须要掌握的技能,因为很多的软件开发,并不需要什么高深的技术,直接想到哪儿,写到哪儿,错了就改,然后功能就实现了,看起来也没有什么问题。

特别对于现在的动态类型语言来说,编写代码更加的容易了,不需要关心类型,随心所欲写就行了,只要不报错,只要看起来实现了我们想要的东西,就OK了,极大的降低了写代码的门槛。

但作为一个有追求的工程师,我想很多人还是不想就这样的,因为这样,即便工作十年,也只是熟练度的提升,多掌握了几个语言,本质并没有变化。

那怎样才能在本质上有所改变呢?

数据结构的本质

笔者认为,要要在本质上所有改变,我们需要首先理解数据结构的本质,它的道,然后不断的思考而训练。

数据结构的本质不应该是栈、链表这些具体的东西,它的本质应该是抽象和重组,如何通过结构化的思维抽象现实世界,将它们变成一个一个独立的基本单元,然后通过重组,然后组成一个高效的系统。

数据结构应该教会我们通过结构化思维进行抽象和重组的能力。

每当我们拿到一个需求,我们应该在全面理解的这个需求的情况下,进行合理的抽象,将其抽象成若干个相互独立而又相互关联的数据结构,然后组合起来,加上一些方法调用的交互,最终实现需求。

注意,我们这里没有使用面向对象进行说明,因为对象只是抽象的呈现一种方式。

越复杂的系统,抽象越发重要,良好的抽象能够化繁为简,让整个系统的行为更容易预测,更容易维护。一个经过良好抽象的系统和一个没有抽象的系统,维护起来,不是一倍两倍的差距,而是十倍百倍和能与不能的差距。

如何做好抽象

对同一个东西,水平不同的人能够不同的抽象,他们的差别是数量级的。最差的就是没有抽象,靠蛮力;最好的就是抽象合理,不多不少,简洁优雅。

对于高水平的来看,前者一团乱麻,不知所云,后者是一首优美的诗,简洁优雅。

抽象需要透过事物的表面看本质,即便表现完全不一样的东西,其本质可能是一样的。

抽象能力的获取都没有捷径,我们只能在遇到任何需求和事物的时候,多一层思考,不断的实践和应用。

当然在思考的核心之后,我们可以多看看优秀开源软件的设计,看他们的如何思考和解决问题的(注意不是浮于表面,而是要理解为什么),站在巨人的肩膀上肯定比自己从零探索快很多。

获得的好处

软件开发的核心是管理复杂度,当我们有了足够好的抽象之后,单元之间的就能够更容易的组合起来,单元与单元之前形成一个有机的整体,带来的结果是就复杂度的简化,更清晰的逻辑,更好的代码可维护性。

其次是对个人的,当一个人具备这样的能力时,无论技术上还是非技术上,他的成长会更快,能够获取更多更本质的东西,能够从更底层的维度看一个系统、一个产品、甚至人生。

本文到此结束,更多精彩文章,尽在「代码写诗」,微信搜索「 代码写诗 」公众号即可关注。

数据结构应该教会我们什么?


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • 新冠肺炎疫情期间,各大银行积极利用手机银行平台,满足客户在金融与生活多方面的需求。线上服务不仅激活了防疫相关的民生场景,还推动了银行通过互联网思维进行获客、引流与经营。本文探讨了银行在找房、买菜、打卡、教育等领域的创新举措。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本文介绍了如何在最新版本的Visual Studio Code中配置中文语言包,使用户能够更便捷地使用中文界面。文章详细描述了安装和配置步骤,并提供了相关补充说明。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文将详细介绍在Windows 7环境下,检查U盘启动盘是否制作成功的多种方法,包括通过BIOS设置和使用模拟启动工具。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
mobiledu2502864045
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有