[经验] #WWDC20专访# IT之家对话“Linux 训练场” 开发者:我写了个交互式学习?

文章正文
2020-06-29 04:55

#专访# 标签为IT之家在IT圈所设的采访栏目,旨在邀请创作者参与分享他们的经验与见解,并提供一个交流的窗口。

本期的专题为“WWDC20 学生开发者奖学金”,学生开发者奖学金是每年 WWDC 的重头戏之一,目的是奖励有才华的学生,同时鼓励更多学生加入编程开发。

以下为本人受IT之家邀请所撰写的内容。


一、关于我自己

我是一名计算机科学专业大三在校生,今年22岁,现就读于加州大学洛杉矶分校(UCLA)。平时就很喜欢想方设法利用编程来“偷懒”,能写代码解决的重复性的工作绝不手动做。

第一次接触苹果产品的时候是 2008 年发布的 iPhone 3G,从此被苹果家的产品深深吸引。不论是 iPhone,还是 Mac,我认为能牢牢抓住客户的并不是他们的硬件有多强,而是软件上的无缝适配让人无法离开苹果生态圈。

UCLA Royce Hall

受到 iOS 系统的细腻流畅的动画与程序设计细节的激励,我在大学期间也开始自学 Swift语言和 iOS 开发,但一直没有什么好的 App 创意,学习开发之路难之又难。去年夏天,我了解到每次苹果开发者大会前会有学生挑战赛,于是下定决心,趁毕业前一定要赶上最后两场比赛。

疫情原因,今年开发者大会的形式飘忽不定,往年学生挑战获胜者会被邀请到现场参加,但是因为今年改成在线直播的方式,所以我一直很担心学生挑战也会因此取消。好在五月中旬,WWDC 学生挑战赛如期而至。比赛期间刚好赶上三门课的期中考试,所以时间还是相当紧迫。得知消息当天完成了构思,然后在未来的一周不到的时间内,完成了程序和界面设计,精心打磨,并且找了朋友做测试,在截至日前提交了作品。万万没想到,第一次参赛就成为了全球学生开发者中幸运的 350 人之一。

Powell Library - 玩GTAV的朋友们有没有觉得眼熟呢?

二、关于我的作品-“Linux 训练场

受到苹果“编程从娃娃抓起”的理念的影响,以及 Swift Playground 这种交互式学习编程语言的软件的启发,我这次的作品是“Linux Playground” -- 顾名思义,这是提供给 Linux 初学者的一个学习终端命令的训练场,我希望能提供给 Linux 初学者一个带有引领的自由练习环境。

只用了大概一千多行代码,我模拟了一个迷你Linux终端环境,用 N 叉树的数据结构模拟 Linux 的文件系统,支持多达14 种 Linux 基础命令,包括了更换路径,查看当前路径下内容,文件/文件夹的创建与删除,文件模式(权限)修改,echo,输出重定向,等各种不得不会的基础命令。如果就是这样一个沙盘,那和真实残酷的 Linux 毫无区别,所以我这里添加了 6 道关卡,提升趣味性的同时,让 Linux 的学习能够循序渐进。每一道关卡会使用 2 到 3 种不同的命令,关卡开始前会有对所需要使用的命令详细的解释和使用实例,相比 GNU 枯燥的文档更容易理解,随后的关卡任务会应用新学习的命令,要求用户实现一些基本操作,一旦完成,便会自动进入下一关。随着关卡深入,用户会学到更多的基础命令,以及对 Unix 的文件系统有更深的理解。开发过程中的设计难点还是有不少的,比如文件系统的模拟中如何处理软链接"./"和"../"的问题,再比如带有重定向这类复杂用户指令的解析与查错 (例如:`echo "Hello world" > a.txt`)。

所有支持的命令 - Help 菜单

这其实是我第一个正八经用 Swift 开发的项目,但像我经常和其他同专业同学说的,我们学计算机学的是设计思路,语言什么的,上网查查文档就会了。虽然这么说,但是真正到了需要用官方开发工具的时候却显得束手无策。由于我对苹果软件开发的各种 API 还并不是很熟悉,这个作品里只用了最基础的 SwiftUI 来实现交互界面,有些关于界面的问题仍然还没有找到解决方案,比如输入框无法自动聚焦的问题。不过既然创意已经被苹果接受了,我也就更加有动力去学习更多的 Apple API,学会使用工具,才能做出更好的作品。

三、一点小想法

如前文所说,这是我第一次使用Swift完成一个苹果的开发项目,虽然Swift并不会被很多公司重视,甚至经常被嘲讽是学了就失业的语言,但我还是认为语言仅仅是表达开发者想法的一种工具。会什么语言都无所谓,一个很简单但又有创意的想法对于开发者来说才是最宝贵的,这往往也是最艰难的。平时在学校我都是写写 C/C++,或者自己搞一搞 Python 脚本玩,但开发出来的东西都不是面向大众用户的,带有图形界面的App才是。我会写程序,但从没接触过App开发,SwiftPlayground 刚好就为我搭了座桥,为我提供了一个“实验场”,来学习苹果的开发语言,学习苹果的各种API。不需要复杂繁琐的 Xcode,不需要配置环境,就像 iMovie 与 Final Cut Pro X 的关系一样,SwiftPlayground 几乎可以运行一切真正使用Xcode进行iOS或者macOS App的开发时会用到的代码,但是又如此简单,把一切复杂的设置藏在背后。

不像从书本中学习理论那样,一个完整项目带给我的经验是完全不同的。虽然过程很短,但构思,开发,发现路不太同再重新修改思路,开发,debug,简化代码,debug,测试,等等环节一步都少不了。实践,可以应用到书本学习到的理论加以巩固,比如把大问题拆解成小问题,写完逐个测试,再整合成完整功能,什么才是Divide and Conquer啊(战术后仰)。

四、你也希望免费参观 Apple Park 吗?

如果大家像我一样,想参加 WWDC 挑战赛,但并不会 CoreML,ARKit 这类高端大气的 API,也不会很漂亮的 UI 设计,不要怂,尽管报名参与。有创意的想法,能通过简单的代码得以实现,让苹果工程师眼前一亮,才是能够入选的关键因素。希望未来的一年能把这个参赛作品再精心打磨,让它成为一个完整的 App,申请上架,争取能造福即将学习 Linux 的同学们。

UCLA Powell 图书馆内部

对了,本作品已开源,欢迎大家下载参观,请大神多多指教!

Linux Playground 的 Github (求 Follow,Star,Fork 三连,也请顺便看看其他 projects /手动滑稽)

欢迎大家留言讨论,谢谢!

文章评论