由单向编程走向多向编程
前言
这篇文章是在大三上的百团大战上突发奇想开始写的。坐在百团大战的展位上看着一位又一位穿着军训服新生走过展位,我也是不由得想起来当初第一次百团大战我并没有去逛,当时我虽然作为新生,但是心中已经有了唯一的目标就是创客空间。虽然现在看来当时选择创客的很大一部分原因都是说被骏哥上门发传单的操作给先入为主了。但,我不后悔,依旧感激。
这两年在创客的经历让我对编程的观念发生了大幅的改变,我坐在空教室发呆的时候脑海中就蹦出一个词“多向编程”。随后我去查了一下,确实是没有这么个词的,应该就是我脑海中凭空出现的。我顺着这个思路往下想,结合着我自己的编程历程去进行对照,发现好像十分吻合。好像我学习编程的过程,写项目的经历,以及我对编程的看法都是由“单向编程”拓展到“双向编程”最终成长为“多向编程”的。
这个发现让我感到很惊喜,感觉自己突然获得了一个对于自己已经过去的两年大学时光的一个清晰的主线,理清了我对于过去所有努力所取得的成果的一个高度浓缩的概括。那接下来就让我们进入正题开始聊一聊我这两年多的心路历程。
单向编程
在刚入学的阶段,我跟着学校的课程学习了C语言,第1次接触到了变量函数循环这些再基础不过的知识。每一天都会被一些新鲜的知识所吸引,能在黑框框里去打印出来符合预期的输出总能给我并不算大,但源源不断的正反馈。
这一段的经历就像是在逐渐的拨开迷雾从新手村走出来,沿着一条路一直的前进,一切都是新的,一切都是逐步向上的。感觉学习编程就是不断的向下读文档,不断的跟着视频课走我就会学到越来越多的东西迟早有一天能够偏写出真正有价值的代码。虽然那个时候也知道迟早是要开始创新的,但是对于那个时候的我来说,创新这个词还是太遥远了。跟着视频走,跟着老师走,每天所接触到的新东西就已经让我有些目不暇接了。所以这个时期的编程对于我来说就是单向的。是一味的跟着前辈的脚印去学习,那些早已被实践过无数次的基础知识。
同时这个单向也代表着知识的流向在那个阶段,只有外界流向我的知识,我还没有办法流向外界任何的知识,没有能力也没有精力去输出任何有用的知识,所以编程是单向的。
参加创客的活动也是一样,虽然不是C语言,但是像git,gitee,github这种如今在熟悉不过的工具和平台对于那个时候的我来说都是一种天书的存在,完全不理解他们的存在和在电脑上去CTRL S保存一个文件有什么区别。所有的代码都是自己写自己的,所有的结果都是自己去验证的,想向别人展示成果的时候,只需要抱着电脑跑到别人面前去给他们看就好。所以说编程是单向的,是一个人的事,没有什么可交互的。
双向编程
双向编程的起始,应该是发生在我开始学鸿蒙之后。至少目前来看是这样的。那是我第1次接触到完整的项目工程。一系列由idea自动创建的工程文件让我眼花缭乱,完全不知道我该在哪里开始我的开发。在子安学长的活动上,他带着我们大致的了解了一下鸿蒙的项目工程,但是我也是完全听不懂的。毕竟在过去我的眼中编程就是创建一个点C后缀的文件然后就开始进行编程,全部的流程都在同一个文件里头完成。最大的封装也只不过是一个函数而已。如此庞大繁杂的项目工程。但我完全不清楚每一个文件的。也不理解为什么要有这么多的文件。自然学长的第一次课就给我们交了鸿蒙的一多开发思想但是那个时候的我既没接触过前端也没有接触过面向对象编程,所以这是一个完全听不懂的状态。他尽力鼓励着我们去动手修改文件中一些配置项的内容。但是我却迟迟不敢动手,生怕改错了哪一处,让整个项目无法运行,还得麻烦学长来帮我修改,拖慢整体的进度。就只能等着大家做的差不多了,或者说学长等不下去了开始讲解我才敢跟着学长的投屏去抄代码。但又因为不熟悉那些关键词,还有不会用代码补全功能,导致想抄也抄不快,还得时常的用手机拍下来,后边慢慢再补。
不过在那次活动的最后,子安学长也是给了我们一个相对完整的工程,也就是一个类似于运动世界校园的那种健康跑软件的demo。而且现在看来的话确实没有什么很难的技术,整体也没有勾建标准的一多三层架构。在预览器打开的那一刻。完整的登录界面,可以点开的跑步界面,可以登录的个人界面。都是深深的震撼了当时的我。
这段经历之所一杯成为时双向编程的开端,是因为从这次活动开始,我有了从项目架构到具体代码实现的双向奔赴的概念。第1次真正意识到了,编程可以不光是从零开始构建,也可以是从一个完整项目架构的基础上的二次开发。在读学长给的代码以及官方给出的文档的时候才能意识到你的开发是有很多人在协助你在和你去交互而不是说,需让你每一次都从头开始去构建一个完整的项目。
这一阶段的话,其实也可以被概括为学会了调用API,开始查文档来进行开发的阶段。依赖于其他人的力量,用现在已经有的资源去踩在巨人的肩膀上开发,去学会阅读其他人的代码,学会利用其他人的代码来为自己的项目而服务,这是一个很重要的点,而且也是作为一个程序员所必须的技能,在这个阶段里,我还学会了git的基本使用,明白了多人协作去开发一个项目是什么样的感觉,同时我也是下定决心要去走鸿蒙开发这条路。需要和别人去交互,需要去阅读其他的开发者所写的内容。所以说边程是双向的。
在写一个项目的时候,会先去思考这个项目它应该长什么样,做完了之后它有哪些功能,从这一边去开始设计整个项目的结构,去想自己应该开发哪些功能,应该去怎么安排项目结构,同时从另一端,我们也从最基础的功能去开始进行一些可行性测试,去进行最基础的API调用,来去调试相关参数。从基础代码与目标效果共同思考,在不断的尝试中去寻找到这个项目的最优解,直至整个项目完成,也就是想法与现实的交会点。所以说编程是双向的。
这个阶段呢,我也担任了创客空间的预备役负责人这一职位,进行了一些活动辅助相关的工作,也能产出一些有用的知识和经验给其他人。知识的流动方向不再是单向的,而是双向的,所以说编程是双向的。
当然在这一阶段应该也是包含了大一升大二的小学期期间的经历,那段时间我刚刚开始正式自学鸿蒙,同时也在学校的Java课上取得了极大的正反馈,属于是对编程充满了热情,具体的经历我就不再去复述了,此前的另一篇文章中也有过详细的记录。但刘老师与我积极的讨论,坐在一起共同去进行代码上的尝试和修改的经历真的依旧令我印象深刻,有交互,共同商讨,能碰撞出火花的编程也是双向的。
多向编程
在经历了在现有架构的基础上去开发以及调用第三方服务接口的编程经历后,我的变成世界观开始觉醒,我了解到了开源组织,阅读了一些高Star的开源项目的源码。跟着孙妈学习了AI工具的使用,接触到了coze,dify,trae,cursor等AI工具。