种一棵树最好的时间是十年前,其次是现在。这是我比较喜欢的一句谚语。不管做什么事情,我都会用这谚语提醒自己。我自认为自己绝不是一个很聪明的小孩,因为刚开始学习VB的时候,感觉老师讲的完全是天书,自己一点也听不懂。年幼的自己,也未曾想过多年后会依靠写代码为生。
一、凡事预则立,不预则废
听说每个人都会有一段属于自己的叛逆时光,如果不在青春期,那么就在以后。而我的青春期叛逆时光,就如同一场急骤的雷阵雨,急匆匆的来临,又静悄悄的结束,好似有人当头棒喝,让自己觉醒。觉醒后,又迅速为自己定一系列的小目标。人的一生其实就像一串珍珠项链,那些小目标就是一颗颗美丽的珍珠。
青春期的自己比较叛逆,不知道未来是什么,更不知道为什么要去学习?所以在那些古怪又忧伤的问题没想明白之前,从进入高中的校门那一刻开始,就注定自己将要成为一段时间的不良青年,每天吊儿郎当,惹事生非。没错,就是您想的那样。
浑浑噩噩的日子每天过得总是那么漫长,却又流逝的这么快,转眼就消失的无影无踪。在高一寒假期间,我突然想通了很多事情,就像程序中阻塞的线程,不再阻塞一样。昔日的迷茫已不复存在,于是在高一的第二学期,我转学去了市里的另一所高中。在新的环境里开始好好学习,参加社团活动。没多久就担任了班上的数学课代表,也加入了校广播站。在那一学期中还参加了演讲比赛、辩论比赛等,为班级争取到了荣誉,在学期结束还获得了三好学生和奖学金。真是有趣的事情。
任何人其实只要目标明确,同时又肯努力的话,好运就必然会眷顾你。在那一学期里,我补习了上学期落下的所有课程,包括VB编程。以前一直觉得编程难于上青天,然而再次学习时候发现是自己高估了VB了。想象中的困难都是那么的不堪一击,只要自己想学习,就一定能学好。
二、编程之初、打牢基础
作为初学者刚开始学习一门语言的时候,一般建议先从如何使用开始起步。就像我们买了一个新玩具一样,不要着急去弄清楚,别人是怎么制造出来的。只要先去动手试一试,看看该如何去玩,就行。而不建议直接从阅读源码开始学习,当然对于上神们来说可以这样。个人还是喜欢用一些笨方法来学习,具体如下:
2.1 手眼结合,熟悉语法
自己是从VB入门的,后来学习了C#、Java、Objective-C、Swift、C、C++、Python、Go等,真正有人教的是C#和Java,剩下来的都是自己利用时间学习的。不管是学习哪种语言,都需要掌握语法。除了少部分语言语法差异比较大,大多还是有相似之处的。一般在掌握了某种语言之后,对于其它语言的语法很快就能熟悉,可以说是触类旁通。真正的掌握了一种语言之后,去学习其它语言所花的成本还是比较低的。
言归正传,对于新语言的学习,我们需要做到手眼结合的去熟悉语法。所谓手就是勤于敲代码,不要眼高手低,在看代码的时候,感觉自己什么都能看明白,然而在写代码的时候,写一行代码能报三个错。当然这是第一个要素。第二个要素是要勤于查看官方文档,最好的学习资料永远是官方文档。有条件的话可以在白纸或者本子上抄写(默写代码)。(无聊的时候,在没有电脑、没有纸笔的情况下,可以小声的在嘴里读代码给自己听,一定得注意安全,不要在马上路上,车辆较多的地方)
注意,如果之前没有任何编程语言学习的经历,个人不建议直接买本书去学习。如果都能看书学会各种知识的话,那还要去学校上课做什么呢,是不是?所以,对于这些小伙伴来讲,可以先去一些知名的在线学习站点,看一些相关的视频教学课程,跟着视频能玩起来了,然后再去买本不错的书,进行系统的技能学习。——这是个人的愚见,毕竟我们先得学会走路,才能去学着奔跑,否则会容易失控 。
2.2 学会自己理解问题,动手寻找答案
正常情况下在编程中遇到问题,都可以利用搜索引擎找到我们想要的问题答案。在编码的过程不要一遇到问题,就不假思索的去向别人提问。尤其是在一些技术群里去提问一些基础的问题,当然运气好的话会有一些热心的大牛愿意回答我们的问题,也不排除没有任何响应这种极端情况,这样其实就是白白耽误时间。在准备学习之前,最好可以看看《提问的艺术》这本书,学习一下如何高效的提问。提问也需要,学习么?答案是肯定的。
如果条件允许,你可以带上电脑去图书馆学习。自己以前也常常这么做,因为图书馆查阅资料方便,所以我基本上一有时间,都会跑去图书馆,一待就是一整天。
2.3勤做笔记,常做总结
把一些常见的错误,在学习之初可以记录下来。以防后续遇到同样的问题,而忘记如何去解决。同样的,对于新知识点的学习,在理解了要点之后,可以将重要的部分记录在自己的笔记上或者自己的博文里。这是一个很好的习惯,虽然梳理知识会花点时间,但是经过梳理后的知识点,我们会记忆的比较牢靠些。对于还在上学的朋友来说,课前预习是需要做的功课,课前把有疑问的地方记录下来,上课认真听讲,然后找时间向老师提问,同时还要做好课后注意复习。
2.4学以致用,不浪费技能
自己会在掌握了一些技能之后,根据日常生活中的实际情况,然后编写一些小的软件来玩玩。这样既可以解决生活中的小问题,还能有效的巩固自己所学到的知识,真是一举两得。何乐而不为呢?比如,自己常常会记不清公众号的账号或者论坛的账号密码,就在学了iOS开发之后写了一个管理账号和密码小工具。
2.5培养长时间注意力
做技术的人得耐得住寂寞,忍受得了孤独。拥有无下限的耐心,懂的坚持。因为我们常常得重复的去做同一件事情,时间一长难免会感觉枯燥,所以还得学会调节自我的心态。用心做点事情,这样至少对得起光阴岁月,对得起自己。
业精于勤,荒于嬉,这句话一点也不假。当然该玩的时候,还是得去玩。培养长时间注意力,可以让学习事半功倍。我们可以先从15分钟开始锻炼起来。学习15分钟,然后给自己一点小奖励,然后继续,循环往复。
慢慢的可以延长时间15分钟、30分钟、45分钟、60分钟......全神贯注的去学习某个知识,这样效率会很高。自己也是这么去做的,可以配合《番茄工作法》来练习。如果感觉自己当天的状态不佳,可以视具体情况安排学习计划。最好每次学习的时候只去做一件事情,在进入学习状态之前,自己会把手机静音,关闭各类社交软件,然后安安心心的去做事情。尽量的不要让不相干的事情来打断自己的学习,这样可以培养自己的注意力和自我约束能力。
说件有趣的事,去年在上海参加Intel的Iot比赛的时候,自己曾通宵玩过Edison开发板。团队里华为的小伙伴早就回去休息了,然后就剩下自己在比赛现场查资料,编码。那是一场48小时的比赛,其实自己的想法很简单,既然是比赛,那就要玩的开心一些,毕竟这样的机会也不是常有。当然个人不提倡熬夜,这样对身体的伤害比较大。
三、进阶之路,衣带渐宽终不悔
80%的知识,我们只需要花20%的时间就能够掌握;而剩下的20%的知识,我们则需要花80%的时间去学习与研究。这是一个非常有趣的法则。所以作为一个程序员还得耐得住性子。
3.1 善于阅读,勤于思考
正常来讲1~2个月,就能掌握一门语言的80%使用技巧。在这个阶段,我们可以尝试着买一些进阶的书看看。在能够熟练使用这门编程语言之后,可以学习设计模式、数据结构、算法等知识。有时间的话,还可以读一读《人月神话》、《人件》之类的书。趁有时间的时候写写读书笔记。
3.2每天合理的花点时间浏览技术论坛
闭门造车,是件可怕的事情。所以自己每天会用一部分时间去浏览技术论坛,例如:开源中国,CSDN,开发者头条、码云、Github等。在这些站点上,可以学习到很多有用的知识,也可以了解到别人是怎样使用某些技术以及为什么要这么去做?然后我会结合自身的情况去做一个比较和总结,将学习到的好的一方面,融入到自己的开发过程中。嘻嘻,这就也许就是拿来主义。
3.3参加社区技术交流活动
我为什么要去参加线下技术交流活动?原因其实很简单,因为我需要跟人交流。需要去了解那些我不知道自己不知道的知识和我知道自己不知道的知识。其实一开始我也很懒,很宅,不愿意出门,也不善于跟人交流。可是我清楚的知道,自己始终都得改掉这些毛病。于是我会安排自己,每隔一段时间就去参加一些对自己有帮助的活动。一般都是在活动行这个app上得到一些活动的资讯的,这是一款不错的app。(真的没收人家钱,o(>﹏<)o不要打我)。参加在线下活动,不仅可以得到与大牛交谈的机会,也会结识一些的志同道合的开发者朋友,增长自己的知识面和见识。
3.4兴趣是最好的老师
在日常生活中,我经常遇到一些面试者,在面试中的回答问题的时候说“抱歉,这些基本的知识,这个我忘记了”。个人觉得其实这都是借口,都是刚培训出来的,刚学习的知识怎么会忘记了呢?这其实从侧面反映的是,他对编程这事情不感兴趣,只是跟风去学习了编程。这种情况很常见,所以才说兴趣是最好的老师。
那么如何培养兴趣就显得尤为重要。我是把编程语言和电脑当做自己的朋友来培养感情的。
在学习某种开发语言之前,可以先去了解其由来和发展。这可以作为培养兴趣的第一个步骤,然后可以制定一些奖励计划,当然是自己奖励自己。兴趣也是可以是慢慢培养出来的,有了兴趣之后,就会自觉沉醉于编程的世界里。如果感觉哪天只要不写代码,会感觉不舒服。那就厉害了,说明你已经入坑了。
四、舍弃存量,推倒重来
做为一个技术宅,最可怕的不是不会技术,而是什么技术都懂点皮毛,没有擅长的领域。这是作为技术派来说比较悲哀的一件事情。
市面上的编程语言种类繁多,具体要学习什么可以根据自己的实际目标去选择。我开始入门的时候没想过这个问题,一开始只是要掌握一门开发语言而已。后来 学习了C#和Java,因为自己比较喜欢Web开发,于是就走向了Web开发者之路。花一个月时间学习了两种开发语言,接着开始学习HTML,CSS,JavaScript,SQL,各种框架。最后自己将Java作为了主要前进方向,虽然我觉得C#会更好,更简单一些。选择Java的原因可能是因为他可以做嵌入式开发,虽然后来我也没用Java做过嵌入式开发。
不要在意这些细节,反正要有一门自己擅长的技能傍身,是必须的。如果还是不知自己要学习什么语言或者技术,可以看看自己想入职的公司的相关岗位的招聘要求。一般在学校的孩纸不用担心这个问题,主要还是半路出家的小伙伴得思考这个问题。
2~3年之后,稍微有点存量了,可以尝试的去学习一门新的语言或者技术。这样可以防止自己的思维固化,所以我之后也学习了Android和iOS技术,并参与实际的项目开发。先学的Android开发,主要因为学习成本比较低,用PC配置好开发环境,就能上手开发。偶然的机会帮学妹做课题研究,接触了单片机。然后就被学妹坑了,自己会在业余时间研究:51单片机、arduino开发板、Edison等。接触未知领域一开始是胆怯的,身边都是学软件的,懂这些的小伙伴还真是不多。好在自己有耐得住寂寞的天分,开始是各种搜索,翻阅论坛的帖子,好在最后经过一番折腾之后总能解决问题。
通过学习C、C++和硬件开发,发现原来很多知识是可以串通理解的。动手实践之后,还帮助自己理解了很多以前记住的概念性知识,就像小和尚顿悟了师傅讲的道理一样。人们不是总说,小和尚念经,有口无心么?这下好了,小和尚开始有心了。
语言只是一种开发工具。具体要用什么语言,学习什么语言,要根据自己和团队的实际情况去定。杀鸡焉能用在牛刀?所以作为一个开发者,要勤于思考。也要懂得舍弃存量,该学习的时候,勇敢的去学习一些可以提高效率的技能。
舍弃存量的过程,好比武侠小说中,修炼多年的武功被反派给废了。起初会很难受,然后会渐入佳境,收获良多,更近一层。自己在开发Java Web项目的时候,起初非常喜欢用Spring(java的开发框架)+mybatis+html+ajax这个套路。但是遇到一些体量很小的项目,就让我犯难了?于是我就开始想,能不能使用更简单的技术,去完成开发任务。最终我锁定了jfinal(国内开源,Java开发框架),刚开始使用的时候,那感觉太糟糕了,只有自己能体会那种小绝望。好在自己快速调整了心态,按照官方文档来学习,一天之内就完成了框架的切换学习。
既然选择作为一名程序员,就应当保持终身学习者的姿态。不用怕舍弃存量,推倒重来。合理的推倒重来,能让我们对过去掌握的知识,理解的更透彻。最怕的就是手里拿着锤子,眼里只能看到钉子。在我的成长过程中,我有两年没有写过一行代码,是两年时候重拾起来的。所以不用觉得这世界上真的有什么很难的事情。
五、经常锻炼,打造健壮的身体
经常锻炼可以让我们心情愉悦,身体健康。原因大家都懂的,为了写好代码。
PS:关于学习的方法,最重要的还是离不开努力、肯花时间和独立思考。学习写代码,真的是一件简单,又让人沮丧并快乐的事情。尤其是柳暗花明又一村的那一瞬间。其实只要多写,多看,多问,多交流,多想就足够了。当然,我所讲的都是错的。因为那是个人的一些学习经历与方法,不一定完全适合你,所以找到适合自己的学习方法很重要。加油!
网友评论