【问题标题】:My mental block - struggling to learn Objective C我的心理障碍——努力学习Objective C
【发布时间】:2025-11-24 15:20:09
【问题描述】:

这将是我注册后的第一个问题! 不管怎样,这是我的问题,我在大学里学过 Java,总是有人告诉我我是一个优秀的程序员。然而,我从未将其作为职业——我转而从事支持和管理工作。我对我的工作非常厌烦,因此我开始学习 Objective C,以便我可以为 iphone 开发应用程序。我目前正在观看几个不同的视频/书籍。

我的问题是,当我浏览 Apple 文档时,虽然我了解其中的大部分内容,但有时我会绊倒。我相信,因为您/我们有 Apple 文档(即框架参考),所以一切都应该清楚,因此您无需参考书籍或视频(以学习如何使用特定类)。但我总是参考一本书和视频,随后感到内疚,因为我认为框架参考应该足够了。 (因此我觉得我配不上程序员)

我还认为,您不需要示例代码来学习如何使用特定类,因为 Apple 为每个类都提供了文档,但是我再次找到我的自我谷歌搜索示例代码并且我找到了这样的答案 - 再次我为此感到内疚。

我是否正确地说 Apple 文档根本不清楚?并且可以参考视频/书籍或谷歌?或论坛?

我有专业的程序员告诉我,我担心太多了,我应该继续做下去,并使用我拥有的所有资源。我似乎无法绕过我脑海中的这个心理障碍。

当我开始一个编程项目时,我能够使用出色的搜索技能来找到我需要的代码,复制并粘贴它(是的,我明白)但是我很内疚地告诉自己为什么没有你自己想出代码吗???因此,您不是真正的程序员,您只是擅长谷歌搜索。

目前我正在阅读 20 多本书,以便我可以学习大部分框架、语法等来开发 iphone 应用程序。我相信如果我这样做,那么当我想到一个项目时,我可以快速完成。我应该读几本书吗,比如 2-3 然后就开始一个项目 /app ,如果我卡住了,就谷歌它并获取我需要的代码吗?

有人可以回答我的问题吗?

编辑:

从每个人那里收到的绝对精彩的答案和 cmets。我非常感激。

从现在开始,我将使用我需要的所有论坛、书籍、文档和示例代码,而不会感到内疚!正如一些人所说,Apple 文档并不清楚(是的,我非常熟悉 Objective C 语法)。我给你举个例子:为了让iphone上的键盘消失,你必须使用一种叫做resignfirstresponder的方法。我从视频教程中学会了如何使用这种方法!

您根本无法从 Apple 文档中学习到这一点,有时甚至无法从最好的书籍中学习(该方法的工作方式相当奇怪,Apple 文档并不清楚)。

这就是我的抱怨 - Apple 文档应该很清楚(至少有一些示例代码)。似乎是优秀程序员(但不擅长谷歌搜索)的人在这个舞台上输了。而且似乎不是那么优秀的程序员仍然可以通过 - 只需通过谷歌搜索或观看一些视频(专业程序员可以/无论出于何种原因都无法访问)。如果你问我,整个事件似乎相当不公平和不平衡。

感谢您的回复。

【问题讨论】:

  • 我认为您对文档有一个以自我为中心的观点。您似乎期望所有这些都是围绕为像您这样的新手提供一站式购物资源而设计的。这不适用于专业开发人员。 Apple 文档主要设计用于支持经验丰富的开发人员的持续开发。预计编程和 API 的基础培训将由其他资源提供。我还没有看到任何设计为完整、独立资源的 API 的任何单一资源。
  • Apple 文档和工具也是免费提供的。如果您为它们支付了数百美元,您可以期望它们更加适合您的个人需求。在使用了多年之后,我对 Apple 详细了解的 Apple Docs 有了自己的看法。但是,与其他免费的 API 文档相比,它们非常好。
  • 下面有几个很好的答案,但我认为您应该至少将其中一个标记为正确。

标签: objective-c iphone


【解决方案1】:

有人曾经说过:

“我们边做边学,没有其他的 方式”。

我也坚信编码也是如此。少读多做,当你遇到困难时再读。在我看来,这是学习任何新语言的最佳方式。

