理想的编程语言学习顺序?[关闭]


17

你怎么看?理想的编程语言学习顺序是什么,它将涵盖当今大多数常用的语言和范例,并有助于掌握通用的编程基础,思想和实践?您甚至可以建议范式而不是语言的学习顺序。

注意:这是我在stackoverflow中提出的问题的端口,由于主观和争论而被关闭。


好问题。如果这个问题是性能导向的,那将是答案?我很好奇:programmers.stackexchange.com/questions/16323/…:D
JoeBilly 2010年

4
我对Lisp经常出现在高级问题上感到非常惊讶和高兴。
Inaimathi

1
这个问题也问这里(虽然我觉得这一个是先): programmers.stackexchange.com/questions/41720/...
oosterwal

必须在此处
Gulshan

Answers:


26

Python,Lisp,C,Haskell

假设问题是关于新手编程的理想学习顺序(由于编程的老手将有自己的(可能是偶然的)学习顺序),我建议您阅读Norvig关于如何在十年内学习编程的论文,然后:

  1. Python:从动态,高级,面向对象和功能性语言开始。因为对于初学者来说,尽快感到富有成效真的很重要,并且不会因外来语法,缺少库,缺乏多平台,缺乏学习资源以及缺乏社区而被关闭。Python具有很高的可读性,具有大量良好的库(尤其是科学库-现代科学家/工程师必须知道如何编程),可以在大多数OS上轻松运行,具有大量的教程和完整的免费书籍,并且通常对用户友好-在您成为处理大型问题的高级程序员的同时,仍然足够强大,可以与您一起成长。加强对于初学者的重要的+有用的约定也很重要:代码的可读性很重要,您应该为自己和他人编写代码以便于理解。

  2. Lisp:尤其是,至少要略过“计算机程序的结构和解释”或观看SICP视频,并且通过了解编程的基础和表达能力可以睁大眼睛-这么少就能做很多事情。了解Lisp如何不仅可以表达功能范例,还可以表达OO,逻辑/声明性等等,例如创建新的领域特定语言。阅读Norvig的PAIP,以了解掌握该语言的知识。然后查看Clojure(一种现代的Lisp方言),它可能是Next Big Things之一。

  3. C:仅因为这是计算机语言。:)如果一个人主要是特定非软件领域的程序员,那么这些天可能是可选的。我觉得它很丑,但是值得了解一下底层硬件。当然,请选择K&R

  4. Haskell:纯功能功能。当前的Com.Sci。理论和实践表达能力相遇。参见真实世界Haskell

在完成上述导览之后,您将非常善于解决问题并用代码表达解决方案,并且完全满意此处范例

替代文字


我(自然地)将Smalltalk替换为Python#1,但是我说,知道Python(a)比Smalltalk受欢迎得多,并且(b)让Smalltalk与其他语言对话与在Java中一样困难。 ,也就是说很难挫败新手。Python的“脚本性”看起来有很大的优势。
Frank Shearar

我同意您的生产率声明。我认为将C作为绝对的第一语言是一堆胡扯。但它绝对应该在堆栈中的某个位置。
Mark Canlas 2010年

+1我不确定Haskell是否应该排在首位,但说句公道话,我还不知道,它在我的清单上排名第二,所以它可能最终还是我学习的最后一种语言。
Inaimathi

2
一键点击查看完整尺寸图@ i54.tinypic.com/168ity1.jpg
Mike Clark,2010年

如果C不在列表中,我将对此+1
Balog Pal

28

