我是如何自学编程的,以及你可以从我的故事中学到的前 5 课

我是如何自学编程的,以及你可以从我的故事中学到的前 5 课

原文:https://medium.com/hackernoon/how-i-taught-myself-to-program-and-the-top-5-lessons-you-can-learn-from-my-story-e951f28456ed

几周前,一个追随者(Andre)联系了我,他说他真的很喜欢我发布的内容,他很想知道更多关于我如何自学编程的事情。

当我开始写这篇文章时,我首先列出了我学习时使用的资源——链接、书籍、一般建议、技巧和诀窍等。——但我很快意识到,网上已经有数百篇跟我写的这篇一样的帖子了。就在那时,我有了分享一个更个人化的故事的想法,这个故事是我如何自学编程的。

这篇文章可能不完全是 Andre 所希望的,但我仍然认为它提供了很多价值,因为它关注的是如何为什么我自学编程,而不是我用了什么

如果你没有时间阅读整篇文章,你可以跳到结尾,在那里我列出了我的前 5 课。如果你不读这个故事,它们仍然有意义,但如果你读了,它们会更有力量和意义。

第一幕:那些可怕的高中岁月

我将是第一个承认我在高中时没有什么出息的人。我在运动中长大,并投入了大量的时间、精力和情感成为一名优秀的运动员,但当我进入高中时,我意识到我可能注定不会成为一名职业运动员。

所以我放弃了足球和篮球,决定专注于学业。嗯,这是我告诉自己和其他人的,但实际上我决定专注于玩电子游戏。

我可能像许多 14 岁的男孩一样——笨拙、满脸粉刺、沉默寡言,迷恋着年级里最漂亮的女孩之一。我喜欢在学校表现好,进入一所好大学的想法,但 100 次中有 99 次我发现自己从回家到睡觉都在玩电子游戏,甚至忽略了做作业的想法。

我一直知道我想做的一件事就是拥有自己的公司。我的父母都没有上过大学。他们 21 岁的时候有了我,当时我爸爸是一名工人,为人们的院子和车道浇注混凝土。

多年来,我的爸爸、爷爷和叔叔为位于科罗拉多州丹佛市的一家大型建筑公司手工浇筑混凝土建立了我爸爸的工作。我很自豪地说,我经历了我爸爸发展他的业务。我记得周末天还没亮就起床,开着他的卡车去工地(我不知道没有口袋妖怪我会做什么)。我记得我在他的办公室里,通过测量蓝图,帮他计算需要浇注多少混凝土。我记得从中学开始,我就在办公室里处理可记账和应收账款。我记得我生活在一个没有什么钱的家庭里,随着我父亲的生意起飞,我在几年内变得相对富裕。

大衰退在我高一的时候袭来。我相信我不需要告诉你这些,但是在金融危机期间,建筑业并不是一个很好的行业。因此,在我大一结束和高二开始的时候(2007 年和 2008 年),家族企业陷入困境,欠我父亲很多钱的公司申请破产。

值得庆幸的是,我的父亲和祖父都是聪明、保守的商人,他们没有在金融危机前为了以不合理的速度增长而大量举债(就像他们的大多数竞争对手一样),而是储备了一些现金,能够等到风暴结束。

但是这次经历改变了我。因为我是在成功和努力的环境中长大的,所以我总是认为成功会不费吹灰之力就找到我。看到事情朝着对我们家庭不利的方向发展,真是一记耳光。

影响我的不是我生活方式的改变,而是我看到它如何影响我的父亲。我的父母一直是那种愿意毫无疑问地给他们的孩子任何他们需要的东西去追寻他们的梦想的父母。我父亲总是我或我的一个兄弟姐妹参加的每个运动队的教练之一。在我们年轻的时候,我的父母给了我们很多机会和优势。他们支持我们的目标,并总是愿意投入时间和金钱来帮助我们实现这些目标,无论是高尔夫、舞蹈、足球、啦啦队、篮球、棒球、吉他、学术、象棋、钢琴还是唱歌。

