.footnote-cite[.red[1] Hatton, L. _IEEE Trans. Software Eng._ (2014), **40**, 450 .red[2] Brooks, F. P., Jr. [_The Mythical Man-Month: Essays on Software Engineering_](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf), Addison-Wesley Professional, 1995] ??? - We start with a simple idea and overtime software grows complex - It is inherent characteristic of software to change and grow over time - There is no silver bullet for managing complexity. However, there are some bad practices that we can avoid. --- ## Composition - Build complex behavior from simple components - We can reason about the components and the composite - Composition is key to managing complexity - Modularity does not imply simplicity, but is enabled by it .footnote-cite[Slide taken from [Complexity in software development by Jonas Juselius](https://github.com/scisoft/complexity)] --- layout: false ## Extensible ### New Challenges! New Methods! New Software?!?
??? - New modelling challenges require new (or improved) methods and new (or improved) software implementations. - Software cannot be rewritten from scratch every time, we need to have _extensible_ architectures --- layout: false ## Modular ### Do One Thing, Do It Well
??? - Fast-paced development cycles can only occur within a clear software structure - Delimit capabilities, concerns, results - Modularity can help create such a structure - A LEGO-like structure can enhance our capabilities to reason about complex software workflows. - Assemble, de-assemble, re-assemble is easier with standalone modules. --- layout: false ## Sustainable ### Software Reuse for a Better Life
.footnote-cite[Source: [IBM Big Data & Analytics Hub](http://www.ibmbigdatahub.com/blog/dont-reinvent-wheel-increase-productivity-strategic-reuse)] ??? - Reinventing the wheel is bad - Build small, well-documented software components - Reuse components in different contexts --- ## The Problem(s) with Input Parsing - Proliferation of formats - Difficult to ensure correctness - Error reporting can be confusing - Hard to compose - Documentation quickly outdated or incomplete
--- layout: false class: split-50-50 ## parselglossy: generic input parsing, speaking in tongues Separate _syntax_ and _semantics_ .column[ ``` parselglossy --help Usage: parselglossy [OPTIONS] COMMAND [ARGS]... Console script for parselglossy. Options: --version Show the version and exit. --help Show this message and exit. Commands: doc Generate documentation from validation template. lex Run lexer and dump intermediate representation to JSON. parse Parse input file. validate Validate intermediate representation into final representation. ``` ] .column[
] - [github.com/dev-cafe/parselglossy](https://github.com/dev-cafe/parselglossy) - [parselglossy.readthedocs.io](https://parselglossy.readthedocs.io) - `pip install parselglossy` --- layout: false ``` parselglossy parse input.inp --template template.yml --outfile fr.json ```
--- layout: false ## Tokenization: how _any_ correct input _looks_
--- layout: false ## Validation: what correct input _must contain_
--- layout: false
--- layout: false ## Bonus: autogenerate documentation ``` parselglossy doc template.yml --outfile input.rst ```
--- layout: false ## Conclusions [github.com/dev-cafe/parselglossy](https://github.com/dev-cafe/parselglossy) - A library for input parsing - Separation of syntax and semantics - Allows composable parsers - Automatic generation of documentation ``` parselglossy --help Usage: parselglossy [OPTIONS] COMMAND [ARGS]... Console script for parselglossy. Options: --version Show the version and exit. --help Show this message and exit. Commands: doc Generate documentation from validation template. lex Run lexer and dump intermediate representation to JSON. parse Parse input file. validate Validate intermediate representation into final representation. ``` --- layout: false ## Acknowledgements
--- layout: false ## Commercial All examples online [github.com/dev-cafe/cmake-cookbook](https://github.com/dev-cafe/cmake-cookbook)
--- name: last-page template: inverse # Thanks for your attention! Slideshow created using [remark] and served using [cicero] Slides available on [GitHub](https://github.com/robertodr/talk-acs) Browse slides at [http://tinyurl.com/talk-orlando](http://tinyurl.com/talk-orlando) [remark]: https://github.com/gnab/remark [cicero]: https://github.com/bast/cicero