V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
LazyCoder0101
V2EX  ›  分享创造

分享一个自己制作的代码生成器

  •  1
     
  •   LazyCoder0101 · 2023-12-04 19:15:25 +08:00 · 5314 次点击
    这是一个创建于 384 天前的主题,其中的信息可能已经有所发展或是发生改变。

    懒农 ( LazyCoder )

    一款实现可视化生成代码的代码生成器

    License


    介绍

        懒农是一款实现可视化生成代码的代码生成器,如示例动图,使用懒农,可通过添加功能以及图示的可视化操作,实现即时代码生成和修改。

    图示

        但实际上,这个软件并不会生成代码,它能实现图示所示的效果,是因为在使用软件生成代码之前,导入了对应的数据文件

    示例数据文件

        如上图所示,这两个文件为客户端附带的示例数据文件,导入对应的示例数据文件后,便可使用该数据文件通过可视化操作生成对应源码,动图所示操作是使用 STM32 程序生成(正点原子探索者) 这个数据文件生成的源码示例。该数据文件生成的代码内容基本取自于 STM32 开发板厂商正点原子公开的探索者开发板裸机源码,使用该数据源可以通过可视化生成对应的电路控制程序。同样,要生成其他代码,也需要开发者针对某种业务场景,将所需生成的代码等内容做成数据文件,例如示例数据源的 微信公众号生成( FastBootWeixin ) 数据文件,该数据文件可使用 java 语言快速生成一个简易的微信公众号相关程序 (该生成源码仅作示范使用,不考虑实际用途,因为实际情况几乎可以说没人会这样做微信公众号开发) 。由于这种生成代码的思路并不涉及具体的编程语言,所以可以适应于多种编程语言。

    demo

        在制作数据文件的过程中,需要录入生成项目源码的固定文件结构等内容,如上图所示,除了要录入需要生成的代码文件内容,以及可以选择添加的功能的代码以外,还要编辑可以对代码进行可视化操作的操作层。录入对应的文字,并添加合适的控制组件。在使用数据文件生成源码时,客户端会根据录入内容生成对应源码和可以对其进行可视化操作的控制台,从而让用户可以根据控制台的文字内容和组件,按提示进行操作对代码进行更改,并通过提供的各种功能的选择组合生成自己所需要的代码。

    这代码生成器能用来生成什么代码

        看到这里,可能不少人会觉得,这样的软件并没有什么太大的作用,这样生成代码的方式,没法应用于复杂的开发工作中。其实,这款软件,其最终的应用目的,是希望能提供给懂得一般电脑操作的人,用来生成自己所需要的一些简易程序的。

        有时候,对于很多人来说,有些需要进行人工进行的简易繁复的工作可以用程序来进行代替,这类程序往往没有复杂的程序逻辑,仅是实现某些简单的功能来解决一些实际需求,但这类程序往往没什么经济价值。说得通俗点,用户也不会想到要搞个程序来完成工作,找人也肯定不现实,不舍得花太多钱,哪怕真有开发者愿意为其进行开发需要的程序,也容易出现由于用户无法理解技术,或者开发者没能理解用户实际需求的情况,导致双方沟通存在问题,最终实现的效果没能满足用户的实际需求;或者说在使用过程中由于实际外部因素的改变,导致原来生成的程序需要调整才能满足实际情况。此外,像这类需求,由于不同的用户和不同需要,也要通过实际情况来判断和辨别,应该需要什么技术领域以及符合的编程语言,找具备对应技能的开发者进行定制化开发才能解决问题 (比如适合于 web 服务一类的需求,总不能找具备嵌入式开发功能的人来处理) ,而这对于用户而言,是他们难以靠自身能力来完成的。

        所以,对于这样一类难以产生巨大经济价值的需求,按照以往用户支付费用,并根据自身需求通过和开发者之间的沟通来满足用户的个性化需求,进行定制化软件开发的方式,无法切合实际情况。笔者开发该应用,也是想通过这款软件,提供一种协作方式,开发者围绕某种业务场景制作对应的数据文件提供用户进行可视化代码生成,当数据文件达到一定数量,用户可以根据自己的需求,通过一定方式找到自己所需的数据文件,并在开发者的引导下,使用数据文件生成所需代码。 (当然,有些代码并不适合通过这种方式生成,要解决该问题需对软件继续进行迭代改进) 由于这软件生成代码的思路并不涉及任何编程语言,所以当数据文件的数量和种类达到一定数量时,通过这种方式可生成多个领域和不同的编程语言的简易代码,如嵌入式应用程序、web 服务程序等,从而在种类、数量、功能、业务场景上对用户需求进行覆盖,一定程度上满足这类一般用户所需的简易程序开发需求。

        以嵌入式应用程序为例,各位可使用本应用软件附带的示例数据文件 STM32 程序生成(正点原子探索者) 数据文件生成代码实际体验,该数据文件大部分生成源码是直接使用正点原子公开的探索者开发板源码制作,使用懒农可通过可视化的方式生成对应的裸机源码。生成源码后,经过编译、烧录到开发板或者对应的硬件电路,便可实现相应的功能。

        看到这里,可能会有人觉得,懒农的做法根本是不切实际,不谈其他,单是像这类硬件电路的控制程序,相对于程序设计,其中的硬件电路设计到成品制作等所需的相关知识和技能,比程序编写本身的难度更大 ,生成程序以后,后续到最终成品实现的过程中,需要具备对应知识和技能的工作,根本不是一个只懂得一般操作的用户能够实现的,仅以这种方式生成代码,而不是用户最终所需的成品硬件,就想满足用户的需求根本就是空谈。

        诚然,对于生成所需的成品实物,仅生成代码远远不够,但是,能确定要生成的代码以后,不考虑电路布局等因素,其成品实物的硬件设计电路基本可以确定。而且对于这个领域,终端用户所需的需求对应技术基本是消费电子行业所需的板级硬件技术,板级硬件技术随着这么多年行业的发展,早已实现了模块化和集成化,对于一些并不算过于复杂的功能需求,仅从实现功能的角度考虑,很大程度上可以当成编译后烧录到对应 MCU ,并根据生成代码将各模块电路进行连接的事。如果数据文件可以生成可应用于实际的代码,通过这样的方式,开发者也可以以一种相对较低的成本提供后续的使用引导等工作。即便在这过程中用户可能存在一些问题难以自己解决,但其实只要这类需求能通过这样的方式得以整合,并形成经济价值,凭借目前的技术,当代码生成时,即所需条件已经明确后,也可以通过现有的技术手段去有针对性的对该类问题提供更为简易操作的方式供用户完成。就好比如今的修图和短视频编辑等,在面对终端用户特定的需求的情况下,可以提供简单易用的功能,以产品的形式让用户实现想要的效果,而不是一味地要求用户需要具备相应的技能。

        同样,对于 web 服务或者传统的客户端开发,由于 CS 架构和 BS 架构之间没有过于明确的技术划分;随着目前众多开源技术的涌现让开发的成本和难度降低;而且现在有众多的第三方互联网服务提供各种丰富的基础功能;对于像 UI 或者某些特定的代码,早已有可以进行可视化生成或者简易配置生成的工具可以实现;对于一般用户日常所需的一些并不复杂的单一功能需求,通过事先围绕特定业务场景编写的数据文件,以可视化的方式生成基本代码框架,对于一些不适合使用数据文件生成的代码,以结合其他工具配合生成,从当前技术的角度来说,一定程度上,目前已经具备实现的可能。而且,使用数据文件的方式,还可以让开发者能事先确认生成的代码所需要的环境,这样也可以进一步让快速编译和部署等工作有了实现的可能。

        笔者通过懒农所想要实现的,不仅仅是这个软件所表现的可视化生成简易程序的效果,而是希望可以以这个软件作为起点,能让更多开发者能关注并参与进来,进行对应的数据文件的制作以及对软件的持续迭代改进、还有所需配套环境的建设;通过现有技术等方面的整合和协作方式的改变,让技术得以进一步下沉,使得这类简易的应用程序需求得以快速实现,具备并整合为市场需求并形成经济价值的可能。


    项目开源地址

    CSDN 项目介绍

    在这希望有兴趣的朋友可以点⭐鼓励一下。

    客户端下载地址

    作者联系方式

        如果您对懒农这个应用,想要反馈 Bug 、提供产品意见,甚至进行迭代优化,欢迎联系作者,或者加群讨论。


    <sub>作者 qq:3606515004</sub>

    <sub>作者微信:lanzai2020</sub>

    <sub>qq 交流群:893613856</sub>
    24 条回复    2024-02-06 21:25:35 +08:00
    chenshiforever
        1
    chenshiforever  
       2023-12-04 20:45:24 +08:00
    可以用于小学生搭积木,学习写代码这种场景
    LazyCoder0101
        2
    LazyCoder0101  
    OP
       2023-12-04 21:02:49 +08:00
    为什么要把它只用在小学生学写代码这样的应用场景呢?搭积木也好,对话式生成也好,拖拽等方式生成代码也好,都是一种降低门槛和成本生成一些简易代码的方式,如果能通过资源整合降低成本和难度,将应用到更多一般人生活所需的难度不大的应用程序的制作和生成,让技术得以下沉到更为广阔的市场,这意义难道不比所谓的搭积木学写代码大吗?
    NewYear
        3
    NewYear  
       2023-12-04 23:04:19 +08:00
    为什么要把图片压缩成这样的样子,完全看不清哦。
    ruoxie
        4
    ruoxie  
       2023-12-05 16:17:54 +08:00
    gif 但是它不会动啊,还糊了
    LazyCoder0101
        5
    LazyCoder0101  
    OP
       2023-12-05 20:39:36 +08:00
    这网站好像看不了 gif ,可以到文末的 github 或者 gitee 看一下吗,那里能看动图
    512357301
        6
    512357301  
       2023-12-10 00:36:28 +08:00 via Android
    这思路很好啊,有点像低代码引擎,关键你这个还能生成可用的源码,等于搭建者还能掌控源码,赞一个
    maymay5
        7
    maymay5  
       2023-12-10 17:18:30 +08:00   ❤️ 1
    一点小感想,没有评价这个平台或开发者好坏的意思

    作为程序员,其实最难跨越的不是能力水平,而是思维茧房,虽然我自己也不能跨越

    做的产品太过工程思维,当然也许 OP 并没有当一个产品在做哈哈

    如果把我代入 OP 所说的,略懂一点点编程思想,但是不想花大钱,自己想要个小工具,我的选择是如下:

    1:找免费或便宜的平替,这必是首选

    2:用 OP 的平台,新平台到手,肯定要学习,学习资源获取困难,自己编程储备又确实不足,就会出现新的两种选择:

    1:放弃

    2:花钱请 OP 来做

    总结的话:OP 产品能做起来吗?一切皆有可能,只要平台完善营销策略得当,这可能性非常大

    谁在用 OP 的产品?并不是普通人,依旧是程序员在用,而是另一个职业(软件实施工程师)
    limaofeng
        8
    limaofeng  
       2023-12-11 10:05:10 +08:00
    有点像 TeaCode 占位符,替换的效果。但如果看的懂代码,装个 GitHub Copilot 不是更香吗? 可视化,别闹了。对着这么丑的 UI ,真的会疯掉的
    LazyCoder0101
        9
    LazyCoder0101  
    OP
       2023-12-11 14:31:13 +08:00
    不需要看得懂代码啊,软件生成代码的右边界面只是摆在那里不需要看得懂的,直接对中间的 UI 组件进行可视化操作就行
    leon2017
        10
    leon2017  
       2023-12-11 19:45:07 +08:00
    这个跟低代码平台有啥子区别
    LazyCoder0101
        11
    LazyCoder0101  
    OP
       2023-12-11 20:26:53 +08:00
    @leon2017 对标的目的不同,市场上的低代码平台多以面向行业和企业用户为主,实现的更多是围绕系统业务流程,UI 页面或者通用的用户、权限管理功能之类的进行低代码生成,我的最终目的是希望能对大众生活所需的简易小工具这样的应用在交互方式上能降低成本,并通过协作方式的改变,让这类应用有合适的机会能够实现;
    交互方式不同,市场上的低代码平台更多内容是由厂商提供的,面向于某种单一的功能,比如可视化生成某些单片机程序等等,我尝试通过让开发者制作对应的数据文件的方式,让用户已可视化的方式生成代码,由于使用数据文件的方式,说的直白点,连代码内容都是开发者录入的,当数据文件的数量多了,并能从多种业务场景、领域( web 也好、嵌入式等也好)来覆盖这类用户的需求
    LazyCoder0101
        12
    LazyCoder0101  
    OP
       2023-12-11 21:00:44 +08:00
    @512357301 @maymay5 @limaofeng @chenshiforever @NewYear @ruoxie @leon2017
    向各位说明一下
    首先,我所做的代码生成器,用户分为 2 层,一类是开发者用户,开发者用户制作数据文件,并且他们的数据文件可以提供给其他懂得一般电脑操作的人使用;另一类是终端一般用户,他们完全不懂编程,而不是略懂一点点编程思想。这类用户,如果说他们生活上有些繁复或者机械化的劳作,可以通过程序实现,但有某位开发者,可以用他们做的数据文件生成这种程序,这时候通过这个软件,让这类用户可以使用这个数据文件,以可视化的方式生成所需要的程序,这是我的软件所实现的效果。另外,我的软件,在代码生成界面,右边那里确实能看到生成的代码,但那里不是给这类用户对着看代码来进行可视化生成的,那里他们不需要看看,他们只需要关注界面的可视化操作区域,还有功能添加区域,通过进行功能添加和可视化的更改,实现生成所需代码的效果。
    再说一下这个软件能够生成代码的用途,可能各位有使用过某些 web 服务的低代码平台,这类平台通过定义流程,界面拖拽等形式,可以快速生成某些企业业务所需的应用,就类似于什么审批系统,订单系统之类的,我所做的软件,其生成的代码从设计之初,就不包括这类 B 端应用;可能也有人使用过某些嵌入式领域的可视化生成工具,通过里面拖拽、点击其中实现提供的什么 LED 灯、显示屏之类的功能,生成某类微型控制程序,这类程序一般生成某种指定芯片的控制程序。 而我所期望的,是将更多不懂技术的普通大众,其生活中某些可以由软件完成的某些需求。类似于提供一个他们特殊需要的实现某种简单功能,像小工具这样的应用。能通过我的软件实现低成本的可视化生成方式实现。横向类比就如同美图秀秀,我们都知道,具备厉害的 PS 修图技能,几乎可以按照任何想法 P 出各种图片,但通过 PS 是修图,像美图一样,根据特定的美颜需求,提供便捷的功能进行图片处理,也是修图,这两者之间不冲突。换句话说,我想实现的效果,相当于生成代码软件中的美图秀秀。
    和众多的低代码平台和可视化生成工具相比,我的软件和他们的所想要生成的代码方向不同,就像车一样,动车是车、汽车是车、自行车也是车,大家实现的目的不同、制造的思路不同,也不会说汽车动车出现了,自行车就变得没有任何价值
    LazyCoder0101
        13
    LazyCoder0101  
    OP
       2023-12-11 21:40:08 +08:00
    接下来我想从协作方式上说明这个软件的价值和意义,试想一下,当我所提及的用户有这类需求想要制作这样的一个小工具的时候,如果说,不同领域的开发者制作了可实现不同功能的数据文件,当数据文件的数量达到一定程序,便可以像我所说的,从功能、领域、等各方面大幅度完成对这类用户这样的一种需求的覆盖。如果这样的数据文件足够多,从目前的社会层面技术上来说,完全能实现一个让用户说明自己想要的功能,然后从这些数据文件中匹配到自己所需要的数据文件的效果,当普通用户使用该数据文件,便可通过软件,以可视化的方式,按自己的意愿生成自己所需要的代码。
    我说过,仅生成代码是不够的,根据不同的技术,生成代码后,还伴随着后面编译、部署,硬件的话还要做成实物等工作,而这些工作,对于一个只懂得一般电脑操作的人来说,他们是做不到的,在这过程中,开发者的引导和后续的维护提供服务,就是实现的关键,这也是我所提及的,通过协作方式的改变来覆盖此类需求。
    说点题外话,不知道有没有搞过嵌入式开发的学习经历,像硬件开发这块,对于这行业的人来说,他们离不开一个叫开发板的东西,说的简单点,开发板像是个学习机,比如你要用某种芯片学习开发硬件产品,你更多需要买一块带有这种芯片的硬件设备,这个设备可以让你连接蓝牙、显示屏、wifi 、USB 等各种我们生活中遇到的硬件,你写好对应程序后将程序烧录进去,然后连上你要实现的功能的各种硬件,比如显示屏、wifi 什么的,进行功能验证,程序的改进和测试等工作。而这些开发板的厂商,他们往往会以 QQ 等方式创建一些学习交流群或者论坛,开发人员遇到什么问题可以找他们请教或者自行交流经验。再说另一件事,前一阵子,我发现了两个自媒体,他们做的事基本相同,都是再各种主流平台上分享某些很小型的硬件设备的制作短视频,比如什么远程遥控车之类的,加他们的 QQ 群之类的,他们提供实现这些东西的源代码,有的是提供一个可视化生成某种芯片程序的软件,并提供文档,网上购买对应的硬件,按他们的指引进行操作就能制作对应的成品。
    我想表达的是,像这种开发板厂商或者那些自媒体也好,他们都在使用一种自己成本可接受的方式,为他们产品和用户使用延伸出来的问题提供一种售后服务。由于按照我的软件的生成代码的方式,用户就算自己能通过可视化生成代码,但生成代码以后,后续的编译、部署等工作都是他们无法完成的,当他们使用对应的数据文件生成代码以后,后续他们也极度依赖于这个数据文件的开发者,提供对应的售后服务来给完成最终成品的制作,这也是我想所说的协作方式的改变
    LazyCoder0101
        14
    LazyCoder0101  
    OP
       2023-12-11 22:04:30 +08:00
    我所提及的开发者,并非指单纯只进行数据文件制作,而不顾其他后续工作开发人员,而是指一个能完整的提供一个适用性广,并能进行后续售后服务提供的开发方。
    正如我在文中所提到的,我想做的,是想以这样的一种协作方式的改变,让这样一种方式,再通过现在各种条件的成熟,例如板级硬件技术现在的模块化,集成化、还有各种开源项目的推出、各类可视化软件的涌现以及如今人工智能等条件,通过技术的整合,实现技术下沉,使这类一般用户的这类小应用需求能以一种成本合适的形式实现,并能聚集起来形成商业价值,让后续的环境集成等让用户得到所需成品的工作,有了实现的可能。
    目前我的软件只能实现按照数据文件内容,以搭积木的方式生成代码,诚然,以搭积木这样的方式,并不能完好的解决此类需求,后续还需要进行迭代,制作这个软件并将其开源,也是想以这个软件作为开始,让更多人能关注并参与,从而最终推动这个结果的出现
    forty
        15
    forty  
       2023-12-13 10:59:38 +08:00   ❤️ 1
    耐着性子看了大约一半的说明, 并且看了 github 的图, 简单说几句.
    0. 开发并传播为程序员服务的工具, 值得称赞.
    1. 界面确实太丑, 正如其他朋友提到的.
    2. OP 的文字描述有待改进, 超长大段文字很难看下去, 建议整理整理, 更加条理化, 分章节, 大标题, 小标题, 搞起来.
    3. 有一定的使用场景, 但是不够多, 需要继续增强更多场景.
    4. 建议放出与其它可视化或非可视化的代码生成器以及低代码工具的对比表格.
    5. 后续有机会我会尝试试用一下.
    LazyCoder0101
        16
    LazyCoder0101  
    OP
       2023-12-14 18:24:46 +08:00
    @forty 谢谢,不过对于各位所说的 UI 太丑的问题,这个我承认,可我确实没什么 UI 设计的的天赋,客户端使用的 UI 技术和如今的 UI 主流审美不符,而且,这种功能实在找不到可借鉴的美观的设计,现在这个样子还是我花了好久才搞成这样的
    Raynard
        17
    Raynard  
       2023-12-19 21:44:26 +08:00
    文档太口语化,建议修改,

    优秀的文字表达更有利于用户上手,同时会突出开发者的专业性。
    enchilada2020
        18
    enchilada2020  
       2023-12-19 21:46:15 +08:00 via Android
    文档问题直接交给 GPT 就好了
    zoumouse
        19
    zoumouse  
       2023-12-20 00:04:05 +08:00
    idea 听着还有点意思,相当于把函数、模块更抽象了一层,除了正常 interface ,还提供一个 GUI interface 给用户。但具体 user case 可能还得想想。
    keepRun
        20
    keepRun  
       2023-12-20 03:17:44 +08:00 via Android   ❤️ 1
    readme 写得太差了,说那么长,大部分人一开始不关心原理是什么,关心的是有什么功能以及如何快速上手
    orangie
        21
    orangie  
       2023-12-20 09:19:27 +08:00   ❤️ 1
    感觉有一点点意思,像是根据模板生成程序,但是奈何 readme 写得真不好,粗看一遍还是不知道怎么用,没看到演示用的生成的程序的效果。
    forty
        22
    forty  
       327 天前
    现在几个月没更新了呀, 没什么新的改进了吗?
    LazyCoder0101
        23
    LazyCoder0101  
    OP
       320 天前
    @forty 谢谢支持,不好意思,项目还在跟进,之前推广收到了一些用户的意见,在改中,最近被个人私事耽误了,暂时没精力处理,实在抱歉
    LazyCoder0101
        24
    LazyCoder0101  
    OP
       320 天前
    @forty 如果阁下有兴趣,可以加我 QQ 联系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:27 · PVG 03:27 · LAX 11:27 · JFK 14:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.