不断寻找代码示例是否表明开发人员不好?[关闭]


161

我是CS的学生,在C和C ++方面拥有多年的经验,在过去的几年中,我一直在与Java / Objective C一起进行应用程序开发,现在我转向了Web开发,主要关注于ruby Rails和我意识到(与应用程序开发一样,)我过多地引用了其他代码。我一直在为许多事情提供Google功能,我想我应该可以从头开始做,这确实使我的信心有些破裂。

基本的基础知识不是问题,我不愿意以此为例,但是我可以在sprint中同时在java / python中运行javabat-显然不是一项成就,但是我的意思是说,我有一个扎实的基础知识我认为?

我知道我通常需要使用什么,但是经常引用语法。很乐意为此提供一些建议和意见,因为即使我正在完成学位,这也一直使我在寻找该领域的工作方面受到很大的阻碍。我提出这个问题的主要原因并不是关于就业的问题,而是我不想成为唯一一个不参加黑客马拉松的人,他不会敲开马不停蹄的代码并坐在那里打开20个Google / github标签,而且我不参加任何活动由于稍微缺乏信心...

通过不断地为中等到复杂的任务编写代码示例,一个人是否会成为一个糟糕的开发人员?


14
这取决于我正在处理的内容,几乎不需要进行任何查找就可以处理大量的工作。更陌生的是,我一直在寻找例子。
Jaydee 2012年

11
取决于您是否真正自己编写一些代码。

18
我的妻子在电视上观看那些烹饪比赛和杯形蛋糕锦标赛,他们用很少的时间用随机的原料烹饪出美味的饭菜。很多时候,食物太糟糕或煮得不够好,当然也不是最好的食物。他们很适合表演,但我宁愿我的厨师花点时间做对的事情。黑客马拉松也可以这样说。扎克伯格和他的亲朋好友都是骇客马拉松小伙,他们很快编写了一个糟糕的网站,一旦他们开始获得更多用户,就必须重写。大多数人都希望您第一次就做对。
maple_shaft

88
我的老板总是说:“程序员技能的最佳衡量标准是他进行良好的Google搜索的能力”。我认识的所有程序员都在互联网上寻找示例,但只有不好的程序员会盲目地粘贴。如果有人已经完成了您想做的事情,为什么还要重新发明轮子呢?
SSumner 2012年

9
研究很重要。只是不要从事我所说的BSDD(博客垃圾邮件驱动的开发)
Thomas Dignan 2012年

Answers:


238

盲目复制粘贴:不好。

查找文档,阅读代码示例以更好地理解:很好。

我宁愿与一直在查找事物并确保一切正常的人一起工作,而不是与一个过分自信的人合作,他认为自己知道一切,但不知道。但是最糟糕的是,一个人不愿去理解事物的工作原理,只是不加批判地从Web复制代码(然后,当错误报告开始下雨时,它就无法正确修复任何问题)。


21
@NewlyInsecure没关系...一些像我这样的软件开发人员认为参加黑客马拉松的人很可笑。他们中的大多数都是优秀的程序员,但可怕的软件开发人员却喝了太多的红牛。
maple_shaft

23
一个开发商有心思,知道有人已经事先做了一些,并寻找示例和适应他们。一个开发商不会浪费时间敲打头盖骨在墙上。
大卫

19
@NewlyInsecure比较杀死。认真地讲,您与他人的比较越多,您就会变得更加沮丧,无动力和恐惧。根据真理而不是其他所有人的信念来形成自己的信念。如果黑客马拉松的人们可以更快地发布更多代码,谁在乎?即使这是技能的指标,无论您多么熟练,总会有比您更聪明的人。
菲尔(Phil)

5
就个人而言,如果我发现一个已经或多或少地完成了我想做的代码示例,我会对其进行研究,以便理解。如果这是一段更大的代码,我会做笔记,然后针对特定情况伪编码出解决方案,然后尝试用实际代码实现伪代码。我认为这里的关键以及tdhammers和David提到的关键是我不是在盲目地复制代码。我正在查看它以了解它在做什么,然后将其思想整合到我的特定解决方案中。
shufler 2012年

3
@NewlyInsecure:还有两点不利于您:首先是API变得比过去更大,更复杂,这使它们难以记忆。第二个是年龄,您现在没有年龄,但是会在知道之前知道。随着年龄的增长,您会发现自己无法记住所有事情,并且将开始为真正需要了解的知识保存脑细胞。培养进行研究和找到您已忘记的细节所需的技能很重要。
Blrfl 2012年

