为什么选择“错误的”语言学习时似乎会有很多恐惧?[关闭]


28

也许仅仅是我一个人,但是作为一名现役CS学生,我已经在该网站和其他地方遇到了很多问题,不仅仅是“我应该使用哪种语言表示x?”。而且还有“有人还在使用Y语言吗?” 我的第一个CS课是用Scheme讲授的,如果我没记错的话,它没有得到广泛使用(至少与Java,PHP,Python等语言相比)。我的许多同学对必须学习一门他们永远不必再使用的语言的想法感到沮丧,但我不太了解这种学习较少流行语言的恐惧源于何处。不,我可能不会在所从事的任何工作中使用Scheme,但是我当然不后悔学会使用它(尽管在一个学期中是一个非常初学者,但不是很深入的方式)。这个学期我要上搜索引擎课程,这是在Perl中完成的,而我又一次看到同学抱怨语言的选择。我可以理解拥有一种喜欢的语言而讨厌其他语言,但是为什么有些人在学习它时就变得烦躁不安了?您真的可以学习“错误”语言吗?如果没有别的东西,不是不是学习Scheme或Haskell的良好的心理锻炼方法,至少对接触解决问题的不同方式有用吗?


有趣的是,我在CS的头两年学习仅涉及C#和Java,您猜我在第一次合作实习中最终使用了什么?四个字母的单词,以“ P”开头。
Anon。

6
@Shewbox,您是对的,他们错了,您将获得交叉学习的优势,但事实并非如此。故事结局。
ocodo 2011年

7
他们正在与招聘经理进行SEO(搜索引擎优化)。
rwong

1
@rwong:不幸的是,我们中的一些人不得不学习一种艰难的方法,即不要将“我曾经使用过XXX,以后再也不会碰它”了,因为有些招聘人员在关键字匹配项上发送了垃圾邮件。

1
@JB:99%的人会让其他人看起来像在接吻。
Michael

Answers:


27

CS学位的重点不是教您C#和Java,您可以自己学习。它可以教您有关编程和计算的知识。语言只是一个细节。在编程生涯中,您将使用多种语言。今天,它可能是Java或C#,但从现在起10或15年后,它可能是Erlang或尚未被发明的东西。学习不同的编程风格和解决问题的不同方法比学习任何一种语言都重要得多。


确实-我的学位比C ++早,更不用说Java或C#了。尽管我们主要在帕斯卡(Pascal)授课,但从一开始我们就遇到了多种语言的问题,并且在我们第二年的课程中,“本月的语言”相当多,模拟(用于模拟)仍然是我最喜欢的记忆-尽管我现在没有机会编写任何模拟代码-主要是因为它教给了我OOP(尽管当时我还不知道)
Murph

17

因为您的母语会影响您的思维方式,除非您另行学习。

如果您在计算上是文盲(第一次编程),并且所学的第一语言过于“基础”,那么您可能不知道高阶概念,例如面向对象,多重分派,继承,一流的功能,元编程等。

您学习的第一语言通常与您对计算思维的首次尝试有关。吉米,如果有人告诉您,您之前的世界是由A,B和C符号组成的,那么您所有的思维都将基于A,B和C。直到一天,一个花哨的书呆子嘲笑您,因为他们不知道X ,Y和Z概念。您不可能只知道ABC就知道这一点。

最关心某个人的母语的人可能是在黑暗中奋斗的开明的程序员。哦,现在我知道什么是一流的功能。老兄,我希望我两年前了解继承和依赖注入!

您的母语不如您对待后续语言的态度重要。如果您能遥遥领先地知道BASIC / C / Perl / PHP / etc之外的世界,那么您将遥遥领先于游戏。这就是为什么许多人热衷于功能性语言的原因,因为许多积极开发的语言正朝着它们融合。


1
我们都需要从这些基本概念入手。当某人学习到一个新概念时(以设计模式为例),他们倾向于一段时间内到处使用它。如果我没有用头5年的时间来学习基础学习程序的结构以及如何像程序员一样思考,那么当我进入OO时,我会非常忙于学习程序部分,而我无法专注于面向对象的部分。话虽如此,“您的母语” +1并不比您对后续语言的态度和概念重要
Michael K'2

