惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
腾讯CDC
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
L
LangChain Blog
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
IT之家
IT之家
A
About on SuperTechFans
H
Help Net Security

Ivan on Containers, Kubernetes, and Server-Side

A grounded take on agentic coding for production environments Server-Side Playgrounds Reimagined: Build, Boot, and Network Your Own Virtual Labs [not a] Kubernetes 101 - Pods, Deployments, and Services As an Attempt To Automate Age-Old Infra Patterns JavaScript or TypeScript? How To Benefit From the Dichotomy On Software Design... and Good Writing Building a Firecracker-Powered Course Platform To Learn Docker and Kubernetes How To Publish a Port of a Running Container What Actually Happens When You Publish a Container Port A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding Debugging Containers Like a Pro Docker: How To Debug Distroless And Slim Containers How To Extract Container Image Filesystem Using Docker | iximiuz Labs In Pursuit of Better Container Images: Alpine, Distroless, Apko, Chisel, DockerSlim, oh my! How To Start Programming In Go: Advice For Fellow DevOps Engineers Kubernetes Ephemeral Containers and kubectl debug Command How To Develop Kubernetes CLIs Like a Pro Docker Container Commands Explained: Understand, Don't Memorize | iximiuz Labs Learning Docker with Docker - Toying With DinD For Fun And Profit How To Extend Kubernetes API - Kubernetes vs. Django The Influence of Plumbing on Programming How To Call Kubernetes API from Go - Types and Common Machinery How To Call Kubernetes API using Simple HTTP Client Kubernetes API Basics - Resources, Kinds, and Objects OpenFaaS - Run Containerized Functions On Your Own Terms Learning Containers From The Bottom Up Docker Containers vs. Kubernetes Pods - Taking a Deeper Look | iximiuz Labs Learn-by-Doing Platforms for Dev, DevOps, and SRE Folks How HTTP Keep-Alive can cause TCP race condition How to Work with Container Images Using ctr | iximiuz Labs Multiple Containers, Same Port, no Reverse Proxy...
Мастерить!
Ivan Velichko · 2016-01-08 · via Ivan on Containers, Kubernetes, and Server-Side

Есть два типа языков: языки, где есть только один очевидный/правильный путь реализовать что-либо (Python, Java), и языки, где одну и ту же фичу можно закодить тысячей и одним способом (C++, JavaScript, Ruby). Первые больше похожи на детские конструкторы, вторые - на пластелин.

Подробнее LEGOs, Play-Doh, and Programming и инфографика.

И если для первой группы языков имеет смысл перерывать StackOverflow в поисках единственно-истинного решения отсортировать массив, то для второй группы обычно существует сразу множество "верных" решений. Зачастую, эти решения даже не являются компромиссными. Т.е. с точки зрения скорости выполнения, используемой памяти, поддержки кода и других аспектов абсолютно все равно, какое из решений выбрать.

Level up your server-side game — join 20,000 engineers getting insightful learning materials straight to their inbox.

Собственно проблема заключается в необходимости измененить способ мышления после длительного использования конструкторо-подобных языков для эффективного использования пластилиновых. Перфекционист внутри разработчика заставляет его каждый раз стрелять золотыми пулями. В итоге часы/дни/недели уходят на поиск "верной" реализации наследования, способа обработки ошибок, организации классов/модулей и пр., хотя на самом деле язык позволяет "приготовить" эти вещи несколькими равноправными способами. И в то время, как для конструкторо-подобных языков неиспользование общепринятых подходов в конечном итоге приводит к плохому коду, для пластилиновых языков попытка загнать себя в несуществующие рамки также негативно сказывается на результате. Разработка замедляется или вовсе останавливается, зацикливаясь на переписывании одних и тех же участков кода.

Решение, на мой взгляд, состоит в том, что для языков второго типа необходимо "освободить" свой мозг и просто позволить ему творить. Принять для себя, что главное - это написать рабочее решение. Конечно, в процессе разработки будут попадаться не совсем "те" решения, но со временем они будут "выправлены" возникающими неудобствами/противоречиями. И хотя это означает, что часть кода все же придется переписывать - эти переписывания будут обусловлены реальными требованиями (в отличие от циклических переписываний в процессе поиска идеального варианта). Существует и эффективный способ как можно скорее обнаружить неудачное решение - написание тестов. Если код трудно оттестировать - это верный признак неудачного архитектурного решения.

Подпишись на обновления блогa, чтобы не пропустить следующий пост!