这就是我要做的:

  1. Python(或Ruby或Lua):一种解释型语言,没有类型,您可以用几行代码完成工作。巨大的库(我猜这是Python最好的)。您可以深入研究算法,因为不会分心。无需编译,只需运行。最重要的是,使用Python会隐式地教好样式,因为Python中的缩进是强制性的。您也可以教授“对象定向”(在Lua中更多的是问题)。目的是要有很多乐趣,并向学生展示可以做什么。

  2. C ++(或Java):一种快速的打字语言。如果需要对象定向,那么您已经知道一些概念。主要思想是“翻译”您在Python中所做的工作,并使用新的约束(主要是类型)来完成。现在,如果您有正确的概念,则添加类型不再是问题。下一步是考虑更底层的内容(Java在这里无济于事),并且很好地教人了指针。我的意思是解释一下地址空间,CPU,操作系统,以便您可以开始查看程序下面的内容。编译语言引入了解释和编译之间的区别,对于解释什么是机器语言非常有用,等等。

  3. 组装:最后,没有魔力,您只需要和机器对话即可。关于Intel和GAS语法存在争论,这并不重要。如果您有MIPS,我相信它更适合教学,但是我认为x86更加方便,因为它更加普及(x86_64更好,因为它具有更多的寄存器和优点)。您只需要消除一些复杂性,让学生根据需要进行进一步调查。

(这前三个是“深度”。直到现在,我们一直在下降,直到您触及他们所说的“接近金属”的底部。我认为这重要,编程中的许多问题都是如果对所发生的事情有清晰的了解,则可以解决。知道后,您可以放心地获得更多的知识。)

  1. Scheme(或Common Lisp或Clojure):正如@dukeofgaming所说,Lisp语言使您可以很好地教递归(对于此Scheme来说是最好的,因为它没有显式循环)。但是我会去教另外两件事:闭包和宏。宏是将Lisp语言与其他语言分隔开的地方。我个人不喜欢Scheme宏,但这不是太重要。我认为Clojure宏很好,例如(但是Clojure中的递归不是那么干净,因为JVM没有尾递归)。闭包是一个非常重要的概念,一旦您将其关闭,便会立即“看到” Javascript。在研究了C ++,Python和Lisp之后,Javascript变得“琐碎”。

  2. Haskell:对于功能性语言,我认为您无法击败Haskell。Lisp和Scheme被认为是功能性的,但是要强调功能性编程,您必须强迫学生无状态地思考。Haskell还具有其他非常不错的功能,例如,“ currying”(图形化)和用于“ destructuring”的模式匹配。我不太了解Haskell,但是您可以编写的代码简明扼要。很好地了解Haskell使理解Erlang的道路变得容易得多。

  3. Forth:一种堆栈语言。如果Lisp和Haskell不够用,那将再次破坏您的逻辑。我会去尽可能教琼斯的第四,因为他们知道组装,然后你可以完全理解什么是要去。(例如,Knowing Forth打开了PostScript。)

(所以这最后三个是您所说的广度。对我来说,这些语言非常奇怪,以至于它们改变了您的思维方式。至少它们对我有用。而且我认为,有了这些,您就了解了足够的范例来学习一种新的语言。很快。)

您可以选择研究以下内容:

  1. SmallTalk:纯面向对象的语言。要查看当您认真对待“对象定向”时会发生什么,该语言不需要“ if”,“ for”。一切都是信息:再次实现重大成就。(这将使Objective-C现在变得容易。)

  2. Go:一种(美丽的)语言,强调并发。我发现Go非常适合编程。

  3. Prolog:另一种编程范例。我没有写过任何Prolog,但我知道它是另一种令人折服的语言。


6
Python和Ruby(我不了解Lua)是强类型语言。我认为您的意思是它们是动态类型而不是静态类型。
Daniel Roseman

13
请把C和C ++当作两种独立的语言。
David Thornley

1
Bjarne说:“没有一种语言叫做“ C / C ++”。该短语通常用于对编程不了解的人(例如,人力资源人员和管理不善的人)。或者,它被那些简单而又不懂编程的人使用。懂C ++(通常也不懂C)。”
fredoverflow 2011年

1
我想让某人争论汇编是否应该在C ++之前进行。到那时,由于简单的概念和所提供的少量工具,组装起来非常容易,但是在接近C ++时使用原始内存和原始内存引用应该非常有用,在这种情况下,使用名义引用来解决任意内存位置和值使大多数人感到困惑。
2011年

