百科问答小站 logo
百科问答小站 font logo



为什么要开源? 第1页

  

user avatar   sun-tian-ren 网友的相关建议: 
      

在不太久远的过去——大概也就是十多年前,互联网精神代表着自由、平等、共享——人人为我,我为人人。维基百科、CC协议、FTP服务器、P2P(不是那个臭名昭著的理财模式),包括开源软件,都是那个时代的产物。

但在今天的移动互联网大潮中,主流思维已变成了商业化、消费主义、版权、信息壁垒。无怪乎新时代的互联网子民,已经不理解为什么有人会无私地奉献。“一定从中得到了什么利益”,他们揣测道。


user avatar   pfdlw 网友的相关建议: 
      

开源社区的贡献者,都是有国际主义精神的一群人,一定程度上是世界公民。

他们的知识和技能可以让他们保持局部领先,但是为了拓展人类的知识边界,为了人类整体的福利,他们将工具或者知识开源出来,别人就可以在他们的基础上工作,人类进步的速度就加快了。

他们放弃了自己的局部领先优势,选择人类整体的福利,不可谓不伟大。

知乎上的很多答主也是这样的表率,他们分享的知识与见解直接或者见解的改变很多人,甚至改变人的一生。与他们贡献相比,收获的一点名利就显得太微不足道。

他们的例子有很多,我心中立马可能想起好几位,但为了避免造成棒杀或者抱团的嫌疑,就不列举他们的ID了。

总之,向所有的共源知识贡献者致敬,向国际主义者致敬。


user avatar   kanagawa 网友的相关建议: 
      

题主问的非常好,尤其是从功利的角度来看为什么要开源。我把这个问题分成三个回答你:

从无私的角度看,为什么要开源?

从自私的角度看,个人为什么要开源?

从自私的角度看,公司为什么要开源?

从无私的角度看,为什么要开源?

1. 建立社区:可以这么说,如果没有开源社区,苹果,谷歌,Facebook都不会是现在这样。如果没有Linux,现在互联网的格局简直无法想象。为了让更多人能够使用优秀的产品,需要有人来愿意把自己的产品免费给他人使用。很多开源社区的贡献者都是为了建立,维持这样一个互助互利的社区而不断努力的。

2. 帮助他人:开源一个很美妙的地方就是,别人不用花时间解决一样的问题。当你看到你的一个大问题已经有人做了开源项目的时候,你一定感觉如释重负。同样,有人感谢你的开源项目帮他们解决了一个大问题,真的是种很美妙的成就感。

3. 结识朋友:开源社区中经常能遇到很多志同道合的好朋友。你帮我改代码,我帮你加功能,说不定两个人就认识成了好朋友。我和我现在的一位导师和几位朋友就是在贡献开源项目的时候认识的。


好,下面来说说不明显的:

从自私的角度看,个人为什么要开源?

1. 提升代码质量:开源是提升个人代码质量的好方法。这个有两个方面:首先,如果你知道你的代码要给别人看,你会不自觉的把代码写的更干净一点,多加点说明。其次,开源之后别人会建议怎么改(如果你的项目有一定影响力),给你建议的人多了,你也大概就有概念怎么把代码写的更好了。

2. 展示个人代码:如果你在找工作,这个很可能会是你的主要动机。公司实际上很好奇你写的代码质量如何,但是光从1个小时的面试实在看不出太多。所以很多公司会非常喜欢看你的开源项目,来评估一下你的代码质量如何。同样,如果你面试的时候告诉公司,“我有个开源项目,你们可以去看看”,这将是个不错的加分项。

3. 建立个人品牌:如果你足够厉害,把一个优质项目开源是个迅速提升影响力的好方法。很多在大公司工作过的顶级工程师,我们都是通过他们的开源项目认识的。git的发明人,Linus Torvalds,就是一个好例子。一个工程师如果在工作之外想要树立个人品牌的话,写一个高质量的开源项目是个相当好的选择。