突然,我听到父母对抵押贷款和家族生意的压力,这时我回想起他们在我一生中投入的所有时间和金钱,而我回报他们的却是如此之少。高中时,我无所事事,很多课都不及格,这种负罪感改变了我。我经历了艰难的时刻,才明白父母为我牺牲了多少,我是多么幸运和幸运。

第二幕:奋力追赶

我的态度和动机的改变不是一夜之间发生的,但它确实发生得相对较快。当我进入大三的时候,我决心扭转我的成绩,用我的时间学习技能。

所以我开始上吉他和唱歌课,慢慢地开始摆脱我的电子游戏习惯,把更多的时间和精力放在学校上。

他们说最好的开始时间是昨天,但对我来说,感觉最好的时间是几年前。

尽管我现在正在努力学习,但几年的 C 让我觉得赶上进度是一项艰巨的任务。每当我们在课堂上学到新的东西,有三四项基本技能我必须回家先学。

大三和大四第一学期真的很努力,成绩有了很大的提高。我的平均绩点是 4.0,但前两年的伤害已经造成,它会伴随我很长一段时间,偶尔会让我陷入困境。

我所有的家人——父母、姑姑、叔叔、堂兄妹、祖父母、曾祖父母……都来自科罗拉多州。我们一直很亲密,所以当我开始申请大学时,我知道我想留在这个地区。

在我生命中的那个时候,我仍然不是 100%确定我为什么要去上学。我一直对编程感兴趣,但在早年没有机会学习。怀着有朝一日追随父亲的脚步,开办自己的公司的梦想,我很高兴在大学申请中选择了计算机科学作为我的专业。

我申请了我的科罗拉多学校,被拒绝了。我申请了科罗拉多州立大学的工程学院,但被拒绝了。我申请了科罗拉多大学的工程学院(我的首选),但被拒绝了。在高中的最后两年里,我修了很多 AP 课程,并且都得了 A,但是大学非常在意新生入学时的累积 GPA,而我的 GPA 相当低。

幸运的是,科罗拉多大学招生办的人注意到了我的努力和成绩的好转。他们写信给我说,他们录取我到文理学院(大学里一个竞争不那么激烈的学院)读“工科预科”专业。那个招生人员救了我。

我仍然记得我高中毕业的那天,那是我一生中最尴尬的一天。由于前两年我在学校很努力,学了很多 AP 课程,所以我的大多数朋友都是聪明人,以优异的成绩毕业。所有人都质疑我为什么没有以优异的成绩毕业,包括我女朋友的家人。不得不无数次解释我成绩不好,看到他们眼中的震惊和评判,这很痛苦;尴尬的沉默通常随之而来。

我不认为大多数人是故意刻薄,他们只是感到惊讶。

不管他们的意图是什么,我仍然觉得受到了评判。

大学是我崭新的开始,我决心从第一天起就在游戏中领先,以避免我在高中犯下的错误。尤其是因为赌注更高,大学比高中要贵得多。我要让我的父母感到骄傲,让他们知道他们一生的努力不是理所当然的。

唯一的问题是,在加州大学,文理学院与工程学院是分开的,所以作为一名文理专业的“工程预科”学生,我不能参加任何工程课程。我知道我想成为一名工程师,但一想到刚赶上就开始落后,我就感到沮丧。

我大学的第一个学期令人沮丧,我花了很多时间给大学里的工作人员发电子邮件,请求他们帮助我注册工程课程(我想上的课程经常有空缺的座位),但任何人能给我的最好建议是在我的第一个或第二个学期取得好成绩,并在明年申请转校。

所以我又一次落后了。我所有的朋友和同龄人都在学习有趣的工程学课程,而我却在研究软科学,等待着有一天我会被认为有资格成为一名工程学学生。

不过,我充分利用了这一点,在所有的课上都取得了好成绩。我发现艺术与科学学院甚至提供了一些可以申请工程学位的课程——比如微积分和化学——所以我选择了这些课程,以免落后整整一年。