1
我给我的两个CS学生做了一个为期一周的人造组装课程。基本上,我发明了最小的指令集计算机和解释器。然后,他们可以编写(并查看运行)一些非常简单的例程,并附带计时。然后,我添加了诸如数据缓存和预取之类的东西,以便他们可以看到体系结构功能如何与性能交互。我怀疑如果目的是说教性的,而不是购买他们可能会使用的东西,那么人造的汇编程序和计算机可能会提供更大的灵活性和学习效率。
欧米茄半人马座

12
  • 您现在需要的那个
  • 接下来需要的那个
  • 之后需要的那个

认真地讲,我可能在我那段时间里学过BASIC,COBOL,Fortran,Forth,Pascal和Prolog,但是我从来没有特别需要使用它们,我真的看不到它们对我使用其他方法有什么影响语言,可能是彼此之间误用了范式。我花了很长时间才学会基本的BASIC知识,从而无法真正地编写结构化的Pascal,花了几年时间才停止用C语言编写Pascal代码,而当我开始使用Objective-C和Java时,又花了几年的时间才真正放弃了OOP。另一方面,由于我(几乎)专门使用OO语言进行工作,因此我能够专注于改善对OO语言的使用,而不必试图使它们看起来像Scheme或PostScript。


4
你知道,我不认为有学习,即使你没有一门新语言的一些价值需要它...但是我同意与一般的情绪,这往往更好地学习语言,因为你认为你会发现它很有用,而因为这是您认为您应该“学习”的东西。
Tim Goodman 2010年

8

很难断言任何顺序都是理想的,但是我将提出一个可以证明其合理性的计划:

  1. C

    学习C需要耐心和勤奋,并且将向您介绍计算机处理数据的基本方式,并向您展示程序员可以接受的几乎所有最广泛的职责。

  2. 佩尔

    作为C所要求的严格性的解毒剂,请尝试令人难以置信的Perl。用C编写一周花了一个小时,而用Perl写一个小时。它引入了在编程中可以找到的另一种乐趣,并说明了排除某些顾虑和细节如何使程序员可以将精力集中在不同的事情上。

  3. C ++Java

    接下来,了解C如何将注意力集中在编程的低级和原始方面,以此作为提高抽象水平的基础,并指出在抽象上提高效率时所进行的交易。探索如何形成仍然可以保留对您的程序至关重要的效率的抽象。

  4. 普通Lisp

    这是前面的口号的奖励。您会发现在以前所有语言中学到的东西的回声,并看到当使用Lisp编程时,前面提到的许多让步看起来多么愚蠢。C的预处理器和C ++模板准备了一个欣赏Lisp宏系统的工具。您将重新获得Perl的易于表达,C进行低级优化的机会,C ++或Java的抽象构建功能,并超越它们。前三者(也许除了Perl的调试器之外)都不会为您提供具有功能强大的REPL(“读取,评估,打印循环”)的交互式编程经验。处理图像基于环境的环境将改变您的源代码与“可执行程序”的思想之间的关系,这将改变您对构建程序的含义的整个想法。

除了这四种之外,还可以探索其他样式的编程,例如Haskell中的函数式编程或Prolog中的逻辑编程,从而可以更全面地理解编程的范围(如果愿意,可以广泛地了解知识),但是到那时,您的时间将得到更好的服务通过使用您知道的任何语言来提高自己的手艺(深厚的知识)。

品尝了足够多的独特语言后,您的观点将集中在超越任何一种语言的观念上。这就好比学习驾驶父亲的汽车和知道如何驾驶任何汽车之间的区别:您可能不喜欢在几天之内驾驶这辆小型面包车,充分了解了驾驶一辆喜爱的跑车的乐趣,但您会弄清楚如何操作它,并且一定会比业余爱好者更多地哄骗可怜的野兽。


