如何学习C语言和Objective-C语言

24

我正在学习编程。我计划今年夏天学习C和Objective-C。我买了《C for Dummies》这本书,但它完全是浪费时间。它的篇幅太长了!有没有好的书推荐?还是应该从网站上学习C?什么方法最快,因为我真的想快速学习并开始学习Objective-C。

谢谢。

另外,学习C需要多长时间?直到我开始学习Objective-C 2.0。


25
哇,一开始我以为你只是懒得看“太多页数”的书,但《C语言入门经典》居然有1000多页,天啊! - Chuck
1
你首先想要创建哪种类型的程序?我的第一门编程语言是C,然后是C ++,我12岁,我没有后悔,因为Java或C#很容易学习(1周)。学习框架需要更多时间。但是如果您想在网站上创建闪亮的动画,请从Flash或C#开始。如果您想要创建桌面应用程序,C#、Java或Python可能是一个不错的选择。如果您想要创建网站,请学习Ruby或PHP。如果你想编写微控制器或一些内核编程,请学习C。 - Nicolas Dorier
请原谅我,这个评论并不是回答你的问题,但是当你考虑开始编程时,我认为这一点非常重要。 - Nicolas Dorier
我应该说“系统编程”而不是“内核编程”,这些程序员了解操作系统的工作原理,可以理论上编写自己的操作系统、编写驱动程序,或者是在Linux或Windows等操作系统中进行低级别编程方面的专家。微控制器是一种单片集成电路上的小型计算机,它们用于控制汽车发动机控制系统、遥控器、设备和机器人。C#和Java不适用于这种类型的任务,因为它们对于这些任务来说太重、太慢了,它们更适合桌面编程(如MSN),因为它们比C更简单。 - Nicolas Dorier
@Slashene:总的来说,这是很好的建议。然而,我的假设是他想要创建Cocoa应用程序或者(最有可能的)iPhone应用程序。我可能错了,但从他到目前为止所说的话来看,我不认为他对制作网站那么感兴趣... - hbw
显示剩余5条评论
22个回答

24
没有必要急于求成。按照自己的步伐学习,找到最适合自己的学习方式。
如果你喜欢阅读,可以尝试慢慢地读一些书籍。
如果你理解了一个概念,就去练习。如果你还不太理解一个概念,就去实践。当你认为自己理解了这个概念时,可以重新阅读材料,看看自己是否第二次理解了它。
我发现我并不擅长通过阅读书籍来学习——我通常需要在课堂上接受结构化的教学。在社区大学学习了一学期的Java后,我才能够开始有效地自学。看看你的学校是否提供任何编程课程。
(虽然在你这个年龄可能有点难以找到——我直到上社区大学才接受到正式的编程课程——我的高中没有提供任何编程课程。)
其中一件需要注意的事情是正确地学习。匆忙地学习材料或阅读质量差、不准确的学习材料会导致你需要“重新学习”概念,以正确的方式重新学习。在这方面,《C程序设计语言》(The C Programming Language by Kernighan and Ritchie)是学习的“正确方式”,但这并不是一本很容易理解的书。这并不是说它是C语言的权威书籍,但即使在使用C语言编程几年后,我仍然试图一次阅读它一点点。

但是,我真的想不出其他学习C语言的“好”来源。我的建议是看看K&R并逐页阅读。不要像普通书一样阅读它--阅读一个部分,然后尝试实践。一点一点地做。再次强调,不要匆忙。按照自己的速度工作。

一定要编写代码。如果没有看到它工作,学习编程将会很困难。刚开始时不要有太大的期望值,因为C语言的大部分学习都涉及处理文本的程序。

一旦你掌握了这些东西,尽量编写易于他人阅读的清晰代码--这应该是编写干净、清晰代码的动力,并迫使你更加深入地思考你正在做的事情。

这将是一个漫长的冒险,所以一步一步来。祝你好运!


