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

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

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

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

  • 从零级开始,一步一步地教自己C的最佳方法是什么?

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

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


截至目前的摘要:

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

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

阅读Kernighan和Ritchie的 “C编程语言”。 这是经典。

它是由该语言的原始创作者编写的书。 它很短,而且非常易读且写得很好。

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

相反,我建议这本精彩的书: C编程:现代方法 (免责声明:亚马逊链接)

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

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

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

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

之后我推荐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我认为组装后是一个好主意。

如果你说德语,我建议你从Galileo Computing那里打开一本书 。

如果你想学习编程基础知识,另一个选择是阅读Knuth的计算机编程艺术 。 这将从一开始就向您介绍基础知识。 为了更好的理解,自己在C中实现算法。

印第安纳州和普渡大学有一门关于C编程的大学课程。 该课程有video讲座,你可以在这里找到。

如果您也有兴趣了解C ++,那么Web Lecture Archive项目中有很多讲座,名为“C ++ for Particle Physicists”。 你在这里找到那些讲座。 讲座由斯坦福大学的Paul Kunz主讲。

有关更多C ++讲座,您还可以查看Reconnect Networks的这些讲座 。

C是主流教育的不错选择。 然而,在阅读书籍之前,我会遵循一些IDE教程,因此你可以掌握构建项目和makefile,这两个将是你最初面临的最大挑战,并且它们很少被任何书籍所涵盖。

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

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

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

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

1)C编程语言K&R 2)阅读大量C源代码。 Google代码搜索

就这些。

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

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

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

1) Kernighan&Ritchie

2) 编写固体代码

3) 代码完成

关于学习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() )。

这些东西对开发人员来说很有意思,但是大多数都没有在今天的主流应用程序开发中使用(除了上面的两个第一点)。

但是,如果你试图参加比赛以来的某些计算机,C语言可能会有用。

我的推荐

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

此外,在.NET平台上还有一些其他有趣的选择 – IronPyton或function性F# 。

让我们来自Yeshvant P Kanitkar