4
C和Common Lisp +1,但Perl作为第二语言?:) Python可以很好地用作一种动态语言,同时也可以养成良好的编程习惯-例如在程序初次编写后的几周,几个月或几年内,代码对于您自己和其他人都非常可读。
limist 2010年

1
关于Perl的建议:这只是我的年龄。当然,今天,Python或Ruby将是近距离的替代品,但是它们两者都比Perl更具教条性,并且更偏向于方法论类的面向对象风格,而C语言的新程序员却无法做到这一点还不需要。我记得当我学习Perl时,我立刻就变得异常恐怖,而不久之后,我开始使用其面向对象的功能。很多时候,所有面向对象的关注只是分散注意力和不必要的仪式。
SEH

我不同意您的“抽象上升时的交易效率”。C ++的支柱之一是,使用C ++的功能的程序永远不会比同等的 C程序慢。例如,在C ++中使用虚拟函数从未比在C中模拟虚拟函数慢
。– fredoverflow

没错,弗雷德(Fred),这就是我的意思:在不考虑功能的情况下利用功能会带来成本-您可能也避免了功能,从而避免了以前的成本,因为这可能过于复杂或太不习惯了手动实施。例如,抱怨RTTI是“太慢”立即引发怎样的问题,否则你要解决的问题。
SEH

6

1.小话

最初至少部分设计为儿童使用计算机学习的方式。语法很简单,可以在段落中描述。与LOGO一样,它体现了“低进入壁垒,高天花板”的原则。

从“一切都是对象”的意义上讲,Smalltalk是一种纯粹的面向对象语言

它还讲授了许多功能技术,尤其是在其Collection API中:链接消息,高阶函数,映射,缩小等。

佳乐社会是充满活力和热情。您还将看到许多有关高级技术的讨论:与Lisp社区一样,邮件列表上有很多经验丰富的Smalltalkers 愿意分享他们的知识。(Squeak社区拥有大量的专业教育人士,这并没有什么坏处。)还有针对初学者的另一种清单

2.序言

一种逻辑编程语言,它将给您与任何其他语言完全不同的计算视图。Prolog也是高度声明性的(但不是完全声明性的!or或cut运算符可能会对谓词产生重大的语义影响)。

3.普通Lisp

如果您愿意,可以在这里替换方案。Common Lisp支持多种范例,尤其是OO和功能。它也有悠久的历史(Lisp是第二种至今仍在广泛使用的语言:仅FORTRAN的语言更古老)。

4.哈斯克尔

(注意:我才刚刚开始学习它。)可能是地球上最纯净的功能语言。它具有非常先进的静态类型系统。方便的入门 书籍存在。

5. C或Delphi

您需要了解计算机的工作方式。您需要知道内存和CPU的实际功能。传统上,这两者都是“接近金属的”,并具有鼓励思考其语言如何汇编的社区。

为什么要这个命令?

Smalltalk非常易于学习,因此您可以快速开始专注于解决问题,而不是与编译器抗争(“入门门槛低”)。一旦开始编程,您就可以做什么都没有人为的限制-“上限”。

一旦您对OO的工作原理有了一个公正的认识(并且-对OO的含义有很多不同的理解-可以说OO主导了市场),那么进入Prolog可以确保您不会开始以为OO是唯一的方法。Prolog 与大多数语言完全不同,它会伸展您的智力,因此您不会开始以为自己了解所有知识。

反过来,Common Lisp是一种成年人的语言。它有一个成熟的标准,数十年来(连同Smalltalk一起)一直是领先的语言设计-您最喜欢的语言刚刚拥有的所有这些新颖功能?很有可能是在Lisp或Smalltalk中孵化的想法。Common Lisp也有一些戒心,您随处都可以找到戒心。

Haskell在列表中排在第四位,因为(有人告诉我:我才刚刚开始学习它)它的纯度意味着某些非常普通的事情(例如I / O)比使用不太纯粹的功能语言要难得多。Haskell的人员还使用了一些相当奇特的术语(例如“ catamorphism”之类的词),在解决之前,最好先带点编程经验。(但我必须重申,我才刚刚开始学习它!不opinion多加评论!)

