我被要求雇用我们的IT部门的一名人员,他没有编程经验,但是是一个聪明而又干练的人,可以说是一个支持现有.Net应用程序的入门级开发人员来帮助他进行编程。我绝对相信这个人可以做到,但是我正在寻找最快的方法来使他快速。我有很多想法,但想看看别人的想法。我知道这也将高度依赖于他的学习方式,但我通常是在谈论。
那么问题来了:您认为让非开发人员快速加快开发速度的最佳方法是什么(在本例中为.Net)?
我被要求雇用我们的IT部门的一名人员,他没有编程经验,但是是一个聪明而又干练的人,可以说是一个支持现有.Net应用程序的入门级开发人员来帮助他进行编程。我绝对相信这个人可以做到,但是我正在寻找最快的方法来使他快速。我有很多想法,但想看看别人的想法。我知道这也将高度依赖于他的学习方式,但我通常是在谈论。
那么问题来了:您认为让非开发人员快速加快开发速度的最佳方法是什么(在本例中为.Net)?
Answers:
对于那些想学习编程的人,我通常会规定相同的顺序。这是非常理论上的,但奠定了良好的基础。全日制学习需要三到四个月的时间,但是编程并不是一夜之间就能学到的东西。
如果您无法按此顺序进行操作,那么您将无法编程,因此您最好现在就放弃。
我的规则是:如果有必要,用极大的力量逐步浏览这三本书。提出任何问题,但只有在自己设法解决问题之后。如果您能通过这三本书来取得成功,那么恭喜您,您是一名程序员,现在我可以在15分钟之内给您PERL,或者在Java大书架的书店里扔给您任何垃圾,您将可以很好地进行管理。如果您不能通过那三本书来完成它,就放弃,回家吧,您永远都不会得到它。
老实说,我认为您不需要学习C和Scheme。它们只是未来学习的基础。这两本书相当简单,表面上都很简单(C和Scheme是超简单的语言),但是它们对编程的真正艺术非常深入,并且不会浪费时间使语法混乱,因此,它们非常适合重新连接你的大脑成为一个好的程序员。
尝试捷径直接进入想要立即学习的确切知识的尝试(例如从C#和ASP.NET开始)注定了失败。
up to speed quickly
部分失败。
让非开发人员快速入门的最佳方法就是激励他们!
为了获得成功,候选人必须至少对编程感到好奇,即使不是很热情(无论平台如何)。
尽管我在理想候选人的情况下同意乔尔的观点,但我还是要注意不要将太多的理论塞进虚弱的头脑中-只会使他们失望。如果他们受到启发,好奇并充满激情,他们将在看完魔术之后想了解理论。
我完全同意@karudzo-自我成就感和建设性的评论可能会非常鼓舞人心。
我正在寻找最快的方法来使他加速。
最快的方法可能是给他花些时间,尽管那很容易是一两年。
当然,教给他一种简单的语言似乎很容易(如果他要编写.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上启动它们。我犯了太多次这个错误。不要因为时间而让雇主向您施加压力,要求他们创建一个无能的程序员。.NET可能是一个快速的开发平台,但它并不强迫开发人员学习编程。仅在C#中,您会发现开发人员陷入了引用类型,对象生存期的困扰,他们将留下大量的内存泄漏(是的,在.NET中是可能的),并且设计不佳。最好在C或C ++上启动它们(可能是c ++,因为它们将需要使用OOP概念),然后说类似这样的东西:“现在,如果为您管理内存,那不是很好,每件事都是对象导向,而您不必处理所有这些讨厌的指针?” 这是C#和JAVA。如果他们精通c ++,他们将在一个星期或两周内征服这两个领域。我推荐乔尔的团。那是我的CS 101老师给我的清单,因此,当我进行数值分析时,我的表现要好得多。这也将使您能够更早地发现候选人是否会切芥菜。同样,一旦您掌握了c和c ++,在阅读了本书的介绍之后,您将自动了解c#和java。您不仅会理解它们,而且比不了解c和c ++的人更了解它们。
hWND
80年代以来的权利?显然,您改用了一些不错的抽象(哪个抽象是完全不同的争论)。当然知道它是如何工作的很好,但是您不需要C#.NET进行抽象
配对编程。在您编写自己的代码-任何代码时,让他们给您留下阴影。在几个小时之内,然后让他们为您输入代码,同时告诉他们该怎么做,即使有必要,也可以逐个击键。回答他们的几个问题,但不要那么多,以免使您的速度减慢很多-只需让他们将其全部浸泡即可。他们还会发现您的错别字和比您想象的更多的错误。在几天之内,他们将能够开始“导航”,告诉您为类似于以前所见任务的任务输入什么代码。
我在一个月内就以这种方式学到了很多关于开发人员的知识,并且以这种方式教会了其他几位新开发人员,其中一位能够在几个月后成为我在一家初创公司的首席开发人员。当我们第一次开始一起工作时,他从来没有写过一行代码。
给他一个好的想法(视觉工作室,快递还是不错的)。教给他60%的常用语法(省掉yield,linq,enums,attribute等),教授类,虚拟和重写。花时间在调试器上(尤其是调用栈)。然后,只要他需要帮助,就告诉他去Google“ msdn functionanme”,这应该可以使他迅速上手。
还要教他永远不要捕捉并吞下异常。告诉他他必须重新抛出或记录它!
奖励:教他如何序列化json数据,以便他可以轻松地读取/写入文件。db是一个矫kill过正的东西,要学习的东西太多了,尽管我可能让每种线型文件通过一个条目来保存/加载字符串数组,但您不想让他编写自定义文件格式。
给他一些挑战,让他学习如何找到资源来自己解决问题。
如果您可以教他如何找到答案并自给自足,那么他自然会学习如何编程。批判性思维和机智是程序员的两个关键技能。
归根结底,激情/兴趣绝对将成为他们快速学习成功的关键因素。如果他没有或没有发现“错误”,那可能是一个缓慢和/或痛苦的过程。如果他确实发现了该错误,那么他将花费大量的时间从事非工作时间的后期编码工作。