110

如果您以可维护的方式编写解决方案的代码,并且实际上了解复制/粘贴/修改的内容,那么就没有问题。

每当我问一个高级开发人员有关他为什么这样做的问题时,我都会死在里面,答案是“我不知道,我复制粘贴的代码,并且在那个给定的时间工作了”。


8
有时,我会不以为然,以为自己可能不会像开发人员那样出色。然后,我读了这样的一句话,对自己感觉好多了。
水罐2012年

18
@TheJug,请记住,您既是一个更好的开发者,也是一个比您想象的要差的开发者。
2012年

71

就像有/没有API文档进行编程的技能一样,寻找代码示例不是不好的程序员的标志,而是缺乏流利程度的程序员的标志...

...在这里,我说的是流利程度。关于不仅要有能力而且要流利。

你知道要流利吗?当有人看着你的时候,看起来就像在键入代码一样...

  • ...好像正确的代码只是从您的手指流到屏幕上一样。就像您没有查看API文档,教程和手册一样。实际上,您确实检查了所有内容,但这是不可见的,因为它们全在您的脑海中。您已经在大脑中获得了所需的所有知识-已充电,已加载并可以使用。

...这是流利的知识。这是您花一分钟时间做一个新手要花一个小时的时间。确实值得付出努力。闻起来像胜利。

...而且对我而言,实践是获得流利度的唯一可靠方法。


14
关于流利度的出色点。我精通COBOL。我在IT领域休息了20年,现在又回来学习Java。我本能地知道如何在COBOL中做某事...但是学习Java流畅度的一部分过程是查找代码示例,分析它们为何起作用,并使它们适应我的特殊需求。当您学习一种新的VERBAL语言时,首先经常会参考意大利语-英语词典,但语法和时态却不正确,最终有一天,您说的像母语。时间和练习是关键。不用担心... :)
dwwilson66'6

10
@ dwwilson66问题是,尽管每天我需要记住四种“语言”-服务器端编程语言,客户端脚本语言,客户端标记语法和客户端样式语法。我只是想不通这一切-就像试图同时用意大利语,中文,英语和克林贡语进行对话。
Tacroy 2012年

@Tacroy-没错!没有流利度,您需要资源来提供帮助。如果您需要查找完整的短语而不是偶尔仅查找一个单词,这并不会使您比“克林贡语”人“少”,只是不如其他单词那么流利。
dwwilson66 2012年

4
最后一句应该突出显示,而不是隐藏在下标中。除了沉浸之外,没有其他方法变得流利。
jmlane 2012年

@ dwwilson66注意,在Java和COBOL 中应该做的事情大不相同。对象与复印书不同。

54

有一种称为科尔布循环的学习理论(在描述它的人之后)。此周期中的条目是:

Concrete experience -> Reflective observation
    ^                        |
    |                        v
Active experimentation <- Abstract conceptualisation

不同的人喜欢从周期的不同地方开始。因此,完全有可能通过寻找样本(反射性观察阶段)进行学习,然后通过抽象将这些样本算作大图片。

其他人将以不同的方式学习:有些人喜欢从尝试(即尝试)入手,然后思考是对还是错。关键是这些只是解决学习问题的不同方法:没有一个是错误的。


2
+1有趣。凭直觉,我希望一个人至少要经历其中一些阶段才能学习,对吗?也就是说,观察可能还不足以进行真正的学习-您需要考虑自己所看到的并尝试一下。
Caleb 2012年

我真的很喜欢 我从大多数语言的“反射式观察”开始,但是在PowerShell中,我通常从“主动实验”开始
Caleb Jares 2012年

@caleb正确。在这个周期中,您会逐步过渡,直到完成所有四个步骤之后,才可能完全不内部化某些东西。这是变化最大的起点。

39

完全公开-我是一位老人,曾在工作时代接受过不同的预互联网培训。我已经看到了年轻的开发人员的技能稳步下降的主要原因是他们没有保留信息或不了解他们从Internet上获取的解决方案。我观察到,一个人在1-2年的经验(20年前)后的能力水平现在是某人在5-7年的经验后的能力水平。(是的,这是个人观察,但我已经做了很多招聘工作,没有关于此事的统计数据,是的,我有时又老又胡思乱想,带着一粒盐说这句话。离开我的家。 )

