介绍
解释Tiki在历史上如何应对复杂性 推测一下如果/当我们遇到困难时会是什么样子,以及 总的来说,提供如何避免未来困难的想法。
定义概念
-
http://en.wikipedia.org/wiki/Anti-pattern网站 -
http://en.wikipedia.org/wiki/Software_blot -
http://www.zdnet.com/blog/service-oriented/avoid-accidental-complexity-and-96-other-things-every-software-architect-should-know/2436
这方面的例子有哪些?
赫德
弹性搜索
谷歌
-
http://www.wired.com/2015/09/google-2-billion-lines-codeand-on-place(网址:http://www.wired.com/2015/09/google-2-billion-lines-codeand-on-place)/ -
http://m.cacm.acm.org/magazines/2016/7/204032-why-google-store-billions-of-lines-of-code-in-a-single-repository/fulltext -
https://www.youtube.com/watch?v=W71BTkUbdqE -
http://danluu.com/monorepo/
还有其他例子吗?
为什么事情变得复杂?
缠绕性
依赖地狱
扎文斯基定律
应对扎温斯基定律
《变成现实》一书中有37个信号:“别再膨胀了。简单、专注的软件只做你需要的,没有你不需要的。” -
“专注就是说不”——史蒂夫·乔布斯(1997年WWDC)
组合爆炸
在几乎独立的子问题中分解复杂问题本身就是一项复杂活动
我们能应付多大的复杂性?
更多的功能和更多的代码带来了更多的复杂性。 更多 眼球 帮助应对复杂性。 更多的功能会带来更多的用户,从而吸引更多的眼球。 要么该软件的当前用户继续使用它而不使用其他东西,要么长长的功能列表吸引了人们。 “本质上的复杂性是由要解决的问题引起的,没有任何东西可以消除它;如果用户希望程序做30件不同的事情,那么这30件事情是必要的,程序必须做这30件不同事情。”- http://en.wikipedia.org/wiki/No_Silver_Bullet
我们应该注意哪些症状?
创新放缓
提交统计演变
代码库增长速度超过社区
正确看待事物
释放速度变慢或更困难
2009-05: http://doc.tiki.org/Tiki3网站 LTS公司 2009-11: http://doc.tiki.org/Tiki4网站 2010年6月: https://doc.tiki.org/Tiki5网站 2010-11: https://doc.tiki.org/Tiki6网站 LTS公司 2011-06: https://doc.tiki.org/Tiki7网址 2011-11: https://doc.tiki.org/Tiki8网站 2012-06: https://doc.tiki.org/Tiki9 LTS公司 2012-12: https://doc.tiki.org/Tiki10 2013-06: https://doc.tiki.org/Tiki11 2013-10: https://doc.tiki.org/Tiki12 LTS公司 2014-8: https://doc.tiki.org/Tiki13 2015-5: https://doc.tiki.org/Tiki14 2016年4月: https://doc.tiki.org/Tiki15 LTS公司 2016-11: https://doc.tiki.org/Tiki16 2017-7: https://doc.tiki.org/Tiki17 2018-1: https://doc.tiki.org/Tiki18 结果 2018-11: https://doc.tiki.org/Tiki19 2019-6: https://doc.tiki.org/Tiki20
开发人员越来越希望从事其他项目
关于我们离“棋盘的第二部分”还很远的争论
需要付出更多努力的改进; 相反,事情变得越来越容易,因为我们重用了已经存在的代码,并利用了更好的组件(范围经济) 需要付出更多努力的发布; 相反,我们的打包/发布基础设施正在变得越来越好(自动化程度越来越高)。
是的,但最终可能会发生
Tiki模型在处理复杂性方面做得如何?
PHP/MySQL/Zend Framework/Smarty/jQuery以及最近的Bootstrap和Vue.js是我们的基础,我们重用了大量代码。 因此,这减少了我们的工作量。 所有这些都在发展中(尤其是ZF2、Smarty3),所以我们的基础是尽可能防患于未然的。我们将大量工作转移到这些组件上,并通过重用它们提供的功能来避免新的工作。 事实上,Tiki中提供的代码有一半以上来自 外部库 我们不需要维护(尽管有时我们需要帮助-当我们有一些修复时,我们会上游修复)。 请参阅: 源代码行 . 多元化社区,包括商业生态系统 易于贡献 我们的 狗粮 现在真的很好。 Tiki作为一个社区,依靠Tiki进行协作。 例如:我们的bug跟踪器一开始不是很好,这是一个额外的工作负载(不仅是为了修复bug,还为了改进bug跟踪器)。 但现在,Tiki作为一个应用程序是强大和成熟的。 因此,我们的社区比功能/集成性较差或无法根据需要定制工具的社区效率更高(所有其他条件都相同)。 维基百科(Wikipedia)证明,“维基方式”(WikiWay)在处理复杂性方面确实很好。 很多人从来没有想过维基百科会像现在这么大。维基是数量和增长惊人的一个例子。 它变得越来越大、越来越复杂,但随着人数的增加,他们可以解决更多的问题。 维基百科需要支付巨大的服务器成本。 在Tiki的案例中,即使将功能/开发人员/用户数量增加一倍,也不会造成重大财务风险。 我们还需要一些专用服务器。 除了Google Summer of Code之外,所有对Tiki的贡献都来自社区(通过咨询公司、IT部门等)。 GSoC的贡献无疑使一些功能看起来比其他功能更快,但在引入后,它们是社区维护的,没有任何外部资金。 -
可维护性 -
可升级性 -
适应性 Tiki可以在不同版本之间进行重大更改,而不会放弃社区的一部分。 重构的例子包括 Tiki3中的主题 Tiki3中的jQuery Tiki4中的权限 Tiki5中的UTF-8处理 Tiki7中的跟踪器 Tiki8中的评论 Tiki13中的引导 Tiki的Vue.js 21 托多:(这里将添加其他最近的重构示例)
-
尽早发布,经常发布 -
解释一下Clay Shirky,可解决的问题不是功能过载,而是更好的过滤器。 -
简介.tiki.org
一体式模型降低了复杂性
风险在哪里,如何减轻风险?
活跃的Tiki社区成员非常清楚 问题 是 需要定期进行重构和清理。
分支太多。 裁判: 生命周期 分支越少越好 -
翻译分支策略
新开发人员很难加入 我们可以有更好的医生和更有组织的指导 -
新员工涌入组织似乎并不会增加其软件的缺陷,可能是因为新员工一开始就有简单的任务。
快速发布时间表,“失去”社区的一部分。 我们有LTS版本。 请参见 生命周期 .
社区SWOT
web应用程序变得越来越容易
更好的整体生态系统(更好的浏览器、更快的JavaScript、HTML5、CSS3)使事情变得更容易。 Git vs SVN vs CVS PHP8与PHP7、PHP5与PHP4、jQuery与手工编码JavaScript等。 所有这些组件通常都具有良好的向后兼容性。
硬件更快,可以处理更多(摩尔定律)。 互联网连接更容易获得、更快、更可靠。 当我们 2004年开始我们的电子表格 ,浏览器速度很慢,很难实现跨平台。 最近的 使用jQuery进行的修改是日夜对比 . MapServer与GoogleMaps/OpenStreetMaps的对比是另一个例子,事情变得简单多了。 使用Bootstrap框架进行响应式web设计是 jQuery手机 +现代手机,在公园里散步 与支持WAP手机相比 . 几年前,我们尝试添加WebDAV支持。 它起作用了,但速度太慢,几乎无法使用。 现在,我们又回来了 eZ Components的WebDAV实现 UTF-8支持已不像2002年Tiki开始时那样!
那么现在呢?
剩余用例
Wiki套件
不同的社区 不同的存储库 不同的技术 不同的发展哲学 不同的发布时间表 等。
为项目带来社区和经验。 它们处理自身的内部复杂性。 我们并不是要求人们更改他们的客户端操作系统,因为所有客户端应用程序都是跨平台的。
-
http://wikisuite.org/Component-criteria 尽可能使用相同的技术。 ClearOS是WikiSuite的选择,因为它是类似于Tiki的PHP/MySQL/jQuery,而不是Perl中的Zentyal。
其他想法
如果有一张历史图表就好了。 我怀疑这将表明新功能的数量正在放缓,我们的代码库复杂性也在控制之中。 代码行 首选选项数量 活跃开发人员的数量(如Openhub.net)
相关链接
-
https://joind.in/talk/view/3484 -
http://www.shirky.com/weblog/2010/04-the-collapse-of-complex-businesss-models(http://www.shirky.com/weblog/2010/04-the-collapse-of-complex-businesses-models)/ -
模块化设计和复杂工件的开发:自由/开源软件的经验教训(2003) 亚历山德罗·纳杜佐和亚历山德里·罗西 -
http://css.csregistry.org/tiki-index.php?page=What%20are%20Complex%20Systems%20? -
复杂性 -
关于复杂性的争论导致了Drupal分叉 -
http://thenextweb.com/enterpreneur/2014/09/06/complexity-enterprises-bigest-debt/ -
https://signalvnoise.com/the-majestic-monolith网站/