1. 第一次作业:新手程序员的成长起点
第一次打开代码编辑器时,我的手在键盘上方悬停了整整三分钟。屏幕上的空白文件像是一道未解的数学题,既令人兴奋又充满未知。作为计算机专业的学生,我的第一次编程作业是编写一个简单的计算器程序——这个看似基础的任务,却让我对软件开发有了全新的认识。
2. 环境准备与工具选择
2.1 开发环境搭建
对于初学者来说,Python是最友好的入门语言之一。我选择了Python 3.8和VS Code编辑器的组合,这个搭配在2023年仍然是大多数教育机构推荐的标准配置。安装过程比想象中简单:
- 从Python官网下载安装包时,务必勾选"Add Python to PATH"选项
- VS Code安装后需要添加Python扩展插件
- 创建专门的项目文件夹,避免文件散落在各处
新手常犯的错误是直接使用系统自带的Python 2.7版本,这会导致语法兼容问题。建议使用pyenv或conda等工具管理多版本Python环境。
2.2 第一个.py文件
在VS Code中创建calculator.py文件时,我遇到了第一个挑战:如何正确设置文件编码。通过在文件开头添加# -*- coding: utf-8 -*-声明,解决了中文注释可能导致的编码错误。这个细节在大多数教程中很少提及,却是实际开发中必须注意的基础规范。
3. 基础功能实现过程
3.1 四则运算的核心逻辑
计算器的核心是处理用户输入并执行数学运算。我最初尝试用最直观的方式实现:
def add(a, b): return a + b def subtract(a, b): return a - b但很快发现这种写法会导致代码重复。通过引入运算符字典映射,代码变得更加简洁:
operations = { '+': lambda x, y: x + y, '-': lambda x, y: x - y, '*': lambda x, y: x * y, '/': lambda x, y: x / y }3.2 输入验证与异常处理
当用户输入非数字内容时,程序会崩溃。通过添加try-except块,实现了基本的错误处理:
try: num1 = float(input("输入第一个数字: ")) operator = input("输入运算符(+-*/): ") num2 = float(input("输入第二个数字: ")) print(f"结果: {operations[operator](num1, num2)}") except ValueError: print("错误: 请输入有效数字") except KeyError: print("错误: 不支持的运算符") except ZeroDivisionError: print("错误: 不能除以零")这个简单的错误处理机制让程序健壮性大幅提升,也是我从理论到实践的重要跨越。
4. 代码优化与重构
4.1 函数封装与模块化
最初的代码全部写在全局作用域中,随着功能增加变得难以维护。通过将核心逻辑封装到calculate函数中,并分离用户交互部分,代码结构变得清晰:
def calculate(num1, operator, num2): """执行计算并返回结果或错误信息""" try: return operations[operator](num1, num2) except KeyError: return "不支持的运算符" except ZeroDivisionError: return "不能除以零" def main(): """处理用户输入输出""" num1 = float(input("输入第一个数字: ")) operator = input("输入运算符(+-*/): ") num2 = float(input("输入第二个数字: ")) result = calculate(num1, operator, num2) print(f"结果: {result}")4.2 添加测试用例
为了验证各种边界条件,我编写了简单的测试函数:
def test_calculator(): assert calculate(2, '+', 2) == 4 assert calculate(5, '-', 3) == 2 assert calculate(3, '*', 0.5) == 1.5 assert calculate(10, '/', 2) == 5 assert calculate(1, '/', 0) == "不能除以零" print("所有测试通过!")这个习惯在后来的项目中证明极其宝贵,早期建立测试意识能显著提升代码质量。
5. 版本控制入门
5.1 Git基础操作
教授要求我们使用Git管理代码版本,这对新手来说是个挑战。我学会了以下基本命令:
git init git add . git commit -m "初始版本" git branch -M main在多次尝试后,我理解了暂存区和工作区的区别,以及为什么需要先add再commit。一个常见的错误是直接运行git commit而忘记add,导致更改没有被纳入版本。
5.2 .gitignore的重要性
最初几次提交后,发现仓库里混入了__pycache__等不必要的文件。通过创建.gitignore文件并添加以下规则解决了这个问题:
__pycache__/ *.py[cod] *$py.class这个经验让我认识到版本控制不仅是提交代码,更需要有选择地管理哪些文件应该被跟踪。
6. 作业提交与反馈
6.1 文档撰写要点
除了代码本身,作业还要求提交README文档。我学到了技术文档的基本结构:
- 项目简介和功能说明
- 环境要求和安装步骤
- 使用示例
- 已知限制和未来改进方向
教授特别强调要避免"用户友好"这类空洞的描述,而应该具体说明如何操作,比如"运行python calculator.py后按照提示输入数字和运算符"。
6.2 代码审查收获
作业返回时,助教的批注让我受益匪浅:
- 变量命名应该更有描述性(如用first_number代替num1)
- 除法运算应该处理浮点数精度问题
- 可以添加更多运算符如指数运算
- 考虑添加历史记录功能
这些建议不仅改善了当前项目,更塑造了我对代码质量的认知标准。
7. 从作业到工程的思维转变
完成第一个编程作业后,我意识到学校作业与实际工程项目的关键区别:
- 作业注重功能实现,工程更强调可维护性
- 作业通常有明确需求,工程需要自己发现和定义问题
- 作业的测试用例有限,工程需要全面的测试覆盖
- 作业代码可能只用一次,工程代码需要长期演进
这个认知转变促使我开始在GitHub上参与开源项目,将作业级别的代码提升到生产级别。
8. 持续学习路径建议
基于第一次作业的经验,我为后续学习制定了计划:
- 每天解决一个Codewars上的算法题
- 每周阅读一个知名开源项目的源码
- 每月完成一个稍高于当前能力的小项目
- 参与Hackathon积累实战经验
- 建立技术博客记录学习历程
第一次作业的价值不仅在于学会了if-else和函数定义,更在于建立了正确的开发习惯和思维方式。回头看那些最初的代码可能显得稚嫩,但正是这些基础构建了后续所有复杂系统的理解框架。