[英]Your criteria in using a new technology or programming language
What are your criteria or things that you consider when you are an early adopter of a programming language or technology? 当您早期采用编程语言或技术时,您考虑的标准或事项是什么?
Two of the most common explanations I've heard are: 我听过的两个最常见的解释是:
So what's yours? 那你的是什么?
I've made this change several times over my career spanning various companies, moving from C to Java to Ruby to Haskell for the majority of my software development. 在我跨越各个公司的职业生涯中,我已经多次做出这种改变,从C转向Java再到Ruby转向Haskell,用于我的大部分软件开发。
In all cases, I've been looking for more expressive power and better abstractions. 在所有情况下,我一直在寻找更具表现力和更好的抽象。 This is always driven by business needs: how can I develop better software more cheaply?
这总是由业务需求驱动:如何更便宜地开发更好的软件? To me, the challenge of this problem is "fun," so fun rather automatically comes along with it.
对我来说,这个问题的挑战是“有趣”,所以很有趣,而且很自然地随之而来。 Justifying the business value to managers can be difficult, however;
然而,为经理人证明商业价值是很困难的; they often don't have the technical skills to understand why one programming language can be better than another, and are worried about moving to technology that they understand even less than the current one.
他们通常没有技术技能来理解为什么一种编程语言比另一种编程语言更好,并且担心转向他们理解的技术甚至比现在的技术更低。 (I solved this problem by taking over the manager's job as well: I started a company.)
(我通过接管经理的工作解决了这个问题:我创办了一家公司。)
It's hard to say what exactly to look for in a new language. 很难说新语言到底要找什么。 You obviously don't have a detailed grasp of the language, or you would already be using it or know why you're not.
你显然没有详细掌握这门语言,或者你已经在使用它或者知道你为什么不这样做。 Vast experience will bring an instinct that will make certain languages "smell" better than others, but—and this can make it especially hard to convince others to look at a new language—you won't know precisely what features give you big advantages.
丰富的经验将带来一种本能,使某些语言比其他语言“闻起来”更好,但是 - 这可能使说服其他人查看新语言变得特别困难 - 你不会确切知道哪些功能给你带来了很大的好处。 An example would be pattern matching: it's a feature found in relatively few languages, and though I knew about it, I had no idea when I started in with Haskell that this would be a key contributor to productivity improvement.
一个例子是模式匹配:它是一种在相对较少的语言中找到的功能,虽然我知道它,但我不知道何时开始使用Haskell,这将是提高生产力的关键因素。
While it's negative ("avoid this") advice rather than positive ("do this") advice, one fairly easy rule is to avoid spending a lot of time on languages very similar to ones you already know well. 虽然建议是消极的(“避免这种”)建议而不是积极的(“做这个”)建议,但一个相当容易的规则是避免花费大量时间在与您已经熟悉的语言非常相似的语言上。 If you already know Ruby, learning Python is not likely to teach you much in the way of big new things;
如果你已经了解Ruby,那么学习Python不太可能教你很多新东西; C# and Java would be another example.
C#和Java将是另一个例子。 (Although C# is starting to get a few interesting features that Java doesn't have.)
(虽然C#开始获得Java没有的一些有趣功能。)
Looking at what the academic community is doing with a language may be helpful. 看一下学术界用语言做什么可能会有所帮助。 If it's a fertile area of research for academics, there's almost certainly going to be interesting stuff in there, whereas if it's not it's quite possible that there's nothing interesting there to learn.
如果它是学术研究的一个肥沃的研究领域,那里几乎肯定会有一些有趣的东西,而如果不是,那么很可能没有什么有趣的东西需要学习。
My criteria is simple: 我的标准很简单:
I want it to do something easily that is hard to do with the tools I'm used to. 我希望它能够轻松地做一些我习惯使用的工具很难做到的事情。 So I moved to Python, and then Ruby, over Java because I could build a program incrementally, add functions easily, and express programs more concisely (esp. with Ruby, where I can pass blocks/Procs and have clean closures, plus the ability to define nice DSLs making use of blocks and yield.)
因此,我转而使用Python,然后是Ruby,因为我可以逐步构建程序,轻松添加函数,更简洁地表达程序(特别是使用Ruby,我可以传递块/ Proc并具有干净的闭包,以及能力定义利用块和产量的漂亮DSL。)
I took up Erlang because it expresses Actor-based concurrency well; 我接受了Erlang,因为它很好地表达了基于Actor的并发性; this makes for easier network programs.
这使得网络程序更容易。
I took up Haskell because it fit with a number of formal methods tools I wanted to experiment with. 我接受了Haskell,因为它适合我想要试验的一些正式的方法工具。
If it's for my personal fun, I need very little excuse, as I do love learning new things, and the best way of learning is by doing. 如果这是为了我的个人乐趣,我需要很少的借口,因为我喜欢学习新事物,而最好的学习方式就是做。 If it's for an employer, customer, or client, the bar is MUCH higher -- I must be convinced that the "new stuff", even after accounting for ramp-up effects and the costs that come with being at the bleeding edge , will do a substantially better job at delivering value to the client (or customer or employer).
如果是雇主,客户或客户,那么标准要高得多 - 我必须确信, 即使考虑到提升效应和处于最前沿所带来的成本, “新事物”仍将是在为客户 (或客户或雇主)提供价值方面做得更好。 It's a matter of professional attitude: my job's to deliver top value to the client -- having fun while so doing is auxiliary and secondary.
这是一个专业态度的问题:我的工作是为客户提供最高价值 - 这样做很有趣,辅助和辅助。 So, in practice, "new" technologies (including languages) that I introduce in a professional setting will generally be ones I've previously grown comfortable and confident with in my own spare time.
因此,在实践中,我在专业环境中引入的“新”技术(包括语言)通常是我以前在自己的业余时间里变得舒适和自信的。
Someone has once said something to the effect of: 有人曾经说过一些事情:
"If learning a programming language doesn't change the way you think about programming, it's not worth learning." “如果学习编程语言不会改变你对编程的看法,就不值得学习。”
That's one metric (out of many) to judge the value of learning new languages (or other technology) by. 这是判断学习新语言(或其他技术)的价值的一个指标(在众多中)。 Using this, one might suggest learning the following languages:
使用此功能,可能会建议您学习以下语言:
wisdom bestowed forth learned implies
. wisdom bestowed forth learned implies
。 ... that doesn't explain why I learn python or shell scripting, though. ...但这并不能解释为什么我学习python或shell脚本。 I think you should take enlightenment with a grain of salt and a shovelful of pragmatism :)
我认为你应该用一粒盐和一堆实用主义来接受启蒙:)
A language should be: 语言应该是:
My criteria that the language should have: 我的语言标准应该是:
1. New ideas - If the language is just another Scheme variant, if you know one than I don't feel the need to learn this new one. 1.新想法 - 如果语言只是另一种Scheme变体,如果你知道一种,我觉得不需要学习这种新的。 I will learn it if I think I will learn something new.
如果我认为我会学到新东西,我会学到它。
2. Similar to another language, but better. 2.与另一种语言相似,但更好。 For example, while Java and C++ have many of the same ideas, Java's automatic garbage collection makes it a better choice in many cases.
例如,虽然Java和C ++有许多相同的想法,但Java的自动垃圾收集使它在许多情况下成为更好的选择。
It depends on why I'm learning the new language. 这取决于我为什么学习新语言。 If I'm learning it for fun, then it has to meet these criteria:
如果我正在学习它的乐趣,那么它必须符合以下标准:
If I'm learning it for work, the criteria are different: 如果我正在学习它的工作,标准是不同的:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.