自我教学在编程领域有多重要?[关闭]


74

我16岁。大约一年前,我刚开始读高中时就开始编程。我正在从事编程工作,并且正在尽我最大的努力去学习。刚开始的时候,我从书中学习了C ++的基础知识,从那时开始我自己学习东西。如今,我比一年前经验丰富。我知道我必须自己学习,因为高中不会(可能)教给我关于编程的任何有价值的东西,而且我想做好准备。

这里的问题是:自己学习编程有多重要?


12
我上大学时每天都不使用的语言。因此,如果您打算成为一名开发人员超过几年,那么自我学习对于学习新技术非常重要。
乔恩·斯特雷尔

5
您注意到,现在您比一年前有更多的经验-实际上,我一年前打赌您不知道可以学到多少!我发现这种情况每2-5年发生一次,我回头看看“哇,我全都错了,甚至都不知道有可能做得更好。如果您想保持中等水平,自学始终至关重要。此外,我不想与无法以这种方式学习的人一起工作。
比尔K

2
当我在你们这个年龄,我不会一直能不能由我自己承担编程,即使我曾尝试。太有趣了。是的,事实证明,这对我的职业生涯非常重要,对我有帮助,但这只是一个很好的副产品。这样做很有趣,您不必考虑是否需要体验。
李·李

Answers:


100

至关重要 我认为我从没有认识过一个在某种程度上没有自学成才的优秀程序员。作为一家大公司的招聘经理,我可以说描述个人项目学习欲望的候选人每次都会以令人印象深刻的学位胜过一个。(尽管最好同时拥有两者。)

关于大学的事情是:计算机科学课程教授理论,而不是技术。他们将教您哈希表与B树之间的区别,以及操作系统工作原理的基础。他们通常不会教您计算机语言,操作系统或其他技术。

我记得当我参加第一门数据结构课程时,时光飞逝,我们获得了一种名为“ C ++”的新语言的精简手册,他们决定开始学习。我们花了两个星期的时间来整理代码。这本身就是一个很好的教训。这就是您职业发展的方向。

您的学校很可能不会教您获得良好工作所需的知识。多年来,学校经常落后于该行业的热点。然后,您将获得一份工作。无论您去哪家公司,几乎都肯定不会花费任何精力来培训您。不好的公司太便宜了,坦率地说,好的公司只会雇用足够聪明的人去接他们。

我于1987年大学毕业。我以C程序员的身份去从事DOS,NetBIOS和“ Terminate-and-Stay-Resident”程序的工作。从那以后的几年中,我几乎没有接受过任何实际的培训。看看招聘广告...这些技能的要求不高!我今天受雇的唯一原因是因为我花了这几年的时间不断学习。要成功成为一名工程师,您必须养成学习的习惯。地狱,我将不止于此:您必须热爱学习。您必须是那种喜欢WebGL或Android或iOS的人,因为它看起来很有趣。如果您是那种人,并且保持学习的习惯,那么您将在行业中走得很远。


3
这个。理论也很重要,而且很难自学。但是,我确实不同意公司的培训。.这些天我们的领域需求很大,公司很难找到优秀的人才。(至少在我所在的地区)
user606723,2012年

+1,我曾经在2004年在学校图书馆里注意到一个非常老的“ C中的TSR”。想知道它是否仍然存在。
耶斯文·何塞

3
理论很重要,但是您可以比以往更容易学习它,因为许多大学课程的视频都可以在线获得。我敢说,从网上观看一位优秀教授的讲座可能比从普通参加普通教授的讲座中学到的东西更多。
珍妮·平达

@史蒂芬·伯纳普(Steven Burnap):“计算机科学课程教授理论,而不是技术”-那不是事实。在我的大学(德国KIT),我们必须学习Java(并做一些小项目)以及一些C方面的练习。为ICPC(像TopCoder之类的竞赛)做准备是要学习如何快速解决C ++问题。提供。我们还必须做一个相当大的项目(一个小组为Windows Phone创建了一个应用程序,如果由于自然灾害导致网络中断,该应用程序可以自动分散地建立移动网络)。我们还会在Scala / Haskell中进行介绍。
马丁·托马

1
但是的确,您应该始终自己进行项目。大学只是提供了许多起点。我想如果您不好奇,如果您不想尝试某些事情,就不应该当程序员(作为全职工作)。
马丁·托马

29

自我教学非常重要。您不能依靠正规的教育来教给您有关该领域的所有知识。但是,如果您想进入经过充分准备和装备精良的职业领域,接受正规教育也非常重要。

