我的第一个小程序

我的第一个小程序 今天我终于把“家长强管理听写小程序”提交了微信审核。作为一个30天前连“API”是什么都不知道的纯小白此刻的心情像坐完一趟过山车——惊魂未定但又忍不住回头看。这一路我经历了膨胀、崩溃、回归最终活了下来。第1-3天一个番茄钟的“天真”7月20日孩子暑假过半。看着他写作业总是走神我突然冒出一个念头做个番茄钟小程序吧培养专注力。多简单啊——一个圆形的倒计时一个开始按钮时间到了就响铃。我觉得自己两天就能搞定。第一天下载微信开发者工具新建项目。打开后我懵了——pages文件夹、utils文件夹、app.json、project.config.json……这都啥跟啥我在B站现搜“小程序目录结构”照着视频一点一点比着建文件。第二天开始写番茄钟界面。wxml里放个view当计时器数字wxss里写样式结果数字永远对不齐。我对着三个Agent的代码来回试最后发现是flex布局的justify-content没设center。就这一行css我折腾了俩小时。第三天计时器逻辑。setInterval这个函数差点把我逼疯——为什么我点开始会出现两个计时器同时跑后来才明白每次点击都新建一个定时器旧的没清掉。Agent告诉我先在data里存timer变量每次开始前clearInterval。修复的那一瞬间数字终于一秒一秒正常跳动了我激动得差点拍桌子。三天番茄钟跑起来了。能开始、能暂停、能重置响铃虽然只能用wx.showModal弹个框但它是活的我膨胀了。第4-9天膨胀——从番茄钟到“儿童成长帝国”既然番茄钟能做出来那再加点功能也不难吧我开始疯狂“画大饼”· 实验室模块让孩子记录小实验拍照、写步骤。我觉得就是个图片上传加表单简单。· 理财培养记账本记录收入支出每周统计图表。不就是加减乘除嘛没问题。· 益智小游戏比如记忆翻牌、算术小挑战。做游戏听起来很酷。我给每个模块都建了文件夹pages/lab、pages/money、pages/game。代码量从200行飙升到2000行。当时我用三个不同的AgentClaude帮我写前端样式GPT-4o给我出后端逻辑方案还有个国内大模型专门调试bug。三个Agent都很热情但它们的建议开始打架——· 做理财模块时Agent A说要先把数据存到云数据库Agent B说本地缓存就够了Agent C说要做个云函数中转。我哪个都试了每个都跑不通。· 做游戏模块时Agent A给的记忆翻牌用了flex网格布局Agent B说用grid更简单结果我两边代码一混合卡片排列变成了四不像。我开始“功能蔓延”今天觉得实验室挺有意思加一半明天觉得理财更能解决痛点又去写理财。结果每个模块都只写了30%没有一个能跑通。第10-14天崩溃——Bug大爆发家庭“危机”第10天是噩梦的开始。我试图让番茄钟和理财模块共享用户数据——孩子在番茄钟里专注了25分钟就自动增加理财模块里的“专注币”。这个看似简单的联动让整个程序彻底崩溃。原因很白痴两个模块分别定义了各自的数据监听器互相覆盖。我花了整整一天排查才发现是app.js里的globalData被两个页面同时写入导致冲突。更崩溃的是加了游戏模块后番茄钟的倒计时不准了。明明设了25分钟走到第7分钟突然跳到0。群里的大佬说这是setInterval被页面切换时挂起导致的得用wx.getBackgroundAudioManager保活。我照着手册改了四遍还是没用。那几天三个Agent同时在对话框里给我回复。Agent A说“你用云函数吧”Agent B说“不你用worker线程”Agent C说“你们都不对应该用websocket”……我一个人面对三个“老师”每个都言之凿凿我却不知道该听谁的。凌晨两点我盯着满屏的红色报错信息第一次体会到什么叫“信息过载到窒息”。文件结构已经乱得像被人打乱的拼图——pages目录下23个文件其中有9个是各种失败的备份backup1、backup2、final、final_real……。【更糟心的是我的作息彻底乱了。那一周多每天晚上孩子和媳妇都睡了我悄悄爬起来打开电脑一坐就到凌晨两三点。屏幕上冰冷的报错红字和我通红的眼睛互相瞪着就是找不到答案。媳妇早上起来发现枕头边没人走到书房看我还在调代码气不打一处来“你还过不过日子了孩子也不管觉也不睡你着了什么魔”我嘴上说着“快了快了马上就好”结果第二天晚上又坐到三点。说实话连我自己都觉得我像着了魔——明明已经崩溃到想放弃但就是放不下好像那个跑不通的程序在半夜喊我名字。这种状态大概只有同样痴迷过某件事的人才能懂。】我甚至开始失眠。躺在床上满脑子都是wx.setStorageSync和wx.getStorage的异步同步问题。有一天半夜三点爬起来试代码结果把整个项目的app.json写崩了项目直接打不开。第二天早上我对家人说“要不算了吧。”第15-18天悬崖勒马——删掉90%第15天我做了个狠心的决定全部删掉重新来。我新建了一个空白项目只保留最核心的需求——一个能让家长强管理、孩子听写的工具。为什么是听写因为之前给孩子报听写时我总得自己念、自己批改太麻烦了。如果能有个小程序家长录入词库孩子自己听写自动批改、记录错词这才是我真正需要的。我把所有扩展功能砍掉· 实验室模块 → 删· 理财培养 → 删· 益智小游戏 → 删· 番茄钟暂时 → 搁置只留三个页面1. 家长端词库管理、听写设置2. 孩子端按设定听写、提交3. 错词本自动收录错词、复习代码结构一下子清爽了。5个页面文件3个组件1个云函数。我甚至能在一分钟内说清楚每个文件的作用——这在之前是绝对不可能的。【那天晚上我破天荒地十一点就上床了。媳妇看了我一眼说“终于不疯了”我笑了笑没说话。但我知道这次是真的找对路了。】第19-25天脚踏实地——一个个功能磨出来清理干净后我开始按顺序实现每个功能。这一次我不再同时开三个Agent而是专注用一个把问题拆到最小单元。词库录入家长可以添加词语支持手动输入和批量导入。批量导入用了textarea让家长一次性粘贴多个词用换行分隔。这个功能看着简单但处理换行符\n和\r\n的兼容性就调了两个小时。听写设置家长选择词库、设置间隔秒数、是否乱序播放。乱序的实现用了Math.random但直接随机会导致同一个词重复出现。Agent教我用Fisher-Yates洗牌算法先把数组打乱再依次取用。改完后测试了10遍没重复舒服了。语音播报这是最头疼的部分。小程序里没有原生TTS得用插件。我试了三个不同的语音插件要么音色太机械要么有延迟。最后选了微信同声传译插件虽然每个词中间有半秒停顿但至少能听清。为了弥补这一点我在设置里加了“间隔2秒、3秒、5秒”选项。自动批改孩子听写时输入汉字程序与标准答案对比。一开始用精确匹配但发现孩子写“白云”标准答案是“白云。”句号导致不匹配。后来改成先把标点符号和空格全去掉再用trim()对比。另外还做了模糊匹配——写“白雲”繁体也算对因为有些孩子手写输入法会出繁体。错词本每次批改后把不匹配的词记录到云数据库。错词本页面支持重新听写只用错了的词再练一遍。每完成一个功能我都让家人试用孩子当测试员妻子当家长。孩子反馈说“听写时没有键盘提示音”我就加了一个震动反馈wx.vibrateShort。妻子说“加词太慢”我就做了个从本地txt文件导入的功能。第26-30天打磨与提交最后五天我每天只做一件事反复测试。· 测试边界情况词库为空时怎么办→ 提示家长先录入· 网络断开时怎么办→ 保存失败有重试按钮· 孩子连续听写50个词会不会卡→ 分页加载一次只取20个· iOS和安卓语音延迟不同怎么办→ 把间隔选项从固定值改成滑块1-10秒第28天我试着把当初砍掉的番茄钟重新加回来——但这次是以“学习专注记录”的形式附在结果页上不是独立模块。只记录本次听写耗时不做复杂计时器。只花了半小时就加好了因为不再贪心反而顺手。第30天我点击了“提交审核”。回头看小白最大的教训这30天我犯了一个所有小白都会犯的错分不清“想做”和“该做”。“想做”番茄钟、“想做”实验室、“想做”理财游戏——这些念头像烟花一样绚烂但它们炸开后只会留下一地代码灰烬。而“该做”的往往只有一件事解决一个具体问题。我的问题是“报听写太麻烦”那答案就是一个纯听写工具不是“儿童综合素质平台”。AI Agent很强大它们帮我写代码、找bug、优化逻辑。但它们不会帮我做选择——当我说“再加个游戏吧”Agent不会说“你别加你会后悔的”。它只会说“好的我帮你写游戏的代码”。然后我就真的去写了然后真的后悔了。【我还欠媳妇一句正式的谢谢。那几天她虽然生气但看我那么着魔最后还是默默把夜宵放在桌上把孩子的睡前故事揽了过去。提交审核那天晚上我跟她说“小程序提交了。”她头也没抬“嗯这回可以正常睡觉了吧”我说可以了。她嘴角动了一下大概是笑了。】所以如果你也是小白也在用AI做东西我给你一个最真诚的建议先画一条线线上是你无论如何都要完成的“核心功能”线下是“有了更好没有也行”的幻想。在核心功能跑通之前多看那条线别看下面。今天审核结果还没出来。可能被打回可能要改。但我不怕了因为我知道怎么改了——删掉不该有的补上该有的。30天前我觉得自己能做一个“改变教育”的产品。30天后我只想做一个能让我给孩子报听写时不用扯着嗓子喊的产品。这就够了。