# abstraction

Published articles for abstraction.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Agentic Coding: Bet on the Primitives

DevFeed: [Agentic Coding: Bet on the Primitives](<https://devfeed.tech/articles/agentic-coding-bet-on-the-primitives-18935.md>)

Original publisher: [Read original article](<https://www.robinwieruch.de/agentic-coding-bet-on-primitives/>)

Author: Robin Wieruch

Published: 2026-07-31T06:00:00Z

Content type: opinion

Language: en

Sources: [Robin Wieruch](<https://devfeed.tech/sources/robin-wieruch.md>)

Topics: [agentic-coding](<https://devfeed.tech/topics/agentic-coding.md>), [coding](<https://devfeed.tech/topics/coding.md>), [React](<https://devfeed.tech/topics/react.md>), [SVG](<https://devfeed.tech/topics/svg.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [agentic-coding](<https://devfeed.tech/tags/agentic-coding.md>), [ai-coding-agents](<https://devfeed.tech/tags/ai-coding-agents.md>), [ai-engineer](<https://devfeed.tech/tags/ai-engineer.md>), [build-vs-buy-components](<https://devfeed.tech/tags/build-vs-buy-components.md>), [coding](<https://devfeed.tech/tags/coding.md>), [d3-vs-recharts](<https://devfeed.tech/tags/d3-vs-recharts.md>), [opinions](<https://devfeed.tech/tags/opinions.md>), [react](<https://devfeed.tech/tags/react.md>), [svg](<https://devfeed.tech/tags/svg.md>)

### AI overview

The article argues that agentic coding lowers implementation costs enough to make owning lower-level primitives more practical. It describes an experiment comparing D3 math primitives with React-rendered SVG against Recharts for custom charts: Recharts reached most of the result faster, but its remaining customization needs and an animation issue led to more workarounds than the primitive-based approach.

### Source excerpt

Agentic coding collapses the cost of implementation labor. Why the rational bet is moving from high-level libraries back to primitives you own.

## When Duplicated Code Is the Better Tradeoff

DevFeed: [When Duplicated Code Is the Better Tradeoff](<https://devfeed.tech/articles/when-to-repeat-yourself-18209.md>)

Original publisher: [Read original article](<https://newsletter.francofernando.com/p/when-to-repeat-yourself>)

Author: Franco Fernando

Published: 2026-07-04T06:05:31Z

Content type: opinion

Language: en

Sources: [The Polymathic Engineer](<https://devfeed.tech/sources/the-polymathic-engineer.md>)

Topics: [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Code](<https://devfeed.tech/topics/code.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [code](<https://devfeed.tech/tags/code.md>), [components](<https://devfeed.tech/tags/components.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [reusable-code](<https://devfeed.tech/tags/reusable-code.md>), [services](<https://devfeed.tech/tags/services.md>), [software](<https://devfeed.tech/tags/software.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [teams](<https://devfeed.tech/tags/teams.md>)

### AI overview

This article examines when following the DRY principle creates more cost than value. It argues that duplicated code can be reasonable when abstraction adds coordination overhead, tight coupling, or inflexibility, especially across distributed services and teams whose code may evolve differently.

### Source excerpt

When duplicated code is the better tradeoff.

## Beyond Inline Values: Evolving Strata's Storage Engine

DevFeed: [Beyond Inline Values: Evolving Strata's Storage Engine](<https://devfeed.tech/articles/beyond-inline-values-evolving-strata-s-storage-engine-39413.md>)

Original publisher: [Read original article](<https://n8z.dev/posts/beyond-inline-values/>)

Author: Nevin Zheng

Published: 2026-06-03T00:00:00Z

Content type: article

Language: en

Sources: [nevzheng](<https://devfeed.tech/sources/nevzheng.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [abstraction](<https://devfeed.tech/topics/abstraction.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [olap](<https://devfeed.tech/topics/olap.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [block](<https://devfeed.tech/tags/block.md>), [bootstrapping](<https://devfeed.tech/tags/bootstrapping.md>), [layout](<https://devfeed.tech/tags/layout.md>), [migration](<https://devfeed.tech/tags/migration.md>), [performance](<https://devfeed.tech/tags/performance.md>), [repo](<https://devfeed.tech/tags/repo.md>), [rust](<https://devfeed.tech/tags/rust.md>), [sql](<https://devfeed.tech/tags/sql.md>), [storage](<https://devfeed.tech/tags/storage.md>), [storage-engine](<https://devfeed.tech/tags/storage-engine.md>), [write-amplification](<https://devfeed.tech/tags/write-amplification.md>)

### AI overview

This architectural decision record proposes replacing Strata's inline value storage with a block-based abstraction. It describes the current Rust LSM storage engine and SQL layer, identifies flexibility and I/O amplification problems, compares options, and records the proposed direction.

### Source excerpt

An architectural decision record: why Strata is moving from inline values to block-based storage.

## Object Oriented Programming - The Key Terms

DevFeed: [Object Oriented Programming - The Key Terms](<https://devfeed.tech/articles/object-oriented-programming-the-key-terms-34688.md>)

Original publisher: [Read original article](<https://newsletter.systemdesigncodex.com/p/object-oriented-programming-the-key>)

Author: Saurabh Dashora

Published: 2026-03-24T08:38:43Z

Content type: article

Language: en

Sources: [System Design Codex](<https://devfeed.tech/sources/system-design-codex.md>)

Topics: [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>), [Inheritance](<https://devfeed.tech/topics/inheritance.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [interface](<https://devfeed.tech/topics/interface.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [concepts](<https://devfeed.tech/tags/concepts.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [object-oriented](<https://devfeed.tech/tags/object-oriented.md>), [polymorphism](<https://devfeed.tech/tags/polymorphism.md>), [programming](<https://devfeed.tech/tags/programming.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

This tutorial introduces object-oriented programming through four principles: abstraction, encapsulation, inheritance, and polymorphism. It explains how abstraction hides implementation details, encapsulation controls access to data and methods, and inheritance supports reuse and hierarchical relationships. The supplied text begins its discussion of polymorphism but is truncated.

### Source excerpt

The essential concepts

## Pectra Mainnet Announcement

DevFeed: [Pectra Mainnet Announcement](<https://devfeed.tech/articles/pectra-mainnet-announcement-17150.md>)

Original publisher: [Read original article](<https://blog.ethereum.org/en/2025/04/23/pectra-mainnet>)

Author: EF Protocol Support

Published: 2025-04-23T00:00:00Z

Content type: release

Language: en

Sources: [Ethereum Foundation Blog](<https://devfeed.tech/sources/ethereum-foundation-blog.md>)

Topics: [Ethereum](<https://devfeed.tech/topics/ethereum.md>), [releases](<https://devfeed.tech/topics/releases.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [Passkeys](<https://devfeed.tech/topics/passkeys.md>), [Security](<https://devfeed.tech/topics/security.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [abstraction](<https://devfeed.tech/tags/abstraction.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [batching](<https://devfeed.tech/tags/batching.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [protocol-announcements](<https://devfeed.tech/tags/protocol-announcements.md>), [releases](<https://devfeed.tech/tags/releases.md>), [security](<https://devfeed.tech/tags/security.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

The Pectra network upgrade is scheduled to activate on Ethereum mainnet on May 7, 2025. The article explains how EIP-7702 adds smart contract capabilities to externally owned accounts and outlines related safety mechanisms.

### Source excerpt

The Pectra network upgrade is scheduled to activate on the Ethereum mainnet on May 07, 2025 at epoch 364032 (10:05:11 UTC)! Mainnet client releases are listed below....

## Design is about the abstractions

DevFeed: [Design is about the abstractions](<https://devfeed.tech/articles/design-is-about-the-abstractions-39069.md>)

Original publisher: [Read original article](<https://blog.devdetails.com/p/design-is-about-the-abstractions>)

Author: Mike

Published: 2024-08-05T15:55:48Z

Content type: article

Language: en

Sources: [Dev Details](<https://devfeed.tech/sources/dev-details.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [software-architecture](<https://devfeed.tech/topics/software-architecture.md>), [API](<https://devfeed.tech/topics/api.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [api](<https://devfeed.tech/tags/api.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [interface](<https://devfeed.tech/tags/interface.md>), [software-architecture](<https://devfeed.tech/tags/software-architecture.md>), [software-design](<https://devfeed.tech/tags/software-design.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>)

### AI overview

The article explains how abstraction helps software and house design by hiding implementation details, defining interfaces and APIs, and indicating when a design contains enough detail to stop.

### Source excerpt

Abstractions simplify designs and tell us when to stop designing.

## Item 31: Respect abstraction contracts

DevFeed: [Item 31: Respect abstraction contracts](<https://devfeed.tech/articles/item-31-respect-abstraction-contracts-39289.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-respect-contracts>)

Published: 2024-07-22T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [important](<https://devfeed.tech/tags/important.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

The article explains why respecting abstraction contracts matters and argues that technical possibility does not by itself justify an action.

### Source excerpt

Just because we can do something, does not mean we should. How to respect abstraction contracts and why it is so important.

## Item 30: Define contracts with documentation

DevFeed: [Item 30: Define contracts with documentation](<https://devfeed.tech/articles/item-30-define-contracts-with-documentation-39275.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-contracts-documentation>)

Published: 2024-07-08T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Documentation](<https://devfeed.tech/topics/documentation.md>), [abstraction](<https://devfeed.tech/topics/abstraction.md>), [Code](<https://devfeed.tech/topics/code.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [code](<https://devfeed.tech/tags/code.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [library](<https://devfeed.tech/tags/library.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This article explains how documentation defines contracts for library or module elements. It argues that clearly documenting expected behavior lets users depend on an abstraction rather than its current implementation, while allowing creators to change the implementation as long as the contract is preserved.

### Source excerpt

How do we express our library or module contracts and why are they so important.

## Naming Code Clearly: Practical Tips for More Readable Identifiers and APIs

DevFeed: [Naming Code Clearly: Practical Tips for More Readable Identifiers and APIs](<https://devfeed.tech/articles/what-s-in-a-name-23851.md>)

Original publisher: [Read original article](<http://testing.googleblog.com/2024/03/whats-in-name.html>)

Author: Google Testing Bloggers (noreply@blogger.com)

Published: 2024-03-26T12:34:00Z

Content type: tutorial

Language: en

Sources: [Google Testing Blog](<https://devfeed.tech/sources/google-testing-blog.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [adam-raider](<https://devfeed.tech/tags/adam-raider.md>), [code](<https://devfeed.tech/tags/code.md>), [code-health](<https://devfeed.tech/tags/code-health.md>), [identifier](<https://devfeed.tech/tags/identifier.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [interface](<https://devfeed.tech/tags/interface.md>), [tips](<https://devfeed.tech/tags/tips.md>), [tott](<https://devfeed.tech/tags/tott.md>)

### AI overview

This Code Health post explains why unclear identifiers and interfaces increase cognitive load and make code harder to read. It offers naming guidance, including describing behavior, considering the cost of renaming, revealing intent, and preferring precise names.

### Source excerpt

This is another post in our Code Health series. A version of this post originally appeared in Google bathrooms worldwide as a Google Testing on the Toilet episode. You can download a printer-friendly version to display in your office. by Adam Raider "There are only two hard things in computer science: cache invalidation and naming things." --Phil Karlton Have you ever read an identifier only to realize later it doesn't do what you expected? Or had to read the implementation in order to understand an interface? These indirections eat up our cognitive bandwidth and make our work more difficult. We spend far more time reading code than we do writing it; thoughtful names can save the reader (and writer) a lot of time and frustration. Here are some naming tips: Spend time considering names--it's worth it. Don't default to the first name that comes to mind. The more public the name, the more expensive it is to change. Past a certain scale, names become infeasible to change, especially for APIs. Pay attention to a name in proportion to the cost of renaming it later. If you're feeling stuck, consider running a new name by a teammate. Describe behavior. Encourage naming based on what functions do rather than when the functions are called. Avoid prefixes like "handle" or "on" as they describe when and provide no added meaning: button.listen('click', handleClick) button.listen('click', addItemToCart) Reveal intent with a contextually appropriate level of abstraction: High-abstraction functions describe the what and operate on high-level types. Lower-abstraction functions describe the how and operate on lower-level types. For example, logout might call into clearUserToken, and recordWithCamera might call into parseStreamBytes. Prefer unique, precise names. Are you frequently asking for the UserManager? Manager, Util, and similar suffixes are a common but imprecise naming convention. What does it do? It manages! If you're struggling to come up with a more precise name, consider sp

## Item 26: Use abstraction to protect code against changes

DevFeed: [Item 26: Use abstraction to protect code against changes](<https://devfeed.tech/articles/item-26-use-abstraction-to-protect-code-against-changes-39269.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-abstraction-code-changes>)

Published: 2024-02-26T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>), [Code](<https://devfeed.tech/topics/code.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [classes](<https://devfeed.tech/tags/classes.md>), [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [display](<https://devfeed.tech/tags/display.md>), [password](<https://devfeed.tech/tags/password.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [sorting](<https://devfeed.tech/tags/sorting.md>), [threads](<https://devfeed.tech/tags/threads.md>), [validation](<https://devfeed.tech/tags/validation.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains how abstraction protects code from changes. It covers extracting literal values into constants, separating algorithms into functions, and using abstractions to change implementation details without changing how code is used.

### Source excerpt

How do we abstract elements, and what are the consequences.

## Item 25: Each function should be written in terms of a single level of abstraction

DevFeed: [Item 25: Each function should be written in terms of a single level of abstraction](<https://devfeed.tech/articles/item-25-each-function-should-be-written-in-terms-of-a-single-level-of-abstraction-39291.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-single-layer-of-abstraction>)

Published: 2024-02-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>), [function](<https://devfeed.tech/topics/function.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [code](<https://devfeed.tech/tags/code.md>), [computer-science](<https://devfeed.tech/tags/computer-science.md>), [function](<https://devfeed.tech/tags/function.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [programming](<https://devfeed.tech/tags/programming.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

The article explains why each function should be written at a single level of abstraction. It introduces abstraction layers from hardware and machine instructions through Assembly, compilers, and higher-level languages, arguing that well-separated layers reduce the need to understand lower-level implementation details.

### Source excerpt

Why each function should be written in terms of a single level of abstraction and how to achieve it.

## Abstraction design: Introduction

DevFeed: [Abstraction design: Introduction](<https://devfeed.tech/articles/abstraction-design-introduction-39268.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-abstraction>)

Published: 2024-02-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [concepts](<https://devfeed.tech/tags/concepts.md>), [core](<https://devfeed.tech/tags/core.md>), [function](<https://devfeed.tech/tags/function.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [object-oriented](<https://devfeed.tech/tags/object-oriented.md>), [programming](<https://devfeed.tech/tags/programming.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This introduction explains abstraction as a form of simplification that hides complexity by deciding what to expose and what to conceal. It discusses abstractions in object-oriented and functional programming, including interfaces, classes, functions, and higher-level operations, with examples involving Java and Kotlin.

### Source excerpt

What is abstraction in programming and why is it so important.

## Apollo Federation and GraphOS add support for entity interfaces to streamline collaboration

DevFeed: [Apollo Federation and GraphOS add support for entity interfaces to streamline collaboration](<https://devfeed.tech/articles/apollo-federation-and-graphos-add-support-for-entity-interfaces-to-streamline-collaboration-23184.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/apollo-federation-and-graphos-add-support-for-entity-interfaces-to-streamline-collaboration>)

Author: Korinne Alpers

Published: 2023-02-15T08:22:00Z

Content type: article

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [GraphQL](<https://devfeed.tech/topics/graphql.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [announcement](<https://devfeed.tech/tags/announcement.md>), [apis](<https://devfeed.tech/tags/apis.md>), [apollo](<https://devfeed.tech/tags/apollo.md>), [apollo-federation](<https://devfeed.tech/tags/apollo-federation.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [collaboration](<https://devfeed.tech/tags/collaboration.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [graphos](<https://devfeed.tech/tags/graphos.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>)

### AI overview

Apollo Federation 2.3 adds entity interfaces, with general availability and support in Apollo GraphOS. The feature lets an interface defined in one subgraph be abstracted as an object type in other subgraphs, where those subgraphs can add and resolve fields directly on the interface.

### Source excerpt

Apollo Federation is widely adopted as the standard specification for building distributed GraphQL APIs, called supergraphs, that run on top of one or more underlying subgraphs. Unlike a monolithic graph, a supergraph maintains clear separation of concerns -- each subgraph can be owned independently by separate developers or teams -- allowing it to evolve rapidly as new use cases arrive.

## Introduction to Interfaces

DevFeed: [Introduction to Interfaces](<https://devfeed.tech/articles/introduction-to-interfaces-25058.md>)

Original publisher: [Read original article](<https://typealias.com/start/kotlin-interfaces/>)

Author: author@typealias.com (Dave Leeds)

Published: 2022-09-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dave Leeds on Kotlin - typealias.com](<https://devfeed.tech/sources/dave-leeds-on-kotlin-typealias-com.md>)

Topics: [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [cast](<https://devfeed.tech/tags/cast.md>), [code](<https://devfeed.tech/tags/code.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [interface](<https://devfeed.tech/tags/interface.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [language](<https://devfeed.tech/tags/language.md>), [learn-to-program](<https://devfeed.tech/tags/learn-to-program.md>), [programming](<https://devfeed.tech/tags/programming.md>), [safe-cast](<https://devfeed.tech/tags/safe-cast.md>), [smart-cast](<https://devfeed.tech/tags/smart-cast.md>), [unsafe-cast](<https://devfeed.tech/tags/unsafe-cast.md>)

### AI overview

This Kotlin tutorial introduces interfaces as a language feature that lets a single object have more than one type. It builds on Kotlin's built-in and custom types and begins illustrating the concept with a chicken and farmer example.

### Source excerpt

Ever since Chapter 1, we've used a variety of built-in Kotlin types, like Int, String, and Boolean. Then in Chapter 4, we introduced our own custom types, like Circle, by writing classes. In this chapter, we'll dive into interfaces, which allow you to declare that a single object has more than one type at a time! Interfaces are a powerful language feature, and when used well, they can take your code to the next level.

## Haskell 101 Lecture Notes

DevFeed: [Haskell 101 Lecture Notes](<https://devfeed.tech/articles/haskell-101-lecture-notes-27923.md>)

Original publisher: [Read original article](<http://alt-romes.github.io/posts/lectures/2022-05-04-lecture.html>)

Published: 2022-05-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Romes' Musings](<https://devfeed.tech/sources/romes-musings.md>)

Topics: [Haskell](<https://devfeed.tech/topics/haskell.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [function](<https://devfeed.tech/tags/function.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [pattern-matching](<https://devfeed.tech/tags/pattern-matching.md>), [polymorphism](<https://devfeed.tech/tags/polymorphism.md>)

### AI overview

Haskell 101 lecture notes introducing functions, function abstraction and application, expressions, values, types, algebraic data types, construction and deconstruction, pattern matching, polymorphism, and type constructors.

### Source excerpt

Contents 1 Functions, Computations: Abstraction and application 2 Expressions, Values, Types 3 ADTs, Construction, Deconstruction 4 Polymorphism 5 Non-nullary type constructors, Kinds 1 Functions, Computations: Abstraction and application What is a function? f(x) = 4x + 2? And what's function application? f(x) = 4x + 2 f(5) = ? In mathematics, function application is the act of applying a function to an argument from its domain so as to obtain the corresponding value from its range. In this sense, function application can be thought of as the opposite of function abstraction. In functional programming languages, computations are based on function abstraction and application. An abstraction, a.k.a a function, is denoted through the lambda notation (\x -> ...). An application, a.k.a function application, is denoted by juxtaposition: an expression followed by another expression represents the application of the first expression to the following one. f = \x -> 4 * x + 2 -- `f` is an abstraction f 5 -- application of `f` to `5` 2 Expressions, Values, Types Haskell is a purely functional programming language. As such, all computations are done via the evaluation of expressions (syntactic terms) to yield values (abstract entities that we regard as answers). Every value has an associated type (intuitively, we can think of types as sets of values). 5 :: Integer 'a' :: Char inc :: Integer -> Integer [1,2,3] :: [Integer] ('b', 4) :: (Char, Int) sum [1,2,3] :: Integer inc 5 :: Integer sum :: [Integer] -> Integer The :: can be read "has type". All expression evaluate to a value, and all values have types, which means all expressions have types too. Above are some of the common types. Which of the following are expressions, and which are values? What are the types of the expressions? product [1,2,3] product [1,2,3] They are all expressions, and only the first two are values. The first one is a function abstraction, which is a value, the second one is a value constructed with the

## Why the DRY Principle Is Often Misunderstood in Software Design

DevFeed: [Why the DRY Principle Is Often Misunderstood in Software Design](<https://devfeed.tech/articles/dry-do-repeat-yourself-39901.md>)

Original publisher: [Read original article](<https://mende.io/blog/dry-do-repeat-yourself/>)

Author: tobi@techunicorn.builders (Tobias Mende)

Published: 2022-04-30T13:13:00Z

Content type: opinion

Language: en

Sources: [Tobias Mende](<https://devfeed.tech/sources/tobias-mende.md>)

Topics: [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [abstraction](<https://devfeed.tech/topics/abstraction.md>), [reuse](<https://devfeed.tech/topics/reuse.md>), [maintenance](<https://devfeed.tech/topics/maintenance.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [component](<https://devfeed.tech/tags/component.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [practices-software-development-software-craft](<https://devfeed.tech/tags/practices-software-development-software-craft.md>), [reuse](<https://devfeed.tech/tags/reuse.md>), [software-design](<https://devfeed.tech/tags/software-design.md>)

### AI overview

The article argues that the DRY principle is frequently misapplied in software development. Reusing code can reduce duplication but may introduce dependencies, rigid contracts, and abstractions that are difficult to change, especially when systems evolve independently.

### Source excerpt

DRY - DO repeat yourself When I started my career as a software developer and already during university, almost no principle was mentioned as often as the DRY principle: "Do not repeat yourself"

## An introduction to Temporal Workflows

DevFeed: [An introduction to Temporal Workflows](<https://devfeed.tech/articles/an-introduction-to-temporal-workflows-36116.md>)

Original publisher: [Read original article](<https://temporal.io/blog/workflow-introduction>)

Author: Dominik Tornow

Published: 2022-01-24T07:00:00Z

Content type: article

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [Developer experience](<https://devfeed.tech/topics/developer-experience.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [reliability](<https://devfeed.tech/topics/reliability.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [AWS Lambda](<https://devfeed.tech/topics/aws-lambda.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [aws-lambda](<https://devfeed.tech/tags/aws-lambda.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [retries](<https://devfeed.tech/tags/retries.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

This introduction explains Temporal Workflows as an abstraction for reliable, scalable execution in distributed systems. It contrasts workflow executions with regular functions using a monthly reminder-email example and describes how workflows address failures, retries, duplication, and idempotence that otherwise require multiple infrastructure services.

### Source excerpt

Discover how Temporal workflows offer reliable execution with built-in failure handling, ensuring correct application behavior at scale.

## Latent Effects for Reusable Language Components

DevFeed: [Latent Effects for Reusable Language Components](<https://devfeed.tech/articles/latent-effects-for-reusable-language-components-29486.md>)

Original publisher: [Read original article](<http://lambda-the-ultimate.org/node/5640>)

Published: 2021-10-14T14:02:48Z

Content type: article

Language: en

Sources: [Lambda the Ultimate](<https://devfeed.tech/sources/lambda-the-ultimate.md>)

Topics: [Haskell](<https://devfeed.tech/topics/haskell.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Development](<https://devfeed.tech/topics/development.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [deferred](<https://devfeed.tech/tags/deferred.md>), [effects](<https://devfeed.tech/tags/effects.md>), [examples](<https://devfeed.tech/tags/examples.md>), [functional](<https://devfeed.tech/tags/functional.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [modular](<https://devfeed.tech/tags/modular.md>), [monad](<https://devfeed.tech/tags/monad.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [semantics](<https://devfeed.tech/tags/semantics.md>), [theory](<https://devfeed.tech/tags/theory.md>)

### AI overview

The article discusses latent effects, a generic class of control-flow mechanisms for modular language definitions. It describes how function abstractions, lazy computations, and MetaML-like staging can be expressed and combined, with a full Haskell implementation and examples.

### Source excerpt

Latent Effects for Reusable Language Components, by Birthe van den Berg, Tom Schrijvers, Casper Bach Poulsen, Nicolas Wu: The development of programming languages can be quite complicated and costly. Hence, much effort has been devoted to the modular definition of language features that can be reused in various combinations to define new languages and experiment with their semantics. A notable outcome of these efforts is the algebra-based "datatypes "a la carte" (DTC) approach. When combined with algebraic effects, DTC can model a wide range of common language features. Unfortunately, the current state of the art does not cover modular definitions of advanced control-flow mechanisms that defer execution to an appropriate point, such as call-by-name and call-by-need evaluation, as well as (multi-)staging. This paper defines latent effects, a generic class of such control-flow mechanisms. We demonstrate how function abstractions, lazy computations and a MetaML-like staging can all be expressed in a modular fashion using latent effects, and how they can be combined in various ways to obtain complex semantics. We provide a full Haskell implementation of our effects and handlers with a range of examples. Looks like a nice generalization of the basic approach taken by algebraic effects to more subtle contexts. Algebraic effects have been discussed here on LtU many times. I think this description from section 2.3 is a pretty good overview of their approach: LE&H is based on a different, more sophisticated structure than AE&H's free monad. This structure supports non-atomic operations (e.g., function abstraction, thunking, quoting) that contain or delimit computations whose execution may be deferred. Also, the layered handling is different. The idea is still the same, to replace bit by bit the structure of the tree by its meaning. Yet, while AE&H grows the meaning around the shrinking tree, LE&H grows little "pockets of meaning" around the individual nodes remaining in the

## Integration verbosity and good layering

DevFeed: [Integration verbosity and good layering](<https://devfeed.tech/articles/integration-verbosity-and-good-layering-20941.md>)

Original publisher: [Read original article](<https://jakewharton.com/integration-verbosity-and-good-layering/>)

Published: 2021-04-07T00:00:00Z

Content type: article

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [XML](<https://devfeed.tech/topics/xml.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [SQLite](<https://devfeed.tech/topics/sqlite.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [design](<https://devfeed.tech/tags/design.md>), [env-file-security](<https://devfeed.tech/tags/env-file-security.md>), [integrations](<https://devfeed.tech/tags/integrations.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [net-conf](<https://devfeed.tech/tags/net-conf.md>)

### AI overview

The article argues that integration verbosity can be a consequence of good layering. General-purpose libraries such as view binding, Dagger, SQLDelight, and RecyclerView must leave higher-level integration and configuration decisions to their callers, enabling more flexible libraries and platforms.

### Source excerpt

One of my favorite non-features from building view binding is that it lacks integration with activities or fragments. If you use view binding with activities or fragments, however, this fact might be to your disdain. Every activity using view binding is forced to do something along the lines of: override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) val binding = ProfileViewBinding.inflate(layoutInflater) setContentView(binding.root) // Do stuff with 'binding' } This is textbook verbosity, and some would argue boilerplate. It only gets worse with fragments (due to their poor design and to no specific fault of view binding which works the same as any View reference). View binding exists at a different layer of abstraction than is appropriate for integration with higher-level components like activities or fragments. It serves as a type-safe representation of a schema declared in an XML file and that's it. It has no more knowledge of activities and fragments than the associated R.layout.profile_view integer does. Higher-level libraries like androidx.activity and androidx.fragment have integrations with those R.layout integers. If you're upset that view binding has no turn-key solution for activities and fragments then this is the tree you should be barking up. View binding wasn't built with verbosity in mind. Hell, it's not even that verbose. It ended up this way because it's the design the layer of abstraction it operates at demands. The same pattern occurs in some of my other favorite libraries. Dagger offers you nothing and requires that you build up the dependency injectors, their hierarchy, and their lifecycle entirely yourself. SQLDelight makes you specify database info in the build configuration and a database driver in the runtime API. RecylerView requires at minimum an adapter subtype and to choose and configure a layout manager. The layer at which these tools operate is sufficiently general such that their good design requires

## Applying Semantic Web Principles to Source Code for Better Understanding

DevFeed: [Applying Semantic Web Principles to Source Code for Better Understanding](<https://devfeed.tech/articles/as-we-may-code-28997.md>)

Original publisher: [Read original article](<https://nshipster.com/as-we-may-code/>)

Author: Mattt (mattt@nshipster.com)

Published: 2020-07-07T07:00:00Z

Content type: opinion

Language: en

Sources: [NSHipster](<https://devfeed.tech/sources/nshipster.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Semantic Web](<https://devfeed.tech/topics/semantic-web.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Development](<https://devfeed.tech/topics/development.md>), [Syntax Highlighting](<https://devfeed.tech/topics/syntax-highlighting.md>), [Universal Syntax Tree.](<https://devfeed.tech/topics/unist.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [code](<https://devfeed.tech/tags/code.md>), [internet](<https://devfeed.tech/tags/internet.md>), [miscellaneous](<https://devfeed.tech/tags/miscellaneous.md>), [programming](<https://devfeed.tech/tags/programming.md>), [publications](<https://devfeed.tech/tags/publications.md>), [source](<https://devfeed.tech/tags/source.md>), [space](<https://devfeed.tech/tags/space.md>), [syntax-highlighting](<https://devfeed.tech/tags/syntax-highlighting.md>)

### AI overview

The article proposes applying semantic web principles to source code to improve understanding. It outlines language-agnostic representation, unique URL identifiers for packages, modules, and APIs, and decentralized information distributed across federated data sources.

### Source excerpt

What if, instead of lowering source code down for the purpose of execution, we raised it for the purpose of understanding?

## Introducing the Activity Result APIs

DevFeed: [Introducing the Activity Result APIs](<https://devfeed.tech/articles/introducing-the-activity-result-apis-25656.md>)

Original publisher: [Read original article](<https://adambennett.dev/2020/03/introducing-the-activity-result-apis/>)

Published: 2020-03-22T09:11:18Z

Content type: tutorial

Language: en

Sources: [Posts on Adam Bennett](<https://devfeed.tech/sources/posts-on-adam-bennett.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [android](<https://devfeed.tech/tags/android.md>), [apis](<https://devfeed.tech/tags/apis.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [blog](<https://devfeed.tech/tags/blog.md>), [callback](<https://devfeed.tech/tags/callback.md>), [camera](<https://devfeed.tech/tags/camera.md>), [career](<https://devfeed.tech/tags/career.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [data-type](<https://devfeed.tech/tags/data-type.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [finance](<https://devfeed.tech/tags/finance.md>), [functional](<https://devfeed.tech/tags/functional.md>), [growth](<https://devfeed.tech/tags/growth.md>), [java](<https://devfeed.tech/tags/java.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [money](<https://devfeed.tech/tags/money.md>), [opinions](<https://devfeed.tech/tags/opinions.md>), [permission](<https://devfeed.tech/tags/permission.md>), [software](<https://devfeed.tech/tags/software.md>), [startups](<https://devfeed.tech/tags/startups.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [training](<https://devfeed.tech/tags/training.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [type-parameters](<https://devfeed.tech/tags/type-parameters.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial introduces Google's Activity Result APIs as a reusable abstraction for handling activity callbacks. It explains the basic workflow, custom contracts, registration, invocation, and built-in contracts for permissions, phone calls, and taking pictures.

### Source excerpt

Google has finally released the new Activity Result APIs, which are something I've been looking forward to for a very long time. In this post I'll run through the basics, how you can create your own contracts, and how this allows us to abstract away even more responsibilities from your UI.

## Computers can be understood

DevFeed: [Computers can be understood](<https://devfeed.tech/articles/computers-can-be-understood-21945.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/post/computers-can-be-understood/>)

Author: Nelson Elhage

Published: 2020-02-16T20:00:00Z

Content type: opinion

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [systems](<https://devfeed.tech/topics/systems.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [browser](<https://devfeed.tech/tags/browser.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [concepts](<https://devfeed.tech/tags/concepts.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [exploration](<https://devfeed.tech/tags/exploration.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [kernel](<https://devfeed.tech/tags/kernel.md>), [learning](<https://devfeed.tech/tags/learning.md>), [software](<https://devfeed.tech/tags/software.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

The author describes a mindset centered on the belief that computers and software systems can be understood through determined exploration and learning. Although modern systems are highly complex and layered, each layer can be understood at an appropriate level of abstraction, with deeper investigation possible when needed.

### Source excerpt

Introduction This post attempts to describe a mindset I've come to realize I bring to essentially all of my work with software. I attempt to articulate this mindset, some of its implications and strengths, and some of the ways in which it's lead me astray. Software can be understood I approach software with a deep-seated belief that computers and software systems can be understood. This belief is, for me, not some abstruse theoretical assertion, but a deeply felt belief that essentially any question I might care to ask (about computers) has a comprehensible answer which is accessible with determined exploration and learning.

## Decoding Handler and Looper in Android

DevFeed: [Decoding Handler and Looper in Android](<https://devfeed.tech/articles/decoding-handler-and-looper-in-android-38621.md>)

Original publisher: [Read original article](<https://krossovochkin.com/posts/2019_12_24_decoding_handler_and_looper_in_android/>)

Published: 2019-12-24T00:00:00Z

Content type: tutorial

Language: en

Sources: [Vasya Drobushkov](<https://devfeed.tech/sources/vasya-drobushkov.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [class](<https://devfeed.tech/topics/class.md>), [callback](<https://devfeed.tech/topics/callback.md>), [interface](<https://devfeed.tech/topics/interface.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [android](<https://devfeed.tech/tags/android.md>), [callback](<https://devfeed.tech/tags/callback.md>), [class](<https://devfeed.tech/tags/class.md>), [code](<https://devfeed.tech/tags/code.md>), [interface](<https://devfeed.tech/tags/interface.md>), [object](<https://devfeed.tech/tags/object.md>), [parcelable](<https://devfeed.tech/tags/parcelable.md>), [payload](<https://devfeed.tech/tags/payload.md>), [thread](<https://devfeed.tech/tags/thread.md>)

### AI overview

This tutorial explains Android's Handler and Looper, describing Looper as an event-loop abstraction that drains a MessageQueue and Handler as an abstraction for posting, removing, and handling queued events. It also covers their relationships and the structure of Message objects.

### Source excerpt

Introduction Handler and Looper are one of the main low-level Android OS things, which almost nobody uses directly (at least nowadays). But they are at the core, so many other high-level solutions are based on them. Therefore one should know what Handler and Looper are, what and how they are doing. In this article we'll try to understand Handler and Looper in Android. What, how and why we might need them. We'll start from some basic knowledge on classes and what they are doing, continue with relations between them. Then we'll look at each class separately trying to dive deep into details. And will finish with some canonical examples on where they can be used.

## Space Shuttle style programming

DevFeed: [Space Shuttle style programming](<https://devfeed.tech/articles/space-shuttle-style-programming-25334.md>)

Original publisher: [Read original article](<https://kau.sh/blog/space-shuttle-style-programming/>)

Author: Kaushik Gopal

Published: 2019-06-05T07:00:00Z

Content type: opinion

Language: en

Sources: [Kaushik Gopal's Site](<https://devfeed.tech/sources/kaushik-gopal-s-site.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [Code](<https://devfeed.tech/topics/code.md>), [context](<https://devfeed.tech/topics/context.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [code](<https://devfeed.tech/tags/code.md>), [context](<https://devfeed.tech/tags/context.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This commentary examines "Space Shuttle style" programming, a deliberately verbose approach associated with a Kubernetes controller. The style emphasizes explicit comments, considered branches, and preserving business context so future maintainers can understand complex binding behavior.

### Source excerpt

Sometime back I ran across a thread where folks talked about this programming style called "Space Shuttle style" that the Kubernetes codebase followed. // ================================================================== // PLEASE DO NOT ATTEMPT TO SIMPLIFY THIS CODE. // KEEP THE SPACE SHUTTLE FLYING. // ================================================================== // // This controller is intentionally written in a very verbose style. You will // notice: // // 1. Every 'if' statement has a matching 'else' (exception: simple error // checks for a client API call) // 2. Things that may seem obvious are commented explicitly // // We call this style 'space shuttle style'. Space shuttle style is meant to // ensure that every branch and condition is considered and accounted for - // the same way code is written at NASA for applications like the space // shuttle. // // Originally, the work of this controller was split amongst three // controllers. This controller is the result a large effort to simplify the // PV subsystem. During that effort, it became clear that we needed to ensure // that every single condition was handled and accounted for in the code, even // if it resulted in no-op code branches. // // As a result, the controller code may seem overly verbose, commented, and // 'branchy'. However, a large amount of business knowledge and context is // recorded here in order to ensure that future maintainers can correctly // reason through the complexities of the binding behavior. For that reason, // changes to this file should preserve and add to the space shuttle style. // // ================================================================== // PLEASE DO NOT ATTEMPT TO SIMPLIFY THIS CODE. // KEEP THE SPACE SHUTTLE FLYING. // ================================================================== To be clear: I don't follow the Space Shuttle style programming with my own code. However, I've noticed now that when I do comment my code, I'm a little more liberal with m

[Next page](<https://devfeed.tech/tags/abstraction.md?cursor=WyIyMDE5LTA2LTA1VDA3OjAwOjAwKzAwOjAwIiwgIjFiZTU1ZjE4LTMyZjAtNDFkNi04NGMyLWZkNDhjMTY3ZjM1YiJd>)