在时间上查找所有内容效率很低。这也是没有太多知识的人的症状。知识渊博的人比不知道如何解决问题而不抬头的人可以更快地编写代码。因此,值得去学习处理更多的事情而不必不断地查找事物。

现在,我并不是说您永远不应该查找事物,而是要学会保留知识,只需要查找很少使用的事物或遇到真正的新问题,新语言或新范例时。我并不是说您不应该阅读以跟上新的解决方案,工具和语言。

我真正关心的是那些经常查看事物的开发人员,因为他们中的太多人(不一定是您)从不开发分析技能来理解他们所遇到的问题和所需的解决方案。阅读此人在他或她显然不理解的错误消息中的位置有多少个问题,但对于专业水平的人员来说,这应该很清楚。或有人说“这不起作用,为什么?”的人。没有参考错误消息或错误消息的方式,并且代码在语法上是正确的。或获得应有代码的人,

因此,如果您查找的内容是该语言核心功能的一部分(如果要访问数据库,则应该包括SQL),这已经用了六个月以上,我怀疑您也在查找许多。如果您正在查找的是高级功能,尤其是那些您可能很少使用的功能,那么您就可以了。

但是如何学习保留更多信息?首先了解为什么代码会中断。即使有人为您提供了有效的解决方案,如果您看不到为什么有效,而您的无效了,请询问。如果您不理解该错误消息,请询问错误消息的含义,然后尝试自己解决。

切勿剪切并粘贴您不了解的解决方案。实际上,根本不要剪切和粘贴。如果要保留信息,则需要输入信息。实际上,亲自亲自编写代码可以帮助您学习。那是一种众所周知的学习技术。

练习概括您对代码的理解。我看到人们随着时间的推移一遍又一遍地问类似的问题,因为他们不知道一个月前解决ABC的解决方案与新问题DEF的解决方案相同。

因此,当您研究了某些内容后,请花点时间考虑一下哪种类型的问题对解决问题会有所帮助,并为此写下自己的笔记。然后,当您有问题要解决时,请先检查您自己的笔记以了解您已经注意到了一种可能的技术。如果您评估解决问题的多种方法,请记下问题的类型,查看的可能解决方案以及每种解决方案的利弊。同样,记笔记可以帮助巩固大脑中的知识,您已经根据自己的利弊制定了自己的思维过程,而不必再次这样做(或者至少不必那么深入)仍在寻找更多可能的技术)来解决下一个类似的问题。

在决定下一步要学习什么时,请先深入了解其中的一项主要技术,然后再开始学习头30天价值的另一项技术(这是假设您有足够的知识来实际完成工作,如果您需要使用6种技术-在深入研究之前先获得所有6种基础知识)。然后来回学习,在基本级别上学习新东西,更深入地学习某些内容,然后在基本级别上学习更多新技术。如果随着时间的推移进行此操作,您会发现对新技术的需求的基本水平要高得多,因为您了解有关此问题的更高级的问题。

学习保留知识的另一种方法是将其教给他人。在这样的地方回答问题,向您的团队介绍培训主题,在您的本地用户群中进行演示,编写博客条目,并帮助您维护公司的信息维基,以帮助其他开发人员。


11
这里有一些非常好的要点,但是我认为它会因为“过去的美好时光”而受苦。数千年来,人们一直在谴责年轻一代的堕落。我还没有看到有力的证据来支持它。

4
+1 @JonofAllTrades ..man,我希望我可以回去二十年,赚一百万美元,因为我知道..FoxPro。只要。但是不,如今,您需要胜任小型星系技术的工作,才能竞争常规工作。可以同时设置和配置Apache和IIS吗?您是否熟悉一种或两种SQL方言,能够编写SPROC并且至少具有轻巧的管理能力?您是否有能力使用几种服务器端语言和至少一种功能脚本语言来处理数据?..如果您是为网络编程的,那么您的内容可以在主要的浏览器移动设备上运行吗?
elrobis 2014年

这种说法仅对20年前已经存在的技术有意义。是的,您很幸运能找到一份工作,而该工作基本上只具有SQL知识(您的“码”),而按今天的标准,这是不够的。
prusswan