4. 备份个人项目:其实很多人把项目放到Github的时候根本没想这么多。。。他们只是想把家庭作业,代码练习啥的备份到网上去而已。。。其实Github当中绝大部分项目都是这种实际没啥用的代码备份(只是Github没让你看到)。。



从自私的角度看,公司为什么要开源?

1. 树立品牌形象:公司与个人开源的动机不同。公司开源很多情况下是为了提升外界对公司的形象认知。任何一个大科技公司,肯定用了多多少少用了开源项目(Linux,至少吧?)。如果连一个开源项目都没有,这很容易给人造成,“这公司总是索取,却不回馈给开源社区”的形象(尤其在美国)。

2. 发掘潜在员工:比如,我读了谷歌的Android的代码,发现里面有个大安全漏洞,然后我提交一个修改把漏洞给补了。你说谷歌想不想拉起我去工作?很多公司一个很好的招聘渠道是开源项目的贡献者。如果能在公司开源项目做出有意义贡献的话,这个对于公司来说是比面试好很多的能力证明。

3. 实现额外功能:这点实际上很有意思,有的公司/项目实际上有很多想做的小功能,但是没时间也没人力去单独做。这个时候开源的力量就体现出来了,项目开源之后很多时候能吸引到开源贡献者来做一些自己感兴趣,项目想要,但项目没时间做的feature。我之前在Socket.io做的时候写的就是这样的一个小feature。

4. 扩大影响范围:公司开源项目的质量,很多时候能反映公司的影响力。所以硅谷的很多大公司,都有一些厉害的开源项目。一方面是回馈社区,一方面是展示公司的影响力和代码质量,吸引更多人才。同样,如果一个公司很希望自己的一个产品有更大影响力的话,开源是个好方法。苹果的Swift就是个好例子。Swift开源之后,能够用在不少iOS之外的领域。说不定之后我们还能看到用Swift写的网站架构。

5. 用作战略武器:开源项目还可以作为公司的战略武器。最好的例子就是谷歌的Android。通过开源和病毒式的传播一下追上iOS。这里面有很多弊端(比如碎片化严重),不过谷歌这么一招给了开发者十分大的力量,Android一下成为一个和iOS比肩的选项。


如果你好奇全职的开源工程师如何赚钱的话,这是我之前的答案:

世界顶级开源软件工程师,他们如何谋利? - 编程

最后,也希望题主能继续为开源社区出一分力 :)


user avatar   hei-hun-bai-xin 网友的相关建议: 
      

2021年08月24日,再更新一波。

今天闲着没事逛了下论坛,突然发现Github推出了一款AI编程软件Copilot,我很好奇于是搜了下,发现实现原理应该是通过用户输入一段要实现的功能,然后通过算法去寻找具备相同功能的代码,然后复制粘贴。

哈哈,这功能太有意思了,这意味着开源项目越多,开源功能数量越完善,那么使用这款软件就越便捷,而大部分软件开发,抛开UI定制,其功能大多相同,无非展示与编辑。

以前,要做一款非常简单的App也需要程序员。

现在,如果你要做一款简单应用或游戏就可以使用unity+插件的方式进行游戏开发,如果功能超级简单,你甚至不需要编写代码,只要你熟悉unity软件的操作即可。

未来,我不知道,或许是大部分功能都可以通过AI人类语言分析匹配到对应模块,然后将其组装起来就行,然后少部分需要定制的模块自行开发。

嗯,就如同乐高积木一般,企业的维护成本大大降低,程序员的工作量大大减少,这是不是支持开源的人想要的未来?

也许这就是未来大部分的软件开发模式:

       // 基于upd实现IM系统 ...AI代码生成  // udp传输加密 ...AI代码生成  // 本地存储临时文件 ...AI代码生成  // 本地存储配置文件 ...AI代码生成  // 用户登录UI ...AI代码生成  // 好友列表UI ...AI代码生成  // 聊天界面UI ...AI代码生成  以上主要功能由产品经理老王实现,最后一些需要定制的模块需程序员小张开发。     

