# approach

Published articles for approach.

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

## How to Improve Coding Interview Performance with Personal Stories and Targeted Technical Practice

DevFeed: [How to Improve Coding Interview Performance with Personal Stories and Targeted Technical Practice](<https://devfeed.tech/articles/i-used-to-suck-at-coding-interviews-then-i-quadrupled-my-salary-32370.md>)

Original publisher: [Read original article](<https://brianjenney.substack.com/p/i-used-to-suck-at-coding-interviews-b9c>)

Author: Brian Jenney

Published: 2026-03-24T15:05:22Z

Content type: opinion

Language: en

Sources: [Brian Jenney](<https://devfeed.tech/sources/brian-jenney.md>)

Topics: [coding](<https://devfeed.tech/topics/coding.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [career](<https://devfeed.tech/tags/career.md>), [coding](<https://devfeed.tech/tags/coding.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [manager](<https://devfeed.tech/tags/manager.md>), [recursion](<https://devfeed.tech/tags/recursion.md>), [software-engineer](<https://devfeed.tech/tags/software-engineer.md>)

### AI overview

The author describes struggling with coding interviews despite being able to do the underlying job. They recommend cataloging personal work stories for recurring behavioral questions and focusing practice on recurring technical gaps.

### Source excerpt

Five years ago, during an interview for a senior dev role, I had a panic attack.

## Taming chaos is a learnable skill

DevFeed: [Taming chaos is a learnable skill](<https://devfeed.tech/articles/taming-chaos-is-a-learnable-skill-37643.md>)

Original publisher: [Read original article](<https://swizec.com/blog/taming-chaos-is-a-learnable-skill>)

Author: hi@swizec.com (Swizec Teller)

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

Content type: opinion

Language: en

Sources: [Swizec Teller](<https://devfeed.tech/sources/swizec-teller.md>)

Topics: [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [engineering-culture](<https://devfeed.tech/topics/engineering-culture.md>), [Low-Code / Internal Tools](<https://devfeed.tech/topics/internal-tools.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [chaos](<https://devfeed.tech/tags/chaos.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [internal-tools](<https://devfeed.tech/tags/internal-tools.md>), [operations](<https://devfeed.tech/tags/operations.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [startup](<https://devfeed.tech/tags/startup.md>)

### AI overview

The article argues that handling interruptions, operational surprises, exceptions, and changing priorities is a learnable software-engineering skill. It recommends owning system problems, managing scope and tradeoffs, validating quality requirements, and maintaining a long-term vision despite short-term disruption.

### Source excerpt

How you approach software engineering makes it harder or easier to handle interruptions and other chaos. Writing a behavioral interview made me realize this is a learnable skill!

## A Supply-Chain Attack on Nix and the Approach to Solving It

DevFeed: [A Supply-Chain Attack on Nix and the Approach to Solving It](<https://devfeed.tech/articles/fix-your-fods-32404.md>)

Original publisher: [Read original article](<https://garnix.io/blog/fix-your-fods>)

Published: 2025-10-30T00:00:00Z

Content type: article

Language: en

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

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

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [supply-chain](<https://devfeed.tech/tags/supply-chain.md>)

### AI overview

The article discusses a supply-chain attack on Nix and describes the publisher's approach to solving it.

### Source excerpt

A supply-chain attack on Nix, and our approach to solving it.

## Using Provocations to Shake the Status Quo

DevFeed: [Using Provocations to Shake the Status Quo](<https://devfeed.tech/articles/using-provocations-to-shake-the-status-quo-39157.md>)

Original publisher: [Read original article](<https://open.nytimes.com/using-provocations-to-shake-the-status-quo-7e884b866310?source=rss----51e1d1745b32---4>)

Author: The NYT Open Team

Published: 2025-07-22T16:23:11Z

Content type: opinion

Language: en

Sources: [New York Times](<https://devfeed.tech/sources/new-york-times.md>)

Topics: [Users](<https://devfeed.tech/topics/users.md>), [format](<https://devfeed.tech/topics/format.md>), [context](<https://devfeed.tech/topics/context.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [design](<https://devfeed.tech/tags/design.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [figma](<https://devfeed.tech/tags/figma.md>), [photography](<https://devfeed.tech/tags/photography.md>), [process](<https://devfeed.tech/tags/process.md>), [recipe](<https://devfeed.tech/tags/recipe.md>), [ux-design](<https://devfeed.tech/tags/ux-design.md>), [visual-hierarchy](<https://devfeed.tech/tags/visual-hierarchy.md>), [visualization](<https://devfeed.tech/tags/visualization.md>)

### AI overview

A case study of how NYT Cooking used high-fidelity design provocations to rethink recipe cards. The approach prioritized photography, flexible recipe information, a modernized format, and a more streamlined evaluation process while keeping the project scope controlled.

### Source excerpt

The bold approach NYT Cooking used to define a strategy for recipe cards.Illustration by Ben Denzer By Jayne Lee In The New York Times Cooking, "cards," or the containers that represent our content, are the first impression of our brand. They're the window into our recipes and users rely on them to evaluate and choose what to cook. NYT Cooking users are particularly attracted to our appetizing food photos. In every research session, participants get distracted by a delicious-looking dish while answering the moderator's questions. People tend to browse with their stomachs first and then see if the recipe specifications meet their personal criteria (For example, do I have enough time to cook this?). A problem we encountered: our beautiful photography was muddied by the page's gray background. The white card containers sitting on top of the gray page forced your eyes to focus on the container instead of the photo. The visual hierarchy was at odds with the preferred reading and browsing order of our audience: photo first, then recipe information. Recipe information varies, so the card needs to afford that variability. Using containers forced us to keep our cards the same height, resulting in unnecessary whitespace. Since the cards were so tall, this limited the amount of recipes a user could see at once, increasing the time users scanned for recipes. We needed to highlight our photography, modernize the format and streamline the recipe evaluation process. While designing solutions, I realized that I had more questions than answers. Answering each question would have significantly bloated the project scope. Some examples were: What order of recipe information is most helpful when deciding between recipes? Are recipe bylines important? Which presentation of ratings is more effective? Because the priority was to update the format rather than improve comprehension, and to avoid bloating the scope of the project, I started with design provocations over design specs. Because

## Why We Don't Call Them SDRs Anymore: Inside Teleport's Take on Modern Sales Development

DevFeed: [Why We Don't Call Them SDRs Anymore: Inside Teleport's Take on Modern Sales Development](<https://devfeed.tech/articles/why-we-don-t-call-them-sdrs-anymore-inside-teleport-s-take-on-modern-sales-development-29972.md>)

Original publisher: [Read original article](<https://goteleport.com/blog/why-we-dont-call-them-sdrs-anymore/>)

Author: amanda.pessica@goteleport.com (Amanda Pessica)

Published: 2025-05-16T00:00:00Z

Content type: opinion

Language: en

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

Topics: [Job](<https://devfeed.tech/topics/job.md>), [account](<https://devfeed.tech/topics/account.md>), [meetings](<https://devfeed.tech/topics/meetings.md>)

Tags: [account](<https://devfeed.tech/tags/account.md>), [ai](<https://devfeed.tech/tags/ai.md>), [approach](<https://devfeed.tech/tags/approach.md>), [company](<https://devfeed.tech/tags/company.md>), [enterprise](<https://devfeed.tech/tags/enterprise.md>), [hiring](<https://devfeed.tech/tags/hiring.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [sales](<https://devfeed.tech/tags/sales.md>), [strategy](<https://devfeed.tech/tags/strategy.md>)

### AI overview

Teleport explains why it replaced the SDR title with Account Development Representative, arguing that modern enterprise sales development requires personalized, research-driven outreach, brand knowledge, strategic persistence, and an updated hiring process.

### Source excerpt

Discover why Teleport is moving beyond the SDR title--and how our modern approach to sales development is reshaping hiring, outreach, and success.

## System Design Interview Framework

DevFeed: [System Design Interview Framework](<https://devfeed.tech/articles/system-design-interview-framework-32316.md>)

Original publisher: [Read original article](<https://evanking1.medium.com/system-design-interview-framework-419b4796e051?source=rss-9736778727ef------2>)

Author: Evan King

Published: 2024-11-19T21:39:41Z

Content type: tutorial

Language: en

Sources: [Evan King](<https://devfeed.tech/sources/evan-king.md>)

Topics: [Requirements](<https://devfeed.tech/topics/requirements.md>), [structure](<https://devfeed.tech/topics/structure.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [client](<https://devfeed.tech/topics/client.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [framework](<https://devfeed.tech/tags/framework.md>), [interview](<https://devfeed.tech/tags/interview.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [structure](<https://devfeed.tech/tags/structure.md>), [system-design-interview](<https://devfeed.tech/tags/system-design-interview.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

A practical framework for system design interviews that emphasizes delivering a working system. It recommends spending about five minutes clarifying and prioritizing functional and non-functional requirements, with examples involving Twitter and a cache.

### Source excerpt

From the co-founder of www.hellointerview.com The easiest way to sabotage your chances of getting an offer in your system design interview is to fail to deliver a working system. This is the most common reason that mid-level candidates fail these interviews. While a firm structure to your approach is important and your interviewer is not trained specifically to assess you on your delivery (often this gets bucketed into "communication"), in practice we've seen many candidates that perform significantly better by following a structure which both keeps them from getting stuck and ensures they deliver a working system. Requirements (~5 minutes) The goal of the requirements section is to get a clear understanding of the system that you are being asked to design. To do this, we suggest you break your requirements into two sections. 1) Functional Requirements Functional requirements are your "Users/Clients should be able to..." statements. These are the core features of your system and should be the first thing you discuss with your interviewer. Oftentimes this is a back and fourth with your interviewer. Ask targeted questions as if you were talking to a client, customer, or product manager ("does the system need to do X?", "what would happen if Y?") to arrive at a prioritized list of core features. For example, if you were designing a system like Twitter, you might have the following functional requirements: Users should be able to post tweets Users should be able to follow other users Users should be able to see tweets from users they follow A cache meanwhile might have requirements like: Clients should be able to insert items Clients should be able to set expirations Clients should be able to read items Keep your requirements targeted! The main objective in the remaining part of the interview is to develop a system that meets the requirements you've identified -- so it's crucial to be strategic in your prioritization. Many of these systems have hundreds of features, but it

## Transparency, autonomy, responsiveness, and education: How the Aha! engineering team works

DevFeed: [Transparency, autonomy, responsiveness, and education: How the Aha! engineering team works](<https://devfeed.tech/articles/transparency-autonomy-responsiveness-and-education-how-the-aha-engineering-team-works-33522.md>)

Original publisher: [Read original article](<https://www.aha.io/engineering/articles/how-we-work>)

Published: 2024-10-28T00:00:00Z

Content type: opinion

Language: en

Sources: [Aha! Engineering Blog](<https://devfeed.tech/sources/aha-engineering-blog.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Self-organizing Team](<https://devfeed.tech/topics/self-organizing-team.md>), [Agile](<https://devfeed.tech/topics/agile.md>), [pair\_programming](<https://devfeed.tech/topics/pair-programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [approach](<https://devfeed.tech/tags/approach.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [meetings](<https://devfeed.tech/tags/meetings.md>), [pair-programming](<https://devfeed.tech/tags/pair-programming.md>), [product](<https://devfeed.tech/tags/product.md>), [programming](<https://devfeed.tech/tags/programming.md>), [security](<https://devfeed.tech/tags/security.md>), [team](<https://devfeed.tech/tags/team.md>), [teams](<https://devfeed.tech/tags/teams.md>), [transparency](<https://devfeed.tech/tags/transparency.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

The article explains how Aha!'s engineering team combines individual, pair, and team-based work. Engineers present their work in weekly meetings, retain ownership of code, and share knowledge across the organization. Small agile teams align with product areas and infrastructure, while rotating support responsibilities provide broader exposure. Product managers, designers, and engineers prioritize and scope work collaboratively.

### Source excerpt

Organizations have many different ways to approach how teammates write code. You have individual silos, pair programming, team-based work, and black box interfaces where you have no idea how the other team is structured. We use a mix of these approa

## A Contextual and Dynamic Approach to Designing Command-Line Interfaces

DevFeed: [A Contextual and Dynamic Approach to Designing Command-Line Interfaces](<https://devfeed.tech/articles/contextual-clis-32402.md>)

Original publisher: [Read original article](<https://garnix.io/blog/contextual-cli>)

Published: 2023-11-17T00:00:00Z

Content type: opinion

Language: en

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

Topics: [Command-line interface](<https://devfeed.tech/topics/cli.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [command](<https://devfeed.tech/tags/command.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>)

### AI overview

The article discusses a contextual and dynamic approach to designing command-line interfaces.

### Source excerpt

A more contextual and dynamic approach to designing command-line interfaces.

## Computing Percentages Easier

DevFeed: [Computing Percentages Easier](<https://devfeed.tech/articles/computing-percentages-easier-40472.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2023/09/05/computing-percentages-easier/>)

Published: 2023-09-05T21:47:37Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [math](<https://devfeed.tech/topics/math.md>), [Computing](<https://devfeed.tech/topics/computing.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [arithmetic](<https://devfeed.tech/tags/arithmetic.md>), [math](<https://devfeed.tech/tags/math.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [numbers](<https://devfeed.tech/tags/numbers.md>), [puzzle](<https://devfeed.tech/tags/puzzle.md>), [scaling](<https://devfeed.tech/tags/scaling.md>)

### AI overview

A math tutorial explains mental percentage calculations using the fact that x% of y equals y% of x. It presents several approaches, including choosing the easier percentage, multiplying first and dividing by 100, scaling from 1%, and splitting the denominator.

### Source excerpt

Problem: Compute 16% of 25 in your head. Solution: 16% of 25 is equivalent to 25% of 16, which is clearly 4. This is true for all numbers: $x\%$ of $y$ is always equal to $y\%$ of $x$. The first one is $\frac{x}{100} y$ and the second is $\frac{y}{100}x$, and because multiplication is commutative and associative, both are equal to $(x \cdot y) / 100$. You can pick the version that is easiest.

## Architecture and Gardening for Startups

DevFeed: [Architecture and Gardening for Startups](<https://devfeed.tech/articles/architecture-and-gardening-for-startups-40652.md>)

Original publisher: [Read original article](<https://radek.io/posts/architecture-and-gardening-for-startups/>)

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

Content type: opinion

Language: en

Sources: [Radek Pazdera](<https://devfeed.tech/sources/radek-pazdera.md>)

Topics: [Framework](<https://devfeed.tech/topics/framework.md>), [App](<https://devfeed.tech/topics/app.md>), [Software](<https://devfeed.tech/topics/software.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [building-products](<https://devfeed.tech/tags/building-products.md>), [discovery](<https://devfeed.tech/tags/discovery.md>), [experiments](<https://devfeed.tech/tags/experiments.md>), [features](<https://devfeed.tech/tags/features.md>), [founders](<https://devfeed.tech/tags/founders.md>), [product](<https://devfeed.tech/tags/product.md>), [software](<https://devfeed.tech/tags/software.md>), [startups](<https://devfeed.tech/tags/startups.md>), [strategy](<https://devfeed.tech/tags/strategy.md>)

### AI overview

The article applies George R. R. Martin's distinction between architects and gardeners to startup product development. It argues that founders need an architect mindset before launch to form and build a solution, then a gardener mindset after launch to discover what works through listening, tinkering, customer conversations, and experiments instead of focusing only on adding features.

### Source excerpt

What George R. R. Martin taught me about building products

## Effective Kotlin Item 36: Prefer composition over inheritance

DevFeed: [Effective Kotlin Item 36: Prefer composition over inheritance](<https://devfeed.tech/articles/effective-kotlin-item-36-prefer-composition-over-inheritance-39274.md>)

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

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

Content type: article

Language: en

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

Topics: [Inheritance](<https://devfeed.tech/topics/inheritance.md>), [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [reuse](<https://devfeed.tech/topics/reuse.md>), [superclass](<https://devfeed.tech/topics/superclass.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [hierarchy](<https://devfeed.tech/tags/hierarchy.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [object](<https://devfeed.tech/tags/object.md>), [oop](<https://devfeed.tech/tags/oop.md>), [reuse](<https://devfeed.tech/tags/reuse.md>), [superclass](<https://devfeed.tech/tags/superclass.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

The article argues that inheritance should primarily model a clear "is a" relationship and can be problematic when used mainly for code extraction or reuse. It presents class composition as a safer and more explicit alternative, while acknowledging that composition requires additional code.

### Source excerpt

Years of OOP made us overuse inheritance. Instead, we should more often use a composition that is safer and more explicit. More often, but not always...

## Sociotechnical Approach to Cyber Security

DevFeed: [Sociotechnical Approach to Cyber Security](<https://devfeed.tech/articles/sociotechnical-approach-to-cyber-security-36975.md>)

Original publisher: [Read original article](<https://shostack.org/blog/sociotechnical-approach-to-cyber-security/>)

Author: Adam

Published: 2020-07-24T00:00:00Z

Content type: article

Language: en

Sources: [Shostack & Friends Blog](<https://devfeed.tech/sources/shostack-friends-blog.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [context](<https://devfeed.tech/topics/context.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [cyber](<https://devfeed.tech/tags/cyber.md>), [post](<https://devfeed.tech/tags/post.md>), [security](<https://devfeed.tech/tags/security.md>), [technical](<https://devfeed.tech/tags/technical.md>), [uk](<https://devfeed.tech/tags/uk.md>)

### AI overview

This post highlights a recent UK NCSC article by Helen L. on sociotechnical approaches to cybersecurity, including the context of these approaches, the RISCS Institute, and a related problem book.

### Source excerpt

A recent post from Helen L. of the UK's NCSC, A sociotechnical approach to cyber security, shares the context of socio-technical approaches.

## Flat Multi-Environment Config for Craft CMS 3

DevFeed: [Flat Multi-Environment Config for Craft CMS 3](<https://devfeed.tech/articles/flat-multi-environment-config-for-craft-cms-3-31286.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/multi-environment-configuration-for-craft-cms-3>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-02-29T15:29:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [.env](<https://devfeed.tech/topics/dotenv.md>), [Environment Variables](<https://devfeed.tech/topics/environment-variables.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [aliases](<https://devfeed.tech/tags/aliases.md>), [api-keys](<https://devfeed.tech/tags/api-keys.md>), [approach](<https://devfeed.tech/tags/approach.md>), [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [config](<https://devfeed.tech/tags/config.md>), [configs](<https://devfeed.tech/tags/configs.md>), [craft](<https://devfeed.tech/tags/craft.md>), [database](<https://devfeed.tech/tags/database.md>), [docker](<https://devfeed.tech/tags/docker.md>), [environment](<https://devfeed.tech/tags/environment.md>), [environment-variables](<https://devfeed.tech/tags/environment-variables.md>), [file](<https://devfeed.tech/tags/file.md>), [files](<https://devfeed.tech/tags/files.md>), [flat](<https://devfeed.tech/tags/flat.md>), [git](<https://devfeed.tech/tags/git.md>), [heroku](<https://devfeed.tech/tags/heroku.md>), [insights](<https://devfeed.tech/tags/insights.md>), [multi-environment](<https://devfeed.tech/tags/multi-environment.md>), [need](<https://devfeed.tech/tags/need.md>), [presents](<https://devfeed.tech/tags/presents.md>), [secrets](<https://devfeed.tech/tags/secrets.md>), [sorts](<https://devfeed.tech/tags/sorts.md>), [variables](<https://devfeed.tech/tags/variables.md>)

### AI overview

A tutorial on configuring Craft CMS 3 across development, staging, and production environments using aliases, environment variables, .env files, and configuration files. It presents a flat configuration approach and discusses keeping environment-specific credentials and secrets separate from source code and databases.

### Source excerpt

Multi-environment configs for Craft CMS are a mix of aliases, environment variables, and config files. This article sorts it all out, and presents a flat config file approach

## Unspoken Assumptions Underlying OO Design Maxims

DevFeed: [Unspoken Assumptions Underlying OO Design Maxims](<https://devfeed.tech/articles/unspoken-assumptions-underlying-oo-design-maxims-32238.md>)

Original publisher: [Read original article](<https://bruceeckel.com/blog/2019-12-24-unspoken-assumptions-underlying-oo-design-maxims/>)

Author: Bruce Eckel

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

Content type: opinion

Language: en

Sources: [Bruce Eckel - Computing Thoughts](<https://devfeed.tech/sources/bruce-eckel-computing-thoughts.md>)

Topics: [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [change](<https://devfeed.tech/tags/change.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [object-oriented](<https://devfeed.tech/tags/object-oriented.md>), [oop](<https://devfeed.tech/tags/oop.md>)

### AI overview

The article argues that many object-oriented design maxims implicitly assume developers can predict how a system will change. It questions whether adding complexity to support uncertain future changes is justified, using the open-closed principle and polymorphism as examples.

### Source excerpt

For Atomic Kotlin, I've been struggling with an "atom" (very small chapter) during the last couple of months. It's on object-oriented design, and it brought up a lot of feelings I've had for quite awhile about some of the various maxims and design guidelines that have appeared in recent decades, since OO became mainstream. I couldn't quite put my finger on what bothered me about these design ideas. Then @codingunicorn did it for me by writing a post called Flexible code considered harmful.

## How to remove duplicate lines from files preserving their order

DevFeed: [How to remove duplicate lines from files preserving their order](<https://devfeed.tech/articles/how-to-remove-duplicate-lines-from-files-preserving-their-order-37447.md>)

Original publisher: [Read original article](<https://iridakos.com/programming/2019/05/16/remove-duplicate-lines-preserving-order-linux>)

Author: Lazarus Lazaridis

Published: 2019-05-16T08:30:00Z

Content type: tutorial

Language: en

Sources: [Lazarus Lazaridis](<https://devfeed.tech/sources/lazarus-lazaridis.md>)

Topics: [Script](<https://devfeed.tech/topics/script.md>), [file](<https://devfeed.tech/topics/file.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [awk](<https://devfeed.tech/tags/awk.md>), [bash](<https://devfeed.tech/tags/bash.md>), [featured](<https://devfeed.tech/tags/featured.md>), [file](<https://devfeed.tech/tags/file.md>), [files](<https://devfeed.tech/tags/files.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [programming](<https://devfeed.tech/tags/programming.md>), [scripts](<https://devfeed.tech/tags/scripts.md>)

### AI overview

A tutorial explains how to remove duplicate lines from a text file with awk while preserving their original order. It breaks down the associative array, line-occurrence tracking, negation, post-increment behavior, and why other approaches may not preserve order.

### Source excerpt

Suppose you have a text file and you need to remove all of its duplicate lines. TL;DR To remove the duplicate lines preserving their order in the file use: awk '!visited[$0]++' your_file > deduplicated_file How it works The script keeps an associative array with indices equal to the unique lines of the file and values equal to their occurrences. For each line of the file, if the line occurrences are zero then it increases them by one and prints the line, otherwise it just increases the occurrences without printing the line. I was not familiar with awk and I wanted to understand how is this accomplished with such a short script (awkward). I did my research and here is what is going on: the awk "script" !visited[$0]++ is executed for each line of the input file visited[] is a variable of type associative array (a.k.a. Map). We don't have to initialize it, awk will do this for us the first time we access it. the $0 variable holds the contents of the line currently being processed visited[$0] accesses the value stored in the map with key equal to $0 (the line being processed), a.k.a. the occurrences (which we set below) the ! negates the occurrences value: In awk, any nonzero numeric value or any nonempty string value is true By default, variables are initialized to the empty string, which is zero if converted to a number That being said: if visited[$0] returns a number greater than zero, this negation is resolved to false. if visited[$0] returns a number equal to zero or an empty string, this negation is resolved to true. the ++ operation increases the variable's value (visited[$0]) by one. If the value is empty, awk converts it to 0 (number) automatically and then it gets increased. Note: the operation is executed after we access the variable's value. Summing up, the whole expression evaluates to: true if the occurrences are zero/empty string false if the occurrences are greater than zero awk statements consist of a pattern-expression and an associated action. <patter

## The Architecture effect of Test Driven Development

DevFeed: [The Architecture effect of Test Driven Development](<https://devfeed.tech/articles/the-architecture-effect-of-test-driven-development-30578.md>)

Original publisher: [Read original article](<https://ryanharter.com/blog/2015/04/the-architecture-effect-of-test-driven-development/>)

Published: 2015-04-03T07:00:00Z

Content type: opinion

Language: en

Sources: [Blogs on Ryan Harter](<https://devfeed.tech/sources/blogs-on-ryan-harter.md>)

Topics: [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [approach](<https://devfeed.tech/tags/approach.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [software](<https://devfeed.tech/tags/software.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

The author describes adopting a test-first approach in an Android client project and explains an unexpected benefit: writing tests to define requirements encourages more deliberate architectural decisions. Tests enable designing an API, validating it with a mocked implementation, and identifying code that is not properly encapsulated.

### Source excerpt

I've finally done it. In the latest client project I'm working on I've decided to take a test first approach. I've been wanting to experience Test Driven Development on Android for years, but have never felt comfortable enough to really commit. After reading through Kent Beck's book and checking out Corey Latislaw's latest book, I decided I was ready to make the leap. I'll write some more later about my experience, reactions, and what I've learned, but today I wanted to share a slightly unexpected benefit.

## Google's Hybrid Approach to Research

DevFeed: [Google's Hybrid Approach to Research](<https://devfeed.tech/articles/google-s-hybrid-approach-to-research-40567.md>)

Original publisher: [Read original article](<http://norvig.com/hybrid-research.pdf>)

Published: 2012-06-24T00:00:00Z

Content type: article

Language: en

Sources: [Peter Norvig](<https://devfeed.tech/sources/peter-norvig.md>)

Topics: [Google](<https://devfeed.tech/topics/google.md>), [communications](<https://devfeed.tech/topics/communications.md>)

Tags: [approach](<https://devfeed.tech/tags/approach.md>), [article](<https://devfeed.tech/tags/article.md>), [communications](<https://devfeed.tech/tags/communications.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [google](<https://devfeed.tech/tags/google.md>), [research](<https://devfeed.tech/tags/research.md>)

### AI overview

An article in Communications of the ACM describes Google's hybrid approach to research across Google Research and engineering as a whole.

### Source excerpt

An article printed in the Communications of the ACM describing Google's research, both within Google Research and within Engineering as a whole. Alfred Spector, Peter Norvig and Slav Petrov.