Hello World!

回忆上次内容

  • 我们这次设置了断点
  • 设置断点的目的是更快地调试
  • 调试的目的是去除 ​​bug​
  • 别害怕 ​​bug​
  • 一步步地总能找到 ​​bug​
  • 这就是程序员基本功
  • 调试 ​​debug​
  • 这个bug虫子是有历史渊源的
  • 编程也是有历史迷因的
  • 为什么写程序都从hello world开始?

为啥总是​​Hello World​

编辑

奇怪

  • 不论学习什么编程语言
  • 总是从​​Hello World​​开始

编辑

  • 为什么呢?

起源

  • 这一切都要从头说起
  • ​linux​​ 操作系统的老祖宗 ​​unix​
  • 和 ​​unix​​ 对应的编程语言 ​​c​

编辑

  • 那是一切开始的地方

两人

  • 1969 年,由于所在 ​​at&t​​ 贝尔实验室的 ​​Multics​​ 项目失败

编辑

  • 无所事事的两人
  • ​Kenneth Thompson​
  • ​Dennis Ritchie​

编辑

游戏

  • 希望能在 PDP 机器上继续玩一个游戏
  • 这个游戏是 ​​Multics​​ 下的 ​​star travel​

编辑

  • 为了玩这个游戏
  • 他们想要做一个操作系统 ​​unix​
  • 为了制作操作系统
  • 他们创造了 ​​c​​ 语言的编译器

编辑

  • 当时
  • ​c​​ 是他们为了开发 ​​unix​​ 而制作的语言
  • ​unix​​ 是为了能玩 ​​star travel​​ 而制作的系统

hello world!

  • ​c​​ 和 ​​unix​​ 只能运行在当时的机器上
  • 没有文档
  • 没有书籍
  • 甚至没有人知道

编辑

  • 与他们同在 bell 实验室的 ​​Brian Wilson Kernighan​​ a.k.a ​​bwk​
  • 开始写 c 语言的类似于文档说明书的东西

手稿

  • 主体的函数叫做 ​​main​​函数
  • 里面输出函数叫做 ​​printf​​函数

编辑

  • 不管是​​main​​函数,还是​​printf​​函数都有​​小括号​
  • ​小括号​​ 从那个时候就和函数相关
  • 为什么输出字符要用​​printf​​来当做函数名呢?

print 来历

  • 1974 年的手稿
  • 写在打字机用纸的上面
  • 侧面的空洞是向上送纸用的
  • 是不是很像胶片

编辑

  • 打字机就是当时的显示器
  • 所以用 ​​print​​ 来表示输出
  • ​f​​ 的意思是 ​​format​​ 格式
  • ​printf​​ 是按格式输出

细节

  • ​printf函数​​ 后面有 ​​小括号​
  • ​小括号​​ 里面放的是 ​​函数​​ 的 ​​参数​
  • ​print("hello world")​​ 中
  • ​函数print​​ 的 ​​参数​​ 是 ​​"hello world"​
  • ​双引号​​ 引起来意味着​​hello world​​ 是 ​​字符串​
  • 输出的内容就是这个字符串 ​​("hello world")​
  • 小括号和双引号的风格延续到了 ​​python​

编辑

  • 从 ​​c语言​​ 开始
  • 最早的入门教学程序都做一个​​hello world​
  • 习惯成自然之后
  • 所有的编程语言第一个例子都是​​hello world​
  • 是一种规矩或者文化
  • 这个梗一直流传到今天
  • 除了时间因素之外
  • 还有一个重要的原因

成书

  • 有了教材就有更多人学
  • 有更多人学就有更多人参与其中

编辑

  • 正反馈在逐渐成型

