如何寻求帮助(编码)

由于多年来我一直将自己视为新手开发人员,因此现在已经很熟悉了。 我有一点时间,我只是打开笔记本电脑,在个人学习项目上进行一些工作,也许要完成一个教程,然后:pwhoomp! 包版广告。

在一个小时内,发现两个错误使我无法通过初学者级iPhone应用程序编程教程的初始阶段,有人向我指出,编写其他过程可能对其他人有用。 开始。

首先,我分享一些背景知识,以防您可能希望学习类似的技能,或者在开发学习过程中觉得自己一个人,也许我们有一些共同点。 我是50岁的兼职产品经理,他了解vi和HTML,一些CSS,一些JavaScript。 从牛顿时代开始,我就一直崇拜苹果移动产品。 掌上功能强大的计算机? 对于在Littles上长大的人,您betcha! 这些天,我正在学习Swift,以开发自己的教育应用程序。 (我也教。)我的自学课程结合了Apple的App开发和Swift iBook以及Paul Hudson的Hacking with Swift教程。

昨晚,我正在学习第五个教程,很高兴学习如何构建文字游戏,这是一个具有明显现实世界教育价值的项目。 只是完成设置,在Apple的Xcode IDE中创建新项目,然后从默认视图切换到UITableView感觉就像是一项成就。 下一步是在ViewController.swift中添加一些行以读取文件,并将视图标题(在手机屏幕上看到的内容)设置为以下单词之一。 表面上看,这比听起来容易得多,因为提供了所有代码。 如果您愿意,可以只复制粘贴。 因为学习起来感觉更好,所以我会尝试通读,理解,重新键入和搜索Google。 当然,语法错误会逐渐蔓延,但是Xcode会警告我这些错误。 完成输入要读取文件的功能后,并设置了初始表格视图,该教程指示:“现在按Cmd + R键运行该应用程序,您应该在顶部看到一个八个字母的单词,准备就绪太好了,我喜欢构建和运行部分,我计算机屏幕上的假装电话,一点点的工作软件。 除了…

没啥事儿。 更具体地说(因为这实际上是我在其他人的问题报告中想要理解的东西),模拟器确实显示了所请求的假装设备(我将我的设备设置为iPhone 5s,因为它非常适合我的MacBook Air屏幕),但是我既没有看到表格视图,也没有看到标题。 最初我不知道为什么。

说实话,在这里。 每当我遇到这些时刻之一时,我都会感到恐慌。 我有一个相当消极的内部独白,像这样。 “来吧,您永远不会成为一名开发人员。 您应该做其他事情。 我一直压扁这个,但我听到了。 我认为很多学习者都这样做。 我知道我需要寻求帮助。

  1. 不要害怕问,但请仔细考虑您的要求。

当我们处于编码障碍时,这意味着我们的软件无法按预期运行。 暂停。 深呼吸。 您可以对此进行推理。 您期望发生什么? 发生了什么事呢? 在这种情况下,本教程包括一个屏幕截图,因此我确切地知道应该看到的内容:带有标题的UITableView。 表格视图和标题均丢失。 除了空白的模拟器屏幕外,Xcode还在ViewController.swift中标记了这一行:

 标题= allWords [0] 