大一的第二学期过去了,快结束的时候,我终于被工程学院录取了,从大二开始。我很兴奋,但也很紧张。我在大学里的课程学得很好,但我的工程学朋友们谈论的都是他们的课程有多难,以及他们可能比我上的类似课程难多少。

我仍然对自己的智力感到难为情;我甚至不确定自己是否有能力通过工程课程,更不用说在这些课程上出类拔萃了。在过去的三年里,我一直觉得自己是班上努力追赶的笨蛋,我不够聪明,不能成为优等生或工科生,无论我在学术上取得了什么成就,与我的朋友和同龄人相比都相形见绌。

闪回高中,了解更多的背景…

在我高中最后一年,当我取得好成绩并试图让我的学业步入正轨时,我告诉我的数学老师,我想参加高三的高等数学课程,他直截了当地告诉我,我可能不够聪明,因为我“不太擅长数学”。

是啊,去你的里奇先生。

在我高年级开始的时候,我想加入荣誉协会,因为我所有的朋友都在里面,并向我施加压力。我真诚地想做志愿者,成为社区的一员,这甚至不会对大学申请产生影响。因为我学习了所有的高级课程,并且都得了 A,所以班里的每个人都加入了荣誉协会,除了我。即使我连续三个学期的平均绩点都超过了 4.0,我的累积平均绩点仍然不够高,所以他们不会让我加入。

不管怎样…

到了我选择工科专业的时候了,我知道我想做计算机。当我告诉我的一些朋友时,他们的反应并不令人鼓舞。他们利用我的兴趣作为一个机会,没完没了地抱怨入门级的计算机科学课程有多难,如果我认为艺术和科学微积分很难(更不用说工程微积分),那么我可能会在计算机科学课程中挣扎。见鬼,甚至他们也只是勉强及格,而我显然不在他们的水平上。

不幸的是,我相信了他们,所以我避开了计算机科学,因为我认识的所有最聪明的人都在与它作斗争,我避开了数学,因为一位老师告诉我,我不太擅长它。尽管我在大学化学课程上成绩很好,所以我选择了化学工程作为我的专业,尽管我认为整个职业听起来非常枯燥。

第三幕:找到我的路

我现在是一名工科学生,这意味着我在校园里 50%的对话都是关于课程有多难,抱怨为什么教授们把考试搞得这么难,以至于平均分只有 50 多分。我是有点落后,但没落后到赶不上四年毕业的程度。

加州大学的所有工程专业都需要大量的数学课程,所以尽管我试图避开数学,我还是被迫选择了微积分、微分方程和线性代数。参加这些数学课程我很紧张,并且确信我会不及格,所以我比以往任何时候都更加努力,令我惊讶的是,我竟然所有的课程都得了 A。事实上,在我的三门数学课中,教授在学期末给我发了电子邮件,说我以全班最高的成绩毕业。

嗯,所以可能我身边的并不了解的一切。

加州大学有一个应用数学工程学位,因为我的数学课程学得很好,所以我决定转专业。不幸的是,我仍然不敢尝试计算机科学,尽管这确实是我想做的事情。**

加州大学的工程师们还需要学习一门计算机课程,在这门课程中你可以学到 VBA、MatLab 等基础知识。与其说是编程,不如说是脚本。尽管我在其他工程课程上成绩很好,但在大三开学时,我仍然对选修这门课程感到紧张,因为它与计算机科学有关。

幸运的是,我有一个很棒的教授,尽管我们不得不使用古老的语言,她试图让它变得有趣和适用。我们的最终项目是在 VBA 创建一个 k 均值图像分类器。这是我第一次尝试机器学习,我觉得它超级酷。

我最终爱上了我的计算课程,我的老师在学期结束时找到我,告诉我我得到了最高分,鉴于我的专业,我应该考虑参加一些研究生水平的机器学习课程。我认为这是一个很好的姿态,但我不可能足够聪明,即使是计算机科学系的本科生,更不用说研究生水平的课程了。我有兴趣,但我仍在从多年的自信消磨中恢复过来。

