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

推荐订阅源

WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
W
WeLiveSecurity
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
Docker
F
Full Disclosure
AI
AI
罗磊的独立博客
博客园 - 【当耐特】
U
Unit 42
S
SegmentFault 最新的问题
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Palo Alto Networks Blog
博客园_首页
H
Help Net Security
量子位
月光博客
月光博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
F
Fortinet All Blogs
D
DataBreaches.Net
B
Blog RSS Feed
Webroot Blog
Webroot Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
爱范儿
爱范儿
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
CERT Recently Published Vulnerability Notes
Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Securelist

Yusuf Aytas

When Code Is Cheap, Does Quality Still Matter? Why Crouching Tiger, Hidden Dragon Is a Masterpiece Why We Ignore Advice The Mirror Is Part of the Machine When Too Many Maps Overlap on One Person The Work Runs on Different Maps Your Work Introduces You Trial By Fire The Dude Why Headcount Math Lies Capacity Is the Roadmap The Roadmap Is Not the System Torres del Paine W Trek Escaping Status Theater Incentives Drive Everything Scaling Culture Without Dilution What Good Looks Like Why Airport Security Feels Random Why Politics Appear How to Work with Me The Janus Protocol Multi-Horizon Delivery Framework What Good Execution Looks Like Managing Your Manager Why Kingdom of Heaven’s Director’s Cut Is Better AI Broke Interviews Most of What We Call Progress Managers Have Been Vibe Coding All Along Stop Wasting Brainpower Why Over-Engineering Happens Prisoner's Dilemma Climbing No More The Weekly Win Mevlana Candy Brewing Turkish Tea Onboarding Your Engineering Manager Technical Deep Dives Yapay Zekâ Çağında Bilgisayar Mühendisliği Building Remote Teams From Idea to Launch in 2 Weeks Reflecting on Software Engineering Handbook Representing the Business New Manager Survival Guide Take Self Reviews Seriously Chasing Real Respect The Invisible Difference Learning the Johari Window Management is a Lonely Place Simple Task Management AI Balance in Work PIP Manager Insights Engineering Manager Interview Preparation Work-Life Balance as a Manager Bridging the Management Disconnect Tech Hiring Bubble Bursts Traits for EMs Simple Acts of Recognition Matter The Question I Ask Every New Report The Reality of an Employer's Market Bridging Ideals and Reality Hiring Red Flags Why The Godfather Is So Damn Good Subteam Tenets No Fluff Please Losing a Top Performer Balancing Act of Reliability Building Trust in Engineering Teams Ideal Number of Direct Reports Overriding a People Leader’s Decision From Misperception to Promotion Perception vs Perspective Setting Goals From Engineer to Manager Getting Delegation Right Interviewing Your Future Boss Celebrating Our Book in Iceland Operational Skills Needed On Writing Software Engineering Handbook Charlie Munger Quotes Working with Dependencies From Las Vegas to Canyons Navigating Layoffs Handling Competitive Dynamics A Weekend Getaway to Malta Engineering Health Essentials Should Dev Managers Code? Confronting the Life on Pause Winning Eleven Kindness is A Choice Bireysel Katılımcılar ve Yöneticiler Leading from Where You Are The Subtle Art of Listening Coding in Leadership The Power of Consistency The Making of a Leader The Path to Leadership Embracing TikTok Talent Sourcing Journey Leading Self Managing Teams Cracking Coding Bottlenecks
How Teams Choose Language
Yusuf Aytas · 2017-12-26 · via Yusuf Aytas

Published · 6 min read

Choosing a programming language is one of the most defining decisions in software development. It shapes how a team writes, maintains, and reasons about their system. Today, there are hundreds of languages to choose from, and more appear each year.

In theory, we should evaluate them carefully and select the one that best fits our problem. In reality, it rarely happens that way. Teams often make the decision based on convenience, curiosity, or comfort rather than deliberate comparison.

In my experience, this early choice leaves a mark on the entire project. It influences not only how fast we deliver, but also how the system evolves years later.

Programming languages timelineProgramming Languages

A Team Member is Excited

We as developers love to explore and learn new technologies. That curiosity is what keeps our work exciting. Over time, we pick up new programming languages and naturally want to try them in real projects. The easiest way to do that is to start a new project using the new language.

