我想学习编程, 但不知道从哪里开始 —— 如何学习编程

我想学习编程, 但不知道从哪里开始

原文地址: I Want to Learn Programming but I Don’t Know where to Start

原文作者: Robyn Silber

译文地址: 我想学习编程, 但不知道从哪里开始

译者: 朴瑞卿

常常被问的问题

作为导师, 笔者经常被问到以下问题:

  • “如果我是新手, 我应该学习哪种编程语言? ”
  • “哪种编程语言最适合工作? ”
  • “最流行的编程语言是什么? ”

顶级编程语言

如果您正在寻找顶级编程语言的官方排名, 可以在这里找到: IEEE Spectrum top programming languages

该列表很适合检查指定的语言是否还在广泛使用. 但如果您不熟悉编程, 笔者建议您不要仅仅通过这个列表来选择一门语言.

译者注: PHP不一定是最好的开发语言呢…(破音)

如何选择一门编程语言

计算机科学完全是一个累积研究领域. 这意味着, 每一个后续的知识点都是以先前的知识点为基础.

如果您曾在学校中竭尽全力学习编程(或任何其它科学领域)但失败了——或许问题并不出在你身上. 任何累积性学科的优秀教授都去会精心规划课程. 只要每个学生都充分准备并满足前提条件, (教授)对于学生的先验知识的预期就应该是明确的. 一个好的教授理解这种预期并且假定没有超出该范围的知识. 因此, 任何超出预期范围的知识点都必须要进行教授. 课程中的每个知识点都是循序渐进的.

当一个学科是累积性的, 在设计课程或学习路径时必须一丝不苟.

综上所述, 不要依据排名选择语言. 选择一种您拥有完整的学习路径且无需对先验知识进行任何假设的语言.

译者注: 选择编程语言要进行综合考量, 如语言学习曲线、社区活跃度、职位需求量(如果您是为了工作的话)、您自身的基础及意向从事的行业领域等

几句忠告

在开始学习编码之前, 请务必反复思考一下笔者的观点: 计算机科学中的一切都循序渐进的.

我喜欢重申这一点, 因为有追求的程序员可能犯的最大错误就是, 由于错误地认为自己不够聪明去学习编程而放弃. 学习编码与您的智力无关. 诚然, 学习编程很难, 但这并不是取决于您是谁, 而是由于有太多的知识点需要学习.

首先, 请接受以下即将发生的情况: 为您介绍一个对您完全没有意义的新知识点.

这种情况将一遍又一遍地发生. 每次发生这种情况时, 您的处理方式将决定你的成就.

如果当前你正在学习的知识点对你而言很无厘头, 请停留在当前位置, 暂不要进行下一个知识点. 重申一下, 这些知识点是循序渐进的. 略过前面的知识点无异于搭建空中楼阁.

译者注: 我有一招从天而降的掌法, 少侠要不要学? —— emmm… 我还是先锻炼身体吧

我发觉自己始终处于这种情况. 常常不得不多反复观看同一视频教程讲座, 以掌握所学的内容. 如果您发现自己和笔者的处境一样, 请不要气馁.

如果您使用的辅导资料(或书籍)没有充分诠释该知识点, 那么务必去寻找其他适合您的资源. 没有任何理由因辅导资料所涵盖的知识点对您没有用处而放弃. 您可以在YouTube上免费找到几乎所有想要学习的内容. 找出要搜索的内容(例如, [您的编程语言]中的[知识点] +其他任何有用的关键字).

如果您正在YouTube上寻找教程, 请先查看统计信息. 快速浏览评分或观看次数. 如果仍然不确定该视频是否值得花时间观看, 请阅读一些评论以了解他人的观点.

很多知识点第一次见到就很无厘头, 所以, 请避免过多负面的自省.

译者注: 意思就是不要被各种问题打击到怀疑人生, 坚持下去

对于您学习路线经过的每一个知识点, 您需要自我反省, 其目的是在学习中去理解. 对于您涵盖的每个知识点, 问自己一些问题, 例如:

  • “这个知识点对我有意义吗?”
  • “有没有新的术语? 如果是这样, 是否为每个新术语提供了正式定义? ”
  • “有没有新技能? 我了解应用程序中如何使用每种新技能吗? 我可以通过解决实践问题来验证我对这项技能的理解吗? ”
  • “明天我会记住刚刚学到的东西吗? 后天呢? 如果没有, 我该如何将其记忆? ”

