我被要求在我们的IT部门聘用一个没有编程经验的人,但他是一个聪明又能干的人,可以说是一个支持现有.Net应用程序的入门级开发人员来帮助他进行编程。我绝对相信这个人可以做到,但是我正在寻找最快的方法来使他快速。我有很多想法,但想看看别人的想法。我知道这也将高度依赖于他的学习方式,但我通常是在谈论。

所以问题是:您认为使非开发人员适应的最佳方法是什么?加快开发速度(在这种情况下为.Net)?

评论

可能相关的问题:programmers.stackexchange.com/questions/10930/…:D

我听说“学习Python的艰辛之路”对于非程序员入门非常有用。

看看Small Basic。它很简单,但对初学者很有用。

我认为,向没有任何思想模型的人解释编程是没有用的。弄清楚您要说的是哪种语言,并让他们点击教程并动手,然后进行解释。他们会挣扎,您会迅速加入并加快学习过程。

我想请他阅读Edgser Dijkstra的|“关于真正教授计算科学的残酷|”,让他了解该文章的原因,以便他可以警惕被普遍接受的可能对他造成的脑部损害编程教学方法

#1 楼

对于那些想学习编程的人,我通常会规定相同的顺序。这是非常理论的,但奠定了良好的基础。全日制学习需要三到四个月的时间,但是编程并不是一夜之间就能学到的东西。

如果您无法按此顺序进行操作,那么您将无法编程,因此您不妨现在就放弃。


代码,由Charles Petzold编写。
C&R K&R语言
Abelson和Sussman编写的计算机程序的结构和解释。

我的规则是:通过这三个工作必要时使用纯力书籍。提出任何问题,但仅在自己设法解决后。如果您能通过这三本书来取得成功,那么恭喜您,您是一名程序员,现在我可以在15分钟之内将PERL扔给您,或者在Java Big Bookcase的书店里扔给您任何垃圾,您会做的很好。如果您无法通过这三本书来学习,那就放弃,回家吧,您永远也不会得到它。

我认为您不需要学习C和Scheme诚实。它们只是未来学习的基础。这两本非常简单的书从表面上看都很简单(C和Scheme是超简单的语言),但它们在编程的真正艺术上非常深入,并且不会浪费时间混淆语法,因此它们非常适合开始重新连接努力成为一名优秀的程序员。

注定要走捷径,直接去学习您想立即学习的确切知识(例如从C#和ASP.NET开始)。

评论


由于有些人不得不对那些因其C#能力而受到强烈推荐的“程序员”大打出招,但是却无法做一些简单的事情,例如实现一个很好记录的基类,在c和c ++程序中发现内存泄漏,我同意,或者只是自己解决问题或以中等速度学习新想法。这不是精英主义;这是常识。如果您不能掌握指针和递归,那么对于任何需要开发人员自己解决问题的开发人员来说,它都将是无用的。

–乔纳森·汉森(Jonathan Henson)
2011年7月28日在5:01



不,这不是成为一名优秀程序员的唯一途径。但是,如果三本书是“令人生畏的清单”,那么您可能会低估程序员所做的事情。

–乔尔·斯波斯基♦
11年7月28日在15:05

乔尔,有时您会失去联系。

– Robert S.
2011年7月28日在15:09

抱歉,报纸要花几天时间才能到达我的私人俱乐部,因为在看到它们之前,需要先由代客熨烫。

–乔尔·斯波斯基♦
2011年7月28日在15:13

不幸的是,这个答案未能加快速度。

–rlb.usa
11年7月28日在16:35

#2 楼

迅速让非开发人员快速发展的最好方法就是激励他们!

要取得成功,候选人必须至少对编程充满好奇,即使不是很热衷(无论平台如何) )。

我在理想候选人的情况下同意乔尔的观点,但我要小心,不要将太多的理论塞进虚弱的头脑中-只会推迟他们。如果他们受到启发,好奇和充满激情,他们将在看完魔术后想要理解理论。

我完全同意@karudzo-自我成就和建设性的评论会很有启发性。

评论


“如果你想建造一艘船,不要鼓动人们去收集木头,不要给他们分配任务和工作,而要教他们渴望无尽的海洋。” -圣艾修伯里·安托万

–朱利安·查斯当(Julien Chastang)
2011年7月28日在17:00

朱利安-太好了!究竟!

– jkoreska
2011年7月28日在17:04

我完全同意您的观点!我曾经辅导过许多没有经验的开发人员,有时甚至不知道他们最终会成为程序员。我只是通过引导他们前进的方式做到了这一点……他们的好奇心和激情将他们带到了最终结果。如果他们没有这两个属性中的任何一个,我相信他们不可能实现他们所取得的成就。我与太多缺少这些属性之一或两者兼而有之的程序员一起工作,只是因为有很多可用的工作……太糟糕了!

–each
13年3月20日在14:33

我同意。我觉得学习编程的问题是从字面上回答的。人们学习事物是有原因的。人们学会编程来解决问题,帮助人们并将想法变成现实。我遇到了在此过程中忘记了这一点的人,当他们重新发现它时,他们重新发现了对编程的热爱。当您真正喜欢某些东西时,您将学习,您将找到学习的方法,并且会变得更好。