为何C / Delphi会持续?因为除非您在嵌入式系统中工作,否则您实际上不必学习编程知识,而无需进行任何手动内存管理。垃圾收集对于1980年代级别的机器来说效果很好。您的手机功能强大!

最后,尽管我确实应该将Erlang放在上面的列表中。


2
这是学习顺序吗?
Wizard79 2010年

显然,这是一个序列(长度为1)。
Frank Shearar

毫不费吹灰之力:我将按顺序提供一个步骤,而您将提供另一个步骤,社区将对所述顺序的顺序进行投票,好吗?
Frank Shearar 2010年

3
@弗兰克,我不是那个意思。我期望完整的序列。而且我认为,订购不能通过投票完成。
Gulshan 2010年

拜托大家:如果您要投票,请解释原因
Frank Shearar 2010年

5
  1. 蟒蛇。出色的编程入门。这也将与以前对编程的任何接触有关。

  2. 方案。也是编程的绝佳入门。如果您是编程新手,那么您可能首先要教这些,然后是Python。一个替代方案是先使用Python,然后使用Common Lisp代替Scheme:更多的工作,但是更多的回报。

  3. C.贴近芯片的底层语言。非常适合学习计算机的功能。您可以替换某种形式的汇编语言,但是C非常接近基础知识并且更易于使用。

  4. 前言。或者,如果可以找到更喜欢的一种,则替换为任何声明式通用语言。

  5. 哈斯克尔。对于类型系统和纯功能,如果没有其他问题。

  6. 这里有几种候选人,因为不可能用六种语言涵盖所有概念。如果只针对宏系统和对象系统(与我见过的大多数其他系统不同),Common Lisp值得学习。Forth,Tcl和APL都是奇特的语言,并且都取得了一定的成功,其中一种语言可以防止学生感到自己已经学到了一切。Erlang对于并发将是很好的。


“如果与编程新手打交道,那么您可能首先要教这些,然后是Python。” 非常同意。这是我以前的大学现在采用的一种方法,并且效果很好。
pyvi

这是一个很好的列表,我可能会颠倒Haskell和Prolog的顺序。如果学生特别缺乏经验,那么我会剔除六个人,增加清单,然后从简单的事情开始。
2011年

4

提供了许多很好的答案,但是我没有看到有人提供SQL。它与上面列出的大多数其他动物完全不同,并且对必须处理数据库的任何程序员都非常重要。

您可能还需要考虑某些操作系统级别的脚本“语言”,例如Batch,grep,awk等。“ Make”也可能属于此类。

您可能要考虑的另一种语言是COBOL(如果尚未完全消失)。它与其他程序语言完全不同,值得一提。C,Fortran,Basic等的变体已经非常相似,以至于一旦您熟悉了一个,移到另一个就不是什么大问题,但是COBOL缺少许多其他人理所当然的结构。(自从我对COBOL做任何事情以来已经有20多年了,所以我对这种语言的观察可能不再有效。)

您可能只想从历史角度提及APL,或者让它安息。你的选择。


1
我不建议使用SQL的原因是它不是通用语言。我宁愿用声明性的和更笼统的东西(例如Prolog)来打动学生。操作系统级脚本语言无法提供Python或Perl等更通用的语言。最后,我接触了COBOL,它没有提供其他语言无法超越的概念。我喜欢APL的建议,不是很讲究历史价值,因为它是一种非常不同的语言。
David Thornley

@David Thornley:我同意SQL不是通用语言。SQL确实有一些有趣的逻辑和设定理论概念,这些基本概念在许多其他语言中都没有出现,例如。对于可能与数据库打交道的任何人来说,联合,联接,分组依据等都是值得注意的。
oosterwal 2011年

我想看到的所有东西都教给了学习者,尽管其中有些具有历史感。学习脚本语言是必不可少的,但可以与其他语言一起完成,对于SQL而言,这是主要语言的一种服务语言。如果学生数学能力很强,那么从APL开始可能会很好(或者可能是R,因为它更容易阅读,但可以类似地使用)。
2011年