我还在调试控制台中看到“严重错误:索引超出范围”。 确定,因此此数组必须为空。 但是,不应该这样。 看着我的代码,我特别困惑为什么为什么我至少没有看到试图存储单词的数组的默认内容,其他情况。

 如果让startWordsPath = Bundle.main.path(forResource:“开始”,ofType:“ txt”)
 {
   如果让startWords =试试? 字符串(contentsOfFile:startWordsPath){
 allWords = startWords.components(separatedBy:“ \ n”)
 }其他{
     allWords = [“蚕”
    }
 } 

幸运的是,一位朋友和编码导师在线并愿意提供帮助。 (嗯,事先我们只是在谈论如何给狗洗澡,即使它在浴缸里看起来很难过。)

2.提供上下文(代码),以便您提出问题。

无论您是在网上与朋友聊天,还是在Slack,subreddit或任何地方发布,更有经验的开发人员都需要查看您的操作。 这意味着将您的代码放在他/他可以看的地方。 对于iOS项目,请继续将其作为公共存储库放到GitHub上。 如果您是从命令行使用git的,那么您会喜欢Xcode中的git多么简单。 如果不是这样,并且您仅使用Xcode进行编程,则可能永远不需要学习命令行git。 这是雷·温德利奇(Ray Wenderlich)撰写的一个教程(比初学者需要的更深入)。 而是从事Web开发项目? 对于JavaScript,我的导师建议使用JSFiddle,而freeCodeCamp学习者将熟悉CodePen。 这里的重点是将整个项目放在其他人可以看的地方,这样您就可以互相说说:“如果我在第28行为数组分配默认值,为什么它仍然不显示任何标题? ”,您可以在同一行看28。

在这种情况下,尽管我仅通过交谈一个源文件就设法最终找到并解决了这两个问题,但是经验丰富的iOS开发人员可能已经开始使用构建配置或情节提要。 (我现在知道了。)

3.打印内容(到控制台)。

因为我是新手,所以我对调试工具还不满意。 我已经听说过断点,但我不确定在Swift文件中如何,何时或在何处执行此操作。 我对打印语句很满意。 我什至可以使用替代品! 如果听起来很熟悉,请仔细查看自己的麻烦代码,然后尝试打印未按预期显示的值。 (Xcode具有一个在运行时显示的控制台;您无需在应用程序内以用户可见的方式打印任何内容,因为这只是为您自己和您的导师解决问题的数据。)就我而言,我想知道为什么allWords数组中没有显示任何单词,因此我将其打印出来。 它是空的。 然后,我打印了视图标题。 它没有出现。 嗯

4.继续讲话。 解决问题需要一段时间。

这可能是我最大的收获。 在晚上的编码时间中,我曾以为这将是一个有趣,快速,学习的项目。 我什至开始谈论我的导师的想法,“我们可能会尽快解决。”也许在谈话的一半,我又开始进行负面的自我交谈,“也许我应该放弃,开车回家,然后去但是我一直在谷歌搜索和聊天时,她一直在问问题并做自己的观察,并试图向她解释我的代码。 然后,Eureka Moment#1在重新阅读了教程说明并查看了关于Swift的Hacking subreddit的一个不同但相似的问题的建议之后发生了:也许我没有将正确的视图控制器设置为要显示的初始控制器。 果然,当我返回Main.storyboard并将“属性”检查器中的“是初始视图控制器”设置切换为“导航控制器”而不是“视图控制器”时,您好—在模拟的小iPhone上,是一个表格视图! 长话短说,剩下的奥秘:为什么没有标题,以及当我们最终看到标题时,为什么它是默认数组内容,而不是从文件中拉入的内容也被证明是一种配置,而不是编码错误。 在本应在项目中创建文件路径的行之后添加打印语句,告诉我们那里发生了故障:

 如果让startWordsPath = Bundle.main.path(forResource:“ start”,ofType:“ txt”){print(“ startWordsPath为\(startWordsPath)”)
 。
 。
 。
 } 

根本没有打印任何内容,甚至没有显示“ startWordsPath是…”……因此,由于某种原因,我的项目导航器中没有找到该文件。 现在,如果您已经深入到针对新手的调试指南中,那么您一定会感到奇怪:何时会出现Stack Overflow? 谢谢您,Stack Overflow:这是第二个问题的答案,为什么即使在正确复制了教程代码的情况下也无法读取该文件:我还没有在.xcodeproj设置中(双击项目导航器顶部的项目文件),将start.txt添加到“复制捆绑包资源”列表中。 我做到了,它奏效了,其余的呢? 尚无历史记录,但仍在进行中。 这里的秘密? 我们一直在说话; 我一直在解释; 我的导师一直在问问题。 长时间的注意力集中在这里会有所帮助,在一天的正确时间喝咖啡或Mate也会有所帮助。

我意识到许多读者可能还没有导师,而且我也非常不耐烦地等待对我的“请帮助我”帖子的回复。 但是,当您等待时,无论如何都要尝试大声解释。 在担任产品经理时,我曾经问过我们的一位开发人员,为什么他把浴缸玩具带到了我们的软件训练营。

那时,我了解了橡皮鸭调试,这是当您在Facebook Messenger的另一端没有愿意的参与者时所要做的。 (您逐行告诉鸭子代码的工作方式。)

对于那些到目前为止已经读过的人:谢谢。 我希望这是有帮助的。 如果您正处在iOS的“快速学习编程”之旅中,那么我将很乐意为您提供连接和帮助。 您可以在ios-developers.slack.com和@SuzGupta上的芝加哥代码中找到我。 我还想补充一点,这篇文章绝不是对出色的Swift教程系列的批评。 相反,我知道,每当有人需要停下来奋斗(阅读:研究并寻求帮助)时,就会发生更深入的学习。 该系列也很吸引人,因为从一开始,每个教程都内置于整个应用程序中,该应用程序会做一些有用的事情,以便以后在您自己的应用程序中恢复。 非常感谢Paul Hudson提供了这些免费的在线课程,特别感谢我的导师Carrie Coxwell,他作为朋友和老师一次又一次地超越了自己。