中国程序员的为什么都在公司上班，做独立开发者的少呢？
这个问题牵涉的点太多了，突然有兴趣想回答一下。 我个人情况，做过开源工具、做过独立项目、做过外包、目前大厂打工，题目涉及的坑都踩得差不多了，讲一下我的感受吧。 所以现在流行的方式，都是外包定制或者卖云服务。 我们来看一下独立开发者需要哪些能力，掌握这些能力的成本是多少。 讲一个我独立做的项目例子：闪点清单。这个软件，看起来其实还挺简单的，跟小红书、飞书一类的功能丰富度没法比。我们来看下，这个简单的软件，都需要多少能力。 Part 1 首先PC端软件，你要支持Mac、Windows，你可以选择OC和C#，但是开发成本会非常高，我们选择了一个跨平台的框架：Electron，在这个技术体系里，你需要懂全部的Web技术栈、Node技术栈、Electron技术栈，你还需要了解Mac构建发布体系、Windows构建发布体系，比如Window7下使用兼容模式，你得了解NSIS怎么识别系统怎么写注册表。 Part 2 然后看移动端软件，你要支持Android、iOS，可以选择Java和OC，但是成本会非常高；可以选择Web混合开发，但是体验会非常差，差到用户不想去用你的APP。所以我们选择了较新的Flutter平台。然而也不是只写Flutter（Dart）就行了，你需要了解本地数据库框架、了解iOS和Android的通知、远程Push、各种设备API、甚至是用C++写FFI等等。 比如搭建数据库，业务形态用NoSQL更合适，我们期望能用成熟的realm（或者mongodb等等），但是因为还没有Flutter版本，自己开发需要自己写C++通过FFI链接，这又是一个新的技术体系，成本过高；所以我们调研了很多没办法最终采用了还远远不成熟的sembast数据库。 Part 3 然后看看后端。我们采用了Node技术栈，使用了NestJS框架，整体还算较平稳，不过你仍然需要了解数据库设计、NestJS框架、ORM框架、缓存机制，然后还有各种运维问题。 Part 4 做到这些，也只是第一步。如果想把事情做好，能做的太多了。 数据同步怎么做？多端数据更新如何合并？OT技术了解吗？了解了敢做吗？ 富文本编辑、文件上传是不是要搞一下？ “下午3点提醒我开会”，添加这句话，按常理应该在3点提醒用户。这个功能怎么实现？用NLP还是用编译技术自己写Parser？ 我们最终用编译技术写了一个Parser，这个方案很便于识别扩展，但这需要你了解编译原理、常用的编辑工具，并合理设计你的文法。 我们还有20多个从用户收集来的大需求，要一个个去完成。 Part 5 总结下 把相关的技术都学习完，3年基本不够；把相关技术都用熟练，5年的人绝大部分做不到；然后再把这些需求开发完，2年的时间是不够的。 所以这个成本有多高。 从目前大厂的情况来看，分工都比较细：前端的人大部分只懂前端，Native的人大部分只懂Native，后端的人大部分只懂后端，运维的人大部分只懂运维。一个5年的前端不知道SQL怎么写，是一个很正常的事情。 所以大厂培养的是专才，而不是全才。独立项目需要的是全才。 而小厂的人，涉足面会较广，但是从身边接触的人来看，技术深度都有些欠缺，难以支持独立的项目。毕竟技术稍微好点的，都会选择跳去大厂逐步成为专才。 没自己做过独立项目的人，会觉得我项目开发完了就要成功了。然而其实这只是个开始。 你怎么把你的项目推广出去？写篇文章等着来1w流量，结果只有10个点击。花钱投放广告，钱花出去用户没来。 大部分独立开发者，对增长、运营没什么概念。但是对独立项目（或者创业项目）来说，这才是一个项目能不能成的关键。 增长、运营、产品，都是很重要的能力，每一个的重要程度都要大于开发。 目前国内的外包市场，利润率都比较低。30w的项目，去掉各种成本，能挣10w已经很好了，但是可能需要你投入3-5个人做几个月。所以这些钱能不能养活你自己都是一个问题。 有活的还不错的团队，一般都是在这个行业做了很久，有了很多国企或者大厂的资源；还有就是部分学生或者刚毕业不久的，对价格期望不高的。 目前来看，外包挣钱，不如自己好好锻炼技术，跳槽到更大的平台涨薪带来的利润多。后者还有个好处，就是有可持续的收益，也会让你自己的抗职业风险能力增强，因为是对你自己自身的持续投资。当你的年薪比同阶段人多出30w、50w的时候，就能深刻感受到这一点了，这么稳定的高回报率，外包项目几乎是给不了你的。 曾经一直以为大家做技术是因为梦想，想做一些不一样的事情。后来发现大部分对自己的要求还是生存，甚至是毕生的追求。 大部分人是不需要有目标就可以活的坦然的；还有些人维持目前的工作现状，已经用尽力气了。 所以他们为什么还要做独立开发者？