@prusswan,我是专家,而且在我的竞技场上,还有更多的工作无法解决。但这与我在答案中所说的有什么关系呢?我正在谈论的事情对于所有技术都是可能的。问题在于人们没有学习或了解他们在做什么,因为他们无法保留信息,而不是我们中的某些人使用了较旧的技术。保留新技术知识和保留旧技术一样容易。所保留的知识将帮助您学习下一门知识,并且可以更快地发展。
HLGEM

24

寻找代码示例并不代表开发人员不好。人们很少需要那么多的东西来记住它们所需要的所有接口,因此很自然地进行查找,并且代码示例通常是最易于使用的参考。

您不应该做的是复制粘贴示例,因为它们在此处工作,因此它们也必须在这里工作,而不了解它们是如何工作的。通常,这会导致大量无用的位被顺带复制,结果难以维护,因为如果您在编写时不知道它是如何工作的,那么六个月后您也将不知道,也将无法修理它。

但是,只要您了解要从示例中复制的代码,这是使工作更快完成的有效方法,通常这是一件好事。


2
我遍历了所有我要复制的内容,并且我理解了我阅读的所有内容,只是其中的某些语法和功能是如此冗长,以至于我认为我不可能从头开始。甚至应该简单易懂的事物,例如json或数据库查询等(可能是不好的例子)。感谢您的回复,我非常感谢。
新近不安全的2012年

2
而且,在您自己的项目中复制和粘贴代码示例之前,您还应该三思。将它们分成一个类并重用它们可能更有意义。
stralsi 2012年

@SilviuStraliciuc:我认为这更多地是关于1或2行示例。包裹功能没有意义。但是我通常会重新输入而不是使用ctrl-c + ctrl-v,因此我会应用正确的格式并即时替换标识符等。
2012年

1
有时1或2行的示例确实可以包含在函数中,特别是如果以后您可能会改变主意,想确切地希望1或2行要做的事情时(现在您必须找到200行分散在整个代码中的使用1行或2行模式的位置)。使用适当命名的功能,即使您遇到错误,仍然必须在200个位置中进行修复,至少可以更容易地识别这些位置。
David K

14

这些答案很好。但是,与复制/粘贴或缺少“技能”相比,您所面临的问题要深得多。

比较是致命的。与他人进行自我比较的次数越多,让他们的才能影响您看待自己的方式,您就越会内riv和死亡。您不会参加黑客马拉松,是因为担心人们会看到您多么无才。您认为自己没有才华的唯一原因是,您将自己与可以更快地从头开始编写更多代码的黑客进行比较。

即使“每分钟代码行数”是衡量技能的不错指标,您也需要接受这样一个事实,就是,那里总是会有比您更好的开发人员。而且它的确定来告诉别人,你缺乏的技能。

您不需要像其他任何人一样好或更好。您需要对以下事实感到满意:您总是会以某种方式缺乏,并且您正在不断学习。如果您不满意成为一名劣等的开发人员,您将永远不会幸福。

还有一件事:您害怕被您认为是“上乘”的人拒绝,这正是阻止您与更好的开发人员并肩学习的原因。因此,您的恐惧会阻止您成长,从而保持恐惧。阻止您成长。看到周期了吗?您必须在某个地方打破循环。


8
好的答案,但不应理解为接受平庸是可以的。保持对自己工作的关注,不要担心其他人会比你更好,但会努力提高自己。
Caleb 2012年

12

我认为这很大程度上取决于您的思维方式。我的内存发臭,所以我宁愿抓取尽可能接近我想要的代码,然后对其进行重新处理以完成新工作。它是一个示例,提醒了我要做的所有事情。例如,我使用简单的SQL已有20年了,但是我永远记不得SELECT或UPDATE语句的布局。(我想一个需要括号,但是我不记得是哪个。)另一方面,我还记得一些东西;我可以闭着眼睛将Java Iterator实现放在一起。

我复制的大多数代码是我自己的,但是当我学习新东西时,我当然会复制其他代码。

我对黑客马拉松一无所知。他们可能会吸引一些具有摄影记忆的程序员。我会尝试一下。如果看起来像个白痴,那您就不应该在编程。

我敦促您彻底了解您复制和修改的所有代码,但是,在我阅读其他答案之前,我从来没有想到有人会在不理解的情况下进行复制。(我似乎一直在这个网站上学习新的恶习...)


Psst,除非您要在SELECT中执行子查询或在WHERE中执行复杂的布尔逻辑,否则都不需要括号。;)
Izkata 2012年

2
@Izkata:不?让我看一些旧代码。哦,这是需要括号的INSERT语句。
RalphChapin 2012年

