一些程序员应该尝试的具有挑战性的软件项目列表

这是一份关于各种编程项目的清单及相关介绍:

  • 项目目的及适用人群:所提项目想法主要针对对探索新知识领域感兴趣的人,多数项目可能与当前就业市场不相关,若为招聘目的添加亮点可考虑其他选项,如克隆知名网站进行前后端开发。
  • 相关文章推荐Challenging projects every programmer should tryMore challenging projects every programmer should tryChallenging algorithms and data structures every programmer should try(Even more) challenging programming projects you should try
  • 具体项目清单及介绍

    • Lesser Known Data Structures:推荐编写自己的拓扑排序、递归下降树解析、布隆过滤器、片段表、伸展树等数据结构实现,还可选择 B-Tree、Circular Buffer、Cuckoo Filter、Cuckoo Hash Table、Open-Addressing Hash Tables 等,许多计算机科学课程对此类数据结构涉及较少。
    • Write a distributed Hash Table:已懂如何写自己的哈希表,构建分布式哈希表虽具挑战性,但不必达到生产级,可提升网络编程和并发管理能力,测试过程也是学习之旅,遇到困难不要气馁。
    • Write a scientific calculator:通过学习评估逆波兰表达式和实现Shunting Yard算法来见证栈数据结构的力量,可挑战实现自己的正弦函数、大数字库、矩阵运算等模块,该项目可在浏览器中运行。
    • Write your own HTTP Server in C + POSIX:若未学过 C 可先学习,此项目目的不是写最快的 HTTP 服务器,而是积累处理字符指针的经验、学习底层知识如fork()pthreads和网络编程。若不喜欢 C 可重写为 Rust。
    • Write an esoteric programming language:这是一个释放创造力的副项目,可自行编写简单语法的语言、参考 UIUA 等,查看 esolangs 维基获取更多灵感。
    • Write your own Virtual Machine:可选择寄存器型、栈型或混合型虚拟机,甚至添加 JIT 编译器,可参考 uxn 及其相关软件。
    • Write a game for UXN:先了解 uxn 工作原理,参考现有例子如 flappy bird、snake,提出原创游戏想法,如 Volfied、Q*Bert、Jumping Jack 等。
    • Write a game for TIC-80:这更像是一个艺术项目,可从这里获取灵感。
    • Write your original markdown language:可编写非标准的 markdown 语言或扩展现有实现,如从 LiaScript 或 R Markdown 获取灵感。
    • Write a static site-generator:用新发明的 markdown 语言生成静态网站。
    • Mandelbrot Set Navigator:无需成为数学家也可欣赏曼德勃罗集的美,可使用 HTML Canvas 构建自己的曼德勃罗集浏览器,添加创意如智能坐标系统和书签功能。
    • Simulate various phenomena from physics:从光学开始,参考网上例子如https://www.oeabt.com/en/dome/https://phet.colorado.edu/sims/html/geometric-optics/latest/geometric-optics_en.html,理解后可转向其他物理领域。
    • Experiment with Conway’s Game Of Life:基于康威生命游戏进行创意创作,如改变规则、添加状态等。
    • Approximate reality with polynomials:若学习过计算机图形学可尝试用贝塞尔曲线近似现实,参考相关视频或项目,如Virtual Insanity but, it’s in Desmos Graphing CalculatorVirtual Insanity but, it’s played on an oscilloscopeDesmos Bezier Renderer
    • A calculator for symbolic differentiation:这是一个有挑战性的项目,需解析数学表达式并应用求导规则,简化结果,不必实现所有功能,需牢记微积分基础知识。
    • A slot machine:以科学之名制作,不必过于注重图形,可研究 slot 机背后的数学原理并进行创意设计,如π slot 机、Game Of Life Slot Machine 等。
    • Write a game engine for text-based games:受@snej 在lobste.rs启发,构建文本冒险游戏引擎,使其跨平台或仅在终端运行,可参考 bubbletea、CursedGL 等库。
    • Write a Tiling Window Manager:在 Wayland 时代,可参考 sway 构建平铺窗口管理器,不必过于复杂,如 XMonad 最初约 1000 行代码。
阅读 9
0 条评论