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

推荐订阅源

GbyAI
GbyAI
N
News and Events Feed by Topic
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
T
Tailwind CSS Blog
博客园_首页
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
A
About on SuperTechFans
I
InfoQ
S
Securelist
Last Week in AI
Last Week in AI
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
腾讯CDC
大猫的无限游戏
大猫的无限游戏
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog
美团技术团队
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
罗磊的独立博客
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
S
Secure Thoughts
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Latest news
Latest news
Recent Announcements
Recent Announcements
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 热门话题
Security Latest
Security Latest
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队

hsfzxjy 的博客

解决 VSCode + CMake + MSVC 编译器信息乱码的问题 使用 3090 部署 1.58bit 动态量化版 DeepSeek R1 671b 如何在 VS Code DevContainer 中配置 HTTP 代理 如何在跳板机背后的服务器上使用 VS Code Remote - Containers Cohesive Digests for Ints and Floats Rust 中的隐匿概念 —— Place(位置) 美术馆 一尺之槌,日取其半,1075日而竭 老生常谈:使用 Cloudflare 自选 IP 加速站点访问 辩义 State、Nation 与 Country 将 Base64 编码的数据快速转换为 Uint8Array 折腾 NPU·第1章 —— 搭建 Level Zero 开发环境 折腾 NPU·第0章 —— Intel NPU 概述与 Level-Zero 新增域名 monad.run CSS 中为特定字符设置不同字体 Arbitary Lifetime Transmutation via Rust Unsoundness Dijkstra 算法的延伸 Manacher 回文计数算法 硬卧 Go Fact: Zero-sized Field at the Rear of a Struct Has Non-zero Size Display *big.Rat Losslessly and Smartly in Golang 代码的仪式 Building Electron From Scratch 中式亲属称谓研究之一:构建半群 Some Notes on Kotlin Coroutines Git sparse-checkout and partial clones for Mega-Repos 辩义“封建” Diving from the CUDA Error 804 into a bug of libnvidia-container Modern Cryptography, GPG and Integration with Git(hub) Move the Root Partition of Ubuntu A New Programmer Kicks a Roadblock Git-based Dependencies in Dart and Go Reversy Naming 人类一败涂地 Invalid Golang Pointers Can Bite You Even If You Don't Dereference Side Project(副业) A Flaw of Promoting Complex Trait Bounds in Rust Initialize Process Pool Worker with Individual Value Rust - Python FFI From Scratch [Extending Hexo For My Site] Part 1 [Extending Hexo For My Site] Part 0 Debug a 'torch.tensor(1).cuda()' hanging 不自由的互联网 Retrieve Contents over HTTP without curl or wget [Unravelling mocona] Part 1 - Verbosity or Anti-Pattern [Unravelling mocona] Part 0 - Preface Understanding pickle in Python Rough Notes on Deploying Vaultwarden & NextCloud Bookmarks 语言狂热者与实用主义者 Demystify the randomness in CUDA kernels Performant Bulk Mutations in IndexedDB Auto Rebuild .pyx Files with pyximport Cython and Threads Obtain a Random Available TCP Port with Bash Information Theory: KL Divergence Information Theory: Entropy and Mutual Information 铁板烧 西郊线 Proof of the Gumbel Max Trick Option::as_ref Rc, RefCell and Interior Mutability Visualizing Correlation 三月十日杂感 三月一日杂感 二月十一日杂感 一月二十六日杂感 SS Configuration 一月七日杂感 四月·病 Haskell 笔记:State Monad Haskell 笔记:Monad 引论 Haskell 笔记:Applicative Haskell 笔记:Category Theory and Functor Haskell 笔记:data, type, newtype Haskell 笔记:folds 使用 Aria2 在 Ubuntu 中下载百度云资源 从伪并行的 Python 多线程说起 一个 Reentrant Error 引发的对 Python 信号机制的探索和思考 Linux 文件权限 HSFZMUN 4.0 部署小记 午后雨·科大 最后的雨夜·广州 揭秘·变态的平方根倒数算法 神坑·Python 装饰类无限递归 Python“黑魔法”之 Encoding & Decoding Ubuntu 重新映射键盘布局 为什么我要翻墙 Python“黑魔法”之 Generator Coroutines 数学美 之 判断线段相交的最简方法 除夕杂感 17 行代码实现的简易 Javascript 字符串模板 Python“黑魔法”之 Meta Classes 诗集 生活,需要被“发现” 家书·十八岁成人礼 炫技?还是需求? 【译】响应式图片的现状 Wisecity 商赛总结——也谈前端自动化测试 记一次 DoS 诈骗网站的经历 那一年,我们望向星空
【译】“为什么有这么多的编程语言?”
2015-09-18 · via hsfzxjy 的博客

