【共创季稿事节】「毕业季 · 鸿蒙同行」非科班转鸿蒙开发:3个月学习路径与实习转正经验
文章目录
- 每日一句正能量
- 一、我的起点:专业不对口,真正缺的是“可验证的开发能力”
- 二、为什么选择鸿蒙方向
- 2.1 学习入口清晰
- 2.2 能用项目快速建立反馈
- 2.3 项目容易体现平台特色
- 2.4 非科班优势并非完全无效
- 三、三个月目标:不是“精通”,而是达到四个可验证标准
- 第一个月:基础迁移
- 第二个月:项目实战
- 第三个月:认证、实习和转正准备
- 四、12周学习进度表:每周都必须留下“证据”
- 4.1 每周至少有一个可演示结果
- 4.2 学习笔记必须能转成问题
- 4.3 每周只解决一个主要短板
- 五、第一个月:先补“开发最低闭环”,再扩知识面
- 5.1 编程基础
- 5.2 Git 与工程习惯
- 5.3 ArkUI 页面不只追求“好看”
- 六、第二个月:用一个完整项目建立工程能力
- 6.1 项目结构
- 6.2 离线队列
- 七、认证备考:把认证当知识地图,而不是就业保证
- 7.1 第一步:建立知识目录
- 7.2 第二步:每个知识点配一个代码例子
- 7.3 第三步:建立错题表
- 7.4 第四步:用项目验证
- 八、拿到实习后:第一周不要急着证明自己
- 九、我的第一个真实需求:给巡检任务增加异常状态
- 9.1 领域状态
- 9.2 状态映射
- 十、项目积累:每天记录“我贡献了什么证据”
- 十一、实习证明:真实材料必须由真实单位出具
- 十二、导师评价:不要只保留表扬,要保留改进意见
- 企业导师视角
- 校内导师视角
- 转正评委视角
- 十三、转正答辩:不是展示我做了多少页面
- 13.1 背景与职责
- 13.2 需求与成果
- 13.3 失败和改进
- 13.4 转正后的计划
- 十四、答辩演示结构
- 第 1~2 分钟:转型背景
- 第 3~7 分钟:项目与需求
- 第 8~10 分钟:工程质量
- 第 11~12 分钟:认证与学习
- 第 13~15 分钟:复盘与计划
- 十五、我怎样回答“非科班为什么要录用你”
- 十六、三个常见误区
- 16.1 “三个月可以精通鸿蒙”
- 16.2 “拿认证就能找到工作”
- 16.3 “实习转正只看加班和态度”
- 十七、给非科班同学的长期补课清单
- 17.1 计算机基础
- 17.2 HarmonyOS 深度
- 17.3 工程能力
- 十八、三个月路线的真实效果
- 十九、总结:非科班转型的核心不是“追平所有人”,而是持续缩小不可验证的部分
每日一句正能量
学会放手,是为自己腾空间,也是让未来有更多可能。
放下一段关系、一个执念、一种身份、一件不再适合的事。放手的痛苦是短暂的,被卡住的痛苦是持续的。
不必时刻紧握拳头,偶尔张开手掌,才能接住命运递来的新种子。
标记:参与方向三「毕业季 · 鸿蒙同行」文章投稿。
一、我的起点:专业不对口,真正缺的是“可验证的开发能力”
我本科读的不是计算机,而是偏管理与信息应用方向。大三以前,我写过一些 Python 数据处理脚本,也在课程里接触过数据库,但没有系统学过操作系统、计算机网络和软件工程。
第一次决定转开发时,我给自己列了一张清单:
- 学一门编程语言;
- 做几个项目;
- 考一个证书;
- 找一份实习。
这张清单看起来没错,但很快暴露出问题:每一项都太宽泛。
“学会 ArkTS”的标准是什么?
“做项目”是做几个页面,还是解决一个完整问题?
“认证备考”是背题,还是建立知识结构?
“找实习”时,企业凭什么相信一个非科班学生能参与工程开发?
校企合作班导师给我的建议是:
三个月不能把非科班背景变成计算机科班背景,但可以让企业看到:你已经建立基础开发能力,能完成一个真实项目,能接受反馈,也能在团队中持续成长。
我因此把目标从“3个月学会鸿蒙开发”改成:
3个月内建立一套可验证的能力闭环:能写、能讲、能测、能演示、能复盘,并在实习中完成至少一个真实需求。
这篇文章分享的不是“速成神话”,而是一条适合跨专业学生参考的压缩学习路径。
二、为什么选择鸿蒙方向
我最终选择 HarmonyOS 方向,主要有四个原因。
2.1 学习入口清晰
官方开发者资源覆盖 DevEco Studio、ArkTS、ArkUI、应用框架、网络与数据、课程和 Codelabs。对于非科班学生,这种相对清晰的学习资源结构很重要。
2.2 能用项目快速建立反馈
ArkUI 的声明式界面让初学者能较快看到结果,但真正深入后又会遇到状态管理、生命周期、网络、数据、性能和工程分层等问题,适合从“做出来”逐步过渡到“做可靠”。
2.3 项目容易体现平台特色
普通增删改查项目很难形成差异,而鸿蒙项目可以结合:
- 服务卡片;
- 元服务;
- 跨设备协同;
- 意图直达;
- 多设备适配;
- 端侧 AI;
- 系统通知与数据能力。
这些能力不应该堆砌,但可以选一个与业务匹配的方向做深。
2.4 非科班优势并非完全无效
我的原专业训练了需求整理、文档表达、数据表格和用户沟通能力。这些能力不能替代技术基础,却能在实习中帮助我更快理解业务、整理验收标准和完成答辩表达。
三、三个月目标:不是“精通”,而是达到四个可验证标准
我把三个月拆成三个阶段。
第一个月:基础迁移
目标:
- 理解变量、函数、类、接口和泛型;
- 掌握 ArkTS 基础类型和异步编程;
- 使用 ArkUI 完成列表、表单和详情页;
- 理解 Stage Model 和 UIAbility 生命周期;
- 能使用 Git 提交、分支和合并;
- 完成一个小型应用。
验收标准不是“视频看完”,而是:
- 能从空工程开始;
- 能写三页以上业务流程;
- 有加载、空数据和错误状态;
- 能通过日志定位一个问题;
- 能把项目交给同学运行。
第二个月:项目实战
目标:
- 完成一个主项目;
- 加入网络请求和本地缓存;
- 处理重复请求、失败重试和数据过期;
- 添加一个 HarmonyOS 特色能力;
- 编写测试记录和架构说明;
- 形成作品集。
第三个月:认证、实习和转正准备
目标:
- 按官方认证范围整理知识;
- 完成错题和模拟复盘;
- 重写简历和项目介绍;
- 进入实习后完成真实小需求;
- 准备转正答辩;
- 制定入职后的长期补课计划。
四、12周学习进度表:每周都必须留下“证据”
我给自己制定了三个规则。
4.1 每周至少有一个可演示结果
例如:
- 一个页面;
- 一段完整业务流程;
- 一份测试报告;
- 一次性能对比;
- 一张架构图;
- 一次模拟面试录音。
4.2 学习笔记必须能转成问题
我不再抄大段文档,而是把内容整理成问题:
问题:为什么页面退出后返回,数据可能需要恢复? 问题:网络请求失败时,页面应该有哪些状态? 问题:本地缓存什么时候失效? 问题:父组件与子组件状态不同步怎样排查?4.3 每周只解决一个主要短板
非科班最容易焦虑,因为缺的东西太多。如果一周同时补操作系统、网络、算法、ArkUI 和项目,最后每项都只停留在看过。
我采用的方式是:
- 主线保持项目推进;
- 每周选一个计算机基础主题;
- 面试题只复习与当前项目相关的部分;
- 其他内容记录到后续清单。
五、第一个月:先补“开发最低闭环”,再扩知识面
5.1 编程基础
我重点学习:
- 基本类型;
- 数组与集合;
- 函数;
- 类与接口;
- 泛型;
- 异常处理;
- 异步任务;
- 模块导入;
- 基础数据结构。
对于非科班来说,最危险的方式是看到 ArkTS 与 TypeScript 相似,就认为自己已经掌握。ArkTS 更强调静态检查和明确类型,项目中需要认真处理空值、类型转换和接口边界。
5.2 Git 与工程习惯
我在第一周就开始使用 Git,而不是项目做完才上传。
练习内容:
main:保持可运行版本 feature/login:开发登录流程 feature/list:开发列表页面 fix/cache-expire:修复缓存过期每次提交只完成一个清晰动作:
feat: add inspection task list fix: avoid duplicate form submission test: add cache expiration cases docs: update project run guide这让我进入实习后没有因为分支和提交规范完全手足无措。
5.3 ArkUI 页面不只追求“好看”
第一个小项目包含:
- 登录;
- 首页;
- 列表;
- 详情;
- 表单;
- 设置。
但我要求每个页面至少考虑四种状态:
exporttypePageState<T>=|{status:'loading'}|{status:'success',data:T}|{status:'empty'}|{status:'error',message:string}示例页面状态:
@Entry@Componentstruct TaskPage{@StatepageState:PageState<Task[]>={status:'loading'}aboutToAppear():void{this.loadTasks()}build(){Column(){if(this.pageState.status==='loading'){LoadingProgress()}elseif(this.pageState.status==='empty'){Text('暂无任务')}elseif(this.pageState.status==='error'){Column(){Text(this.pageState.message)Button('重试').onClick(()=>this.loadTasks())}}else{List(){ForEach(this.pageState.data,(item:Task)=>{ListItem(){Text(item.title)}})}}}.width('100%').height('100%')}privateasyncloadTasks():Promise<void>{this.pageState={status:'loading'}try{consttasks:Task[]=awaitTaskService.list()this.pageState=tasks.length>0?{status:'success',data:tasks}:{status:'empty'}}catch(error){this.pageState={status:'error',message:'加载失败,请检查网络后重试'}}}}这段代码并不复杂,但它让我从“画页面”迈向“处理真实状态”。
六、第二个月:用一个完整项目建立工程能力
我选择的主项目是“设备巡检与异常工单应用”。
场景是:
- 实习生或运维人员查看当天巡检任务;
- 到现场完成设备检查;
- 发现异常时创建工单;
- 离线时先保存记录;
- 网络恢复后同步;
- 管理者查看完成率和异常趋势。
这个项目适合非科班转型,因为业务清晰,同时能覆盖:
- 列表;
- 表单;
- 网络;
- 缓存;
- 状态机;
- 日志;
- 权限;
- 通知;
- 性能;
- 测试。
6.1 项目结构
我把工程分成:
pages/ 页面 components/ 可复用组件 model/ 数据结构 service/ 业务规则 repository/ 网络与本地数据 common/ 日志、常量、结果类型 test/ 单元测试与场景测试页面只负责显示和收集输入,不直接拼网络参数或决定业务状态。
6.2 离线队列
巡检场景可能网络不稳定,因此我实现了待同步队列:
exportinterfacePendingOperation{id:stringtype:'CREATE_RECORD'|'CREATE_WORK_ORDER'payload:stringcreatedAt:numberretryCount:number}exportclassOfflineQueue{privateitems:PendingOperation[]=[]enqueue(item:PendingOperation):void{constexisted=this.items.some((current:PendingOperation)=>current.id===item.id)if(!existed){this.items.push(item)}}asyncflush(sender:(item:PendingOperation)=>Promise<boolean>):Promise<void>{constremained:PendingOperation[]=[]for(constitemofthis.items){constsuccess=awaitsender(item)if(!success){remained.push({...item,retryCount:item.retryCount+1})}}this.items=remained}}面试时我会继续说明:
- 本地队列需要持久化;
- 请求需要幂等键;
- 过期记录不能无限重试;
- 同步成功后要删除本地副本;
- 冲突需要提示用户处理。
七、认证备考:把认证当知识地图,而不是就业保证
官方鸿蒙开发者能力认证目前按基础、高级、专家等层级提供不同方向的能力验证。基础认证覆盖 HarmonyOS 应用框架、DevEco Studio、ArkTS、ArkUI、网络与数据等关键内容;高级与专家层级继续延伸到架构设计、关键平台能力、分布式、多设备协同和复杂问题解决。
三个月转型期间,我把目标放在基础知识范围,采用四步法。
7.1 第一步:建立知识目录
DevEco Studio ArkTS ArkUI Stage Model 应用生命周期 网络 数据存储 权限 调试 基础工程实践7.2 第二步:每个知识点配一个代码例子
例如状态管理不能只背定义,要在项目里说明:
- 谁拥有状态;
- 状态如何更新;
- 页面为什么重绘;
- 状态什么时候丢失;
- 如何做持久化。
7.3 第三步:建立错题表
错题表包含:
题目或知识点 错误答案 正确解释 项目中的对应场景 仍然不懂的地方 下一次复习时间7.4 第四步:用项目验证
认证可以帮助整理知识,但企业面试会继续追问:
- 你在哪里用过;
- 出现过什么错误;
- 为什么这样设计;
- 怎样测试。
因此,认证不能替代项目和实习,也不保证拿到 Offer 或转正。报名、考试方式和最新范围必须以官方认证页面为准。
八、拿到实习后:第一周不要急着证明自己
进入实习团队后,我最先做的不是主动申请最大需求,而是完成四件事:
- 跑通开发环境;
- 读懂主工程目录;
- 了解分支、提交和评审规范;
- 整理业务术语。
我建立了一张工程阅读表:
应用入口: 主要页面: 状态来源: 网络层: 本地数据: 日志位置: 测试命令: 构建命令: 常见错误: 负责人:非科班学生容易害怕问问题,但真正有效的提问不是“这个项目怎么看”,而是:
我已经从 EntryAbility 找到首页,通过 TaskRepository 看到列表数据来自接口和缓存。现在不确定缓存版本由哪个模块管理,我查了 A 和 B 两处,请问是否应从 CacheVersionService 继续看?
这种问题能让导师知道你已经做过定位。
九、我的第一个真实需求:给巡检任务增加异常状态
需求看起来很小:
当设备离线或读数异常时,在任务列表展示状态,并允许创建工单。
实际涉及:
- 服务端字段;
- 数据映射;
- 枚举;
- UI 样式;
- 详情页;
- 工单入口;
- 空值兼容;
- 埋点和日志;
- 测试。
9.1 领域状态
exporttypeDeviceHealth='NORMAL'|'WARNING'|'OFFLINE'|'UNKNOWN'exportinterfaceInspectionTask{id:stringdeviceName:stringlocation:stringhealth:DeviceHealth lastOnlineAt?:number}9.2 状态映射
exportclassDeviceHealthMapper{staticfromCode(code?:string):DeviceHealth{switch(code){case'0':return'NORMAL'case'1':return'WARNING'case'2':return'OFFLINE'default:return'UNKNOWN'}}statictoText(health:DeviceHealth):string{switch(health){case'NORMAL':return'正常'case'WARNING':return'异常'case'OFFLINE':return'离线'default:return'状态未知'}}}我一开始把字段判断直接写在组件里。Code Review 要求我把映射移到独立模块,并补充未知状态测试。
这次修改让我学到:
- 服务端字段不应散落在 UI;
- 未知状态必须有兜底;
- 业务规则需要可测试;
- 小需求同样要考虑兼容性。
十、项目积累:每天记录“我贡献了什么证据”
实习转正不是靠最后一周临时总结。我每天记录:
- 完成的任务;
- 修复的问题;
- 评审意见;
- 新增测试;
- 性能变化;
- 与谁协作;
- 尚未解决的风险。
我用下面的结构记录需求:
需求背景: 我的职责: 关键改动: 技术难点: 评审意见: 测试结果: 上线/验收结果: 可以复用的经验:三个月后,这些记录直接变成转正答辩材料。
十一、实习证明:真实材料必须由真实单位出具
实习证明只能由真实实习单位审核、签字或盖章出具,不能自己生成一份用于求职、学校审核或投稿。
文章配图中的证明明确标注为:
- 示意模板;
- SAMPLE;
- 不可作为证明材料;
- 姓名、单位、日期均为占位字段。
十二、导师评价:不要只保留表扬,要保留改进意见
我的复合案例评价可以概括为:
企业导师视角
学习主动,能够按任务拆解需求并及时同步风险。前期比较关注页面效果,测试、日志和异常处理意识不足。建议每个需求同时提交测试记录与问题复盘。
校内导师视角
跨专业转型目标明确,三个月产出连续。计算机基础仍需要长期补齐,建议保持项目实践,同时系统复习网络、数据库和操作系统。
转正评委视角
项目演示完整,能够说明本人贡献和技术取舍。后续需要继续提升复杂工程阅读、跨团队沟通和线上问题定位能力。
这类评价比“表现优秀、能力突出”更有价值,因为它能说明成长轨迹。
真实使用时,需要获得导师授权,或者改写为自己的复盘,不应虚构他人评价。
十三、转正答辩:不是展示我做了多少页面
我的转正答辩分成四部分。
13.1 背景与职责
说明:
- 团队业务;
- 我所在模块;
- 实习目标;
- 本人职责边界。
13.2 需求与成果
重点展示 2~3 个需求:
需求背景 本人负责 技术方案 遇到问题 评审修改 测试证据 最终结果13.3 失败和改进
我主动展示了两个问题:
- 初版状态映射写在组件中,难以测试;
- 重试逻辑没有幂等约束,评审后增加请求标识和队列去重。
评委更关心你是否能从错误中成长,而不是假装三个月没有犯错。
13.4 转正后的计划
我按 30-60-90 天规划:
- 30天:独立负责常规需求;
- 60天:掌握发布、监控和排障;
- 90天:承担完整模块并沉淀文档。
十四、答辩演示结构
15 分钟答辩可以这样安排:
第 1~2 分钟:转型背景
- 为什么跨专业;
- 为什么选择 HarmonyOS;
- 三个月目标。
第 3~7 分钟:项目与需求
- 项目架构;
- 真实需求;
- 本人贡献;
- 技术难点;
- 运行演示。
第 8~10 分钟:工程质量
- 测试;
- 日志;
- 异常处理;
- 性能优化;
- Code Review 改进。
第 11~12 分钟:认证与学习
- 如何按官方范围学习;
- 认证与项目的关系;
- 尚未补齐的基础。
第 13~15 分钟:复盘与计划
- 最大成长;
- 失败案例;
- 转正后的计划。
十五、我怎样回答“非科班为什么要录用你”
我没有回答“我比科班更努力”,因为努力无法直接验证,也不应该贬低科班训练。
我的回答是:
我的计算机基础仍在持续补齐,这是客观差距。但过去三个月,我完成了可运行的 HarmonyOS 项目,在实习中交付了真实需求,接受了代码评审,补充了测试和异常处理,并能用记录说明每次改进。我不会把跨专业当成优势本身,而是用持续产出证明自己已经具备初级岗位所需的学习能力、协作能力和交付能力。
这个回答既承认差距,也提供证据。
十六、三个常见误区
16.1 “三个月可以精通鸿蒙”
不能。三个月可以建立入门能力和作品集,但计算机基础、复杂工程和平台深度需要长期积累。
16.2 “拿认证就能找到工作”
认证是知识验证和学习结构,不等同于项目经验、面试能力或岗位匹配。
16.3 “实习转正只看加班和态度”
态度重要,但转正更需要:
- 稳定交付;
- 代码质量;
- 测试意识;
- 风险沟通;
- 学习速度;
- 团队协作;
- 未来成长空间。
十七、给非科班同学的长期补课清单
三个月后,我继续补以下内容。
17.1 计算机基础
- 数据结构与算法;
- 计算机网络;
- 操作系统;
- 数据库;
- 软件工程;
- 设计模式。
17.2 HarmonyOS 深度
- ArkTS 并发;
- ArkUI 性能;
- 生命周期与状态恢复;
- 网络与安全;
- 数据持久化;
- 多设备适配;
- 一个特色能力方向。
17.3 工程能力
- 单元测试;
- UI 自动化;
- 日志与监控;
- 构建;
- 发布;
- 性能分析;
- Code Review;
- 故障复盘。
十八、三个月路线的真实效果
这个复合案例中的三个月成果不是“从零变专家”,而是:
- 能独立使用 DevEco Studio 创建和调试项目;
- 能使用 ArkTS 与 ArkUI 完成业务页面;
- 理解基本应用框架和生命周期;
- 完成一个具有网络、缓存、异常和测试的主项目;
- 按认证知识范围建立学习结构;
- 在实习中完成小需求;
- 接受代码评审并完成修改;
- 完成转正答辩;
- 明确长期基础补课计划。
它证明的不是天赋,而是路径有效。
十九、总结:非科班转型的核心不是“追平所有人”,而是持续缩小不可验证的部分
三个月以前,我最大的焦虑来自“不知道自己到底会不会”。
课程看了很多,笔记写了很多,但没有代码、没有项目、没有测试、没有真实反馈。三个月后,我依然不是计算机科班,也没有掌握所有 HarmonyOS 能力,但我的能力开始变得可验证:
- 代码可以运行;
- 项目可以演示;
- 问题可以复盘;
- 数据可以对比;
- 需求可以交付;
- 评审意见可以落实;
- 未来计划可以执行。
非科班转鸿蒙开发,没有一条只靠热情、证书或短期冲刺就能完成的捷径。真正有用的三个月,是把学习、项目、认证、实习和答辩连接起来,每周留下证据,让自己逐步成为一个值得团队继续培养的初级开发者。
“毕业季 · 鸿蒙同行”对我来说,不是告诉所有人三个月都能转行成功,而是让我明白:专业背景决定起点,但持续产出、诚实复盘和工程习惯,会决定我能走多远。
转载自:https://blog.csdn.net/u014727709/article/details/163001095
欢迎 👍点赞✍评论⭐收藏,欢迎指正