在大学生涯的前三年,我每个学期都在加州大学做研究助理,但随着大三快结束时,毕业在望,我仍然没有实习过,也没有在工业界做过任何工作。虽然我擅长数学,但我不知道毕业后我能做什么或想做什么。时间紧迫,所以在我大三的春天,我在一家名为 Mocavo 的科技初创公司找到了一份数据分析的实习工作。

第四幕:跳跃

我想不出还有什么比我在 Mocavo 工作的第一天更紧张的了。我将和整个程序员团队一起工作,我不想看起来很愚蠢。

在 Mocavo 和我一起工作的人改变了我的生活。如果他们中的任何人正在阅读这个故事,我希望他们知道他们对我产生了多大的积极影响。每个人都很友好、积极、踏实、有才华、聪明,并且愿意帮助我学习。虽然我没有开始为我的实习工作写代码,但我现在每天都在人们身边编程,这对我来说是一个神秘的领域。

尽管每个人都愿意从我第一天开始帮助我学习,但我还是花了一段时间投入进去并开始编码。我已经被无数次地告知编程有多难,我可能没有能力做好,所以我不想失败,也不想在我钦佩的所有同事面前显得愚蠢。

最后,在大约六个月的时间里,我不停地问每个人关于编程的问题,比如编程有多难,他们花了多长时间学习等等。,我采取了飞跃。在被周围的人劝阻了六年之后,只需要和我的同事们一起经历一些积极的事情,我就开始了我的软件开发职业生涯,并点燃了我对编程的热爱。

我只希望我有足够的勇气早点出发。

第五幕:学习成瘾

没多久我就迷上了编程。我学到的每一件新事物似乎都为我打开了一个全新的可能性世界,而我以前并不知道这些可能性的存在,或者以前对这些可能性的了解还不足以利用它们。

在我学习编程的过程中,我经历了很多挣扎。我已经数不清有多少次花了六个小时都没能让看似基本的事情运转起来。我不止一次地认为我可能不适合编程,我应该永远放弃。

但是我克服了学习上的困难,利用晚上和周末的空闲时间解决问题,直到我找到答案。

一开始,每次我在谷歌上搜索如何做某事,我都会发现我需要先理解另外五个概念,然后再理解其中的三个概念,以此类推。对我来说,最困难的事情之一是感觉我从来没有取得进展,因为就在我认为我可能会变好的时候,我会了解到我甚至没有接触过的整个领域、语言、最佳实践或框架的存在。

但我习惯了生活中的落后感,所以我坚持了下来。

我记得在我决定学习编程几个月后,一位面试官在一群人面前让我很尴尬。显然,他们需要让我站在五名工程师面前,看着我在白板上挣扎,以确定我没有能力学习他们的工作。这是一份没有报酬的实习工作,我在申请中透露我只写了几个月的代码。

但是之前有人说我不够聪明,所以我知道只要努力,我就能证明他们是错的。

我记得六个月后,另一位面试官当着他的一个实习生的面让我难堪。我从我的第一次面试经历中学到,我应该坦率地说出我所知道的和我仍在做的事情,这样,如果他们希望获得某些技能和知识,他们就可以决定不面试我。

因此,在我的求职信中,我详细解释了我是一名初学者,并概述了我所知的知识中存在的漏洞。当我参加面试时,我的面试官让我在整个会议(60 分钟)中努力解决一个问题,我在求职信中承认我不知道,并告诉他我不知道他第一次在白板上写的是什么时候。我仍然记得当我努力做一些对他来说简单得可笑的事情时,他的实习生脸上沾沾自喜的笑容。软件工程师可能非常自负…

但我知道不能让它影响我。我可以看到我已经走了多远,我知道如果我坚持下去,我会成功。我用这些经历激励自己,而不是打击自己。

在将我所有的空闲时间都投入到编程中一年半之后,我终于找到了一份软件工程的工作。那是我一生中最快乐的日子之一。

前五课

