学习计算机和编程

时间:2009-01-28 01:42:33

标签: programming-languages hardware history

学习计算机和计算机编程如何运作的好方法是什么?

例如,您是否会建议学习电路如何工作,然后学习汇编语言,然后学习更高级的语言?

17 个答案:

答案 0 :(得分:13)

建立一个。改进它。用它。编程吧。安装不同的操作系统。读那些大肥书。问很多问题。去获得CS学位。不要停止学习。

答案 1 :(得分:9)

我建议获得计算机工程学士学位。

答案 2 :(得分:8)

当我15岁的时候,我决定这样做,并且只是为了 - 嗯,永远地保持这种状态。

学会了计算机附带的书上的基础课程(第一部 - 80年代出版了一本几乎适用于任何年龄的好书,不知道我从那时起就认为它是一本优秀的初学者书)..

通过手动编写来自z-80 CPU数据手册的CPU指令来学习汇编和二进制。了解寄存器以及CPU如何操作。在学校的DEC PDP-11上还装配了装配(由于字大小的不同,我很喜欢使用Base 8代替Hex)

知道汇编对我在C的第一份工作有很大帮助。我当时并不知道C,但是在从汇编中访问基本变量时已经掌握了指针的概念,所以真的没有太多意外。习惯于语法异常是唯一困难的部分(例如,for循环与其他任何东西都不同,并且最初让我很烦恼)

参加了一些电子课程并特别注意门和人字拖。仍然无法弄清楚如何从一堆门和触发器到CPU,这需要了解时间。

了解海军的时间信号(将它们整合在一起的关键部分) - 他们的一个课程涉及对基本上是爆炸CPU的盒子进行故障排除。您可以对任何晶体管进行操作,并通过切换开关一直插入CPU指令并让CPU执行它们(100字节存储器)。他们可以打破任何晶体管,你必须能够找到它。 (在你遇到麻烦的时候进行外部训练,你只需交换牌直到它起作用)。

编辑:顺便说一句,本课程的最佳部分是50页的原理图书,大约是桌子大小的2/3,其中每个部分都有图表。研究了每一寸,直到我“得到”每根电线做的事情(至少在逻辑电平上 - 忘记电源的东西)..

接受组装PC的工作(因为在那之前我不太舒服地插入内存,更换卡和硬盘,交换电源,......)

在财务,数据库以及我能找到的任何领域找到工作。每当我找到一份工作时,一个重要的考虑因素是我从中学到了多少。试图专注于学习商业实践和工具。我花了很多时间在客户网站上找工作。

这是我职业生涯的前15年,最后10年是理解更高级别设计(专注于OOD)可能更困难的任务,学习思考谁在阅读或使用你的代码(而不是只是让你的代码解决一个问题)并通过我与他们互动的方式来提高他人的工作效率。

我想很大一部分就是从不害怕跳进来。我从来没有看过电脑做某事并且说“男孩,我永远无法做到这一点”。如果有人需要什么,我就是这么做的。

了解所有这些事情(学校版本以及发明了什么)对我来说的历史是完全无关紧要的。我在这里和那里捡点零碎,但在大多数情况下我只关心它是如何工作的。我专注于适用于我的工作的设计模式和书籍,我不能应用但我试图理解,所以我知道什么时候应该应用它们等等。

该死的,这开始听起来像是一些计算机精神病患者的简历。遗憾。

答案 3 :(得分:6)

我会说,从编程开始,然后去模拟器,然后是架构。 是的,与历史相反。

一种好的语言会教你如何与电脑互动。构建自己的模拟器将教你如何从软件方面运行硬件。构建计算机完成方程式。

如果你从硬件开始,那么编程就无法帮助你学习硬件。

答案 4 :(得分:5)

嗯,首先我认为你没有足够的时间学习所有东西......

  • 首先,你需要学习很多数学,包括数论和逻辑。
  • 然后你需要学习计算理论,并阅读哥德尔,冯诺依曼和图灵的作品。
  • 了解Herman Hollerith和IBM以及Jacquard-loom技术在数字计算中的应用。
  • 然后你需要学习电学,了解三极管/晶体管的工作原理。这将使您了解计算机处理器的工作原理。
  • 你还应该读一下Colossus,这是第二次世界大战期间用来破解德国法典的机电计算机。
  • 然后你需要选择一个硬件架构。如果您真的想了解,请找一个带有简单指令集的旧集成电路。或者从现代芯片开始学习装配。
  • 了解程序集如何写入机器代码。
  • 为更高级别的语言构建编译器。我会推荐像LISP这样简单的东西,因为你不必担心复杂的解析。
  • 学习FORTRAN。而不是现代的一个。四会很好。获得一个真正体验历史的穿孔读卡器。
  • 了解Smalltalk以了解面向对象的编程
  • 将CLOS添加到LISP编译器。
  • 实施您自己的操作系统
  • 实施您自己的文件系统
  • 获得量子物理学位,如果你真的想了解现代硬盘和内存芯片是如何工作的(即自旋电子学,量子限制微处理器)