Without much thinking, the developers dive into the unknown with fresh syntax, new tooling, and the excitement of building something modern. At first, everything works beautifully. The project feels elegant and fast. The team feels proud of its decision.

Then time passes. Some people leave, new ones join, and suddenly the code becomes legacy. Nobody else understands the language or the tooling. The libraries fall out of date. The once-promising codebase becomes something everyone avoids touching.

Sometimes the team realizes too late that the language was not a good fit for the problem in the first place. By then, they have already invested too much effort to turn back, so they start hacking their way forward. Workarounds pile up, and the team ends up fighting the language instead of building the product.

Curiosity drives innovation, but without alignment and evaluation, it can also lead teams into complexity they did not intend to create.

The Senior Engineer's Choice

Sometimes, a new project begins with the language preferred by the most senior engineer on the team. It feels like a safe decision. The senior member is confident in that language, can guide others easily, and can review code without friction. The project starts smoothly, and the team benefits from that sense of familiarity.

But comfort can be deceptive. Over time, the limitations begin to show. Maybe the language lacks the right framework for the problem, or the ecosystem does not support the type of development the team needs. Instead of switching early, the team starts building missing functionality from scratch. They re-implement libraries, patch together utilities, and spend time on work that a more suitable language would have handled natively.

This approach often works at first, but the cost reveals itself later. The code becomes harder to maintain, onboarding slows down, and every new feature feels heavier to build. The team has effectively re-invented what already exists elsewhere.

Choosing a language based on comfort may reduce risk in the short term, but in the long run, it can quietly limit what the team can achieve.

The Mainstream Language

Sometimes, a company invests heavily in one language and builds most of its systems around it. Over time, everyone becomes comfortable with that ecosystem. Hiring becomes easier, documentation looks consistent, and developers can move between projects without much effort. It feels efficient and predictable.

The loop reinforces itself. The company keeps hiring people who know that language, and every new problem is approached through the same familiar tools. It becomes part of the company’s identity.

However, this uniformity comes with hidden costs. When the chosen language reaches its limits, teams start building complex workarounds to compensate. They design elaborate abstractions or reinvent existing solutions that another language could have handled more cleanly. Over time, the organization becomes trapped by its own investment.

There is comfort in using one language for everything, but not every problem fits the same mold. Sometimes, the best solution is to step outside the familiar and choose the right tool for the task, even if it introduces short-term discomfort.

What's the Problem

Your boss rarely cares which programming language you use. What matters is delivering a reliable product, on time and within scope. The choice of language becomes important only when it starts slowing you down.

When a team picks the wrong language for the job, extra work soon follows. You spend time building missing features, writing wrappers, and fixing issues that should not exist in the first place. Delivery slows down, reliability becomes an issue, and deadlines slip. Eventually, everyone starts to notice.

The outcome is predictable. Either the funding gets cut off, or the client loses trust and walks away. In other cases, when a company has enough resources, it manages to survive despite the inefficiency. Teams learn to live with hacks, duct-taping around the limitations of their tools. In some rare cases, these hacks even turn into clever solutions. Nonetheless, that does not make them sustainable.

The language you choose does not decide your success on its own, yet it quietly shapes every decision afterward. Picking the wrong one is like choosing the wrong foundation for a building. You can still decorate it beautifully, but the structure will always feel slightly unstable.

Before starting a new project or adding a major feature, it is worth taking a step back to think about which language or tooling truly fits the job. This small pause can really save months of unnecessary work later.

You should factor in a few things: how easy it will be to maintain, how well the ecosystem supports your use case, what the learning curve looks like for new developers, how mature the frameworks are, and what kind of environments you will deploy to. Even the expected lifetime of the product can influence the right choice.

When you take the time to compare your options and make the decision logically rather than emotionally, the payoff shows itself in the long run. Development becomes easier, onboarding is smoother, and maintenance feels natural instead of forced.

Teams often pick languages for cultural reasons because they are exciting, familiar, or already used in-house. Nonetheless, technical decisions deserve technical reasoning. The right language or tool shortens time to market, improves developer morale, and extends the life of the product.

A little discipline at the beginning can prevent years of unnecessary complexity.