-
Notifications
You must be signed in to change notification settings - Fork 33
Description
你是否已经阅读并同意《Datawhale开源项目指南》?
- 我已阅读并同意《Datawhale开源项目指南》
你是否已经阅读并同意《Datawhale开源项目行为准则》?
- 我已阅读并同意《Datawhale开源项目行为准则》
项目简介
NekoBytes-TheMissing
NekoBytes-TheMissing 计算机入门导引!这是我们的编程入门系列中的第一门课程。NekoBytes-TheMissing将让您熟悉 C 编程语言,介绍计算机科学与技术中的常见主题,包括抽象、算法、体系结构、人工智能、嵌入式开发、计算机系统和编程语言,并练习应用工具来解决复杂问题。
课程主题
我们计划的课程将按大致顺序涵盖以下主题:
- 提问的艺术
- C 语言基本知识
- Unix CLI 介绍
- 计算机程序的硬件视角
- 抽象
- 算法概论
- 指针、数组与内存动态分配
- C 语言开发工具
- 程序的预处理、编译、链接
- 人工智能、机器学习与深度学习
- 嵌入式开发
- Unix 系统编程
- 编程语言
学习目标
完成 NekoBytes-CS-001 后,我们希望你能够实现以下学习目标:
- 能够使用编程来解决在课外遇到的现实问题。
- 认识并理解计算机科学中常见的抽象概念。
- 可以识别日常技术中存在的编程概念,了解计算机如何处理和组织信息。
- 可以使用类 Unix 操作系统完成日常任务。
立项理由
发起“NekoBytes-TheMissing”的理由在于,国内高校大都使用C语言作为第一门教授的语言,但大多是死板的知识灌输,导致导论课脱离了编程语言成了空中楼阁(尽管凭心而论,C语言确实不适合作为导论语言),导致当前的计算机科学教育普遍存在入门门槛高、内容碎片化的问题,尤其对于没有编程经验的人群而言,很难系统性地掌握基本的编程技能和计算机科学概念。通过设计一个循序渐进的课程,从最基本的 C 语言开始,结合计算机科学中的核心主题和实用工具,“NekoBytes-TheMissing”旨在填补这一空白,帮助初学者在一个结构化的学习路径上建立扎实的编程基础,并逐步深入理解计算机技术的工作原理和应用场景。
项目受众
- 计算机科学入门者:希望自学或准备进入计算机科学领域的初学者,没有编程基础或仅有少量编程经验的人群。
- 跨领域转行者:其他领域的专业人员,希望通过学习编程和计算机科学知识转入技术相关岗位。
- 学生:在校大学生或中学生,希望拓宽视野,学习计算机编程和技术基础。
- 自学编程爱好者:对计算机科学和编程有浓厚兴趣的个人,想通过系统的学习来提升自己。
项目亮点
类似项目
MIT The Missing Semester of Your CS Education
Harvard CS50
计算机速成课
- The Mssing Semester: 侧重讲解Linux的散碎知识而不是一个“导论课”
- CS50: 语言大杂烩,对于初学者要求直接使用这么多语言还是比较困难的
截取一个StackOverFlow上对CS 50在C语言教学上的一段评价: https://meta.stackoverflow.com/questions/355588/the-c-book-list-has-gone-haywire-what-to-do-with-it
- 计算机速成课: 专业性不够强
项目亮点
- 全链条学习路径:从基础的编程知识到复杂的计算机科学概念,全程设计了一条完整的学习路径。相比其他仅涉及某一具体领域或工具的项目,NekoBytes-TheMissing 提供了从基础到应用的全面学习体验。
- 实战导向:课程内容结合大量的实战练习和项目,以问题解决为导向,让学习者更快地掌握技能,并能够应用到现实场景中。
- 覆盖面广:不仅教授编程语言,还介绍操作系统、计算机硬件、算法、人工智能等主题,为学员提供计算机技术的全局视角。
- 适应性强:课程设计面向不同层次的学习者,无论是零基础入门者,还是想进一步巩固计算机基础的人,都能从课程中受益。
项目规划
目录
Lectures 编写任务书
课程幻灯片,最终格式确保导出为 PDF , 开发分支需要上传可供编辑修改的版本。
Week1
- 如何科学的提问,引导仔细阅读提问的智慧和别像弱智一样提问,提供提问模板,例: yxys提问模板
- C 语言基础语法介绍(变量, 指针, 数组, 控制流, 函数, printf)
- 提供一些 C 语言自学指引材料
- 介绍命令行工具
git, gcc, tar
,学会克隆任务仓库,解压,编译运行程序。 - 演示
vscode
编辑器,导入 NekoBytes 预设配置,介绍vim
插件,介绍 vim 哲学 - 参考资料:
Week2
- 介绍计算机的核心部件(CPU, MEMORY, I/O)
- 从硬件视角理解程序,由此引入抽象概念
- 了解操作系统
- 参考资料:
Week3
- 展开介绍 C 语言基础语法:
- 变量, 数组, 字符串
- 控制流(for, while, do-while)
- 函数
- 预处理器与标准库
- 指针
- C 程序的硬件视角,继续理解抽象:
- 变量, 指针, 数组, 字符串, 函数, 代码在内存中存储
- 程序指针的改变
- 操作系统提供系统库的 ABI
- 参考资料:
- Learn C the hard way
- C 参考手册(cppreference)
- C Primer Plus
Week4
- 回顾上周的 C 语言基本语法
- 程序=算法+数据结构
- 算法概论
- 函数与递归,循环与分治
- 经典的递归与分治算法问题
Week5
- C 语言核心语法详解: 指针、结构体、动态分配
- C 语言的内存分配与动态管理
- 数据结构——链表,链表的 C 语言实现
Week6
- git 简要介绍
- C 语言复习回顾
- 介绍 C 语言必学开发工具:
GNU Make, Valgrind, GDB, GCC
- 程序的预处理、编译、链接
- 多文件编程的正确姿势, C 语言变量函数声明、作用域、生存期、存储期与链接
- 参考资料:
- Learn C the hard way
- C 参考手册(cppreference)
- C Primer Plus
Week7
- C 语言其他语法:
- 字符串库
- 联合体
- 枚举
- 变参数函数(简单介绍)
- 函数指针与系统编程——信号处理(简单介绍)
- 位域(简单介绍)
- 参考资料:
- Learn C the hard way
- C 参考手册(cppreference)
- C Primer Plus
Week8
- C 语言 I/O 操作
- I/O 标准库
- 输入/输出重定向
- Linux 管道操作
- 机器学习的一般方法
- 详解线性回归预测
- 深度学习与神经网络
Week9
- C 语言与嵌入式编程
- C 语言与系统编程
- C 语言总结
Week10
- 编程语言
- 函数式编程思想
- 解释器
WEEK11
- 总结
Labs 编写任务书
Labs
- 课程实验,应保证实验框架注释充分明确,为每个实验配备对应的README文档指引,提供基本的单元测试
- 本项目实验环境均为 Ubuntu 22.04,请贡献者确保课程实验能在该环境下正确进行
- 目录下实验应确保为 Linux 环境下的 tar.gz 压缩格式。命名格式如下: Lab0.tar.gz, Lab1.tar.gz, Lab2.tar.gz, ...
- 实验预计耗时 2-3h 为宜
- 十分建议参考笨办法学C中的实验
Solutions
- 项目实验配套解决方案,同样为 tar.gz 压缩格式。命名格式如下: Lab0-Sol.tar.gz, Lab1-Sol.tar.gz, ...
- 如有需要,可附文档文字说明
Week0
- 参考The Missing Semester
- Solution 文档说明即可
Week1
- Git 实验参考CS61C Lab0
- C 实验提供简单的代码填空,GCC 编译练习
Week2
- C 语言基础
- 添加注释,文档说明
- 提供标准 Solution
Week3
- 体验嵌入式编程
Week4
- 经典的递归与分治算法问题
- ACMer 比较懂
Week5
- 数据结构——链表,链表的 C 语言实现
- 参考去年Labs——ZR的噩梦
Week6
- C 语言参考CS61C Lab1
- GDB, Valgrind 参考CS61C Lab2
- 多文件编译与GNU Make
Week7
- 一个简易 Shell 的实现
Week8
- 读取数据集的线性回归预测
- Linux系统文件读取任务,例如: ps命令的简易实现
Week9
- 待定
Week10
- 简易计算器
Projects 编写任务书
- 课程大作业,应配备完善的单元测试,README 文档。
- 本项目实验环境均为 Ubuntu 22.04,请贡献者确保课程实验能在该环境下正确进行
- 目录下作业应确保为 Linux 环境下的 tar.gz 压缩格式。命名格式如下: Proj0.tar.gz, Proj1.tar.gz, ...
- 不必提供对应的解决方案。
- 大作业预计耗时 5-8h 为宜
Proj1
- MyMalloc, 参考 CSAPP 与 K&R The C Programming Language
- MyMalloc调优(选做)
Proj2
- 贪吃蛇,参考CS61C
Proj3
- 简易神经网络实现分类任务
Proj4
- LSIP 解释器
完成日期
详见课程主页
课程组人员
共计9人,核心人员:
- https://github.com/E1PsyCongroo
- https://github.com/hewo233
- https://github.com/JXDYJS
- https://github.com/LRache
- https://github.com/M4yGem1ni
- https://github.com/wenjing233
可预见的困难
- 如何定义零基础
- 需要编写细致的文档内容,人手可能不够,导致需要慢慢修改文档内容(项目不稳定)
已完成内容
课程正在杭州电子科技大学内作为社团课程开展,同时包含了福州大学和厦门大学的部分受众学生。
课程主页: https://hdu-cs.wiki/2.%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9D%97/2.1%20NekoBytes-TheMissing/2.1%20NekoBytes-TheMissing.html
项目仓库: https://github.com/E1PsyCongroo/NekoBytes-TheMissing
项目Gtithub Page(用于存储资源): https://e1psycongroo.github.io/NekoBytes-TheMissing/
项目负责人GitHub主页链接
https://github.com/E1PsyCongroo
项目负责人联系方式
GMAIL:[email protected]
QQ: 2296510380
备注:发起立项申请后DOPMC成员将会在7天内给出审核意见并评论在该Issue,若7天内无反对意见则默认立项通过,如有疑问或者需要帮助请联系微信:at-Sm1les
- 我已知悉上述备注