主页 > 各类奥秘 >自学程式,你无形中就犯了这些错误!

自学程式,你无形中就犯了这些错误!

2020-08-01
自学程式,你无形中就犯了这些错误!

开发员之路充满艰辛,也充满了各种不确定性。从新手到完成职业工程师这蜕变没有捷径,也正因为如此,所有自学的开发人员都有自己不一样的经历和故事。在这篇文章里,Victor Cassone 分享了他自学程式过程中的一些经历以及由此收穫的经验和教训。希望看到这篇分享之后,有助于让你反思自己的过去,并激励你继续前进。

专注于学习的过程

在我第一次开始学习程式时,我并没有打算让自己走上职业工程师的道路。当时,我只是想製作一款特别的应用程式。此想法最早是在我大四那年产生的,当时我刚刚读完了理查·布兰森的《Losing my Virginity》这本书,可能也是由于我之前透过科技媒体平台接触了大量的创业资讯,所以我觉得自己充满了创业的斗志。我看过许多关于大学生利用行动应用程式点子获得高额投资的文章,我想我也可以成为这其中的一员。

一天,在课间的时候,我的脑海中突然出现了一个关于应用程式的想法。这款应用程式的细节并不重要,重要的地方在于这个想法是独一无二的,并且具有很大的增长潜力。我确信自己发现了接下来应该会发生的一个大事件,我沉浸在自己的此想法中,上课之后完全听不到讲师在说些什幺。我为自己的想法而感到兴奋,很快我就感觉必须要採取行动了。

但是这中间有个大问题,我想创造一款行动应用程式,但我并不认识什幺人可以帮我建造行动应用程式。于是我就想,管它呢,写程式能有多难?我当时对我的专业并不怎幺感兴趣,把很多时间都花在 Xbox 上玩游戏。我想我可以利用一些空闲时间来自学建构此款行动应用程式。有时候,天真的想法有助于让你採取那些本不会贸然尝试的行动,正可谓初生之犊不畏虎。

当时的我就是一名没有任何编码、业务和设计经验的大学生,正试着学习 Android 开发来建立一款複杂的应用程式。我买了几本关于 Android 开发的书籍,花了很多时间自学,尝试来开发出这款应用程式。我不在乎它之后的效果怎样,我只想做出一款成品,如果是能透过从其他管道複製和贴上代码来完成那就最好不过了。

我认为我可以投机取巧,用最少的编码知识来完成这个目标。我一心只关注最终的结果,是隧道尽头的那盏灯让我不断前进。时间一分一秒的流逝,这款应用程式变成了一大堆複製和贴上代码的集合体,没有很多的功能,勉强达到了运行起来不崩溃的程度。

后来,直到我偶然间接触了电脑科学课程,我才意识到我应该更专注于学习过程。由于我自己在编码方面的能力不足导致我放弃了最初的应用程式创意点子,我也意识到了我这样根本做不成什幺大事,至少现在还不行。

幸运的是,随着时间的推移,我改正了自己的行为,开始更加认真地学习。我开始喜欢上了写程式,并最终走上了专业软体开发人员的职业生涯之路。

收穫与所得

有一个好的点子是很棒的一件事,但要留意你的这个点子可能会产生吞噬性。这是一股很强大的力量,我就是在很长一段时间之内都被此力量所吞噬。它让我把注意力放在了最终的结果上,而不是实现结果的过程之中。

重要的是记住一点,学习像写程式这类複杂的知识需要一步一步的去积累。所以,要想让自己有所学,唯一的方法就是专注当下每一步的学习过程并且掌握每一步所需要掌握的内容。

如果你过于关注最终结果,那你很有可能就会开始走捷径。走捷径可能会让你短期之内取得不小的进展,但从长远来看,对于基础知识的缺乏迟早会成为你的绊脚石。学习一样新知识就像盖房子一样,你要先建好地基,然后万丈高楼方能平地起。如果地基不牢,整座建筑迟早会坍塌。

有时要想搭建一个坚实的地基就需要你放慢速度。不要因为自己进展缓慢而感到羞耻,一次完全掌握基础知识的人最终会领先于那些走捷径、但必须回头重新学习的人。我就是一个反面例子,外表看上去我可能像是一位程式天才,但其实我根本就无法建立起一款像样的应用程式。

专注于每天的学习过程,最终你会为自己取得的进步而感到惊讶。

Stack Overflow 很棒