5
看,K&R 的问题在于它是针对工程师和经常使用电脑的人的。只需看看许多示例和练习即可。使用逆波兰式编写计算器?排序算法?将数字转换为字符串并考虑二进制补码数表示法?很抱歉,但对于一个普通的12岁孩子来说,这太难了。 - hbw
确实,我也需要分次阅读才能更好地掌握它。但我认为学习正确的方法比学习不良编码实践并且不知道它的重要性更大。 - coobird
2
哦,并且不要低估12岁孩子的能力 ;) - coobird
1
此外,C语言本身旨在面向“工程师和经常使用计算机的人”。 - Matthew Flaschen
@coobird:我非常赞同你的观点。以错误的方式学习,然后再去纠正它们是非常令人沮丧的。没有“快速简单”的学习方式。我只是认为1)很多人会立即加入K&R的队伍,而不考虑它相对难度如何;2)必须有一本很好的C书籍可以不像K&R那样密集或具有挑战性。也许奥莱利(O'Reilly)的一本书或其他东西?也许那本Chuck提到的“Programming in C”是一个很好的选择(尽管我自己没有听说过)。 - hbw
显示剩余7条评论

11
学习C语言,我强烈推荐Dave Mark的Learn C on the Mac。这不仅适合初学者,而且还教授了编程和计算机科学的重要基础知识(例如数据结构、递归等)。它非常易懂,写得很好,并且容易阅读。此外,我发现例子引人入胜,很有趣。之后,如果你真的想巩固自己在C语言方面的基础,我建议尝试阅读The C Programming Language。这是一本具有挑战性的书籍,所以慢慢来。如果你发现自己遇到了太多麻烦,我建议你可以直接跳到Objective-C,然后再回过头来阅读The C Programming Language,一旦你对编程有了更多的熟悉感。
很多人可能会推荐The C Programming Language(也称为“K&R”)作为你第一本阅读C语言的书籍。毫无疑问,它是一本非常好的C语言书籍(而且只有大约200页),但我认为对于一个12岁的孩子来说,作为第一次接触C语言的书籍可能会有些令人生畏:它非常密集和专业。你可以看出它明显是针对一个有着计算机/工程背景的年长读者群体。但尽管如此,如果你已经了解了编程的基础知识,阅读K&R将为你提供宝贵的洞察和理解C语言。你一定要在编程的过程中某个时候阅读它。
无论如何,对于Objective-C,如果只能推荐一本书,那肯定是Aaron Hillegass的Cocoa Programming for Mac OS X。它并不长(大约400页左右,尽管我认为其中很多都是由于书中插图的数量),你可以在一个下午内完成一些非常酷的项目。它非常清晰易懂,示例实用有趣,但最重要的是,它有这种恰到好处的平衡,既不会太令人生畏,同时又能提供坚实的信息。此外,它还将教你更多关于Objective-C以外的东西:例如,通过学习Cocoa的一些组件,我发现我已经学到了一些非常有用的设计模式。

1
K&R在你已经有一点了解的情况下效果更好。如果您已经知道它要讲什么基础知识,那它就不像跳入冰湖那样了。 - Chuck
在学习 Objective-C 之前,我需要学习 C 需要多长时间? - Austin908
"For Dummies" 系列中有一些例外 -- "Python for Dummies" 很好,"Bridge for Dummies" 也不错(前者的作者是我的朋友,所以我有偏见,但我不认识后者的作者,他是有史以来最伟大的桥牌玩家和作家之一)。尽管有例外,斯特金定律适用于“为小白”系列书籍,就像它适用于_几乎_所有其他事物一样;-) - Alex Martelli
@austin:这取决于你想从中学到多少。如果你真的想要在 C 语言方面打下牢固的基础,我会说需要几个月的时间,但如果你想快速进入 Objective-C,你可以在不到一个月的时间里掌握 C 语言的基础知识。此外,尽管 Hillegass 的书已经假定你了解基本的 C 语言知识,但通过学习 Objective-C,你仍然可以学习到一些良好的 C 编程实践技巧。 - hbw
2
奥斯汀,学习C语言是一个长期的努力。在研究Obj-C之前,学习C语言的基础知识可能是值得的。但不要等到你成为C语言专家,因为那需要很长时间。 :) - Matthew Flaschen
显示剩余8条评论

7
当我看到这个问题的标题时,我猜你可能12岁。
我开始学习编程是在13岁(现在14岁)。
我发现学习取决于你是哪种类型的学习者!
我讨厌阅读,我的注意力很短,并且我从视频中学得最好。因此,我是“视觉学习者”。尝试找出你是哪种“学习者”,然后用那种方法学习。记住,最容易的方式也是最快的方式。
PS,这里有一个小提示。它可能会令人沮丧(特别是在我们这个年龄)。如果你感到沮丧,请放下它,休息10分钟。然后回来研究你正在学习的东西。编程有时确实非常令人沮丧。
编辑: 顺便说一句,我喜欢通过视频学习:p

4
完全同意。我12岁开始学习,现在已经24岁了,有时仍然会感到非常沮丧。但是,你会学会如何学习,而回报始终是值得的。 - Jon Smock
2
嗯,我无法告诉你有多少次我因为不知道自己在做什么而狠狠地关上了电脑。 - user100051

5

斯坦福大学在线发布了 CS193P (iPhone开发课程)的讲座、课堂笔记和作业。如果您完全不懂C或Objective-C,可能会有些困难,但如果您打算进行iPhone开发,我强烈推荐这个。

我认为我已经阅读了所有的Cocoa和Objective-C书籍,并且最喜欢Aaron Hillegass的Cocoa Programming for Mac OS X


4
我建议您看一下C语言程序设计(K&R C)。它不到1000页,我认为您会发现它非常值得一读。正如htw所说,书籍提供了全面和结构化的方法。特别是K&R C将直接从C的创建者那里给您带来真正的洞见。
这并不是说您不应该Google一些东西,阅读开源代码,编写一些小练习程序等等。这一切都有所帮助。只要记住要耐心。世界上有很多东西需要学习。

