Java的一切(2014年)

2021-04-26 10:35:33

我曾经问过受访者,“你最喜欢的编程语言是什么?”答案几乎总是,“我只是选择了这项工作的正确语言。”杜。有没有人故意挑选错误的语言?这是一种避免实际命名一种语言的方法,以害怕挑选一个奇迹不喜欢。

如果受访者完全答复了答案,那就是“我最熟悉的语言x”,它也没有回答我的问题。

当时我自己已经回复了类似的东西,“我喜欢python因为它让我很高兴地编程,但我只在这样的情况下使用它。剩下的时间我使用XYZ ......“

虽然,大约一年前,我开始形成一个奇怪的想法:Java是所有工作的托管语言。 (我在youthoutouth呕吐的时候暂停这里。)这依赖于你认为真实的论点是毫无抹现实,而且这从来没有一种流行的方法,但无论如何让我解释一下。

Python真的是我最喜欢的语言,当我恰当地时,真的让我开心。它推动了我头脑中的快乐斑点。它与伪代码相匹配,这很讨论它是一个真正的乐趣。

几年前,我读了Bruce Ockel的强大类型与强劲。在它中,他认为静态打字(他所谓的强大打字)是重种正确性的众多方面之一,如果您要使用单元测试检查其他方面(如算法和逻辑),那么类型将也肯定地,所以你可能也可以用于动态输入和受益于其寓言。

布鲁斯用Python说明了他的代码,并绑定了它:我决定从那时在Python写一切。不幸的是,我在工作中有一个大的Java计划,但我的同事和我同意它应该写在Python,也许有一天我们会得到一个很好的excuseto这一切重写它。

在一家公司,我写了一个模拟器,让我在没有完全职能的网站的情况下运行我的Java服务。在此模拟器中,我运行测试各种方案的脚本,包括故障。对于这些脚本,我决定使用JavaScript,主要是因为它包括在Java 6中,其次是因为很多人都知道它。我推理说,脚本语言允许我们和Q / A轻松写入测试。实习生贾斯汀·乐栏认为,我们应该只使用Java。模拟器在Java中,为什么不在其中写脚本?它坐在那里,我们都知道它。我联系了javascript,它强迫我编写各种代码来桥两个。它也意味着堆栈迹线更难读取,因为它们没有指向正在执行的脚本中的行。问/ a从不写任何测试。总的来说,我们从JavaScript和Justin获得了什么。

在同一公司,我们以JSON格式存储我们的日志(顺便说一下,这是一个很好的主意),并且一个同事编写了一个名为logcat的Python程序来解析日志并生成标准柱状输出,具有许多好功能标志(包括二进制搜索时间戳)。在我们的个人项目中,我们需要类似的东西,我建议再次使用Python。我的伙伴丹科克建议Java,因为它就在那里,我们知道它,它快速。他写了它,他是对的:它快速炽热。从比较Python Logcat与Java One相比以来,后者大约是速度大约十倍。无论开发人员在编写Python代码(如果有的话)丢失了多次超过数十个用户时,每次通过日志捕捞时间才能等待十倍的时间丢失了多少时间。

最后,我去写一个简单的程序,竖起了一个web界面。我考虑使用Python,但这需要我弄清楚如何从其库中服务页面。我已经在Java(带码头)中完成了这个,所以我可以在更短的时间内在Java中运行。我意识到,随着我累积关于第三方Java库的知识并播放自己的实用程序库,使用任何其他语言越来越昂贵。我必须再次弄清楚这些东西并再次写下它们,而不是从上一个项目复制和粘贴代码。请注意,这不会针对Java争论,但它确实争论使用单个语言。

针对Java的大争论是它是冗长的。也许,但Sowhat?我想真正的论点是写代码需要更长的时间。在前10分钟后,这是非常真实的。确定你有拖网公共静态缺点,但这需要多长时间?当然你要写:

但在更大的事情方案中,这是这么久吗?有两个星期几分钟,两个?在Python中,代码无论如何,更真实的是

(如果它没有,那么你有更大的问题。未记录的Python程序难以维护。)问题是,程序员感知为痛苦和耗时的工作,但现实永远不会那么糟糕。来自论坛的报价关于语言设计:

当您必须添加类型声明时,它真的很糟糕,这对于致盲明显的事情,例如, foo x = new foo().- @pazsxn

不,实际上,键入foo一个额外的时间不会“真的很糟糕”。这是拔纹。这种负担夸大了,因为这项工作是无意识的,但是真的非常微不足道。程序员将畏缩在撰写某种方式派出:

所以他们会下班写一些内省自动调度聪明,但是写的时间更长,并且肯定会混淆未来的读者,他们会唤醒reck revert()曾被称为。然而,程序员将不正确,好像他挽救了自己。这是动态语言的陷阱。它的感觉就像你更富有成效,但除了一个新的程序的前10分钟之外,你不是。只需手动编写愚蠢的派遣,并与真正的工作一样。