2

我建议您阅读Eric Raymonds的“如何成为一名黑客”,因为他对如何入门有一些非常有趣的观点,包括Lisp的“代码就是数据,数据就是代码”概念。

对于编程,我还建议使用Haskell,Prolog,SQL和汇编语言(仅一部分)。

不管您想学习什么,都要花点时间正确地学习它并编写大量的代码。这很像骑自行车-您无法从书中学习。


2

First>开始编程时要做什么?学习如何成为一名游戏程序员与学习如何成为一家企业的数据库程序员...不同于基于Web的程序员...

第二>一旦开始学习,您是否想从高处开始并逐步走下坡路?或者从低处开始,然后逐步提高。学习C#(高级)与学习Assembly(低级)有很大不同。

一个巨大的选择将取决于您想要做什么。对驱动程序进行编程很可能包括C或程序集...对网站进行编程将是PHP,C#,asp等。

就基础知识而言……一旦您决定要做什么,就更容易选择语言。例如,我已经成为医院的数据分析师。因此,我的语言选择是用于数据访问的SQL / TSQL / DB2,用于Windows客户端的C#WPF,用于Web客户端的Silverlight,用于IBM后端逻辑的一些RPG / CL。

我个人坚持写一本好书+建立自己的程序来练习语言。我喜欢APress,喜欢学习C#时阅读C#2008 Illustrated。他们还有其他书籍,涵盖了初学者和专家的基础知识。


2

新手只需要一种语言即可开始学习,学习了第二种语言之后,他们已经超越了许多竞争性开发人员。我将按以下顺序学习:

  • Smalltalk-这是最好的OO,而且简单的接触会让您眼前一亮。最好学习OO概念。
  • Java或C#-在引入静态检查类型的同时,为OO提供了更具体系结构和计划性的方法。
  • Ruby或Python-在感觉不到Java或C#之前,您将无法欣赏它
  • Erlang-并发以一种看起来很容易的方式完成。它比您的OO语言或C语言要好得多。
  • Lisp,Haskell或其他功能语言-这是解决问题的另一种方法。
  • C-通过构建Java的本机扩展或实现较低级别的算法,这就像有人需要的那样接近汇编,直到他们编写编译器为止

您可能会问:“ C ++在哪里?” X呢?坦率地说,学习多种语言可以做几件事:它丰富了您的经验,并且提供了学习更多语言的动力。我熟知的语言(Java,C#,Ruby,C ++,Javascript)列表都是面向对象的-但这主要是因为这是我每天在工作中要做的事情。我接触过的语言列表(Smalltalk,Python,Erlang,JESS,C,Assembly [Motorola 6502/6510],Go)都教了我很多宝贵的经验。我至少可以理解这些语言的状况。我还没有探索很多东西,但是将来可能会很好。还有一些标记语言:HTML,XSL:FO,XSLT,CSS,XML,SGML,如果人们以任何方式使用网络,都需要使用它们。

在学习了至少两种不同的语言之后,我真的不认为您应该约束一个渴望学习的人决定下一步学习。学习应该是一种有机的经验,过程中过多的结构会导致一群人以完全相同的方式思考。可以说是单一文化。


2

这些答案中的大多数似乎大致相同,因此我将提出不同的意见。我一直认为最好的第一语言是Tcl。

为什么?首先,它很容易学习。语言没有太多的语法,因此学生可以将更多的精力放在编程的概念上,而不必在意特定语言的语法特性。在撰写本文时,Tcl刚好有12条规则来控制整个语言(过去几十年中只有11条规则)。

另外,Tcl带有出色的内置GUI语言,因此您可以获得相对即时的满足感,并且可以学习事件驱动编程的基础知识。

第三,它是可扩展的。想教一个重复循环吗?您可以编写一个执行重复循环的命令,这样您不仅可以学习如何使用重复...,直到您可以了解它与while循环的不同之处,因为它实际上是您自己编写的。

另外,因为它是可扩展的,所以可以很容易地进入C语言。您可以学习C的基础知识,并学习如何a)用另一种语言编写的新命令扩展Tcl,或b)学习如何向用C语言编写的程序添加脚本语言C。

