cheap medications premarin 1.25mg tablets estrogen contents, cheap medications buy wellbutrin no rx needed, cheap online buy baclofen online, cheap online order flagyl er pay pal online without prescription, pharmacy cheapest where to buy buy doxycycline online, online cheap medications buy overnight delivery lasix fedex, buy cheap purchase diflucan, cheap online buy neurontin online overnight cod, cheap pharmacy fedex acyclovir overnight without a rx, order cheap what is norvasc, buying cheap buy arimidex free consultation,
首页 > Architecture, Developers, FLOSS & Business > 值得关注的开源软件推荐:问答实录

值得关注的开源软件推荐:问答实录

2017年11月15日 发表评论 阅读评论

作者:灰狐 Allen 来源:GitChat

内容提要:

  • 小企业的架构受限于技术人员已掌握了什么,怎么选一个容易兼容扩展的框架?
  • 有哪些能提高开发效率的软件,如何通过开源软件提高开发效率?
  • 如何参与到开源软件的开发中去,开源软件如何评估其在生产环节中的安全性和可靠性?
  • 想问一下学习开源软件的时候,什么时候应该阅读源码?阅读源码的方法是什么?
  • 如何根据自身需要快速辨别一个开源软件是否适合自己?
  • 开源软件有很多,你对每个开源软件都会了解吗?了解到什么程度,而且开源会跨语言、跨平台,请问你如何学习、解决、应对的?
  • 怎么开启开源软件源码学习,在没有文档的情况下,又怎么了解开源软件架构?
  • 本群的主题是开源软件,和我们平常所说的开源项目(如github)是一回事吗?
  • 对于大的开源项目,如何学习和参与?
  • 若自己项目要上传到github上,readme.md要写哪些东西可以吸引其他人看我项目,对我的项目能有足够认知?

问:小企业的架构受限于技术人员已掌握了什么,怎么选一个容易兼容扩展的框架?

答:这个问题可从以下几点来试着去思考:

  1. 开源软件生态系统是一个框架兼容、扩展性的重要特征,Node.js有47.5万、Meteor有近13000个软件包和扩展;
  2. 团队试着开发一些小的扩展和应用来验证使用框架的兼容与扩展性;
  3. 未来可行的话,将公司开发的扩展开源出来提交公共仓库,形成良好工程师文化;
  4. 保持公司架构的兼容和扩展性需要整个研发团队达成共识,而不是某个人的喜好,团队要长期填坑和沉淀,最好更多地参与此开源软件的社区贡献。

问:有哪些能提高开发效率的软件,如何通过开源软件提高开发效率?

答:这个问题可以简单理解为开源生产力工具,通过以下7点来解答。

  1. 框架:一站式框架能极大地提高开发效率,如:Meteor、Angular、Qt、Django;
  2. 编辑器:更高效的编码,如Emacs、Vim;
  3. 消息队列:建立应用的消息总线Hub,消息队列是重要的软件基础设施,因为它解耦、连接各种数据、应用和服务,给企业带来更高的实时响应;
  4. 编程语言:使用函数式编程语言,它能带来更高的生产力;
  5. CI/CD等工具的高效使用;
  6. 敏捷开发、看板、项目管理工具的使用;
  7. Git & GitHub熟练使用等等。

问:如何参与到开源软件的开发中去,开源软件如何评估其在生产环节中的安全性和可靠性?

答:这个问题包含两个问题,首先回答第一个部分:如何参与开源项目。

参与开源软件的开发这个话题有点多、有点大,我这里简单做些整理供参考:

  1. 首先让自己编程水平不断提供,变得更牛,你厉害了,很多开源软件项目都愿意邀请你加入进来;
  2. 模仿大牛,了解他们是如何参与开源软件开发的,他们的博客时常会给出一些意见、建议;
  3. 有机会和开源软件Leader和开发者建立直接交流的机会;
  4. 先从一些小项目、不太知名的开源软件入手,不要一来就要成为Linux核心和Apache开发者(能力强悍的同学就另当别论了);
  5. 评估自己的工作、生活,确保有足够的精力和时间参与到开源软件中去,若你的公司是付工资让你参与的,那就恭喜你了;
  6. 在GitHub上找自己感兴趣且能帮上忙的项目入手;
  7. 开源软件贡献不一定都是参与代码贡献,还有其他很多工作可做,如:找Bug、修复Bug、文档、社区等等。当然,代码贡献成就感是最大的;
  8. 熟悉自由、开源软件文化,将开源软件的学习、使用、贡献逐步变成一种工作、生活方式。

