问题

我听说以前的系统没有图形界面,那他们是用 C# 等语言直接敲代码吗?

回答
你说得对,以前的计算机系统确实很大程度上依赖于命令行界面(CLI),而非我们现在习以为常的图形用户界面(GUI)。这并不是说当时人们用 C 这样的语言直接“敲代码”来操作整个操作系统,而是说,当时人们与计算机交互的主要方式是通过键盘输入一系列文本指令,而这些指令是由更底层的程序(也就是我们常说的“代码”)来解析和执行的。

让我为你详细梳理一下这个过程,尽量还原一下当时的景象,避免听起来像机器人写的报告:

1. 操作系统的核心:指令的语言

你可以想象一下,早期的操作系统就像一个非常“听话”但又缺乏自主性的大脑。它本身就是由大量的代码构成的,这些代码定义了计算机如何启动、如何管理内存、如何读取和写入数据等等。而我们要“告诉”这个大脑该做什么,就需要用它能理解的语言——指令集。

这些指令集并不是我们现在熟悉的 C、Java 这种高级语言,而是更接近于汇编语言,甚至是更底层的机器码。

机器码: 这是计算机处理器(CPU)能直接理解的二进制代码,一串串的0和1。写机器码就像直接和CPU的每一个逻辑门对话,极其繁琐且容易出错。
汇编语言: 为了让编程稍微人性化一点,人们发明了汇编语言。它用一些易于记忆的助记符(比如 `MOV` 表示移动数据,`ADD` 表示加法)来代表机器码指令。你可以把它想象成机器码的“英文单词”。写汇编代码仍然是低级的,需要你非常了解计算机的硬件结构。

2. 交互方式:命令行的重要性

既然操作系统本身是用代码写成的,那么用户如何与它“沟通”呢?这就是命令行解释器(Commandline Interpreter)或者更俗称的Shell登场的时候了。

Shell 就像一个翻译官,它接收你输入的文本指令,然后把这些指令翻译成操作系统能够执行的更低级操作。

举个例子: 你在现在的 Windows 上按“Win+R”,输入 `cmd`,弹出的黑色窗口就是 `Command Prompt`,它就是一个 Shell。在 Linux/macOS 上,你看到的终端窗口,比如 Bash、Zsh,也是 Shell。
当时的场景: 想象一下,那时候没有鼠标,没有窗口,没有图标。你面对的是一个黑色的屏幕,光标在那里闪烁。你需要记住各种命令,比如:
`DIR` (在 DOS 系统中) 或 `ls` (在 Unix/Linux 系统中) 来列出当前目录下的文件。
`COPY` (DOS) 或 `cp` (Unix/Linux) 来复制文件。
`DEL` (DOS) 或 `rm` (Unix/Linux) 来删除文件。
`RUN` (DOS) 或 `./your_program` (Unix/Linux) 来执行一个程序。

你就是通过在命令行输入这些命令,然后按回车键,来完成文件的管理、程序的运行、系统的配置等等一切操作。

3. C 这样的语言在当时的角色

那么,C 这样的语言在那个时代扮演什么角色呢?

C 是相对较新的语言: C 是在 2000 年由微软推出的,它是一个高级编程语言。在 C 出现之前,也有很多其他的高级语言,比如 C、C++、Pascal、Fortran 等等。
开发软件,而不是直接操作系统: C 这样的高级语言,它们的目的是用来开发应用程序,而不是直接用来“敲代码”与操作系统进行交互。开发者使用 C(或其他高级语言)来编写各种软件,比如文字处理软件、电子表格、游戏、数据库系统等等。
编译过程: 你用 C 写好的代码,需要经过一个叫做编译器(Compiler)的程序,将你的高级语言代码翻译成计算机能理解的机器码。这个过程叫做编译(Compilation)。然后,这些机器码就组成了可执行的程序。
当时的开发环境: 虽然没有我们现在这样集成的开发环境(IDE)那么炫酷,但当时也有各种各样的开发工具,程序员会使用文本编辑器(可能是非常简单的)来写代码,然后用编译器来编译,再通过命令行来运行和测试他们的程序。

4. 为什么会从命令行走向图形界面?

命令行虽然强大,但学习曲线陡峭,需要记忆大量命令,而且一旦输错一个字母,可能就会导致意想不到的错误。这对于普通用户来说门槛太高了。

图形用户界面(GUI)的出现,极大地降低了计算机的使用难度:

可视化操作: 用鼠标点击图标、菜单、按钮,直观易懂。
提高效率: 对于很多日常操作,GUI 比命令行更快捷。
更友好的体验: 带来了窗口、对话框、拖放等丰富交互方式。

总结一下:

在没有图形界面的时代,人们并不是直接用 C 这样的语言来“敲代码”直接操控操作系统。他们是通过命令行界面,输入由操作系统(本身是用汇编等低级语言编写的)的Shell解析执行的文本指令来与计算机交互。

