程序员学习编程需要攻克的8个障碍

大多数学习者同样碰到过相同的障碍,但是,一旦克服了这些壁垒,那么好处立马就来:

  • 更享受学习经历
  • 进步更快
  • 碰到难题更执着,不轻言放弃
  • 写代码时更独立

那么,这些障碍究竟是什么呢,我们又该如何攻克它们?

1.不正确的学习动机

在谈及壁垒之前,我想先着重说明学习动机的重要性。不要只是为了编程而学编程,也不要因为听说它很酷,很划得来就来学编程。

你得因为要解决问题而学习编程,你得因为想要自动化和改善生活而学习编程,你得因为想要构建应用程序以造福社会来学习编程。

如果你只是喜欢编程,并希望以此作为职业的话,那么在之后的学习过程中,你可能会有一种强烈的冲动想要放弃。这通常发生在事情变得艰难,学习体验变得痛苦的情况下。这时你会告诉自己,你不喜欢编程了,编程操作不适合你,觉得自己天生就成不了程序员。

这就是为什么你应该考虑围绕着完成项目设置目标的原因。如果你的心里有计划,或者你想要解决更高层次的问题,那么你可以对自己说:“这可能不是一次愉快的经历,但是我真的想要解决这个大问题,所以我一定要克服这个障碍。”

2.不知道从什么技术入手

很多人会问:“我应该先学什么编程语言?”之所以会提出这个问题,是因为他们不知道自己为什么要学习代码。

一旦你下定决心去完成一个特定的项目,那么从什么语言入手这个问题就变成一件很容易的事情:

  • 如果你想构建iOS app,那么你需要学习Objective C或Swift。
  • 如果你想构建Android app,那么你需要学习Java。
  • 如果你想构建Web app,那么你需要学习JavaScript。

其实现在我们可以使用JavaScript来创建任何类型的项目——无论是简单的web和移动app,还是高级的硬件项目。大多数行业中都有它的身影:音乐、医疗、游戏、时装。这种语言非常值得学习。

如果你还是不能确定要选择哪种语言,那么不妨咨询下某个程序员的意见。只要你确定要构建什么项目,那么他就能很快地为你推荐适合你使用的技术。

另外,知识都是相通的,所以,不要过于拘谨,选择语言这一步骤几乎没什么风险。

3.不能学以致用,以及责备自己

选择好技术堆栈之后,刚开始学习理论总是很轻松的,而且网上也有许许多多免费和付费的在线课程。

很快大多数学习者掌握了理论知识,甚至完全可以自己来解释某个代码片段的工作原理。理论只是概念的有限集合。任何人都可以在几天之内记住它,如果她/他真的想的话。那么,关键的问题是什么?

学习者碰到的最大问题在于,实际应用理论来解决问题并编写新代码的时候。这中间的差距实际上就是技能空白。

比如说游泳。你可以阅读大量的技术文章,然后解释得就像一个专业教练。但是,要想实际应用这些理论,就需要大量的实践、斗争和错误——你肯定会吞下大量的水!

然而更糟糕的是你开始责备自己。或者认为自己不够聪明,或者觉得自己没有天赋。这其实跟聪明天赋没有关系,你只是需要练习技能的过程:

1.选择一个复杂的项目。理想情况下,这项目得能够激发你的兴趣。

2.将这个任务分割成既小又独立的任务。例如,“实现登录页面”是一个很大的任务。解决一个任务不应该超过20行左右的代码。下面这些提示有助于成功做到这一点:

  • 如果你不能解决这个任务,那么进一步将它分割成更小的任务。
  • 一个任务一次不应该使用太多的理论概念。

3.一次专注一项任务,而不是并行解决多任务。不要跳到下一个任务,除非你已经彻底测试过当前任务,并确信没有问题。

如果你不这么做,而此时应用程序又出现了问题,那么你就不知道你正在并行解决的多任务中到底是哪个出了问题,寻找起来就麻烦多了。

4.确保自己在开始任务之前知道所有必要的理论知识。有时候,你可能不知道需要学习什么理论,这很正常,所以你需要向他人寻求帮助:程序员朋友,导师,或类似StackOverflow的社区。

5.最后,你解决了任务。在解决任务的过程中,你可能会碰到很多问题,你需要做的就是吸取教训,这也是下面要说的要点:

4.不吸取解决任务中获得的经验教训

最好的情况是,你解决了任务并且结果证明非常有效。此时,很多人往往就直接开展下一个任务。但是如果你这样做的话,那么你浪费了一个绝佳的学习机会。

