代码之家  ›  专栏  ›  技术社区  ›  ismail

如何教程序员如何在C++中编码?[关闭]

c++
  •  0
  • ismail  · 技术社区  · 5 年前

    所以我在这里教我的朋友C++的艺术。他不是编程新手,但他的专业知识远不如C++。他对HTML、PHP和Java相当了解,但在编写C++程序时,这似乎毫无用处。我们已经学习了基础知识,讨论了指针等等。他甚至在大学里有一门关于C++的课程,但他半途而废。似乎他真的了解基本理论——问题是,当他真正使用他所知道的东西来编写程序时,他失败了。

    所以我现在要做的就是送他回家。任务总是写一个小程序,例如一个原始计算器(输入两个数字和一个字母,决定应该执行的操作……)等。这背后的想法是强迫他实际使用语言来解决问题,调试它,看看它为什么会失败,并从中学习。它。但这似乎不起作用,因为每次我努力使它更难,给他一个更复杂的家庭作业,他都解决不了。我现在该怎么办?我对家庭作业的想法实在是太少了,我怀疑这种方法是否有效。而且,新学期刚开始,他 这次通过C++课程。所以甚至还有一个最后期限——今年年底。

    那么,你能帮忙吗?

    11 回复  |  直到 11 年前
        1
  •  11
  •   Arrieta    14 年前

    问题似乎出在别处。如果你需要教一个Java程序员如何编程一个简单的计算器,问题不是语言,问题是对编程的基本理解。

    我觉得学习编程最糟糕的方法是写没人用的玩具。根据我的说法,最好的方法是从简单但有用的工具开始,因为这会给程序员带来压力:这个东西实际上会被其他人使用;它必须工作!

    如果任务是管理性的,那么让他写一个 disk usage utility 告诉他你会用的。如果任务是科学的,让他写一个非线性方程解算器。

    当然。C++是一种复杂的语言,(我甚至不是很亲近,我只知道两个人,我会考虑专业C++程序员)。然而,这并不是你在教他haskell,或者完全不同的编程模式。除了内存管理和实际管理指针的微妙之处之外,我还没有看到从Java编程和C++编程的范式转变。可以肯定的是,它更困难,因为它是一种低级语言,但最终它是一种面向对象的软件设计方法。

    D.Knuth有一个机智的理由,他用自己品牌的汇编语言教授算法:

    不是随便的人 对电脑感兴趣的应该是 至少要知道什么是潜在的 硬件就是这样。否则 他们写的程序很漂亮 奇怪的。

    我想关于记忆管理也可以这么说。即使您使用垃圾收集语言编程,您至少应该了解 memory 一个物体不是经过 value 或通过 reference . 我并不是说很容易掌握,我是说,至少应该明白,这样的事情在幕后发生,而C++中你管理着幕后。

        2
  •  3
  •   Sae1962    14 年前

    我想很大程度上取决于他到底有什么问题。如果他知道Java,我想他应该知道OOP、集合等的基本概念,对吧?

    他能在Java中解决同样的任务吗?如果是这样的话,那就是用C++来阻止他:缺少对指针的理解(对许多人来说可能很困难)、内存管理、析构函数或缺少类库、STL、模板、……的知识?

    你可以试着和他一起完成一项任务,看看他哪里有问题,一步一步地帮助他。

    当时我真的很喜欢安德鲁·科尼格的 Ruminations in C++ 从基础上讲,C++有着截然不同的教学方式,从好的、真实的(简单的)小程序开始,这些程序实际上是有用的,同时教着最好的习语。虽然它现在已经过时了,但是它的内容sopme在适应最新标准时仍然有用。

        3
  •  1
  •   David Rodríguez - dribeas    14 年前

    如果他知道如何编程Java,让他在爪哇和C++中提供解决方案,告诉他用Java方式做它,当他不知道如何用惯用的C++来做。然后再看看C++中的差异和Java中的代码,为什么会这样呢?

        4
  •  1
  •   Vite Falcon    14 年前

    He knows html, php and java fairly well
    这句话让我觉得他没有做一个适当的程序设计,他必须理解/可视化他的逻辑流程。是的,他做了一些编程。但他可能永远不知道他的程序是如何“流动”的。从先前的“编程”经验来看,他更喜欢视觉提示。我非常怀疑他能在Java中做一个完整的程序,甚至是你在C++中要求他做的那些程序。
    我所学的第一门编程语言是C++,我有一个很好的老师,他让我们开始编程,首先通过绘制流程图来可视化我们逻辑的流程。一旦我们掌握了如何使逻辑可视化的知识,他就开始教我们C++基础知识,全班都很快就学会了。
    因此,我想让他学会如何在纸上可视化他的逻辑,然后让他把逻辑转换成C++程序,这比仅仅让他学习C++的所有概念而不需要一个适当的上下文更好。
    一个例子是,首先教他流程图中的循环,让他为一个问题设计一个流程图,比如从1到20打印数字。然后教他在C++中循环,然后让他写一个程序来做同样的事情。

        5
  •  0
  •   jgemedina    14 年前

    你做得很好,你甚至他自己应该把目标作为一个开发者,如果他在Java方面有经验的话,语法就不应该有问题。

    此外,他有基本的知识,而且他不是初学者,所以你们两个都能做的最好的事情就是得到好的指南、食谱和程序,设定一些目标和编写代码。

        6
  •  0
  •   foo    14 年前

    当他开始学习如何编程时,他错过了一些基础知识。例如,最基本的一点就是,你要对你分配的所有东西负责——就像在现实生活中一样,你必须像成年人一样把你拿出来的东西收起来,而不仅仅是把东西扔到地上,指望其他人在你之后清理干净。

    我认为你的方法是好的,但已经造成了损害,你必须在取得进展之前修复它。你必须回到最基本的问题上来。什么是变量,真的?他可能不知道某个地方有实际的内存存储,而变量只是指向那里的地址的别名——一旦有了这个别名,就可以解释数组和指针,等等。

    真的,先回到基础上来,我想这就是他所缺少的。

        7
  •  0
  •   Swoosh    14 年前

    我愿意为你所做的事和你成为朋友;-)。不管怎样,我首先要弄清楚你的朋友被困在哪里了。它是一般的问题解决还是使用C++语言构造和习语?根据你的发现,你可以指导你的朋友提高他解决问题的能力或语言能力。如果这是语言,我肯定会调查 C++ Primer book by Lippman, Lajoie and Moo 并建议朋友解决练习。虽然这本书长达800页,但任何有编程语言经验的人和C++经验最少的人都应该能够在建议的时间内阅读这本书。

        8
  •  0
  •   mpez0    14 年前

    学习用现代的、高度抽象的语言(如C++和PHP)编程意味着随着你对正在发生的事情有更多的了解,事情变得越来越复杂。要理解更复杂的程序,你需要知道,至少从理论上讲,幕后发生了什么;现代语言是用来隐藏这些细节的。所以要想弄清楚到底发生了什么,就意味着要与你使用的语言范式作斗争。任何由语言为程序员处理的低级细节也意味着对程序员隐藏。

    现在,如果程序员已经了解了这些低级细节所涉及的内容,以及它们可能产生显著差异的条件,那么程序员也知道何时打破语言抽象的面纱。注意,这就是编程语言的发展或演变过程。我们从机器代码和汇编程序开始,然后是非常低级的便利性,然后是一些早期更高级的可移植语言,如Fortran和Lisp。(注意 通用Lisp和Fortran 2008)。

    显然,你可以从PHP或C++开始学习成为一名成功的程序员。但是,虽然您可以很快得到一些相当复杂的结果,但我认为成为一个真正的高级程序员可能需要更多的努力。

        9
  •  0
  •   Diego Dagum    14 年前

    网上有很多免费或付费的自学训练课程C++(免费的一个例子) Herb Schildt's "C++: A Beginner's Guide" 看一看“SAMS自学C++每天一小时,第六版”为付费材料的例子。还有一些免费和付费的IDE,可以使开发体验(编码、构建、测试、调试等)相当容易(!)-一个广泛使用的免费IDE是Visual C++。

    教别人就像学(前面的人行道)一样令人沮丧。一个人首先必须有学习的动力。我必须在这里问:你的朋友对学习C++感兴趣吗?他/她对学习比你更感兴趣让他/她学习吗?理解这一点会让你们俩生活得更轻松。

    让我们来看看最坏的情况:你既不想教书,也不想让你的朋友学习,但是他/她必须学习,比如说,申请一份工作,通过考试或其他什么(你想帮助是因为你的友谊)。所以学习C++变得比另一个目的更重要,而不是结束自己。接下来,我们来了解一下这个终极目标的背景,并尝试将学习过程转换为适合这个目标的过程。例如:如果你的朋友对一份工作感兴趣,那么你需要为金融业开发一个应用程序。这是非常可能的背景下,C++数学库将需要,并且仍然有可能的DB背景也是需要的(因为这些应用程序保持有关财务指标,客户,余额等),在这种情况下,把重点放在那些场景和培训课程将C从目标到事实。

    它只是工作:在我个人的情况下,我通过编码大脑游戏来学习C++。这一目标使我处理了标准模板库,其中有一些针对Windows的UI扩展(在我的例子中是MFC,但由于操作系统不是标准的),OOP,基本类型等。为了获得更好的机会,我跳过了文件I/O和其他事情。虽然我还没有学习C/C++,但我为游戏目的做了很多进步。这有道理吗?

        10
  •  0
  •   Lie Ryan    14 年前

    试试不寻常的东西怎么样:

    告诉他教你爪哇。

    通过让他告诉你他对他熟悉的语言的了解,你可以深入思考他的思维方式,也许能帮助他理解为什么他很难理解C++(而且他不会因为他会讲一些他已经很了解的东西而被激怒)。

    告诉他告诉你他对基本Java构造(循环、条件、类)的看法以及这些构造是如何工作的。你需要非常注意他的每一句话;注意他似乎有点可疑的理解。

        11
  •  -1
  •   reinierpost    14 年前

    我只会附和Truncheon的答案,但相反。 就我个人而言,我一直讨厌C++(C),因为它们缺少内存管理。在这些语言中,很容易做一些琐碎的日常工作,比如字符串操作错误。如果有人告诉我用C或C++编程,我会答应(就像我以前做过的那样),但是我不会高兴,直到我可以使用库或一个框架来解决我对语言的基本问题。(与javascript相同)你的朋友可能(或不可能)在同一条船上。