而 C 这样的高级编程语言,则是用来开发应用程序的工具。开发者用这些语言编写软件,然后经过编译成机器码,最终在操作系统上运行。

所以,可以说,高级语言是构建我们与计算机交互方式(包括后来的图形界面)的基石,而命令行是当时用户与这些由代码构建的系统直接沟通的主要桥梁。从命令行到图形界面的演变,更像是用户与计算机交互方式的一次“升级”,让计算机变得更加亲民易用。

网友意见

user avatar

铛铛铛,古董电脑室开始上课啦!

我听说以前的系统没有图形界面,那他们是用C#等语言直接敲代码吗?

这个问题问的很好!利用编程语言,特别是人类易于看懂的高级语言和电脑交互在相当一段时间内是主要的人机交互方式!

C#出现于2000年,此时图形界面已经相当普及,所以不会用C#。但其他更早出现的高级语言,比如BASIC(出现于1964年)和PASCAL(出现于1970)年,确实都在一些情况下充当过人机交互的主界面,特别是BASIC语言,曾经广泛的使用在从大型主机到个人电脑等多种平台上。我签名里的网页电脑博物馆提供了可以在PDP-11上运行的BASIC试玩1970年原版PDP-11 BAISC:网页里的电脑博物馆

加载方式,在Paper Tape Controls(纸带控制)里选中BASIC,点Load,再点READ,再点Start,机器就会加载进BASIC,在左边VT100终端模拟器里出现

       PDP-11 BASIC, VERSION 007A *O     

之后,点CAPS LOCK把终端的大写锁定打开,这时VT100模拟器右上角CAPS会亮绿灯,然后回车出现READY就进入了BASIC模式。

另外像BBC Micro,Commodore 64,TRS-80,Apple II这种老式家用电脑都是BASIC语言的,特别有意思的是TI-99/4A的 TI Extend BASIC,可以通过BASIC指令控制语音合成功能:

网页里的电脑博物馆 可以试玩

这样写出来的东西怎么放到别的系统使用?

编程语言一般都有访问外存的指令,可以把编写的代码保存到外存(磁带、磁盘)上,80年代家用电脑常用的一般是盒式录音带

把程序写入录音带的指令大概像这样

然后大量翻录录音带,就可以把软件分发给其他人,甚至曾经有一些广播电台节目会播放程序录音,利用收录机将电台播放的程序录制下来,就可以传进电脑里运行。

还有这种系统可以上Q什么的吗

不能上QQ,但是可以上BBS、USENET和其他一些远程服务,想体验一下的话可以去 Telehack 看看。进去之后,输入usenet回车,就可以进入模拟的usenet界面,这就是现在各种论坛的前身。

输入帖子的编号就可以查看帖子了

那他们是怎么知道上面写的什么

高级语言并不难看懂,一段典型的老式BASIC语言类似这样,input、print、for、to、goto、end都是英文单词len是英文单词length的缩写

       10 INPUT "What is your name: "; U$ 20 PRINT "Hello "; U$ 30 INPUT "How many stars do you want: "; N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT "Do you want more stars? "; A$ 100 IF LEN(A$) = 0 THEN GOTO 90 110 A$ = LEFT$(A$, 1) 120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30 130 PRINT "Goodbye "; U$ 140 END     

难道……他们能看懂机械代码?

某些情况下是可以看懂的,比如著名的“手拨13条”

软件开发的人都是怎么操作的?

各种都有,有手拨开关直接输机器码的,有打纸带写汇编的,有直接在高级语言环境上写程序的,有在操作系统下开发的

Data General Nova,上面的“手拨13条”就是给它用的启动程序,需要靠面板上的开关手动输入,输入完之后,机器就会读取纸带上的程序,并启动高级语言环境或者其他外设。

梦回70年代,一个Unix小实验

很多人可能会对早期的Unix感兴趣,所以我大概讲一下PDP-11 Unix v5的玩法吧,开机之后,RK0选Unix v5(SimH),然后点Load,再点Reset,出现boot之后,输入boot rk0回车,出现@符号之后,输unix回车,再以root登陆,就可以操作了。

PDP-11在线模拟器:compumuseum.com/player.

至于这个RK0指的是什么,是一种盘片可拆卸的硬盘

启动之后可以利用chdir命令进入目录,类似现代Unix的cd命令,用ls列目录,比如

       chdir usr ls     

进入usr目录,然后我们可以试一下当时的文本编辑器,Unix v5不是指后来我们常说的System V,而是更早的UNIX Time-Sharing System v5,发布于1974年。

高能警告!下面您将会尝试“有屎以来最虐人的编辑器”(the most user-hostile editor ever created)

