简体   繁体   English

您使用新技术或编程语言的标准

[英]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: 我听过的两个最常见的解释是:

  1. It should be "fun" (what I've heard from technical people). 它应该是“有趣的”(我从技术人员那里听到的)。
  2. It should be capable of solving our problem (what I've heard from business people). 它应该能够解决我们的问题(我从商界人士那里听到的)。

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: 我的标准很简单:

  • wow factor 哇因素
  • simple 简单
  • gets things done 完成任务
  • quick

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,因为它适合我想要试验的一些正式的方法工具。

  1. Open source. 开源。
  2. Active developer community 活跃的开发者社区
  3. Active user community, with a friendly mailing list or forum. 活跃的用户社区,友好的邮件列表或论坛。
  4. Some examples and documentation, preferably a tutorial 一些示例和文档,最好是教程
  5. Desirable features (solves problems). 理想的功能(解决问题)。

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: 使用此功能,可能会建议您学习以下语言:

  • 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'...). C,因为它让你比任何其他语言更好地理解冯·诺依曼架构(而且它是一种随机访问的图灵机,如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. LaTeX(作为一种编程语言,不仅仅是一个排版系统),因为它让你学习字符串重写系统作为计算模型。 Here, sed is similar; 这里,sed是类似的; 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 (ie learn to fear C++) Haskell,因为它教你关于函数式编程,lambda演算(另一种计算模型),惰性求值,类型推断,代数数据类型(易于完成),类型系统的可判定性(即学会恐惧C ++)
  • Scheme `(or (another) ,Lisp) for its macro system, and dynamic typing, and functional programming done somewhat differently. Scheme`(或(另一个),Lisp)用于其宏系统,动态类型和函数式编程有些不同。
  • SmallTalk, to learn Object-orientation (so I hear) SmallTalk,学习面向对象(我听到)
  • Java, to learn what earning money feels like :D Java,了解赚钱的感受:D
  • Forth, because 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 :) 我认为你应该用一粒盐和一堆实用主义来接受启蒙:)

  1. Should be capable of solving the problem 应该能够解决问题
  2. Should be more adequate to solve the problem than other alternatives 应该比其他替代品更能解决​​问题
  3. Should be fun 应该很有趣
  4. Should have prompt support, either from a community or the company promoting it 应该得到社区或推广它的公司的及时支持

A language should be: 语言应该是:

  1. Easy to use, to learn and to code in. 易于使用,学习和编码。
  2. Consistent. 是一致的。 Many languages have 50 legacy ways of doing things, this increases the learning curve and turns quite annoying. 许多语言都有50种传统的处理方式,这会增加学习曲线并变得非常烦人。 C# for me is one of those languages. C#对我来说就是其中一种语言。
  3. 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. 另一方面,有时你确实需要一点表现力,以确保你没有犯错误。
  4. The right tool for the right job and maybe the right tool for any job 适合正确工作的正确工具,也许是适合任何工作的正确工具

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的自动垃圾收集使它在许多情况下成为更好的选择。

  • 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,电子邮件,报告等)。

It depends on why I'm learning the new language. 这取决于我为什么学习新语言。 If I'm learning it for fun, then it has to meet these criteria: 如果我正在学习它的乐趣,那么它必须符合以下标准:

  1. Is well it supported on my platform? 我的平台支持它吗? Something that runs only on Linux isn't interesting to a Windows programmer. 只在Linux上运行的东西对Windows程序员来说并不有趣。
  2. Will I learn something new? 我会学到新东西吗? In other words, does it come up with a new way of doing things? 换句话说,它是否提出了一种新的做事方式?
  3. Does it look fun? 它看起来很有趣吗? I don't want to learn Ada even if it has new ways of doing things. 即使它有新的做事方式,我也不想学习Ada。

If I'm learning it for work, the criteria are different: 如果我正在学习它的工作,标准是不同的:

  1. How mature is it? 它有多成熟? Has it been proven to work in the real world? 它已经被证明可以在现实世界中运作吗?
  2. How big is the community? 社区有多大?
  3. Will it make my job easier? 这会让我的工作更轻松吗? Ie is it worth the time investment versus just doing the task with a language I already know. 即使用我已经知道的语言完成任务是值得的时间投资。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM