zoukankan      html  css  js  c++  java
  • 课程助教实战

    原谅我的标题党啦 LOL,借用 《xx 实战》(xx in practice)这个经典的标题,只为了记录自己第一次助教的体会。

    如果把第一次助教的经历看做是一个项目,那这个项目也是在我不断的调优中走上正轨的。

    需求

    导师人很好,给我留的活儿不多,但实践起来还是比预想要复杂一些。助教期间,我主要负责的任务有:

    • 平时作业的批改和成绩录入

      每周老师会将所有学生(大约 80 人)的作业本交给我,由我评分、录入成绩后返回给老师。

    • 课程实验和大程的指导、评分和成绩录入

      一共有五个课堂实验,要求每周完成一个,以实验报告的形式提交;期末要求完成一个大程序,评分有现场验收和大程报告两部分。

    • 协助老师批改期末试卷和成绩录入

    最后的批改试卷是在老师们的指导下完成,有良好的规范和流程。而前面两步中关于作业评分、登分的部分则有较大的自由实现空间。下面介绍的就是个人对这部分内容经验总结。

    初步实现策略

    最朴素的实现方法,会耗费很多的时间,但至少能完成任务:

    • 平时作业的批改和成绩录入
    1
    2
    3
    4
    5
    6
    7
    8
    
    //拿到所有作业本后,每周我都需要完成如下过程:
    loop in 80+个作业本
      拿起笔,翻开每本作业本;
      在作业本上标记成绩;
      放下笔,关上作业本;
      在成绩记录表格上上 CTRL+F 查找到对应的学生;
      输入成绩;
    end loop
    • 课程实验和大程的指导、评分和成绩录入
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    
      //邮件查收实验报告
      loop in 80+个学生的实验报告邮件;
          保存附件;
          回复已经收到;
      end loop
      
      //收集齐所有报告后,开始批改报告
      loop in 80+个学生的实验报告
          双击打开报告;
          浏览评分;
          在成绩记录表格上 CTRL+F 查找到对应的学生;
          输入成绩;
          关闭报告;
      end loop
    

    性能调优

    最朴素的方法在使用中带来了巨大的性能瓶颈。

    • 平时作业的批改和成绩录入

    实践发现,批改平时作业和登分的过程中,会花掉非常多的实践在拿起笔、放下笔上,就像程序的上下文切换,比较耗时。将批改作业和录入成绩分解成两个集中循环过程,就可以避免这一切换的开销。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    
      //改作业
      拿起笔
      loop in 80+个作业本
          翻开作业本;
          在作业本上标记成绩;
          关闭作业本;
      end loop
      放下笔
      
      //录入成绩
      loop in 80+个作业本
          翻开作业本,查看成绩
          在成绩记录表格上上 CTRL+F 查找到对应的学生;
          输入成绩;
          关闭作业本;
      end loop
    

    以上的实现中,作业登分时还是会有大量的翻开、关闭作业本的操作。实际上,批改作业的等级是非常有限的,一般集中在 A+、A、A- 这几个分数上,其他分数如 B+、B、B-只是极少数。很容易想到桶排序的方式:批改作业时,将不同评分的作业放在专属的作业堆中,录入成绩时,只需要按照不同的作业堆录入,而不用翻开作业本。另外,由于书桌空间有限无法设定较多的作业堆,可以将出现较少的 B+、B、B-等分入到 Else 作业堆,批改时再特殊处理。

    在给同学登分时,每次都需要根据学号或者姓名 CTRL+F 查找,比较繁琐。优化的方法是建索引。在成绩录入表中给所有同学设定一个简单的编号,然后在同学的作业本的封皮上标记出来,以后每次登分,直接根据 [1, n]的索引就可以快速检索到了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    
      //预处理
      给作业本建索引
    
      //改作业
      拿起笔
      loop in 80+个作业本
          翻开作业本;
          在作业本上标记成绩;
          关闭作业本;
          将作业按照评分放入 A+、A、A-和 Else 这四个堆中
      end loop
      放下笔
      
      //录入成绩
      loop in A+、 A、 A-、 Else 这四个作业堆
          loop in 作业堆
              if 作业堆 == Else 
                  翻开作业本;
                  查看成绩;
                  关上作业本;
              end if
              根据索引查找到学生;
              输入成绩;
          end loop
      end loop
    
    • 课程实验和大程的指导、评分和成绩录入

    在收集实验报告的时候,每次回复邮件也是很头痛的一件事情,容易漏掉回复或者漏掉保存附件。而给报告评分时,也得不断的点开某个文档,然后录入成绩,再关闭这个文档,容易漏评。虽然以在给所有同学评分完毕后再依次清查漏掉的情况,但这个方法确实不够优美。

    改进方法是:放弃使用邮件提交报告的方法,搭建 FTP;使用工具(比如 Acrobat)将所有报告连接成单个 pdf 文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    
    //预处理
    FTP 收集报告
    使用 Acrobat 将所有 pdf 报告连接成一个汇总报告
    
    //批改报告和录入成绩
    双击打开汇总报告;
    loop in 80+个学生的实验报告
      浏览评分;
      在成绩记录表格上 CTRL+F 查找到对应的学生;
      输入成绩;
    end loop
    关闭汇总报告;
    

    总结

    以上记录的是可以用工程的优化方法解决的小问题。实际助教的过程中,还有不少是沟通的问题。比如即使告诉过学生们一定使用 pdf 和姓名加学号的命名提交作业,也一定会有学生会使用 doc 格式……还有一些策略权衡的问题,面对几十个学生不比一对一的交流,合适的方法会双方更高效。

    做助教容易,做好不易,且行且珍惜。

  • 相关阅读:
    The user specified as a definer ('root'@'%') does not exist
    Linux安装卸载查看vsftpd
    【数据分析】算法+Echarts小练
    【leecode】小练习(简单8题)
    路飞学城Python-Day171
    【路飞学城Day170】算法小结
    【路飞学城第七模块考核】
    【leecode】独特的电子邮件地址
    【leecode】宝石与石头
    路飞学城Python-Day153
  • 原文地址:https://www.cnblogs.com/biaobiaoqi/p/3753757.html
Copyright © 2011-2022 走看看