对于说被淘汰是因为自己学习效率低下导致被行业抛弃的,我想说的是,我同意你的看法,行业的更新换代这是必然的规律。其他行业也有,但周期按十年算,这段时间大家都有足够的时间去应对,但IT这个行业,这么说吧如果脱节两年,除非你已经在某个行业里建立了自己的壁垒,要不你很难找到工作,而这最直接的原因就是开源社区的逐渐成熟,让更多更好的人才有了展现自己的平台,相对应的就是跟不上节奏或不愿意主动降低待遇的从业者失去了他的工作。

我们来看看这个行业经历了什么,大伙最早是卖技术,然后是卖项目,之后到了送技术,再然后就是整个项目Github免费下,到了现在居然还催生出来了淘宝Github点Star的业务,是什么让大家变得这么贱,赔本赚吆喝?

工业革命不可怕,羊吃人不可怕,失业大浪潮不可怕,可怕的是明明结果就摆在眼前,为什么还有这么多人义无反顾的成为祭品。

至于直接攻击我本人的,我报一下我的工作经验。

5年Android/IOs开发经验,带过16人的团队,带过上线的项目有4个(不算普通打代码、技术支持、架构设计等,仅仅算我带队开发时的项目),其中还在运营的项目有2个。

在ReactNative出来之前你们还在使用PhoneGap做开发的时候,我就参与过Lua脚本的跨平台开发框架的架构搭建这里包括脚本引擎的移植以及性能调优还有组件化模块集成,目前这套架构在某行业外包工程中一直在使用。

对于基于ffmpeg的客户端流媒体优化这块我自己有一套成熟的解决方案,其实ffmpeg内部的东西也被我改得七七八八了,某流媒体公司倒闭前还在用。

前公司自己的推送系是我搭建的,从Server端到Android/IOs的SDK,离职前上线,百万级别消息推送没什么问题,在没有联系手机开发商拿权限的情况下,客户端单App离线到达率58%左右,在线到达率98%,耗电量也与目前主流的第三方相差无几。

我不知道说我技术平庸的人是谁给你的勇气去贬低一个你不曾了解的人?并且目前我已经赚够了自己的原始积累,开始享受平凡的28岁退休生活(积累虽然不多,但按照我的道系生活方式,花到死还是没什么大问题的),对于开源会导致的后果已经与我无关了(但愿无人零售发展别这么快,不然我还得更新设备)。

再说一次支持不同角度的讨论,但不会跟任何一个上升到人身攻击的人浪费喉舌。


以下是原答案:

因为资本恨透了旧规则,设计一个螺丝都需要看看有没有人申请过专利,每次做一件别人做过的事情也需要付出别人付出过的成本,所以他们提出了开源,但你会发现,提出开源的公司,他们的核心代码你不会再任何开源社区上找到。

以前我也是一个天真的小男孩,幻想着开源有多么好,我能得到社区无偿的帮助,我能通过社区秀一秀我的代码。我能成为一个优秀的程序员,从此愉快的与心爱的代码一直走下去。自从有了开源社区,我需要的功能开源社区上都有,我只需要经过少许的修改之后将他们组装在一起即可,我省了很多时间去写一些社区里已经存在的功能,这简直是上帝赐予程序员的福音啊!

渐渐地我发现了问题,随着时间的推移开源工具越来越完善,我的工期越来越短,我写“有趣”代码的时间越来越少,因为隔壁的小张他也用开源工具,如果我不打算使用那些开源工具,那么我的工期将会是他的两倍,季度考核我会成为垫底的人,所以我不得不放弃自己的爱好而去使用开源社区“成熟”的工具,这时我对代码越来越烦躁,我写代码的愉快感越来越低,我感觉自己就是一个搬运代码的工具。

