ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Monash FIT5047开学准备指南:环境搭建、API脚手架与Git协作全流程

Monash FIT5047开学准备指南:环境搭建、API脚手架与Git协作全流程 很多准备去莫纳什大学读 IT 方向的同学看到 FIT5047 这门课的第一反应往往是这课到底是学什么的要不要写代码作业难不难而到了“26s2”这种带着学期号的公开课信息出现时反而更让人焦虑——因为能搜到的资料通常只有时间、课程代码和一句简介缺少一份能照着准备的清单。这篇文章我会以 Monash FIT5047 为主线拆解从课程资料确认、开发环境搭建、最小 API 脚手架到 Git 团队协作和常见排错的全流程。也就是说重点不是告诉你某个作业的“标准答案”而是帮你建立一套从第一周开始就能复用的技术准备方法。无论你最终进入课程后面对的是 Python 数据处理、Java Web 工程还是理论为主的研究型任务下面这套方法都能直接迁移过去。先做一个非常重要的说明本文不替代 Monash 官方 Unit Guide。FIT5047 的具体单元名称、每周主题、考核构成每学期都可能由教学团队调整最终要以学校 Handbook 和 Moodle 上公布的版本为准。这篇文章的价值在于在官方大纲还没完全明确时先把通用能力和环境准备好避免开学前三周全部用来装软件、配环境、找队友。1. FIT5047 是什么先理解 Monash 的课程体系1.1 课程代码怎么看FIT5047 不是某个软件也不是某本教材而是莫纳什大学一门课程单元的代码。理解代码本身能帮你快速判断课程定位FIT代表 Faculty of Information Technology即莫纳什大学信息技术学院后面的数字中5 开头通常意味着课程安排在研究生教育阶段也就是说这门课大概率服务 Master 层次的培养方案5047是学院内部给具体单元分配的顺序编号。Monash 的课程信息高度透明。在 Google 搜索Monash FIT5047 Handbook通常能找到课程单元的官方页面里面会列出所属学位、开设校区、学分数、prerequisites先修要求和 learning outcomes学习目标。这是判断 FIT5047 是否适合你的第一手依据也是最不容易过时的信息源。1.2 26s2 表示什么从标题里出现的“26s2”来看比较合理的解读是2026 年 Semester 2也就是 2026 年第二学期。Monash 的学年不完全是自然年两等分不同学位、不同校区在选课时间、教学周安排上会有差异。更重要的是国际学生还要结合 enrol选课注册、census date退课截止日等节点来做规划。因此如果 FIT5047 是你计划在 26s2 修的课开课前必须做两件事去 Monash Handbook 确认该课程是否在 26s2 开放查看自己的选课计划确认这门课在你的学位结构中是否属于核心课或选修课。“26s2”如果来自一节公开课宣传那它更像一个了解教学风格的“预览窗口”不是正式上课。注册课程之后所有正式通知和课件都会走学校系统例如 Moodle 课程页面和 Monash 邮箱。1.3 公开课的正确打开方式网络上关于海外名校课程的“公开课”有很多种形态有教授开放的 lecture recording有学生社团组织的复习讲座也有第三方机构把往期讲义整理成站点。对 FIT5047 来说公开课可以帮你提前感知课程难度和风格但不能取代正式课程材料。这里有一个版权和学术诚信边界正式课件、作业题目、评分标准通常属于学校教学资料不应被复制到公开博客、GitHub 仓库或网盘分享中。你在自己的学习笔记里总结观点没有问题但直接上传 PPT、讲义 PDF 和作业源码风险很高。所以本文所有代码示例都是我自己重写的实用脚手架不包含任何内部课程材料。2. 开课前必做的四件事在正式开课的 2 到 4 周前我建议你按照下面这个清单走一遍。不要等到第一周 lecture 结束才开始。2.1 确认 Unit Guide 里的考核结构Unit Guide 是每个 Monash 课程单元的“法律文件”通常会在开课前或第一周发布。里面最重要的部分是 assessment 构成也就是分数怎么分配。你需要逐条记录考核项目常见形态需要提前准备什么平时练习每周 quiz、tutorial 提交阅读每周材料设置固定提醒个人作业代码项目 / 报告 / 数据实验环境、写作工具、查重边界小组项目代码仓库 演示 团队报告队友、协作规范、Git期末考核考试 / take-home exam复习节奏错题整理如果你看到 FIT5047 的 Unit Guide 里包含“group project”或“individual assignment”那本文第 4、5 节的工程脚手架可以直接用上。2.2 确认技术栈和官方版本要求很多课程在第一周的 tutorial 里会写“请提前安装 Python 3.x”或“本课程使用 Java 17”。这种版本要求一定要以教师为准。在没有明确要求时不要盲目追求最新版本。最新框架版本往往伴随着依赖兼容问题而课程讲义、评测脚本可能还没有适配。选稳定版本优先于选新版本。如果你在开课前不知道 FIT5047 用哪个技术栈可以先做两手准备装好 Git再装一个主流语言运行时Java 或 Python。这两类工具在 Monash IT 学院绝大部分课程里都会用到哪怕最后不写代码也不会白装。2.3 搭建统一的学习目录课程开始后材料会散落在 Moodle、邮件、笔记软件、代码仓库中。我建议你在本地建一个统一目录fit5047-26s2/ ├── 00-course-info/ # Unit Guide、课程大纲、个人时间表 ├── 01-lecture-notes/ # 每周课程笔记 ├── 02-tutorials/ # 每周练习 ├── 03-assignments/ # 正式作业 ├── 04-readings/ # 论文和阅读材料 ├── 05-scaffold/ # 课程项目脚手架 └── README.md # 整个目录的索引这个目录结构能让你的文件管理从第一周开始就是有序的。README.md 里记录课程重要日期比如 assessment due date、SWOT week、考试时间比单纯放在备忘录里更不容易丢。2.4 找队友并约定协作方式如果你的学位计划里 FIT5047 很可能包含小组项目那开课前就要开始寻找靠谱队友。判断“靠谱”的标准不是成绩好坏而是沟通是否及时、能否按时交付。组队之后建议立刻约定三件事每周开例会的时间文档和代码放在哪里如果某位成员连续缺席团队如何处理。这些规则虽然听起来很“职场”但能帮你避免学期末最痛苦的团队崩盘。团队合作的技术基础就是 Git 这也是第 5 节会重点展开的原因。3. 环境准备与版本说明不管 FIT5047 落到哪种方向一个干净可复现的开发环境都是最基本的工程能力。下面按最常见的三种课程方向给出建议。如果你的课程大纲已经明确技术栈就按课程要求执行如果还没有明确可以参考这套组合。3.1 通用基础工具工具用途安装后的验证命令Git版本管理、小组协作git --versionVS Code / IDEA写代码与笔记打开 IDE 即可Docker容器化运行环境docker --version命令行终端执行命令macOS/Linux 用 TerminalWindows 用 PowerShellGit 是必装项。即使课程不强制使用 Git用 Git 管理自己的作业也能避免“改坏之后找不回原版本”的悲剧。3.2 偏数据处理/脚本方向如果 FIT5047 的实验偏向数据分析、NLP、模型调用或自动化脚本Python 是最高频的选择。语言版本建议 Python 3.11 或 3.12推荐使用官方安装包或系统包管理器环境管理不要全局pip install使用venv或 condaIDEVS Code 配合 Python 插件足够必要时用 Jupyter Notebook。3.3 偏 Java 企业应用方向如果 FIT5047 属于软件工程、企业级应用开发一类常见的组合是 Java Spring Boot 或 Java 基础 Servlet。JDK 版本优先 Java 17 或 21 这类 LTS 版本构建工具Maven 或 Gradle其中 Maven 在课程里出现频率较高IDEIntelliJ IDEA 对 Java 开发最友好数据库练习阶段使用 H2 这类文件内嵌库即可不必一开始就装 MySQL。3.4 偏部署与工程化方向如果课程涉及容器、CI/CD、云服务那 Docker 是无论如何都要熟悉的基础工具。Docker 可以把运行环境打包成镜像让每个成员在本地运行的结果保持一致避免“在我电脑上是好的”这类经典问题。版本说明Java、Python、Node 等语言运行时应以 Monash 教学环境要求为准。本文所有示例版本都不代表“必须使用”只代表在我写这篇文章时比较稳妥的组合。请在真正运行代码前查看官方文档确认你安装的版本兼容。4. 最小可运行脚手架先让 API 跑起来假设 FIT5047 的某份作业要求你实现一个服务端程序并通过 HTTP 接口对外提供数据。很多同学一开始会直接引入 Spring Boot 或 Flask结果被依赖下载、版本冲突搞得焦头烂额。这里我提供一个更可控的最小方案使用 Python 标准库编写一个只依赖内置模块的 HTTP API。它不依赖任何第三方包适合验证课程环境、梳理 HTTP 逻辑、跑通端到端流程。4.1 项目结构创建两个文件目录名称可以叫fit5047-26s2/05-scaffold05-scaffold/ ├── server.py └── test_server.py4.2 编写 server.py下面代码实现了一个/api/courses接口返回固定的 JSON 数组。这里用内存中的列表代替数据库目的是先跑通流程。# 文件路径fit5047-26s2/05-scaffold/server.py import json from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse COURSES [ {code: FIT5047, name: Demo Course, semester: 26S2}, ] class CourseHandler(BaseHTTPRequestHandler): def do_GET(self): parsed urlparse(self.path) if parsed.path /api/courses: self.send_response(200) self.send_header(Content-Type, application/json; charsetutf-8) self.end_headers() payload json.dumps(COURSES, ensure_asciiFalse).encode(utf-8) self.wfile.write(payload) else: self.send_response(404) self.end_headers() self.wfile.write(bNot Found) def log_message(self, fmt, *args): # 便于在终端看到普通 HTTP 日志 print(f[http] {self.address_string()} - {fmt % args}) if __name__ __main__: server HTTPServer((127.0.0.1, 8000), CourseHandler) print(Starting server at http://127.0.0.1:8000) server.serve_forever()这份代码的逻辑很直观当 GET 请求访问/api/courses时服务端返回 200 状态码和 JSON 数据当访问其他路径时返回 404。值得留意的是urlparse被用来解析请求路径这样即使请求中带查询参数也不会影响路由判断。4.3 编写测试文件工程能力不是“能跑就行”而是“改完后还能跑”。因此我们需要一个自动化测试文件用来验证接口返回状态码和关键内容。# 文件路径fit5047-26s2/05-scaffold/test_server.py import json import threading import unittest from http.client import HTTPConnection import server from server import CourseHandler class CourseApiTest(unittest.TestCase): def setUp(self): self.httpd server.HTTPServer((127.0.0.1, 0), CourseHandler) self.port self.httpd.server_address[1] self.thread threading.Thread(targetself.httpd.serve_forever, daemonTrue) self.thread.start() def tearDown(self): self.httpd.shutdown() self.httpd.server_close() def test_courses_returns_200(self): conn HTTPConnection(127.0.0.1, self.port) conn.request(GET, /api/courses) response conn.getresponse() self.assertEqual(response.status, 200) data json.loads(response.read().decode(utf-8)) self.assertGreaterEqual(len(data), 1) self.assertEqual(data[0][code], FIT5047) conn.close() def test_unknown_path_returns_404(self): conn HTTPConnection(127.0.0.1, self.port) conn.request(GET, /not-exist) response conn.getresponse() self.assertEqual(response.status, 404) conn.close() if __name__ __main__: unittest.main()测试里创建了一个随机端口的 HTTP 服务运行在独立的线程中因此不会与真实端口冲突。这一点对多人共用同一台设备时很有价值。4.4 运行与验证打开终端进入目录并执行cd fit5047-26s2/05-scaffold python3 -m venv .venv source .venv/bin/activate # Windows PowerShell 使用: .venv\Scripts\Activate.ps1 python server.py启动成功后你应该会在终端看到Starting server at http://127.0.0.1:8000保持服务运行另开一个终端执行curl http://127.0.0.1:8000/api/courses预期输出[{code: FIT5047, name: Demo Course, semester: 26S2}]再测试不存在路径curl -i http://127.0.0.1:8000/not-exist预期输出中会包含404 Not Found。4.5 使用 Docker 封装服务如果课程要求部署在多台机器上或要求提交容器镜像可以用 Docker 把上面的服务包起来。创建Dockerfile# 文件路径fit5047-26s2/05-scaffold/Dockerfile FROM python:3.11-slim WORKDIR /app COPY server.py . EXPOSE 8000 CMD [python, server.py]构建和运行docker build -t fit5047-demo . docker run -p 8000:8000 fit5047-demo在浏览器或终端访问http://127.0.0.1:8000/api/courses结果应该和本地运行一致。这里用 Docker 最大的价值是环境一致性将来的助教或队友不用再装 Python只要装了 Docker就能跑同一个镜像。5. Git 协作从个人备份到小组工程单人的课程作业Git 主要用来做版本回滚小组项目的课程作业Git 是协作的核心。下面把最关键的 Git 工作流拆开。5.1 初始化并提交代码把 05-scaffold 目录变成 Git 仓库cd fit5047-26s2/05-scaffold git init git add . git commit -m feat: add minimal Python course API scaffold git branch -M main这里值得说明的是提交信息规范。课程作业不需要复杂的规范但尽量让 commit message 表达“做了什么”。建议使用简单格式feat:表示新增功能fix:表示修复问题docs:表示更新文档test:表示补充测试。例如fix: return 404 for unknown path比update file有价值得多。5.2 创建远程仓库并推送在 GitHub、GitLab 或学校提供的 Git 服务器上创建空仓库后添加远程地址并推送git remote add origin your-repository-url git push -u origin main这里有一个安全提醒如果你的仓库设置为 public就绝不能把学校内部资料、他人代码提交进去。作业代码是否允许公开以课程规定为准。最稳妥的做法是把课程相关仓库设为 private只对团队成员或助教可见。5.3 分队协作的标准流程小组项目里不要所有人都直接往main分支提交。更推荐下面的轻量协作方式。每完成一个任务前从最新main切出新分支在新分支上提交若干次推送到远程后创建 Pull Request/Merge Request至少一位队友 review 后合并所有成员本地执行git pull获取最新代码。创建功能分支的命令git checkout -b feature/course-list git add server.py git commit -m feat: add course list endpoint git push -u origin feature/course-list这种流程能避免两个人同时改同一段代码而互相覆盖。哪怕只有两个人合作也建议从第一周就按分支协作习惯来做。5.4 补上 .gitignore仓库里不要让虚拟环境和临时文件进入版本控制因此.gitignore文件极其重要# 文件路径fit5047-26s2/.gitignore __pycache__/ *.pyc .venv/ venv/ .DS_Store *.log .env.env文件通常存放数据库密码、API Key 等敏感信息绝对不能进入 Git。如果你发现不小心提交了.env应该立即从历史和远端移除并更换相关密钥。6. 使用 CI 把测试自动化如果你的小组想在演示时留下一份工程化成果可以给仓库配置一个简单的 CI 流程。下面的配置适用于 GitHub Actions实现的效果是每次推送代码后服务器自动运行测试。# 文件路径.github/workflows/python-ci.yml name: Python CI on: push: pull_request: jobs: test: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkoutv4 - name: Set up Python uses: actions/setup-pythonv5 with: python-version: 3.11 - name: Run unit tests run: | cd 05-scaffold python -m unittest discover -s . -p test_*.py配置成功后每次推送到远程仓库GitHub 会自动跑一遍测试。如果测试失败页面会显示红色错误状态提醒小组成员及时修复。CI 不是大学课程作业的硬性要求但它能显著降低小组合作中的“隐性返工”。当队友改动某段代码导致 API 测试失败时CI 会在第一时间报警而不是在演示前才发现问题。7. 常见问题与排查思路下面这张表汇总了 Monash IT 课程中最常见的开发环境问题。如果遇到相同现象建议按表中顺序排查。问题现象常见原因解决思路python3提示无法找到命令Windows 上 Python 未加入 PATH使用py --version验证并修改系统 PATH运行测试时找不到server模块当前工作目录错误先cd到05-scaffold再运行命令Docker 端口冲突提示 address already in use8000 端口被占用先docker ps -a查看容器停止后再运行git push被拒绝远程环境有本地没有的提交先git pull --rebase解决冲突后重新 push依赖包安装报 externally managed environmentPython 直接 pip 安装被系统拒绝创建并激活venv后安装中文输出乱码控制台或文件编码不是 UTF-8在代码里显式encodingutf-8终端切 UTF-8作业文件提交后打不开文件损坏或路径含特殊字符保留 Git 历史提交前先本地解压验证以 Docker 端口冲突为例检查顺序是# 查看正在运行的容器 docker ps -a # 找到占用 8000 端口的容器 docker ps -a | grep 8000 # 停止并删除不再使用的容器 docker stop container_id docker rm container_id在 Windows 上也可以使用netstat -ano | findstr :8000来查看端口占用再在任务管理器中结束对应进程。但要注意只结束自己启动的开发进程不要随意结束系统进程。8. 工程与学习最佳实践8.1 从提交日志倒推学习节奏很多同学在期末复盘时发现自己想不起第 6 周做了什么原因是当时没有记录。如果你每周都保留一份学习笔记并每天给代码仓库做一次 commit期末复习会轻松很多。具体做法是不要把整个学期的笔记塞进一个文件夹而是按周拆分。每周的01-lecture-notes/week06.md里记录本周核心概念、没听懂的问题、代码示例的地址、下周计划。这里的核心不是做漂亮的笔记而是建立一个“可回看”的路径。8.2 学术诚信和版权边界要明确Monash 对学术诚信的检查非常严格。作业代码、报告都可能经过查重系统比对。因此可以阅读网上其他开源项目但要理解后自己重写合作完成的作业队友名单要以学校系统允许的范围为准不要把自己没完成的作业公开到 public 仓库不要把题库、评分标准、内部课件上传到网盘或其他公开平台。遵守这些规则既是保护自己也是尊重他人的学术成果。8.3 给代码最小化和可复现的改造如果课程项目提交时需要让助教一键运行至少要做三件事在README.md中写清运行方式例如启动服务器、运行测试、构建 Docker 镜像的命令使用requirements.txt或 Maven 的pom.xml锁定依赖提供一个环境变量模板.env.example避免别人不知道需要配置哪些变量。Python 项目生成依赖清单的命令pip freeze requirements.txt不过这个命令会把虚拟环境中的所有包都写入有时会包含大量无关依赖。更准确的做法是只写在代码里 import 到的第三方库。对上面的脚手架来说由于只用了标准库甚至不需要requirements.txt这也是最小脚手架的优势之一。8.4 把时间留给真正难理解的部分最后一条建议和学习工具关系不大却最影响结果每周 lecture 结束后当天抽取 30 分钟把本周的阅读材料和示例代码过一遍。即便没有作业也不要等到截止前才集中处理。FIT5047 这类研究生课程的内容密度通常不小平时的“小步跟进”比期末的“熬夜突击”有效得多。9. 总结与下一步回到 FIT5047 这门课。无论你从
返回列表