我正在上大学,过去四年来自学软件开发,因此,我现在为一家维护企业应用程序的知名公司工作。它不需要大量的人才,但是却需要大量的工作和动力。我认为文学和实践是您学习的最佳选择。选择一个特定领域也很重要,因为尽管您可以跨所有领域传播语言和逻辑,但是只有在特定领域进行了充分的实践和理解后,您才能真正成为“伟大”。


8
这里有正规的自我教育,但是您没有在职的导师,这可能是扩展您的技能并学习软件的真正制作的最佳方法。
JeffO

1
“但是,如果您想进入准备在劳动力市场上采取积极立场的职业领域,那么正规教育也非常重要。” ...这句话很模糊。“劳动力”中的“积极立场”?真?那有什么意思?
blesh

@blesh同意。更改了措辞。
约翰尼·

1
我认为在工作中经历是最重要的……但是其中很大一部分是自学成才的。你不能在你的办公室期望每个人都教你的一切,和最好的采取从每一个他们可以得到它的地方他们的经历..
user606723

11

独自学习非常重要。具有进行研究和收集必要知识以完成任务的学科,将使您远远超越许多依赖正式培训来完成同一任务的人。这适用于任何行业,而不仅仅是软件行业。

不要误会我的意思,接受一些正规的培训或教育会有所帮助,但是您自己提高自己的技能的动力将帮助您成长为更好的软件开发人员。总会有一些要学习的东西:要试验的新平台或编程语言,要实现的开发方法,要使用的工具和算法等等。不会通过正式培训向您介绍所有内容,因此您需要了解其他您可能感兴趣的主题和思想,这将在整个编程职业中为您提供帮助。


6

在编程中,自学是您每天要做的事情。您将必须自学很多东西,而不仅仅是不断变化的计算机语言和工具。您将必须学习其他人编写的代码,并且还必须在最少的指导和监督下进行修复。在某些组织中,很少每年进行超过1次(如果有的话)的真正培训。确保您可以(并享受)这项工作,否则,在您还年轻的时候就考虑换一份职业。


4

对于程序员来说,自我指导是必不可少的技能。太多没有。如果您表现良好,则将在整个职业生涯中使用此技能。


1
-1:我同意自我学习是必不可少的技能,但是仅仅说这不是必须的。
吉姆·G。2012年

1
+1不赞成投反对票。我会说同样的话,这也是基于我的经验。
CodeART 2012年

1
@吉姆-你在那里有一个绝对荒谬的推理。我应该算是WTF吗?“我同意,但是-1,因为你说过。” O_o
爱德华·斯特兰奇

@CrazyEddie:在没有提供此类支持的情况下,只说一句真实的话对这样的论坛没用。
Jim G.

@Jim-对您的答案的初步审查使我回答:“住在玻璃房里的人不应该扔石头。”
爱德华·斯特朗奇

3

自学非常重要,因为您将永远不会有接受正规培训的机会。当您开始寻找项目,实习或工作时,请找到拥有可靠的资深开发人员并能真正教您一些知识的人员。在做正确的环境中可以成为获得质量代码的捷径。


3

我可以告诉你,我曾经在几个地方工作过,甚至不考虑不在工作之外没有自己项目的人。它展现出对编程的热爱,而不仅仅是出一份工作和领取支票。我在这里要大声疾呼地说:所有不喜欢编程的程序员都无法胜任。更糟糕的是,他们没有什么可以加入的任何团队。

我会选一个经验不足的初级开发人员,他喜欢他的工作,他在空闲时间与三个正在经历议案的中级开发人员一起玩代码:那个初级开发人员将来会很棒,而其他人会从来没有比他们更好的了。

如果您不学习新事物,那么您只会坐在那里忘记所知道的东西。


2

人才被高估了。

一个人要在任何给定领域变得出色,至少需要十年的实践。因此,尽早开始很重要。

您从生命的早期开始就开始做自己似乎喜欢的事情,这一事​​实使您遥遥领先。因此,除非您对将要工作的区域有其他想法,否则请不要停止……永远不要停止!

我认为自我学习是任何开发人员的最佳技能之一,第二是大学学位。优秀的大学学位很重要,因为它会为您的知识增加太多的质量,而您可能无法自己学习。当然,该规则也有例外,仅此而已。例外。

此外,您越早积累经验,就越能享受大学学习,也可以更好地吸收呈现给您的新概念。起初,您会发现这一切都那么简单和毫无意义,但是很快您就会感到挑战,并渴望学习更多。

