我知道学习语言,您只需购买一本书,按照示例操作,并尽可能尝试练习。但是,我真正要寻找的是一旦掌握了语言,该如何掌握它。

那里有文章说读这本书,读那本书,制作这个游戏和那个游戏。
对我来说,这并不意味着掌握语言。我希望能够阅读别人的代码并理解它,无论这样做有多困难。要了解何时使用一个函数以及何时使用另一个函数等。

列表可以不断地出现,但是我相信我已经指出了。 :)

最后,如果需要,以任何语言为例,尽管最好以C为例。

评论

经验就是一切。除非您可以实际应用,否则您作为专家的所有理论都是无用的。

为此语言实现一个编译器。实际上,这是尝试任何新语言的我最喜欢的方式。如果听起来太简单和无聊,请尝试使用K框架或类似方法来定义形式语言语义。

“人,土豆就是恐龙,汽车宇宙”。掌握某种语言无关紧要,如果代码不好并且没有意义,那么仍然很难理解。

我感觉好像有点遗漏了。语言会不断发展,因此没有一种语言可以熟练掌握,随着语言的发展,使用的次数越多,您必须学习的越多。
编写代码并读取代码。随机抽取一部分Linux内核(C编程),弄清楚函数的作用。

#1 楼

我必须回答:“以上所有。”人们争论编码是一门艺术,一门手艺,一门工程学科还是一门数学分支,我认为最公平的说法是其中的每一种。因此,您掌握的语言技术越多越好。以下是部分列表:


每天整天使用该语言。通常,这意味着要全职使用该语言。
阅读所有有关该语言的知识。特别是“最佳做法”和成语。
加入一个用户小组,与其他人讨论该语言及其使用方式。
与其他人的代码一起工作!没有什么比学会在某人做某件事很糟糕之后清理语言更快捷的方法了。
支持您编写的代码-每个错误都将变成您最糟糕的决定的旅程!
学习计算机科学和一般语言
学习另一种不同的语言。对C语言的一个很好的补充是像Lisp这样的函数式语言。这将彻底改变您对过程语言的思考。
学习使用该语言可用的框架和API。
花些时间对这种语言进行自己的实验。 SICP不适用于C,但是通过测试语言的局限性来学习语言的态度是非常有成效的。
阅读语言的历史,以了解为什么它是如此。会议以听取语言作者的讲话或听取行业领导者对这种语言的看法。
上一门语言课程。
向其他人讲授语言(感谢Bryan Oakley)

总而言之,尽您所能想到的一切。无法完全了解大多数语言。您使用的每种学习技术都会为您的理解带来新的视角。

评论


+5为支持您编写的代码-每个错误都将带给您最糟糕的决定!

–珍妮佛S
2012年9月19日15:18

仅针对最后一句话+1:您用来学习的每种技术都会为您的理解带来更多的视角。

–伊兹卡塔
2012-09-19 18:03

@Izkata:天哪,我写了吗?我实际上是说英语的人!我已经改正了。谢谢!

– GlenPeterson
2012年9月19日在18:48

@GlenPeterson ...实际上,我只是复制粘贴而没有非常注意句子“ off”。 +1确实是出于其背后的意图。 = P

–伊兹卡塔
2012年9月19日在18:55

+1表示“学习一种非常不同的语言。对C语言的一个很好的称赞是像Lisp这样的功能语言。这将彻底改变您对过程语言的思考。” -这可能是最重要的。它可以帮助您学习如何学习编程(即在什么情况下寻找什么)。

–naught101
2012年9月20日1:00



#2 楼

练习需要10,000个小时。

阅读“十年自学编程”

上面的要点:



对编程感兴趣,并做一些有趣的事情。确保它足够有趣,以便您愿意
投入十年/ 10,000小时的时间。

程序。最好的学习方法就是边做边学。

与其他程序员交谈;阅读其他程序。



评论


一本书的好标题!我迫不及待地想着续集《 20年自学编程》!

– GlenPeterson
2012年9月19日下午14:12

但是,您必须确保不要重复10个小时重复同样的10个小时...

–伊兹卡塔
2012年9月19日于17:01

没有任何技术专长可以帮助某人知道要自动化或创建程序的内容。这就像是在说-去健身房,做10年的每一场基本运动,每天1小时。 of!您是篮球超级巨星(大师)……不,不仅仅是技术能力。因此,我不认为这是问题的答案,即如何成为大师?这可能是解决方案的一部分,但不是掌握权的魔力。我知道-我不是大师!

–oemb1905
18年11月27日,0:30

#3 楼

除非您实现了比这更好的语言,否则请不要认为自己是整个语言的精通者。这意味着,要从下面了解特定语言的工作方式,请购买一本书,教您该语言的编译器/解释器概念。例如:


