在什么时候可以说我已经“学习”了一种语言?


67

在我的几年编程中,我玩弄了从Ruby到C ++的所有内容。从学习基本语法(Ruby)到完成一些扩展我的语言能力的重大(对我而言)项目,我已经做了很多工作。考虑到这种多样性(以及真正学习语言永不停止的事实),我什么时候可以说我知道(或已经学习)一种语言?


12
我认为您要寻找的词是“掌握”一种语言,在这种情况下“学习”有点奇怪。
Pieter B

7
“单词是为了意思:当您有了含义时,就可以忘记单词。” -庄子
jfrankcarr 2012年

9
当您不必问这个问题时,您将了解到您需要了解的内容……

1
@JarrodRoberson这个庄子也是谁说的吗?
jadkik94 2012年

2
根据LinkedIn的说法,在您的技能简历中加入一种编程语言的门槛很低。据我的LinkedIn人士说,曾经看过Java代码的人显然不愿意在自己的技能部分列出它。
克里斯·戴尔

Answers:


70

您什么时候可以说您已经“学习”了英语或法语等语言?我认为大多数人会接受您使用语言进行交流时所学的语言。您不必知道每个单词或每个习语,但是您应该知道人们在日常对话中使用的大部分(相当小的)语言子集。在“学习”到某种程度的语言之后,您可以在每天使用该语言的同时继续学习更多,并逐渐接触到更多的语言。到死时,您仍然不知道有关该语言的全部知识,但是没有人会说您从未“学习”该语言。

我认为计算机语言就是这样。当您可以在其中编写有用的程序时,可以说您“知道”一种语言,例如C ++或Ruby。如果您需要量化您对该语言的了解程度,请使用与人类语言相同的术语。说“我懂一点 C ++”或“我知道会话 C ++”或“我精通 C ++”,则表示您足够了解,可以做一些有用的事情,或者您是专家,分别。


15
对话流利的术语比较主观,虽然适用于自然语言,但很难理解它们在应用于计算机语言时的含义。尽管仍然很主观,但功能性偶发性可能会更好。功能性意味着您足够了解语法以编写有用的结构,而具有惯用知识则意味着您不仅知道如何使用该语言编写,而且还非常了解使用该语言的习惯用法,例如using在C#中使用或b, a = a, b和python中的生成器。否则,+ 1。
马克·布斯

13
@MarkBooth在考试中没有任何分数的任何描述都会有些主观。关键是利用大多数人已经对人类语言知识的熟悉程度作为对计算机语言知识的粗略指导,并以友好的方式进行操作,以引起进一步的研究。会话式C ++是“我熟悉基本知识,但您可能需要帮助我提供高级,晦涩或棘手的代码”。
Caleb 2012年

3
虽然我认为您基本上是对的,但我认为许多人错误地认为自己在水平仍然很低的时候就学会了自然语言。它也适用于说他们已经学习了编程语言的人。
haylem 2012年

我认为您的答案是完美的,甚至表明量化语言知识是不可能的。确实,尽管流利意味着您可以谈论大多数事情,并且以讲母语的人为理由进行解释,但这并不能解决这样一个事实,即大多数讲母语的人都不具备老作家所拥有的十分之一的语言知识(没有,而不是哈利·波特(Harry Potter)或丹·布朗(Dan Brown),真正的旧式难以阅读的东西)。当实际上没有人为语言而烦恼时,您将如何解决呢?以及实际上何时会严重影响编程的生产率?
Morg。

1
@Morg。什么垃圾。编程与告知计算机应该做什么一样,与与未来的程序员(包括您自己)进行交流同样重要。当然,简单写一个代码可能不需要交流得很好,但在现实世界中让你的意图明确的代码以后的维护者是远远比让电脑做正确的事更重要。无论如何,这些评论不再有助于改善此答案,因此,如果您想进一步讨论它,我建议我们将其带入软件工程聊天室
Mark Booth 2012年

25

这取决于谁问

善于询问的人一定会知道说“他已经学习过一种语言”的人期望达到什么水平。

基本上,我遇到了两个原型量表,人们以此来判断“您是否学过X?”这个问题的答案。

对于大多数书呆子来说,淘汰装腔作势者是一个棘手 的问题,您问题的其他答案已经证明了这一点;)。如果您说自己学到了它,那么您将看不到任务的范围,这是隐含的“完美”,而且更糟的是:您的谦卑感失败了。

对于大多数老板来说,如果您能够解决他们的问题那么您就“学到了”,如果代码可以编译,则通常已经满足了该条件。谦虚地回答他的问题将导致他将任务分配给可能也是亲戚的装模商。

那么,您的听众是什么?


4
在面试中,如果知道就知道。在工作场所,如果Google知道,您就会知道。
asfallows 2012年

3
在面试中,面试官是否系领带是“我知道”,而如果没有,则是“请定义'要知道'”。公平地讲,大多数访调员问一个人是否“有经验”,对此我更容易回答“是”
keppla 2012年

18

我认为人们关注的是“已学习”一词的终结性,即完美时态,表示您已完成学习。众所周知,编程语言就像口头语言一样,是生命的实体。例如,完全掌握C#2的人会使用LINQ,Lambdas,var关键字,对象/集合初始化器和扩展方法查看C#3,并且发现从他以前的版本中学到了很多东西。具有awaitasync关键字和其他新语言构造的C#4也会发生同样的情况。