大学毕业后,请不要停止学习,因为这将是您的最佳功能之一。我建议阅读“人才被高估”。您可以查看有关该书的这篇快速文章:

http://www.devlounge.net/strategy/the-talent-myth


说到神话...我相信十年实践的口头禅也是一个神话。您可以为许多人提供100年的实践技能,而他们仍然会永远无法获得这些技能。当然,它们可能比起步时更好,但是如果仍然不够好,那就还不够。另外,我已经看到新毕业生围绕着软件开发中经验丰富的开发人员而奔波。当然,他们仍然有很多东西要学习,但是经验丰富的开发人员也是如此,即使有10年实践经验的开发人员也是如此。人才非常非常重要。没有它,您只能走得很远。
扣篮

@Dunk,我同意。我认为,从某种意义上说,这种想法更多的是,即使是有才华的人也需要至少 10年才能学到一些好东西,而才华也并非成为明星的通行证。多年来,才华与真正奉献相结合。
亚历克斯

我同意你的看法。没有实践的天才不会走太远。但是,我似乎还记得阅读原始文章,并且作者声称即使具有一定技能的普通人才也可以在10,000小时的练习中变得相当熟练。我完全不同意这一评估。在软件开发领域,这一点变得非常明显,尤其是当您处理中等复杂程度的应用程序时。绝大多数开发人员只能做相对简单的事情。似乎没有多少实践可以使他们超越重点
Dunk 2012年

@Dunk可能是他们失去了激情,而不是才华。
亚历克斯

:我认为发现人才很容易,即使它是原始的和缺乏经验的,也永远不会得到。
扣篮

2

与我能想到的几乎其他任何领域相比,编程基本上都是关于自我教育的。正规的计算机科学/软件工程教育很有用,但并不是真正学习编码的地方。

您真正应该做的就是开始从事项目:构建您想要存在的东西。然后加入一个开源项目,致力于您想要做得更好的事情。学习是免费的,然后...


2

您需要自己学习新事物-随心所欲。

也要接受正规教育-正规教育中所教的90%不会在工作场所使用。但是,所用的10%将会是您当时认为永远不会有任何用处的一些奇怪而晦涩的事物。

没有正规的教育,您将遭受最形容为“您不知道不知道”的问题。正式的教育可以使您广泛地了解很多事情,而这是完全没有人会出去使用所有这些知识的。因为您将要使用的东西是直到您需要时才知道的,所以这一切都是关于准备,以便您知道要去哪里寻找。

自我学习/好奇心驱使您成为知识渊博,全面发展的人。更不用说对雇主更有价值了。

旁注:自从开始从事大约15岁(编程,超过25年...接近30年)编程以来,我已经度过了整个职业生涯,发现除了大学教育之外,大多数培训课程(您知道...在3个全日制工作)是毫无用处的。这些通常是肤浅的,就广受吹捧的“保持技能发展”的口头禅而言,对于需要深入了解技术细节的人并没有太大帮助。购买书籍,使用互联网,研究数学/物理/建筑/任何使我有用和有价值的东西。在某个阶段,我是世界上大约10个人中具有特定专业知识的人之一-所有这些知识都是通过自学和在职学习获得的。

停止学习的唯一时间是当您在松树箱中不到6英尺时。


2

有一个很好的寓言:

年度世界锦标赛在不列颠哥伦比亚举行。决赛入围者是加拿大人和挪威人。

他们的任务如下。他们每个人都是森林的某个部分。获奖者是可以从上午8点到下午4点最多砍倒树木的人。

八点钟,哨声响起,两名wood夫就位。他们砍掉了树后的一棵树,而加拿大人没有听说挪威人停下来。加拿大意识到这是他的机会,因此加倍努力。

加拿大人九点钟听说挪威人再次上班。再说一次,当十到十名加拿大人听说挪威人再次停下来时,他们几乎同时工作。加拿大人又一次去工作,想利用敌人的弱点。

在挪威语十点钟重新进入工作。直到十点到十一点,他暂时没有被打扰。随着越来越高涨的欢愉感,加拿大人继续以同样的节奏工作,已经感受到了胜利的味道。

它持续了一整天。挪威人每个小时都待十分钟,而加拿大人则继续工作。当您得知比赛即将结束时,即下午四点,加拿大人就可以肯定奖杯在他的口袋里了。

