<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software Design on Oleg Sinavski</title><link>https://sinavski.com/tags/software-design/</link><description>Recent content in Software Design on Oleg Sinavski</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 11 Mar 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://sinavski.com/tags/software-design/index.xml" rel="self" type="application/rss+xml"/><item><title>Software for exploration</title><link>https://sinavski.com/post/5_research_software/</link><pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate><guid>https://sinavski.com/post/5_research_software/</guid><description>I worked in research all my life, so I know a stereotype that researchers write ugly code (e.g. see here, here, or here). But I thought: we can fix it, right? So multiple times I tried to design nice research frameworks. I tried to bring in interfaces and create nice abstractions using software engineering books and blogs I liked reading.
But over and over again all those efforts went in vain.</description></item><item><title>Interfaces: abc vs. Protocols</title><link>https://sinavski.com/post/1_abc_vs_protocols/</link><pubDate>Sun, 01 Aug 2021 00:00:00 +0000</pubDate><guid>https://sinavski.com/post/1_abc_vs_protocols/</guid><description>I used a standard Python library abc to define interfaces for the last 10 years of my career. But recently, I found that relatively new Python Protocols are way nicer. People find uses for both technologies. But I want to convince you to completely jump ships and start using them instead of more traditional techniques.
Python interfaces: what can you use? Python is somewhat different from other popular languages since there are no interfaces on a language level.</description></item><item><title>Neat Python interface</title><link>https://sinavski.com/post/2_good_interface/</link><pubDate>Sun, 01 Aug 2021 00:00:00 +0000</pubDate><guid>https://sinavski.com/post/2_good_interface/</guid><description>I&amp;rsquo;ve seen many Python interfaces in my career (as in API, not UI). You can quickly spot an ugly one by its size. Below are some recipes on how to make a neat one!
Interfaces in Python An &amp;ldquo;interface&amp;rdquo; is a nebulous concept that might be initially hard to grasp. It is a blueprint of interactions with an object (reading a few answers here is not going to hurt).
Do you need interfaces in Python at all?</description></item><item><title>All Dangers of Side Effects</title><link>https://sinavski.com/post/3_side_effects/</link><pubDate>Sun, 05 Mar 2017 00:00:00 +0000</pubDate><guid>https://sinavski.com/post/3_side_effects/</guid><description>Are there enough posts about unnecessary side effects? Unlikely - you still see them everywhere. Here is a sales pitch for this post:
no functional programming jargon a go-to list of reasons to avoid side effects Python-oriented Spotting side effects Some posts describe side effects in the context of functional programming (and JavaScript): one, two, three and a wiki. You don&amp;rsquo;t have to study functional programming to grasp this concept. Unfortunately, unnecessary side effects are prevalent in all coding paradigms, especially OOP.</description></item><item><title>Dealing with side effects</title><link>https://sinavski.com/post/4_dealing_with_side_effects/</link><pubDate>Tue, 08 Mar 2016 00:00:00 +0000</pubDate><guid>https://sinavski.com/post/4_dealing_with_side_effects/</guid><description>Minimize side effects Generating a random number, communicating over the network, or controlling a robot are all examples of side effects.
If the software can’t affect the external world, it is pointless. But unnecessary side effects can cause problems and better be avoided (see the previous post).
Advertisement for this post:
Python-oriented with examples Visuals for side effect refactoring many links to other great posts and discussions it is NOT about functional programming What are we striving for?</description></item></channel></rss>