faq - learnprogramming

欢迎

欢迎来到/r/learnprogramming。这是关于这个 subreddit 的一些最常见问题的列表。如果您的问题是其中之一,那么它之前可能已经回答过很多次了,您应该尝试使用 reddit 的搜索工具(查看侧边栏)查找以前的答案,然后再发布到这里。


入门

我从哪里开始?

如果您对学习编码感兴趣,那么从正确的心态开始非常有帮助。Kevin Cheers 的这个YouTube 视频很好地解释了你在开始时应该拥有的正确观点。

接下来,你应该记住,没有普遍认可的学习编码的方式——每个人都喜欢以稍微不同的方式学习,你可能需要做一些试验来找到最适合你的方法。尽管如此,大多数人似乎使用以下方法学得最好,我们强烈建议您尝试:

  1. 找到一些你有兴趣解决的小问题或项目。你可以尝试构建一个工具来解决你生活中的一个小问题,或者尝试从头开始实施一个你觉得有趣的程序。该项目将帮助激励您继续学习编码,并为您提供练习应用所学知识的机会。
  2. 做一些研究以确定哪种编程语言最适合您的项目。(建议见下文)
  3. 查找并关注该语言的单一、高质量的面向初学者的资源。(再次,见下文)
  4. 通过谷歌搜索和提问来补充该资源
  5. 最终使用该语言完成几个重要的项目。

以下是我们建议您避免做的一些事情:

  1. 不要只是被动地跟随你正在使用的任何资源。做练习和家庭作业;实践是学习编码的绝对必要部分。
  2. 避免在编程语言之间不必要地来回切换;选择一个并坚持下去。这是因为编程最终是关于解决问题的,而不是关于编程语言。学习解决问题具有挑战性,是一项只能通过实践才能磨练的技能。每次切换语言时,您都在浪费时间练习应用所学知识来提高解决问题的能力。
  3. 完成教程后不要停止学习。编程是一个总是有新东西要学习的领域。

最后,请记住,学习编码可能是一个漫长艰难的过程。如果学习编码感觉很困难,不要气馁!这是完全正常的——许多人会在他们认为自己有能力寻找工作或为重大项目做出贡献之前,花费数年的时间学习和练习。幸运的是,刚刚开始并不难。

我应该从哪种编程语言开始?

有两个常见的误解导致人们提出这个问题。第一个是实际上有一种 “最好的” 编程语言可供学习,第二个是你学习的第一门语言将决定你接下来的编程生涯会是什么样子。

实际上,没有最好的语言开始,而您的第一语言对您最终的职业几乎没有持久的影响。编程语言在表面上看起来可能非常不同,但大多数基本概念会从一种语言转移到另一种语言。随着时间的推移,学习一门新语言也会变得更容易——初学者可能需要几个月的时间才能对自己的第一语言感到满意;有经验的程序员可以在几天内熟悉一门新语言。

理想情况下,所有程序员都应该具有多种语言的经验。一旦你对一种语言感到满意,就转向另一种在某些基本方面有所不同的语言。随着您学习更多语言,您将更有能力为手头的任务选择正确的工具,这是优秀程序员的标志。由于编程概念是最重要的,我们建议初学者从下表中的一种主流语言开始。所有这些语言都使初学者能够开始编写简单的应用程序并练习编程,而无需使用任何更复杂的语言功能。

如果您已经有一个项目或目标,如果您可以将您的技能应用于您要解决的问题,您将学得更快。下表包含一些常见项目的推荐语言选择:

我想学习如何…考虑使用…
… 制作 iPhone 应用程序斯威夫特(更多
… 制作 Android 应用程序Kotlin/Java(更多
… 建立一个网站JavaScript、CSS、HTML5(更多
… 编写 Windows 桌面应用程序C#
… 制作 2D/3D 游戏JavaScript、C# 或 C++(更多
… 程序 Arduinos / 微控制器 / 机器人C
… 进行科学 / 数学计算或数据分析Julia、Python、R 或 Matlab
… 做自动化和脚本许多语言(Python、Ruby、Bash、Powershell、AutoHotKey…)

如果您仍然无法决定,请尝试 Python。Python 是一种很好的、​​对初学者友好的语言,它拥有庞大的社区和许多库,几乎可以做任何你想做的事情,从制作游戏到在家或工作场所实现自动化,或者进行数据分析到制作网站。在深入研究更复杂的应用程序之前,请尝试找到专注于概念和基础知识的学习资源。

我在哪里可以找到好的学习资源?


怎么提高

我如何从初级到中级?

我们从许多初学者那里得到的一个常见问题是 “现在怎么办?”。尤其是,您可能已经尝试过一些教程、书籍、课程作业,但最终很难在理解 if 语句和 for 循环之类的工作方式与理解如何实际_应用_您所学的知识以使其变得复杂和有趣之间产生差距程式。

在介绍教程和复杂代码之间进行这种跳转可能很困难,并且是学习编码的正常部分。这篇文章很好地描述了这种现象。许多教程(特别是像 CodeAcademy 这样的商业化 “学习编码” 网站)倾向于帮助您完成基础知识,但在此之后就停止了,让许多初学者陷入困境。

但是,如果你坚持下去,在迷茫中努力,你最终会发现自己逐渐变得越来越好,直到有一天,不知不觉中,你会发现自己已经开始变得有能力了。

这里有一些关于如何坚持的建议,以及你接下来应该做什么。

  • 从被动学习转变为主动学习

    与其选择(你希望)能教给你你想学的东西的课程和课程,不如开始积极研究自学的方法。如果您不知道如何制作游戏,例如,谷歌 “how to program a game in X”,其中 “X” 是您要使用的编程语言。如果遇到您不认识的错误消息,请尝试使用谷歌搜索。想学习如何进行机器学习?谷歌,找到一本看起来不错的教科书、教程或在线课程。

    您通常可以找到解释您想要做什么的教程,或者至少可以找到一些文章,这些文章可以为您提供有关如何编写更具体的搜索查询的概述和线索。更广泛地说,为了学习新事物而进行研究并不可耻——事实上恰恰相反。谷歌搜索和研究是所有程序员(无论是初学者还是高级程序员)都在不断做的事情。

  • 不断地练习

    编程有点像锻炼,提高的主要方法是通过不断的练习。从简单开始,尝试在命令行上编写一个基本的游戏,比如 “石头剪刀布”。完成后,尝试选择一个更雄心勃勃的项目,然后完成它。如果你想把事情搞混,也许可以尝试一些编程练习。

    从根本上说,编程实际上是关于应用问题解决,而学习如何解决问题的最好方法是不断地解决大大小小的问题。

    (另请参阅常见问题解答:我在哪里可以找到练习和项目想法常见问题解答:我无法为一个项目提出任何很酷的新想法。我只是缺乏创造力吗?其他程序员如何获得灵感?

  • 学习如何分解问题

    当您尝试解决一个大型项目或问题时,很容易因任务看起来有多大或令人生畏而气馁。与其被吓倒,不如将问题分解(分解)成越来越小的子问题,直到每个单独的子问题看起来都可以管理和可行。

    例如,假设您想制作一个剪刀石头布游戏。好吧,如果你真的把它拆开,这包括几个子问题:如何从用户那里获得输入,如何让计算机选择一个随机选项,如何判断谁赢了,以及如何重复整个事情(如果你想玩多个游戏)。

    如果您不确定如何解决_这些_子问题中的每一个,请尝试将其进一步分解。例如,如果你不知道谁赢了,你可以把它分解成更多的子问题:如何判断你是否打平,如何判断你是否赢了(假设你选了摇滚),如何告诉你是否赢了(假设你选了纸),以及如何判断你是否赢了(假设你选了剪刀)。

    如果您完全不确定(例如,如何让计算机随机选择一个选项?),请尝试使用谷歌搜索。在这种情况下,谷歌搜索 “X 选择随机选项”(其中 X 是您正在使用的编程语言)将显示您可以使用的多种不同方法。有时,您可以在需要 google 之前将问题分解为多个部分,有时需要立即这样做。

    例如,如果你正在学习 Java,想学习编写游戏,但不知道从哪里开始或如何解决问题,谷歌搜索 “java 游戏教程” 会带来几个很好的结果,它们都可以教你如何编写游戏,以及(通常隐含地)如何将编写游戏的过程分解为更小的部分。

    从本质上讲,您正在尝试获得工程师的心态。如果问题很大,不要放弃。继续将其分解成越来越小的部分,并研究似乎不可约的事物。然后重复,继续循环:分解,谷歌,分解,谷歌…

    顺便说一句,这是一种非常有效的自学策略!当你练习时,你会更好地了解如何分解问题,并将扩大你的知识库 / 可能的问题解决方案。

    请参阅常见问题解答:如何提高将任务 / 问题转化为程序的技能(算法思维)?更多建议。

  • 学习如何系统化

    在编写和调试代码时,永远不要养成只 “尝试” 并希望它们起作用的习惯。尽量系统严谨,避免 “试错”。

    编写代码时,花点时间停下来,在纸上制定一个粗略的攻击计划。考虑画一些图表,或者记下一些伪代码。如果你必须改变你的计划(你很可能会改变),想想你为什么要做出改变,以及你的新攻击计划是什么。(这个计划阶段也是练习问题分解的好时机!)

    调试时,永远不要漫无目的。尝试像科学家一样思考——进行实验以尝试修复错误或缩小错误可能存在的范围,并记录您的结果。如果你的假设 / 尝试的改变被证明是错误的,或者当你认为它不会奏效时,停止、暂停并找出原因。如果可以帮助您保持进度,请考虑在笔记本中跟踪您的实验和测试。

    当您的假设与现实不符时,就会出现错误。如果某事感觉 “不对劲”,请不要忽视它——追查下去,直到你确定问题是什么 / 你做了什么不正确的假设。

    不要只是 “做” 随机的事情,直到你运气好——要系统地处理它。

  • 不要因不得不调试或谷歌而气馁

    并非所有初学者都意识到,不得不花更多时间调试或搜索是完全正常的,即使在专业程序员中也是如此。

    调试(和挣扎!)是编码的重要组成部分。如果可能的话,尽量避免压力过大或不耐烦。将其视为有趣的狩猎或拼图!

    即使由于某些错误,您在实际代码上没有取得任何进展,只要您有系统,您仍然可以练习解决问题的技能,尽管方式不同。

    因此,即使您花了很多时间来解决一个错误,您仍然应该认为它花费了时间。调试是擅长解决问题的最佳方法之一!

    (随着您的经验越来越丰富,这一点更是如此。事实证明,您遇到的错误的难度会随着您的经验水平而增加和扩展。经验丰富的程序员不得不花费数月时间来追踪一个问题并不少见。如果结果特别讨厌,则单个错误。)

  • 不要害怕寻求帮助

    最后,如果您完全陷入困境并且不知道下一步该做什么,请不要因为寻求帮助而感到难过!

    程序员通常非常乐于助人。_我们_中的许多人也是自学成才的,因此了解作为初学者挣扎是什么感觉以及完全陷入困境是什么感觉。

    作为警告,请确保您已完成尽职调查(尝试分解问题、尝试调试、尝试谷歌搜索等),并确保您撰写了高质量的帖子。像任何亚文化一样,程序员往往有某些隐含的规则和期望。关键之一是您的问题应该写得很好(即使它是基本的)。

    有关更多信息,请参阅我们的提问指南。

  • 尝试参加更严格的入门课程

    此要点仅适用于您唯一接触编程的真正基础的 “编程入门” 课程(如 CodeCademy)。这类网站很适合让您_体验_编程是什么样的,并教授一些基础知识,但如果您试图提高到中级水平,则可能无济于事。

    作为一个好的经验法则,如果你参加的任何 “编程入门” 课程都没有真正挑战你,或者没有要求你完成练习和小型项目,你应该考虑找一门更严格的课程。不断练习(和奋斗!)是学习过程的重要组成部分。

有关进行此跳跃的更多观点、建议和建议,请参阅以下帖子:

我在哪里可以找到练习和项目想法?

项目思路:

如果您正在尝试制作一个项目,以下是一些您可以参考的想法列表以获得灵感:

想做一些具有挑战性的事情吗?尝试重新实施您每天使用的程序。例如,尝试编写自己的…

  • 命令行实用程序(ls、wget、curl 等)
  • 文本编辑器
  • IDE
  • 图像查看器
  • Office 套件(类似于 Microsoft Office 或 Libreoffice)
  • 编程语言(编写解释器或编译器)
  • 网页浏览器
  • 数据库(关系或非关系)
  • 网络服务器
  • 版本控制系统

练习练习:

以下是一些不错的网站 / 资源:

如何提高将任务 / 问题转换为程序的技能(算法思维)?

这是最常见的问题之一。

一般的答案是:通过编写大量程序。

但是,有一个简单的练习可以帮助您建立该技能:

  • 选择你每天都做的活动,比如做早餐或类似的事情。这应该不会太容易,但也不会太难。
  • 写下您应该为活动执行的步骤,但在与实际_执行_活动不同的时间执行。(写下下午做早餐的步骤。)
  • 下次您执行该活动时,记下您的笔记并尝试虔诚地遵循这些步骤。尽量不要偏离您写下的步骤,如果必须,请记下差异。
  • 改进你的算法,直到你满意为止。
  • 尝试不同的活动。任务变得越来越容易。

尽管听起来很愚蠢,但它确实有效。以上方法已经在许多学生身上进行了尝试,并证明可以产生显着的进步。

我无法为一个项目想出任何很酷的新想法。我只是缺乏创造力吗?其他程序员是如何受到启发的?

对于初学者来说,这是 Chuck Close关于(不是)等待灵感的一句好话:

我喜欢给年轻艺术家或任何愿意听我的人的建议是不要等待灵感。灵感是给业余爱好者的;我们其他人只是出现并开始工作。如果你等着乌云散开,一道闪电击中你的大脑,你就不会做很多工作。所有最好的想法都来自这个过程;他们来自工作本身。事情发生在你身上。如果你正坐在那里想出一个伟大的艺术创意,你可以坐在那里很长一段时间,然后才会发生任何事情。但是,如果你刚开始工作,你会想到一些事情,你会想到其他事情,而你拒绝的其他事情会将你推向另一个方向。灵感是绝对不必要的,而且在某种程度上具有欺骗性。你觉得你需要这个好主意才能开始工作,

只是坐在那里等待灵感的火花,你很少会得到想法。如果你继续尝试构建一些东西(任何东西!),你的时间会花得更多,即使这个想法看起来有些愚蠢或已经完成。

毕竟,这就是艺术家和音乐家所做的——他们不一定会从尝试创作极具创意的绘画或创作自己的音乐开始。相反,他们画风景或花瓶,或翻唱现有的歌曲。同样,在提出项目创意时不要感到有义务。重新实施现有程序是一项历史悠久的传统——看看你能走多远!

但无论如何,这里有一些其他想法和技巧可以帮助您提出自己的项目:

  • 尝试重新实现现有项目。 就像初学音乐家从翻唱其他人写的歌曲开始一样,从重新实现其他人制作的程序开始可能会很好。例如,2D 街机游戏是一种流行的选择——像 “Pong” 或 “Space Invaders” 这样的游戏对初学者来说非常可行,并且仍然会教给你很多东西。常见问题解答包含指向更多项目想法的链接
  • 尝试将编程与另一个爱好联系起来。 编程是一项非常有用的技能,您可以将其应用到_各种_领域,甚至是与计算机科学完全无关的领域。例如,如果您对政治感兴趣,您可以尝试分析投票池和趋势;如果您对音乐感兴趣,您可以尝试编写数字音板;如果您对体育感兴趣,您可以尝试编写梦幻足球追踪器或预测器,如果你拥有一家企业,你可以写一些东西来帮助你跟踪库存… 在这里,对计算机科学以外的兴趣很有用。
  • 试着记录让你恼火的事情。 如果你在生活中发现任何你不喜欢做的事情或发现重复的事情,问问自己这是否是你可以自动化的事情。要了解计算机可以自动化哪些类型的事情,请参阅自动化无聊的东西。本指南使用 Python,但您可以使用任何编程语言完成它提到的所有事情。或者,也许可以尝试使用谷歌搜索 “家庭自动化教程” 以获得更多物理解决方案。

我在哪里可以找到好的代码和项目的例子来研究?

在开始之前,请记住,学习现有代码不一定是学习编程的最佳方式。归根结底,编程是关于应用问题解决的,而更好地解决问题的最佳方法是通过大量实践。仅仅阅读现有的代码片段不太可能教会你太多。通常,当人们_学习_代码时,它是有针对性的和特定的。例如,如果开发人员对使用某个引擎编写游戏感兴趣,那么查看使用该引擎的各种演示的源代码会很有帮助。

无论如何,请尝试查看 Github 上的Showcases部分。它有大量流行和有趣的开源程序的精选列表,范围从图书馆和游戏到音乐和开放新闻 / 数据分析,并且很好地展示了人们使用代码所做的事情。源代码也是公开可见的,因此您可以尝试自己下载和修改这些项目。

另请参阅The Architecture of Open Source Programs,这是一系列免费电子书,其中包含有关流行的开源程序结构的更多指导性演练。该系列中的最新一本书 “500 行或更少” 可能是一个很好的起点,因为这些程序足够小,您可以自己修改它们并将它们用作开始您自己的项目的良好起点。

我如何学习典型计算机科学学位所涵盖的主题?

如果您对大学或学院级别的大多数标准计算机科学课程所涵盖的自学材料感兴趣,以下链接提供了一个很好的概述,以及指向其他学习资源的链接:

请记住,高质量的计算机科学学位往往非常严谨和苛刻。如果您有兴趣走这条路,您可能需要几年时间和大量的努力才能通过自学获得类似水平的教育。

如何开始和完成一个大型项目?

首先最重要的是:全面、全面地了解问题

通常,Rubber Duck 调试有助于这一步。向知识或理解为零的人(或事物)解释问题或概念有助于更深入地了解问题。通过这样做,人们必须对问题进行更多的思考,这将导致更深入的理解。

第二:不要直接对着电脑!

花大量时间思考问题 / 任务。创建一些草图,绘图,一些伪代码,一些简单的语言提示,任何可能有助于在纸上的东西(我在这里强调这一点,因为数字工具会分散手头的实际任务 - 只使用铅笔和纸或白板。)分析彻底解决问题。

这将我们引向以下内容。

自己处理大项目时要记住一件事:

世界上的一切都是由更小的部分组成的。

这意味着基本上你看到的任何大型机器、房屋、摩天大楼、汽车、火车、计算机等都是由许多较小的结构组成的,这些结构组合起来就是最终产品。较小的结构由较小的结构等组成。

这同样适用于大型程序。它们由许多较小的单元组成,这些单元耦合在一起形成一个整体。理想情况下(但通常不可能)每个较小的单元应该独立于其他单元工作(并进行测试)。

从小处着手。查看您选择的问题并尝试将其分解为更小的部分。冲洗并重复,直到你认为你不能再把它分开了。

一旦你达到了那个点,就开始编程。构建一小部分,测试它。构建下一个小部件,对其进行测试,等等。

不要看最终的大图,因为这会让你不知所措。一次处理一个单独的部分。

没有经验的程序员面临的最大问题是,当他们看到一个大任务时,他们大多会不知所措。但是这个问题并不太难克服:

不要试图看到所有花里胡哨的最终节目。专注于一个小的、可管理的部分,完成它,然后继续前进。即使是最复杂的程序 / 系统也由小而简单的部分组成。

我该如何跟上它?

想象一下,您正在为客户工作,并且客户需要在您开始编码之前查看并批准您的设计,因为他们可能有一个或另一个评论,或者他们想确保他们和您之间的沟通有效并且您理解他们要求。

  • 准备您的项目的详细描述,即所谓的 “功能设计规范”
  • 与您的想象中的客户讨论该功能设计规范(即向一些无生命的物体解释它,或者如果您有能够承受它的人,向他们解释)。
  • 完善功能设计规范——回到上面的步骤——循环直到你满意为止。
  • 准备具有固定(现实)截止日期的项目时间表
  • 坚持以上(因为否则假想的客户会要求可能会变得非常昂贵的滞纳金)

一些额外的建议:

  • 首先,完全忘记代码,完全从用户的角度想象程序。
  • 写下您希望软件执行的功能列表。
  • 写下软件没有的功能列表。(这将使您避免出现 “如果它可以做到这一点就很酷…” 的功能蠕变。程序变得太大是人们在几周后放弃它们的主要原因。)
  • 写出一些用户将看到的屏幕及其工作流程的图纸。这些不是蓝图或显示它们的外观,更多的是 “用户首先在此页面,然后他们可以转到此页面”。把它画出来可以帮助你不要忘记任何重要的事情。
  • 学习如何使用 git 并获得一个 github 帐户。它非常适合备份和征求代码审查。(忽略任何关于代码风格的评论,99% 的时间都是徒劳的辩论。)

共同的担忧和恐惧

我太老了,不能编码吗?

不,你可以在任何年龄学习编程,并且可能有这样的职业。

有一个普遍的误解,即擅长编程的唯一方法就是从小就开始学习编码。这是错误的——虽然有些人很早就开始学习编码(因此可能有一点领先),但大多数人会在进入大学或以后开始学习编码。

学习是您在任何年龄都可以做的事情——与其专注于他人,不如专注于自己和您的个人进步速度。尝试培养 “成长心态”,而不是 “固定心态”。

有什么我应该先学习的吗?

先决条件很少——在大多数情况下,您可以直接开始学习编码。

唯一真正的先决条件是:

  • 你知道如何打字(除非你使用像 Scratch 这样的拖放语言)
  • 你拥有一台电脑
  • 你知道如何独立谷歌 / 搜索答案

如果您了解一些数学(达到基本代数水平)和了解英语(因为许多在线资源都是英语),这也很有帮助,但这两个不是必需的。

如果您想在大学获得正式学位,上述所有内容或多或少都是正确的。大多数大学和学院都希望新生对计算机科学和编程一无所知,并且会从零开始教你(尽管在某些情况下,如果你通过了测试或展示了足够的先验技能,你可以跳过一两门入门课程)。如果你在高中或更早,并且想在大学学习计算机科学,那么提前开始学习可能会很好,但你不应该觉得有义务这样做。

一些大学也可能有更严格的通识教育或数学先决条件(例如,大多数大学都有微积分作为先决条件),但这会因大学而异,你应该直接调查并询问你所在的大学。重新有兴趣参加一下。请参阅下面的更多细节。

我必须擅长数学吗?

不一定 - 编程和计算机科学是一个广泛而广泛的领域,你是否需要擅长数学取决于你选择专攻什么学科。

例如,某些编程学科确实需要强大的数学技能。2D 和 3D 游戏会频繁使用向量、矩阵和线性代数;数据分析和机器学习利用了统计学和微积分的许多概念;如果您对代数和基本微积分有很好的掌握,那么计算算法的复杂性会更容易。

一般来说,主题越高级和复杂,你就越有可能需要有扎实的数学基础。如果您的目标是能够解决这些类型的复杂问题,那么拥有良好的基础将是无价的。

然而,正如计算机科学和编程的许多方面_都不_需要对数学有很好的理解。_你真正_需要知道的唯一事情是如何加、减、乘和除,也许还有一点基本的代数。许多程序员在整个职业生涯中几乎不需要做任何数学运算。

特别是,许多面向产品的角色(例如 Web 开发、移动开发)需要非常少的数学知识。在这些子学科中,最重要的是您编写健壮且可维护的代码的能力,以及您弄清楚如何构建对您的用户有价值的东西的能力。

无论如何,如果你数学不是很好,你绝对可以学习和提高!毕竟,你大概也不是很擅长编程,但是你在这里,学习编码。查看可汗学院,您可以找到从基础数学开始的免费课程。另请参阅/r/learnmath以获取更多资源。

但是请注意,如果您有兴趣获得计算机科学_学位,答案会有所不同。_许多大学或学院在您进入专业或研究生(微积分课程等)之前需要满足特定的先决条件。而且,由于计算机科学在一定程度上是应用数学,你几乎肯定会在获得学位的同时学习离散数学、写证明和其他类似主题。为了学习这些主题(或任何数学主题,真的),你不需要天生就擅长数学,但是拥有一些数学成熟度肯定不会受到伤害,并且可能会使学习过程更加顺畅。

CS 学位在数学上的侧重程度因学校而异。一些学校非常重视涵盖理论,而另一些学校则不强调两者,而偏向于专注于应用。(有些学校强调两者)。如果您想了解更多信息,您应该直接调查您有兴趣参加的任何学院或大学的学位要求和结构。我们将无法轻易预测某些特定大学将向哪个方向倾斜。

总而言之,如果你想成为一名成功的开发人员,你不一定需要擅长数学。如果你想成为一名计算机科学家,你最终会学到相当多的数学知识。如果你想解决更难的问题 / 在某些领域,数学可能是一个有用的工具,具体取决于具体情况。

在我开始之前,我经常谷歌或者不知道如何完成一些事情。这样可以吗?

的。是一个从多个角度讨论该主题的线程。还有很多类似的。

编程难吗?

编程就像大多数技能一样:学习基础知识和应用它们相对容易。如果您想学习打保龄球,您将弄清楚如何将手指伸入孔中,然后将其沿销钉的大致方向夹住。你甚至可能会撞倒几个,并且不会觉得特别困难。

编程也像大多数技能一样,从初学者到具有一定技能的人需要更多的参与。继续打保龄球类比:如果你想成为一名比赛投球手,你将不得不花费数年时间来掌握这项技能。编码也是如此:您将需要花费一些(即很多)时间来试图弄清楚为什么这个愚蠢的程序即使您检查了3 次也无法工作. 您将需要阅读书籍,完成课程并与人们谈论它。你要学习行话。您还将专攻专业——深入了解一些小领域。所有这些仍然使用编程的基础知识,但是以新的方式和新的组合。为您的问题找到解决方案将很困难。在同一个问题上集中几个小时是很困难的。没关系,因为如果你喜欢它,并且你有动力 - 困难的部分不会感觉那么难,你可以通过它们。

总之,编程可能很困难。就像大多数事情一样,这需要努力,而这种努力可能很艰难。不要气馁——如果你喜欢它,困难的部分将是值得的。

初学者在问题和练习上遇到一些麻烦是正常的吗?

初学者从自行车上摔下来几次正常吗?初学者学游泳时会下沉几次正常吗?初学者在学习乐器的时候漏音或弹错音符是否正常?初学者烧饭是正常的吗?初学者在健身房锻炼时努力完成他们的代表是否正常?

绝对没错!

失败和挣扎是学习过程中非常重要和自然的一部分。失败会教你如何_不做事_,并就你对某事的理解程度提供有价值的反馈。失败只是_获得经验_的另一种说法。

失败和挣扎是每个初学者都会经历的事情:你_应该_挣扎。因此,与其感到气馁,不如接受这一点:奋斗是你在挑战自己的标志。将其用作指南,以帮助您确定接下来需要查看和学习哪些材料,或者您应该提出哪些问题。

即使是专家在需要学习新材料时也会失败和挣扎(尽管他们往往更善于恢复 / 利用失败来帮助他们加速学习)。

事实上,如果你_没有_挣扎,这表明你几乎可以肯定做错了什么。如果一切都很简单,那就意味着:

  1. 你不是在挑战自己
  2. 你不会强迫自己去学习一些真正的新东西
  3. 你并没有强迫自己通过尝试应用它来真正确保你理解了这些材料

这类似于锻炼。如果您在锻炼后不感到身体疲倦,那么您真的从锻炼中收获很多吗?同样,如果您在完成一些编码挑战后没有感到精神疲倦或精神受到挑战,那么您真的学到了什么吗?


关于学习的问题

“知道一门语言” 或 “知道如何编程” 是什么意思?

为编程 “了解一门语言” 类似于为口语而了解一门语言。当你可以有效地使用它时,你可以说你知道它,即使你不知道它的 “一切”。“知道如何编程” 通常意味着您了解与编程相关的概念,并且您可以在一种或多种语言中有效地使用它们。阅读有关该主题的一些过去线程。

我刚开始学习 X 语言。我应该开始学习 Y 语言吗?

尤其是当你开始学习如何编程时,最好学习一门语言并坚持一段时间。即使一个特定的问题领域使用了一种你还不知道的特定语言,首先要学习_如何编程_。一旦你了解了基础知识(流程控制、错误处理、I/O、算法的实现、数据结构等),你就可以开始担心选择不同的语言了。

我应该一次学习一种以上的编程语言吗?

除非您有充分的理由,否则大多数初学者应该只使用一种语言至少几个月。这是一种更有效的学习方式,原因如下:

  1. 大多数语言的基础非常相似。例如,大多数语言以几乎相同的方式处理 if 语句。花时间学习两种基本相同的材料并不一定是一种很好的时间利用方式,并且可能会让初学者感到困惑。
  2. 学习如何编程最难的部分_不是_学习编程语言的工作原理:而是学习如何用代码_解决问题。_因此,您希望最大限度地利用代码练习解决问题的时间,而不是花时间学习更多特定于语言的细节 / 不得不浪费脑力来跟踪语言之间的差异。
  3. 一旦你熟练掌握了第二语言并获得了强大的解决问题的能力,学习第二语言就容易多了。

本指南有一些例外情况。在以下情况下,可以与第一语言一起学习第二语言:

  1. … 第二语言不是编程语言。例如,在学习编程语言(例如 C、C++、C#、Java、JavaScript、Python、Ruby)的同时学习_标记语言_(例如 HTML 或 CSS)会很好。
  2. … 对于您感兴趣的项目类型是必要的。保持自己继续学习的动力很重要,如果这意味着同时学习两种编程语言,那就这样吧。
  3. … 如果您有专门的老师或导师来指导您。称职的老师和导师可以帮助大大简化您的学习过程,这将弥补任何低效。

如果您不认为自己是初学者并且对使用您的编程语言完成中等复杂的项目感到自在,那么尝试一次学习多种语言当然没问题。此时,您应该对编程有足够的了解,可以开始加快学习新语言的速度,并且应该很好地了解自己一次能够学习多少。

我怎样才能获得 / 保持学习编程的动力?

查看/r/GetMotivated//r/GetDisciplined

然而,我们经常认为 “如果我有足够的动力…… 那么我可以……”;驱动动力的是行动。首先是行动,然后是动力。查找要创建的小型特定程序。摆脱干扰。获取浏览器插件以阻止 Reddit、Facebook 和 Twitter 等网站。花一点时间想象一下当你成为一个知识渊博的程序员时会有多棒的感觉。

以下是有关此主题的一些过去线程:


我如何开始使用 X?

如何开始制作视频游戏?

现代视频游戏是使用游戏引擎制作的:处理图形、声音、物理和网络等复杂任务的软件库。有许多可用选项- 但是,强烈建议初学者使用以下引擎,因为它们可以免费开发并拥有最好的学习文档:

  • Unity (C#):适用于 2D 和 3D 移动、桌面、浏览器 / 在线和控制台游戏
  • Construct2 (JavaScript):用于 2D 移动、桌面、浏览器 / 在线
  • Pygame (Python):用于 2D 桌面游戏的引擎
  • LÖVE (LUA):适用于 2D 桌面游戏

永远记住,你的目标是开发游戏,而不是引擎

引擎将帮助您开始使用游戏的图形和用户控件,但您仍然需要彻底学习编程语言来编写游戏逻辑- 所以选择一本好的书籍在线资源

最重要的是:从简单开始。您会想立即潜入并创建您的梦想游戏,但请记住,爬山的唯一方法是迈出许多小步。以下是按难度升序排列的简单练习游戏列表 - 在直接跳到最终目标之前,请考虑尝试其中的一些游戏:

请务必查看/r/gamedev常见问题解答,阅读/r/gamedev “如何开始” 指南,并在/ r/gamedev 和/r/learnprogramming上搜索过去的线程。

我如何开始制作网站 / 制作网页应用程序 / 进行网页开发?

学习 Web 开发有很多不同的方法,但总的来说,您需要的核心技能通常分为_前端_技能(在用户的 Web 浏览器上运行的代码)和_后端_技能(在您的服务器上运行的代码)。

通常,大多数人会建议您从学习 HTML、CSS 和 Javascript(按此顺序)开始,它们是在每个 Web 浏览器上运行并构成每个网站的三种核心语言。

您可以在 / r/webdev 常见问题解答中找到更多信息。这是另一个面向初学者的在线课程、教程和资源列表。

如何开始制作移动应用程序 / Android 应用程序 / iOS 应用程序 / Windows 手机应用程序?

您需要为每种类型的智能手机学习不同的编程语言。

您还可以使用PhonegapTitanium等技术制作可以在所有三种主要智能手机上运行的应用程序——它们允许您使用 HTML、CSS 和 Javascript 编写一次应用程序,并在任何平台上运行您的应用程序。

有关详细信息,请参阅移动应用程序开发资源列表。这是关于该主题的过去线程:http 😕/redd.it/352f09

但是,请记住,上述资源中的许多(如果不是全部)都是面向已经有一些编程经验的人的。如果您以前从未编程过,您_可能_希望从学习一种具有更多面向初学者的资源的语言开始。一旦您获得了一些经验,并了解了编程背后的基本概念,您通常会发现学习一门新语言并开始学习移动开发要容易_得多。_我们的常见问题解答中的 “入门” 部分包含有关从何处开始的更多信息。

我如何使事情自动化?

对于_Windows_,有几种专用的编程语言,例如AutohotkeyAutoIt

另一个可行的跨平台替代方案是Python用 Python 自动化无聊的东西是一个很好的学习资源。

如果您想自动化_MS-Office_,请使用内置的编程语言_Visual Basic for Applications_ (VBA)。/r/vba专用于 VBA 编程。


什么是最好的…

/u/thekodols 在这篇文章中汇总了 150 多个 “什么是最好的” 问题和答案,涵盖各种语言、工具和主题


术语和词汇

计算机科学,计算机工程,软件工程,编程和编码之间有什么区别?

CS/CE/SE 与编程 / 编码

计算机科学 (CS)、计算机工程 (CE)、软件工程 (SE)、编程和编码都是相互关联但又存在细微差别的术语,初学者通常很难将它们区分开来。

您应该做的第一个区别是区分 CS/CE/SE 和编程 / 编码。CS、CE 和 SE 都是研究领域。说 “我正在学习计算机科学” 类似于说 “我正在学习化学” 或 “我正在学习文学”。相反,编程和编码是活动——它们是你做的事情。打个比方,学习 CS/CE/SE 就像学习音乐理论,而学习编程 / 编码就像学习如何演奏特定乐器。

从理论上讲,您可以学习一个而不学习另一个,但是如果您同时学习两者,您的经验将会更加丰富。

另一个区别是,虽然 CS/CE/SE 是您可以学习的东西,但学习编程只能通过实践来实现。事实上,大多数大学和学校都会做的是正式教授一种语言来教授编码的基础知识,然后专注于教授 CS、CE 和 SE,让你通过练习和完成作业来学习如何编程。

CS vs CE vs SE

您应该区分的下一个是 CS、CE 和 SE。简而言之,尽管有很多重叠,但 “计算机科学” 与计算机或科学几乎没有关系,更多的是研究可计算性概念的应用数学领域。计算机工程与 CS 类似,但倾向于更多地关注较低级别的硬件——它就像计算机科学和电气工程之间的交叉。最后,软件工程更多的是关于如何构建大型和复杂的程序,同时防止它们因自身的重量而崩溃——它就像 CS 和 CE,但理论较少。

你可以在这里找到更详细的概述:http 😕/www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/

编程与编码

最后,你有编程与编码。这两个术语之间的区别非常小——许多人可以互换使用它们。一般来说,“编程” 一词似乎比 “编码” 具有更积极的含义。如果说 “我是程序员”,则暗示了一定程度的专业性——表明你不仅会写代码,而且对基础和理论有一定的把握,懂得如何与客户沟通和工作与他人等

相反,如果你说 “我是一名程序员”,通常意味着你的注意力完全集中在编写代码上,而不是其他事情。

但是,在这里,不同的含义再次非常小——在绝大多数情况下,您可以互换使用这两个术语。

C、C++、Objective-C 和 C# 之间有什么区别?

TL;DR - C、C++、Objective-C 和 C#不是同一种语言的不同风格。

C 是这些语言中最小和最古老的。它最初是作为 Unix 操作系统的系统编程语言而创建的,至今仍广泛用于应用程序编程。

C++ 是一种非常流行的通用编程语言,最初基于 C。通过一些调整,大多数 C 代码都可以编译为 C++ 代码。然而,C++ 添加了大量的语言特性,这些特性极大地改变了语言的使用方式,与 C 的使用方式相比。在 C++ 中编写 C 风格的代码通常被认为是一种不好的做法。

Objective-C 是 C 的严格超集,这意味着所有有效的 C 代码也是有效的 Objective-C 代码。Objective-C 不像 C 或 C++ 那样流行,目前主要用于 Apple 的 OS X 和 iOS 平台的开发。

C# 在任何技术意义上_都不_是基于 C 的。C# 是由 Microsoft 设计的通用语言,在许多方面与 Java 相似。它编译为在虚拟机 (CLR) 中运行的中间形式,与之前的三种语言都编译为本机代码不同。虽然 C# 从 C 和 C++ 中借用了句法元素(就像 Java 一样),但它与这些语言没有真正的技术关系。

Java 和 JavaScript 有什么区别?

Java 与 JavaScript 的关系就像葡萄与葡萄柚的关系一样。

与上一个问题类似,Java 和 JavaScript 在任何技术意义上都没有关系。它们共享一些语法,因为它们都受 C 的影响,但仅此而已。Wikipedia 很好地解释了为什么存在名称相似性:Wikipedia: JavaScript and Java

类与接口

这是一个经常出现并且经常使初学者感到困惑的问题,因为在外面看起来两者似乎都在做类似的事情。

/u/donsagiv写了一个伟大而简单的 ELI5(链接到原始评论):

童子军有徽章可以让他们做某些事情,例如做饭、游泳、生篝火、划独木舟等。童子军并不关心他们是如何做到这些事情的(即用乳房游泳——中风、仰泳等),只要它们符合规格(能够在漂浮的同时通过一定的、受控的身体运动在水中移动)。每个童子军可以有零个或多个徽章,这意味着他们被证明可以做徽章所赋予的每件事。

尽管如此,他们仍然是童子军。每个童子军都可以参加他们的定期会议,穿上他们的制服,等等…… 一个童子军不需要徽章就可以游泳。但是,除非他们有游泳徽章,否则他们不能去漂流。编辑:游泳徽章不能自己游泳。这只是一个指标,表明它所附着的童子军会游泳。

童子军是类,游泳徽章是它实现的接口

被实例化的类的每个对象都具有相同的功能(即参加定期会议、制服等)。如果该类实现了一个接口,则该类必须能够执行该接口中指定的功能(即游泳、划独木舟)。某些类不能在代码的某些部分中使用,除非它们实现了该接口(例如,漂流需要游泳徽章)。编辑:接口是一种抽象,所以它不能被实例化。(徽章本身不会游泳。)总而言之,接口是类必须遵循的契约,以便类实现它。

接口和类在不同语言中的行为不同(我的示例来自我在 C# 中使用泛型所知道的)。我建议您仔细阅读您的语言的文档。

接口也可以用来收集来自不同类的对象(它们就像数据类型一样)。

你可以收集所有会游泳的童子军,不分国籍、性别、年龄等,去河上漂流。你不需要知道任何关于个别童子军的事情,但你知道他们每个人都会游泳。


工具和版本控制

什么是源 / 版本 / 修订控制?我应该使用它吗?

版本控制系统 (VCS) 是一种跟踪代码更改的工具,并允许您执行一些方便的操作,例如撤消编码错误并查看代码随时间发生的变化。现代分布式版本控制系统 (DVCS) 还允许您轻松地与其他程序员一起处理相同的代码。是的,您绝对应该使用版本控制系统!

两个最流行的 DVCS 是 git 和 Mercurial;您使用的主要取决于个人喜好,但我们_强烈_建议您使用其中一种。

那么如何开始使用修订控制呢?

您可以通过阅读由 redditor 编写的 git 入门以及免费的 git book来开始使用 git 。

关于 Mercurial 的一个很好的简短教程在这里

我们的工具页面上有两个软件的下载站点链接。

什么是 IDE?我应该使用一个吗?

IDE 是一种集成开发环境,它是一个 GUI 应用程序,通常包括具有代码完成和语法突出显示的文本编辑器、一些项目管理功能、编译器或解释器(可配置或包含)以及许多其他用于编写的花哨功能,运行和测试代码更容易。使用 IDE 的替代方法是自行执行 IDE 自动为您执行的操作。这种方法需要程序员使用单独的工具,并且对开发过程有更深入的了解。

对于初学者来说,这两种开发方法都有争论:

  • 使用 IDE 意味着您不必对开发过程有太多了解,不必使用命令行界面,也不必配置这些工具以正确协同工作;IDE 提供了一种快速构建代码的方法,甚至可以为您编写一些代码!
  • 另一方面,从命令行工作意味着您不必适应 IDE 设计人员的思维方式,并且由于对您隐藏的开发过程更少,您可以更好地了解软件构建过程。

IDE 与单独工具的使用通常归结为个人喜好问题(当然,除非您的雇主 / 学校需要使用特定的开发环境)。如果您以前从未使用过 IDE,请下载一个流行的 IDE 并对其进行修改。如果您从未使用过 vim 或从命令行编译过代码,请尝试一下,看看您是否喜欢它。可以在Programming Tools中找到常用 IDE 和轻量级文本编辑器的列表。


计算机和操作系统

我应该使用什么样的操作系统?

许多初学者的一个常见问题是他们应该使用哪种操作系统——Windows、Mac 或 Linux。

老实说,这并不重要——在这个时代,您可用的工具的质量和成熟度在所有平台上都将大致相同,任何体面的编程语言都可以在所有操作系统上使用。

话虽如此,您最终应该对所有三种操作系统都有一定程度的熟悉,这样当您遇到一种新的操作系统时(例如,当您远程连接到另一台机器或到达一个新的操作系统时,您就不会完全迷失方向)工作)。

此规则有两个主要例外:

  • 如果您想进行 Windows 特定的开发,请获得一台 Windows 计算机。
  • 如果您想做 Mac 或 iOS 特定的开发,请使用 Mac。

在其他平台上运行 C# 代码有很多不错的选择,但一些 Microsoft 和 .NET 工具仍然主要针对 Windows。

虽然您可以在任何计算机上开发 Mac 和 iOS 应用程序,但您必须在 Mac 机器上使用 Xcode 来编译您的应用程序并将其提交到应用商店。

最后,还值得注意的是,一旦您选择了一个操作系统,您就不会被 “锁定”——始终可以运行安装了另一个操作系统的虚拟机 (VM)。例如,如果我拥有一台 Windows 计算机,那么设置一个我可以使用的 Linux 虚拟机将非常容易,而不必担心它会干扰我现有的 Windows 操作系统。

我应该买什么样的电脑 / 笔记本电脑?

同样,这并不重要——任何中档笔记本电脑或计算机都应该这样做。如果您已经拥有一台电脑或笔记本电脑,您应该直接使用它而不是购买一台新电脑。基本上,您可以学习编程,并且可以在几乎任何现有的计算机上编写复杂而有趣的程序。

如果您基本上一无所有并且没有任何可用的计算机,您可以随时在 Craigslist 之类的地方查找二手计算机,或者四处打听。如果只是为了学习,你可以用一台旧电脑走得很远。

但是,如果您碰巧需要购买一台新计算机并想将其用于编程,则应优先考虑 CPU、RAM 和硬盘空间。如果可能,请尝试获取具有以下规格或更好的计算机:

  • 英特尔 i5 CPU (3.0+ GHz)
  • 4+ GB 内存
  • 200+ GB 硬盘
  • (可选)固态驱动器

如果您可以升级,那么优先考虑获得更好的 CPU 和更多 RAM 而不是获得更大的硬盘驱动器可能是安全的——更强大的 CPU 总是有帮助的。相比之下,大多数类型的编程不需要你有很多磁盘空间:唯一的例外是如果你试图对图像或视频做一些事情,或者如果你想下载和分析大型数据集,同时学习机器学习和类似的东西(如果归根结底,您通常可以将这些东西存储在云中)。

如果您想购买台式机,这些规格确实是唯一相关的。如果你想要便携性,你应该购买一台笔记本电脑,并确保它配备了足够大的屏幕和键盘以方便编程。但是,笔记本电脑的可用性和便携性之间存在很好的平衡:

  • 屏幕越大,电池寿命越短(但您愿意设置屏幕亮度的调光器,电池寿命越长)
  • 屏幕越小,你可以装在它上面的东西就越少,你必须在窗口 / 桌面之间进行更多的翻转。
    • 理想情况下,您应该能够舒适地并排放置 2 个窗户
  • 笔记本电脑越大越重,随身携带也越重

还值得问问自己打算如何使用笔记本电脑。你打算把它整天放在你的桌子上,还是带着它在校园里到处走,或者带着它去育空地区远足?

如果可能,请尝试亲自测试您正在考虑的笔记本电脑。例如,如果您发现在特定笔记本电脑的键盘上打字很不愉快,而且您无法习惯,那么您可能希望通过该笔记本电脑,无论它在纸上看起来多么好。

如果您还想购买笔记本电脑为大学或学院的课程做准备,您可能想尝试查看他们的网站 / 他们的计算机科学或软件工程部门的网站,看看他们是否有任何更具体的建议和建议。

如需更多信息和更详细的帮助,请访问以下子版块以获得更多个性化推荐:

您可能还需要谨慎购买 Chromebook——它们需要一定程度的定制,或者需要您使用在线编辑器和 IDE 并需要持续访问互联网。有关详细信息,请参阅以下链接:

在尝试使用平板电脑或手机作为主要编程设备时,您应该更加谨慎。虽然可以通过一些努力使用平板电脑或手机进行编程,但几乎所有软件开发都是使用台式机或笔记本电脑使用键盘完成的。

如果您需要有关选择特定品牌的建议,请记住,编程不需要您的计算机有任何特殊功能。这意味着一台好的通用计算机很可能是一台好的编程计算机。(这使得寻找一台好的笔记本电脑变得更加容易,因为您无需尝试搜索专门针对程序员销售的笔记本电脑。)

最后一个可选限制:如果您对机器学习、自然语言处理或图形(包括游戏开发)特别感兴趣,您可能需要考虑购买配备 GPU 的机器。虽然您不需要 GPU 来执行任何这些操作,但您通常可以通过仔细编写代码来加速您的代码,以便它利用 GPU(如果可能)。

如果您对机器学习或 NLP 更感兴趣,请注意,您可以通过亚马逊网络服务 (AWS) 或谷歌计算引擎 (GCE) 等服务以相对便宜的价格在云中租用带有 GPU 的机器。


职业和工作

我可以通过编程赚很多钱吗?

也许吧,但前提是你擅长它。但是,您也可以作为管道工或在任何其他数量的企业中赚很多钱。你也可能失败得很惨。编程不是一项有保证的、安全的工作。

我可以在没有计算机科学学位的情况下获得编程工作吗?还是根本没有学位?

是的,是的。

没有 CS 学位的工作是可能的,而且一般来说没有学位,但可能性会降低。绝对不建议退学。如果编程不适合您,请转专业。如果适合你,那么在完成学业后留在学校会给你最好的工作机会。

如果您在 / r/cscareerquestions/r/cscareerquestionsEU中发布这些和其他面向职业的问题,您可能会得到更明智的答复。

我如何进入这个行业并获得一份入门级的工作?

这个问题再次超出了这个 subreddit 的范围——与职业相关的问题最好在/r/cscareerquestions和咨询他们的综合 wiki上提出。如果您居住在欧盟,另请参阅/r/cscareerquestionsEU 。

但总的来说,假设您已经知道如何编码,获得入门级工作有两个主要阶段:

  1. 建立一份足够突出的简历,人们开始邀请你面试
  2. 通过面试

这两个阶段需要不同的策略。

第 1 阶段:制作一份引人注目的简历

在第 1 阶段,您的目标是稳步开始在简历中添加项目,以帮助您脱颖而出(或至少帮助您与任何其他正在申请的申请人相媲美)。

这样做的一个特别有用的策略是开始建立一个重要的项目组合,你可以向潜在的雇主炫耀。您的投资组合可能包含以下任何内容:

  • 独立副项目
  • 志愿工作——例如,可能为某些非营利组织制作网站
  • 班级项目
  • 你在工作中所做的工作,你找到了一种整合编程的方法
  • 你在学校为俱乐部做的技术工作——也许某个俱乐部想要一个新网站,或者你可以找到一个专注于技术的俱乐部
  • 一个研究项目——可以是独立的,也可以是你作为学校实验室的一部分所做的研究
  • 过去工作或实习的项目

拥有强大的投资组合表明雇主可以成功地应用编程语言、库和技术来解决问题,并为他们提供一种更准确地衡量你的技能水平的方法。(而且,事实证明,从事不平凡的项目也是提高总体技能水平的更好方法之一!)

换句话说,你想确定你有成功构建相对复杂的东西的记录。如果您之前在该领域没有任何工作经历,那么从事项目工作是更好的方法之一。

一些附加说明:

  • 您的项目不一定需要在视觉上浮华。大多数招聘人员会专注于您的简历(而且通常只会阅读_您_的简历!),具有技术背景的招聘人员会明白,并非所有有趣的项目都具有或需要流畅的界面。可能更重要的是,您可以在简历上诚实地描述您的项目,以展示您所做工作的复杂性。

    也许主要的例外是如果您申请的角色需要一些视觉天赋。例如,如果您正在申请前端网页设计师的角色,那么拥有表明您可以制作精美且可用的网站的项目会有所帮助。

  • 当然,从事项目并不是您唯一可以做的事情。获得学位(最好是与计算机科学相关的学科)之类的事情也肯定会有所帮助。请记住,许多求职者还将拥有与技术相关的学位,因此仅仅拥有一个可能不足以帮助您脱颖而出——您还需要充分利用学校提供的任何课外机会. 好的学校会有很多潜在的副项目,如果你稍微挖掘一下,你就可以参与其中。获得那些潜在的副项目是支付学费的最大好处之一。

  • 有些人还参加训练营,部分原因是为了加快建立相关简历 / 作品集的过程。请务必在参加训练营之前进行研究:有些很棒,有些则是彻头彻尾的骗局。在参加任何一个训练营之前,请尝试在 Linkedin 等网站上联系该训练营的校友,了解他们的感受,尝试查看训练营是否报告CIRR的统计数据,尝试询问各种不同社区的人(不仅仅是 reddit )… 另请参阅/r/cscareerquestion 的关于 bootcamps 的常见问题解答部分

  • 如果您的简历没有引起太多关注,请尝试将其发布在/r/cscareerquestions/r/cscareerquestionsEU的每周简历审查线程上以供审查。

第二阶段:通过面试

第 2 阶段(通过面试)的具体情况可能因地区而异。例如,许多硅谷式的公司更喜欢询问数据结构和算法问题,所以如果你打算申请那些在该主题上有扎实基础的公司是必须的。世界其他地区或其他类型的公司可能不一定是这种情况。

您可能会遇到的一些常见面试原型包括:

  • 给你某种编码挑战,通常是关于数据结构和算法的——尤其是在入门级。要详细了解这些类型的面试以及如何为它们做准备,请考虑购买或借用 “Cracking the Coding Interview” 的副本。
  • 问你与你正在面试的特定角色相关的问题——例如前端网页设计、安全、数据科学…
  • 要求您将程序与您的面试官配对,您可以在其中协作构建或调试一个小程序
  • 要求您完成某种带回家的挑战
  • 要求您尝试设计一些更大程序的高级架构
  • 询问您在简历中列出的项目(有时是一般性的,有时会深入关注单个项目)
  • 只是讨论一般的技术

注意:这不是一个详尽的列表。您还应该记住,不同的雇主会寻找不同的东西,并且在一个领域常见的面试做法在另一个领域可能几乎完全闻所未闻。因此,我们强烈建议您与您当地的开发人员建立联系,并向他们寻求建议。

另请参阅/r/cscareerquestions 的wiki——如果您居住在欧盟,也许还可以查看 /r/cscareerquestionsEU。


现在我该怎么办?

不再是初学者:

总有一天,每个程序员都长大了,他们面临一个问题,他们陷入了现实世界。在现实世界中,没有牵手,也没有大的引导。相反,您需要学习如何走自己的路。如果您已经走到了这一步,那么您应该有一个感兴趣的领域,可能只是通用编程、Web 开发、算法或类似的任何东西。也许,您想了解其他涉及编程的不同领域,或者您只是想知道下一步该做什么。

编程只是一个工具

当你开始编程时,你可能想知道什么时候可以学习创建下一个 Reddit,或者什么时候可以学习制作那些精美的图形,或者如何执行不同的算法。好吧,如果您认为自己不再是初学者,那么您的工具带下就有了编程。现在你需要学习如何应用它,以及如何加强它。很快你将能够做这些事情,并了解它们。

提高你的编程技能

许多人在编程时面临着自己能力不足的恐惧。因此,许多人希望提高他们的编程技能。但是,在这个阶段,只有一种方法可以做到这一点,那就是练习。有许多专门用于练习的站点和位置,例如/r/dailyprogrammerCodeWarsHackerRankProject Euler等等。


杂项

我在哪里可以获得实时帮助?(例如通过不和谐,IRC)

有关附属社区的列表,请参阅发布指南 > 相关社区——尤其是 “实时帮助” 部分。

请注意,/r/learnprogramming与该页面上列出的任何社区都没有正式关联。所有列出社区的审核团队都与此不同且独立。

如何教孩子编程?

尝试检查/r/ProgrammingForKids/r/CSEducation。两个子版块都将包含有用的资源和关于如何教他人的建议。

您还可以尝试运行此查询以查找有关此问题的过去讨论。

一些通常推荐的资源包括:

  • 来自麻省理工学院的 Scratch,一种专为 8 至 16 岁儿童设计的编程语言。这种语言基于浏览器,无需安装任何软件。
  • Code.org,一个收集有关教孩子编程的资源的网站。
  • testtogether.tech,一本免费的书,面向那些没有教 CS 经验并希望学习教学最佳实践的人。

我如何为开源项目做出贡献?

参与/r/learnprogramming github 组中的其中一个项目!该小组由 jfredett 创建,其明确目的是为新程序员提供项目,以通过与更有经验的程序员作为导师进行互动来学习如何为开源做出贡献。

该小组仍处于起步阶段,但有几个人正在努力使其启动和运行。

以下是一些包含项目链接的网站,这些项目正在积极寻找各种经验水平的贡献者,并且通常会链接到对初学者来说非常容易接近的开放错误或问题。

以下是一些过去关于开源项目工作的主题。

我对 C/Python / 某些特定语言有疑问

尝试咨询我们特定语言的 wiki 以查看您的问题是否在此处列出:

我的问题不是其中之一。现在怎么办?

查看适用于初学者的快速故障排除指南和您使用的语言的常见问题解答页面,看看是否在任一位置都得到了回答。如果没有,请离开!

还请尝试查看我们的相关社区列表

是的,我要问的问题在常见问题解答中,但我想从真实的人那里得到答案。

此常见问题解答以及 / r/learnprogramming wiki 中的其余页面均由社区编辑。这些答案是社区的产物,并且来自真实的人。如果您的问题列在常见问题解答中,那是因为它之前已经被问过很多次了。此常见问题解答是对这些问题的常见和公认答案的集合。在要求人们花时间对反复提出的问题进行个人答复之前,请考虑您的问题是否真的与常见问题解答中的回答有很大不同。

如果您的问题确实有很大不同,并且此常见问题解答中的答案不令人满意,那么请在您的帖子中表明您已阅读常见问题解答,并准确说明您的问题有何不同以及此处的答案对您没有帮助。这将表明您已经努力寻找问题的答案,这将有助于集中回答您的问题。

如何编辑/r/learnprogramming wiki(包括此常见问题解答)?

我们鼓励您做出贡献,但目前该 wiki 是_版主编辑,只是_为了防止垃圾邮件发送者不受控制地添加他们的链接。请向版主发送一条消息,其中包含您想要添加 / 更改的信息。如果建议不合适,版主仍保留拒绝更改的权利。

最后修订者

解调器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值