2
从个人经验来看:K&R 对于一个青少年来说可能会很吓人。并不是在贬低 K&R 或其他任何东西 - 我喜欢它,而且我从中学到的关于 C 的知识比任何其他书籍都多。然而,当我第一次尝试阅读它时(大约 13 岁左右),它确实感觉非常强硬,并让我暂时远离了它的阅读(几年后我读完了整本书)。 - hbw
我同意htw的观点。K&R是一本非常好的书,非常简洁,但它确实要求读者具备很高的能力。对于一个12岁的孩子来说,Kochan的《C语言程序设计》可能是更好的选择。 - Chuck
哈哈。哇,这一定很复杂吧? - Austin908
2
+1 给 K&R。我羡慕你,@austin——当我12岁时,我不会编程……周围唯一的计算机都在银行等地方受到严密保护的气候控制“神圣房间”里。所以我转而研究电子(尽管我几乎无法使用焊接铁这样的工具)。当我14岁时,我偶然发现了一本 LISP 1.5 参考手册的旧版本,并花了很多愉快的时间用笔和纸“玩电脑”……是的,K&R 会是一个挑战,但 Bourbaki 的代数拓扑学文本也是如此,然而我在你这个年龄左右就已经掌握了它,所以,为什么不试试呢? - Alex Martelli
我和Alex在一起。慢慢来,稳扎稳打,但不要退缩。你以后会感激自己的努力。 - Matthew Flaschen


2
不要急躁,慢慢来。跟着教程走,拆解代码片段,你会掌握这门语言的。最重要的是,自己写代码,从错误中学习。

还有,关注Stack Overflow ;)

2
我曾经也和你一样。那并不好玩。以下是拯救我的方法:
(显然新用户不能发布超链接,所以请在谷歌中搜索“steve summit C”,使用第一个或第三个链接,然后点击“introductory C programming class notes”)
这是由Steve Summit编写的C语言课程。非常易于理解,比K&R容易得多。而且它是免费的,没有广告。我很喜欢它。这就是我学习C语言的方式。我希望它也能对你有所帮助。

2

没有什么比能运行和调整的代码更具有教育意义了。书中的代码示例可能非常单调,不太适用。唯一的例外是《Perl Cookbook》,它充满了对 Perl 程序非常有用的小片段。

这本书中的主题(或者叫“惯用法”)非常实用,而且可以跨语言应用,因此一些聪明的人已经开始在不同的语言中复制这些主题。每个语言的完整性各不相同,但看到不同的语言如何做同样的事情确实很有趣。

请点击这里http://pleac.sourceforge.net/,获取可以使用的编程智慧。至少有趣的是,看到一个语言中简单的东西在另一个语言中需要写大量的代码。

如果我再次开始学习编程,我可能会选择一些易于理解和容错性强的动态语言,例如 Python、Ruby 等。一旦你掌握了其中的基础知识(流程控制、数据结构等),学习 C/Objective-C 就会变得容易得多。另外,你会发现你需要编写一次性工具和脚本来帮助你进行 Objective-C 开发,而在 C 中编写这些工具会很繁琐,但在现代动态语言中只需要几行代码就可以实现。拥有另一个工具从来不会有坏处。

祝好运!


2
说实话,我学的第一门编程语言是Java(我在高中发现它很有趣,决定从事编程)。
我最近几周才开始学习Obj-C,读了一些书,但没有看完整本书,如果遇到不懂的语法(程序应该如何结构化和编写),就会经常上网查找资料。
学习一门语言的速度取决于你对编程基础的理解程度。只有通过时间和实践才能不断提高。
如果你能够理解编程的基础知识,那么你应该能够将其应用到任何语言中,难点在于学习和记忆不同语言的语法。例如,在Java中,你不必进行内存分配,但在C、C++和Obj-C中必须这样做。我从未编写过C或C++程序,但现在我已经学习并编写了一些Obj-C程序(我一直在制作iPhone应用,感觉很有趣),我相信我可以轻松掌握C和C++。
我的意思是,你不必先学习C才能学习Obj-C。但是,掌握多种语言永远不会有坏处。

这一切都取决于你对程序如何运作以及如何构建程序的理解级别。我喜欢Objective-C,因为它是面向对象的,就像Java一样,所以我很容易理解和快速学习,只需要熟悉一些语法上的差异。

(我即将从大学毕业,所以我周围都是编程内容,从Ada等过程语言到Java等面向对象语言,知道让程序工作的幕后细节,所以理解和学习新语言变得更加容易,您开始看到它们之间的关系和区别,这很酷)

很好,你很年轻就开始学习编程。我相信你会非常快地掌握这些东西,并且如果你真的很喜欢,就更容易了。

祝你好运!并且要享受乐趣!编程有时很令人沮丧...比如说,调试3小时,结果发现是因为你的if语句使用了大于号而不是大于或等于号之类的问题。但是,一旦你完成了程序,就会感到非常满足,然后你只想让它变得更好,更好哈哈。

我不知道这是否有所帮助,但我希望能有所帮助...

=)


1
我很惊讶这么好而且详细的回答竟然没有得到一个赞。所以我给你点了一个赞!谢谢。 - Son Do Lenh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接