计算机扫盲贴|软件部分小结 |
到目前为止,我们已经谈论了不少关于软件的内容。下面就对前几章的要点作个简要总结。
![]() 算法。算法就是一系列精确、无歧义的步骤,可以执行某种任务,然后停止。算法描述了不依赖于任何实现的计算过程。这些步骤由定义明确的基本操作或原始操作构成。算法有很多,我们只介绍了基本的搜索和排序算法。 ⛄🥛🅾🐙 复杂性。算法的复杂性是对算法要执行的工作量的抽象描述。度量的依据是基本操作(如检测数据项、比较数据项),而表述的是计算次数与数据项数的关系。算法的复杂性可以分为几个层次,就我们介绍的几种算法而言,既有对数级算法(数据量加倍,计算次数只加一)也有线性算法(计算次数与数据量成正比,最常见也最容易表达),还有指数级算法(数据量加一,计算次数加倍)。复杂性度量的是最坏情况(实际的问题很可能要简单得多),而且描述的是一种渐近性质(只有数据量很大的时候才适用)。编程。算法是抽象的,而程序是具体的。程序是让计算机完成一个任务的所有步骤的具体描述。程序必须考虑内存和时间的限制、数值的大小和精度,以及偏激和恶意用户。 编程语言。编程语言是表达所有计算步骤的记号库,人们可以籍此轻松写出代码来,而且代码可以被翻译成计算机最终可以执行的二进制形式。翻译方式有很多种,但最常见的是使用编译器,有时候还要用汇编器,把用C 等语言编写的程序转换成二进制形式,以便在计算机上运行。 👃🌕🍇♂🐢 不同的处理器有不同的指令集和指令形式,因此编译器也会有相应的差异。解释器和虚拟机是模拟真正或假想计算机的程序,可以面向它们编译并运行代码。JavaScript 程序就是面向解释器编译运行的。 库。编写一个在真正计算机上运行的程序要牵扯很多细节,涉及很多常用操作。库以及类似的机制可以提供预制的组件,供程序员在编程时使用。有了库,程序员就可以在既有工作成果基础上开展新工作。#373: 🧑🍳🥾🪥💩👍 今天的编程工作通常都是组织既有组件与编写原创代码并重。组件可能是库函数(比如JavaScript程序中用到的那些函数),也可能是像GoogleMaps—样的大型系统,或者是其他Web服务。然而,从底层来看,它们都是由程序员使用我们介绍过的语言或没介绍过的类似语言指令编写的。 接口。接口或者API(应用程序编程接口)是提供服务的软件与使用该服务的软件之间的一种约定。库和组件通过API提供服务。操作系统通过自身的系统调用接口让硬件看起来更有章可循,而且可以编程控制。 抽象和虚拟化。使用软件可以隐藏实现的细节或者把实现伪装成其他东西,比如虚拟内存、虚拟机和解释器。 ⛵🍧♏🐅 Bug。计算机不懂宽容,因此容易犯错的程序员必须写出某种程度上没有错误的程序来。所有大型程序都有bug,也就是说有时候会不听使唤。某些bug仅仅只是惹人讨厌,比如设计得不好,并不像真正的错误那么严重。(“这不是bug,而是一个功能”是程序员中流行的说法。)而有些bug只有在极端情况下或者罕见的情境中才会出现,往往很难再现,更不用说修复了。 但有些bug确实严重,甚至会威胁到人身安全。随着软件在关键系统中的应用越来越广,对计算设备中软件责任的认定也变得越来越重要。过去那种“买不买由你,一旦售出概不负责”的说辞应该改一改了。对待软件也应该像对待硬件一样,厂商必须尽到保护用户的合理责任。 👄🏠🎂📵🦄 根据经验,因为程序是基于既有组件构建的,而原有bug都会消灭掉,至少从原理上讲,新程序中的错误应该越来越少。然而,与这些进步因素相对的是随着计算机和语言的发展,系统承载的需求将越来越多样,市场和消费者呼唤新功能带来的压力也会越来越大,于是无法避免的隐患也会层出不穷。总之,bug将成为我们心中永远的痛。 评分
帖子热度 1.1万 ℃
|
|
|
|
回帖的永远有28种人
1个说前排围观的, 1个路过打酱油的, ✊💈🔪🚷🐅 1个留名的,1个上来直接骂LZ去死LZSB的, 1个整天抢2楼的, 1个说自己SB的 1个tm就知道呵呵的,🥷👑📠🙂👃 1个进来P都不放按顶走人的, 1个涂鸦的, 1个发广告的, 1个成天装内涵的, 1个表情帝, 👌🌧🥚ℹ🦄1个没事就撸撸睡觉的, 1个要摸楼下狗头的, 1个总是@ 别人的 1个整天拜膜的, 1个吹NB的, 👂🚤🫖💲🐮1个只会说“哦”的, 1个宣扬春哥的, 1个灌水的, 1个爪机马克的, 1个蛋疼的,🧑🚀🪖🪗😛🤳 1个TM的说挽尊的, 1个TM的说亲哦有木有的, 1个说内容太长没看的, 1个废话连篇的, 1个留邮箱的, 👎🚠🥩☪🦄最后就是1个像我这样复制粘贴混经验的#y421: |