时间慢慢的过去,突然有一天,开源社区的F公司发布了一款名为R的跨平台的开发框架,社区沸腾了,大家跃跃欲试,我也不例外。当我再把公司的一个比较简单的项目移植到R框架内后我震惊了,R框架减少了一半的开发人员,减少了很多的兼容性问题,大大的增加了开发的效率。当我把这一框架测试的结果在技术骨干会上发表后,技术总监也震惊了,之后我们围绕着这个框架展开了一场又一场的技术讨论。

若干月后,R框架发布了第一次release版本,于此同时我们公司也决定让我带领团队将公司主营项目移植到R框架上,经过两个月的艰苦鏖战后,移植App正式发布了,我们看到了程序安然无恙的在线上运行都轻松的吐了一口气,终于解放了,再见了版本适配,再见了UI适配,我突然觉得今后的工作会变得无比的轻松。

到了年中,部门突然宣布将要做一次部门内部人员优化,原因是公司目前无力扩张业务,且R框架降低了开发难度,无需那么多技术员工对项目进行维护了。经过一月的调整,移动部门从之前的20人团队缩减到8人,除了我和老李负责做一些底层设计交互,其余的同事都使用R框架进行业务开发。

经过这一连串的事件后,我发现,我的工作时间没有减少,但公司省下了一笔钱,12位同事因为R框架丢了工作。无产阶级失去了他的面包,资本家拥有了更多的资本去投资,而我所涨的薪水并不是这是12名同事的总和。剩下的人除了我和老李,其他的同事连在正式项目中接触native的代码都成了奢望。

这两年G公司推出了他的F框架,性能更好,代码更简洁,天然支持热更,今年H公司也推出了他的H框架,这套框架更牛(虽然只是PPT)。MVC也渐渐地被MVVM、MVP取代,为了降低开发成本,App内大量地方使用到了H5,这部分人多数是刚刚毕业的,并且有一部分人从入职开始就已注定熬不过试用期。

行业内渐渐地从技术主导慢慢的转向成为业务主导,现在大家更关心的是用户数量、用户黏度,代码再烂不重要,一期上线拉融资,二期招大牛重构,三期大扩展,四期大裁员,铁打的营盘流水的兵。


开源带动了生产力,而这并没有为从业者带来应有的物质提升,相反生产力的提升却加速了从业者的淘汰速度,我估计大多数支持开源的从业者也是如下图一般想的吧。。。



user avatar   rocwon 网友的相关建议: 
      

开源是一种商业模式。


user avatar   si-ma-yue-17 网友的相关建议: 
      

农民工穿着简陋有什么问题?一个卖衣服的店,还不让穿旧衣服进去?那是不是得带礼帽,穿燕尾服才算得体?建议改成进店需要开收入证明。

当然,耐克嘛,正常操作,耐克现在真当自己在卖奢侈品了,反正有鞋孝子买。接下来的剧情我也看过,战神归来,一声令下,十万鞋孝子把耐克搬空。

目前只是农民工一家之言。不过8月13日的事,到现在7天了,耐克没有做出任何回应,既然不屑于对中国人解释,那就只能当这就是事实了。耐克就是这样,一边赚你的钱,一边看不起你,心里总觉得这是在赏赐你。

这个牌子已经摆明了看不起中国人和中国市场,买回家里放着晦气,穿在身上出来丢人,让它凉就好了,何必还去给它送钱呢?


user avatar   huangshang98 网友的相关建议: 
      

我来给你回答这个问题吧。

其实这个问题不难理解,你要想理解什么是逻辑思维,你就首先要明白什么是逻辑。

逻辑是一个数学概念,逻辑这种数学概念主要包含了两种数学运算,一种叫做是非运算,也就是在0和1中间做与或非运算,这种运算叫做逻辑代数或者叫做布尔代数。与或非是三种最基础的运算方式。另一种是集合运算,例如一个班级的所有学生可以形成一个集合,其中男生可以单独形成集合,女生也一样,而班级的集合是男生和女生集合的和,一个集合如果没有成员,那这个集合就是空集。我们初中都学习过集合的概念,我就不详细说明了。

