计算机是进行数据处理、运算的机器(有点儿像机电系统中的电动机)。当我们回顾数据管理简史并较深入理解计算机原理后会发现,有两个基本问题就包含在其中, 一是处理的数据在在什么地方,二是要处理的数据有多大 。如果我们能够深刻理解这两点,那么无论从CPU微观世界里还是大数据宏观视角,当前许多热门词的“神秘”面纱很轻松地被我们撕下来。
从数据中心角度看,有个客户想租用IDC的机柜,那么我们也绕不开这两个基本问题,一是放到哪个机房的哪个机柜,二是占用多少个机柜空间。计算机通信也遵循这两条基本问题,当我们读取服务端的数据,需要告诉服务端要读取的值的起始地址和要读取数据的数量,如图1所示。
图1 数据存放示意
软件工程是指导计算机软件开发与维护的工程学科。为了让我们能掌握现代化的软件开发方法,需要系统地学习软件工程相关知识(包括:软件工程的概念、原理、技术,经时间考验而证明正确的管理技术、当前的技术方法等等)。但这样学起来,如果没有一定的计算机基础和实践经验,那么这些概念好比教我们如何游泳,但从来不把我们带到游泳池旁下水一样,体会不到软件开发所具有的创新性和灵活性(这也是软件工程与建设工程主要不同之处之一)。关于软件工程主要内容大学教科书目录结构如下图2所示。
图2 软件工程教科书目录
从图2可见,软件工程也跟建设工程一样,以需求为导向,围绕可行性研究、总体设计(土建工程设计图)、详细设计(深化过的施工图)等进行开发(或建设)。同时,通过接口设计来对接其他模块(就像数据中心中电气、暖通、装饰装修衔接一样),开发过程中也有应遵循的相关的流程、准则、标准和规范等。但是从玉工接触数据中心领域后的体会来看,只有多到现场看实物并在脑海里建立基本设备材料和工具的三维模型才能将那些看似“死板无聊”的国家标准规范变成施工过程必须遵循的“法宝”。
总结起来就是软件工程也跟建设工程一样,须到施工现场多看施工工程师们(平时所谓的工人或农民工,但我看来他们只是从事着不同工作而已,也是自己领域的专家)施工过程一样需要自己配备一台电脑,搭建软件集成开发环境(IDE)并多敲代码练习才会领会软件工程真正含义。
自从开辟“软件工程”话题后发现,自己做了一个不自量力开端。虽然工作原因亲历BSS、OSS、Callcenter等不少中大型软件集成项目,但觉得只讲概念和框架还不够。最近这几个月的自学尝试和体验开发过程发现编程也很像学乐器(比如六弦琴)。学音乐天天看乐谱及理论和别人演示还不够,必须自己拿起吉他动手练习才能学会并培养音乐细胞。编程也是,除了看书和理解别人代码,还需要自己动手敲代码,逐步熟悉那些常用的代码并多动手练习通过编程语言语句表达算法才能写出一个程序,借助调试才能逐步明白程序执行过程并与计算机建立连接,让计算机“听懂”我们的“话”,也让自己逐步形成编程思维。
实际上,计算机的整个发展过程就是不断引入新的中间层,即所谓的分层思想,举例如下:
(1)计算机的早期,程序都是直接运行在硬件之上,自己负责硬件的管理工作;程序员也使用二进制进行编程,需要处理各种边界条件和安全问题。
(2)后来人们不能忍受了,于是开发出了操作系统,让它来管理各种硬件,同时发明了汇编语言,减轻程序员的负担。
(3)随着软件规模的不断增大,使用汇编语言编程开始变得捉襟见肘,不仅学习成本高,开发效率也很低,于是C语言诞生了。C语言编译器先将C代码翻译为汇编代码,再由汇编器将汇编代码翻译成机器指令。
(4)随着计算机的发展,硬件越来越强大,软件越来越复杂,人们又不满足于使用C语言了,于是 C++、Java、C#、Scala、Python、PHP、Javascript、Go、Rust、Dart... 等现代化的编程语言诞生了。
可以看出,计算机的世界离不开C/C++,他们俩构建了计算机虚拟世界赖以生存的最底层。由于运行效率高,C/C++更适合去写那些要求高性能和服务器端运行的系统级软件,如图3所示。
图3 C/C++构建了计算机世界“根”技术生态
同时,图形图像也是这两个语言强项,桌面开发时期的绝对霸主。互联网时代,以B/S架构的Web框架为主,引来的Java的崛起。同时,大数据开发领域Java家族更是傲视群雄,如图4所示。
图4 大数据生态
面对大数据和云计算时代的红利,Python也不甘示弱,通过自己易用、丰富开放的工具包,占领了数据挖掘和大数据分析及云计算基础设施的领域,例如Openstack就是其中的典型案例之一。
最近几十年,围绕云计算、大数据、人工智能技术不断出现了多种软件框架及模式。同时,作为错过互联网和云计算时代的C/C++语言替代品,为了适应移动互联网和云计算需求,基础底层方面也出现了Go、Rust、Carbon等语言等。面对多种终端生态,也许我们觉得C/C++没有什么用处,但谷歌和微软等巨头也为了程序员高效开发并避免重复工作(编程思想根本之一),也出现了Flutter和 Multi-platform App UI (MAUI)等跨平台UI框架。让我们看到Flutter架构图,如图5所示。谷歌公司搞出来的Dart语言的未来生态我们也不敢做结论,但图中看起来Dart语言也算是C/C++的子孙后代的样子,当然这只是假想,实际是不是也需要进一步了解,没有学我也不能胡说。
图5 移动互联网跨平台UI框架Flutter架构
随着移动互联网和云计算的时代的发展,我们感受到热门词和概念越来越多,多到搜百度...这对数据处理(或管理)从业者带来了一种“学不完”的感觉,甚至怀疑自己是不是被时代淘汰了的错觉和压力。
图6 “啃不完”的新技术...
同时,我们开始提倡“让运维自动化和智能化,从业人员干更有价值的事情”的建议。我们也可以反思一下什么是有价值的、不容易过时并经得起实践考验的知识呢?我想这还离不开数据处理的 数据放在什么地方(地址)和处理的数据有多大(类型) 的两个基本点。要学计算机基本理论,那么也离不开C语言(其他编程语言也是可以的)及数据结构等基础知识学习。如果我们真正明白了数据处理基本问题和基础理论,那么其他任何一个语言学起来会更加顺利。
为了讲清楚软件工程这个话题,接下来的文章里我们将从集成开发环境的搭建、将身边的小需求改为程序并对其进行调试、测试并形成发行版可执行程序等几个过程跟大家一起体验软件工程的开发(施工建设)过程。虽然这个过程对带来了一些挑战,但是理解软件工程的本质和培养编程思维还是价值的。
全部0条评论
快来发表一下你的评论吧 !