–路易斯·佩雷斯(Luis Perez)
2013年11月3日14:14



#3 楼


我正在寻找最快的方法来加速他的步伐。


最快的方法可能是给他时间,尽管那很容易是一两年。

当然,教给他一种简单的语言似乎很容易(如果他要使用.NET,则可以使用C#),但是学习一种语言并不是在学习编程。

如果他从未编程过,那么,除了至少一种语言的语法和库之外,他还必须学习数组,链接列表,所学语言的编译模型,模块化,资源管理,范式,模式,Big-O表示法-整个辣酱玉米饼馅。这是很多事情,我们大多数人花了几年时间才学习这些基础知识,甚至还花了很多时间才成为真正的专业程序员。

那里的材料涵盖了很多内容(例如Stroustrup的最新著作,该书教授使用C ++进行编程,而不是使用C ++语言),但是其中的内容并不多,也没有涵盖的内容所有的。因此,这个家伙必须乐于学习,并阅读许多书籍和文章。

关于如何执行此操作:我手头没有完整的课程表可粘贴到此处。 (抱歉)
但是,我建议从教他一种编程语言开始,这样他就有机会快速取得初步进展并取得令人鼓舞的结果。有很多书籍可以教这些语言,挑选一本您熟悉的语言。如果这本书有很多练习,并且他愿意这样做,则准备花很多时间帮助他。如果这本书没有任何内容,请开始思考自己的书籍,但要准备好使它们适应他的理解水平/速度。
如果该第一语言不是C或C ++,那么IMO他应该接下来学习其中的一种。 K&R对此非常有帮助,Stroustrup的TCPL也是如此,或者,如果他能(在您的帮助下)应对陡峭的学习曲线,则是Koenig / Moo。我建议这样做的原因是,一旦您知道C或(最好是IMO)C ++,就可以相对容易地选择任何C派生类,如C#,Java,ObjC ...其余的,给他提供源源不断的好书和文章。我认为如果我们建议的建议太多,不是很有帮助,因为1)它必须适合您公司的文化,并且2)您必须让告诉他学习这些东西感到很自在。

评论


“支持现有.Net应用程序的入门级开发人员”……“他将必须学习数组,链接列表,所学语言的编译模型,模块化,资源管理,范例,模式,位O表示法”都是“拥有的东西”,但是我敢打赌,编写代码的开发人员中有很大一部分没有这些技能。

–柯克·布罗德赫斯特(Kirk Broadhurst)
2011年11月7日,下午4:27

@KirkBroadhurst:如果是这样,那么您的公司出了点问题。

–sbi
2011年11月7日在21:36

@sbi我想您会发现很多公司都出了问题。 OP的公司建议将非程序员(但他是个“聪明人”!)转移到提供应用程序支持的角色中。我不知道您在哪里工作...但是根据我的经验,这就是“现实世界”。真正优秀的,有能力的程序员是个例外-像在大多数行业中一样,大多数人都做得足够好。

–柯克·布罗德赫斯特(Kirk Broadhurst)
2011年11月7日在21:41

@KirkBroadhurst:我的工作是我的决定。我因缺乏能力而逃离了公司,如果没有一个开发人员至少不了解这些事情中的大多数,我就会逃离。

–sbi
2011年11月8日下午6:05

#4 楼

我不会在.NET上启动它们。我犯了太多次这个错误。不要因为时间而让雇主向您施加压力,要求他们创建一个无能的程序员。 .NET可能是一个快速的开发平台,但它并不强迫开发人员学习编程。仅在C#中,您会发现开发人员陷入了引用类型,对象生存期的困扰,它们将留下大量的内存泄漏(是的,在.NET中是可能的),并且设计不良。最好在C或C ++上启动它们(可能是c ++,因为它们将需要使用OOP概念),然后说类似这样的东西:“现在,如果为您管理内存,那不是很好,每件事都是对象导向,而您不必处理所有这些讨厌的指针?”这是C#和JAVA。如果他们精通c ++,他们将在一个星期或两周内征服这两个领域。我推荐乔尔的团。那是我的CS 101老师给我的清单,因此,当我进行数值分析时,我的表现要好得多。这也使您可以更早地找到候选人是否要切芥末的方法。同样,一旦您掌握了c和c ++,在阅读了本书的介绍之后,您将自动了解c#和java。您不仅会理解它们,而且比不了解c和c ++的人更了解它们。

评论


““现在,如果为您管理内存,每件事都是面向对象的,并且您不必处理所有这些讨厌的指针,那就不好了吗?”您的意思是这里是STL。 。为什么从一开始就不教我使用C ++中的STL?

–雷诺斯
2011年7月28日在7:40

好吧,STL很不错。就Windows编程而言,我是指Windows API。 Windows API在设计时并未考虑OOP。我发现用c ++中的API编写一些应用程序要花些功夫,这是一个很好的练习。然后,我让他/她编写一个Window类并封装事件循环,以此类推...您知道,使其面向对象。然后,在他们终于可以使用它之后,我向他们展示Windows窗体。这确实迫使他们处理一些基本概念-即Windows应用程序的工作原理-如果有人跳入.NET,就永远无法获得。

–乔纳森·汉森(Jonathan Henson)
2011年7月28日在8:04

为什么有人会用棍子触摸Windows API。我的意思是说80年代的hWND对吗?显然,您改用了一些不错的抽象(哪个抽象是完全不同的争论)。当然知道它是如何工作的很好,但是您不需要C#.NET进行抽象

–雷诺斯
2011年7月28日在8:08

Windows API很棒。无论如何,我只将它用作教学工具。例如,人们通常不了解如何在Windows程序中神奇地触发事件。对于他们来说,必须熟悉事件循环是有帮助的。另外,程序员至少需要熟悉hWND,尤其是当他们要处理任何与图形混为一谈的api时,就像您在Unix上不知道如何使用XID的情况下很难做一样。无论如何,它迫使他们学习Windows程序的工作方式。而且,一旦完成,他们就会知道Windows.Forms是如何工作的。

–乔纳森·汉森(Jonathan Henson)
2011年7月28日在8:13

通常,它不一定是向C#b.t.w的过渡,而只是向.NET的过渡。我认为@Joel上有一篇很好的文章,涉及泄漏抽象定律,这对于为什么在使用框架之前程序员经常在幕后看通常是一件好事。

–乔纳森·汉森(Jonathan Henson)
2011年7月28日在8:15

#5 楼

给他们一些简单但有用的解决方法。让他们摸索一下,并帮助他们完善它。没有什么比能帮助激发他们的小成就(尽管有些人对编程不感兴趣)

#6 楼

配对编程。在您编写自己的代码-任何代码时,让他们给您留下阴影。在几个小时之内,然后让他们为您输入代码,同时您告诉他们该怎么做,即使有必要,也可以逐个击键。回答他们的几个问题,但不要那么多,以免您减慢很多速度–只让他们把它们全部浸泡进去。他们还会发现您的错别字和比您想象的更多的错误。在几天之内,他们将能够开始“导航”,告诉您要输入类似于他们以前见过的任务的代码。

我在一个月内就以这种方式学到了很多关于开发人员的知识,并且以这种方式教会了其他几位新开发人员,其中一位能够代替我担任开发人员几个月后启动。当我们第一次开始一起工作时,他从来没有写过一行代码。

评论


我认为结对编程是教新手程序员的一种非常不错的方法,但是我认为一直以来结对编程都会有问题。我认为新手程序员需要一些时间单独工作,以学习如何解决问题并建立对其能力的信心。

–大象
11年7月7日在20:37

是的,让他们进行结对编程,并给出简单的任务-真正的任务,在他们要使用的软件上,以他们要使用的语言,具有真正的成就。审查并指导他们的所有工作,他们将会进步。

–托马斯W
13年5月15日0:52



#7 楼

给他一个好的想法(视觉工作室,快递还是不错的)。教给他60%的常用语法(省掉yield,linq,enums,attribute等,教类,虚拟和重写)。花时间在调试器上(尤其是调用栈)。然后,只要他需要帮助,就告诉他使用Google“ msdn functionanme”,这应该使他快速入门。

还教他永远不要抓住并吞下异常。告诉他必须抛出或记录它!

奖金:教他如何序列化json数据,以便他可以轻松地读取/写入文件。 db是个过大的东西,学习太多了,您不想让他编写自定义文件格式,尽管我可能允许每种线型文件传递一个条目来保存/加载字符串数组。

#8 楼

我知道很多人都在谈论语言和这些语言的书籍。我不同。

编程是关于学习分析思维。首先,这个人应该能够在一张纸上思考并提出算法来解决问题。您必须指导他们,以便他们获得正确的思维技巧。

接下来是语言的基础知识。让他们开始使用所选的语言。给程序编写一个问题。

第一次切完之后,让他们进行CS基础知识和设计模式。

现在让他们对这些进行重新编程。新概念。

#9 楼

从基础开始:变量,循环,while循环,循环,数组,基础知识,在屏幕上打印,做一些简单的数学。进入方法和基本的OOP,诸如下面的如何创建类之类的事情,向他展示为什么而不只是如何。

语言无关紧要,但是选择您知道的东西,这些东西是高度抽象的(java,python等...),因此他无需担心诸如内存管理,指针之类的事情。等等...教递归,hanio塔或递归搜索目录的基础知识。

学习编程是有关Ruby编程的很好的免费资源。使其有趣,轻松且有趣。

#10 楼

给他一些挑战,让他学习如何自己找到解决问题的资源。

如果您可以教他如何找到答案并自给自足,他自然会学习如何编程。批判性思维和机智是程序员的两个关键技能。

归根结底,激情/兴趣绝对将成为他们快速学习技能的成功的关键因素。如果他没有或没有发现“错误”,那可能是一个缓慢和/或痛苦的过程。如果他确实发现了该错误,那么他将延迟编码,不工作或花费大量时间。