在我学习建立应用程序的过程中,Stack Overflow 成为了我最好的朋友。每当我遇到什幺困难卡住的时候,我都会到 Stack Overflow 社群提出问题,平均一週都会有好几个问题。我不仅会在上面提出问题,而且也会将从上面所得到的答案视为救星。我会花费大量的时间进行搜寻,试图找到可以解决我当下问题的那块程式码。一旦找到答案之后,我会将其複製并贴到我的程式库中,尝试让其发挥作用。根本就没有投入时间让自己尝试去理解这些程式,我只是粗暴的透过这种蛮力进行尝试。

这种模式持续了有一段时间,直到最后,我醒悟过来,最终意识到了这种方法的缺陷所在。

收穫与所得

在学习编码过程中,複製与贴上是最可怕的一种方式。Stack Overflow 可谓是一把双面刃,它非常适合帮助你解决问题,但如果你不多加小心,它就会成为你总是想要依赖的那根拐杖。

有的时候,可能是由于 Stack Overflow 太擅长于帮助你解决问题,你也会因此产生一种不切实际的自信心,而这未来只会给你带来更多的麻烦。

如果遇到问题你只是一味的想透过求助来寻求答案,那你学不到多少东西。在访问 Google 之前,确保自己尝试过解决此问题。如果你发现自己正在进行複製、贴上代码,那也要确保自己至少投入了一些时间去理解这些程式码。毕竟,在学习的过程中,没有捷径可走。

寻找过来人的帮助

在我决定自学程式之后,我做的第一件事就是买了两本 Android 开发方面的书。一开始,我严格按照书中的练习去做,并完成了所有的範例。但很快我就感到厌倦或者说沮丧,不想再继续跟着这本书学下去。我决定走自己的路,自己来搞定编码。但正如我之前所说,这样做的结果就是会慢慢的让自己陷入灾难之中。

我会自己一个人长时间的待在我的房间或咖啡店里。我将自己与外界隔离,我感觉没人可以帮助我,因为我认识的人都没有任何 Android 开发的经验。日子一天天过去,我却没有取得多大的进展。

有一次,我想到了一个好主意,那就是下载一个名为 FFMPEG 的大型 C 库。我想要建立的应用程式需要对影片进行编辑,因此我认为如果能够利用此 C 库的强大功能那应该是一个不错的主意。其实在当时,这并不是最明智的举动,因为当时我的 Android 应用程式几乎还无法正常运行。我浪费了很多的时间去阅读 C 语言,试图弄清楚该怎样在我的应用程序中用到它。慢慢的,我又开始变得沮丧,最终放弃了这个主意。

幸运的一点是,大约在同一时间,我报名参加了物件导向语言的一门课程,也不知道怎幺就被录取了。在所有报名的学生当中,我是唯一来自非电脑科学专业的一位。我也不知道自己怎幺就被选中了,可能是报名软体中有 bug 吧。

这门课程给出的第一项任务就是创造一个 Blackjack 程式。当时,我自学程式已经有 5-6 个月的时间了,因此我对自己可谓是信心满满。我很快完成了此任务,并自我感觉良好的样子。但很快,这种感觉就消失了。我的整个程式是用一种很笼统的方式去写成的,而班上的其他人都知道这个城市应该先分成几个类别。这种感觉太差了!

收穫与所得

好在,老师给出的课堂作业和指导意见可以让我先搁置我的 Android 应用程式,专注于反思自己的开发能力。我开始更加重视学习,并重新找回了自己最初的想法,那就是製作一款完整的应用程式。

如果我在早期阶段就能有幸与那些经验丰富的开发人员交流,那他们就会了解我在做些什幺,而给出重点建议,让我可以更加理智的採取行动。当我走入没有什幺出口的死胡同时,他们也会帮助我及时的调整路线。经验丰富的开发人员就像是指南针,他们虽然无法直接带你到达目的地,但他们会确保你所选择的是正确的方向。他们的帮助往往会成为你扭转败局,走向成功的关键所在。

事后回想起来,其实当时我有很多种方法可以寻求他们的帮助。我可以尝试在大学里找一位拥有 Android 开发经验的教授/学生,也可以尝试寻找一个线上 Android 社群。但那时的我却只是将自己隔离了起来,隔离是一把双面刃。一方面,它可以让你专注于手头上的任务,另一方面,它会让你远离外界,无法获得关键性回馈。

确保自己可以获得过来人的经验指导,这将为你节省不少的时间,并减少一些不必要的挫败感。

寻找合适的环境