希望你能够用以下问题来挑战自我,帮助自己成长:

  • 哪些边界情况会导致我的代码失败?即使现在还没有失败,有哪些应用程序状态可能会破坏代码?
  • 我的代码是否足够整洁?对其他开发人员,甚至是自己而言,代码是否易于理解和改变?因为以后可能需要修复隐藏在这段代码中的问题,或者根据其他产品规格改变代码。
  • 我的方法是最好的吗?有没有其他选项是我可以选择使用的?各个方案的利弊?这任务是否值得用不同的方式解决?
  • 此模块与其他模块是如何交互的?是否会对其他模块造成负面影响?是否容易被其他模块影响?

然而,很多时候,你会进退维谷:

5.你不知道如何处理一个任务

你不知道从哪里开始?你可能会随机地去尝试,或者从其他地方复制一些你自己也不明白的代码。但是,这是没有帮助的。即使你复制来的代码有效也没用。因为当你今后再一次碰到类似的任务,你依然不能解决。

如果你想妥善解决任务,那么首先你得知道你为什么卡壳。下面是一些可能的原因:

1.没有很好地掌握这些理论知识:

  • 语言语法
  • 库或API的工作原理,某个具体方法或类的工作原理
  • 编程范式(例如:异步编程)
  • 系统运作(例如:HTTP请求是理解Web开发的关键)

如果是上述情况,那么可以去复习理论知识,如果依然摸不着头脑,也可以去找人寻求帮助。

2.任务太大了,那就分解为一个个小任务。

3.也有可能是因为你读得太快,忽略了一些你以为熟悉其实似是而非的概念,所以无法理解任务要求。

6.你知道如何解决任务,但解决方案不管用

这是编程中最常见的情况,哪怕是那些经验丰富的资深程序员也是如此。你的解决方案之所以不起作用最大的可能是你的代码中存在着bug。

如何修复?方法是调试代码。这也是作为一个程序员需要学习的最重要的技能之一。这不是可以随便凑合的事,也不是玩幸运猜猜猜游戏。如何寻找bug是有具体步骤的。而且很多书中都有教这个技能。

不幸的是,这是很多新手程序员失去动力选择放弃的难关。很少有课程会说明调试的重要性。如果你不知道如何正确地调试,那么它就是不可战胜无法攻克的难关。

很多人担心会花太多时间用于调试代码。这是正常的,在你第一年的编程规划中这是不可避免的。

甚至,你还得学着去喜欢调试。不妨将此看成是一个机会,一个修复错误提高编程能力的机会。当你解决了一个bug,可以问问自己这个问题:“我为什么会犯这种错误?以后我该如何预防再犯?”

还有一个好主意是将找到的bug写成编程日记,方便你总结和学习。

7.不知道如何接受帮助

当我们在学习代码,或调试代码时,可以咨询很多材料:书籍、课程、教程、导师,开发者社区等等。

在你学习这些资源时最常见的问题是,你并没有完全了解幕后发生了什么事情,也不知道概念是如何融入到更大的蓝图中的。

例如:你在某个问题上花了10小时,最后终于有人提供一个解决方案,你往往会采取“拿来主义”——采纳解决方案之后就直接跳到一个任务中去。千万别这样做!相反:

  • 思考自己之前的思维过程。问问自己,做错了什么,对于这个特定的解决方案有哪些是值得你先前的思路借鉴和改进的地方。
  • 询问他人的思维过程。她/他是如何解决的呢?向对方学习,吸取经验。

这也是在StackOverflow和谷歌上搜答案的一大缺点:你只知道解决方案,不知道幕后的思考过程。

8.不去应用你学到的理论

这篇文章也是理论知识,除非你能够学以致用,否则它是不会发挥一丝一毫作用的——多多应用,直到它变成潜意思的例行程序。

编程其实就是通过形成良好的习惯来帮助你解决各种问题的过程。

本文借鉴http://www.codeceo.com/article/8-barriers-learn-coding.html

时间: 2024-10-15 03:54:48

程序员学习编程需要攻克的8个障碍的相关文章

C#程序员学习Android开发系列之ListView

上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如何在ListView中按照我们想要的界面效果进行展示.限于篇幅这篇重点讲ListView,下篇博客重点阐述SQLite. ListView是一个常用的数据显示控件,假设我们要做一个简单的界面,如图所示. 这张图是我直接从Android平板电脑(Android 4.2.2)上面截图下来的,就是一个普通

.NET 程序员学习路线

