从哪里开始(自学)学习C,还是应该学习不同的语言?

时间:2009-01-19 10:13:42

标签: c

最近,我越来越发现拥有丰富的编程基础知识是件好事。可悲的是,我是(许多)自学成才的PHP开发人员之一,并且没有后悔选择这条道路。

但是,我仍然认为我应该从零开始将我的知识扩展到一些“真正的”编程语言,并从那里积累我的知识。我无意改变自己的职业道路,但我认为从网络开发框中思考一下会很好。

我不喜欢上课或课程,因为我根本没有时间。所以:

  • 从零级开始,逐步自学C的最佳方法是什么?

  • 由于我的主要目标是学习更多编程基础知识,C甚至是一个不错的选择吗?

  • 如果没有,会是什么语言?


到目前为止

摘要:

首先,感谢所有出色的回应。这些将非常有帮助。虽然大多数人似乎都认为从C开始并不是一个糟糕的选择,但我也看到人们说,跳过C并使用C ++甚至C#可能是一个更好的主意,因为这些语言更新。

我的个人意见仍然是从零级开始会很好,即使语言本身不是直接有助于我做的事情。我仍然相信它会间接让我成为更好的程序员。但话说回来,就像说的那样,我对这些语言的了解非常有限,所以我也很乐意听到你的想法

17 个答案:

答案 0 :(得分:28)

阅读Kernighan and Ritchie“C编程语言”。这是经典之作。

这是由该语言的原始创作者编写的书。它简短,可读性强,写得很好。

答案 1 :(得分:13)

我不同意前两个推荐着名的“K& R”指南的答案。我完全无法从那本书中学到任何东西;在阅读了本书的前三分之后,我只是放弃了三次。也许我只是愚蠢。

相反,我建议这本精彩的书:C Programming: A Modern Approach(免责声明:亚马逊链接)

我从那本书中学到了我需要了解的关于C的所有内容,它涵盖了历史和需要完成的事情,同时仍然保持着“现代”的观点。

警告:我没有来C“for C”,我在Apple Mac OS X的桌面应用程序的最终目标,Objective-C和Cocoa编程的路上通过它。如果你真的想要一个非常C的深层次知识,获得上述两本书并没有什么坏处,阅读现代C后阅读K& R指南

答案 2 :(得分:7)

我获取C的第一步是“C编程语言”的副本 - 这是一本简单的书,但语言本身很简单。

答案 3 :(得分:5)

好吧,如果你想“从零级开始”,我建议学习装配。是集会。我学到了6502,你可以学习x86,如果你喜欢,或者手臂或mips。查找模拟器或中断器并阅读一些教程。您将完全理解CPU的工作方式和代码将更有意义(例如为什么getkeys不会更新,直到您执行pollkeys等)。

之后我推荐C#,因为它不像c / c ++那样令人讨厌(我主要使用c ++)。您将了解如何在汇编中表示C#行。 C#允许你做更多你想要做的事情,不像c和c ++(以下是我们可以用c ++做的事情列表,我们将能够在下一个标准http://en.wikipedia.org/wiki/C%2B%2B0x中做,C#有一些这些)。

如果你想学到很多东西,你可以尝试学习我推荐的语言https://stackoverflow.com/questions/498964/the-difficulty-in-learning-new-languages-by-yourself/578618#578618,我认为这是汇编后的好主意。

答案 4 :(得分:3)

如果你说德语,我建议你open book from Galileo Computing

答案 5 :(得分:2)

如果你想学习编程基础知识,另一个选择是阅读Knuth的The Art of Computer Programming。这将从一开始就向您介绍基础知识。为了进一步了解,请在C中自己实现算法。

答案 6 :(得分:2)

印第安纳州和普渡大学有一门关于C编程的大学课程。该课程有视频讲座,您可以在here找到。

如果你也有兴趣看C​​ ++,那么Web Lecture Archive Project上有很多讲座叫做“C ++ for Particle Physicists”。你会找到那些讲座here。讲座由斯坦福大学的Paul Kunz主讲。