在我自学写程式的过程之中,这可能是我唯一做的还算对的事情。在我整个学习生涯之中,无论是在家备战考试还是做作业对我来说效果都很糟糕,好像总有很多的干扰因素。所以,我通常都会去图书馆或者咖啡馆来寻得一方清静。幸运的是,在我自学程式的时候,我也是这样做的。

我成为了镇上几家当地咖啡馆的常客。较之其它学习地点,我更喜欢咖啡馆的原因在于咖啡馆的选择性更多一些,你可以选择一家你不会碰到认识人的店面。如果我在家学习,那我必须要关上门,这样我的室友才知道在一段时间之内不可以打扰我。其实无论在哪里,我都会确保耳机里的音乐声音足够大,这样我就听不到周围的任何声音。那种没有歌词的欢快音乐类型最适合我。

收穫与所得

寻找合适的环境往往是学习过程中容易被忽视的一个环节,要知道在这个过程中你应该保证不会有其他的干扰因素,这样你才能长时间的保持专注状态。专注是保证记忆力和技能获取效果的基础组成部分,当你尝试将新资讯输入大脑中时,输入效果的强度直接与你的专注程序相关。如果你的注意力不集中,那新资讯的记忆会降低,导致学习速度变慢,学习时间也会因而增加。

看看那些世界级的表演家平时是如何训练的就知道了,他们会每五分钟就看一次手机吗?肯定不会吧。

要想提高专注力,最简单的一个方法就是寻找一个对你来说乾扰力最低的环境,具体可以参考以下几种方式:

只有你自己可以决定何处才是适合你的学习环境,并且正确的去选择此类的环境。确保自己在环境选择上费点精力,因为它值得你这幺做。

将所学付诸实践,进入工作场合

我的第一份开发工作其实来的有些偶然。当时,我刚刚搬到内布拉斯加州的奥马哈,距离我开始自学程式已经过去了一年的时间。我在奥马哈几乎没什幺认识的人,于是我透过 Meetup.com 进行搜寻,试图找到对同样 Android 开发感兴趣的人。幸运的是,当时我找到了一个相关的聚会活动,包括 iOS 和 Android 开发。于是,我鼓起勇气,决定前去参加。

万事开头难,第一次去之前我在车里犹豫了大约有十分钟的时间,不知道是该进去还是直接开车走人。我怯场了,我对自己的程式技巧没有信心,我知道在场的每个人都比我有经验。最后,我把心一横,管它呢,我就直接走了进去。我也很高兴当时我做出了正确的决定。

之后,我开始定期参加此聚会。不久之后,在聚会上我认识了一位招聘人员,他正在寻找一名 Android 开发人员。我们就此事谈了一会,之后我接到了面试通知。在参加面试前,我感到信心满满。但在面试过程中,我却表现得有些不知所措。面试官介绍着此职位需要负责的专案,我发现这一切都超出了我的理解範围。我试图让自己跟上节奏,但他们显然能够看出这超出了我的能力範围。

面试结束之后,他们让我先随便逛逛,再和其他人谈一谈。我知道自己这次搞砸了,于是我在市中心逛了一会,让自己冷静下来。之后,我又参加了一次面试,不久之后,他们向我提供了一个实习岗位。因为当时公司的 CTO 自己负责所有的 Android 工作,他需要有人来替他分担一下。

当时的我甚至不敢相信自己拿到了这个机会,在签署了所有的相关文件之后,我又跑到 CEO 那里,问他这是否是一份带薪实习的工作。最后,我从实习转为全职工作,我作为软体开发人员的职业生涯也正式开始了。

收穫与所得

如果在某种技能方面你是自学成才,那应该不会有人资主动来找你。你需要走出去,主动寻找机会。那些毕业于四年制大学的人可以利用学校资源来找到工作,但对于自学人来说,这幺便利的条件并不存在。也就是说,对于我们这样的人来说,要想找到一份工作,最好的办法就是走出去,认识更多的人,你可以透过像 Meetup.com 这样的网站去寻找那些每个月或每两个月聚会一次的相关小组。

尽你所能鼓起勇气去加入这些群体。保持友好的态度,和其他人分享你的经历,确保他们了解你找工作的长期目标。让自己进入可能带来积极影响的环境之中,如果你不买彩券,那你永远也中不了大奖。认真看待你所拥有的任何机会,即便它看上去像死路一条,但却峰迴路转也说不定呢。

关键是要让自己眼光放长远一些,实习或者兼职工作可能当下给不了你想要的薪资待遇,但他们能够帮你打开走向未来的大门。

相关文章推荐