【讨论】:

    【解决方案2】:

    理解文档是完全可以接受的,但仍然需要看看如何使用它。例如,我可以告诉你“代码”是什么意思,但是没有上下文,很难想象如何正确使用它。我的意思是,你知道它的意思,但是你具体是怎么使用它的呢?

    自 1990 年代初期以来,我一直在使用 Objective-C 和 NeXTSTEP,当新框架发布时,我仍然会查看示例代码,或者诸如此类。为什么?因为它节省了我很多时间,而且上下文很重要。

    【讨论】:

      【解决方案3】:

      第 1 步:放松

      第 2 步:您必须明白,这不是一件容易掌握的事情。这就是为什么那些确实得到很好报酬的人。如果你有一个想法,你可以在几周内把这些东西搞定,你需要把它扔掉。计划花几个月的时间来研究它。

      第 3 步:了解 Apple API 非常庞大且始终在不断发展。自 Mac-Classic/NextStep 时代以来,我一直在使用它,每天我都会学到一些新东西。

      第 4 步:您必须学习的编程语言越少,学习新语言就越难。你会比已经学过六种语言/API 的人学得慢。

      第 5 步:不要害怕使用重复和蛮力。我认为让新手慢下来的事情是不学习常见的基础类(如 NSString、NSArray、NSDictionary 等)的行为和方法。打破抽认卡。

      第 6 步:放松

      【讨论】:

      • 非常好的 cmets,但我没有第 2 步:有很多错别字/错误。
      【解决方案4】:

      自然语言学习中的一些概念可能与此处相关。

      您可以区分接受性语言技能和生产性语言技能。接受技能包括听和读一种语言。生产性语言技能涉及说一种语言。如果你花了很多时间自学一门语言,但还没有用这种语言生成大量材料,你会发现自己擅长接受技能,但不太擅长生产技能。可能你已经彻底了解了所有的语法规则。而且,当你努力写一个句子时,有人帮助你,你会发现他们没有使用任何你不知道的原则。尽管如此,当只有你的接受能力良好时,它仍然很难产生。这可能是您使用 Objective C 的地方。听起来您可以很好地阅读该语言,但需要更多练习才能编写它。

      也就是说:Apple 文档中还有很多未说明的内容。例如,大多数 Apple Objective C 函数文档都没有告诉您谁拥有返回值的内存。这是因为它们通过命名约定隐含地告诉您。如果您还没有阅读过这方面的文档,那么看起来各个函数文档中缺少某些内容。

      另一个与接受/生产相关的困难是组织应用程序有许多不同的方法。但是Objective C 库是面向模型/视图/控制器方法的。如果您不了解这种方法,而您开始编写 Objective C 代码,那么无论您对这门语言有多了解,您都会发现您的需求与文档对您的需求的期望发生了冲突。

      我还应该补充一点:Apple 文档看起来非常专业且布局合理,但我认为有大量信息难以获取。例如,我在试图弄清楚应用程序启动期间各个阶段发生的确切顺序时遇到了很多麻烦,发现许多不明确(甚至可能不正确)的语句散布在不同的地方。

      因此,我建议您尽可能利用资源来帮助您。您不会通过简单地死记硬背语法来学习自然语言。用这种方式学习编程语言也很困难。

      【讨论】:

      • 这太有趣了,以至于每个人都如此确定“你不是通过简单地死记硬背学习语法来学习自然语言的”。确实如此,但是死记硬背地学习语法并完美地了解 A-Z 的基础知识会给你一个巨大的开端。我只能为学习自然语言说话。在编程语言方面,我从未如此系统化。
      • 人们确信我们大多数人都学习过不止一种语言,因此可以借鉴自己的经验。
      【解决方案5】:

      如果您认为某个特定的课程可以解决您的问题,您应该向上滚动到课程文档的顶部并阅读相关的配套指南。这些指南通过文档和示例提供了该类最期望的各种标准使用模式。

      示例:NSString's 类文档提供了各种 NSString 方法行为的精确定义,而companion guide 描述了如何使用字符串执行各种任务。

      还有……rein 说了什么。

      (当人们声称 Java 或 .NET 的文档要好得多时,我也觉得这很有趣——从我现在的情况来看,我发现 Apple 的文档要好得多。我完全承认这是因为我有 Cocoa 经验,而我Java 已经萎靡不振,我从未深入研究过 .NET。)

      【讨论】:

        【解决方案6】:

        我是否正确地说 Apple 文档根本不清楚?

        没有。只是文档不是为 Objective-C 的绝对初学者设计的。

        并且可以参考视频/书籍或谷歌?或论坛?

        是的。使用您喜欢的任何资源。没有关于你应该如何学习的规则。

        当我开始学习 Objective-C 时,我是一名经验丰富的 C、Java 和 C++ 以及其他几种语言的程序员,所以我从一个比你更好的位置开始。我试图从 Apple 文档中学习语言和 Cocoa,但发现这是不可能的。如果您对语言一无所知,仅仅找到从哪里开始是一个巨大的障碍。例如,内存管理指南非常简单易懂,但作为 Java 程序员,您可能不会想到您甚至需要查找它们。

        我发现学习 Objective-C 的最佳方式是阅读一本声称可以教授它的书。我选择了 Aaron Hillegas 的书,但还有其他的。

        但是我对自己为什么不自己想出代码感到内疚?

        作为一种学习练习,复制粘贴可能不是正确的做法。但是,总的来说,它绝对没有错(当然,除了版权问题)。如果有一个Apple示例说明如何做某事,而不是复制粘贴,我倾向于手动重写它。我发现它在我的脑海里更好,但每个人都不一样。

        【讨论】:

        • 完全同意手动输入代码示例。不知何故,它“粘”得更好。
        【解决方案7】:

        我不完全确定您的问题是什么。你有一个“心理障碍”,让你感到“内疚”,因为你不能仅仅阅读参考手册就掌握一项新技术?这听起来像是一个个人问题,任何人都不可能想出一个简短的书面答案,这会导致它消失——尤其是如果其他“专业程序员”已经告诉过你同样的事情的话.

        不管怎样,FWIW,Antimoon 的人坚持 the example usage is more important than the definition,我倾向于同意。你不是通过坐着阅读字典定义来学习英语的。就此而言,您不会通过阅读汽车的技术参考手册来学习驾驶。你不会通过研究腿部肌肉的解剖图来学会走路和跑步。我不知道为什么人们认为计算机在人类努力领域中具有某种特殊性,以至于您学习它们的方式应该与您曾经学过的所有其他东西完全不同。

        【讨论】:

          【解决方案8】:

          在几年前接触 iPhone SDK 之前,我是一名经验丰富的 Java 程序员,我认为 Apple 的文档是我职业生涯中见过的最清晰的文档之一。

          我认为您的问题是您花太多时间阅读书籍和文档。你已经有编程背景,所以边做边学。从Your First iPhone Application 教程开始,以便您了解Objective-C、MVC 和Interface Builder 的基础知识。 “下一步在哪里”建议提供了有关之后尝试的提示。在那之后,您可能至少会有足够好的入门知识库来构建您自己的应用创意,或者至少是如何入门。

          【讨论】:

            【解决方案9】:

            学习编程不仅仅是记住一种语言或框架 - 诸如数据结构、算法、设计模式等将适用于许多语言,它们是(良好)编程的真正组成部分。

            【讨论】:

              【解决方案10】:

              将框架文档视为字典,将示例代码视为百科全书。您需要参考两者,但每个都有不同的原因。

              【讨论】:

                【解决方案11】:

                我认为阅读Cocoa Design Patterns by Erik Buck 对你很有帮助。一旦您开始了解框架背后的模式,您就可以开始通过命名模式和逻辑来预测事物将如何工作。

                【讨论】:

                  【解决方案12】:

                  我在大学学习软件开发,并有几个朋友是音乐专业的。他们在课堂上被分配听一系列音乐,这样他们就可以了解每种音乐的不同方法和质量。这给了他们在何时创作自己的音乐时的深度。您只能从零件文档中学习。来自他人的灵感肯定会帮助您做出更好的工作。

                  还要考虑到,作者在阅读最优秀作家的作品时也会学会写出更好的内容。

                  微软方面的一位杰出程序员提倡他所谓的“代码阅读”,您可以在其中挑选一个您认为是高质量代码的好例子的开源项目。你通过它并弄清楚它是如何组合在一起的以及为什么。你可以在这里看到更多...

                  http://www.hanselman.com/blog/TheWeeklySourceCode41SearchingCodeSharingCodeAndReadingCodeAndComments.aspx

                  我还喜欢查看特定文件的源代码控制历史记录,以了解代码随时间的变化情况。当我第一次开始在一个新领域工作时,我发现其他开发人员会犯同样的错误。如果你能从别人的错误中吸取教训,避免自己重蹈覆辙,那么你将成为更好的程序员。

                  【讨论】:

                    【解决方案13】:

                    每个人都以自己的方式学习。和你一样,我更喜欢(工作)示例而不是阅读 API 文档。但这适用于我使用的每种语言。

                    我觉得你太担心别人了。重要的是你最终会弄清楚事情,当你使用不同的参考时,你正在完成工作。谁在乎其他人的学习方式是否与您不同?

                    【讨论】:

                      【解决方案14】:

                      我能理解问题所在,有时可能会感觉到“不准备”。

                      Obj-c 乍一看可能很吓人,最好的方法是尝试编写一些简单的简单问题的解决方案,然后一步一步地前进。

                      【讨论】:

                        【解决方案15】:

                        Apple 文档实际上只是一个参考,它并不是所有内容的概要,因此您应该将其用作您学习的“起点”,然后在其他地方搜索时以此为基础。

                        使用 google 找到问题的答案并没有错

                        【讨论】:

                          【解决方案16】:

                          我可以看出你对理论有很好的了解......这很好,你不会像复制和粘贴那样盲目地编码......即使 有时您可能需要复制和粘贴,您会更深入地了解它是什么。

                          只是失去内疚感。(只是像“迟到总比没有好”那样肯定自己)

                          编码是一项脑力劳动,你应该有清晰的头脑才能产生有效的输出

                          以积极和好奇的心态开始编码,一切都会开始倒进你的杯子。

                          【讨论】:

                            最近更新 更多