在过去的几个月里,我一直在学习用Objective-C编写iOS app,最后我开始理清思绪。这比我想象中要难很多,也花了太长时间。

我经常遇到困难、感到沮丧,修复bug比实际写代码要花太多时间。但是,在我的手机上把玩我从头开发的app有一种让人惊奇的感觉。

用这种方式我学到了很多,除了开发iOS app,还有平常的编程。我还遇到了一些问题,如果用不同的方法学习Objective-C,或许我就可以避免了。

回头看,如果我今天要学习编程,那么我会做一些不一样的事情。

找到一名编程小伙伴

我还找到一种学习方法,那就是有一个可以交谈的、活生生的人。

我的合伙创始人Josh,主要做Python开发,实际上和我一起学习Objective-C,并为我解答了很多编程理论方面的问题(“怎么让一个if语句再次起作用?”),在我真正遇到难题时帮我调试。

至少有了极具耐心的编程伙伴,他可以解释基本的编程原则,这是莫大的帮助。在我用Objective-C搞清楚具体细节之前,Josh经常帮助我思考解决某个问题的大部分逻辑方法。

善用资源

如果你不够幸运,身边缺少有耐心的程序员解答问题,那么,其它一些地方可以让你从真实的人那里获得帮助:

Stack Overflow

关于具体语法或实现的问题,Stack Overflow是我最近访问最多的网站之一。我自己还没有在那儿问过问题(由于该社区对初学者相当友好,我对提问持谨慎态度),因为我很少需要去问——通过浏览其他人的问题的答案,我的大部分问题就得到解决了。

Treehouse

Treehouse通过视频课程教授编程,还建立了社区论坛,你可以在这里讨论有困难的bug,或者你在听课过程中碰到的具体练习。

askadev

在你需要帮助的时候,askadev支持你联系到有经验的开发者。我还没有尝试过这项服务,因此我不知道有多大用处、或是否囊括了所有编程语言,不过它是免费的,下次你有需要,不妨一试。

Codementor

如果你想给有经验的开发者支付现金来获得帮助,Codementor会把你和熟悉你在学的语言的人匹配到一起。它们涵盖了Android、iOS、HTML、CSS、PHP、Python,以及很多技术。

小黄鸭问题的解决 如果你以前没有看到,《小黄鸭式解决问题》的博文是非常有用的。具体操作是:对着一个小黄鸭或其它静物,比如面包机,阐述你的问题,大声点儿。大声讲述问题的过程,经常有助于你自己意识到答案(或至少知道错在哪里了)。我已经发现,大声地讨论我的代码是一种难以置信的好习惯,每次在我找别人帮忙之前,我都要尽量这样做。

学习规范

在我学习编程的时光里,最影响我的就是对于我正在使用技术的误解和陌生。比如,开发API意味着我需要理解API的工作原理、怎样使用POST和GET请求、怎样分析JSON数据,甚至我需要掌握接收JSON数据。

学习Objective-C不是开发iOS app所需要知道的全部,至少,不是我想开发的那种。我犯了个错误,我认为只要知道Objective-C就行了。甚至更糟糕的,我经常遇到困难,因为Stack Overflow回答问题的人、在线教程和书籍章节都在解释如何用Objective-C开发,完全跳过了必需的、我需要知道的、基于web的原则,因为他们认为我知道了。

如果我今天重新开始,我将首先补充、积累HTML和CSS方面的知识。当我开始碰到一些我不太了解的新技术时,在准备用Objective-C实现之前,我会大概了解一下。

任何语言都可以起步

如果你真的不确定从哪里开始,或者你想开发什么,请不要因此受到影响。虽然我花时间学习Ruby和Python、还没有用它们完成任何项目,但是我不觉得时间被浪费了。

初学者通常的起点是学习HTML和CSS去开发网站。它们实际上是标记语言,如果你想开发移动或web app,貌似学习HTML和CSS是浪费时间。但是在这种情况下,你将获得知识和经验,对你继续学习编程语言是有帮助的。

如果你急切希望开始学习编程却不知道从哪儿开始,就挑一本书、教程或在线课程,只要你喜欢,就搞定它!一旦你对想开发的东西有了更好的理解,你总是可以选择学习一种不同的语言。

找到你真正关心的项目

对我而言,最大的学习曲线可能就是找到让我坚持学习代码的动机。过去我尝试了很多次:在我小时候学习HTML和CSS,几年后学习Ruby的基础知识,最近在学Python。

我决定学习Objective-C,不是因为它胜过了Ruby或Python我才喜欢,也不是因为我认识学Objective-C的人,只是因为我有一个iOS app的想法清单,我想完成——我真的想去开发。

我学习Objective-C的动机比以前学习任何其它语言都要强烈,因为我想开发的私人项目在鼓励着我。

最重要的是,随着难度加大,我感到沮丧、遇到困难时,我没有放弃——因为我正在开发我真正关心的项目。每次我设法实现一些新功能,运行良好,得到的收获甚至更好了,因为它是我有激情的项目的一部分。

如果你正在考虑学习编程,而你没有选择语言或平台的任何限制,我明确建议选择你真正有激情的项目,这样才能为项目需要所选择的语言打下基础。