1 .NET Framework常见的API要熟练掌握. 2 Linq to Object.Linq to Object是一项很重要的技术.如果没有这项技术,数据的查找和操作的代码会被foreach充满,这样不容易维护,而且有很多代码都是routine代码,可以省略的. 同时,与Linq搭配的技术Lambda技术,可以简化很多代码,这也需要掌握 3  .NET 4引入了新的并行编程库.这项技术不同于多线程技术,它是适应多核时代的需要. .NET 4还引入了动态语言,如果要改善.NET程序的性能,

优秀游戏程序员学习资料推荐

这两天给单位的技术做的一次学习材料推荐培训,直接ppt上拷过来的. 优秀游戏程序员学习资料推荐 主讲人:臧旭 前言 今天提到的纯粹是我个人心得和理解,可能片面,可能以偏概全. 目的是给大家做一定的指引作用,想让大家知道自己还有哪些可以去学习,还有哪些不足,我们距离优秀还有多远. 对我今天提到的东西,如果大家有时间,一定要去深入了解,在技术的道路上才有可能看得远.走得稳.飞得高. 另外有一句对所有技术人员想说的话: 学无止境.切忌坐井观天.有一点小小的成就就沾沾自喜.止足不前. 扎实的基础 万丈高

Android程序员学习之路

和一些刚工作以及未毕业的同学沟通,很多同学对在没有工作机会或熟练Android人员指导的情况下,如何学习Android并提高Android水平比较关心.下面我从几个方面介绍一些方法和方式来和大家分享: 1.Android知识 1.1.网站资源 1.1.1.Android官网 这个是最权威最官方的.主要看设计篇 和开发篇 .API相关接口用到哪一个接口再去看.不用挨个看.当然现在可能会被墙,大家也可以看本地SDK目录下的docs中的index.html打开后的文档. 1.1.2.stackover

结束程序员对编程的恨

用笔者的经历现身说法,编程的确是一件需要极大.极大耐心的活儿.加上使用的是Emacs编辑器(谢谢老顾的建议和他的耐心:D),会犯更多的小错误,解决起来也更加令人烦恼.耐心很重要.对于第五条,也比较赞同,笔者已经习惯了遇到错误去百度一下错误代码,同时会浏览一下相关的错误例子以及原因,学习很快.最后一条同样重要,周围的很多同学,遇到一点小问题就跑到论坛问老师,个人很反感.我想:在现在这个阶段,只要你想,应该没有你不可能独立解决的问题. 每个人刚开始的编程技术都不理想,所以我们决定列出一张清单,写上大

程序员学习路线

学了差不多两年的编程,沉下心来回想一下,除了类似 HelloWorld 这样简单的程序会写,其他稍微复杂一点的程序代码,连看都不敢看.说没有学过什么语言,那肯定不是啦!可能就是因为接触的语言多了,都是学了些皮毛,感觉什么语言都会.其实,是什么都不会. 大一,有接触过Java,SQL server,Matlab,Html ,看到真的没什么感觉.于是就简简单单的跟着老师上课的步伐,半知半懂地学着.考试勉强混过了.下个学期,也一如既往.到了大一快要结束的时候,听说软件测试不需要学太多的程序代码,于是就

Java程序员学习的6个小技巧

Java程序员学习的6个小技巧 知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰.北京Java培训机构分享Java程序员学习的6个小技巧兄弟连IT教育作为全国最大的PHP培训机构,迄今已有10年的教育历史,7大特色课程:PHP教程.安卓培训.JAVAEE+大数据.UI设计.HTML5培训.云计算架构师,全栈工程师培训,在目前IT市场特别火,每门课程都由名师牵头,以认认真真的态度做教育,培养的学员过万,在学员心中树立了良好的口碑. 1.一定要看书 现在学习Java

Java程序员学习之路

1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基本没有其它任何一本书可以超越它.该书的作者Bruce Eckel在网络上被称为天才的投机者,作者的<Thinking in C++> 在1995年曾获SoftwareDevelopment Jolt Award最佳书籍大奖,<Thinking in Java>被评为1999年Java

为什么开源可以提高程序员的编程技能?

为什么开源可以提高程序员的编程技能? 记住开放源代码在你参与进去的时候效果最佳.代码更改在大多数项目中都是受欢迎的,但是有很多出力的方法.测试开源代码和文件错误报告:帮助完成文档集:写教程和如何做的例子:参加对话--或者仅仅只是帮助传播.每一件事都能带来改变,并且越多的人参与进来越好! 我已经写了很多年的软件.最近我意识到,我越涉及(致力于,结合于等)开源技术,我写出来的代码就更好.这不由地让我疑惑起来:难道里面有什么相关性或因果关系吗? 阅读代码能让你变得更优秀 我在编程生涯的早期就明白我阅读