8

...我意识到...我过多地引用了其他代码。我一直在搜索很多我想可以从头开始做的事情的功能,这确实使我的信心大打折扣。

然后停下来。朝另一方向走一会儿。即使您知道可以在更短的时间内找到所需的东西,也可以自己实施所有东西。

发生的事情是,您解决问题的肌肉(拉丁名gluteus mojo)因不使用而萎缩了,现在您避免使用它,因为您知道它的脆弱性。您需要像在健身房锻炼肱二头肌一样,开始建立和调整肌肉。从高重复和低阻力开始-很多容易出现的问题。当您建立信心时,请继续处理更长的更难的问题。

您会逐渐感觉到自己的魔力归来,对Google的依赖将减少。不过,请继续锻炼该肌肉,并确保您不会退回到原来的方式。挑战自己解决问题的第一和唯一然后查找其他的解决方案。有时,您会发现其他人找到了做同一件事的更好方法,而有时您会认为自己的解决方案更好。

通过不断地为中等到复杂的任务编写代码示例,一个人是否会成为一个糟糕的开发人员?

一个无法找到实例而无法完成任何工作的人是一个糟糕的开发人员。关键是:直到尝试,您才知道自己是否能够。


7

您还很年轻,并且使用过许多编程语言。我猜想您使用新语言的速度可能会比旧语言快。您仍然没有在足够大的应用程序上花足够的时间用一种语言来开发流利性。

您是否每次都在寻找广泛的解决方案,例如:将Web网格连接到数据库表的整个过程还是一小部分,例如格式化连接字符串(自从我写了大约四年以来,我每次都必须查一下。 )?

您将一直在寻找对不同代码或函数行的语法的引用。您编写的内容越多,面临的挑战就越大,遇到的环境和语言变化也就越多。如果每次执行某件事都需要整个教程,那么您就遇到了问题。


我同意-总是有一些事情,尽管通常足够的活动(从文件读取,连接到数据库,发出HTTP请求等),语法和方法因语言而异,我通常必须检查一下。然后,您将这些基本构建块拼凑在一起,以创建一些新的有用的东西,这是个聪明的地方
Kris C

5

我曾经有位教授曾经说过,他讨厌因为试图保留前一天晚上塞满的大量信息而进行测试,因为无论如何以后您都会忘记很多信息。最好了解您的资源,并且可以正确使用它们来查找您不知道的信息。我喜欢对我所做的所有事情都应用类似的原则,包括工作。

我认为,只要正确使用它们,最重要的工具就是资源。因此,在编写代码时,我会尽可能地利用现有知识,然后通过咨询其他程序员或搜索Internet进行研究,以便更好地理解适当的解决方案。这些知识会随着时间的流逝而积累,一段时间后,您自然会更好地了解和理解这些技能。无论我是否真的需要信息,我一直在寻找东西,老实说我每天都学到一些新东西。


6
“我从不致力于记忆任何可以轻易在书中查找的东西。” -爱因斯坦(Albert Einstein),1922
。– gbjbaanb 2012年

3
@gbjbaanb Albert Einstein在1922年使用版本控制吗?哇,他真的很棒。
svick 2012年

4

如果您了解要解决的问题并了解要解决的问题,那么我认为查找正确的语法并不重要。

我大约两年前毕业,找到工作后就被狼吞虎咽。我必须学习,维护和升级以以前从未接触过的语言编写的大型应用程序。我会得到一个错误报告,遍历代码,找出我想如何解决它,然后不得不用谷歌搜索如何用该语言做我想做的事的例子。

如果您正在做好事情,并且对它的理解足够,不会产生不必要的搅动,那么您可能会没事的。


3

如在这些答案中多次提到的那样,单纯地进行非关键性的复制和粘贴是不好的。但是从头开始编写所有内容也是如此。如果它不是企业核心的关键组件,请首先寻找一个库或代码片段。查找代码段的例外是问题很简单,您对如何执行操作有非常清晰的了解,并且如果您不使用库,则无需做更多的事情。

我本人知道,如果我写的是一些普通的东西,那么我可能会遇到一些细微的错误,也许一个或两个没有很多测试就不是那么细微的错误。因此,我正在寻找一种类似的解决方案,对其进行修改和测试,以节省一些时间进行全部测试和开发。因为最终我要负责交付一种有效,可扩展,预算内或预算内且在规定期限内的产品。重用代码和库是朝着这个目标迈出的良好一步。