接下来是第二部分:生产环节中的安全性和可靠性的评估。这个话题很广,我想从这几个方面入手:

  1. 先看看这个开源软件成功案例,若有很多大厂在用,软件的安全性和可靠性应该是不错的,若没有什么用户在用就需谨慎评估了;
  2. 然后使用有long-term support (LTS)版本的开源软件进行开发和部署,尤其是GNU/Linux这样的操作系统和核心。LTS在文章中有提及,大家可去看看;
  3. 在Git中使用多个分支进行开发和Bug修复:主分支、功能分支、Bug修复分支等;
  4. 留出充分的测试时间:单元测试、集成测试、验收测试;
  5. 估算和测试负载:可能多少并发用户、一个用户生成的数据量、用户分布等等;
  6. 除了公司内部的安全人员外,可和一些白帽子团队建立长期合作;
  7. CI/CD基础设施的引入和完善,它是软件系统安全性、可靠性的重要支撑和保障;
  8. 在安装部署环节:公有云、私有云、混合云带来安全性、可靠性的不同解决方案;
  9. 这点很重要,若公司的核心关键业务基于这些开源软件,公司尽可能安排专人深度跟进和参与到这个开源软件中来,这是技术保障。举个例子:小米就有4个HBase Committer参与HBase,这极大地保障了公司基础设施的可维护性和可靠性,若没有,如果出了一个难搞的问题,没办法解决,去问原开发者,因为交流、时间等因素总会有耽搁和延迟,而核心关键业务是不能等人的。

问:想问一下学习开源软件的时候,什么时候应该阅读源码?阅读源码的方法是什么?

答:阅读源码是为了更好的理解软件背后的实现机制和细节,为了满足好奇心,什么时候阅读都行。不过,若软件规模庞大,要去看源码就先放一下,先熟练使用它后再说。阅读方法可参考以下几点:

  1. 搜一下是否有朋友在做这件事,若有,可以和他一起,这样有交流,进步更快,GitHub上已有不少对源代码做中文注解的项目,如:带有详细注释的 Redis 3.0 代码 
  2. 若没有借鉴第1点的做法,将你要分析的源代码导入类似GitHub的代码仓库,然后边看代码边写注释;
  3. 买相关书籍,我为了看GCC源代码,买了本《编译系统透视:图解编译原理》。因为工作量太庞大,这个研读过程就先放下了;
  4. 去折腾、重构、编译源代码也是个好方法。

问:如何根据自身需要快速辨别一个开源软件是否适合自己?

答:先想一下你的最基本需求有哪些,就说三点,然后再看看这款开源软件它的特性是否能满足你的这三点需求,这也是我在文章中拟软件特性和要点的原因。

举一个例子,我想找一个特别酷的编辑器,需求点有三个:

  1. 能编程,支持大多数主流编程语言;
  2. 能写文档、支持Markdown等格式;
  3. 能完成我一天大部分的工作。

我选择Emacs,原因如下:

  1. 因为Emacs是迄今为止功能最为强大的文本编辑器,能编写代码、能写文档;
  2. Emacs是模块化的,遵循do one thing, and do it well原则,需要什么就安装什么,你可以像搭积木的方式搭建自己的环境和系统;
  3. Everything Emacs,你可以在Emacs完成你几乎所有的工作:编程、写作、浏览网页、收发邮件、日程、娱乐游戏、它是个人操作系统。

当然,你觉得没有适合自己的,自己可以发起一个开源软件项目,将自己的一个软件作品发布出去。若没有软件作品,也可以将自己心得、整理的文档、博客、各种开放资源以开源项目的方式发布出去,如:开放文档资源索引


问:开源软件有很多,你对每个开源软件都会了解吗?了解到什么程度,而且开源会跨语言、跨平台,请问你如何学习、解决、应对的?

答:对开源软件的关注程度我会在了解、学习、深入等几个方面加以平衡。

  1. 我感兴趣的开源软件,我会从背景、它是什么、为什么是它、应用、开发、部署实施、成功案例、资源等几个方面去大致了解。
  2. 应用到工作中的,我会在第1点这个基础上深入每个环节。
  3. 对生命周期很长的,如操作系统、编译器、数据库等,我会长时间跟进和学习,几年甚至更长时间。
  4. 这么多开源软件、知识、总结等如何管理?我采用的是用Wiki的方式,从2011年我就开始这个工作,每天都会学习、更新自己的学习总结,渐渐的就有了几千个开源软件条目,近4000万的浏览量,有的条目我编辑了几百次,而这个就是我非常关注度的项目,如:PostgreSQL

大家可以通过类似方法总结、整理自己的开源软件知识体系,工作量有些大,更多需要兴趣驱动。


问:怎么开启开源软件源码学习,在没有文档的情况下,又怎么了解开源软件架构?

答:这个问题和问题4很类似,可参考。若作者没有提供架构图的,可试着自己去画一个,若可以,可提交原作者,若他赞同或有修改补充,相信你对此款开源软件的整体架构有了更进一步认识,另外,结合类似印象笔记和Wiki的工具,不断总结你的学习过程。


问:本群的主题是开源软件,和我们平常所说的开源项目(如github)是一回事吗?

答:开源软件和开源项目在这里等同,主要有的开源项目是开放文档或开放硬件设计的。GitHub本身不是开源项目,它是一个托管开源项目进行分布式协作开发的网络平台,它上面托管了大多数热门主流的开源项目。GitHub是寻找、选择开源项目的首选。