教材风格

  • 1978 年,​​Kernighan​​和​​Ritchie​​出版了这本书
  • 不厚,很薄
  • 轻松的语言风格
  • 因为 ​​c​​ 的目的就是让人像玩一样编程
  • 而不是记忆各种 cpu 汇编指令
  • 蓬勃发展的计算机技术
  • 使得 ​​c​​ 语言成为系统语言的老大
  • ​python​​ 的源代码就是用纯 c 编的
  • ​linux​​ 内核 也是用纯 c 编的
  • 所以​​c​​还是非常核心的啊
  • 虽说 ​​python​​ 是用纯 ​​c​​ 编写的
  • 不过 ​​python​​ 一旦出现之后就可以简化好多东西
  • 比如我们的游乐场里面有很多的函数和模块
  • 我们为什么能认识print?
  • 而不认识pront?

编辑

内置函数

  • dir()
  • 可以看到游乐场上来就自带的模块

编辑

  • 比如 dir() 这个函数
  • dir的意思是directory 文档目录
  • 这里列出的是已经导入模块的目录
  • 调用这个函数可以知道当前游乐场载入了哪些模块
  • 比如 ​​__builtins__​​ 这个模块
  • 这 ​​__builtins__​​ 里面又有些什么呢?

dir()

  • ​dir(__builtins__)​
  • 注意前后都是两个下划线

编辑

  • ​__builtins__​​ 意思是在里面构建好的
  • 这里面有好多内置的函数
  • 包括我们熟悉的
  • exit()
  • print()
  • dir()
  • help()
  • 为什么print直接就能用
  • 因为他在默认的这个​​__builtins__​​模块中

编辑

  • 如果我想要查询print函数更详细的信息应该如何呢?

help(print)

  • 什么不会就help什么
  • ​help(print)​
  • 把函数名作为参数传进去

编辑

  • 类似的还可以查询
  • help(quit)
  • help(dir)
  • help(help)
  • 如果我想要查询__builtins__模块更详细的信息应该如何呢?

​help(__builtins__)​

  • ​help(__builtins__)​
  • 注意内置模块builtins左右各有两个下划线

编辑

  • 我们可以查询到​​__builtins__​​模块的帮助文件
  • 返回的这些函数和子模块都隶属于 ​​__builtins__​​ 这个模块
  • 除了内置的、这些不用引入就可以用的模块之外
  • 还可以引入外部模块

导入外部模块

  • 就像我们上次导入ast一样
  • 这次我们导入的是​​__hello__​
  • 注意hello两边都有两个下划线
import __hello__
  • import
  • port是港口 来自于海洋文化
  • import 是进口 是导入
  • export 是出口 是导出
  • import 后面接空格
  • 然后是被导入的外部模块名称 ​​__hello__​
  • ​hello​​左右也是两个下划线
  • 把​​__hello__​​模块导入到游乐场
  • 可以输出经典的一句话
  • 注意!
  • 导入 ​​__hello__​​ 模块前后游乐场中的模块增加了

正在上传…重新上传取消

  • 想要深入了解 ​​__hello__​​ 应该怎么办呢?

什么不会就help什么

help(__hello__)

编辑

总结

  • ​hello world​​ 不是从来就有的
  • 来自于​​unix​​和​​c​
  • 虽然我们今天有各种先进的学习手段
  • 最早的高级语言学习是从最早的那张打字机用纸的手写代码起源的
  • 输出用的函数名是 ​​print​​ 打印
  • 也是从那个时候来的
  • 最早输出的是字符串是 ​​"hello world"​
  • 也是从那个时候来的
  • 这就成了一个迷因
  • 等等!
  • 计算机里面不都是二进制的 0 和 1 吗
  • 哪里来的​​hello​​ 中的 ​​h​​ 之类的