3

我认为阅读代码示例,而只是阅读他人开发的源代码,是提高技能的最佳方法。我真的认为这为您打开了大脑的门户,而这本来是不会打开的。

如果您考虑解决方案A,而其他人考虑解决方案B,则当每个人共享您的解决方案时,您都可以实现解决方案C,它甚至可能比A或B更好。


2
作为一个主要的单独开发人员,我没有任何同仁检查我的代码,与我一起解决问题并激励我。网络上的示例对我来说对于解决特定问题和学习新技能/最佳实践都是必不可少的。
cjmUK 2012年

3

我认为软件开发水平很多。如此,因为软件开发文档的熟练程度也很高。坦白说,如今,系统比我在1980年代中期开始对计算机编程时要复杂得多。

然后,您必须知道想要计算机执行的操作,并且编写了6英寸厚的文档,告诉您计算机如何执行某些更基本的操作。将您想要的内容放入计算机可以采用的形式,就是了解这些书的索引的内容以及一种编程语言(或两种。实际上,在学习了四种或五种语言之后,其他仅仅是方言)。

如今,该任务需要了解一种语言,一种系统,一种范例,一种编程模型以及至少一个API集,所有这些都是移动的目标。

因此,具有一定基础知识水平的人四处询问并不是一个好的程序员。鉴于当今的环境以及像Microsoft这样的无私公司实际上在自己的基础文档中采用了任何严格的方式,他是最好的程序员。他们的大多数东西都是自参考材料,还有一些非常糟糕的示例代码。(我遇到的两种情况是“ Windows Installer”和用于制作WMV电影文件的API。)

由于Microsoft,Google和较小的Apple都依靠“社区”来弥补这一非常实际的缺陷,因此问问不仅重要,而且至关重要。在今天的环境中,成为一个能够被问到并能给出可靠答案和反馈的人同样至关重要。这就是为什么像stackexchange.com这样的网站如此有用的原因。

因此,提出问题(明智地询问!)以获取示例,并尊重提供答案的人员,这样做不会被视为“不良开发商”的标志。

还有一件事:提供不良样品确实是不良开发商的标志。它使不良的开发人员更容易发现,但同时也增加了Google的搜索量。如果您对简单,直接,特定的代码示例缺乏信心,请不要输入'em'。

而且,请不要嘲笑那些询问的人。


3

在我看来,您面临的问题是,您了解的不是您要引用的内容,而是更多的设施和内存问题。如果它削弱了您的信心,那么是的,这是一个问题-但可以肯定地解决了!

对我来说,这些挑战在我生活的许多方面都面临。例如,要擅长演奏音乐,我需要从得到的乐谱中发展出独立性-如果鼻子仍然埋在小册子中,您将如何真正感受到音乐?有时,如果有时间,我会记住整首音乐-即使我的演出不需要这首歌。为什么?随着活页乐谱的消失,对我来说,专注于我需要正确处理的音乐中更具挑战性和总体性的方面变得容易得多,而进入纯粹的音乐创作这一令人难以置信的领域对我来说则容易得多。因此,我觉得这通常值得额外的麻烦。

我在编程方面的经验很相似。我认为关键是:

  1. 练习语言–键入,运行,说出帮助(如果有帮助);重复这样做。
  2. 建立您的设施–在不同情况下使用相同的功能或模式;将特征放在一起;制作程序。
  3. 在重复之间留出足够的时间,以确保事物确实进入了您的长期记忆。

实际上,这些原则似乎适用于学习任何语言!例如,请参阅如何记住新单词。该罗皮姆斯勒方法也适用这样的。

我发现,通过使用这些键,几乎可以完全记住我经常使用的语言和技术的所有原理,语法和通用库。即使这样,我仍然不断地在互联网上寻找例子和智慧!但是到那时,我正在寻找对我要解决的问题的验证,已经采取的各种方法,可以提供帮助的工具以及针对不常用的库的咨询。这与我在教程和手册中第一次学习语言并深入学习时所使用的搜索方式截然不同。

