如果不去上大学,就可以获得扎实的编程基础吗?[关闭]


28

首先,我已经搜索了该站点并阅读了之前所有的“自学与大学知识”主题。大多数答案都证明,上大学是最好的选择,其主要原因有两个:

  1. 上大学可以给您提供论文,这对于找到工作至关重要,尤其是在经济困难时期。

  2. 上大学将为您提供扎实的编程基础,并教给您必不可少的原理,无论您使用哪种语言/所学的路径。

我的问题来了:我完全不用担心原因1,因为我已经拥有了自己的公司(我建立网站/进行会员营销)并且财务状况稳定,因此我很确定我不需要四处看看找工作

不过,我担心原因2。也就是说,我想确保自己和其他任何人一样拥有坚实的编程基础,而且我想知道自学是否可行。

假设我花时间研究非常基础的知识,例如离散数学,算法设计,编程逻辑,计算机体系结构,汇编,C编程,数据库和数据结构-主要使用书籍,在线资源和大量编码。假设我花了1-2年的时间来学习这些基本知识。

您是否认为我的基础比较牢固,或者与上大学的人相比仍然缺乏?


2
这个星球上可能至少有一个人可以。顺便说一下,原因1仍然很重要。当其他所有条件都相同时,“他们”通常仍然会更喜欢接受正规教育的人。
Job

1
我可以告诉您一件事,您不会发现扎实的一所大学意味着什么。
彼得·特纳


关键是要花十年的时间学习编程,而将其中的一些时间花在一些大学学习会有所帮助。
Basile Starynkevitch 2015年

Answers:


17

绝对可以 是的,有可能。我怎么知道?因为我做到了!

它很难。对此没有任何幻想。当事情不起作用时,没有辅导员去找,您必须自己解决问题。有很多东西要学习,如果您没有上进心或没有足够的投入,您将无法做到。对我来说,我发现很难有任何动机,但是我非常喜欢学习和编程,所以我不必为自己奋斗。

一些技巧:

  • 通过实践学习!想知道二叉树如何工作吗?做一个。
  • 通过学习来做。为自己设定雄心勃勃的项目,在这些项目中,您必须学习新事物才能完成。警告:如果您自己设置的项目太难了,很容易灰心,但是如果您自己设置的项目太容易了,那么您将不会学到很多东西。您正在寻找黄油区。
  • 从C开始。高级语言使您变得懒惰。如果我先学过python,就永远不会学过C。
  • Wikipedia应该是您需要学习的任何概念的首要出发点。
  • 永远不要完成一个项目都没关系(毕竟,完成了什么)。学习新事物更重要。这并不是说您永远不要尝试完成一个项目。看到您所做的工作可能会极大地激发您的动力。易于跟踪,不用担心,如果这样做的话。

你怎么知道什么时候完成的?好吧,您攻读学位的原因是您将精通编程。如果确定可以在合理的时间内编写任何软件,那么您就是程序员,但这并不意味着您应该停止学习。

顺便说一句,我现在正遭受第一点的困扰。远离任何软件开发公司也无济于事。


同样在这里。我的确获得了学位。我没有学太多,主要是我已经知道的一切。我确实了解到,我对Java的憎恨远超过最初的想法(必须在我的最终项目中使用它),并且确实有一位出色的教授根据他的个人经验教给了我们很多东西。
回声说莫妮卡(Reonica)

@Echo,值得吗?
dan_waterworth 2011年

@Dan_waterworth,我喜欢这样想。
回声说莫妮卡(Monica)恢复

我认为从高级编程语言开始尤其是从Python开始更有意义。当然,这取决于您在完成基础知识后要解决的任务类型:如果要进行核心系统编程,请选择C语言,如果要开发最终用户应用程序,请不要这样做。不用担心C并选择Python之类的东西。
ZsoltTörök

不同意C部分。您想保持较高的抽象水平。您可以说C使您懒惰,学习机器代码!如果您不需要C的性能,可以使用python。
segfault,

12

我认为,学院/大学最重要的名称是教你如何自主学习。没关系,无论是编程,物理学,化学,数学等。大学教我如何在没有任何人帮助的情况下学习。