[oeasy]python0010_hello_world_unix_c历史迷因的更多相关文章

  1. 【u243】拓扑排序

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一些历史迷们打算把历史上的一些大事件按时间顺序列出来.但是,由于资料不全,每个事件发生的具体时间都没有 ...

  2. [计算机、网络相关历史]unix简史

    本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...

  3. paip.提升效率--僵尸代码的迷思

    paip.提升效率--僵尸代码的迷思 僵尸代码是指你的代码库里被注释掉的那部分代码, 很少去使用它,就像僵尸一样, 看雷kill-the-zombies-in-your-code ========== ...

  4. BZOJ4241 历史研究

    Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...

  5. 前端迷思与React.js

    前端迷思与React.js 前端技术这几年蓬勃发展, 这是当时某几个项目需要做前端技术选型时, 相关资料整理, 部分评论引用自社区. 开始吧: 目前, Web 开发技术框架选型为两种的占 80% .这 ...

  6. 【历史】- UNIX发展史(BSD,GNU,linux)

    先前的一個理想 UNIX 系统自 1969 年 Ken Thompson 与 Dennis Ritchie 在美国贝尔电话实验室(Bell Telephone Laboratories)发展出雏形至今 ...

  7. Java历史[史上最详细的阐述了Java发展的历史过程]

    Java历史 学习Java语言之前,我觉得大家应该是从头开始,对吧?不管你之前是学过还是没学过,都和学习某一个知识一样,从头开始去了解它,然后到这个深入的掌握,到最后你可能理解并且灵活的运用.所以它肯 ...

  8. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  9. MySQL发展历史

    MySQL(发音为"my ess cue el")是一种关系型数据库管理系统, MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Su ...

  10. 从中间件的历史来看移动App开发的未来

    在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...

随机推荐

  1. VSCode + JTAG调试合宙ESP32C3的经历

    VSCode + JTAG调试合宙ESP32C3 环境 Windows10 VSCode + ESP-IDF 合宙ESP32C3(无串口芯片版本) 理论 想要直接使用内置JTAG,USB要求连接GPI ...

  2. IDEA使用——常用配置

    一. 设置鼠标悬停代码提示 二. 设置Ctrl+滚乱调整字体大小 三. 设置自动导包(不设置自动导包,我们也可以通过Alt+Enter进行手动导包) 四. 设置显示行号和方法间分隔符 五. 设置代码提 ...

  3. 记一次 .NET某企业数字化平台 崩溃分析

    一:背景 1. 讲故事 前些天群里有一个朋友说他们软件会偶发崩溃,想分析看看是怎么回事,所幸的是自己会抓dump文件,有了dump就比较好分析了,接下来我们开始吧. 二:WinDbg 分析 1. 程序 ...

  4. Vue 页面传参方式 Query 和 Params

    1. query 与 params 传参 query 需要和配合 path 属性使用,携带参数会拼接在请求路径后,效果同 Get 请求方式 http://localhost:8033/Permissi ...

  5. 003. git标签

    git标签 标签用于记录详细修改内容,为后续使用提供帮助. 也方便快速的回滚. 每一次提交[commit]都可以打一个tag标签. 测试阶段标签规则: 以 0.01 0.02版本为主 正式上线标签规则 ...

  6. 安装、学习protobuf

    Protobuf是什么? 类似于json的一种数据格式,独立于语言,而且是二进制方式,所以比json更快,而且还可以直接存储一些图.树 序列化和反序列化 持久化(存到磁盘硬盘)领域中,数据存到磁盘叫序 ...

  7. nfs 加 auto 自动挂载/etc/fstab;autofs

    一,用/etc/fstab 1.在/etc/fstab里面添加一条配置文件 vim /etc/fstab #在里面添加一条配置信息 192.168.200.10:/opt/share2 /mnt/sh ...

  8. .NET周刊【6月第1期 2024-06-02】

    国内文章 一文带你了解.NET能做什么? https://www.cnblogs.com/Can-daydayup/p/18214473 .NET是一个免费.开源.跨平台的开发平台框架,广泛应用于桌面 ...

  9. npm包管理器 切换npm源 使用nrm来管理npm镜像源

    npm是NodeJs项目模块管理工具,它已经集成了nodejs安装包中,在npm从从5.2版开始,增加了 npx 命令(解决的主要问题,就是调用项目内部安装的模块,很多工具不再需要npm -g 全局来 ...

  10. 如何解决系统报错:nf_conntrack: table full, dropping packets

    问题 在系统日志中(/var/log/messages),有时会看到大面积的下面的报错: nf_conntrack: table full, dropping packet 这说明系统接到了大量的连接 ...