我们只是在这里讨论语法。我们忘记了大多数语言都与框架配对。C#具有.NET框架,Java具有它自己的框架,Ruby,C ++,PHP和PERL也是如此。将语言的框架视为词汇,而语言本身只是语法。知道该语言意味着您知道如何用该语言来造句。了解框架意味着您可以用语言很好地表达自己。最后,一旦了解了语法和词汇,就需要学习习语,以便您以“母语”的身份编写代码。

我会说有几个学习层次。

  1. Hello World(您可以编写最基本的程序。)
  2. 熟练(您可以编写基本程序,但需要定期咨询在线帮助)
  3. 流利(您可以编写带有一些参考的高级程序)。
  4. 母语使用者(您可以在最少的在线帮助下编写高级程序,您的代码与另一位母语人士的代码没有区别)。

3
Nitpick:await来自C#5,C#4中的主要新功能是dynamic
svick

您是对的...我一直在跟踪哪个版本的C#与哪个版本的.NET
迈克尔·布朗

7

您很少会说您已经学过一种语言。这意味着您已经完成了对它的学习,这是愚蠢的。

如果您可以编写不会明显破坏该语言惯用语言的代码(也许是在对知识进行了一周的修改之后),而无需引用语法参考,那么说您知道一种语言就很好。


2
习惯用法在变化,样式在一个地方到另一个地方也不同,并且实际上语言本身也会随着时间而改变。如果在完成学习之前不能说自己“了解”或“学习过” C ++之类的语言,那么确实很少有人可以声称曾经学习过C ++。
Caleb 2012年

1
完全是@Caleb。
迈克尔·布朗

3
如果您那样学习,那么您甚至都不知道您的母语,这也是愚蠢的(至少对于大多数人而言)
superM 2012年

@Caleb,更糟糕的是,就像Carmack和Torvalds都指出的那样,忽略c的许多部分会更好-因此..了解所有cpp并不是完全有益。
Morg。

3

这更多是基于意见的因素。在所有技术术语中,“已学习”都意味着您具有全面的知识,就像您应该了解该语言的全部内容一样。

但是,在编程世界中,我相信与您是否能熟练使用该语言进行编程以完成目标/任务有关。这也可能意味着您是否熟悉该语言。当然,您可以在大学里学习了很多年,然后去那里获得学位,但这只是被人们注意到了?您可以定义何时可以说自己已经学会一种语言。


2

当您开始注意到它的缺点时。一旦您开始学习一种语言,通常您通常仍在忙于学习东西或参与其中,以注意到它的失败之处(当然,除非您从消极的角度开始学习它,以了解它的糟糕程度,否则这是必须的)到目前为止与您最喜欢的语言相比)。我想说的是,直到您敏锐地意识到某门语言失败的地方,您才真正了解一种语言。


我不同意这一点。对于您学习的一门或二门语言来说,可能是正确的-您可能根本不知道要寻找什么,因此即使是最笨拙的设计失败也无法与正确的做事方法区分开。一旦学习了几种语言,就应该在开始学习一种新语言后立即开始发现语言缺陷。但是在您的开发过程中,有一段时间,您会错误地将“不同”等同于“错误”。在您学习每种主要类型的几种语言(过程,OO,功能,声明性...)之前,您的直觉判断将是可疑的。
沃伦·杨

2

我个人对此的回答是什么时候,

  1. 我知道编写简单的生产级程序的基础。
  2. 我已经花了至少3个小时的时间来解决一个看似简单但并非如此的问题。

从那以后,我不会将其称为学习,而是精通。


1

当您的应用程序或组件可以读取邮件时,即Zawinski定律,指出:

“每个程序都会尝试扩展,直到可以读取邮件为止。那些无法如此扩展的程序将被那些可以扩展的程序替代。”由Jamie Zawinski(被称为“软件信封法”)创造,以表达他的信念,即所有真正有用的程序都面临着向工具箱和应用程序平台(即他说,邮寄东西只是其副作用)。

当RSS流行为“ ...可以阅读RSS提要”时,已对此进行了更新,并且很可能最近将其更新为“ ...可以阅读Twitter提要”。;-)


0

我认为您在看不到语言时就已经学会了。您不会看到for周期和数据访问,但是会看到算法的工作流程。

您不会在参数传递和数组处理,魔术宏上玩花样。您不是将代码视为向朋友和老师展示的自我营销材料,而是将您对问题的理解以及对计算机的意愿以最易读的方式表达出来。

您有一些习惯,可以通过遵循这些习惯来避免很多错误,例如:即使您绝对确定“只会出现一行”或“我不是傻瓜并且知道”,在表达式中使用{}代码块和()运算符优先顺序”。

您不再需要数数您知道的类,模式和框架API。这就是智能感知,参考和教程以及Google的用途。但是,当您查看问题时,您会立即知道可以将其拆分为哪些部分,以及可以使用哪些工具和算法来解决它们。

您所做的工作优雅小巧的。您喜欢编码,并轻松找到错误。是的,高手也会因为是人类而制造错误,但由于其代码结构会将错误引导到正确的地方,所以他们会很快发现它们。

最终意识到:您已经学会思考,分析和解决问题;与它们相比,实际语言是次要的,只是当前的规则和工具箱。

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.