上面这段话我大概说明了一下什么叫做逻辑,我真正要告诉你的是,所有的数学法则都是用逻辑的运算法则来结构在一起的。而我们真实的世界是使用数学法则来运作的。换句话来说,运用正确的逻辑分析,你可以把世界上所有的事物都互相联系起来,形成逻辑的闭环。

而符合现实的逻辑闭环,就是科学体系。科学本身有两个要求,第一要求要符合现实世界,第二要求就是符合数学法则。可以看出来,数学和逻辑本身是没有差别的,严格来说,这两者是同义词。逻辑是数学的一个分支,而所有的数学都要依靠逻辑来支撑。逻辑是数学的核心,如果你认为他们俩是一回事,也不算错。我就是这么认为的。

因为现实世界是依靠数学法则来运作的,所以,你要想正确的理解现实世界,你就必须把自己的思维调整到用数学方法来理解世界这个频道上来,而这,就是逻辑思维。

希望我上面说的你已经能够理解了,然后我就可以继续说下去。

那么怎么判断一个人的逻辑思维是否清晰呢?

要说明这个问题,就必须提到一个新的概念,叫做知识结构。每一个人都是拥有自己的知识结构的。在他的领域范围之内,他是可以拥有清晰的逻辑思维的,但超过这个范围,一般的人都无能为力。

差别只在于,这个人的知识结构的范围有多大,拥有多大的覆盖面积,还有他拥有几个知识模块而已。这里我又提到了一个知识模块的概念。我必须说明一下。

人类的大脑,在认识现实世界的时候,有两个基础功能,这两个功能是分类和寻找规律。人类大脑试图在普遍的事物中需找规律(所谓的寻找规律,就是用逻辑方法理解事物),以便于理解,但这往往是不能做到的,于是不得不把能够互相理解的事物归类在一起,形成一个知识模块,一般人都有若干这样的模块,人类依靠这些模块来认识和分析客观世界。

这段话可能很抽象,必须举例子了。

例如人类观察地面上的物体运动,发现凡是你不推车,车就不走,普通如此。于是人类认为,因为力的作用,物体才运动起来。没有持续的力,物体就会停止下来。这就成为一个知识模块,固定到人类的大脑中。相反,人类观察天上的星星,发现没有人推动,星星还是在运动,于是人们认为,天上是和地上不一样的,是另外一个领域,这就是分类。人类把运动分成了地上的运动和天上的运动两类,分别用不同的规律来总结。寻找规律和分类是人类大脑处理现实世界复杂关系的两种方式。而我上面说的这些就是古人理解的力学体系。

我们现在知道,天上的运动和地上的运动其实是拥有统一的规律的,这个规律就是牛顿力学系统,因为牛顿,这个分类被取消了,成为统一的一个模块,这叫做模块的融合。人类科学的进步,就是把这样一个一个的零散模块融合成一个模块的过程。

当然这是对人类整体来说的,对于单个的人来说,即便给你一本物理课本,你可能还是学不懂,你的思维中还是一个一个的模块,力学是力学,光学是光学,热力学是热力学,各自是独立的模块。但对于真正看懂的人来说,他们其实是一个整体。整个物理学是一个逻辑的整体。

什么叫做知识结构?所谓的知识结构就是一个人头脑中的模块的覆盖范围和模块的个数。模块个数越少的人,他的知识的互相融合就越彻底,思维系统就没有缝隙。单个的模块覆盖的范围就非常的大。例如,其实物理和化学是可以有机融合的,和生物学也有联系,而数学是所有学科的共同母亲。如果你真正把书读透了,就会把这些都融合成为一个模块。而在这些模块的覆盖范围之内,你的思维就绝不会有矛盾,上面我们已经说了,世界上的万事万物是可以依靠逻辑闭环完美链接的。你能做到的你的头脑中的一个模块的覆盖范围越大,那你拥有的逻辑思维能力就越强大。知识体系越完整的人,他头脑中的模块的数量就越少。相反,一个人的头脑中的模块越多,说明他的知识结构越凌乱,这种人往往面对具体问题会陷入凌乱之中。