一旦您学习了Tcl和C,大多数其他语言都介于这两种极端之间,应该相对容易掌握。我的完整清单,以及在Tcl和C之后我要教的四个是:

  1. Tcl
  2. C
  3. Python-用于OO概念,此外,它还具有按缩进定义行为,以与其他语言形成对比。
  4. Ruby-面向OO的不同方式,再加上学习框架的Rails
  5. java-它无处不在,您需要了解它,并且需要了解JVM
  6. 常规-循环回到动态语言

1

汇编语言,C,SQL,C#

我知道,无聊又老套。整个问题都忽略了编程中真正困难的部分,即问题解决,领域建模和算法构建。但这是为什么:

  1. 您不能通过汇编语言来伪造自己的方式;你要么得到要么就没有。编译器不会节省您的精力,没有框架或库的开销,并且您无法从机器体系结构中隐藏起来;它是纯编程的(在初学者加两个数字的级别)

  2. 在编写了几百行以上的汇编语言程序之后,指针和内存管理不再是神秘事物,并且您应该已经开始注意到代码中的模式(if,switch,array,loop等)。 )。C将这些图案带到阳光下,让它们发光。标准库很有用,但又不占优势,但是不必理会宏/模板/等。在这个阶段。

  3. 现在使用SQL跳入数据库。不要过度使用存储过程,只需了解表和查询的基础知识即可。

  4. 在编写了几百行代码的C程序之后,指针,结构和内存管理是第二天性,而程序结构是老朋友。您将开始注意到高阶模式:这些函数总是与该数据结构一起使用,这部分代码与方法的X,Y和Z等一样,与代码的这一部分相同。此外,您还可以掌握关系数据,现在就可以使用面向对象的语言了。具有庞大的框架和通常晦涩的文档。欢迎来到真实的世界!探索GUI,编写桌面应用程序,编写网站,编写Web服务,编写任何您喜欢的东西。如果您愿意,去找工作。

您现在是编程绝地武士吗?代码忍者?,现在您仅能胜任。但是,您有坚实的基础可以继续探索闪亮的新乐趣。



0

好,这是赏金的最后一天。我正在添加我的答案。我建议的顺序-

C,C ++,JAVA / C#,Python / Ruby,其他任何语言(汇编语言/ Lisp / Prolog等)

  • 我认为第一语言不一定是最简单的语言。相反,我认为它应该给出计算机如何保持抽象的总体思路。
  • 从C到C ++的过渡将更加容易。将会出现OOP,这是当今最常用的范例。
  • 从C ++过渡到C#/ Java将更加容易。我更喜欢C#,因为它结合了许多范例,例如函数式编程。
  • 现在,当有人使用Python或Ruby之类的动态语言时,就会出现“ WoW ”。感觉到动态打字的美将更加容易。但是先学习动态语言然后再学习静态语言会导致:“ 哦!为什么我必须添加所有这些语言?
  • 现在,最常用的范例和语言即将完成。因此,探索任何您想要的东西。从Assembly到Lisp,Prolog或Haskell。并发现各种编程语言的新上下文和功能。

这里的C只是开始。
Gulshan

C#相对于Java的偏好取决于许多因素,我会说两者几乎相等。
prasonscala 2011年

0

方案,C,C ++