原文链接:戳这里

在过去的一周中,几位同事曾两次问了我这个问题。听起来,这像是一个糟糕的问题,但事实上并不是这样的。

最简短的答案就是:尽管我们并不需要这么多语言,但我们还是想要(want)它们。 让我们再探索得更深一些吧。

难道它们不都是一样的吗?

某种意义上(In a sense),是的。创建一个网站,你可以使用 RubyJavaPythonC#Go 抑或是 Javascript。甚至,你可以使用 CC++HaskellRustCOBOLPascalPerl

事实的背后就是:这些语言都有着同样的目的——把人类的思想转变成为计算机能够读懂的 1 和 0——用夸张的(highfalutin)的计算机术语来讲:它们都是 图灵完备(Turing complete) 的。

从底层上来看,这些语言都完全一样的。但从表面(人类和它们交互的接口)上来看,它们却有很大的不同。这,便是人们关注的焦点了。

不同的任务需要不同的工具

事实上,编程语言只是工具,而对于不同的任务,我们需要选择不同的工具。拖拉机(tractor trailer)、自行车、特斯拉汽车(Tesla)都是交通工具——它们都有轮子,有转向器(steering ?),并且都会将你从一个地方带到另一个地方——但显然,我们要将它们运用到不同的场景中。

编程语言也是类似的:若是要构建网站,RubyJavascript 是不错的选择;JavaC++ 则常常被运用在金融领域;至于 PythonR,它们是统计分析的工具。

在语言的选择上,我们常常要从便捷程度、安全性和速度这几个方面进行权衡(trade-offs)——就像交通工具一样。通常来讲,需要根据手头上的工作视情况而定。

开发者们有不同的“口味”(tastes)

抛开纯粹的功能,开发者还会根据个人的“口味”来选择工具。

编程语言是人类向计算机表达想法的工具。尽管不同的开发者在许多方面都有相似之处,我们的思考方式仍存在着区别——这是自然所决定的。

由于有多种编程语言供我们选择,我们完全可以选择一种“以我们想要的方式工作”的语言。有的开发者喜欢Ruby的灵活性(flexibility),而另一些则喜欢Java的严谨(strictness)。同时,有些语言看上去和数学一样深奥,而另一些读起来却和散文一样(prose)。

以人为本

业务是以人为本的。

撇开功能和个人“口味”,通常来说,你会选择一种你了解的,或是你周围的人了解的语言。

Stack Overflow 选择了 C#,很大程度上是因为团队的创始人了解它。其次(In turn),它也是为创始人的朋友和同事所了解的。C# 使招聘工作(recruiting)变得更加简单,同时也使 Stack Overflow 更快地进入市场。

(幸运的是,C# 同时也有着超棒的技术亮点)

一种技术需要一个“生态圈”(ecosystem)来支持——那便是能为每个有需要的开发者提供工具和帮助的社区(communities)和组织(organizations)。好的“生态圈”能让个人开发者更加成功——Ruby 就是个很好的例子。

多样性就是力量

总的来说,由于我们有着各种各样的任务,同时也有着各种各样的人在完成这些任务,我们才有了各种各样的编程语言。

而正是这种多样性的存在,使得许多有趣的程序,有趣的公司甚至是有趣的职业生涯,从不可能成为了可能。


作者:hsfzxjy
链接:
许可:CC BY-NC-ND 4.0.
著作权归作者所有。本文不允许被用作商业用途,非商业转载请注明出处。