从您的故事来看,我认为您可能会遇到一些具体的绊脚石。

  1. 如果您在语法上苦苦挣扎,则可能没有足够的实践经验。如果您是直接复制并粘贴到代码中,而不是进行重复,则尤其如此-我可以说吗?– 肌肉记忆力将帮助您变得非常好。为了解决这个问题,只需制定练习和纪律,专注于重复和时间,这将改善您在所需区域的设施。意见建议:
    • 每天,每天用相同的语言编写一个简单的程序。
    • 键入示例,而不是复制和粘贴它们。
  2. 如果您在为中等大小的问题构建解决方案时遇到困难,则可能没有足够的构建经验。试试这些:
    • 用您想擅长的某种技术或语言开始一个中等规模的项目。或尝试使用您感兴趣的开源项目中的更大功能。每天尝试一下。(请记住,当您要进行这些较大的项目时:一砖一瓦地进行。不要试图立即构建整个项目!)
    • 在四种不同的情况下,连续四天使用同一新功能。
    • 挑战自己,在Web浏览器关闭的情况下编写代码!
    • 实际上记下您正在学习的内容。综合您正在学习的内容,并写下您的观察结果。(实际上将事情记下来,并强迫自己用自己的话说些什么对我有很大帮助。)
    • 针对您正在吸收的技术上的StackOverflow问题,写下答案并进行验证。(这通常会带来额外的好处,即在您学习时为您赢得一些声誉。:-))
  3. 您可能过于分散您的练习。您似乎正在使用许多不同的语言。这有很多优点,但是确实有削弱您经验的缺点。如果您花时间使用五种不同的语言,那么您所记的内容要少于您用一种语言花的相同时间。更糟糕的是,不同的语言之间有很多不太相似的认知(如果是elsif或elif ??是其他语言)会使您绊倒。为了解决这个问题,请集中精力。选择一件事来学习,并学会冷。然后继续下一步。

3

我认为,如果您专注于自己编写适度的代码,那么您的效率和生产率将会提高。查找代码,阅读/理解代码,将其复制到源代码,进行相应的修改等可能需要更多时间。

如果您自己提出,它很可能更适合您的特定情况,并且一段时间后,这些解决方案比查找它们更快。

我看待它的方式是,就像您想对某个解决方案有第二意见,因此您查找(Internet上的)其他人是如何做到的。如果您发现自己做/想要做的太多,可以将其视为向同事询问他/她对解决方案的看法。如果您每隔15分钟问同事一个问题,他/她可能会很烦。因此,您提出的问题会更少,并尝试自己提出。

想要在Internet上查找内容时,将其可视化。


3

学习您不知道的最好方法:用谷歌搜索!我觉得您可以与大多数开发人员相提并论。将自卑感放进背包,放开胸怀。

不要害怕问问题,在Google上进行研究,尝试失败。这都是它的一部分。


3

公司环境中的软件开发需要大量的代码重用。如果一个API已经存在并且被广泛使用,为什么还要重写一个函数/方法呢?它很可能会与您编写的任何东西一样高效,并且花费更少的时间。

当然,成功进行软件开发还需要在键盘上稍作休息,以便您可以阅读和理解实际情况。采用任何Web框架。您应该知道底层发生了什么,以便了解正在编写的代码,但是您可能永远不必自己从头开始编写Web框架。

您只需要编写利用框架类型的代码(例如,基于组件的框架需要某种样式),而这是从了解大图而来的。了解大图,您会没事的。


2

从已经给出的答案中可以很明显地看出,研究您的问题没有错,而不是盲目地编码。但是由于您没有直接提出来而未解决的问题是,为什么您会感到如此不安全-对此您该怎么办?毕竟,很多人都在研究问题,并充满信心(甚至那些不应该...的人)

那么该怎么办?也许您只需要在背面拍几百个拍子,现在就可以放心地编写代码了。但是,如果这样做不能解决问题,我建议您研究自动化测试和测试驱动开发。没有什么比测试套件中的“所有测试都通过”更能说明“做得很好”:到达目的地时,您就知道自己做对了。

您还应该尝试挑战一下自己:您说自己一直在寻找已经知道的语法;因此,强迫自己编写一些代码而无需查找语法,您(很快就会发现,如果不是立即发现)毕竟还不错。


2

开发人员并非天生就是“伟大”的,但伟大并不会自动伴随经验。相反,缺乏经验并不能使开发人员变得“糟糕”。优秀开发人员和劣质开发人员之间的区别不在于他们的领域知识,而是他们的方法论。优秀开发人员的显着标志是他自觉地编码。换句话说,一个好的开发人员总是知道他为什么要做某事。从个人道德的角度来看,这需要知识上的勇气和诚信。

