本文主要是一些针对程序员入门的一些资料。

1 一些基础知识

The Missing Semester of Your CS Education

2 新手如何提问

How-To-Ask-Questions-The-Smart-Way.
中文版本:提问的智慧

经典的关键字:

  • STFW
    如果你收到STFW(Search The Fucking Web)的回应,回答者认为你应该到他妈的网上搜索。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 Google 是你的朋友!)

  • RTFM
    有一个古老而神圣的传统:如果你收到RTFM(Read The Fucking Manual)的回应,回答者认为你应该去读他妈的手册。当然,基本上他是对的,你应该去读一读。

  • RTFSC
    Linux的鼻祖Linus Torvalds在回答有人提出的Minix的一个问题时,所说的第一句话就是"Read The Fucking Source Code",这就是RTFSC的来由。

3 理解(讲解)复杂问题的方法

  • why: 为什么产生的?背景是啥?
  • what: 是什么? 解决什么问题的?优缺点?
  • how: 怎么实现的?

4 编程的一些经验

  1. 机器的结果一定是正确的。当代码结果不符合预期时,可能存在以下几种情况:
    • 代码存在bug?
    • 使用的库函数、系统调用等存在bug?
    • 硬件(CPU/内存/磁盘)异常

总之,不论是什么情况,都是因为存在软件或者硬件异常导致结果不符合预期的。

  1. 没有测试的代码都是不可靠的

  2. 一切外部输入都是不可靠的

  3. 编写代码一定要采用滚雪球的方式进行

    • 切记贪多求全,全部写完后再进行测试,问题隐藏的更深,更难被发现。
    • 编写代码时,按照功能进行模块化。已经完成的模块都要进行接口测试。
    • 测试阶段多使用assert(), 提前发现不符合预期的bug。

5 一些有用的学习编程资源

南京大学计算机基础实验
蒋炎岩操作系统课程视频
蒋炎岩操作系统课程配套课件和代码
调试理论与实践 (Fault; Failure; Error; 调试一切) [南京大学2023操作系统-P8] (蒋炎岩)
musl-libc-精简易读的类glibc库,适合学习glibc内部实现细节

6 经典的书籍

  • Computer Systems: A Programmer’s Perspective【深入理解计算机系统】(CSAPP)
  • Operating Systems: Three Easy Pieces(OSTEP)
  • Advanced Programming in the UNIX Environment (3rd Edition)【UNIX环境高级编程】 (APUE)
  • TCP-IP Illustrated Volunme 1-The Protocols

7 实用工具

7.1 windows实用工具

本地文件搜索:everyting
解压工具:7Zip
剪贴板:ditto
截图工具:Snipaste
图片简单编辑工具:GreenShot
远程连接客户端(开源免费的类Xshell工具):WindTerm

7.2 绘图工具

ProcessOn:在线绘图网站
Drawio
Graphviz:开源图形可视化软件
XMind: 思维导图工具
Excalidraw: 开源手绘画风绘图工具
PlantUML:绘制UML的工具
Matplotlib【配合python使用】 官网

7.3 格式化代码

7.3.1 indent

1
2
# indent工具格式化c/c++代码:
indent -kr -i8 hello.c #将源代码格式化为内核编码风格

7.3.2 clang-format

1
2
# 使用clang-format格式化当前目录下所有的.h、.c文件
find ./ -iname '*.h' -o -iname '*.c' | xargs clang-format -i

clang-format下载地址
clang-format用法

7.4 ImageMagick给图片添加水印的方法

  1. 下载ImageMagick: ImageMagick下载地址

  2. 添加ImageMagick的环境变量:将ImageMagick的安装完成后的二进制目录添加到系统path路径中。

  3. 制作水印文件watermark.png,可以使用windows自带的mspaint制作。

  4. 执行命令composite -dissolve 30% -gravity south watermark.jpg input-file.jpg output-file.jpg制作水印。

  5. 也可以批量制作水印。例如下面shell脚本可以将当前目录下所有的jpg文件添加水印。

    1
    2
    3
    
    for pic in *.png; do
     composite -dissolve 30% watermark.png $pic ${pic//.png}-marked.png
    done
    

7.5 7-zip用法

7-zip制作tar.gz压缩包的方法:

  1. 先将待压缩的目录或者文件压缩为tar格式的压缩包
  2. 然后再将tar包使用gzip进行压缩即可

8 实用网站

c语言编程书籍推荐
C++书籍推荐
操作系统相关知识库
ArchWiki: Arch Linux documentation
在线LaTeX编辑网站
计算机自学指南:涵盖计算机相关的网站、书籍等,内容丰富
开源编程书籍
计算机相关书籍推荐