0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

学习编程需要克服那些难关

Wildesbeast ? 来源:今日头条 ? 作者:C语言编程学习 ? 2020-02-04 12:32 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作为一个C/C++软件开发的老程序员,我看到过很多新手程序员满怀热情投入到学习中来,却总是处处碰壁。大多数学习者同样碰到过相同的障碍,但是,一旦克服了这些壁垒,那么好处立马就来:

(1)更享受学习经历

(2)进步更快

(3)碰到难题更执着,不轻言放弃

(4)写代码时更独立

那么,这些障碍究竟是什么呢,我们又该如何攻克它们?我们一起往下看:

1、不知道从什么技术入手

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

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

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

如果你想构建Android app,那么你需要学习Java

如果你想构建Web app,那么你需要学习JavaScript。

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

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

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

2、不正确的学习动机

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

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

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

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

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、不去应用你学到的理论

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

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

所以说,想要在程序员生涯内有更高的成就的话,最最重要的是尽可能的提升自己的编程能力,并且,与其想着怎么去提升,不如从现在开始动手动脑,如果对于C/C++感兴趣的话,可以关注+私信小编【编程交流】有一些视频希望可以帮助到你,学习不怕从零开始,就怕从不开始。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1290

    浏览量

    71896
  • HTTP
    +关注

    关注

    0

    文章

    526

    浏览量

    33833
  • C++
    C++
    +关注

    关注

    22

    文章

    2119

    浏览量

    75749
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    零基础学习LuatOS编程:快速上手开发实战教程!

    无论你是刚接触物联网编程的新手,还是希望拓展技能的技术爱好者,本教程将为零基础的读者提供一条清晰的LuatOS学习路径。从安装开发工具到编写第一个程序,我们将通过实例讲解核心概念,助你快速实现从理论
    的头像 发表于 06-13 17:27 ?270次阅读
    零基础<b class='flag-5'>学习</b>LuatOS<b class='flag-5'>编程</b>:快速上手开发实战教程!

    如何克服电路板元件引脚焊接的缺陷

    克服电路板元件引脚焊接的缺陷,松盛光电提供一种既易于操作,又不会使产品产生品质问题,且成本较低的自动化激光焊接方法。
    的头像 发表于 05-14 15:23 ?556次阅读
    如何<b class='flag-5'>克服</b>电路板元件引脚焊接的缺陷

    Triton编译器支持的编程语言

    编写和优化深度学习代码。Python是一种广泛使用的高级编程语言,具有简洁易读、易于上手、库丰富等特点,非常适合用于深度学习应用的开发。 二、领域特定语言(DSL) Triton也提供了一种针对深度
    的头像 发表于 12-24 17:33 ?1077次阅读

    4G模组SD卡接口编程:深度学习

    今天我们需要深度学习的是4G模组SD卡接口编程,以我常用的模组Air724UG为例,分享给大家。
    的头像 发表于 11-20 23:14 ?764次阅读
    4G模组SD卡接口<b class='flag-5'>编程</b>:深度<b class='flag-5'>学习</b>

    什么是机器学习?通过机器学习方法能解决哪些问题?

    来源:Master编程树“机器学习”最初的研究动机是让计算机系统具有人的学习能力以便实现人工智能。因为没有学习能力的系统很难被认为是具有智能的。目前被广泛采用的机器
    的头像 发表于 11-16 01:07 ?1084次阅读
    什么是机器<b class='flag-5'>学习</b>?通过机器<b class='flag-5'>学习</b>方法能解决哪些问题?

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之socket CAN

    接口来调用。Socket CAN的接口被设计的尽量接近TCP/IP的协议,让那些熟悉网络编程的程序员能够比较容易的学习和使用。socket CAN的应用在Socket CAN之前Linux中已经有了
    发表于 11-15 09:25

    NPU支持的编程语言有哪些

    NPU(Neural Processing Unit)是一种专门为深度学习和人工智能应用设计的处理器。NPU支持的编程语言通常与它所集成的平台或框架紧密相关。以下是一些常见的编程语言和框架,它们可以
    的头像 发表于 11-15 09:21 ?2098次阅读

    FPGA加速深度学习模型的案例

    FPGA(现场可编程门阵列)加速深度学习模型是当前硬件加速领域的一个热门研究方向。以下是一些FPGA加速深度学习模型的案例: 一、基于FPGA的AlexNet卷积运算加速 项目名称
    的头像 发表于 10-25 09:22 ?1350次阅读

    嵌入式学习建议

    很多弯路,也会使你对嵌入式系统感到畏惧。等你软件硬件基础打好了,再学习就感到容易理解。实际上,许多嵌入式应用并不需要操作系统。也可以根据实际项目需要,再学习特定的RTOS。不要被一些嵌
    发表于 10-22 11:41

    如何学习ARM?

    、寄存器、内存管理单元(MMU)、中断控制器等方面的知识。 3.学习编程语言和工具: 掌握一门与 ARM 处理器兼容的编程语言是必不可少的。C/C++ 是最常用的编程语言,可以使用它
    发表于 10-11 10:42

    请问TLV320AIC3104通路配置需要修改那些寄存器?

    1:通路配置需要修改那些寄存器,目前我们是一路tdm进来,输出接的是LEFT_LOP、RIGHT_LOP和HPLOUT三路,我们tlv320aic31x.c驱动里注了很多snd_kcontrol,这些是否能利用起来,麻烦提供一些相关的测试示例。
    发表于 09-29 07:23

    【「仓颉编程快速上手」阅读体验】+壹读后感

    感谢电子发烧友论坛提供的读书机会,领略到华为公司开创的新语言:仓颉编程 。 在阅读《仓颉编程快速上手》这本书后,我深受启发。这本书犹如一把钥匙,为那些渴望踏入编程世界的人打开了一扇便
    发表于 09-06 20:12

    十天学会单片机可能吗?单片机入门需要多久?

    一下,单片机的入门其实并没有想象中那么难。对于那些有一定编程基础,尤其是有C语言基础的学习者来说,入门的过程可能仅需几天。例如,有人可能在三天内就掌握了单片机的基础
    的头像 发表于 09-05 08:00 ?2678次阅读
    十天学会单片机可能吗?单片机入门<b class='flag-5'>需要</b>多久?

    keil软件实现编程仿真需要哪些步骤

    Keil MDK-ARM 是一款广泛使用的集成开发环境(IDE),专为 ARM Cortex-M 微控制器编程而设计。它提供了代码编辑、编译、链接、调试和仿真等功能。 1. 安装 Keil
    的头像 发表于 09-02 10:28 ?2652次阅读

    克服设计难题-实现高性能接口

    电子发烧友网站提供《克服设计难题-实现高性能接口.pdf》资料免费下载
    发表于 08-28 09:41 ?0次下载
    <b class='flag-5'>克服</b>设计难题-实现高性能接口