[{"data":1,"prerenderedAt":182},["ShallowReactive",2],{"navigation":3,"talk-/talks/interface-segregation-principle":146,"person-Ashraf Hussain":167,"/talks/interface-segregation-principle-surround":177},[4],{"title":5,"path":6,"stem":7,"children":8,"page":145},"Talks","/talks","talks",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141],{"title":10,"path":11,"stem":12},"The Single Responsibility Principle","/talks/single-responsibility-principle","talks/single-responsibility-principle",{"title":14,"path":15,"stem":16},"The Open/Closed Principle","/talks/open-closed-principle","talks/open-closed-principle",{"title":18,"path":19,"stem":20},"Spack","/talks/spack","talks/spack",{"title":22,"path":23,"stem":24},"GitHub Actions","/talks/github-actions","talks/github-actions",{"title":26,"path":27,"stem":28},"Inheritance is Evil","/talks/inheritance-is-evil","talks/inheritance-is-evil",{"title":30,"path":31,"stem":32},"Nuxt","/talks/nuxt","talks/nuxt",{"title":34,"path":35,"stem":36},"LogSeq","/talks/logseq","talks/logseq",{"title":38,"path":39,"stem":40},"Time Complexity","/talks/time-complexity","talks/time-complexity",{"title":42,"path":43,"stem":44},"How to Review a Codebase","/talks/how-to-review-a-codebase","talks/how-to-review-a-codebase",{"title":46,"path":47,"stem":48},"Numba and Bitmasks","/talks/numba-and-bitmasks","talks/numba-and-bitmasks",{"title":50,"path":51,"stem":52},"Mutation Testing","/talks/mutation-testing","talks/mutation-testing",{"title":54,"path":55,"stem":56},"Message Passing Interface","/talks/message-passing-interface","talks/message-passing-interface",{"title":58,"path":59,"stem":60},"P vs NP","/talks/p-vs-np","talks/p-vs-np",{"title":62,"path":63,"stem":64},"Verbose Graphics with Rust and Vulkan","/talks/verbose-graphics-with-rust-and-vulkan","talks/verbose-graphics-with-rust-and-vulkan",{"title":66,"path":67,"stem":68},"Slidev","/talks/slidev","talks/slidev",{"title":70,"path":71,"stem":72},"Nuxt Content By Example","/talks/nuxt-content-by-example","talks/nuxt-content-by-example",{"title":74,"path":75,"stem":76},"Rust MMU Guest Lecture","/talks/rust-mmu-guest-lecture","talks/rust-mmu-guest-lecture",{"title":78,"path":79,"stem":80},"As We May Think - AI for Coding","/talks/ai-for-coding","talks/ai-for-coding",{"title":82,"path":83,"stem":84},"Git in Practice: Techniques for Collaborative Development","/talks/git-in-practice","talks/git-in-practice",{"title":86,"path":87,"stem":88},"A Crash Course in Natural Language Processing","/talks/natural-language-processing","talks/natural-language-processing",{"title":90,"path":91,"stem":92},"Graphs: Ruining the Travelling Salesman's Day Since 1930","/talks/graph-theory","talks/graph-theory",{"title":94,"path":95,"stem":96},"Automating File Creation With Jinja2 Templates in Python","/talks/jinja2-templates-with-python","talks/jinja2-templates-with-python",{"title":98,"path":99,"stem":100},"What the hell is a Monad?","/talks/monads","talks/monads",{"title":102,"path":103,"stem":104},"The Liskov Substitution Principle","/talks/liskov-substitution-principle","talks/liskov-substitution-principle",{"title":106,"path":107,"stem":108},"Everything as a Specification","/talks/everything-as-a-specification","talks/everything-as-a-specification",{"title":110,"path":111,"stem":112},"The Interface Segregation Principle","/talks/interface-segregation-principle","talks/interface-segregation-principle",{"title":114,"path":115,"stem":116},"The Dependency Inversion Principle","/talks/dependency-inversion-principle","talks/dependency-inversion-principle",{"title":118,"path":119,"stem":120},"A Field Guide To Coupling","/talks/a-field-guide-to-coupling","talks/a-field-guide-to-coupling",{"title":122,"path":123,"stem":124},"Why Python is (and isn't) Fast","/talks/why-python-is-slow","talks/why-python-is-slow",{"title":126,"path":127,"stem":128},"Cybersecurity","/talks/cybersecurity","talks/cybersecurity",{"title":130,"path":131,"stem":132},"What Linux Distribution Should You Use?","/talks/what-linux-distribution","talks/what-linux-distribution",{"title":134,"path":135,"stem":136},"Agent Communication Protocols","/talks/agent-communication-protocols","talks/agent-communication-protocols",{"title":138,"path":139,"stem":140},"Why I hate try/catch, and why you should hate it too!","/talks/hate-try-catch","talks/hate-try-catch",{"title":142,"path":143,"stem":144},"The Beauty of Vim Motions","/talks/beauty-of-vim-motions","talks/beauty-of-vim-motions",false,{"id":147,"title":110,"body":148,"date":156,"description":157,"extension":158,"imgClass":159,"imgUrl":160,"isImgLogo":145,"meta":161,"navigation":162,"path":111,"recordingUrl":163,"seo":164,"speaker":165,"stem":112,"__hash__":166},"talks/talks/interface-segregation-principle.md",{"type":149,"value":150,"toc":151},"minimark",[],{"title":152,"searchDepth":153,"depth":154,"links":155},"",1,2,[],["Date","2026-04-29T00:00:00.000Z"],"A talk on the Interface Segregation Principle, the fourth of the SOLID principles. Covers why clients shouldn't be forced to depend on methods they don't use, and how splitting fat interfaces into smaller, focused ones leads to cleaner and more maintainable code.","md",null,"/images/interface-segregation-principle.png",{},true,"https://stfc365-my.sharepoint.com/personal/ashraf_hussain_stfc_ac_uk/_layouts/15/embed.aspx?UniqueId=70f07ac0-3ca6-4c19-b74e-aefec9b088be&embed=%7B%22ust%22%3Afalse%2C%22hv%22%3A%22CopyEmbedCode%22%7D&referrer=StreamWebApp&referrerScenario=EmbedDialog.Create",{"title":110,"description":157},"Ashraf Hussain","STb9Wlk_HieRyGLq3yK1wKMNGhsCifk2exYMCovhGhE",{"id":168,"title":169,"extension":170,"imgUrl":159,"meta":171,"name":165,"roles":172,"stem":175,"__hash__":176},"people/people/ashraf-hussain.yml","Apprentice Software Engineer","yml",{},[173,174],"Chair","Committee Member","people/ashraf-hussain","hBSwryJu7fcOS0sGb0IoPrpIHRinUm8VqGc5-gzV3EY",[178,180],{"title":106,"path":107,"stem":108,"description":179,"children":-1},"An introduction to the differences between imperative and declarative approaches, showing how describing desired outcomes can replace step-by-step instructions.",{"title":114,"path":115,"stem":116,"description":181,"children":-1},"A talk on the Dependency Inversion Principle, the fifth of the SOLID principles. Covers why high-level modules shouldn't depend on low-level modules, how both should depend on abstractions, and the real-world consequences of getting dependency direction wrong.",1778147361213]