美文网首页职场前辈经验分享读书笔记
[翻译]自学开发的心路历程

[翻译]自学开发的心路历程

作者: 46b61a5f089d | 来源:发表于2018-07-25 21:55 被阅读100次

    译者注:看到这篇文章,我感觉非常有同感,本人也自学了很多开发语言。曾经遇坑无数,但是还是慢慢的坚持了下来。印象最深的就是花了大量的时间学习 objc,结果现在转到 swift,于是又开始自学 swift。现在也在自学 python,感觉又是一次填坑之旅,不过我感觉值得,向着未来的方向前进,每天走几步,总比站在那里看好些。也就是因为在自学中遇到了无数的坑,我清晰的知道一门好的课程有多么的重要,有个人带是多么的必要。于是我也决定做一些课程,希望能够帮助到那些自学开发的人能够绕过一些坑,跳过一些坑。
    我已经得到了本文作者的许可翻译这篇文章,没有版权问题。


    原文链接【需要翻墙】:
    Lessons learned from my journey as a self-taught developer

    以下为译文:

    自学开发者的成长之路是艰难、阴暗而又充满不确定性的。世界上没有从菜鸟到资深开发者的简单直接的途径。因此,我坚信每一个通过自学掌握开发技能的人都有自己的精彩的故事。
    在本文中,我会分享一些关于我自己如何探索并且自学编程的经验教训。希望通过我的经验的分享能够帮助到你反思自己的过去,并且激励你不断前行。

    专注于过程

    当我刚刚开始学习编程的时候,我并没有想把这个当做职业,我只不过想做一个特别的应用而已。
    我的编程之旅起始于大学期间。当时我刚刚读完了理查德 布兰森(Richard Branson) 的《失去维珍》(Losing My Virginity,也翻译为“致所有疯狂的家伙”或“一切行业都是创意业”),也许是过多的阅读了 TechCrunch(美国科技类博客),这让我浑身充满了企业家的无穷能量。然后,我一直读一些关于大学生如何因为一些应用的创意而得到投资家青睐的资料,我想:我能够成为他们其中的一员。
    一天,当我在课堂里闲逛的时候,突然一个应用的点子在我脑海一闪而过。当然,这个应用到底有什么特别的并不重要。重点是,这个这主意是唯一的,并且有着无穷的成长空间(至少我认为如此)。
    我坚持认为我发现了一块新大陆,可以做一番大事业。这个主意点燃了我的兴奋,让我感觉到我应该立刻采取行动。于是,我放弃了学业,全身心投入到了我的创意中。
    这里有一个大问题,那就是我的主意是关于一款移动应用的,但是我不知道谁可以做这个移动应用的开发。
    这特么的总么办,编程到底有多难呢?反正我已经没有兴趣继续学习我的专业。我花了大量时间再玩 XBox 上面,然后分配一些我的空余时间用来创建这个移动应用。
    有的时候幼稚能够让你开始干你正常情况下不会干的事情。现在的情况就是,一个没有任何编程知识,业务或者设计经验的人,在尝试着学习并开发出一款十分复杂的安卓应用。我想这在你看来就像是天方夜谭。
    我希望从这里开始我可以告诉你一些事情向好的方向发展的好消息。😉
    我买了几本关于安卓开发的书籍,同时花了大量的时间来尝试着拼凑出一个应用。我不关心这个应用如何工作,哪怕是从各个地方复制黏贴一些代码的拼凑,我只是希望能够完成一个成品。
    我以为我不需要学习多少编程,我太过于专注于最终的结果。对最终产品的期待始终驱使着我不断前行。
    随着时间的推移,这个应用变成了一个使用复制黏贴大法拼凑出来的怪物。它没有多少功能却基本上每次运行都会闪退。直到有一次偶然的机会,我参加了计算机科学的课程的学习,我才意识到:或许,我该专注于学习。我的能力不足直接导致了我的第一个应用的失败。我必须回到现实中来,至少在目前,我还不能干成什么大事。
    幸运的是,我慢慢的改正了我的行为并且认真的学习了很多知识。我开始喜欢上了编程,并且最终得到了软件开发工程师的工作。

    经验教训

    有一个好的主意是一件好事儿,但是当这个主意花费掉你全部的时间和精力的时候就要小心了。这个主意强大到让我花费了大量的时间,让我仅仅关注于美好的结果而忽略了要要达到那里需要的过程。
    重要的是要知道,像编程这种需要学习很多相关知识的事情,要完成很多小步骤,制定许多小目标。如果你要到达最终的目标,需要关注并完成每一个小目标。
    如果你太重视最终的结果,那么就会走努力找捷径。可能短期来看你有了一些进步,但是从长远来说,缺乏知识早晚会把你拖垮。学习新知识就像搭房子,要先夯实地基然后再建造。如果基础不牢靠,早晚建立在这个基础上的建筑都会轰然倒塌。
    有的时候为了打好基础会让你前进的脚步放缓,这没什么好羞耻的。记住,从一开始就掌握了基础知识的人最终一定会超越那些还要在回头学习的人。我就是这样的一个例子,外表看起来我可能是一个程序高手,但是实际上,我甚至都不能一个应用来养活自己。
    中国有句老话说的好:

    哪怕迈着小步朝着正确的方向前行,总好过于迈大步扯着蛋。
    每天专注于过程,你最终会为你达成的进步所震惊。

    Stack Overflow 非常好(同时也很危险)

    当我在编写我的应用的时候,Stack Overflow 是我最好的帮友和助手。基本上每次搞不下去我都会在上面提问,这样每个星期我都会有几个问题。
    我不仅发布问题,我还把 Stack Overflow 上面的回答奉为真理(就像知乎之于我们)。我会花费大量的时间在这里查找能够解决我当下问题的代码。当我找到了答案,我就会复制这段代码到我的应用,争取能够解决我的问题,却很少花时间去理解这些代码。我就是这样野蛮的尝试不同的内容,甚至让出错都成为了艺术。
    这样可怕的过程持续了很长的一段时间,直到最终,我清醒了,认识到了这种方法的不足。

    经验教训

    如果是学习编程,那么复制黏贴代码就是非常糟糕的学习方式。
    Stack Overflow 既是福音又是诅咒。它可以帮助你解决很多的问题,但是同时它也会让你不知不觉的依赖它而不去自己进行深入的研究。
    有时候这些网站能够很好的帮助你解决问题,从而给你一种错觉,而这种错觉在将来的路上会导致更大的麻烦。
    如果一直靠别人给你答案,你基本上学不到任何的东西。在问别人或者到网上搜索解决方案之前,尽量自己尝试着依靠自己解决问题。
    如果你发现你经常会使用复制黏贴大法,那么就要警惕起来,至少你要花点时间研究一下这些代码的原理。记住:在学习的路上,没有捷径!

    寻找有经验的人的帮助

    当我决定学习编程的时候,第一件事就是去市场上买两本儿关于安卓开发的书。
    开始的时候,我按照书上的讲述以及例子慢慢学习,并完成了书上所有的练习项目。
    我很快就感觉到了无聊,甚至沮丧。我决定靠我自己研究该怎么样编程。
    就像你知道的那样,这慢慢的成为了灾难。
    我宁愿花费大量的时间一个人呆在房间或者咖啡厅,把自己从这个世界隔离。我觉得这个世界上没人能够帮助到我,因为我没有认识的人懂得安卓的开发。时间一点一点过去,然而我却没有什么长进。
    有一次我有了一个很好的主意,关于在我的应用中使用一个 C 语言的库函数FFMPEG。因为我的应用需要编辑视频,所以我觉得使用这个成熟的类库可以帮助到我。事实证明,这是一个错误的决定,我甚至不能让我的应用正常运行。
    我浪费了大量的时间阅读这个库函数的文档,尝试着寻找到合适的方法并能够把这个库放到我的应用中。最终,我很懊悔的放弃了这个库。
    幸运的是,当时我正好有机会报名了一个面向对象编程的课程并且成功加入。我是这个课堂里唯一一个非计算机专业的学生,我都不知道自己怎么进去的。我想是他们的报名程序有bug 吧。😉
    第一个作业是创建一个 BlackJack 的程序。我已经自学了5、6个月了,所以我非常有自信能够完成这个作业。
    事实上,我也完成了作业并且对自己的成果十分的满意。但是,现实是残酷的。
    我的整个程序写在了一个庞大的方法里面,这个课程中的每个人都能看的出来,我的程序需要分解成小的方法,需要重构。这种感觉很糟糕。

    经验教训

    幸运的是,课堂的作业以及老师的知道让我能够反思我的应用的开发工作以及我的编程能力。我更加的看重学习并且更加坚定了完成一个完整应用的决心。
    如果我能够在早起和一个有经验的程序员讨论过,那么他们就可能看到我所做的努力,帮助我梳理事物的优先级,给我一些很有价值的建议。他们甚至有可能让我避免走一些弯路甚至死路(就像FFMPEG 类库的使用)。
    就像我在曾经的很多文章中提过,有经验的程序员就像是指南针。他们可能不会带领你到达终点,但是他们会为你指明方向。能够获得他们的帮助经常就是成功与失败的分水岭。
    事后来看,我有太多的方法或许可以获得帮助,比如当时我应该尝试着去找寻教有安卓开发经验的教授或者学生提供帮助,或者在网上的安卓社区中寻找类似的资源。
    相反的,我选择了隔离自己,全靠自己。
    这种做法是一种双刃剑,一方面,它能够让你专注在一件事情上;另一方面,它屏蔽了任何可能帮助到你的有用信息。
    确保你在需要指导的时候寻求帮助,这会帮助你节省大量的时间并且有效避免将来的沮丧。

    打造你自己的环境

    这或许是我唯一觉得在自学编程的道路上自己做的好做得对的地方。
    我觉得我这一辈子实在不擅长为了考试或者做家庭作业而学习。在任何时候到处都是能够分散注意力的因素。我经常尝试在图书馆或者咖啡馆当做我学习的避难所。
    我也很幸运的把这个规则应用到了我自学编程上。
    我最终经常出没于镇上有限的几个咖啡厅。我个人偏爱咖啡厅是因为那里可以提供很多不同的东西,而且比较容易独处。咖啡厅的另外一个好处就是你可以选择不同的地点,这样比较不会碰到熟人。
    如果我在家里学习,我会确保我房间的门是关着的,这样就可以避免别人在这段时间打扰到我。
    不管在哪里,我一般会开很大声音的音乐,这样就可以让我忽略周围的环境。欢快的纯音乐最适合我学习。
    我并不是说在远离干扰的环境选择上我做到完美了,但是在大多数情况下我还是很成功的避免了干扰。

    经验教训

    有一个好的学习环境往往是被忽略的,你的工作环境不应该充满干扰因素,而应该是长期安静且免打扰的状态,这样更加有利于精力集中。
    专注是学习和记忆的基础。无论何时,你想学习新的知识,都要清楚你的专注的强度决定了你学习的效率。当你注意力低下的时候,新的知识就会很难被接受,同时你的学习效率也会明显降低。
    拿任何世界级别的高手为例,如果我们去了解他们是如何训练的,那么你认为他们会每隔5分钟看一下手机吗?估计不会。
    最简单的增加专注力的方法就是打造一个没有或者很少有干扰的环境,我们可以使用以下几种方法:

    • 找到一个别人无法打扰你的地方
    • 把手机调到飞行模式
    • 使用一些网页屏蔽软件屏蔽社交以及新闻类网站
    • 带上耳机听一些能够帮助集中注意力的音乐
    • 避免电视或者其他比较容易被干扰的环境
    • 带上个记事本,随时记录脑海里蹦出的想法或者任务
      只有你能够决定在哪里,以及怎样打造符合你自己的环境。但是你要确保自己去做,因为这样的努力是值得的。

    走出去多多和别人交流

    我的第一份程序员工作就是一个偶然。我刚刚搬到奥马哈(美国内布拉斯加州最大的工商业城市),同时我已经自学程序开发大约一年之久了。
    我在奥马哈没有几个认识的人,所以我搜索了 Meetup.com(一个社交网站)尝试着去找一些对安卓开发的人。很幸运的,当时正好有一个能够覆盖安卓以及苹果的Meetup 移动端开发项目(译者注:我猜测是一个开源项目),我克服了紧张并且决定加入这个开发项目。
    第一次参加项目的会议简直紧张到爆。我花了整整10分钟时间,在车里纠结到底是进还是退。我真的很害怕,我对我的开发能力没有任何的信心,我觉得每一个参加会议的人都比我经验要丰富的多得多。
    最终我战胜了自己,走了进去,我很庆幸我做到了。
    然后我就定时参加这样的会议。在搬来奥马哈不久,有一次我在 Meetup 上遇到了一个猎头,他正在找一个安卓开发的外包人员。我和他聊了一会,顺利的拿到了周末面试的机会。
    在面试之前,我本来很自信。但是在面试当中,我就想在聚光灯下惊慌的小鹿一样。面试官询问的都是关于我当时在做的项目,我尝试着按照我准备的回答,但是很明显,他们能够察觉这份工作已经超出了我的知识范围。
    面试结束之后,他们让我出去和另外一个人谈话。我知道已经搞砸了,于是慢慢走到市中心打算让我变得清醒一点。
    最终我和另外一个人完成了面试,很快的,他们提供了一个培训生的工作。当时他们的 CTO 一直在忙安卓系统的工作,他们需要一个人来帮助复旦一些事务。我的工作就从那天开始了。
    我做了让我都震惊的一件事:我签了合同,领了电脑,然后走到 CEO 那里去询问他这是不是有薪的培训生职位!
    我很快就从培训生转正,成为了一名正式的软件工程师。

    经验教训

    当你自学一些技能的时候,人们往往不会主动来找你,你应该走出去,去发现一些机会。
    从学校毕业的大学生,他们在学校经过了系统的学习和训练,而通过自学开发却没有这样的优势。
    对于自学开发的人来说,走出去和不同的人见面,去主动寻找工作是最佳的方法。有一些社交网站,比如 Meetup.com,会帮助你找到一些开发相关的兴趣组,你可以和他们有些线下的见面和讨论。
    去克服一起困难,争取加入这些兴趣组中,友好的和别人分享你的经验,确定别人能够清楚的知道你找工作的长期目标。
    尝试着乐观的看待事物,对未来充满希望,相信好的事情会发生。你不加入就永远不会有赢的机会。
    认真对待你发展路上的一切阻碍,即使目前看起来是无法解决的问题,它仍旧有可能导致一次你发展路径上的质的飞跃。
    关键是你要对工作有一个长远的规划。培训生或者兼职或许不能够给到你想要的薪水,但是却能够帮你打开一扇通往未来的大门。

    总结

    如你所见,我在自学的路上犯了无数的错误。
    学习新的东西永远没有捷径,总是有很多坑,或许这些坑能直接让你转向。
    我鼓励其他自学开发的人也能够分享他们的故事,这些故事不仅仅能够提供有价值的观点,更重要的是他们能够照亮我们这些自学开发人员的路。
    希望我的故事以及经历能够帮助到还在自学道路上前行的你。

    相关文章

      网友评论

        本文标题:[翻译]自学开发的心路历程

        本文链接:https://www.haomeiwen.com/subject/yoimmftx.html