每个人的学习方法都不同,因此你可能有着与我不同的经历,不过如果你只是刚起步、或在考虑学习编程的事情,那么希望我的经验和错误能帮你学得更快。

注1:小黄鸭调试法,又称橡皮鸭调试法,黄鸭除虫法(Rubber Duck Debugging)是软件工程中使用的调试代码方法之一。就是在程序的调试、纠错或测试过程中,耐心地向小黄鸭解释每一行程序的作用,以此来激发灵感。

转载于:https://www.cnblogs.com/yuyu666/p/9842871.html

如果学习编程可以重来相关推荐

  1. 如何学习编程?顺便介绍些好的网站

    学习编程的过程,大致如下: 看书.看博客.学课程或者看视频等 模仿着书上或者博客的代码,进行复现,复现不重要,思考才是关键 ⚠️ 思考学习别人思路后,脱离书本和博客,完全自己实现功能 自己实现一些 D ...

  2. 【学习编程】献给迷茫中的你,教你如何快速入门编程,如何从编程小百到 IT 巨佬?零基础自学请收下这份学习指南(经验分享)

    导语 编程初学者可能都思考过这个问题: "我该怎么学编程?我要选择哪门编程语言比较适合我呢?......" 今天小编教大家认识编程语言,了解编程语言. 我们已经迈进了崭新的2023 ...

  3. 照着别人的敲代码来学习编程好吗

    照着别人代码敲一遍除了让你看得仔细点,练了打字外其它并没有任何帮助--和自己盯着代码仔细看是一样的,这样的学习效率是不高的. 首先得为什么会有这个问题,因为刚刚学习编程会走很多弯路,想找一个合适的方法 ...

  4. 雷鸣的游戏人生(六) --- 如何开始学习编程?

        雷鸣的游戏人生(六) --- 如何从开始学习编程(到放弃)?     前5篇文章算是前情交代和试水,不过鉴于大家的反馈,我觉得每篇文章还是提出一个问题解决一个问题会对大家帮助更大,同样的大家也 ...

  5. 我6个月的学习编程经历:从”大齿怪“到“狂欢者”

    转自http://www.aqee.net/first-six-months/  未经对方许可 [本文英文原文链接:My First Six Months of Programming: From M ...

  6. 重新开始学习编程系列Day10——超全的MySQL核心原理,从底层剖析MySQL

    文章目录 前言 一.事务的四个要素 二.事务的隔离级别 1.未提交读(Read Uncommitted): 2.提交读(Read Committed): 3.可重复读(Repeated Read): ...

  7. 业余爱好者如何学习编程

    因为 Aaron Swartz 的自杀,这两天看了不少关于他的报道以及他自己的博客,对我触动最大的是尽管他一直在做技术相关的事情,但眼光和理想却远远超越了技术.他把技术当作推动自由和社会变革的工具,所 ...

  8. 孩子为什么要从小学习编程?

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 文章转载自STEAM创客 她6岁的女儿想上机器人特长培训班,恰逢女儿上小学一年级,担 ...

  9. 从《庖丁解牛》谈谈学习编程

    从<庖丁解牛>谈谈学习编程 原文链接: http://zh.5long.me/2014/paodingjieniu/ 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 前一段时间读了< ...

最新文章

  1. 39 n 39 是不是c语言常量,自考“高级语言程序设计”习题答案详解(39)
  2. numpy.newaxis详解
  3. leetcode --Minimum Depth of Binary Tree
  4. python颜色库_Python可视化_matplotlib08-palettable颜色库(四)
  5. 迁移数据库到SQL on Linux Docker
  6. 蒙特卡洛分析 pmp_PMP基础名词介绍 | 59. 实施定量风险分析
  7. access 增加字段 工具_Java效率工具之Lombok
  8. mysql 修改数据库的数据库_如何更改MySQL数据库的数据库名
  9. 2016年系统集成项目管理工程师最新考试说明
  10. 国产木乃伊走进CTO编辑部
  11. 全国计算机二级c语言和江苏教材一样吗,计算机二级省级和全国计算机二级考试内容一样吗...
  12. 51nod 1489 蜥蜴和地下室
  13. 诺威达刷机教程_诺威达方案导航一体机
  14. 解决Intellij IDEA中找不到汉化包问题
  15. Matlab变压器励磁涌流,基于matlab电力变压器励磁涌流的分析和仿真.doc
  16. 第十课◆ Newland Edu Li nearI ayout和Re lati vel ayout
  17. linux内核 print,自定义linux内核调试print
  18. PS制作华丽的紫色立体字
  19. 微信html5开发常见bug,微信公众号H5之微信分享常见错误和问题
  20. XDMCP远程连接Linux桌面(lightdm) ps -ef |grep lightdm

热门文章

  1. 第三次毕业设计任务书
  2. 蓄力十年,做一个成就
  3. 调整屏幕亮度,调整字体大小
  4. JSON支持什么对象/类型?
  5. windows server 2008的安装以及主机IP配置实验
  6. linux 根目录下的子目录的意义
  7. 删除作业计划出错(DELETE语句与 REFERENCE约束FK_subplan_job_id冲突。)
  8. Cassandra-Java(增删查改)
  9. 数据结构算法的引言+时间复杂度
  10. 操作系统——文件合并