有关更多C ++讲座,您还可以从重新连接网络中查看these lectures

答案 7 :(得分:1)

阅读“C编程语言”。写一些简短的练习(有些在书中)。使用编译器,例如gcc

答案 8 :(得分:1)

如果你想要一些好的源代码阅读,我可以衷心地建议Simon Tatham的Puzzle Collection(http://www.chiark.greenend.org.uk/~sgtatham/puzzles/,向下滚动到开发者文档的底部)。从中,您可以学习:

  • 如何在C中进行面向对象的编程(每个游戏在某种意义上都是一个实现“游戏”界面的类)。
  • 如何编写便携式C(隐藏自己界面背后的所有不可移植的东西)。
  • 如何评论和记录您的代码。
  • 如何用C语言进行GUI编程。
  • 如何在C中实现数据结构(我记得联合查找和2-4棵树正在完成)。

答案 9 :(得分:1)

1)C编程语言K& R. 2)阅读了很多C源代码。 Google code search

就是这样。

答案 10 :(得分:1)

在阅读了许多建议的“C编程语言”后,我将开始研究开源项目,并从实际例子中学习。有很多,找到合适的一个并不容易,但从良好的代码中学习是学习优秀编码器的最佳选择:) 如果你有一个:结对编程或只是相互代码审查是最好的学习方法。

答案 11 :(得分:1)

C编程语言是一个很好的起点。

此外,C本身是学习编程基础知识的一个很好的起点:你几乎可以在任何地方找到C软件和C开发人员,许多其他语言都是在C语言中扎根,比如C ++,C#,Objective-C,...... / p>

答案 12 :(得分:1)

C是主流教育的不错选择。然而,在阅读书籍之前,我会按照一些IDE教程进行操作,这样你就可以了解构建项目和makefile,这两个将是你最初面临的最大挑战,并且它们很少被任何书籍所涵盖。

答案 13 :(得分:0)

我相信您目前的做法是错误的。 C目前是C ++的一个子集,并没有很多现代OO语言的概念。在大多数情况下,它被归为遗留系统,大多数与遗留代码无关的新开发不是用C语言编写的。就个人而言,我从C ++开始(自学),然后转到C#。从C ++开始,为您提供了解面向对象以及低级别所需的所有基础知识。然而,对于刚开始的人,我现在推荐C#,原因很简单,它更容易开始并开始运行它。此外,c#中的一些概念在C世界中几乎没有类似物,并使编程更加直观(LINQ,lambdas等)。虽然内存管理非常重要(偶尔会出现在C#中),但是管理起来很痛苦,而且在您启动时更容易不用担心。你越早开始一个有趣的项目,就越不可能放弃。

答案 14 :(得分:0)

答案 15 :(得分:-1)

关于学习C

如果你真的想学习C,[Kernighan和Ritchie“The C Programming Language”一书](http://en.wikipedia.org/wiki/The_C_Programming_Language_(book))是一个好的开始。

然而现在,在我看来,学习C只是心灵锻炼 - 你可以学到很多重要的细节,例如:

  1. 等于运算符(==)和赋值指令(=)之间的差异,
  2. 表达式可以具有值(即a = 1具有值1),
  3. 指针算术,
  4. 直接内存操作(即memset()memcpy())。
  5. 这些对开发人员来说很有意思,但是大多数都没有在今天的主流应用程序开发中使用(除了上面的两个第一点)。

    但是如果你从比赛开始尝试参加一些电脑,C语言就会很有用。

    我的推荐

    我会学习C#,因为它是现代的,精心设计的(在我看来)面向对象的编程语言,具有良好的免费IDE - Visual Studio Express Edition,良好的支持(广泛的社区,很多源代码来研究,很多教程和例子)。使用C#,您可以编写控制台应用程序,桌面应用程序或Web应用程序,通过解决各种实际问题,可以轻松学习。

    此外,在.NET平台上还有其他一些有趣的选择 - IronPyton或功能F#

答案 16 :(得分:-2)

让我们来自Yeshvant P Kanitkar