问:对于大的开源项目,如何学习和参与?

答:大的开源项目,如操作系统、大数据、云计算平台等,因为涉及东西很多,学习是个很系统、漫长的过程,可参考问题6的学习建议。

大项目,知名度很高,参与的难度会比较高,首先让自己成为编程高手或社区运营高手,通过问题3所提到的8点建议入手。


问:若自己项目要上传到github上,readme.md要写哪些东西可以吸引其他人看我项目,对我的项目能有足够认知?

答:中英文、有简介、快速入门、有图、有案例,许可协议可选Apache或MIT或BSD。另外,参考一些热门项目的介绍。

开源软件许可协议选择。许可证基本考虑:Apache、MIT、BSD、GPL/LGPL等,这几个许可协议应用非常广泛,大家更容易接受和采纳。Apache、MIT、BSD这三个许可协议很相似,都很友好和自由,是首选。

Apache:其主要附加条款就是Apache的商标不与该软件一同授权。因此,如果你对Apache项目的源代码进行了修改并希望发行修改后的版本,你不能把你修改过的软件称为Apache。如:Apache Hadoop的分发版HDP、CDH。

BSD:修改并发布你的软件,却不需要公布你修改后的源代码,BSD许可证允许你将代码私有化并在私有许可证下发布BSD这也是很多防火墙等安全软件基于BSD构建的原因。

MIT:一个没有对代码使用方式有任何限制的许可证,主流的JavaScript项目大多采用MIT许可证,如:Angular、Meteor、Node.js等。

GPL:Linux核心和GNU/Linux各种发行版使用的许可证,此许可证要求对GPL下的代码进行任何修改以及你发布的修改都应该对社区开放,可以说大部分开源软件采用了GPL。

LGPL:是个较宽松的GPL,它用来解决GPL授权库(Library)的问题,如glibc,许多应用程序都依赖这个核心系统运行库,通过在LGPL下授权glibc,商业应用链接到glibc而不用担心该程序被要求在GPL下授权。如果你开发了一个开源软件,也允许商业授权的软件使用你的技术,LGPL是个不错的选择。

另外补充一些大教堂与集市的知识。

大教堂是传统的软件开发模式,开发团队规模较小,在开发开始前,设计和功能要求已全部明确。架构、设计、编码、测试不仅被完全确定,还会被全部写成文档。开发阶段几乎没有循环迭代发布过程,获得外界反馈是在alpha和beta测试阶段,所有人员仅限于公司内部员工。

集市开发会将目前可以完成且实用的功能组成一个版本发布,普遍欠缺一些功能和带有一些缺陷,但没关系,版本的循环发布会非常频繁(常常以小时计算)。采用集市会尽可能早、尽可能频繁地发布软件寻求反馈。任何地方的任何人,只要有好的想法,都可以参与贡献,发现、修复Bug,完善文档,增加新的功能等。当软件维护者认为一切已经准备就绪,就进行正式的发布。GNU/Linux、FreeBSD等重多开源软件,就是通过集式开发模式获得巨大成功的。

GitHub也将集市开发模式推向一个新高度。企业开发思路的转变,要更快的交付产品服务和即时响应客户需求,请采用集市。

给大家提一些学习的建议和总结:

  1. 不要把GitHub作为敏感话题的博客,可作为技术博客;
  2. 广泛和学习各种开源软件,了解的越多越能帮助你更好的选择和判断,但要平衡好自己的工作、兴趣和时间;
  3. 可以从一个非编程的任务开始自己的GitHub之旅,如建立一个技术博客、资源索引,参与已有项目的贡献;
  4. 个人的选型路线:
  5. 企业的选型路线,软件开发和编程语言,不存在谁好谁坏,因为它们都在相互学习也互相都看不起;
  6. 好的程序员之所以出色是因为熟能生巧,想想玩转Emacs的家伙;
  7. 随时都可以学习一门新语言,拓展自己思路,可选择JVM、.NET、Erlang VM虚拟机之上的语言,因为生态系统和相互借鉴;
  8. Lisp和Emacs都是受益终生的投资;
  9. 做技术的不要忘了自嘲:长得一般、做饭一般、家务一般、编程一般……给人一般的感觉,而背后是不一般和惊喜;
  10. 有关数学,每天都浏览一下维基百科,它把数学的整个体系整理的很全;
  11. 多看些非技术类丛书,让自己的思路发散和飘逸,软件需要哲学家,自由社会、自由软件可作为大家的入门书。

本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。


在此感谢异步社区为本次活动提供的赠书《C++Primer Plus(第6版)中文版》。

异步社区是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架。


灰狐会员
欢迎扫码加入我们:灰狐的朋友们
我们关注和讨论的话题有:区块链、人工智能、物联网、编程语言 ...
内容导航



除非注明,开放博客文章均为原创,转载请以超链接形式标明原始出处:开放博客,谢谢。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.