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:
我听过的两个最常见的解释是:
- It should be "fun" (what I've heard from technical people).
- It should be capable of solving our problem (what I've heard from business people).
它应该是“有趣的”(我从技术人员那里听到的)。
它应该能够解决我们的问题(我从商界人士那里听到的)。
So what's yours?
那你的是什么?
11 个解决方案
#1
My criteria is simple:
我的标准很简单:
- wow factor
- simple
- gets things done
- quick
完成任务
#2
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; C# and Java would be another example. (Although C# is starting to get a few interesting features that Java doesn't have.)
虽然建议是消极的(“避免这种”)建议而不是积极的(“做这个”)建议,但一个相当容易的规则是避免花费大量时间在与您已经熟悉的语言非常相似的语言上。如果你已经了解Ruby,那么学习Python不太可能教你很多新东西; C#和Java将是另一个例子。 (虽然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.
看一下学术界用语言做什么可能会有所帮助。如果它是学术研究的一个肥沃的研究领域,那里几乎肯定会有一些有趣的东西,而如果不是,它很可能没有什么有趣的东西需要学习。
#3
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,转而使用Java,因为我可以逐步构建程序,轻松添加函数,更简洁地表达程序(特别是使用Ruby,我可以传递块/ Proc并具有干净的闭包,以及能力定义利用块和产量的漂亮DSL。)
I took up Erlang because it expresses Actor-based concurrency well; this makes for easier network programs.
我接受了Erlang,因为它很好地表达了基于Actor的并发性;这使得网络程序更容易。
I took up Haskell because it fit with a number of formal methods tools I wanted to experiment with.
我接受了Haskell,因为它适合我想要试验的一些正式的方法工具。
#4
- Open source.
- Active developer community
- Active user community, with a friendly mailing list or forum.
- Some examples and documentation, preferably a tutorial
- Desirable features (solves problems).
活跃的开发者社区
活跃的用户社区,友好的邮件列表或论坛。
一些示例和文档,最好是教程
理想的功能(解决问题)。
#5
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.
如果这是为了我个人的乐趣,我需要很少的借口,因为我喜欢学习新事物,最好的学习方法就是做。如果是雇主,客户或客户,那么标准要高得多 - 我必须确信“新东西”,即使考虑到提升效应和处于最前沿的成本,也将在为客户(或客户或雇主)提供价值方面做得更好。这是一个专业态度的问题:我的工作是为客户提供最高价值 - 这样做很有趣,辅助和辅助。因此,在实践中,我在专业环境中介绍的“新”技术(包括语言)通常是我以前在自己的业余时间里变得舒适和自信的。
#6
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:
这是判断学习新语言(或其他技术)的价值的一个指标(在众多中)。使用此功能,可能会建议您学习以下语言:
- C, because it makes you understand the Von Neumann architecture better than any other language (and it's sort-of random-access Turing Machine like, sorta'...).
- LaTeX (as a programming language, not only as a typesetting system) because it makes you learn about string rewriting systems as a model of computation. Here, sed is similar; learn both, because they're also both useful tools :-)
- Haskell, because it teaches you about functional programming, lambda calculus (yet another model of computation), lazy evaluation, type inference, algebraic datatypes (done with ease), decidability of type systems (i.e. learn to fear C++)
- Scheme `(or (another) ,Lisp) for its macro system, and dynamic typing, and functional programming done somewhat differently.
- SmallTalk, to learn Object-orientation (so I hear)
- Java, to learn what earning money feels like :D
- Forth, because
wisdom bestowed forth learned implies
.
C,因为它让你比任何其他语言更好地理解冯诺依曼体系结构(而且它是随机访问的图灵机,如sorta'......)。
LaTeX(作为一种编程语言,不仅仅是一个排版系统),因为它让你学习字符串重写系统作为计算模型。在这里,sed是类似的;学习两者,因为它们也是有用的工具:-)
Haskell,因为它教你关于函数式编程,lambda演算(另一种计算模型),惰性求值,类型推断,代数数据类型(易于完成),类型系统的可判定性(即学会恐惧C ++)
Scheme`(或(另一个),Lisp)用于其宏系统,动态类型和函数式编程有些不同。
SmallTalk,学习面向对象(我听到)
Java,了解赚钱的感受:D
第四,因为所学的智慧暗示着。
... that doesn't explain why I learn python or shell scripting, though. I think you should take enlightenment with a grain of salt and a shovelful of pragmatism :)
...但这并不能解释为什么我学习python或shell脚本。我认为你应该用一粒盐和一堆实用主义来接受启蒙:)
#7
- Should be capable of solving the problem
- Should be more adequate to solve the problem than other alternatives
- Should be fun
- Should have prompt support, either from a community or the company promoting it
应该能够解决问题
应该比其他替代品更能解决问题
应该很有趣
应该得到社区或推广它的公司的及时支持
#8
A language should be:
语言应该是:
- Easy to use, to learn and to code in.
- Consistent. Many languages have 50 legacy ways of doing things, this increases the learning curve and turns quite annoying. C# for me is one of those languages.
- It should provide the most useful solution with the least amount of code. On the other hand sometimes you do need a bit of expressiveness to make sure you're not making a huge mistake.
- The right tool for the right job and maybe the right tool for any job
易于使用,学习和编码。
是一致的。许多语言都有50种传统的处理方式,这会增加学习曲线并变得非常烦人。 C#对我来说就是其中一种语言。
它应该以最少的代码提供最有用的解决方案。另一方面,有时你确实需要一点表现力来确保你没有犯下大错。
适合正确工作的正确工具,也许是适合任何工作的正确工具
#9
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. I will learn it if I think I will learn something new.
2. Similar to another language, but better. 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.
我应该具备的标准:1。新想法 - 如果语言只是另一种Scheme变体,如果你知道的话,我觉得不需要学习这个新的。如果我想我会学到新东西,我会学到它。 2.与另一种语言相似,但更好。例如,虽然Java和C ++有许多相同的想法,但Java的自动垃圾收集使它在许多情况下成为更好的选择。
#10
- Gets the most done with the least amount of effort
- Extremely interoperable with different protocols, out of the box
- Fast
- Has lots of libraries built in for stuff 99% of web developers do (PDF's, emailing, reporting, etc..)
以最少的努力获得最多的成就
开箱即用,可与不同协议极其互操作
有99%的网页开发人员可以使用大量的库(PDF,电子邮件,报告等)。
#11
It depends on why I'm learning the new language. If I'm learning it for fun, then it has to meet these criteria:
这取决于我学习新语言的原因。如果我正在学习它的乐趣,那么它必须符合以下标准:
- Is well it supported on my platform? Something that runs only on Linux isn't interesting to a Windows programmer.
- Will I learn something new? In other words, does it come up with a new way of doing things?
- Does it look fun? I don't want to learn Ada even if it has new ways of doing things.
我的平台支持它吗?只在Linux上运行的东西对Windows程序员来说并不有趣。
我会学到新东西吗?换句话说,它是否提出了一种新的做事方式?
它看起来很有趣吗?即使它有新的做事方式,我也不想学习Ada。
If I'm learning it for work, the criteria are different:
如果我正在学习它的工作,标准是不同的:
- How mature is it? Has it been proven to work in the real world?
- How big is the community?
- Will it make my job easier? I.e. is it worth the time investment versus just doing the task with a language I already know.
它有多成熟?它已被证明在现实世界中有效吗?
社区有多大?
这会让我的工作更轻松吗?即是否值得投入时间,而不是仅仅使用我已经知道的语言完成任务。
#1
My criteria is simple:
我的标准很简单:
- wow factor
- simple
- gets things done
- quick
完成任务
#2
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; C# and Java would be another example. (Although C# is starting to get a few interesting features that Java doesn't have.)
虽然建议是消极的(“避免这种”)建议而不是积极的(“做这个”)建议,但一个相当容易的规则是避免花费大量时间在与您已经熟悉的语言非常相似的语言上。如果你已经了解Ruby,那么学习Python不太可能教你很多新东西; C#和Java将是另一个例子。 (虽然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.
看一下学术界用语言做什么可能会有所帮助。如果它是学术研究的一个肥沃的研究领域,那里几乎肯定会有一些有趣的东西,而如果不是,它很可能没有什么有趣的东西需要学习。
#3
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,转而使用Java,因为我可以逐步构建程序,轻松添加函数,更简洁地表达程序(特别是使用Ruby,我可以传递块/ Proc并具有干净的闭包,以及能力定义利用块和产量的漂亮DSL。)
I took up Erlang because it expresses Actor-based concurrency well; this makes for easier network programs.
我接受了Erlang,因为它很好地表达了基于Actor的并发性;这使得网络程序更容易。
I took up Haskell because it fit with a number of formal methods tools I wanted to experiment with.
我接受了Haskell,因为它适合我想要试验的一些正式的方法工具。
#4
- Open source.
- Active developer community
- Active user community, with a friendly mailing list or forum.
- Some examples and documentation, preferably a tutorial
- Desirable features (solves problems).
活跃的开发者社区
活跃的用户社区,友好的邮件列表或论坛。
一些示例和文档,最好是教程
理想的功能(解决问题)。
#5
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.
如果这是为了我个人的乐趣,我需要很少的借口,因为我喜欢学习新事物,最好的学习方法就是做。如果是雇主,客户或客户,那么标准要高得多 - 我必须确信“新东西”,即使考虑到提升效应和处于最前沿的成本,也将在为客户(或客户或雇主)提供价值方面做得更好。这是一个专业态度的问题:我的工作是为客户提供最高价值 - 这样做很有趣,辅助和辅助。因此,在实践中,我在专业环境中介绍的“新”技术(包括语言)通常是我以前在自己的业余时间里变得舒适和自信的。
#6
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:
这是判断学习新语言(或其他技术)的价值的一个指标(在众多中)。使用此功能,可能会建议您学习以下语言:
- C, because it makes you understand the Von Neumann architecture better than any other language (and it's sort-of random-access Turing Machine like, sorta'...).
- LaTeX (as a programming language, not only as a typesetting system) because it makes you learn about string rewriting systems as a model of computation. Here, sed is similar; learn both, because they're also both useful tools :-)
- Haskell, because it teaches you about functional programming, lambda calculus (yet another model of computation), lazy evaluation, type inference, algebraic datatypes (done with ease), decidability of type systems (i.e. learn to fear C++)
- Scheme `(or (another) ,Lisp) for its macro system, and dynamic typing, and functional programming done somewhat differently.
- SmallTalk, to learn Object-orientation (so I hear)
- Java, to learn what earning money feels like :D
- Forth, because
wisdom bestowed forth learned implies
.
C,因为它让你比任何其他语言更好地理解冯诺依曼体系结构(而且它是随机访问的图灵机,如sorta'......)。
LaTeX(作为一种编程语言,不仅仅是一个排版系统),因为它让你学习字符串重写系统作为计算模型。在这里,sed是类似的;学习两者,因为它们也是有用的工具:-)
Haskell,因为它教你关于函数式编程,lambda演算(另一种计算模型),惰性求值,类型推断,代数数据类型(易于完成),类型系统的可判定性(即学会恐惧C ++)
Scheme`(或(另一个),Lisp)用于其宏系统,动态类型和函数式编程有些不同。
SmallTalk,学习面向对象(我听到)
Java,了解赚钱的感受:D
第四,因为所学的智慧暗示着。
... that doesn't explain why I learn python or shell scripting, though. I think you should take enlightenment with a grain of salt and a shovelful of pragmatism :)
...但这并不能解释为什么我学习python或shell脚本。我认为你应该用一粒盐和一堆实用主义来接受启蒙:)
#7
- Should be capable of solving the problem
- Should be more adequate to solve the problem than other alternatives
- Should be fun
- Should have prompt support, either from a community or the company promoting it
应该能够解决问题
应该比其他替代品更能解决问题
应该很有趣
应该得到社区或推广它的公司的及时支持
#8
A language should be:
语言应该是:
- Easy to use, to learn and to code in.
- Consistent. Many languages have 50 legacy ways of doing things, this increases the learning curve and turns quite annoying. C# for me is one of those languages.
- It should provide the most useful solution with the least amount of code. On the other hand sometimes you do need a bit of expressiveness to make sure you're not making a huge mistake.
- The right tool for the right job and maybe the right tool for any job
易于使用,学习和编码。
是一致的。许多语言都有50种传统的处理方式,这会增加学习曲线并变得非常烦人。 C#对我来说就是其中一种语言。
它应该以最少的代码提供最有用的解决方案。另一方面,有时你确实需要一点表现力来确保你没有犯下大错。
适合正确工作的正确工具,也许是适合任何工作的正确工具
#9
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. I will learn it if I think I will learn something new.
2. Similar to another language, but better. 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.
我应该具备的标准:1。新想法 - 如果语言只是另一种Scheme变体,如果你知道的话,我觉得不需要学习这个新的。如果我想我会学到新东西,我会学到它。 2.与另一种语言相似,但更好。例如,虽然Java和C ++有许多相同的想法,但Java的自动垃圾收集使它在许多情况下成为更好的选择。
#10
- Gets the most done with the least amount of effort
- Extremely interoperable with different protocols, out of the box
- Fast
- Has lots of libraries built in for stuff 99% of web developers do (PDF's, emailing, reporting, etc..)
以最少的努力获得最多的成就
开箱即用,可与不同协议极其互操作
有99%的网页开发人员可以使用大量的库(PDF,电子邮件,报告等)。
#11
It depends on why I'm learning the new language. If I'm learning it for fun, then it has to meet these criteria:
这取决于我学习新语言的原因。如果我正在学习它的乐趣,那么它必须符合以下标准:
- Is well it supported on my platform? Something that runs only on Linux isn't interesting to a Windows programmer.
- Will I learn something new? In other words, does it come up with a new way of doing things?
- Does it look fun? I don't want to learn Ada even if it has new ways of doing things.
我的平台支持它吗?只在Linux上运行的东西对Windows程序员来说并不有趣。
我会学到新东西吗?换句话说,它是否提出了一种新的做事方式?
它看起来很有趣吗?即使它有新的做事方式,我也不想学习Ada。
If I'm learning it for work, the criteria are different:
如果我正在学习它的工作,标准是不同的:
- How mature is it? Has it been proven to work in the real world?
- How big is the community?
- Will it make my job easier? I.e. is it worth the time investment versus just doing the task with a language I already know.
它有多成熟?它已被证明在现实世界中有效吗?
社区有多大?
这会让我的工作更轻松吗?即是否值得投入时间,而不是仅仅使用我已经知道的语言完成任务。