C:LCC编译器书
C ++:C ++的设计和演进(然后继续构建自己的
C ++编译器或至少了解使用GNU C ++编译器代码的实现)
Java:获取“ Inside JVM”并获取javac源代码。 “ java”的.C
代码也很有帮助
Python:CPython实现。
目标C:Apple几乎所有有关ObjC运行时环境和编译器源代码内部的材料都将为您提供帮助您。
Lisp:SICP书籍(教您Scheme和有关Lisp的语言的基本解释器和编译器)
:Lisp in Small Pieces(另一本好书)。


评论


现在,这就是我所说的答案。我已经接受了,但是如果早一点的话,这应该是“最佳答案”

–cprogcr
2012年9月19日下午16:14

您不知道您的答案有多大帮助。我正在阅读您提到的书,而这正是我所需要的。

–cprogcr
2012年9月19日下午16:18

呵呵,我从他们那里学到了东西。乐意效劳 :-)

– Aniket Inge
2012年9月19日下午16:20

由于您以C为例,所以我再给你两本书的名字作为礼物,我以前常常像手背一样熟练掌握C:1. OOC.PDF(可在线免费获得)和2。 Minix书(尽管是OS实现者的书,但这是Linus Torvalds在实现Linux之前阅读的书)

– Aniket Inge
2012年9月19日下午16:31

是的,Andrew Tenenbaum就是那本书。任何版本都很好阅读。它并没有告诉您“ C”的工作原理,但是当您看到C库是如何实现以与您构建的操作系统一起工作的时,您将开始更好地理解C!也许足以让您对其进行修改(这就是OOC的用处)

– Aniket Inge
2012年9月19日下午16:52

#4 楼

尝试将语言用于本来不打算使用的内容。用Python编写设备驱动程序,或用COBOL编写矩阵操作库。我认为掌握一种语言的最好方法之一是真正推动语言发展,力求使其优势克服劣势。

评论


当我上大学时,一旦我用Pong写了Pong,我就会决定要“掌握”一种语言。在我学习MIPS之前,这一直很好。我还有噩梦。

–冷冻豌豆的传承
2012年9月19日于22:15

用C做网站吗?

–BigSack
2013年9月1日在18:27

#5 楼

我会让你轻松。您永远不会精通一门语言。期。如果您认为自己拥有,那么显然您没有。您没有突然到达的山顶,说:“好,现在,我已经完全掌握了该语言。现在呢?”即使是使用相同语言已有数十年经验的程序员也会告诉您,有时他们仍然会遇到新的想法,过程,做法等。真正的目标是掌握对一种或多种语言的概念性理解。学习新概念的能力以及您采用该语言的新功能或更改功能的速度比对每个关键字和语法的死记硬背更为重要。不用担心“掌握”一种语言,而只需要担心不断提高和完善代码的质量和效率。那就是“主人”所做的。

评论


真正的目标是掌握您对一种或多种语言的概念性理解。究竟。那才是我真正的意思。

–cprogcr
2012年9月19日16:15



任何编程语言都是有限的。它由有限数量的概念构成,需要有限数量的惯用技巧。因此,很容易掌握任何一种语言。当然,一般人不能精通编程,总会有进一步改进的潜力,但是问题特别是关于一种给定的语言。

– SK-logic
2012年9月19日下午16:40

SK-logic:编程语言会发生变化,它们的库和环境也会发生变化。结果,您使用语言的方式也会发生变化。例如,jQuery改变了我们使用Javascript的方式。

–orlp
2012-09-19 20:42



可能是真的,没有人能真正掌握C ++这样的语言,但是对于像Scheme这样的一些极简主义语言来说,它应该是完全有可能的–正如@ SK-logic所说,无论是哪种语言,编程实际上都无法被掌握,因为应用领域是无限的。

–leftaround关于
2012年9月19日于21:01

@nightcracker,语言不会“进化”。 C99将永远是C99,并且永远不会改变。即使被下一代语言取代,C ++ 11仍将始终为C ++ 11。是的,环境确实在“演变”,但是jQuery并未引入其他语言社区以前未知的任何新技术。它们只是狭窄的Javascript社区中的新手。

– SK-logic
2012年9月19日在22:21

#6 楼

您已经知道该答案了


您必须使用该语言。很多。要尽可能解决各种各样的问题,
您必须阅读(最好与其他人一起工作)其他人的代码,最好是具有一定熟练度(即对至少某些方面有深刻理解的人)的代码。语言)。顺便说一句,如果您可以与他人讨论解决语言问题的方法,那就更好了。

归功于艰苦的工作和坚定的决心,而您可能永远都无法做到。 >
想一想我们从何处获得这个词-要成为大师级工匠,您必须先成为徒弟,然后再成为熟练工,只有他们才有机会成为大师。一路上你会被教导,你会练习,你会观察和质疑别人的技巧,并(有希望)向他们学习。

#7 楼

首先阅读并理解什么是SDLC(又称软件开发生命周期)。这是一个涉及自我完善,学习,反复的过程,这将打开您在哪些方面需要学习或改进的视野。一旦您自己构建了几个应用程序,就会发现几本核心软件工程书籍对于阅读非常有用。

