`加flex,半小时后他跑来跟我说:“老师,原来代码可以这么轻。”——这就是现代Web的核心理念:结构与表现分离。你不亲手踩一次表格布局的坑,就体会不到语义化标签的甜。
CSS那部分最考验耐心。`position: absolute`和`relative`的区别,讲十遍不如让学生做一次弹窗。有个女生做导航栏下拉菜单,死活定位不准,最后发现是父元素忘了加`relative`。她气笑了:“这破玩意儿比微积分还玄学。”但过两周她开始用CSS Grid做响应式布局,笔记本上画满了网格线。技术这东西,上手时的笨拙感是必经之路,跨过去就是肌肉记忆。
JavaScript则是另一头野兽。这里不需要背诵语法,需要的是逻辑直觉。我常让学生写一个待办事项列表,功能就三个:添加、删除、标记完成。有人用`alert`弹窗应付,有人硬写出两百行代码。但有个男生只用了15行,用事件委托监听整个`
`。我问他怎么想到的,他说:“每个按钮都绑监听太蠢了,我点的是`li`,但我知道是谁点的。”——这就是从“写代码”到“想代码”的转变。Web编程的魅力不在于API多熟,在于你开始理解浏览器怎么思考。 课程后半段会涉及HTTP协议和服务器端。学生第一次用Node.js写个接口,返回一段JSON,然后自己用fetch去请求,那种“前后端联通”的瞬间,教室里会响起小范围的欢呼。有个学生把宿舍查电费的系统爬下来,做了个微信推送,虽然违规,但我私下觉得这比期末作业精彩十倍。Web编程的边界本来就不该被课本框死,它更像是搭积木——积木的说明书只有一页,但你能搭出塔,也能搭出桥。
期末作业我从不限定主题。有人做了个人摄影作品集,有人做班级抽签器,还有人做了个养电子宠物的页面,宠物会因为你连续七天不访问而“饿死”。这些作品在代码上未必精巧,但都有真实的用户意识——他们开始考虑别人怎么用,而不是自己怎么编。这就是课程结束时我最想看到的:不是谁写出了最炫的动画,而是谁开始用Web思维解决具体问题。
Web程序设计说到底,不是教你一门语言,是教你一种建造方式。它允许你犯错、刷新、推翻重来,而且永远有下一个版本。就像那个`