1
好吧,我已经获得了国际经济学的学位,所以我将覆盖这一部分。
丹尼尔(Daniel)

1
我有一个在某些<noname>学位的朋友,他是成功的Flash / PHP程序员。我想这完全取决于你。例如,我拥有物理学学位,但是我是软件开发人员。两年前,我决定获得CS硕士学位,只是因为我想要它,而不是因为我需要它。
Sorantis 2011年

5
我的大学教育教会我在1-2天内通过在线教程学习一种新的计算机语言。如果您已经能够做到这一点,那么您将学到很棒的教训。
apoorv020 2011年

1
是的,但是您必须是承诺的自动整理人。
Dietbuddha 2011年

3
有些人不需要学习如何独立学习。
dan_waterworth 2011年

6

有些人在学术环境中蒸蒸日上,甚至要求他们学习(通常是一种动机)。其他人(例如我)则不然,甚至会发现它们令人反感。

我在软件领域有很长的职业,没有学位。在那个职业生涯即将结束之际,我担任过架构师,我项目的高级架构师说,我对软件和计算机科学的知识(两者不一样!)很容易等同于获得滑铁卢大学的硕士学位(其中一个加拿大顶尖的CS学校)。

我的知识库中当然有一些不足。我的数学能力仅足以跟上我今天所学的知识。我讨厌纯粹的数学,通常不敢跟上最新和最伟大的知识。有时这会影响我对事物的理解(例如Haskell),直到我的数学技能达到足以理解这些概念的水平。但是事实仍然是,没有我在大学CS或数学系附近的任何地方都可以获得信息。我真正能说的是,有时候我的学习顺序不是很理想-我有时不得不回头并填写一些基础材料,然后再继续我的工作。


4

我认为,只要您有纪律实际坐下来并自学所有这些知识并通过示例进行工作,您的基础就会牢固。我有学位,但是是工程学的,不是计算机科学的。我与许多优秀的专业程序员一起工作,他们自学了所有需要了解的知识。自学是成为一名优秀的程序员所必需的,因为总是有一种新的技术问世,而您却在学校没有学过。


3

就像生活中的大多数事情一样,我的回答是可靠的,它取决于人。我坚信,成为一名程序员并不需要学士学位。但是,根据我的经验,大学倾向于让人们接触到他们可能无法通过独立学习遇到的问题和想法。

在当今这个时代,一个有上进心的人可以上网,并且借助MIT开放课件之类的资源,可以组织一个独立的学习课程,这将为他们提供相当广泛的知识,而我认为这是我所知道的知识是什么使一个好的开发者。但是,不那么自发的人可能会发现他们能够通过学习一种语言来获得知识,并且可能仅能在职业方面获得知识。

如前所述,我认为知识的广度才是一个好的开发人员的基础,因为这意味着他们面临更多的问题,并且已经开发出解决问题的技能。您无需去学校就能获得这些知识,但是学校在这方面肯定会有所帮助,因为好的学位课程会迫使您发展知识的范围。


2

作为一名程序员,我发现自己一直在使用与工作无关的API和语言(Ruby on Rails,Python,Node.js等)。我这样做是出于兴趣而非工作。我有2个副学士学位,但是即使使用Java / JEE编程了10年,我仍然发现我真的很想念BS学位的理论(大O,算法,Descrete Math等)。

我正在参加业余时间的夜班课程,以获取计算机信息系统的学士学位,但是该程序没有太多的CS理论。我获得学位的主要目的是拥有“论文”,因为它比技术更重要,但是这是我晚上上课的唯一选择。

查看MIT开放式Coursware。它是免费的,是填补CS /数学理论空白的重要资源。


2

我认为认为大学/大学将为您提供良好的编程基础是一种错觉。他们将教给您很多理论,以及许多不同的思考问题的方式。一切都很好,但是将理论付诸实践是另一种技能。

教授正确应用理论的唯一有效方法是指导和实践。简而言之,您需要尝试尽可能地应用该理论,并依靠经验丰富的人来给予您建设性的批评或为您指明正确的方向。您的导师不会为您完成工作,但会帮助您更好地完成工作。

