一些优秀的程序员,可能以前从事的是其他职业,他们大都发现工作中的很多固定化的流程内容,如果可以实现自动化,不仅效率能够得到提高和保证,提高自己的生成力,同时自己也会从中释放出来,有更多的时间去研究其他内容;于是出于工作的需要学会了编程【但这并不意味着在编程方面,自学成才是轻松容易得事情;很多在技能养成方面急功近利的软件开发者都在自学成才的道路上苦苦挣扎,屡受挫折】如果你正在考虑自学,那么你开始这个令人心潮澎湃而又时而令人黯然神伤的旅程前,你应该了解一下自学的优势和劣势。
一、自学编程的优势
自学编程的大部分优势都基于灵活性;当你想通过自学来掌握编程技能的时候,你就拥有了最大限度的灵活性【我更倾向于认为这是一种“祸兮福之所倚,福兮祸之所伏”的事情】在你可以利用它为你做更多的事情的时候,灵活性是一项伟大的特性,可以让你沿着自己想走的道路锲而不舍。而在因为缺乏系统性让你觉得不知所措,缺乏动力让你觉得身心疲惫没有动力继续前行的时候,情况就不大妙了。 灵活性并不是自学唯一的优点【低廉的成本,以及因此而获得的自学技能】都是选择自学成才这条路的真正好理由。
1、成本低到基本为零
自学编程可以为你节省大笔金钱(在今天任何人都可以利用互联网上的免费资源来自学编程);但是注意,免费并不总是最好的选择【通常,花一些钱来获得一套更为体系化、正规化的学习资料是物有所值的】如果你囊中羞涩,光凭“低成本”这个理由就足以说服你走上自学成才的程序员之路。
2、学会学习是你能学到的最优价值的技能之一
“学会学习”这个技能不仅是在计算机编程与开发领域,即使在日常生活中,也是价值连城的(掌握自学技能的人可以令整个世界为他们敞开机会大门,而那些依靠他人才能学习的人却做不到这一点);如果你拥有自学能力,那么在生活中几乎没有什么是你力所不能及的(当然,这并不意味着你必须通过自学编程才能掌握自学这项技能,但自学编程不失为一种开拓这项技能的好方法,因为自学编程是一项艰苦卓绝,苛求努力的活动)。
3、按照自己的节奏学习
人们之所以诟病传统教育或者编程训练营,主要因素之一就是它们的学习节奏要么追风逐电、一日千里,要么慢慢腾腾、磨磨蹭蹭。如果你认为自己学习进度是快于或者慢于常人的,那么自主安排学习进度对你而言是一个巨大的优势(正是基于这个原因,我几乎总是尝试自己去学习新东西);你可以完全以对自己来说最舒服的速度前进(而这一切的结果,就是你可能会更好的掌握你正在学习的内容;因为开始下一个概念之前,你能够对这一个概念做到融合贯通)。
4、按照自己的时间表学习
无论你是决定去大学深造,还是去编程训练营精进,你每天的日程都是被别人固定好的,甚至你的生活都是被别人安排好的。如果你再没有其他的事务,而且你决心专心致志地学习编程或者攻读学位,那么这种固定安排是再好不过了,但是如果你已经有了繁忙的时间表,并且你还不想辞掉自己的全职工作,那么自学编程可能是一个更优的选择;事实上,这可能是你唯一的选择。
5、可以深入研究任何你感兴趣的主题
如果你发现自己是一个好奇心非常重的人,你对正在学习的东西渴望深入挖掘和细致的理解,那么你可能会对大学的学习生活感到索然无味(可能编程训练营同样也是如此),在那里,往往会强调对教科书的“好读书不求甚解”,而不是真正地深入理解、融合贯通。
二、自学编程的劣势
如果你对学习编程感到无所适从,并且也没有人来指导你,那么前面所讲到的自主安排时间表、自主设置课程列表的“灵活性”对你而言将是一种戕害。
1、你必须要弄清楚要学什么和该做什么
【每个人都向往自由,但是鲜有人能够真正驾驭好它】如果你不是一个善于自我激励的人,或者你不善于在没有铺好的道路上奋勇开拓,你应该考虑一下是否通过其他更能获得指导的途经去学习编程。
2、对找工作毫无帮助
如果你是自学成才的程序员,找到自己的第一份工作难于上青天(没有任何工作经验,没有任何证书或者文凭,要想能证明自己胜任一项工作,这是很有挑战性的)。
3、很容易失去动力
当新鲜感消失的时候,每件事情都会变得索然无味;因此,从某种意义上说,在完成了一天的艰苦工作之后,还要在晚上7:30自学编程,似乎就没那么有趣了;在这种情况下,你能做到坚如磐石吗【那么,你还不如更好的利用体系化的学习方式来让自己变得更加坚定一些吧】;如果你没有动力,或者你擅长自我激励,那么独立学习是一件很困难的事情。
4、脱离社会
刚开始独自学习的时候,这个问题可能并不至于很槽糕,但宅在自己的房间里,整日面对计算机几个星期之后,你可能就开始发狂了;在你做出最终决定之前,这必定是你需要检验的东西,看看你你能否自如克服。
5、可能会在知识体系上有所欠缺
当你独自工作、独自解决问题的时候,你会形成一些自己特有的做事方式;这并不一定是坏事,但一旦你找到一份真正的工作,如果你想出的方法与人们普遍接受的方法大相径庭,你不见得愿意去学习和改变自己的做事方式(当然,你可以通过有意识地在你自学编程的过程中增加一些学习内容来改善这一点(比如:学习计算机科学的内容,参加开源项目等;但你一定要意识到,在你无师自通而掌握的知识体系里可能会有一些你还没有意识到的空白)。
三、应对自学劣势的策略
1、制定计划
凡事预则立,不预则废(如果你不为如何成为一名软件开发者制订一个切实可行的计划,你的失败无可避免)在你自学和为自己制定课程列表的前,一定要做好计划(比如计划:你要学习哪些知识?需要花费多长时间用于自学?你需要采取怎样切实可行的步骤引导你从现在的位置到达彼岸?等内容都要考虑清楚)。
注意:计划是不会完美的,所以你一定要在执行计划的过程中不断修正它【重要的是:时刻要保证有一份你确实花时间经过深思熟虑而成的切实可行计划】。
2、设定时间表
对任何领域而言,累积效应都是最有力的影响;制定一个时间表,利用它来充分发挥你的优势,每一天、每一周你都会稳步前行(你可以自行决定学习时间的长短、学习频率的高低,但是一定要提前制订好时间表,并且遵照时间表坚持实施,就仿佛你的生活完全依赖它一样)。
3、自学期间不忘拓展人脉
自学编程的主要缺点之一就是缺乏他人的帮助,缺乏人脉在完成自学之后帮你找到工作【也就是说:你的人脉网络对你而言是至关重要的】你肯定不想看到这样的局面:费尽千辛万苦学完了编程,踌躇满志准备去找工作,突然发现你甚至不知道从哪里下手,你没有人脉可以帮你(你可以:开始写博客,参与社区活动等内容来拓展自己的人脉)。
4、找一位导师
不需要找类似编程泰斗一样的人物做你的导师,而且你也不需要某人陪你走过你的整个学习历程;但是当你遇到一些问题需要帮助的时候,你应该至少有一位软件开发者可以请教;拥有以为可以依赖的导师,在你感到怅惘或迷茫的时候,可以帮助你走出挫折感的泥潭,节省很多时间;因此,在你开始自学之前,需要确定你迫切需要帮助的时候你可以去找谁,即使你必须要为他们的建议付钱。
5、至少完成一个兼职项目
反正不管怎么样都是要写代码的,那么干脆你就为一些有用的事情写代码吧,这样会让你一举多得(即使你完成的项目就是一些自认为是“垃圾”的东西,至少你也完成了一些东西,于是在你自学编码的艰苦历程结束的时候,你总归有些成果可以拿出来展示)【如果你不知道自己在做什么,也不要担心,在你实际做项目的过程中你会慢慢理解的】
6、订阅高品质的编程学习网站
订阅类似《极客时间》这类高品质的编程学习网站,针对每一个有关编程的主题,你都可以找到不计其数的大量内容,每一种都是由各类专家提供的,而且物美价廉;物超所值。这是一种很好的自学方式,而且是体系化的。