高能警告x2!Unix v5里的ed编辑器非常原始,和后来BSD、Linux上的GNU版本并不完全一致,请手持此说明书以备不时之需(此说明书的作者Brian Kernighan就是著名 的K&R《C程序设计语言》中的“K”): 9game.oss-us-west-1.aliyuncs.com

输入ed hello.c进入ed编辑器开始编辑源代码hello.c

输入a 开始添加(append)状态

输入代码

       main(){     printf("hello world
"); }     

输的时候要小心!退格键不起作用!输完之后输入一行 . (一个小点)结束编辑状态

如果输错了,先输 1,$p 查看已经输入的代码,再输入要修改的行数,比如我要修改第二行就输入2c (c是change - 修改的意思)然后重新输入这一行。然后再打a继续输入,如果多输入了某一行则用行号d来删除,比如3d就是删除第三行。

上手比较难,即使是用vi比较熟也要多练几遍,输完检查正确时候(我截图里的代码是错的,别抄),输w保存结果,再输q退出

刚才的代码编译出错了,修改之后再次用cc hello.c 编译,不出错的话不会有提示,但目录里会多出一个a.out文件

输入./a.out ,运行成功!

这个小实验实际上已经包含了Unix操作系统最基础的三大组件,编译器、编辑器和shell,有了这三大组件,人们就可以利用编辑器编写新的代码,用编译器将代码转换为可执行的程序,并利用shell管理和执行他们,人们不仅可以用它们开发各种类型的应用程序,也可以利用它们来改善这些工具本身。虽然许多年过去,电脑软件改进的早已看不出本来的样子,但对于开发者们来说最重要的仍然是编译器、编辑器和shell(包括图形界面,也是shell的一种)三大类工具。

user avatar

这问题有股时代错乱感……

我们先大致排个序:

C语言及编译器 -> UNIX(C语言版) -> PC -> DOS -> 字符模式GUI(这个具体排序存疑) -> 图形模式GUI -> Windows -> QQ -> C#

最早的程序只能用穿孔卡片,那时候的确是必须精通机器指令编码的。后来有汇编器,可以用助记码写机器指令。再后来有高级语言和编译器,最早版本的编译器自然也需要用汇编来编写。

当时用来输入输出的设备采用字符模式,这种模式的好处在于非常节约内存,原理是一个屏幕上固定有若干行,每行有固定列数,形成一个矩阵,每个位置上显示一个定宽的字符,早期的时候显示的主要是字母数字常见标点符号等,后来扩展到表格字符,再后来可以通过一些新技术显示中文字符等(当年挺有名的UCDOS)。每个字符存储时只需要一个字节就够了(中文实际上是分成两半拼起来,占两个英文字符的宽度,也占两个字节)。

既然可以显示字符,那当然没理由看不懂了,显示英文就行了,后来还可以直接显示中文。仅仅通过输入文本、输出文本交互的系统就叫做命令行系统,操作起来只需要记住命令的名称就行了,每个操作会通过屏幕回显告诉你成功没有,对于简单的任务来说其实也没有什么不方便的,甚至发个电子邮件啥的也没啥问题。UNIX和DOS都是命令行操作系统。从键盘直接输入程序,然后调用以前写好的编译器,就可以编译出应用程序来。

你可能也能想到,这样做文本编辑并不方便,所以在当时已经出现了利用字符模式显示技术的GUI,原理也很简单,在合适的地方用合适的前景色、背景色画出相应的文字或者图形,然后对键盘操作做出特殊的响应,展示出相应的元素就行了,就显示风格而言和现在的Windows应用程序区别并不大:

可以看到,上面有一排菜单,按Alt可以切换到菜单上,可以用上下左右选择相应的功能,下面有快捷键提示,甚至还有初步的窗体拆分等功能,文本编辑则有光标,可以上下左右移动,随时编辑任意的部分。现在的命令行操作系统中流行的文本编辑器如Vim也大同小异,不过显示风格和操作风格上有所不同。

可以看出,在这个时候其实应用程序的功能已经很强大了。

后来随着技术发展,显示器的图形显示模式越来越普及,可以通过相应硬件指令将显示器切换到图形模式,图形模式下不再按照字符显示,而是按像素,这就有了更高的自由度,可以显示图片等多媒体内容,这样上面的字符GUI就更进一步升级到了图形模式GUI,然后到的今天。QQ和C#都是这之后的事情了。


另外,虽然QQ是图形界面出现之后才开始发展的,但其实早期的互联网用户交流起来也并不困难,因为很早就有BBS了,而且是命令行界面下的BBS,使用起来非常简单,用称作telnet的工具连上就行了,通常有字符模式的GUI,使用起来并不困难。后来流行的基于Web的BBS得叫这些telnet程序一声老前辈。网络游戏也很早就有了,也是命令行模式的,现在也仍然有不少的MUD爱好者。

user avatar

悄悄告诉你,我们现在也是直接敲代码的……

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有