当然,我们人类还不能做到让整个大脑成为一个模块统一运作,因为我们的科学体系本身还做不到这一点。因为物种起源的问题没有解决,物理学和生物学还是不能逻辑统一的,同样很多社会学科和自然学科是独立运作的。但真的有些人可以让自己的大脑只拥有少数几个模块,就足够应付一切事物了,那这种人,就是那种拥有强大的逻辑思维的人。

你现在理解什么叫做知识结构了吗??

分类机制有什么好处呢?分类是一种偷懒的方法,也是一种不得不用的方法,因为人的能力有限,不得不做分类这种处理。凡事找不到事物互相联系的规律的就分类,然后大脑就可以正常运作了,用来指导生活有时候也够用了。但问题是,总有些问题是我们不知道是使用那个模块来处理比较好的。于是这时候人就处在矛盾之中,因为他自己的矛盾之中,他的思维方式就不可能完整,最终的表现就是这个人逻辑混乱。

我们的生活中其实常常看见这种人。明明是有互相联系的两件事情,但他使用两个模块来分别处理,于是这两件事的逻辑链条就被斩断了。他自己的思维混乱还不听你说,因为在他的知识结构中没有办法理解两件事之间的逻辑关系。

这种事情往往发生在意识形态领域,因为在社会领域人类的知识实在是太凌乱了,本质上人是选择自己愿意相信的去相信而已。对自己不愿意相信的信息视而不见而已。

我的这篇东西可能写的有一定的深度,要正确理解可能有难度。不过我相信会对你有好处,因为你在别的地方是看不到这种知识的。

怎么判断一个人的逻辑思维是否清晰?首先你自己要拥有清晰的逻辑思维能力,否则胡搅蛮缠的那个人可能是你,其次,只要你自己拥有正确的知识体系,你是很容易理解对方的思维方式的。你甚至能正确判断对方的思维方式,判断出他的知识结构和他的模块的运作方式。

有经验的人是能够快速看懂一个人的,当然,这是一个积累的过程。拥有这种能力并不容易。

我在这里要说的是,世界上各种各样的人都有,不要因为你觉得自己是正确的就和别人辩论。 要改变一个人是非常难得,要改变一个人的知识结构是非常难得,除非他自己有这种意愿。但一般成年人都不会有这种意愿的。所以要学会和各种各样的人打交道的方式,这本身就是情商。

我给你的结论是,

通过谈话判断一个人的思维是可以做到的,不光能判断出他是否拥有逻辑思维,甚至能判断出他的知识结构,知识模块等等。但拥有这种能力是一种长年累月的积累,你是否拥有这种积累才是关键。

以上!




  

相关话题

  用晶体管自制一个加法器,需要什么元件,该怎么做? 
  如果让无所不能的神来写代码,是否能写出没有bug的软件? 
  瞬间之中真的包含永远吗,瞬间之中怎么包含永远? 
  DOS 界面是如何制作的? 
  假设开发某款软件1个程序员10天可以做好,那么找10个同等水平程序员一起做1天能否做好? 
  怎样让git在linux始终显示status? 
  我们是否应该反对设计模式,它是否让代码变得多而且难阅读? 
  能否仅依靠机械(不包括电路)实现可编程图灵完备的通用计算机? 
  为什么很多IDE无论写一个多么小的程序都一定要创建一个project? 
  编程时怎么把函数当做变量使用? 

前一个讨论
人工智能是当前最好的计算机专业吗?
下一个讨论
而立之年,喜欢电影艺术,想从IT转行做电影研究,这个想法是不是很不切实际?





© 2024-05-25 - tinynew.org. All Rights Reserved.
© 2024-05-25 - tinynew.org. 保留所有权利