没有我职业生涯初期一些好的指导者的帮助,我就不会成为今天的开发人员。从事开源项目是找到一些愿意花一些时间敲定细节的导师的好方法。至少那是我的经验。在我的第一份编程工作中,我还曾担任过导师,帮助我了解如何设计易于扩展的应用程序。

那么对大学/大学有好处吗?是。但是,除非您将理论付诸实践,否则他们没有能力帮助您将理论付诸实践。如果您开始尝试应用在大学期间所学的知识,则可以开始提出正确的问题类型,这些问题将帮助您更实际地理解理论。如果您等到完成工作,就意味着您已经推迟了这一重要的学习过程。


同意。我几乎完成的所有业务编程都类似于在木匠这样的行业中工作。我认为学徒/旅人/硕士编程课程比大学在学习编程方面会更有帮助。
cfeduke 2011年

2

人们往往高估了IMO的理论基础,数学和算法知识的重要性。程序员推动和采访这些事情的原因是他们本身就是数学爱好者。

当然,现在有了一些编程,对于了解什么是“状态机”或如何使用“ Booyer-Moore”搜索很有用。甚至在有些问题中,了解一些真实的数学也可能会有用,例如,如果您正在进行财务计算或物理模拟。

但是,问题是90%的编程通常不是其中的任何一个,我们中没有多少人在做硬核算法开发。您需要学习的大多数东西都可以随着学习而学习。无需构建庞大的基础大厦,而是不断地好奇如何解决不同的问题。

我自己是100%自学的,而且我从没有任何问题可以学习算法。我已经完成了金融系统的工作,即使没有任何更深的理论数学技能也可以做到。

擅长编程不是基础,而是持续扩展您的工具箱,当您将其投入真正需要解决的问题的背景中,而不仅仅是纯粹的理论研究时,所学到的东西将具有更大的价值。

您不需要了解所有细节,这就是Google,StackOverflow和Wikipedia的目的:)但是,您确实需要知道存在各种工具和方法,以实现它们对您的情况有用和适用。您还需要获得了解哪种工具最适合使用的经验。基金会通常对初学者宠坏,因为他们没有特定工具为何有用的经验。如果您有丰富的经验,有些事情将只是“单击”到位。

我会推荐一些东西:

  • 如果还没有,那就开始学习设计模式,这是工具箱中最实用,通用的工具。

  • 如果您感到好奇,请阅读一些不同算法的一般概述,以使您知道何时可能需要一种算法

  • 了解有关并行化和多线程(以及一些函数式编程)的信息。如今,能够支持多个核心非常重要,并且很快将不再分发,因此这是至关重要的知识。

  • 进行具有挑战性和实验性的爱好项目,以提高您的技能并迫使您学习相关内容。


您估计大约90%的编程不具有很强的理论知识是正确的。不幸的是,大多数程序员会定期碰到另外10%,因此是必需的。
2011年

2

大学将为您提供帮助的一件事,就是您可能会发现自己很难获得阅读和理解学术研究论文(尤其是数学)的能力。但是,即使这可以自己实现,也可以由教员和同伴在学习过程中指导您,以更快,更轻松地获取知识。

作为信息系统的一般程序员,您不太可能阅读研究论文而做得很好。当今的信息系统相当简单,大多数密集算法(例如搜索,排序和索引编制)都由数据库系统完成。只要您了解概念,就不会有困难。

如果您决定参与更困难的编程领域,例如开发微操作系统,编译器开发,人工智能等,那么具有阅读和理解研究论文的能力对于快速有效地实施系统至关重要。

就能够应用知识而言,这是非常个人主义的。不上大学的人可能也无法应用这些原则。有一句老话说:“进什么无关紧要,输出什么无关紧要”。

综上所述,您从上大学获得的知识可以帮助您更好地理解学术世界并与之交流。但是,无需上大学就能获得知识。拥有学位可以更容易地说服他人您知道自己在做什么并且可以理解学术研究论文。


2