此外,一旦您对OOP语言充满信心,就可以开始学习设计模式,而Head First Design模式确实是一本值得考虑的书。我喜欢这本书。

评论


谢谢。在阅读本文时,我已经选择了答案,但绝对会接受您的建议。

–cprogcr
2012年9月19日下午14:19

不知道为什么投票失败,请让我知道需要改进的地方。

–尤苏波夫
2012年9月19日15:43

#8 楼

经验是无可替代的。为了掌握某些东西,您必须经常将其用于许多不同的事情。

因此,继续使用该语言进行练习(例如Euler项目)和个人项目,实际需要的东西,或者您认为有趣的东西。编写游戏,编写Web应用程序,编写解析器,随心所欲。并且在每个步骤中,都努力了解您在做什么,而不仅仅是粘贴代码或按照说明进行操作。不管它有多难。


一旦了解了基本语法,就可以立即执行此操作。只需花一些代码,然后花一些时间来详细了解它。查找您不了解的内容,或在诸如Stack Overflow之类的地方提出具体问题。

#9 楼

在问题的高级方面,了解体系结构:如何组织项目,其结构是什么。不要只是让它们随机增长。

在中间层次上,学习不同的技术和范例。曲目中使用的工具越多样化,您所拥有的力量就越大。如果您只研究过Java,Python和ruby,那么您仅会接触到很少一部分编程空间。学习命令式和函数式编程,学习prolog和J。其思想不是“掌握”数百种语言,而是学习解决相同问题的不同方法。

在问题的低级方面,可以帮助您成为一个更好的程序员(实际上无论您做什么都可以做得更好)的一件事就是拥有良好的平台思维模型。例如,您可以学习C控制结构的工作方式并了解最常用的库,但是如果您没有关于指针和内存如何工作的思维模型,那么使用适度复杂的表达式会遇到麻烦。

#10 楼

我可以提出几点建议吗?

首先,如果您可以找到一位导师与您讨论该语言的使用,并获得最佳提示和技巧,并在一种技术优于另一种技术时进行回答。 />其次,尽可能多地练习,并尝试最大程度地使用该语言!我曾经在一个团队中工作过,那会(每天很有趣)每天从手册中挑选一个动词或其他编程语言。如果您能在当天进行编码的工作,这是一种荣誉。这意味着整个编程团队需要研究并理解(有时)晦涩的术语,以便有效地理解和使用它。有时候我们失败了,但是那个团队很有趣,可以在技术上真正开启!!

#11 楼

编程语言反映了针对通用软件开发或用于开发专用软件而开发的编程范例背后的思想。例如,像Java这样的程序语言表示面向对象的程序范例,但是AspectJ(Java的扩展)用于根据面向方面的程序进行编程。

鉴于此简短介绍,为了真正掌握一种语言,仅靠自己购买和阅读书并没有多大帮助。您需要了解使用所需语言进行编程的环境,了解该范例,更重要的是使用该语言构建有意义的应用程序。构建一个小型应用程序可以带您领略该语言提供的各种工具,这是一种非常有用的学习方法。

我看到来自纯C社区的人们没有学习任何有关面向对象的知识,也没有在学习Java或Objective-c时费劲。我还看到人们在没有真正理解用户界面元素,事件驱动的编程等方式时,就很难对用户界面进行编程。

我希望这会有所帮助!

#12 楼

我会在格伦的清单中添加两个项目。


尝试解决其他人遇到的难题在SO
上给出答案。阅读语言设计师的博客/书。那是深入了解的最佳资源。您会知道原因X背后的设计决定是什么。


#13 楼

以@TMN所说的为基础。通过用不同的语言编写相同的程序,我在学习语言方面取得了巨大的成功。

例如,编写一个程序,该程序读取CSV文件,然后分析文本,然后将其写回第二个CSV中,其中列的顺序相反。

像这样的


Column1,Column2,Column3





Column3,Column2,Column1


这将使您对语言有基本的了解。然后看看您还能做什么。也许允许值替换,重新排序或从命令行读取。使它尽可能复杂。

我也想@GlenPeterson说的话,


学习一种非常不同的语言。对C语言的一个很好的补充是像Lisp这样的函数式语言。这将彻底改变您对过程语言的思考。


是一个好主意。我建议使用类似Haskell的语言,因为在最新版本中,您可以使用OO,过程,逻辑或函数的所有四个编程范例进行编程。即使它实际上是一种功能语言,您也可以花一些精力实施其他范例,这将是一次很好的学习体验。

#14 楼

您不能从书中学习一种语言。您只需要练习和练习。不要以为您可以从特定的书或特定的来源学习语言,仅认为编程语言与人类的语言相同。您不能通过阅读特定的书来简单地学习英语或法语。日常生活。从头开始编写代码,扩展其功能,尝试构建一些会让您满意的东西。如果您想精通一门语言,因为它了解整个语言,并在实际编码中使用编程语言的每个要素,那么您将无法。甚至即使可能,也可能需要10到15年的时间。