对我来说,我是C#和Java。我发现这两种语言非常相似,因此我更容易相互交流。我不确定采用其他不同语言是否是个好主意。有什么想法吗?
对我来说,我是C#和Java。我发现这两种语言非常相似,因此我更容易相互交流。我不确定采用其他不同语言是否是个好主意。有什么想法吗?
Answers:
我至少可以想到学习一种语言的五个原因,并且看来您最终应该为每种语言学习一个。
这与您学习多少种语言无关。这是关于学习新概念的。有些语言可能可以教您很多概念,而另一些语言则只能教一个。
如果您了解C#,则可能不会通过学习Java学习到什么新奇的东西。但是,如果您学会了Haskell,您会的。
因此,当您选择一种新的语言进行学习时,请选择一种可以教您尚不了解的概念的东西。
我想说的最重要的是学习能力。也就是说,了解用于不同目的的不同语言非常重要。例如,我知道:
1)脚本语言类别为Python和Perl
2)C ++作为“框架”语言
3)用于移动应用程序的Java
4)C代表巨大的遗留码量
5)我小时候曾经知道的一些过时的语言(基本,帕斯卡,快船等)
我想您至少需要一种主要语言和一种脚本语言。知道C#之后,您需要学习Python或Perl或Ruby。(我会使用Python,但这只是优先考虑的问题)。
每年学习一种新的编程语言是一件好事。但是,我建议您学习与Scala或F#完全不同的东西,而不是学习与您已经知道的东西类似的东西。它将向您展示做事的新方法,并最终丰富您的编程技能。
您应该专注于所需的语言,并将其用于所做的工作。真正学习语言源于实践,因此您在练习语言时会从中受益。如果您打算在业余时间学习一种新语言,则可以通过在越来越复杂的任务中实施它来做到这一点,从而真正掌握它。
全神贯注。专注于学习和编写干净的代码;清晰,富有表现力,简单且最重要的是不可重复。
寻求该类型编程的原理,基础知识(例如,面向对象的封装;什么是手段及其含义),并学习一些原则
这些东西会让您的工作更轻松。这样甚至可以使与您或您之后一起工作的人们更加轻松。
是的,您也必须非常了解语法。但这不是让您长时间关注的事情
而且,您还必须非常了解所使用的技术。但是可以根据您的业务要求的复杂程度来确定优先级。
后两个不是主要重点,而是一些重点
完成工作所需的数量。
但是C#和Java与英国英语和美国英语一样近。您可能会去芬兰语或纳瓦霍语中学到一些新东西。
我认为,如果您对其他语言没有足够的了解,就无法“从外部”看到该语言,那么您一定无法掌握该语言。每种不同的语言都带来了其他东西,它们带来的概念是您可以带回使用的主要语言的东西。
因此,即使您不打算将其用于商业用途,也绝不会浪费时间来学习使用其他语言。
古老的格言是每年学习一门语言,我肯定会说头十年左右,所以您需要这样做。也许除此之外,您可以选择在更深入地探索一些已经知道的语言(也许是更新几年前学到的知识)或使用特定的库之间进行选择,而不是无休止地积累新的语言,但要留意通过使用不同的语言来探索编程实践无疑对您作为程序员的发展有帮助。
诸如C#和Java之类的流行编程语言将使您受益匪浅,但他们之间的差异并不大,以至于无法学习解决问题的新方法。我认为您可以吃一些语言(用来做工作的语言),也可以玩其他语言。两者都有其目的。
我发现通过学习新的编程语言,我还学到了解决问题的新方法和更优雅的方法。这与语言的数量或您选择语言的频率无关。每种值得学习的编程语言都有独特的观点,这迫使您以新的思维方式来解决问题。价值往往来自学习这种思维方式。
我玩过Smalltalk,我喜欢它。语言只是一种发展的乐趣。一旦习惯了这些习惯用法,它们就会帮助您使代码更具表现力。我完全不会错过Java / C ++ / C#中的静态类型。我们在静态类型语言中使用的泛型实际上是为了解决静态类型所施加的限制而构建的。
我现在经常使用Ruby和Ruby on Rails,尽管现在不用于支付工作。Ruby的设计原则是“增加程序员的幸福感”。您一定会喜欢这种情绪,而且我认为大部分都能实现。
最终,Java将走Lisp和Smalltalk的道路,而C#也将效仿。将会取代它们的地方还有待观察。归根结底,如果您知道如何解决问题,并且有多种方法可以将问题切成小方块,那么您将能够找到工作并选择所需的语言。
在保持技能更新和灵活性方面,我认为您应该尝试每6个月左右学习至少一种全新的编程语言。我的意思是说一种非常非常不同的语言。
因此,在使用C#或Java框架学习更多.net框架的同时,还可以帮助保持灵活性,学习Haskell,Smalltalk,Scala,Clojure或Ruby可以扩展您的技术,并帮助您以不同的方式进行思考,其中一些方法可能会有用回到您的主要语言,如果Java不再是山中之王,其中的一些语言可能会帮助您继续前进。
如果您从未学习过C,那么尽管Java引入了它的语法,但思维方式可能会大不相同。值得深入了解,甚至更好地了解如何用这种语言编写OO代码,这似乎只是程序性的。
我建议阅读Bruce Tate的书“ Beyond Java”,该书很好地强调了仅使用一种语言的危险,并指出了C ++的兴衰。尽管C ++尚未消亡,并且还有数十年的历史,但它越来越受到限制,仅在无法从其他语言的生产率提升中受益的情况下使用。相比之下,Sinatra是一个ruby框架,它允许您用大约6/7行代码构建一个简单的Web服务,而C ++等效项可能比这大一个数量级。
语言是完成工作的工具。一些语言对某些类型的问题有好处,而其他语言通常对各种问题的解决都很好。我建议在新语言问世时学习它们。不要沉迷于本月的流行趋势,而要学习他们可以做什么,擅长什么。我的建议是每年使用一种新语言。它们的发布速度比那快,但是您希望在工具箱中添加新工具,而不是成为时尚新手。
一篇关于语言差异的文章是保罗·格雷厄姆(Paul Graham)的“超越平均水平”。我建议您阅读它,但是这里很重要(他使用“ Blub”作为一种假设语言,这样您就不必再争论自己喜欢的语言可以做什么):
还是Perl 4呢?在Perl 4和Perl 5之间,词汇闭包被添加到该语言中。大多数Perl黑客都同意Perl 5比Perl 4更强大。但是,一旦您承认这一点,便承认一种高级语言可能比另一种语言更强大。不可避免地得出结论,除特殊情况外,您应该使用所能获得的最强大的功能。
但是,这种想法很少得出结论。一定年龄后,程序员很少会自愿切换语言。无论人们习惯使用哪种语言,他们都倾向于认为足够好。
{snip}
只要我们假设的Blub程序员低头查看电源连续性,他就知道自己在低头。语言不如Blub强大,显然不那么强大,因为它们缺少了他惯用的某些功能。但是,当我们假想的Blub程序员朝另一个方向看时,就可以看到连续的幂,他并没有意识到自己在抬头。他看到的只是奇怪的语言。他可能认为它们的功能与Blub相当,但同时也引入了其他所有毛茸茸的东西。Blub对他来说足够好,因为他在Blub中思考。
但是,当我们从使用更高语言的任何一种语言切换到程序员的观点时,我们发现他反过来看不起Blub。如何在Blub中完成任何事情?它甚至没有y。
通过归纳法,唯一能够看到各种语言之间功能差异的程序员就是那些理解能力最强的程序员。(这可能就是Eric Raymond所说的Lisp,使您成为一个更好的程序员的意思。)由于Blub悖论,您不能相信其他人的意见:他们对碰巧使用的任何语言都很满意,因为它决定了语言的正确性。他们对程序的思考方式。
http://www.paulgraham.com/avg.html
我们提供的大多数应用程序都是用C#或VB编写的。当我们需要向应用程序中添加脚本时,我们选择了Python(Lua是第二名)。我们正在学习F#,因为它可以做一些令人毛骨悚然的新事物,如果大家都知道C#/ Java / VB,那么这些新事物很难解释和理解。
从某种意义上讲,这可能会成为另一场专家与一般主义者的辩论。有些人可能会花费很长的时间来深入了解一种语言,这对他们来说很有效。其他人可能想了解一堆对他们来说很好的不同语言。大多数人介于这两个极端之间。
如果您想探索有关语言的建议,请参考以下几点:
函数式编程-Haskell或Lisp将是此处的示例,范式转换在某种程度上可能会有些困难。
特定于数据库的-PL / SQL或T-SQL可能是有用的,如果您想对需要某些功能才能使用数据库的系统进行更多的后端工作。
UI Web语言-尽管在某些情况下,AIR可以使某些桌面应用程序使用Web调用,例如使用Twitter API的Twhirl,但ActionScript或Javascript将是Rich Internet Applications中使用的语言的示例。
这些只是想法,取决于您想成为的人,这些想法可能对您有用或无用。无论您做出什么选择,都祝您好运。
程序员需要了解三种语言:C,英语和其他语言。
C非常是一种核心语言,它与机器非常接近,并且具有几种高级语言所共有的语法规则。C迫使您以不同于Java的方式思考数据结构之类的事情。另外,Python和Ruby vms都是用C内置的,当您想提高速度时,可以将C内联到两种语言中。
英语是编程的通用语言。大多数书籍,技术报告,技术网站和期刊论文均以英语优先出版,有时仅以英语出版。此外,如果英语不是您的母语,那么学习英语将扩展您的工具集,用于操作概念(当然,英语使用者也可以学习其他语言)。
其他语言应为非程序性语言,非静态类型的语言,高度面向对象的语言,或者在某种程度上与C根本不同的语言。Haskell,Scala,Python,Ruby,一些Lisp方言等。
之后,您可以了解您的具体情况所需的任何内容,可能是C#或Java。