[{"data":1,"prerenderedAt":1342},["ShallowReactive",2],{"home-recent-posts":3},[4,94,1317],{"id":5,"title":6,"body":7,"category":80,"date":81,"description":82,"extension":83,"meta":84,"navigation":85,"path":86,"seo":87,"stem":88,"tags":89,"updated":92,"__hash__":93},"blog\u002Fblog\u002Fxiaoji.md","小记",{"type":8,"value":9,"toc":76},"minimark",[10,13,22,25,28,39,42,49,52,55,58,61,64,67,70,73],[11,12,6],"h1",{"id":6},[14,15,16,17,21],"p",{},"我只是觉得 ",[18,19,20],"code",{},"Recent"," 区块那层玻璃边框有点突兀。",[14,23,24],{},"没有明显的 bug，也不是不能看，甚至如果把它放在别的网站里，大概也算不上什么问题。但在这个页面里，它显得有点像玻璃一样的边界感，把文章包成了一个个“组件”。",[14,26,27],{},"而我意识到在我脑子中或者说喜欢的博客看起来如果是组件堆出来的页面那只是稀疏平常的。",[14,29,30,31,34,35,38],{},"当我刚开始搭建的时候，我只会要求功能正确，至少别出 ",[18,32,33],{},"bug","，什么地方有问题也可以找 ",[18,36,37],{},"codex"," 修，然后考虑这里应该放什么模块，那里应该有什么功能，页面是不是足够完整，布局是长什么样。",[14,40,41],{},"一个网站总要能用，总要有入口、文章、分类、链接、主题切换、评论系统。可是真的把这些东西摆在一起之后，我又会觉得少了点什么。",[14,43,44,45,48],{},"少的是什么呢？刚开始搓网站的时候，东抄西看，积累审美，借鉴其他做的优秀的站点、",[18,46,47],{},"blog"," 之类的。",[14,50,51],{},"也许是一种我的风格吧……",[14,53,54],{},"我喜欢一种感觉，你走进家门可以看见桌面上有正在写的东西，角落里有没整理完的笔记，门口贴着几个去别处的链接，偶尔还能看到我现在到底在干嘛。",[14,56,57],{},"所以首页后来变成了现在这个样子。",[14,59,60],{},"我很喜欢“门”这个说法。",[14,62,63],{},"因为链接不应该总是像按钮。按钮会催促点击，但门只是安静地在那里。你可以选择走过去，也可以不走过去。或许就应该是这种状态。",[14,65,66],{},"我在做整理吧，反正今天改一个不顺眼的地方，明天重写一段文章。",[14,68,69],{},"这篇就算是一点小记。",[14,71,72],{},"它还没有完成。",[14,74,75],{},"总之……我挺喜欢现在这样的。",{"title":77,"searchDepth":78,"depth":78,"links":79},"",2,[],"notes","2026-05-19","从一层有点突兀的玻璃边框开始，重新想了想这个博客应该像什么。","md",{},true,"\u002Fblog\u002Fxiaoji",{"title":6,"description":82},"blog\u002Fxiaoji",[90,91],"site","note",null,"6E4glD76a9FzSx0ACewrPDNud7zSbYKctcjOrwjbutA",{"id":95,"title":96,"body":97,"category":1308,"date":1309,"description":1310,"extension":83,"meta":1311,"navigation":85,"path":1312,"seo":1313,"stem":1314,"tags":1315,"updated":92,"__hash__":1316},"blog\u002Fblog\u002F2026.1.md","毕业",{"type":8,"value":98,"toc":1284},[99,101,104,115,118,124,127,133,136,139,142,145,161,166,169,172,198,201,206,209,216,218,222,225,228,254,257,262,269,272,274,278,281,283,312,315,321,324,326,330,333,336,361,364,369,375,378,380,384,387,390,416,419,424,427,434,436,439,442,445,450,452,456,463,466,507,510,516,519,521,525,528,563,566,572,575,577,580,585,589,592,630,633,638,641,644,647,649,653,656,658,681,684,690,693,695,698,701,704,712,714,718,721,724,761,764,770,773,775,779,782,784,810,813,819,822,824,827,830,835,837,841,843,866,869,880,886,889,891,894,897,899,903,905,928,931,937,940,942,946,949,951,971,974,977,979,983,986,988,1014,1017,1022,1028,1031,1033,1036,1038,1042,1044,1074,1077,1083,1086,1088,1092,1095,1097,1129,1135,1138,1140,1144,1148,1151,1154,1189,1192,1203,1209,1212,1214,1217,1220,1223,1234,1237,1242,1245,1256,1262,1264,1267,1270,1273,1276,1279],[11,100,96],{"id":96},[14,102,103],{},"转眼之间，本科阶段已经结束了。",[14,105,106,107,110,111,114],{},"回头去看这几年的学习经历，很多课程、项目、熬夜调试代码的瞬间，其实已经慢慢构成了自己对于计算机这一领域最初的理解。",[108,109],"br",{},"\n从最开始写下第一行 ",[18,112,113],{},"printf(\"Hello World\");","，到后来逐渐接触算法、系统、AI、工程化开发，再到毕业项目，很多东西已经不仅仅只是“课程”本身，而是一个逐渐建立技术世界观的过程。",[14,116,117],{},"有些课学得很痛苦，赶due赶得很崩溃，会在某个深夜突然意识到：",[119,120,121],"blockquote",{},[14,122,123],{},"软件系统是由无数细节堆积起来的。",[14,125,126],{},"这篇文章算是对本科阶段的一个简单总结，也记录一下自己这些年接触过的方向与内容。",[14,128,129,130,132],{},"写这些课程的时候，其实很难完全客观。每一门课背后都有一些很具体的画面：早八听不进去的 lecture，ddl 前突然发现测试全红的瞬间，组会里大家盯着同一个 bug 沉默，还有考前翻 notes 翻到怀疑人生的晚上。",[108,131],{},"\n现在再看，它们不只是课程代码和成绩单上的几行字，更像是我一点点被计算机这个学科改变的过程。",[134,135],"hr",{},[11,137,138],{"id":138},"编程与软件开发方向",[14,140,141],{},"这一部分是整个本科阶段最核心、也是接触时间最长的内容。",[14,143,144],{},"从最基础的编程入门，到后面的软件工程、面向对象设计、代码架构、工程协作，其实一直都在学习：",[146,147,148,152,155,158],"ul",{},[149,150,151],"li",{},"如何把“想法”真正变成“软件”",[149,153,154],{},"如何让代码变得可维护",[149,156,157],{},"如何和别人一起开发项目",[149,159,160],{},"如何面对复杂系统而不失控",[162,163,165],"h2",{"id":164},"comp1511-programming-fundamentals","COMP1511 Programming Fundamentals",[14,167,168],{},"最开始接触编程的一门课。",[14,170,171],{},"主要学习了：",[146,173,174,177,180,183,186,189,192,195],{},[149,175,176],{},"C 语言基础",[149,178,179],{},"条件语句与循环",[149,181,182],{},"函数",[149,184,185],{},"指针",[149,187,188],{},"数组",[149,190,191],{},"链表",[149,193,194],{},"基础数据结构",[149,196,197],{},"测试与 Debug 思维",[14,199,200],{},"也是从这里开始第一次真正理解：",[119,202,203],{},[14,204,205],{},"编程不仅仅是“写代码”，而是训练逻辑表达能力。",[14,207,208],{},"这门课的记忆很朴素，但也很重。刚开始写 C 的时候，一个分号、一个括号、一个数组越界都能让程序彻底不做人。那时候会觉得电脑很冷酷，它不会猜你的意思，也不会原谅你“差不多对了”。你必须把想法说清楚，说到机器可以一步一步执行。",[14,210,211,212,215],{},"后来才意识到，",[18,213,214],{},"COMP1511"," 真正在训练的不是 C 语言本身，而是把现实问题拆成程序结构的能力。条件、循环、函数、数组、链表，这些东西看起来基础，却像是之后所有课程的地基。地基不华丽，但地基歪了，后面所有东西都会跟着歪。",[134,217],{},[162,219,221],{"id":220},"comp1531-software-engineering-fundamentals","COMP1531 Software Engineering Fundamentals",[14,223,224],{},"第一次正式接触软件工程。",[14,226,227],{},"包括：",[146,229,230,233,236,239,242,245,248,251],{},[149,231,232],{},"Git 协作",[149,234,235],{},"RESTful API",[149,237,238],{},"团队开发",[149,240,241],{},"Agile \u002F iterative development",[149,243,244],{},"Testing",[149,246,247],{},"CI \u002F deployment 基础",[149,249,250],{},"后端系统设计",[149,252,253],{},"文档编写",[14,255,256],{},"这门课让人第一次意识到：",[119,258,259],{},[14,260,261],{},"工程化开发和个人写小程序完全是两回事。",[14,263,264,265,268],{},"个人写小程序的时候，很多混乱都可以被自己忍掉。变量名随便一点、接口设计别扭一点、测试少写一点，好像也能跑。但到了 ",[18,266,267],{},"COMP1531","，这些“差不多”会被团队开发无限放大。你写的代码不再只属于你自己，它会被别人调用、修改、质疑，也可能在某个 merge 之后把整个项目带崩。",[14,270,271],{},"这门课让我第一次感受到软件工程里那些看似麻烦的东西为什么存在。Git、API 文档、测试、CI、迭代开发、团队沟通，它们不是为了让项目变得更有仪式感，而是为了让一群人还能在混乱里保持一点秩序。写代码只是其中一部分，更难的是让大家对“我们正在做什么”有共同理解。",[134,273],{},[162,275,277],{"id":276},"comp2041-software-construction-techniques-and-tools","COMP2041 Software Construction: Techniques and Tools",[14,279,280],{},"更偏向于工具链与工程实践。",[14,282,227],{},[146,284,285,288,291,294,297,300,303,306,309],{},[149,286,287],{},"Unix filters",[149,289,290],{},"Shell scripting",[149,292,293],{},"Python scripting",[149,295,296],{},"Linux 环境",[149,298,299],{},"Git",[149,301,302],{},"Docker \u002F package managers 基础",[149,304,305],{},"自动化处理",[149,307,308],{},"正则表达式",[149,310,311],{},"软件构建与部署思想",[14,313,314],{},"也是第一次开始真正习惯命令行开发环境。",[14,316,317,320],{},[18,318,319],{},"COMP2041"," 有一种很特别的气质。它不像某些课那样强调宏大的理论，而是把你直接丢进开发工具的日常现场：shell、管道、正则、Python 脚本、Git、Docker、package manager。刚学的时候会觉得这些东西很碎，像是一堆散落在桌上的工具；用久了才发现，它们组合起来就是程序员处理现实世界混乱数据的方式。",[14,322,323],{},"这门课之后，我对命令行的感觉变了。以前命令行像一个黑框，神秘、危险、容易误操作；后来它更像一个可以被训练出来的工作空间。很多重复劳动不需要手动点来点去，很多文本和文件也不需要一行行复制粘贴。能把流程自动化，本身就是一种很实际的工程能力。",[134,325],{},[162,327,329],{"id":328},"comp2511-software-design-and-architecture","COMP2511 Software Design and Architecture",[14,331,332],{},"面向对象设计与软件架构。",[14,334,335],{},"核心内容包括：",[146,337,338,341,344,347,350,353,356,359],{},[149,339,340],{},"OOP 思想",[149,342,343],{},"Java",[149,345,346],{},"设计模式",[149,348,349],{},"SOLID Principles",[149,351,352],{},"UML",[149,354,355],{},"Refactoring",[149,357,358],{},"软件设计与架构",[149,360,244],{},[14,362,363],{},"这门课最大的收获并不是 Java 本身，而是：",[119,365,366],{},[14,367,368],{},"如何组织一个大型代码库。",[14,370,371,374],{},[18,372,373],{},"COMP2511"," 让我第一次认真面对“代码能跑”和“代码写得好”之间的距离。能跑当然重要，但当项目变大之后，真正折磨人的往往不是功能没实现，而是代码已经乱到没人敢改。一个类塞满太多职责，一个继承关系设计得很别扭，一个模式用得太用力，都会在后面变成维护时的债。",[14,376,377],{},"这门课里学到的 OOP、SOLID、UML、设计模式和 refactoring，当时有些内容看起来很抽象，甚至会觉得像在给简单问题套复杂框架。可等到真的写过更大的项目，才会发现这些概念背后想解决的是同一件事：让代码在变化中还能保持清晰。软件不是写完就结束，它总会被修改、扩展、重构，也总会被下一个人重新读一遍。",[134,379],{},[162,381,383],{"id":382},"comp6991-solving-modern-programming-problems-with-rust","COMP6991 Solving Modern Programming Problems with Rust",[14,385,386],{},"非常有特色的一门课。",[14,388,389],{},"通过 Rust 学习：",[146,391,392,395,398,401,404,407,410,413],{},[149,393,394],{},"Ownership",[149,396,397],{},"Borrow Checker",[149,399,400],{},"Memory Safety",[149,402,403],{},"类型系统",[149,405,406],{},"并发与并行",[149,408,409],{},"Testing \u002F documentation",[149,411,412],{},"Cargo 工具链",[149,414,415],{},"函数式编程风格",[14,417,418],{},"虽然过程很折磨，但也第一次真正开始理解：",[119,420,421],{},[14,422,423],{},"底层内存管理与高级语言抽象之间的关系。",[14,425,426],{},"Rust 这门课很难用“轻松”来形容。borrow checker 有时候像一个过分严格的助教，明明你觉得自己写得没问题，它偏要把所有权、生命周期、可变引用这些细节摊开给你看。痛苦是真痛苦，但这种痛苦也很有教育意义，因为它逼着你承认：很多以前被语言或者运行时藏起来的问题，其实一直都在。",[14,428,429,430,433],{},"学 ",[18,431,432],{},"COMP6991"," 的过程像是在重新理解“程序为什么是安全的”。不是因为程序员足够小心，而是因为语言、类型系统和工具链把一些错误挡在了更早的位置。写 Rust 会让人变慢，但慢下来的同时，也会更认真地思考数据属于谁、状态能不能共享、接口是不是足够清楚。它教的不只是 Rust，而是一种对程序边界的敏感。",[134,435],{},[11,437,438],{"id":438},"数据结构与算法方向",[14,440,441],{},"这是整个 CS 基础中最“硬核”的部分。",[14,443,444],{},"很多时候会觉得抽象、困难，但后来会慢慢发现：",[119,446,447],{},[14,448,449],{},"算法训练其实是在训练分析问题的能力。",[134,451],{},[162,453,455],{"id":454},"comp2521-data-structures-and-algorithms","COMP2521 Data Structures and Algorithms",[14,457,458,459],{},"经典核心课程, 刚学这门课得时候Lecturer和我们说, ",[460,461,462],"strong",{},"\"之前的课, 你只是一个初级的程序员, 但是现在你需要像一个计算机科学家一样思考\"",[14,464,465],{},"学习了：",[146,467,468,471,474,477,480,483,486,489,492,495,498,501,504],{},[149,469,470],{},"Recursion",[149,472,473],{},"Algorithm analysis",[149,475,476],{},"Abstract Data Types",[149,478,479],{},"Sorting",[149,481,482],{},"Tree",[149,484,485],{},"Balanced Search Tree",[149,487,488],{},"Graph",[149,490,491],{},"BFS \u002F DFS \u002F Dijkstra \u002F 以及衍生的算法",[149,493,494],{},"Hash",[149,496,497],{},"Heap",[149,499,500],{},"Queue",[149,502,503],{},"Priority Queue",[149,505,506],{},"Trie",[14,508,509],{},"也是第一次理解数据结构, 和简单的算法.",[14,511,512,515],{},[18,513,514],{},"COMP2521"," 很像一道分界线。前面的课更多是在问“你能不能把程序写出来”，到了这里，问题变成了“你为什么这样写”。同一个需求，选择数组、链表、树、哈希表或者图，背后的代价完全不同。程序不再只是语句的堆叠，而是数据如何被组织、如何被访问、如何在时间和空间之间做取舍。",[14,517,518],{},"这门课最有冲击力的地方，是它把“效率”变成了可以分析的东西。程序慢不是一种模糊感觉，而是可以用复杂度、数据规模、结构选择来解释。也正是从这里开始，我慢慢意识到 CS 的很多美感并不在界面上，而在那些看不见的结构里。",[134,520],{},[162,522,524],{"id":523},"comp3121-algorithm-design-and-analysis","COMP3121 Algorithm Design and Analysis",[14,526,527],{},"相比于数据结构，这门课更加偏向：",[146,529,530,533,536,539,542,545,548,551,554,557,560],{},[149,531,532],{},"算法证明 \u002F 数学分析",[149,534,535],{},"Correctness",[149,537,538],{},"Time Complexity",[149,540,541],{},"DP",[149,543,544],{},"Greedy",[149,546,547],{},"Divide and Conquer",[149,549,550],{},"Graph algorithms",[149,552,553],{},"Strings",[149,555,556],{},"NP 问题",[149,558,559],{},"流问题 Max Flow Min Cut",[149,561,562],{},"LaTeX 技术写作",[14,564,565],{},"很多题目都非常抽象，但训练了严谨思维。",[14,567,568,571],{},[18,569,570],{},"COMP3121"," 的痛苦和写代码不太一样。写代码的时候，程序跑了就是跑了，错了至少还能 debug。算法设计更像是在纸面上和自己较劲：一个想法看起来对，但你必须证明它为什么对；一个复杂度看起来不错，但你必须说清楚它为什么不会炸。",[14,573,574],{},"这门课让人反复遇到一种无力感：题目读得懂，例子也能手算，可真正要写出完整证明的时候，脑子突然变得很空。也正因为这样，它训练的东西很硬。DP、greedy、divide and conquer、graph algorithms、NP、flow，这些内容不只是算法模板，更是不同的问题观察方式。学到后面会发现，严谨不是装出来的学术腔，而是面对复杂问题时让自己不乱掉的方法。",[134,576],{},[162,578,579],{"id":579},"数学课程",[581,582,584],"h3",{"id":583},"math1131-mathematics-1a","MATH1131 Mathematics 1A",[581,586,588],{"id":587},"math1231-mathematics-1b","MATH1231 Mathematics 1B",[14,590,591],{},"主要包括：",[146,593,594,597,600,603,606,609,612,615,618,621,624,627],{},[149,595,596],{},"微积分",[149,598,599],{},"多变量微积分",[149,601,602],{},"线性代数",[149,604,605],{},"向量",[149,607,608],{},"矩阵",[149,610,611],{},"线性方程组",[149,613,614],{},"Vector spaces",[149,616,617],{},"Linear transformations",[149,619,620],{},"Eigenvalues \u002F Eigenvectors",[149,622,623],{},"ODE",[149,625,626],{},"Series",[149,628,629],{},"Probability distributions",[14,631,632],{},"虽然当时经常会想：",[119,634,635],{},[14,636,637],{},"“这玩意以后真的有用吗？”",[14,639,640],{},"但后来在 AI、图形学、优化问题里都会重新遇到。",[14,642,643],{},"数学课在当时经常显得很遥远。做题的时候会觉得自己像是在和符号打架，矩阵、积分、级数、特征值、ODE，每一个词都很正经，也都不太像能立刻变成一个项目。可后面接触 AI、computer vision、graphics、optimisation 时，这些东西又会换一种形式回来。",[14,645,646],{},"那种感觉挺奇妙的。以前觉得线性代数只是算矩阵，后来发现图像、模型参数、空间变换都离不开它；以前觉得微积分只是考试题，后来才知道优化和连续变化背后都是它的影子。数学课不一定会马上给人成就感，但它会在很久以后突然补上一块拼图。",[134,648],{},[581,650,652],{"id":651},"math1081-discrete-mathematics","MATH1081 Discrete Mathematics",[14,654,655],{},"离散数学几乎是整个 CS 理论的基础。",[14,657,227],{},[146,659,660,663,666,669,672,675,678],{},[149,661,662],{},"Logic",[149,664,665],{},"Set Theory",[149,667,668],{},"Number Theory",[149,670,671],{},"Proof",[149,673,674],{},"Recurrence",[149,676,677],{},"Graph Theory",[149,679,680],{},"Combinatorics",[14,682,683],{},"也让自己第一次正式接触数学证明。",[14,685,686,689],{},[18,687,688],{},"MATH1081"," 和计算机的关系比我一开始想象得更近。Logic、set、proof、graph、combinatorics，这些内容看起来不像写程序，但它们其实一直在程序背后。条件判断是逻辑，状态转移像图，递归和 recurrence 关系很近，算法正确性也离不开证明。",[14,691,692],{},"这门课最重要的收获，是让我开始接受“证明”这种表达方式。它不是为了把事情讲得更复杂，而是为了把直觉变得可靠。很多时候你觉得一个结论“应该是对的”，但数学会逼你回答：为什么？这个问题很烦，也很有用。",[134,694],{},[11,696,697],{"id":697},"人工智能与计算机视觉方向",[14,699,700],{},"这是后来逐渐开始感兴趣的方向。",[14,702,703],{},"相比传统开发，这部分内容更加偏向：",[146,705,706,709],{},[149,707,708],{},"“让机器理解”",[149,710,711],{},"“让系统具有推理能力”",[134,713],{},[162,715,717],{"id":716},"comp3411-artificial-intelligence","COMP3411 Artificial Intelligence",[14,719,720],{},"AI 基础课程。",[14,722,723],{},"涉及：",[146,725,726,729,732,735,738,741,744,747,750,753,755,758],{},[149,727,728],{},"Search",[149,730,731],{},"Autonomous Agents",[149,733,734],{},"Knowledge Representation",[149,736,737],{},"Problem Solving",[149,739,740],{},"Machine Learning 基础",[149,742,743],{},"Neural Networks",[149,745,746],{},"Reinforcement Learning",[149,748,749],{},"Optimisation",[149,751,752],{},"Reasoning under uncertainty",[149,754,662],{},[149,756,757],{},"Planning",[149,759,760],{},"Vision \u002F Language Processing 基础",[14,762,763],{},"第一次真正理解 AI 并不只是“调用模型”。",[14,765,766,769],{},[18,767,768],{},"COMP3411"," 让我对 AI 的理解从“很酷的模型”往回退了一步，退到更基础的问题：智能系统到底如何表示知识，如何搜索状态空间，如何在不确定性里做判断，如何从数据里学到模式。它不像现在互联网上讨论 AI 那样热闹，但它把很多底层概念摊开了。",[14,771,772],{},"学完之后再看 AI，会更容易意识到模型只是系统的一部分。问题怎么定义，数据怎么表示，目标怎么设计，结果怎么评估，这些都很重要。所谓“让机器思考”其实没有那么浪漫，更多时候是在一堆形式化假设、算法选择和工程限制里找到一个能工作的方案。",[134,774],{},[162,776,778],{"id":777},"comp9517-computer-vision","COMP9517 Computer Vision",[14,780,781],{},"计算机视觉相关课程。",[14,783,227],{},[146,785,786,789,792,795,798,801,804,807],{},[149,787,788],{},"Image Processing",[149,790,791],{},"Feature Extraction",[149,793,794],{},"Object Detection",[149,796,797],{},"Scientific \u002F statistical \u002F engineering approaches to vision",[149,799,800],{},"Computer vision algorithms",[149,802,803],{},"CNN 基础",[149,805,806],{},"OpenCV",[149,808,809],{},"Group project \u002F larger vision application",[14,811,812],{},"也是第一次真正处理图像数据。",[14,814,815,818],{},[18,816,817],{},"COMP9517"," 的体验和处理文本、数字很不一样。图像对人来说太自然了，以至于我们很容易忘记机器看到的只是像素、矩阵和噪声。边缘、角点、纹理、目标检测，这些任务听起来直观，真正做起来才知道视觉问题有多不稳定。光照一变、角度一偏、背景复杂一点，结果就可能完全不同。",[14,820,821],{},"这门课让我第一次接触到计算机视觉里那种混合感：一部分是数学和统计，一部分是算法实现，一部分是工程调参，还有一部分是你对现实数据的耐心。OpenCV 和 CNN 让很多东西看起来可以快速跑起来，但真正要做出可靠结果，仍然要理解图像背后的结构和限制。",[134,823],{},[11,825,826],{"id":826},"系统与底层方向",[14,828,829],{},"这一部分课程让人意识到：",[119,831,832],{},[14,833,834],{},"高级语言背后，其实隐藏着大量底层机制。",[134,836],{},[162,838,840],{"id":839},"comp1521-computer-systems-fundamentals","COMP1521 Computer Systems Fundamentals",[14,842,591],{},[146,844,845,848,851,854,857,860,863],{},[149,846,847],{},"Assembly",[149,849,850],{},"Memory",[149,852,853],{},"CPU",[149,855,856],{},"Binary Representation",[149,858,859],{},"C 与 Assembly 的关系",[149,861,862],{},"Operating System 基础",[149,864,865],{},"Concurrency 基础",[14,867,868],{},"第一次真正开始理解：",[146,870,871,874,877],{},[149,872,873],{},"程序到底是怎么运行的",[149,875,876],{},"指针为什么危险",[149,878,879],{},"内存为什么会出问题",[14,881,882,885],{},[18,883,884],{},"COMP1521"," 是那种学的时候很底层，学完之后会反过来影响你写高级语言的课。以前写 C，很多错误只是“它崩了”；学完系统之后，会更容易想象崩溃背后发生了什么：内存布局、寄存器、stack frame、二进制表示、指令执行、操作系统提供的抽象。",[14,887,888],{},"这门课也让指针变得没那么玄学。指针危险不是因为它难，而是因为它太接近真实机器了。它给你自由，也把很多保护拿掉。理解了这一点之后，再看高级语言里的内存安全、运行时、并发模型，会更清楚它们到底在替我们挡住什么。",[134,890],{},[11,892,893],{"id":893},"数据库与信息系统方向",[14,895,896],{},"除了纯技术之外，也接触了一些偏商业与信息系统管理的内容。",[134,898],{},[162,900,902],{"id":901},"infs1603-introduction-to-business-databases","INFS1603 Introduction to Business Databases",[14,904,465],{},[146,906,907,910,913,916,919,922,925],{},[149,908,909],{},"SQL",[149,911,912],{},"Relational Database",[149,914,915],{},"Conceptual \u002F relational database modelling",[149,917,918],{},"Schema Design",[149,920,921],{},"Normalisation",[149,923,924],{},"Database implementation",[149,926,927],{},"数据库相关的 professional \u002F ethical issues",[14,929,930],{},"也是第一次真正接触数据库设计。",[14,932,933,936],{},[18,934,935],{},"INFS1603"," 让我第一次意识到，数据库不是“把东西存起来”这么简单。现实业务里的信息往往很乱，人、订单、商品、权限、流程，每一样东西都要被抽象成表、字段、关系和约束。模型设计得清楚，后面的查询和维护会顺很多；模型一开始就别扭，业务逻辑很快会跟着变形。",[14,938,939],{},"这门课虽然偏 business database，但它给我的感觉很实用。SQL 不只是考试里的查询题，它是一种和数据对话的方式。Schema design 和 normalisation 也不是形式主义，而是在尽量避免重复、冲突和难以解释的数据状态。",[134,941],{},[162,943,945],{"id":944},"infs2602-managing-information-systems","INFS2602 Managing Information Systems",[14,947,948],{},"更偏向企业与组织中的信息系统管理。",[14,950,227],{},[146,952,953,956,959,962,965,968],{},[149,954,955],{},"企业系统",[149,957,958],{},"IT 管理",[149,960,961],{},"信息流",[149,963,964],{},"系统规划",[149,966,967],{},"组织中的信息系统",[149,969,970],{},"信息系统带来的业务、管理和伦理问题",[14,972,973],{},"这类课和纯技术课的气质不一样。它不太关心某个函数怎么写，也不太关心算法复杂度，而是把系统放回组织里看：谁在使用它，谁为它付钱，谁要维护它，它改变了什么流程，又制造了什么新的风险。",[14,975,976],{},"有时候这类内容会显得没有代码课那么“硬”，但后来做项目时会发现，软件落地之后一定会进入人的世界。技术方案再漂亮，如果和组织结构、业务流程、管理成本完全脱节，也很难真正发挥作用。",[134,978],{},[162,980,982],{"id":981},"infs2603-business-analysis-and-agile-product-management","INFS2603 Business Analysis and Agile Product Management",[14,984,985],{},"偏向需求分析、业务建模与产品管理。",[14,987,227],{},[146,989,990,993,996,999,1002,1005,1008,1011],{},[149,991,992],{},"Requirement Analysis",[149,994,995],{},"Stakeholder Communication",[149,997,998],{},"Process Modeling",[149,1000,1001],{},"Agile \u002F Scrum",[149,1003,1004],{},"Product roadmap",[149,1006,1007],{},"Prototyping",[149,1009,1010],{},"Customer needs",[149,1012,1013],{},"Group work",[14,1015,1016],{},"也让自己意识到：",[119,1018,1019],{},[14,1020,1021],{},"软件开发很多时候并不只是技术问题。",[14,1023,1024,1027],{},[18,1025,1026],{},"INFS2603"," 更像是从产品和业务侧重新看软件。程序员很容易把需求理解成一句功能描述，但 business analysis 会追问得更深：谁提出这个需求？它解决什么问题？不同 stakeholder 的期待是否冲突？什么是真正必须做的，什么只是听起来不错？",[14,1029,1030],{},"Agile、Scrum、product roadmap、prototype 这些词，听起来都很管理，但它们背后其实是在处理不确定性。很多项目不是因为代码写不出来才失败，而是因为一开始就没有搞清楚要解决的到底是什么。理解这一点之后，再回头看软件开发，会觉得沟通和判断本身也是技术的一部分。",[134,1032],{},[11,1034,1035],{"id":1035},"人机交互与职业素养方向",[134,1037],{},[162,1039,1041],{"id":1040},"comp3511-human-computer-interaction","COMP3511 Human Computer Interaction",[14,1043,465],{},[146,1045,1046,1049,1052,1055,1058,1060,1062,1065,1068,1071],{},[149,1047,1048],{},"UI\u002FUX",[149,1050,1051],{},"Visual Design Principles",[149,1053,1054],{},"User-centered Design",[149,1056,1057],{},"用户研究",[149,1059,992],{},[149,1061,1007],{},[149,1063,1064],{},"可用性设计",[149,1066,1067],{},"Usability Evaluation",[149,1069,1070],{},"Accessibility",[149,1072,1073],{},"用户行为分析",[14,1075,1076],{},"第一次开始从“用户”的角度思考软件。",[14,1078,1079,1082],{},[18,1080,1081],{},"COMP3511"," 会让人意识到，软件不是给开发者自己欣赏的。一个功能完整的系统，如果用户找不到入口、看不懂反馈、操作时不断犯错，那它依然是失败的。UI\u002FUX、accessibility、usability evaluation 这些内容，表面上像是在讨论界面，实际上是在讨论人如何理解系统。",[14,1084,1085],{},"这门课对我最大的提醒，是不要太相信开发者视角。写代码的人知道按钮在哪里，知道流程为什么这样设计，也知道出错时该怎么办；用户不知道。真正好的设计不是靠解释补救，而是让人在尽量少的认知负担下完成自己的事情。",[134,1087],{},[162,1089,1091],{"id":1090},"comp4920-professional-issues-and-ethics-in-information-technology","COMP4920 Professional Issues and Ethics in Information Technology",[14,1093,1094],{},"偏向行业与职业伦理相关内容。",[14,1096,227],{},[146,1098,1099,1102,1105,1108,1111,1114,1117,1120,1123,1126],{},[149,1100,1101],{},"软件工程伦理",[149,1103,1104],{},"Normative ethics",[149,1106,1107],{},"Research ethics",[149,1109,1110],{},"职业责任",[149,1112,1113],{},"Privacy",[149,1115,1116],{},"Trust \u002F accountability",[149,1118,1119],{},"AI ethics",[149,1121,1122],{},"Bias \u002F fairness",[149,1124,1125],{},"Transparency \u002F explainability",[149,1127,1128],{},"行业案例分析",[14,1130,1131,1134],{},[18,1132,1133],{},"COMP4920"," 不像一门传统意义上“教技能”的课。它更多是在逼你承认，技术不是中立地飘在空中。一个系统如何收集数据、如何排序内容、如何做自动化决策、如何解释结果，都可能影响真实的人。",[14,1136,1137],{},"这门课里讨论的 privacy、bias、fairness、accountability、AI ethics，很多时候没有标准答案。也正因为没有标准答案，才需要更谨慎的判断。写代码的人不能永远躲在“我只是实现需求”后面。软件工程师的责任，有时候就藏在那些看似普通的技术选择里。",[134,1139],{},[11,1141,1143],{"id":1142},"毕业设计-实战项目","毕业设计 \u002F 实战项目",[162,1145,1147],{"id":1146},"comp3900-computer-science-project","COMP3900 Computer Science Project",[14,1149,1150],{},"本科阶段最接近真实开发的一门课。",[14,1152,1153],{},"需要：",[146,1155,1156,1159,1162,1165,1168,1171,1174,1177,1180,1183,1186],{},[149,1157,1158],{},"团队协作",[149,1160,1161],{},"Requirement analysis",[149,1163,1164],{},"项目规划",[149,1166,1167],{},"前后端开发",[149,1169,1170],{},"沟通",[149,1172,1173],{},"演示",[149,1175,1176],{},"文档",[149,1178,1179],{},"迭代开发",[149,1181,1182],{},"Progress checkpoints",[149,1184,1185],{},"Final demo \u002F report",[149,1187,1188],{},"Peer assessment",[14,1190,1191],{},"很多时候比起“技术”本身，更考验：",[146,1193,1194,1197,1200],{},[149,1195,1196],{},"如何推进项目",[149,1198,1199],{},"如何协调团队",[149,1201,1202],{},"如何在有限时间里完成目标",[14,1204,1205,1208],{},[18,1206,1207],{},"COMP3900"," 很像本科阶段的一次综合考试，只不过它考的不是某一个知识点。需求会变，时间会不够，队友之间会有不同节奏，demo 前总会冒出新的问题。你会发现以前学过的很多东西都被放到同一个项目里：工程协作、系统设计、用户理解、文档、展示、取舍。",[14,1210,1211],{},"这门课最真实的地方在于，它让人看到项目不是靠“某个人很强”就能自然完成的。真正困难的是持续推进：今天解决一点，明天同步一点，某个功能砍掉，某个 bug 修掉，某个页面重做。到最后交付出来的东西可能并不完美，但它确实是一个团队在有限时间里一点点推出来的结果。",[134,1213],{},[11,1215,1216],{"id":1216},"一些感想",[14,1218,1219],{},"本科阶段其实很难说自己真正“精通”了什么。",[14,1221,1222],{},"更多的是：",[146,1224,1225,1228,1231],{},[149,1226,1227],{},"接触了很多方向",[149,1229,1230],{},"建立了一些基础",[149,1232,1233],{},"知道了计算机世界大概长什么样",[14,1235,1236],{},"后来慢慢会发现：",[119,1238,1239],{},[14,1240,1241],{},"CS 真正困难的地方，不是某一门语言，也不是某一个框架。",[14,1243,1244],{},"而是：",[146,1246,1247,1250,1253],{},[149,1248,1249],{},"抽象能力",[149,1251,1252],{},"学习能力",[149,1254,1255],{},"面对复杂问题时的耐心",[14,1257,1258,1259,1261],{},"很多课程结束后，知识可能会忘记。",[108,1260],{},"\n但那些训练思维的过程，最终还是会留下来。",[134,1263],{},[11,1265,1266],{"id":1266},"结束",[14,1268,1269],{},"至此，本科阶段正式结束。",[14,1271,1272],{},"有遗憾，也有收获。有很多事情当时觉得痛苦，但现在回头看，似乎也都成为了经历的一部分。",[14,1274,1275],{},"未来会继续学习，也会继续写代码。",[14,1277,1278],{},"希望很多年以后再回来看这篇文章的时候，仍然会记得：",[119,1280,1281],{},[14,1282,1283],{},"自己最开始为什么会喜欢计算机。",{"title":77,"searchDepth":78,"depth":78,"links":1285},[1286,1287,1288,1289,1290,1291,1292,1293,1299,1300,1301,1302,1303,1304,1305,1306,1307],{"id":164,"depth":78,"text":165},{"id":220,"depth":78,"text":221},{"id":276,"depth":78,"text":277},{"id":328,"depth":78,"text":329},{"id":382,"depth":78,"text":383},{"id":454,"depth":78,"text":455},{"id":523,"depth":78,"text":524},{"id":579,"depth":78,"text":579,"children":1294},[1295,1297,1298],{"id":583,"depth":1296,"text":584},3,{"id":587,"depth":1296,"text":588},{"id":651,"depth":1296,"text":652},{"id":716,"depth":78,"text":717},{"id":777,"depth":78,"text":778},{"id":839,"depth":78,"text":840},{"id":901,"depth":78,"text":902},{"id":944,"depth":78,"text":945},{"id":981,"depth":78,"text":982},{"id":1040,"depth":78,"text":1041},{"id":1090,"depth":78,"text":1091},{"id":1146,"depth":78,"text":1147},"devlog","2026-05-13","现在已是毕业之时 回忆过去 思绪良多 写下一些内容吧",{},"\u002Fblog\u002F2026.1",{"title":96,"description":1310},"blog\u002F2026.1",[91],"DnHMX4c-8vahnm4yqmn5ZBkJvErdGC0iem__Augm3CU",{"id":1318,"title":1319,"body":1320,"category":80,"date":1332,"description":1333,"extension":83,"meta":1334,"navigation":85,"path":1335,"seo":1336,"stem":1337,"tags":1338,"updated":92,"__hash__":1341},"blog\u002Fblog\u002Fnothing.md","Nothing here",{"type":8,"value":1321,"toc":1330},[1322],[14,1323,1324],{},[1325,1326,1327],"em",{},[460,1328,1329],{},"愚人节罢了",{"title":77,"searchDepth":78,"depth":78,"links":1331},[],"2026-04-01","No....",{},"\u002Fblog\u002Fnothing",{"title":1319,"description":1333},"blog\u002Fnothing",[1339,1340],"joke","short","hRMFXOfEJ3JWzGhX9g0AWGOK5mzaByymKlHWhMtoC3s",1779122465739]