这应该会让你在学习一切方面有一个良好的开端。

答案 5 :(得分:5)

从0开始。

掌握了之后,继续前进到1。

答案 6 :(得分:4)

  1. 你永远不会知道有关电脑的所有信息。
  2. 如果你试图了解所有的历史,你将永远不会赶上。
  3. 那说永远不要停止学习。可能无法全部学习,但这并不意味着你无法尝试:)

    您可以从中学到很多资源。维基百科将是一个开始学习历史的好地方。

    In the beginning was the command line在命令行上学习一点

答案 7 :(得分:3)

这是一项艰巨的任务。

硬件方面:

  • 建造一台便宜的电脑,我一直很喜欢Arstechnica's制作指南。
  • 阅读大量的建筑文章。
  • 安装不同的操作系统(windows,linux等)

软件方面:

  • 学习装配
  • C
  • 上的入门书
  • Peter Van Der Linden的深层秘密(很棒的书)

随机其他好书

继续阅读,不断提问,继续学习。

答案 8 :(得分:2)

答案 9 :(得分:2)

我认为你会发现你学的越多,你就越不知道每个科目的情况。你可能只是到了没有人知道答案的地步......然后你可以做博士论文:)

答案 10 :(得分:2)

你可以阅读Charles Petzold的Code: The Hidden Language of Computer Hardware and Software。它为计算机的发展提供了非常好的历史视角。

在我看来,这是一个简单而且非常好的阅读。

答案 11 :(得分:1)

我发现大部分乐趣都是因为话题太深了。选择任何方向,只要有趣就跟着它。

那就是说,早些时候,而不是以后,对一些实际的节目进行切割。 Java,c,.NET,任何工具都很方便或被你认识的人使用。拥有一些面子时间的人是非常宝贵的。

答案 12 :(得分:1)

阅读Danny Hillis的The Pattern on the Stone。学习编程。在您编程一段时间后,如果您仍然感兴趣,请查看The Elements of Computing Systems: Building a Modern Computer from First Principles。到那时你会看到很多指向更多东西的指针。

答案 13 :(得分:0)

我建议您开始here,以获得良好的概述。

答案 14 :(得分:0)

不幸的是,获得计算机科学或计算机工程学位不会使您成为计算机科学或编程所有主题的专家。首先,你必须意识到这不是一件容易的事,可能需要几年时间,所以你必须要有耐心,我建议你遵循YAGNI(你不需要它)的原则,一开始就试试获得计算机科学几个领域的背景知识。然后选择您最喜欢的那个,并成为该主题的专家。

答案 15 :(得分:0)

没有特别的顺序......

考虑在QA工作一段时间。它会让你以数学家看待定理的方式看到你的程序。许多人编写代码可能会陷入创造某些东西的诱惑中,然后他们会不加批判地注视。 QA中的一段时间可以对建立良好的编程习惯产生良好的影响。它还有助于使您成为一名优秀的调试器。

学会在没有IDE的情况下工作,这样您就可以了解幕后发生的事情。否则,IDE就变成了拐杖。

基本了解计算机的工作原理,包括CPU,内存和IO之间的关系。无论您学习哪种语言或使用哪种工具,一切都取决于这些原则。学习这一点对你很有帮助。

最后,拿一台电脑将其拆开并再次放回原处。如果物理分解对您不可行,那么请从操作系统开始。从“空”计算机开始,只运行操作系统。然后开始具有破坏性并删除内容,更改文件保护等。探索特定操作的效果将向您揭示将导致发现操作系统基础的模式。可能发生的最坏情况是什么?因此,您必须重新格式化磁盘并重新安装操作系统。所以呢?获得的东西更有价值。完美运行的程序也可以做到这一点。从它的来源开始打破它 - 一次一件事。生成的错误消息将告诉您很多关于编译器的信息。

这导致了最后的建议。一旦你开始自己编码,养成添加小部件和经常编译的习惯。

答案 16 :(得分:0)

我想知道你正在寻找什么。当然,完整的答案是:永远不要停止学习......但如果你想要最精简的自学速成课程,请阅读Charles Petzold的Code: The Hidden Language of Computer Hardware and Software,然后阅读The Elements of Computing Systems: Building a Modern Computer from First Principles

这将比半数或更多专业大学课程更好地启动您的整体理解。

这里没有灵丹妙药,这些书中没有任何秘密。它们只是超级专注,其目标是从上到下以可访问的方式理解计算机相关概念。