Date: Mon, 02 Dec 2019 22:00:00 -0500
<div class="wp-block-jetpack-markdown"><h3>Summary</h3> <p>Starting a new project is always exciting because the scope is easy to understand and adding new features is fun and easy. As it grows, the rate of change slows down and the amount of communication necessary to introduce new engineers to the code increases along with the complexity. Thomas Hatch, CTO and creator of SaltStack, didn’t want to accept that as an inevitable fact of software, so he created a new paradigm and a proof-of-concept framework to experiment with it. In this episode he shares his thoughts and findings on the topic of plugin oriented programming as a way to build and scale complex projects while keeping them fun and flexible.</p> <h3>Announcements</h3> <ul> <li>Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.</li> <li>When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, scalable shared block storage, node balancers, and a 40 Gbit/s public network, all controlled by a brand new API you’ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. Go to <a href="https://www.pythonpodcast.com/linode?utm_source=rss&utm_medium=rss">pythonpodcast.com/linode</a> to get a $20 credit and launch a new server in under a minute. And don’t forget to thank them for their continued support of this show!</li> <li>You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers you don’t want to miss out on this year’s conference season. We have partnered with organizations such as O’Reilly Media, Dataversity, Corinium Global Intelligence, Alluxio, and Data Council. Upcoming events include the combined events of the Data Architecture Summit and Graphorum, the Data Orchestration Summit, and Data Council in NYC. Go to <a href="https://www.pythonpodcast.com/conferences?utm_source=rss&utm_medium=rss">pythonpodcast.com/conferences</a> to learn more about these and other events, and take advantage of our partner discounts to save money when you register today.</li> <li>Your host as usual is Tobias Macey and today I’m interviewing Thomas Hatch about his work on the POP library and how he is using plugin oriented programming in his work at SaltStack</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>Can you start by giving your definition of Plugin Oriented Programming and your thoughts on what benefits it provides?</li> <li>You created the POP library as a framework for enabling developers to incorporate this pattern into their own projects. What capabilities does that framework provide and what was your motivation for creating it? <ul> <li>How has your work on Salt influenced your thinking on how to implement plugins for software projects?</li> <li>How does POP fit into the future of the SaltStack project?</li> </ul> </li> <li>What are some of the advanced patterns or paradigms that the POP model allows for?</li> <li>Can you describe how the POP library itself is implemented and some of the ways that its design has evolved since you first began experimenting with it? <ul> <li>What are some of the languages or libraries that you have looked at for inspiration in your design and philosophy around this development pattern?</li> </ul> </li> <li>For someone who is building a project on top of POP what does their workflow look like and what are some of the up-front design considerations they should be thinking of?</li> <li>How do you define and validate the contract exposed by or expected from a plugin subsystem?</li> <li>One of the interesting capabilities that you highlight in the documentation is the concept of merging applications. What are your thoughts on the challenges that an engineer might face when merging library or microservice applications built with POP into a single deployable artifact? <ul> <li>What would be involved in going the other direction to split a single application into independently runnable microservices?</li> </ul> </li> <li>When extracting common functionality from a group of existing applications, what are the relative merits of creating a plugin sybsystem vs writing a library?</li> <li>How does the system design of a POP application impact the available range of communication patterns for software and the teams building it?</li> <li>What are some antipatterns that you anticipate for teams building their projects on top of POP?</li> <li>In the documentation you mention that POP is just an example implementation of the broader pattern and that you hope to see other languages and developer communities adopt it. What are some of the barriers to adoption that you foresee?</li> <li>What are some of the limitations of POP or cases where you would recommend against following this paradigm?</li> <li>What are some of the most interesting, innovative, or unexpected ways that you have seen POP used?</li> <li>What have been some of the most interesting, unexpected, or challenging aspects of building POP?</li> <li>What do you have planned for the future of the POP library, or any applications where you plan to employ this pattern?</li> </ul> <h3>Keep In Touch</h3> <ul> <li><a href="https://github.com/thatch45?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">thatch45</a> on GitHub</li> <li><a href="https://twitter.com/thatch45?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">@thatch45</a> on Twitter</li> </ul> <h3>Picks</h3> <ul> <li>Tobias <ul> <li><a href="https://en.wikipedia.org/wiki/The_Man_in_the_High_Castle_(TV_series)?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Man In The High Castle</a> TV series</li> </ul> </li> <li>Thomas <ul> <li><a href="https://en.wikipedia.org/wiki/Jack_Ryan_(TV_series)?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Jack Ryan</a> TV Series</li> </ul> </li> </ul> <h3>Closing Announcements</h3> <ul> <li>Thank you for listening! Don’t forget to check out our other show, the <a href="https://feeds.fireside.fm/pythonpodcast/rss">Data Engineering Podcast</a> for the latest on modern data management.</li> <li>Visit the <a href="https://www.pythonpodcast.com?utm_source=rss&utm_medium=rss">site</a> to subscribe to the show, sign up for the mailing list, and read the show notes.</li> <li>If you’ve learned something or tried out a project from the show then tell us about it! Email <a href="mailto:hosts@podcastinit.com">hosts@podcastinit.com</a>) with your story.</li> <li>To help other people find the show please leave a review on <a href="https://itunes.apple.com/us/podcast/podcast.-init/id981834425?mt=2&uo=6&at=&ct=&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">iTunes</a> and tell your friends and co-workers</li> <li>Join the community in the new Zulip chat workspace at <a href="https://www.pythonpodcast.com/chat?utm_source=rss&utm_medium=rss">pythonpodcast.com/chat</a></li> </ul> <h3>Links</h3> <ul> <li><a href="https://www.pythonpodcast.com/episode-1-thomas-hatch/?utm_source=rss&utm_medium=rss">Episode 1</a></li> <li><a href="https://pop.readthedocs.io/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">POP</a></li> <li><a href="https://www.saltstack.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SaltStack</a></li> <li><a href="https://www.ruby-lang.org/en/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Ruby</a></li> <li><a href="https://en.wikipedia.org/wiki/Microservices?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Microservices</a></li> <li><a href="https://en.wikipedia.org/wiki/Linus_Torvalds?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Linus Torvalds</a></li> <li><a href="https://saltconf.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SaltConf</a></li> <li><a href="https://docs.saltstack.com/en/latest/topics/thorium/index.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SaltStack Thorium</a></li> <li><a href="https://docs.saltstack.com/en/latest/topics/beacons/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Salt Beacons</a></li> <li><a href="https://docs.saltstack.com/en/latest/topics/reactor/index.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Salt Reactors</a></li> <li><a href="https://docs.saltstack.com/en/latest/topics/grains/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Salt Grains</a></li> <li><a href="https://github.com/saltstack/idem?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Idem</a></li> <li><a href="https://docs.python.org/3/library/asyncio.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">AsyncIO</a></li> <li><a href="https://nim-lang.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Nim</a></li> <li><a href="https://ocaml.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">OCaml</a></li> <li><a href="https://julialang.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Julia</a></li> <li><a href="https://llvm.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">LLVM</a></li> <li><a href="https://en.wikipedia.org/wiki/Object-oriented_programming?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Object Oriented Programming</a></li> <li><a href="https://golang.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Go Language</a></li> <li><a href="https://www.rust-lang.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Rust</a></li> <li><a href="https://en.wikipedia.org/wiki/Role-based_access_control?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">RBAC == Role Based Access Control</a></li> <li><a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Mythical Man Month</a></li> <li><a href="https://en.wikipedia.org/wiki/Linux_kernel?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Linux Kernel</a></li> <li><a href="https://github.com/saltstack/heist?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Heist</a></li> <li><a href="https://github.com/saltstack/umbra/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Umbra</a></li> <li><a href="https://en.wikipedia.org/wiki/Flow-based_programming?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Flow Programming</a></li> <li><a href="https://magic.wizards.com/en?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Magic The Gathering</a></li> </ul> <p>The intro and outro music is from Requiem for a Fish <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">CC BY-SA</a></p> </div> <img alt="" height="0" src="https://analytics.boundlessnotions.com/piwik.php?idsite=1&rec=1&url=https%3A%2F%2Fwww.pythonpodcast.com%2Fplugin-oriented-programming-episode-240%2F&action_name=Making+Complex+Software+Fun+And+Flexible+With+Plugin+Oriented+Programming+-+Episode+240&urlref=https%3A%2F%2Fwww.pythonpodcast.com%2Ffeed%2F&utm_source=rss&utm_medium=rss" style="border: 0; width: 0; height: 0;" width="0" />