上世纪40至60年代用机器码和汇编编程的程序员都离世了吗?探讨Golang的现代意义
上世纪40至60年代用机器码和汇编编程的程序员都离世了吗?探讨Golang的现代意义 20世纪40年代、50年代和60年代使用机器码和汇编语言开发的程序员都已去世?
20世纪40年代、50年代和60年代使用机器码和汇编语言开发的大多数程序员都已去世?
Ken Thompson在Go论坛的答案是什么?
更多关于上世纪40至60年代用机器码和汇编编程的程序员都离世了吗?探讨Golang的现代意义的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我也是!还没死呢……差得远呢 :-p
那个时期的计算机重约几十或几百公斤。我觉得它们相当迷人 🙂
也许其中一些仍在运行,但肯定已经很老旧了。
你好!
我还没死呢!我始于1969年。

作为公司招聘活动的一部分,成功入选者将参加为期六个月的课堂培训,内容是关于当时被称为"编程"的领域,所有费用由公司承担。当时大学里针对商业程序员的课程非常稀少,且大多与实际情况脱节。
培训的前几周使用的是IBM单位记录(卡片)设备,这些设备通过插板和电线进行编程,类似于老式电话交换机的操作方式。
之后我们开始学习机器语言和汇编语言,这些在当时仍然被广泛使用。经过最初六周的基础训练,我们进入了COBOL语言的学习阶段,后续的发展便众所周知了。
这段经历让我将余生投入到了自己热爱的事业中。尽管现在已经完全退休,我仍然乐在其中,这也是我参与Go语言社区的原因。
需要说明的是,当时全国(澳大利亚)的计算机数量不足100台。这个数字在70年代初期迅速增长。
嗨 @cosmos
你可能会喜欢生活计算机博物馆(https://livingcomputers.org/)。除了他们展出的内容外,他们还拥有一些20世纪70年代仍在运行的系统,你可以向他们申请用户账户,这样就能通过互联网使用ssh连接这些系统。
https://livingcomputers.org/Discover/Online-Systems/Request-a-Login.aspx
如果你喜欢这类事物,这真的很有趣。我在第七版Unix(运行在PDP-11上)和伯克利4.3系统(运行在VAX11/780上)都拥有账户。这些系统与我20世纪80年代初开始使用的Unix系统几乎完全相同。他们还运行着TOPS-20、VMS(我也在专业环境中使用过)的计算机,甚至还有一台CDC 6500超级计算机(只要他们的冷却系统能正常工作)。
我其实不太建议用这些系统来学习,但如果你在上面玩玩,就能看到原始Unix版本的样子——那时的一切都简单得多!这是帮助理解Unix基础核心技术和"Unix哲学"(通过组合简单工具来构建有用事物)的好方法。这两个Unix系统都配有C编译器,前提是你能用原始的K&R C语言编写代码。还有Bourne shell。BSD系统有vi编辑器,如果你想要emacs,就得去TOPS-20系统。当时的情况就是这样。我在第七版Unix上学习了ed编辑器,因为那是当时唯一的编辑器(你能想象吗),然后在BSD上学习了vi(这个编辑器就是为它编写的),而为了在TOPS-20上工作,我不得不学习emacs,因为那不是Unix系统,所以既没有vi也没有ed。
至于汇编语言,在我刚开始的时候,Unix汇编器在Unix文档中就被称为"终极死亡语言"!当时的理念是:既然Unix有了C语言,就不再需要有人用汇编编程了。用C语言可以实现几乎相同效率的所有功能,这才是为Unix编写软件的最佳方式。汇编器存在的主要目的只是作为编译C代码的一个步骤。
// 代码示例保留原文
关于您提到的上世纪40至60年代使用机器码和汇编语言的程序员,确实,许多早期程序员已经离世,因为那个时代距今已有60-80年。但这不是绝对的,例如,一些在60年代后期开始职业生涯的程序员可能还健在,特别是如果他们当时较年轻。
现在,让我们聚焦于Golang(Go语言)的现代意义。Go语言由Google在2009年发布,旨在解决现代软件开发中的挑战,如并发处理、高性能和可维护性。它继承了低级语言(如汇编)对效率的重视,但通过高级抽象简化了编程。
Go语言的现代意义:
- 并发支持:Go内置goroutine和channel,使并发编程更简单高效。这在多核处理器时代至关重要。
- 高性能:Go编译为本地机器码,执行速度快,接近C/C++水平,同时提供垃圾回收等现代特性。
- 简洁性:语法简洁,减少样板代码,提高开发效率,适合大规模项目。
- 跨平台兼容:轻松编译到多种操作系统和架构,支持现代云原生和微服务架构。
示例代码:并发处理
以下是一个简单的Go程序,演示如何使用goroutine实现并发任务。这展示了Go如何简化传统上需要复杂线程管理的场景。
package main
import (
"fmt"
"time"
)
// 定义一个简单的任务函数
func printNumbers(prefix string) {
for i := 1; i <= 3; i++ {
fmt.Printf("%s: %d\n", prefix, i)
time.Sleep(100 * time.Millisecond) // 模拟工作延迟
}
}
func main() {
// 使用goroutine并发执行两个任务
go printNumbers("Goroutine A")
go printNumbers("Goroutine B")
// 主线程等待一段时间,确保goroutine完成
time.Sleep(1 * time.Second)
fmt.Println("主程序结束")
}
输出示例(可能因调度而顺序不同):
Goroutine A: 1
Goroutine B: 1
Goroutine A: 2
Goroutine B: 2
Goroutine A: 3
Goroutine B: 3
主程序结束
这个例子中,两个printNumbers函数并发运行,无需手动管理线程或锁。Go的并发模型直接受益于现代硬件,而早期汇编语言需要手动处理底层细节。
总之,Go语言继承了早期编程语言对性能的追求,但通过现代设计提升了开发效率。它在云服务、网络应用和系统工具中广泛应用,体现了编程语言的演进。