我考虑过添加它。我并不是说基本语言没有他们的位置。实际上,它们是这样做的(在早期学习阶段)。我只是没有提及。
马克·坎拉斯

哦,迈克尔,您的编辑要优雅得多,哈哈哈哈。
Mark Canlas

如果OP的同学担心Scheme是学习错误的语言,那么他们可能不是开悟的全部。:)
David Moles

有些语言实际上是简单的(C派生的)具有复杂的语法,而其他语言实际上却很复杂的(Groovy)则具有简单的语法。我的意思是-在C / C ++或Objective-C中,在任何活动的代码范围内,事情都是声明性的和过程性的,而类似Groovy的事情很多是“发生在引擎盖下”,这些东西被语法糖“隐藏”了。我对新手的建议通常是使用难于理解的语法语言,这些语言可以更紧密地反映计算机的实际工作方式-因为该知识简化了其他语言的使用。
dcgregorya

11

当我上大学时,我认识了很多决定主修经济学的人,并不是因为这是他们特别感兴趣或热衷的事情,而是因为他们认为这会找到一份好工作。

我之所以选择东亚研究专业,是因为我对文学的最初兴趣使我参加的课程引起了我的兴趣。我去德国是因为我想做一个交流计划,在这里我大部分时间都花在日本学和汉学课程上。我研究了我最感兴趣的东西。我决定不上大学来研究计算机相关的东西,因为我在童年时代就已经遭受了相当多的黑客攻击,但是我却花时间编程和理解互联网,最终,也许是不可能的,我做得很好,设法将所有这些兴趣结合在一起。

职业主义者和为学习而学习的人之间的区别。职业者担心他们会研究“错误的东西”,并且他们会后悔,因为这不是“找我合适的东西”。为了学习而学习的人意识到,他们有4年的时间花在探索相对可控压力下的各个领域上。职业主义者认为学校的工作是教他们一些东西。当他们遇到陌生的领域时,学习者会弄清楚事情,并有更好的机会找到适合他们的工作。职业者最终在第三层公司聘请了二等会计师,支付账单,并激怒了老板。

是的,这些都是原型,每个人都必须在实用主义和激情之间取得平衡,但这是本质的区别。当然,具有程序员审美观念的人也可能会问这个问题,但更多的是在“哪一个是我的时间浪费最少的情况下”的问题。但是我的猜测是,这是职业主义者的冲动,因为职业者比学习者更害怕犯错,而学习者通常会成为更好的程序员,因为学习者不惧怕错误。学习者和程序员一样,在追求技能时也怀有失败的态度。


9

是的,学习诸如Scheme和Haskell之类的功能语言可以很好地介绍功能编程。就您的同学抱怨Perl而言,虽然Perl不再像以前那样流行,但它肯定仍然是商业中广泛使用的语言。

我能理解您想学习现实世界中使用的实用语言的同学,但是我认为他们错失了以下观点:一旦您是一位经验丰富的程序员,并且接触过多种编程范例,学习新语言通常只是学习的问题。新语法。因此,只要您能接触到这些概念,就可以用您最终的雇主偏爱的任何语言来“专业化”,而不会遇到太大的困难。


5