您可以想象他得知自己输了后会感到惊讶。

  • 那是怎么发生的?-他问挪威人。-每隔一个小时,我听到你停了十分钟。像,该死,你砍的木头比我还多?是不可能的。

  • 实际上,一切都很简单-只是挪威语。-每小时我停十分钟。当您继续砍木头时,我正在磨斧头。

因此,您应该一直学习以保持斧头锋利


1
  • 这很关键,否则您将留在后面

  • 我每天在工作,在这里学习,读书,提问和回答。我学得越多,我就知道我很少。


1

自我教学非常重要,原因有两个:

  • 学习后:正如其他答案中已经提到的那样,自学是您作为开发人员的日常生活所要做的。您不可能一无所知,公司也知道这一点。您必须知道的是如何改善自己。优秀的开发人员有能力自行快速学习新语言和新技术。
  • 在学习期间:大学课程将教您与实际工作之间的距离是巨大的。我特别是在谈论维护和可维护性。开发人员工作的重要部分在于维护遗留代码(错误修复,改进,添加功能等)。您可以阅读在大多数编程工作中,创建全新软件是否通常是主要部分?有关更多详细信息。
    由于维护遗留代码是必不可少的,因此您还需要自己编写可维护的代码,而这很少通过正式课程进行讲授(请参阅如何改进对学生的可维护性培训?)。如果您不练习自我教学并在学习期间阅读很多东西,那么您不太可能获得所需的技能,这些技能将使您成为比普通人更好的开发人员。
    在学习期间,不要尝试学习许多语言/技术,而要学习良好的做法和简洁的编码。例如,在学习期间,您最好阅读Robert C. Martin的“ Clean Code”,而不是Herbert Schildt的“ Java The Complete Reference”。

-1

自我教学非常重要,因为您可以以自己的方式将概念内部化,这确实有帮助。选择一种语言进行自学非常重要。具有清晰文档的语言非常重要,并且您不想成为的人也很雄心勃勃因为您说您是从c ++入手的,所以我会为您推荐Java,因为它对于自学成才的程序员总是非常有效。


-1

通过自己尝试并学习其工作原理,我大概了解了95%以上的编程知识。学校可以帮助教授良好的编程风格和优化代码以提高速度等,但是您永远不会仅通过阅读教科书就成为“优秀”的程序员。培养编程技能的一种好方法是找到可以使用计算机解决的日常问题,并尝试编写一些代码以完成任务。陷入困境是学习的一部分。我最初是想成为一名Web开发人员,所以我会经常创建虚拟网站(不托管它们或其他任何东西)来测试我想尝试的新事物。对我来说效果很好!


-1

我2年前开始编程。我的学校不能很好地教授这些语言,因此我必须上网进行自我研究。我的学习速度较慢,因此我花了两年的时间编写了我的第一个程序,而我的所有同学仍在努力学习或放弃编程。

这表明程序员自学而不是依赖学校是更好的选择。学校总是会隐藏信息,因为他们认为我们还没有做好准备。


不确定我是否同意。我认为自我教学很重要,但是您可以从正规教育中学到很多基础资料,这些资料将为您提供与他人交流和学习解决新问题的工具,而不是已经解决的问题。
jmort253

在这段时间里,每个人都在努力了解学校的教学内容,并且他们的教学速度非常快,每个人都无法追上。
揭亮

学校是一项灌输计划,旨在为我们提供基本概念的基础,但我们有责任在此之后继续接受教育,并继续自己学习。
jmort253

我同意你所说的。如果我们想通过编程变得更好,那么必须要有自学的知识。
揭亮

-3

与数学和计算机科学一样,有两种观点:1.必要条件和2.足够条件

  1. 有必要在整个生活中(自学)学习。没有其他选择可以成为并保持良好的程序员。
  2. 以上观点还不够充分-您必须具有数学背景-高中,然后毕业于计算机科学领域的优秀大学。这是(也许)足够的条件。必须教会您的大脑进行算法思考。这不能通过自我学习来实现。

1
无需大学就可以教会您的大脑如何算法思考。我什至建议,有比上大学更好的学习方法(例如,对许多人来说,学徒制会更有效)。另一方面,无论选择多少计算机科学课程,很多人都无法通过算法思考。对于大多数程序员来说,大学无疑是一个巨大的帮助,但也不是必需的。
菲尔(Phil)

如果您精通阅读教科书,则可以阅读几本书,并使用stackexchange.com等在线工具和程序员,应为计算机科学和算法提供丰富的背景知识。
彼得·史密斯
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.