最后一条建议: 永远不要低估记忆的力量. 记忆是一种在学习中没有得到充分利用的方法. 诚然, 理解一个知识点是最终目标. 但理解可能需要时间. 如果您真的很难领悟一个知识点, 请分解该知识点并记住其核心内容. 如果您不了解某件事的原理, 那么您的目标应该是背下来. 如果您需要有关如何记忆的技巧, 请考虑使用学习卡的技巧. 您可以在Interview Prep文档中阅读有关如何使用此技巧的更多信息.

译者注: 想不通, 先记忆, 后理解.

一. 计算机科学基础

第一步是学习计算机科学基础知识,这将在我的文章《Intro to Computer Science Terminology》中介绍. 本文的撰写是专门针对每个人. 我特地撰写此文, 即使没有计算机背景的人都易于理解.

本文涵盖的概念主要是定义性的. 您可以任意阅读这篇文章, 足够满足您的需要. 笔者建议将这些术语记住. 像在学校时那样对待每个术语, 您需要在考试中能够回忆起每个术语的定义. 如果您不想这样做, 也不必强求. 但是, 您记住的概念越多, 就越容易理解后面的知识点.

二. 命题逻辑(可选)

您不必具备强大的数学才能成为程序员. 数学技能可能会有所帮助, 但不是必需的.

如果对自己的数学能力没有把握, 笔者建议您学习命题逻辑. 命题逻辑涵盖的原理是编程的基础.

您可以从以下YouTube教程中学习命题逻辑: Basic Concepts in Propositional Logic.

三. Java编程

在学习了计算机科学的基础知识之后, 你将准备好去学习一门编程语言.

无论大家的背景如何, 我精心设计一条适合多数人的学习路线. 之所以为这条路线选择Java, 是因为Java是我最有经验的语言.

Java是需求最大的编程语言之一. 它被归类为一种面向对象的编程语言(稍后您将学习这意味着什么), 并且用于制作桌面、Web和移动应用程序.

如果您喜欢从书中学习,我建议以下内容: Head First Java.

如果您正在寻找视频教程,建议您在Derek Banas的Java YouTube教程: Java Video Tutorial中观看1–19、31–33、88和93.

YouTube教程中的第一个视频将指导您下载一个名为Eclipse的计算机程序. Eclipse是一个集成开发环境(IDE)。您可以将IDE视为程序员专用文本编辑器的一个专业术语. 它只是一个计算机应用程序, 提供用于编程的文本编辑器以及用于运行程序的其他工具. 这是Derek Banas的有关如何下载Eclipse的YouTube视频的链接: Install Eclipse for Java.

译者注: 推荐IDEA, 一个Eclipse的竞品, 目前易用性比Eclipse略高

四. 算法和数据结构

算法是用于执行特定任务的一组指令(或步骤), 其中每个步骤必须明确定义, 能够执行并且是有限的(也就是说, 它不会无限执行).

数据结构是组织内存中数据的一种方式.

算法和数据结构是编程中最具挑战性的两个专题. 在编程中, 您无需将算法作为必备基础进行学习, 但如果您希望在一家知名的科技公司担任软件工程师, 那么您将在面试中表现出对算法和数据结构的理解.

译者注: 原文作者推荐了一门99刀的课(点进去), 译者觉得挺贵的, 链接被我删了, 回家刷《算法导论》吧

五. Android开发

在我看来, Android开发是Java编程最有趣的应用之一. Android应用程序主要使用Java进行编程, 因此一旦您学习Java, 就为Android学习做好了准备.

译者注: 目前Kotlin被Google作为首选Android开发语言.

这是开始学习Android极佳的免费视频教程:Udacity-Android面向初学者的开发.

完成上述Udacity课程后, 您将有几种选择. 以上课程应由同一团队Google员工进行扩展. 完成课程后, 其他讲座应该会显示(如果找不到, 请在Udacity上搜索). 这将是一个不错的选择, 尤其因为它是免费的.

然而, 如果您愿意花钱买一本出色的书, 我强烈建议推荐: 《Head First Android Development:A Brain-Friendly Guide》. 这本书提供的详细的解释和有用的视觉效果可以真正帮助您学习Android的思想. 每章都会引导您完成一个示例应用程序. 所有内容都使用任何人都能理解的文字和图表彻底解释.

有用的资源

Stack Overflow是一个程序员可以在其中获得免费的代码帮助的网站. 如果您有困惑并想提出问题, 请先搜索. 如果找不到问题, 那就创建一个帐户并自己发布问题吧!

译者注: 搜索引擎是一种工具, 寻得答案是一种能力, 提问是一种智慧.

How To Ask Questions The Smart Way

欢迎关注公众号(代码如诗)

代码如诗(poetic_code)

如果您对如何学习编程有任何见解, 欢迎下方留言讨论.

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x