我成为一名付费软件工程师的道路绝不是一帆风顺的。我在动力、学习、失败、气馁、人生方向、信心、了解自己、感觉落后、让别人放下我、限制政策/规则、…

如果你一直在推迟学习编程,我希望这个故事能让你明白,并不是所有的软件工程师都是天生适合这个领域的神童。不管你今天知道多少,或者你认为你可能会面临什么障碍,你都可以学习。

如果你是一个走传统软件工程路线的程序员,我希望这个故事能鼓励你培养那些想编程的人,而不是贬低他们。

以下是我从奋斗和成功中获得的五大人生经验。

总是听别人说些什么,不要总是相信他们

来自有经验的人的批评是最好的学习方式之一,不管它是否有建设性(希望它大部分是建设性的)。

不要让别人的观点把你打倒;利用他们的意见来学习,让自己变得更好。在我的生活中有很多次,人们严厉地批评我,让他们觉得自己更聪明,或者贬低我。

我曾经相信那些告诉我我在 X 学得不好的人,因为我不够聪明,学不了 X

现在我知道,当有人告诉我我不擅长 X 时,我可以利用这些信息来提高自己,不管他们的意见有多真实,他们都没有资格决定我是否有能力学习 X 。只有我自己的决心和努力才能决定。

你足够聪明

我坚信大多数人都有能力学习编程。成功的人和失败的人之间的区别与其说是智力,不如说是决心。

最有决心学习编程的人会。每个人都有自己的学习障碍,必须想办法解决。

有些没有意志力的天才在遇到困难时会放弃,有些普通人会专注于问题,直到解决问题。前者会失败,后者会成功。

比起成为大师的想法,我更喜欢掌握一项技能的过程

我遇到的很多想学习编程的人都认为他们能在几周或几个月内学会所有的东西。他们工作努力,愿意在前期投入大量时间学习,但他们希望能够在“掌握技能”的最初推动下顺利完成职业生涯。

这种思想流派对某些职业来说可能是好的,但是如果你带着这种心态进入软件开发,你会变得非常沮丧。不管你在编程上下了多少功夫,你永远不会成为哪怕是一个子域的大师。总会有改进的空间,技术总会快速变化,你的雇主和同事会希望你不断学习新技能。

这就是软件工程的现实和文化。

这就是为什么在开始软件开发职业生涯之前,决定自己是否是那种可以享受终生学习、改进和完善之旅的人是很重要的。

将学习编程作为一个长期目标

在你找到一份软件工程师的工作之前,你可能要花一年多的时间努力学习编程。带着这种期待开始你的旅程。

学习编程最难的部分不是概念的困难,而是要有耐心、决心和意志力来提高自己的技能,即使你的工作似乎永远不会有回报,因为要学的东西太多了。如果你努力工作并忍受失败足够长的时间,你就会成功。

这里的每个人都在同一条船上,所以如果你需要一段时间才能进入这个行业,不要气馁。这是正常的,如果你以长期的心态开始,你会对自己的进步感觉更好,也不太可能放弃。

尽可能多地把自己置身于可能失败的情况中

我们从失败中学到的远比成功多。当你挑战自己时,你学得更快。当你把自己放在不舒服的环境中,你就会成长。

专注于小规模、抗风险增长的唯一好处是感觉舒适。

当我回顾我的旅程时,大多数关键时刻都发生在我设定艰难的目标并让自己处于失败代价高昂的情况下。

在某些时候你不得不说,

去他妈的,我会尽力而为,如果我失败了,我会利用这次经历来学习。我真的不在乎别人怎么想。

结论

如果您喜欢我的故事,请不要忘记鼓掌,如果您有任何想法或经验要分享,请发表评论。

如果你想知道一些我认为你可以学得更快的具体建议,看看我的 9 种加速学习并保持领先的方法

行动呼吁

*我目前正在探索如何创建 *副业**产生被动收入* 。如果你想及时了解我的写作、想法和项目,你可以在我的个人网站上找到更多信息和我所有社交渠道的链接:*

zackthoutt.com


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除