我在学校学生组织里分管技术部,技术部每年的工作不多,主要是做一些 web 网页,来辅助学工处一些工作能更好地进行。最重要的任务应该是做一个 web 打分系统,评委扫码进入,打出的分数可保存可提交,且能够实时显示打分进度。目前主要用到的技术栈很简单,就是基本的 Linux 运维、JavaScript 前端和 PHP 后端。当然,如果采用其他技术来重构的话那这些东西还会有变动。

今年竞选部长的有三个同学,分别来自数学学院、信息学院和物理学院。

下午面试,我在上午的时候提前联系了一下他们,给三个人的问题都是一样的,「同学,你以前做过的一些计算机技术项目,有 GitHub 或者博客文章之类的吗?」三个人给了不同的回答,到下午面试的时候对于我提出的问题,三个人的表现也不一样。

第一个数学学院的同学,在我问题之后回答说搭过一个 hexo 博客,也有几篇文章,我说那你把你觉得能体现你计算机水平的内容截图发我一下,他就发我几张图,主要内容是修改 Nginx 的某个配置文件来对其进行配置。

第二个信息学院的同学,回答我说没有 GitHub 和文章,但是有个课程设计,还有个对着 Python 课本写的小游戏,我说那你简单介绍一下你的课设吧,他就把他《程序设计基础》课上 C++ 写的一个信息管理系统发给我了。我看了看,中规中矩,就是简单地用一些语法知识实现的,也没涉及到具体的数据结构或者算法层面的内容。

第三个物理学院的同学,沟通记录有点长,内容也比较丰富,我抄录如下:

问: 同学,你以前做过的一些计算机技术项目,有 GitHub 或者博客文章之类的吗?
答: 有吧好像但是现在找不到了

问: 那你简单介绍一下你的项目吧
答: 我也忘了好像就随便写了写博客

问: 实现了什么功能?采用了什么技术栈?实现思路是怎样的?
答: 没做过项目

问: 那你有哪些与计算机技术相关的经历?没事,这些沟通不影响面试,只是了解一下你的情况
答: 没吧也就接触过编程,还有技术部教的一些东西也不是很熟练

问: 接触过哪些编程技术?接触到什么程度?
答: 接触过 c 语言,MATLAB 学得很浅,还备考过计算机三级,拉得很

问: 技术部教的哪些东西?掌握到什么程度?能否独立完成(允许 web 搜索)能运行的 demo?C 语言掌握到什么程度?如果是课程的话那课设之类的程序做得怎么样?计算机三级备考的是哪个方向?相关知识是怎么进行了解的?看培训班的课?还是自己在 web 上搜索相应信息?
答: 不好意思学长我先吃饭去了一会一一答复给你
答: 技术部让学习的 HTML,可以独立制作简单的网页,服务器装宝塔还有 WordPress,学得很表面甚至不熟练。c 语言只存在于课程学习,课设之类的程序大部分可以独立完成。备考的是网络技术,相关知识在培训课上学习过,学习过程中也在 web 上搜索过,不过学习的过于应试,片面化

可以看出,数院的同学是有一定的基础,同时也有能够说明自己水平的代表作(至少对应付部门工作来说会 CLI 配 Nginx 是足够了,其余的前后端技术栈简单了解一下就能很快上手),所以我面试时就先问了他一些基础的关于 Nginx 服务的问题,比如 Nginx 的反向代理,看他回答得怎么样,也侧面确定一下他对他作品的熟悉程度,之后再问一些组织性的问题判断一下适不适合在学生组织工作就结束了。

信院的这位同学则属于那种没有代表作但是课内知识看起来掌握得还可以的类型。面试他的时候我首先是问他对于前后端技术栈有没有了解,有没有自己的域名和服务器,回答的都不怎么理想,我就又问他一些关于他课设和 Python 游戏程序的问题,问他这些的实现思路怎么样,他回答得很不错,从代码实现的角度讲得很清晰。最后我问他,你对 Linux 有什么了解,他说他在程序设计课上听老师说 Linux 写代码很好,就自己看着教程装了个双系统 Ubuntu,然后又配了个 VSCode。我问他你是在双系统的 Ubuntu 里纯用 GUI 操作还是说也用 Shell 做过一些操作,答曰用的很少,就是配了个 VSCode 以后就很少用了,改了改 VSCode 里的 C 语言编译环境。说到这里,我想起一个现象:C 语言能考 90+,但是问用的什么编译器,相当多人会说 Dev C++。在这里我也问了这个同学这个问题,他说没有编译器,就只改了配置文件,VSCode 只是个编辑器。我最后告诉他,你应该是用的 Ubuntu 默认安装的 GCC,所谓的改配置文件只是告诉把 VSCode 和 GCC 的安装路径绑定起来而已。从问答上也能看出来,这位同学属于那种比较直来直去的,很诚实,品质上应该没什么问题。

最后一位物院的同学,因为他本身没有向我提供什么材料,所以我首先问他,C 语言是不是你们专业课,回答说是,我就问了他一个关于 C 语言的一个小问题:

C 程序如下:

int x;
printf("% s", x);

为什么此处将一个 int 型的变量 x 作为字符格式化输出可以成功输出字符?

其实这个问题本身是不太对的,如果他能意识到 % s 是字符串占位符而非字符占位符(需要改成 % c)的话,那 C 语言语法层面上应该就比较熟悉了。当然这只是个小坑,他看不出来这个地方而能回答出正式的问题那也不要紧,因为能回答出正式问题的话那就代表说有一定的计算机编程思想在了,对内存数据分类型解析有一定理解。结果这个同学在我抛出问题后一言不发,我赶忙说没事没事,这只是问一下,不会有太大影响,不用紧张。后面我又问了一些其他的关于组织性的问题,但他看起来是可能被吓坏了,后面问题也回答的逻辑不怎么清晰。

最后我还是把他们三个都留下了,因为一个部门是一个团队,大家分工有人做组织类工作有人做技术类工作。前两个同学我安排他们去看 web 相关的一些内容,Vue 和 PHP 之类的,最后这个同学我和他说你就多辛苦做一些组织类的工作。

我想起了我大一的时候经历的那几个月的导师制,当时导师要求每周写周报,要求有干货,不能搪塞假大空。我一开始,写的也是十分笼统,「本周学习了一些机器学习知识,增强了编程能力」等这种句子比比皆是,受到了导师和助教学姐的严厉批评,后来,逐渐就明白,搞科研也好,还是说怎么着也罢,说一件事情最终还是要落到实处,不能简单的罗列。比如,「学习了一些机器学习知识」,哪些知识?简要写出来。又有没有做一些笔记或者写一些自己对这些知识的理解?有的话把关键部分摘录进去。「增强了编程能力」,有没有写程序?有的话直接放源码,没有的话就说清楚做了什么事情能够得出「增强了编程能力」这个结论的。