(旁边:我在不同的决定的错误方面,使用Vim focode编辑的错误。当使用Vim时,我觉得非常高效,因为代码差距差距,我觉得使用Eclipse迟缓,并证明了我的选择争论。但肯定是我第一次努力呼叫特定函数的所有收益,或者当我必须手动查找对象的方法时。我认识到我的动态同样的方式错了语言辩护是关于他们的选择。)

那么为什么有曾经选择的动态语言?如果你和我有一场比赛,那是Writea简单的博客系统,你正在使用(比如说)Python,你将在30分钟内使用酸洗和何时使用的东西,它会带我带我带着摩托车建造一些东西。许多语言选择是基于这样的琐事。但是经过两周的发展,当我们都有一个特征时,我的时间就可以大部分时间,而且我不会在时间上弄清楚如何让我的系统处理这么多用户,或者跟踪为什么晦涩难以删除,因为你错染了一定问题的名称,或者找出这个请求参数包含的内容。

经典黑客蔑视“束缚和纪律语言”是短暂的;大型,长期以来的多程序员项目的需求比你为自己所做的快速工作大小。 - 来源

你不认为你会比我努力努力努力,每年纳米狼网站都在10月31日下降。这对天没有反应。大约60,000人在几个小时的时间里击中它,所以也许每秒四个请求。它是用php写的。 OutgroceriesBackend是用Java编写的。它处理(目前)约50个复请求秒,并且CPU很少超过java进程的1%。

DIGG:200mm页面浏览浏览器,500个服务器。堆栈溢出:60毫米页面视图,5服务器。我错过了什么?

- 2010年10月13日的Joel Spolsky(@Spolsky)

> @spolsky:Digg:200mm页面浏览浏览器,500个服务器。堆栈溢出:60毫米页面视图,5服务器。我错过了什么? << ' s php factor

- Greg Brant(@Gregb)2010年10月13日

stackoverflow使用asp.net。因此,您可以整天抱怨公共静电录像,但可以享受500台服务器的乐趣。动态语言的缺点是真实的,昂贵和永久性的。

那个单位测试论证怎么样?如果您必须单位测试您的CodeAnyway,静态打字会给您买到什么?对于一件事来说,它给你买了速度,很多。而且写作和维护单元测试需要时间。最常见的是,人们介绍的虫子最常常不是单位测试捕获的那种错误。少数例外(例如解析器),unittests是浪费时间。引用我的一位朋友,“他们是一种繁琐的,易怒的易怒,试图重新夺回静态类型的失去价值,但在代码本身的单独位置处以吹嘘方式。”

所以这是我的新方法:做Java的所有事情。不要诱惑在Python中写下快速黑客,因为:

您无法从您的主要编程语言中的其他项目复制和粘贴代码。

发展可能会更快,但这是一种幻觉。确保的实际时间很小,但仍然令人讨厌。

这是我和我的合作工人必须学习和掌握的一个更多的语言,平台和图书馆。

这是重要的一个:这个快速黑客的机会很好,这种快速黑客将成长并成为一个重要的工具,我不会有带宽来重写它,但每次我使用它时都会遭受性能和维护罚款。

我同意在Python中开发它很有趣。我喜欢它。当我正在写一个Sudokusolver时,我伸手去拿Python。但它是一个更大的东西的错误工具,而且是为薪水编写的任何尺寸的代码的错误工具,因为你是做雇主的争夺。

我甚至将此带到极端和使用Java for Shell脚本。我发现除了一个简单的包装器屏幕上的任何东西,最终会增长到我查找arthane语法,以便在bash中的数组中删除一些中间元素。多么糟糕的语言!这份工作的错误工具!写入java以开始。如果shello出来运行命令是笨拙的,写入自动功能可以轻松。

我还写了一个java_launchershell脚本,允许我在Java程序的顶部写下这个:

我可以使Java程序可执行并删除.java扩展名。标记剥离标题,编译并缓存类文件,并使用指定的jars运行theresult。它提供了Fpython的一个重要优势:简单的一次性程序缺乏构建脚本。

这种对单一语言的关注有一个有趣的效果:它已经开始了我改善了我的个人服务库(上面的Teamten.jar),因为Myefforts不再跨越多种语言拆分。例如,我编写了包含图像处理例程的街道。它们既快速高,质量比Java和Python中的任何东西都比。这需要一段时间,但我知道这是值得的,因为我不会发现自己正在写一些Pythonscript并希望我可以很好地调整图像大小。我现在可以自信地投资java作为我专业和个人技术未来的重要组成部分。

仍然存在为什么选择Java的原因,从集合的统计类型的语言中提供。 C和C ++(轻微格式化,嵌入性,图形库)的优点不适用于我的工作.C#很好但不是跨平台。 scala太复杂了。和D这样的其他语言,去太新了,不能打赌我的工作。

当我告诉人们我现在在java中写一切时,他们看起来很可怕。一位朋友的厌恶看起来可见。但是你知道,Java是一个漂亮的nicelanguage,当我的代码编译时,这通常是第一次,它也会正确运行。我没有任何其他语言的安心。 Java只是像一匹马一样工作,在应用中的广泛范围内很有用。