V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cheunghy
V2EX  ›  程序员

一个人如何开发超过 15 万行代码的开源项目

  •  
  •   cheunghy ·
    zhangkaiyulw · 2023-12-06 07:51:11 +08:00 · 4271 次点击
    这是一个创建于 388 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是 Victor Teo ,开源项目 Teo 的作者。在 2012 年进入软件技术领域,从事后端前端移动端技术的研究和创新,态度端正、勤劳刻苦、脚踏实地。十余年深刻实践总结和研究创新,从一个谦虚好学、天赋秉异、不想输给人的入门者成为罕有的坚持专注做好一件事的师匠。我从 2022 年 5 月开始编写 Teo 。到今天,包括项目本体功能、代码编辑器插件、网站、文档、未完成的一个支持 macOS 和 Win11 的工具软件,已有不止 15 万行代码。

    如何发现商机

    开发者工具领域是广泛大众不熟悉的领域,一般来说是帮助他人开发软件和搭建网站的一类工具,其受众群体是开发者、即程序员。这个领域比起餐饮、电商等领域,相对竞争没那么激烈,但产品和技术实力要达到市场中的程序员广泛认可。

    在这个领域中,WordPress 市值为 6360 亿美元,其母公司单次融资达到 2.88 亿美元; Postman 估值 56 亿美元;与我的产品相对类似和接近的,已创业几年的德国 Prisma 公司已融资超 2 亿多美元。在这个领域虽然不能够像苹果、谷歌、腾讯、阿里那样做的那么大,但是给开发者带来价值回报投资人和员工,并让家人不愁吃用还是能够做到的。

    这么多年开发经历中,无论我的职位头衔是前端开发工程师、后端开发工程师、全栈开发工程师、技术主管、技术总监、CTO ,还是自己经营外包公司那三年,我都在一线从事开发。如何把技术做的稳健、不易出 bug ,并且开发效率高,可以让一个工资中等的程序员的生产力产生一般的大公司的 3 人或 3 人以上的价值,是我始终在做的事。给人打工是贩卖人力的交易,做人做事要讲诚信和品德,让项目开发更快,为公司省时省钱,让公司在产品研发上成为更经得起商场风浪的一艘稳健的船;让团队中的程序员能够快速成长、自信快乐,将优秀的技术和开发流程教授并传承发展下去,是专业人士的职责也是专美。

    因为这种脚踏实地的务实作风,我深入使用过的各类技术工具和产品非常的多。这类产品其实也像大家用的一些日用品一样,有旧有新,有升级换代。一些人使用电动牙刷,一些人使用手力牙刷。手机从最初的拨号键盘,换代成全键盘的塞班黑莓智能手机,又换代成大屏的苹果安卓智能手机。每一次换代,设计都较前代更精巧,内部结构更复杂,但使用更简单,功能更全面。技术产品也是一样,70 年代的开发工具、90 年代的开发工具,智能手机时代的开发工具,AI 时代也需要支撑 AI 时代的技术底层和工具链。我们现今的技术开发工具,其实是有些陈旧的。在开发中,若是同时追求产品的开发效率和质量,就会令人苦不堪言,有大量的开发时间和精力被痛苦的浪费掉。现在使用智能手机的大家,若是带着今天的记忆穿越回到十多年前全键盘手机的年代,那一定很痛苦,不能拍照、看剧、玩手游,也不能刷微博抖音朋友圈。在一个领域中,能做出下一代产品的人,一定是在这个领域深入耕耘的,常常参与产品结构设计和研发的人。

    我常常浏览各类开发工具产品下,用户提出的问题和需求,配合自身工作中总结的经验加以整理。以及思考为什么开发工具的发展停滞不前。我关注新推出的技术产品的内部结构和市场发展。事实上,做一个同代际产品是不难的,但是做一个“下一代”产品,是需要先洞悉到产品的下一个阶段该有的样子,并有能力将其研发出来。洞悉力和开发能力都是需要在业内领域内持续实践、积累和思考的。其中的开发能力,需要随着年龄渐长,不断勤劳努力和积累,甚至还需要相当的天赋。80 年代,一个电脑操作系统甚至可以由一人完成,FC 游戏超级马里奥的设计和研发只需要 5 个人,而如今一个电脑操作系统需要一个巨大的团队,超级马里奥也需要百人团队来开发。没有资本也很难把一个概念变成商用的产品。不过幸好的是,我熟练掌握十多门编程语言,能够独自负责前端后端移动端和编译底层的所有开发;我的英语熟练,能够编写相对比较正宗的英文文档;我在自己经营公司的时候,做过商务类工作,虽然经验比不上专业人士,但也可以继续成长。所以最差的情况是多花小几年的研发时间,也能让产品的研发和推广按部就班地进行。因此,这件事、这个项目是可以做的。

    有人会好奇掌握多门编程语言不会混淆吗,不会互相占用精力从而各个都不精吗?举个例子,我最近爱好学习日语,日语中有大量的英文词汇和汉字词汇,而日语的音系和语法是中文或英文都无法套进去的。所以在使用日语时,很天然地、本能地就不可能把其他语言的语法和发音套进去使用。反而,这些来自英文和中文的经验,会让学习日语轻松很多。如果学会日语再学韩语,就变成连语法都不用学,只需要换音的又一个程度的降维打击。这就是为什么一些文化品德修养极高的翻译官、文豪、政治家能掌握“八国语言”的原因。学第一门外语最难,第二门开始难度都是不同程度递减的。且因为语言学知识的增加,每个语言都说的更好了。编程语言也是一样,不同编程语言的语法不同,不会让人混淆,但编程的结构和逻辑是相通的,一个人在编程语言 A 中的经验会提升这个人在编程语言 B 中的经验。

    为何坚持

    很多人常常看到某新兴领域有人赚到了钱,就想去从事一样的看似更易赚钱的行业,其实是没看到他人背后的深厚积累。我们一直在做的事情就是最擅长的,在自己熟悉的领域里是更容易计算成本优化流程产生更优质的产出的。而自己积累的丰富经验也是他人学不来的。去做一个自己本不擅长的事情,需要更强大的资源和运气。但是如果有这么强大的资源和背景,自己凭什么又是掌舵人呢?我不喜欢靠运气去赌他人的赠予,更不蓄意接近高贵的人来策划或甜或辣的把柄交易。踏实做事,在实践中做好产品,积累好经验,把斗争的精力用在取悦用户和产品市场的争夺上。当他人认为自己不灵活不精明,做牛做马做研发,不找机会跟省长的儿子喝酒,不能成就一番事业的时候,要有心性要忍耐。当事业足够大的时候,在社会中牵扯的资源足够多的时候,自然就会接触各方人士,那时会尽量做出对各方都有利的决定并尽量保持友善和合作的关系。

    我觉得产品如果产生了粘性用户量,验证了产品的需求,并有清晰的商业模式规划,就可以去努力融资扩大规模。如果没达到这个阶段,但有国际上高水平人士的认可和加入,那也是有理据来努力融资的。这样,给潜在的投资人造成的骚扰和困扰也会更少。

    一个好的产品,只要是方向没选错的话,是要投入相当大的精力来研发和推广的。选择方向要慎重,选好要坚持,做事能力要够强,且要不断进步。这样的话,不坚持也是没道理的。

    产品研发,计划安排,调整计划,文档编写,这些属于核心研发。编辑器插件,工具软件研发,这些属于工具研发。网站设计和开发,属于宣发开发。录制推广视频,发表文章,发布公众号,发布帖子,回应群组消息,这些属于市场推广。在过去到现在的这个阶段里,我一个人做所有上述事情,每天时间安排的很满,当然各项具体命令的进度表现得很快,但整个项目来看,就进行的很慢,因为人手不足。

    在水果市场里,个头饱满的水果更容易被人看中。我的产品之前还没投放市场。我的经济条件只能艰苦地聘请毕业生、实习生和兼职人士。而开发工具产品的研发难度,比起一般的“做个网站”“做个 app”,要难上几何倍数的数量级,没有深厚的经验的人是很难做好的。找海内外优秀的工程师加入,是我自始就打算的。项目确实很庞大,所以我确实花了大量时间独自完成了已经很完善的初版功能,开发了产品的门面网站,让这个创业产品在水果市场中,看起来是个吸引人的,令人觉得香甜的水果。这样,优秀工程师的加入,大概不是被忽悠或是被骗,因为看到了成品的样子。

    创业产品要做大,需要很多优秀的各类职业人才的加入,作为服务软件开发者的工具,开发人才尤其重要。我想要有出色的人才,能够担当合伙人、CTO 这样的角色。我能够亲自培养传授技术能力。在非技术的其他的方面,我也要有能一起做事并能够向对方看齐和学习的人。

    项目规划

    到目前为止,产品的初版核心功能已经开发完毕,且软件架构已经为接下来的版本安排做了铺垫,相当长一段时间内不会导致重写。现在我来到了为近几个月的新功能编写文档的阶段,同时也启动了中英双语推广模式。

    在明年年底之前,会上线类似请求发送器和数据库查看器的工具 Teo Studio ,发布多个向后兼容的大型版本更新,以及若干小 bug 修复。

    31 条回复    2023-12-07 09:25:59 +08:00
    xuanbg
        1
    xuanbg  
       2023-12-06 08:13:59 +08:00   ❤️ 2
    那……请问这个东西有什么用呢?
    wbrobot
        2
    wbrobot  
       2023-12-06 08:35:44 +08:00   ❤️ 1
    @xuanbg 浪费我搜一下:就是一个 rust 的增删改写 web 框架。github 有 170 个 star ,没啥活跃度
    MrSheng
        3
    MrSheng  
       2023-12-06 09:01:45 +08:00   ❤️ 1
    “从一个谦虚好学、天赋秉异、不想输给人的入门者成为罕有的坚持专注做好一件事的师匠。”

    最后一个词应该是 匠师 吧。
    impanghu
        4
    impanghu  
       2023-12-06 09:03:44 +08:00   ❤️ 1
    所以 Teo 是干啥的
    blankmiss
        5
    blankmiss  
       2023-12-06 09:05:09 +08:00   ❤️ 2
    字太多 说这么多 连自己的产品都没说清楚
    HojiOShi
        6
    HojiOShi  
       2023-12-06 09:05:18 +08:00
    @MrSheng 师匠是日语的叫法
    MrSheng
        7
    MrSheng  
       2023-12-06 09:08:43 +08:00
    @HojiOShi #6

    日语不应该叫仙人吗,编程仙人?搜大斯内。
    HojiOShi
        8
    HojiOShi  
       2023-12-06 09:12:37 +08:00
    tangtang369
        9
    tangtang369  
       2023-12-06 09:12:40 +08:00
    crud 生成式的 最大两个问题
    - 生成的代码如果不是自己常用写法,其实是很难受的
    - 需要自己定义和语言本身语法不一样的 model
    有没有可能根据自己的业务定义好 crud 的模板文件,定义语言自身的 model ,点击生成就完事儿了,我们内部的 crud 生成就是这样干的
    xinyu391
        10
    xinyu391  
       2023-12-06 09:18:14 +08:00   ❤️ 1
    翻译的吧,罗里罗嗦,不知所云
    encro
        11
    encro  
       2023-12-06 09:22:10 +08:00
    @tangtang369

    看起来是这样。。。

    这张图不知道实现了没有。

    https://teocloud.io/images/servercode.png?imwidth=640

    用起来感觉和 Prisma 差不多。


    个人觉得实现一个 TS 的 django 更好。。。
    DJ 的 model first 和 app 模块化非常棒,专为懒人设计。
    用 TS 实现的目的是:1 ,前后端分离; 2 ,提高界面可定制性;
    codcrafts
        12
    codcrafts  
       2023-12-06 09:25:25 +08:00   ❤️ 1
    写了太多了,不知道你想表达什么。。。
    好歹把你的项目贴出来啊: https://github.com/teocloud/teo
    kakakouwang
        13
    kakakouwang  
       2023-12-06 09:38:03 +08:00
    chatgpt 精简版:Victor Teo 主要想表达他是一位经验丰富、技术精湛的软件开发者,专注于开发工具领域的创新和优化,旨在通过自己的开源项目 Teo 提高软件开发的效率和质量。他的经历涵盖多个编程语言和技术领域,对产品的持续改进和用户需求有深刻理解。
    duanxianze
        14
    duanxianze  
       2023-12-06 09:41:35 +08:00   ❤️ 1
    说了半天 这么多字,不知道你想说啥。。
    star7th
        15
    star7th  
       2023-12-06 09:46:23 +08:00
    但是这 15 万行,有多少行是自己写的?

    总不能把其他依赖也算上吧 ?

    如果算上依赖,我的 showdoc 项目 https://github.com/star7th/showdoc

    node_modules 的依赖就有 N 万行代码。
    twofox
        16
    twofox  
       2023-12-06 09:47:23 +08:00   ❤️ 1
    省流:看着 wordpress 和 postman 大赚特赚,我觉得我也行。我写了个代码很多的项目很牛逼,加入我的团队,我可以给你技术上的指导。快 start 我的项目


    我看完之后,都不知道你的 Teo 是个啥,我还特地去 github 搜了,都不在首页。还是楼上有好心人贴了地址
    你这个语言表达能力堪忧啊,先不说产品,你这个推广太差了
    72MpQOSsJhyLs88N
        17
    72MpQOSsJhyLs88N  
       2023-12-06 09:51:12 +08:00
    颤抖吧,程序猿们。那么多年才 15 万行算啥,看看官媒背书的女英雄

    新华社:解放军“网络尖兵”90 天写 40 万行代码
    April5
        18
    April5  
       2023-12-06 09:53:56 +08:00   ❤️ 1
    wordpress ,postman ,prisma 三者相交的领域是?
    danbai
        19
    danbai  
       2023-12-06 09:55:48 +08:00 via Android
    代码多就不代表代码优秀稳定
    followNew
        20
    followNew  
       2023-12-06 09:58:09 +08:00 via iPhone
    去水深火热吧
    sunsoft
        21
    sunsoft  
       2023-12-06 10:13:18 +08:00
    支持,楼主更像是刚入行的开发者所想的那样,一直做开发下去,只是有些人时间久了没做到或者忘了,而楼主做到了。
    KInG2
        22
    KInG2  
       2023-12-06 10:15:19 +08:00   ❤️ 1
    @wbrobot 我还是没懂,对比于现在流行的 Rust 框架的优点在哪里?
    siweipancc
        23
    siweipancc  
       2023-12-06 11:01:13 +08:00 via iPhone
    一堆废话
    lstz
        24
    lstz  
       2023-12-06 11:30:50 +08:00 via iPhone
    如果 15 万代码都是自己深思熟虑一行行写出来的,那确实有价值,但如果把第三方库或者 mapper.xml, dts 也算进去,那统计的这些数据没意义,自己在骗自己
    lstz
        25
    lstz  
       2023-12-06 11:38:47 +08:00 via iPhone
    抱歉言语可能有所冒犯,我只是想说项目行数代码并不是越多越好,甚至我们要反过来追求简洁代码量,一两拨千斤,用几十行就搞定人家几百行
    sechi
        26
    sechi  
       2023-12-06 11:39:55 +08:00
    @April5 国外创业🐶
    server
        27
    server  
       2023-12-06 11:42:58 +08:00
    ───────────────────────────────────────────────────────────────────────────────
    Language Files Lines Blanks Comments Code Complexity
    ───────────────────────────────────────────────────────────────────────────────
    Rust 136 29068 1274 110 27684 384
    Markdown 5 903 142 0 761 0
    License 1 201 32 0 169 0
    TOML 1 70 4 6 60 1
    YAML 1 18 0 0 18 0
    gitignore 1 5 0 0 5 0
    ───────────────────────────────────────────────────────────────────────────────
    Total 145 30265 1452 116 28697 385
    ───────────────────────────────────────────────────────────────────────────────
    Estimated Cost to Develop (organic) $916,903
    Estimated Schedule Effort (organic) 13.31 months
    Estimated People Required (organic) 6.12
    ───────────────────────────────────────────────────────────────────────────────
    Processed 940447 bytes, 0.940 megabytes (SI)
    ───────────────────────────────────────────────────────────────────────────────
    superliwei
        28
    superliwei  
       2023-12-06 12:23:14 +08:00
    大兄弟你自我感动了。
    wenerme
        29
    wenerme  
       2023-12-06 12:35:41 +08:00
    写文档算么?

    https://github.com/wenerme/wener

    33W 行

    ```
    ───────────────────────────────────────────────────────────────────────────────
    Language Files Lines Blanks Comments Code Complexity
    ───────────────────────────────────────────────────────────────────────────────
    Markdown 3765 324821 56338 0 268483 0
    ───────────────────────────────────────────────────────────────────────────────
    ```

    https://github.com/wenerme/wode
    7W 行

    ```
    scc --exclude-dir={vendor,.gen,node_modules} -M '_test.go' --no-gen . -i ts,tsx,sql
    ```

    ```
    ───────────────────────────────────────────────────────────────────────────────
    Language Files Lines Blanks Comments Code Complexity
    ───────────────────────────────────────────────────────────────────────────────
    TypeScript 1271 73606 6101 12461 55044 7544
    SQL 16 810 104 73 633 77
    ───────────────────────────────────────────────────────────────────────────────
    Total 1287 74416 6205 12534 55677 7621
    ───────────────────────────────────────────────────────────────────────────────
    ```


    核心动力只是想分享🤔
    bydmm
        30
    bydmm  
       2023-12-06 18:04:16 +08:00
    是不是 AI 写的废话
    ljsh093
        31
    ljsh093  
       2023-12-07 09:25:59 +08:00
    我看了下你们 Contributors 有 5 个啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2487 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:34 · PVG 23:34 · LAX 07:34 · JFK 10:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.