我认为没有多少人能通过自学获得像上大学那样的“基础”,至少不是在同一时间范围内。两年读零散书和在业余时间玩玩具问题不会使您达到两年专注于有组织课程的集中学习的水平。它能使您足够度过难关吗?很有可能。但是,如果您真的希望“像其他人一样有良好的基础”,那么将需要两年以上的时间。

不劝阻您,这当然不会浪费时间。我只是不是非常自信,很多人在经营自己的生意和拥有某种个人/家庭生活的同时,可以在两年内完成相当于两年大学的学习。


是的 实际上,我的研究大部分时间不到2年(约6个月),但我通常每周工作60-70小时。
dan_waterworth 2011年

同意TMN。在一般情况下,您的正规教育不知道您将在何处结束,它具有一定的广度(即,往往涉及很多领域)。我在以前的文章中的示例:我从没想过我会使用Compiler Construction,这是我课程的一部分。事实证明,二十多年后,这是我做过的最重要的课程之一。现在的麻烦是,对于那些不了解这些知识的人,您不知道自己所不知道的。从长远来看,这种无知会使您的工作效率降低。
quick_now 2011年

1

我已经有十年没有学位的专业发展了。当我采访人们时,我对他们解决问题和编写代码的能力很感兴趣。话虽如此,有些公司/角色我不完全符合资格,因为他们坚持学位。某些顾问公司有此政策,因为他们可以将您卖给更多客户。


这主要是通过人力资源部(HR)进行招聘的问题。解决该问题的最佳方法是建立一个由认识您或至少认识您的IT经理组成的业务社交网络,并尝试回避HR“筛选”过程。换句话说,没有学位的人往往必须更好地自己营销其技能和服务,而不是申请广告职位。最有能力的IT经理将根据可靠的往绩记录和声誉(即从他们信任的人那里推荐)来聘用。不要期望得到政府工作。这是罕见时下
mctylr

1

如果您玩数字游戏,那么拥有学位的人可以获得更好的工作和薪水。

并非每个获得学位的人都能学到/记住任何东西。

大多数人不会花时间去上大学,因此会花很多时间学习理论/背景/基础知识。也许您的父母会通过4年的自学来支持您;其他人都必须找到工作。

缺点是,如果您拥有CS学位而未达到一定水平,则您可能会被视为马力低下。让我们面对现实,如果您在连续喂汤的四年中都没有得到它,那么在按住和全职工作时就不会在侧面弄清楚它。当然有例外。


1

如果您真的想在没有学位的情况下在软件开发领域谋生,建议您与当地的大学联系。从他们那里获得需要获得学位的课程清单。绝大多数大学将根据要求提供这些信息,以及每门课程的简介/提纲/书籍清单。在该列表下。查找有问题的书。查看它们涵盖的主题。如果您发现不了解的任何内容,请购买/签出该书并学习。在该过程的最后,您至少应该知道您所知道的和不知道的,并且要与普通大学毕业生(无论如何他们曾经睡过/欺骗过其中一些课程)相比具有相当的竞争力。


1

假设我花时间研究非常基础的知识,例如离散数学,算法设计,编程逻辑,计算机体系结构,汇编,C编程,数据库和数据结构-主要使用书籍,在线资源和大量编码。假设我花了1-2年的时间来学习这些基本知识。

是的,没有。没有老师,有些东西很难被掌握。通常是比较数学的东西。

我相信-仍然相信帮助CS专业开始成为TA之后,任何没有智力障碍的人都可以学习PHP / Java / C#级别的代码。从根本上讲,这并不困难。

因此,您提到的装配和其他技术领域也不是。这些是实施细节,很容易知道。

如果学习深入,则数据结构,算法,数字设计,计算机体系结构和数据库代数将相当困难。


0

毫无疑问,一个有上进心和奉献精神的人可以打下坚实的基础,但是如果您选择不攻读学位,您会在很多方面有所遗漏,这将促进您的发展。其中一件也是最重要的一件事情是,与志趣相投的人进行交流,您可以与他们交流思想和观念。能够聆听具有宝贵智慧的讲师的经验也非常好,这些老师有时可以用一两句话弄清楚被误解的概念。能够在初次接触时弄清概念,而不是将错误的想法沉入其中,然后在以后进行梳理,这是很好的。

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.