也许是因为人们受到诸如Edsger Dijkstra的经典巨作之类的陈述的影响,“几乎不可能向曾经接触过BASIC的学生教授良好的编程:作为潜在的程序员,他们在精神上被肢解,无法再生。” (链接

如果您学习“错误”的语言,则会导致担心遭受永久性脑损伤。您的Perl示例并不奇怪,因为Perl是经常引起批评者批评的语言之一。


5

您的第一语言应专注于概念,而不是语法或习语。以此为准则:

  • Perl意味着大量查找特殊变量和奥术语法
  • PHP意味着概念的融合,因为它的有机增长
  • Java有点混乱,因为不是所有的东西都真的是一个对象
  • Assembly / C / C ++意味着大量的低级内容,如果您想进行嵌入式系统开发,那会很棒,但是会降低高级概念的吸引力
  • SQL对于了解自然语言如何(和不能)映射到代码和数据结构很有用
  • Visual Basic for Applications专注于专用的一次性物品,因此,跳过重要的概念(如正确的错误处理和重构)太容易了。
  • LISP看起来像简单的语法,但也有太多的速记表达式,坦率地说,如果不详细了解其全名,它们将毫无意义。
  • Haskell通常看起来非常像数学,但是可以很快退化为语法汤
  • Python ...实际上,Python是唯一对初学者来说我没有任何严重反对的语言。可能仅仅是因为这是我学到的最后一门语言,而下一门语言会教我我的错误方式。

我注意到您没有编写任何有关C#或VB.Net的内容。
HK1

4

问你的同学,如果他们不使用一种语言,他们怎么知道一种语言是“错误的”。您只能使用多种语言来找出自己喜欢的东西。

我的许多同学对必须学习一门他们永远不必再使用的语言的想法感到沮丧,但我不太了解这种学习较少流行语言的恐惧源于何处。

在不了解他们的情况下,我无法确定地说出他们为什么会有这种感觉。也许他们很懒。也许他们以前使用过这种语言,但不喜欢它。也许他们害怕尝试其他语言。谁知道。我所知道的是,作为一名CS学生,研究人员,并且在行业中工作过,很好地了解多种语言,是一笔巨大的财富,而且您永远不会知道将要使用什么。示例:当我第一次学习C时,我的老师向我们介绍了shell脚本和命令行实用程序,例如grepawk。我的朋友们并不花心地学习这些技能。我现在每天在工作中使用它们。

我本学期正在上搜索引擎课程,这是在Perl中完成的,我再次看到同学抱怨语言的选择。

Perl非常强大,如果您知道如何使用它,它将使您的生活变得更加轻松。它也与Python类似,Python是CS学生的顶级招聘者之一:Google。你的同学应该吃饱了。FWIW,我知道perl和python是中级水平(不是初学者,但不是专家)。

我可以理解拥有一种喜欢的语言而讨厌其他语言,但是为什么有些人在学习它时就变得烦躁不安了?

年轻徒劳?我也是那样。但是我的“烦恼”更多地是在数学领域。因此,从这次经历中,我打赌他们会为此而努力,因为他们不喜欢学习新事物,或者新语言很难为他们学习。(但是,我想说的任何事情都不会落入你的腿上)

您真的可以学习“错误”语言吗?如果没有别的东西,不是不是学习Scheme或Haskell的良好的心理锻炼方法,至少对接触解决问题的不同方式有用吗?

对于第一句话:否,但是您可以肯定地学习一些自己不喜欢+咳嗽+ Lisp +咳嗽+ =的语言。

其余:是的!您应该学习尽可能多的语言,以找到自己喜欢的语言并扩大视野。不需要掌握所有知识,但掌握工作知识总是有帮助的。您永远不会知道什么时候您会认为浪费一种学习时间才是有用的语言。


1
Lisp怎么了?!?!:)
Michael K

1
+1代表“学习尽可能多的语言”。如果您了解多种语言,则为给定任务选择一种语言变得很简单。
Michael

1
@Michael:此外,它使学习新概念变得更加容易,因为您已经了解了大多数概念。
David Thornley,

@Michael:Lisp =没问题。我不是一个功能编程语言的人。另外,这么多括号!!但是,我已经看到在Lisp中实现了一些非常优雅的解决方案。非常尊重Scheme和Lisp专家。
AQUA

3

因为聘用程序员是一个任意的,反复无常的过程,所以简单的事实是,如果您选择了错误的技术,您可能会发现自己正在遵循渡渡鸟的方式

在任何给定时间的首页上,您都会看到对宗教的狂热,这些信仰包括:

  1. 要成为一名优秀的程序员,必须拥有计算机科学的大学学位。
  2. 计算机科学硕士学位会使人们成为不良的程序员。
  3. 认证对于提升您的职业生涯绝对必要。
  4. 认证是一个危险信号,表明程序员不合格。
  5. 计算机科学以外的其他领域的大学学位往往会导致最好的程序员。
  6. 除非您还在晚上和周末进行编程,否则您不是一个好的程序员。
  7. 并继续下去。