我会有偏见,并会使用我的大学目前在其核心计算机科学课程中使用的模型。我在第一年就反对它,但在后来的几年中,我对此表示感谢。该模型基于不需要任何编程经验,但需要学习的能力。

  1. 方案
    我们是您第一次学习编程,魔术越少越好。Scheme的教学语言为语言提供了清晰合理的定义,这是可以建立和扩展的非常小的公理集(“魔术”)。任何能理解数学功能的人都可以跟踪和推理Scheme程序。从Scheme开头提供了一种干净而有效的方式来考虑计算,而无需担心语言的特定细节。

  2. C
    从Scheme迁移到C是一项艰巨的任务,但可以使您了解高级语言到低级语言的非常重要的映射。学习内存模型(指针,堆,堆栈等)以及如何编译和运行程序,指针,堆栈和堆的工作方式是必不可少的技能。通过这种低级的了解,您可以开始分析更高级别的程序(大O)。您可以开始滚动自己的抽象数据类型,并使用不同的实现方式(例如,简单的哈希表或集合的二叉树)。

  3. C ++
    通过学习C和Scheme,我们开始看到编程语言的不同范例,以及它们如何适用于不同的问题。现在您可以进行编程中最可怕的方面:选择和权衡。编程语言的选择会影响性能,可读性,可维护性,健壮性等。对于解决比您想像中的事情更大的问题,这种选择既好,又很危险。C ++试图为程序员做出尽可能少的选择。通过学习C ++,您将学习如何进行权衡和选择解决问题的方法。

您可能不会在行业中使用任何一种语言,也不会再次接触它们,但是学习它们的过程可帮助您了解将要使用的其他语言。另一个方面是您学习围绕特定语言的工具。通过命令行运行gcc,学习Vim,使用GDB逐步执行程序,创建Make文件,使用SVN检入代码,编写Shell脚本以自动化测试等。

请注意,核心课程还包含其他课程(计算机体系结构,数据结构和算法,编译器,操作系统等)。因此,仅学习这些语言不足以精通编程。


0

从基本语言到高级语言是必经之路。这样,您仍然可以了解背后发生的事情。

  • C-指针与内存管理
  • C ++-OO基础知识仍然很受欢迎
  • Java / C#-最受欢迎的语言
  • 一些基本的组装
  • 功能语言-例如Haskell
  • 脚本语言-例如Python

0
  1. 蟒蛇。要完成任务,请执行普通编程。程序上的,OO和(在一定程度上)功能。

  2. 常用表达。它们在Python库中,但这是一个单独的DSL。

  3. Shell(BASH或其他)。“&”,“ |”,“;” 在Python中,用于合并进程的运算符非常关键且令人不快。

  4. SQL。到目前为止,这是用于数据访问的通用语言

  5. XHTML。到目前为止,这是用于数据表示的通用语言

  6. CSS。

如果有必要,也许C。


您似乎已经排除了“ 深刻的启蒙 ”阶段。那是7吗?
马克C

@Mark C:只是试图涵盖“当今大多数常用的语言和范例”。以我的经验,这些“其他”或DSL可能比编程语言更常用。我不确定这是否会带来深刻的启发-只是接触到许多实际使用的语言。
S.Lott,

没错,我看到他的确这么说,然后我注意到他也说了“或范式”。只是幽默而已。
马克C

@Mark C:但是SQL和CSS是最有趣的“其他范例”。确实,正则表达式是一个引起堆栈溢出问题的范例。
S.Lott,

0

开始接近金属:

  1. 组装工
  2. C
  3. C ++
  4. C#
  5. Lisp
  6. Python或Ruby

现在,采用这种广泛方法的问题在于,如果没有多年的学习,就没有人能够使用这些语言获得远程支持。

  1. 组装时间:3个月
  2. C:6个月
  3. C ++:2年
  4. C#:6个月
  5. Lisp:3个月
  6. Python / Ruby:3个月

除非您打算教他们“ Hello world”,否则所有6人都将花费大约一个月的时间。


-1

为什么不直接学习VB或C#。我认为这两种语言都是从初学者到高级的完整语言,恕我直言。


4
因为那不是广度,因此也不是问题的答案。此外,如果您认为其中一个(或两个)涵盖了您应该学习的所有内容,那么您自己就需要学习更多的语言。
David Thornley
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.