花一些时间并了解基础知识是非常重要的,更复杂的事情几乎是建立在这些基础之上的。如果没有理解语言的基础以及幕后发生的事情,那么编码将很容易被黑客入侵……


1

因此,阅读带有示例的书并引用它们是不好的编程,这是您所要解决的问题。看到很少有人记录他们的API,这就是我们剩下的全部。

我不知道您问这个问题的原因是什么,也许您在阅读我的情况后可以自己回答,因为我提到了很多代码示例。

我从来没有机会像16岁那年在街上一样去上大学。不知何故,我在24岁的时候可以通过一所函授学院学习,并获得SCJP,SCJD,SCBCD和SCWCD的供应商认证。我必须承认,有时我很挣扎,不得不上网举例。不知不觉中,尽管此时我的脑袋中长出了脑瘤(到2010年,它已经变成了橙色)。在进行了5次脑部手术,6周的化学/放射疗法和10个月的化学疗法相结合之后,我仍在使用手写编码的站点进行编程,这些站点可以从我的个人资料中看到。

是的,我现在需要很多带有脑损伤的代码示例,这是否使我成为一个不好的程序员?


你有很好的理由。当然,一个人很容易就争辩(甚至使用您自己的故事!),这只是一个缺乏经验的程序员,如果没有别人给他们代码,他们就无法生存。问题是,这是否是一个公平的评估。
cHao 2012年

1

因此,我看到您提到您要参加黑客马拉松。过去一年中,我去过很多地方(超过15年),并且注意到它们非常适合学习。对于学习而言,我的意思是学习如何不再像以前那样编码。我大多数时候都会在每次黑客马拉松上尝试做一些新的事情,以便可以学习新事物。由于存在巨大的时间限制,因此您只需要复制粘贴所有可以找到的代码,而这会在您测试它时使您陷入困境。

但是,您会从中得到好处:A)在错误测试中学到很多东西(也哭得很厉害)B)知道再也不要像这样编码了,并学习更好的编码实践。此外,在黑客马拉松比赛中,您将遇到可以教给您许多您从未了解的新事物的人,并且您将做一些您在学校永远不会做的事情。

因此,我要说的是复制粘贴是不好的,您将不会学到任何东西,而通过复制粘贴保存的时间将在以后的错误测试中咬住您,您甚至不知道自己写了什么,这是上午8点,并补充所有咖啡因。但是,我认为,只要您对代码进行错误测试,就可以学习之前复制的所有内容。


0

好吧,我不称自己为优秀的程序员。但是我要做的很简单。如果我不知道该怎么做,我实际上是在互联网上看一些代码/示例。然后,在阅读它之后,我尝试重写它,对其进行优化并使用最适合我想要的代码的东西。

注意:从Internet读取代码并不会使您成为不良的开发人员。看看别人是如何做的,这总是一件好事,并且您将永远学到一些东西。但是,一味地复制它并不好。


-1

如果开发人员/学生说.. Wikipedia ..将代码复制/粘贴到他们的项目中,那么只需尝试使其“工作”,那么此人正在开发的唯一技能就是“如何使用Google”。那里可能有一些渗透过程,但不是一堆。(您不会相信在大学课程中有多少人这样做)

但是,如果你分析其他国家的人民代码和仔细想想什么是代码本身,那么,它会在使一个人不好的开发商。它使他们成为坚定的开发人员,并可能表示一种更具触觉或视觉感的学习风格。我以身作则很好地学习了。如果有人告诉我一些事情或试图向我解释,我通常会请他们告诉我他们正在谈论的wtf。

随着时间的流逝,查找,分析和学习代码实际上使他们成为一名优秀的开发人员,因为他们正在使用所使用的语言进行阅读和学习。

我经常开玩笑说我比计算机母语了解计算机语言的来龙去脉。这就引出了问题;“您会在Java plz中向我解释吗?”


-1

我认为这有点像下棋。我们逐一检查各个部分,并根据规则跟踪它们可以移动的位置,我们必须经过有意识的检查一段时间,直到潜意识加入其中,揭示出模式和启发性的序列。

有了编程,可能会有更多的部分和规则,我经常绊倒语法,并停留在需要通过“规则”永远找到的错误中,但是最终潜意识会开始。当它停留足够长的时间时,我可以阅读有时会回来,并对它能做什么感到惊讶。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.