贯穿其中的一个恒定因素是,那里有99%的公司希望您拥有X年的Y技术经验...而且由于一个人只有这么多可用的周期,因此他们将这些周期花费在很多事情上。


2

我认为选择“错误”语言进行学习的恐惧主要是由于缺乏信息缺乏指导,例如:

  • 银色子弹的谬误。对工作,环境或项目使用正确语言的误解。而且,如果您选择了错误的产品,那么您将被敬酒。
  • 不懂编程超越语言。语言只是一种工具,如打字机或计算机编写程序。这不是要学习工具的细微差别(语法),而是要使工具能够创建(概念,抽象等)功能。

因此,例如Scheme是一种很棒的教学语言。编程大约有两件事:抽象和重用。Scheme具有两个功能:函数抽象和函数调用(即重用)。哎呀,它甚至没有语法!
约尔格W¯¯米塔格

2

我们有更多的意见。

与过去的工作方式相比,关于我们如何度过时光的猜测更多,因为我们有更多的见解-每个人都对第一种编程语言应该是什么以及自从如此挑剔的任何人都可以为任何事情辩护

由于我们的生活方式日新月异,每个人都天生就有浪费时间的恐惧。人们对学习错误语言的强烈恐惧仅仅是由于人们容易暴露于多种观点。


1

人们普遍不喜欢学习有用的东西。我可以看到这里的刺痛情况更加严重,因为这是人们想要参加的课程,他们仍然在学习他们认为无用的东西。我知道,如果我要拼贴,我会想学习一些可以在现实世界中使用的东西。

我唯一不同意其他人的部分是当一种语言大量使用并且他们只是不想走出泡沫来学习它时。只有这样,抱怨才有意义。


1

为什么是“恐惧”。我称其为强迫喂食某些您不想要或不觉得它很重要的仇恨。没有语言是错误的,但是我们专注于事物的时间有限。我不得不用Java做CS类,对此并不高兴。不是因为我担心Java是错误的语言,而是那不是我的职业重点所在。

现在Java有用了吧?大声笑每个人都学习Java。那就是您不想参加的竞争。您的简历将以1000的一叠为标题,标题为“最近的Java毕业生,知道Java”。您实际上可能是更好的就业能力明智的学习模式,因为这是您进入一所精英大学而不是一些dinky社区学院的秘密信号。

我还要说的是,这种仇恨比CS普遍得多,但总体上表明高等教育。我确定讲师之所以选择Perl是因为他了解Perl,并且能够轻松对其进行评分,并且担心学习新的语言,而学生更愿意学习。我认为这是您自己的教育,您应该能够计划出自己认为对自己的成功必不可少的技术。

(PS MIT放弃了Schema并改用Python)


对于放弃Scheme感到有点遗憾,SICP是每个程序员都应该阅读的东西。我倾向于千方百计地推广它。
Zachary K

这让我想起了我上大学的日子。在我开始几年后,CS部门从C ++切换到Java作为主要教学语言。几年后(当我尝试讲授数据结构教程时),很明显,没有一个学生对内存分配有任何了解(例如,他们完全失去了堆栈还是堆)。因此,他们没有掌握我们试图教给他们的数据结构的基本操作。不久之后,C ++再次成为最受欢迎的语言。
smithco

在实践中-一旦您了解编程,学习新语言就很容易。人们推荐使用C之类的语言,因为它要求您声明指针并分配内存并保护对指针的写访问权限……当您以这些术语考虑时,其他所有事情都非常容易,因为您已经考虑了所有这些问题。进行相反的操作比较困难-从更抽象的语言开始,然后积累经验以了解正在发生的所有潜在事物。
dcgregorya

1

一旦您进入了现实世界,时间便是最稀有的商品-没有人愿意将时间浪费在无法给他们带来真正好处的技能上。

话虽这么说,我认为没有一种“错误”的语言可供学习-但我希望我早在几年前就已经发现了Ruby,而不是为用PHP进行高级操作而苦苦挣扎...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.