年近三十,非计算机专业,在体制内工作六年后转职程序员心得

三月份转职成为程序员,现在已经一个半月了,虽然转职的路上充满了很多的未知和不确定,但只要方向正确、路径合适,转职成功率还是很高的。回顾自己的转职历程,有些收获也有教训,在这里分享一下,希望对想转职的朋友有所帮助,希望能帮助想改变自己命运的朋友更快的达到目标。 个人基本情况 89年生人,大学本科,电气工程及其自动化专业,11年到17年期间在央企工作了六年。 学习过程 大学期间有学过c语言、汇编语言、网络应用基础等理工科的公共课。毕业后工作的六年里再无实质性接触过编程,直到2016年度底报名新大全栈营学习ruby on rails,在学习ror期间发现自己对编程的兴趣,于是产生了转职程序员的想法,加之先前的工作做得不是很开心于是萌生了脱产学习的想法,给自己一个空窗期用于学习和思考人生。最终于17年3月底开始脱产学习直到今年三月。脱产期间除了学编程外还认真学习了英语以及研读了一些社科类书籍。学英语是因为它是程序员的玻璃顶,由于打算将编程作为终生职业,所以想趁着间隔年一并解决。研读社科书籍是因为编程只是一项技术,它只有结合具体使用场景才能发挥作用,而使用场景更多时候是由技术以外的东西决定的。之所以要说这些,是想说明如果你只安排学编程的任务,转职根本不需要一年的时间。三月底离职后,我又学习了一段时间的ror,原计划半年后也就是9月份找工作的。结果在8月初的时候徐帅开js课了,抱着补充前端知识以及报了不吃亏报了不上当的199元,我报了徐帅的课程。在上了徐帅的课程后,我开始深入理解编程是怎么一回事,于是学习重点暂时由ror转向了js,并将找工作的日期推后一个月。可万万没想到,徐帅开完入门又准备开进阶课,于是自然而然的又想跟着上了。在这个过程中,一方面全栈营的同学给我反馈了ror在中国就业情况不理想,另一方面我也开始留意到js大发展的趋势,以及ruby衰败的态势。最明显的两个数据就是github去年10月份发出的程序语言排名,以及rails和express两个功能类似框架的star数。于是,徐帅十月份在JavaScript社区办一日一学活动的过程中,我逐渐确定了放弃ruby的路线,改走js路线。后来,自然而然跟着徐帅上进阶课,于是找工作的日期再次推迟。由于先前学习的ror偏后端,所以原计划在进阶课结束后去找nodejs的工作,如果不行再试着找前端或者ruby的工作。12月份的时候进阶课结束,我按计划打算开始找工作,但这时不太确定是先尝试nodejs是否稳妥,于是给徐帅发了条微信咨询,最后徐帅给我打了电话,给的建议是先从前端入手。于是,我就开始补之前略过的一些前端知识html5、css3、bootstrap3,决定补完它们去投简历。万万没想到,这时徐帅又要开vue课。那还能咋办?跟着学呗。于是,找工作的事情就安排到年后了。这期间,一方面跟着徐帅学vue,另一方面补充上面提到的几点知识。就这样到了今年三月份上面的知识我才大致过了一边,并且把简历准备好。 找工作情况 三月份中旬开始正式找工作,在主动投简历之前朋友介绍了一家,但不是自己要走的方向就没给简历,之后自己先后一共投了三份简历,一份说不合适,一份没回复,一份约面试然后面试当场就确定入职,后面也没再投过。找工作的平台是boss直聘。找到工作后,上面又有三家主动联系我,但因为现在的工作时间不长都没有去接触。 简历 张越张大大在群里说过,找工作最重要的是作品。这点我深表认同,尤其是在简历阶段。在和同期入职的程序员接触了才知道,找第一份编程工作时简历能三中一还是蛮难得的。当然,这是他们说的,究竟如何可能还有运气成分。但,我觉得要说自己简历的优势在哪里,那就是有作品。首先是两个我在学习ror时做好且部署好的网站。其次是和徐帅学习express时做好的博客雏形,虽然没部署,但完整代码在github上。再次,就是github上的commit数。虽然不算多,但近一年也有将近三百条。它们证明了我最近一年确确实实在敲着代码。最后,就是我在学习ror的时候写得一个记录博客。在学js的时候,想自己做出博客再写。。结果现在博客也没部署好,记录也很长时间没写了。。。简历还有一些其他东西,比如知识面,技能等等。这些基本来来去去都是那些,但有一点,如实填写你的掌握程度,或者适当抬高一点点,比如写个熟悉。有了这些,我觉得简历关基本是可以过去的。 面试 如果不算找工作前和朋友介绍的公司cto吃饭闲聊的话,我就只面试了现在的这家公司。面试过程除了自我介绍,就是问我简历上的东西。更具体的,就问了我vue和express抄(这里要感谢徐帅一下^o^)。vue的话,问我用来做过什么,我就说做过徐帅的那个抽奖及打卡,并且移植到了vue-cli。express就问了中间件和错误前置处理原则。由于两个问题答的比较流畅,他们也没多问,当场就叫hr来谈入职。这里要说一句,碰到这种情况千万不要急着入职,最好再多面两家挑一下。不过我也是因为编程工作零经验,主要目的是尽快拿经验,其它的一律以后在考虑。 心得 回看自己的转职历程,发现目标确实不够明确,没有分清轻重缓急。假设时间能倒流,或者我能给过去的自己提一些经验,我会和他说下面这些: 1、如果是想转职,那么应该先以成为工程师为目标,而不要一开始就拘泥于长期想发展的方向,转职是从0到1,转方向是从1到N。先把最重要的事情办了。 2、程序员重经验,所以越早积累好处越大,而转职效率最高的是转前端工程师。这不但是从入门难度低,而且就业需求也高。这一点可以打开招聘app看到,这也好理解。无论什么后端,什么公司,什么内容,最后总需要一个页面去呈现内容或者实现交互,无论是对用户还是对管理者。 3、html、css、js是基础,而js同时也是重点。html除了基本的外还要学一下dom,css的难点是布局,弄好布局其它的都是小问题。有了基础的前端知识以后,熟悉一下前端框架。从使用率和就业市场讲就是徐帅讲的vue还有他推荐的bootstrap。至于其它的比如,jquery,看过dom学起来就和玩似的。而express则是一个加分项,懂点后端的前端工作起来会顺畅很多,但这不是转职前端的必须项。 4、要有自己的作品,以及记录自己学习的证明,github就是最理想的平台。有事没事往上推,而且作品完整度越高越好。不过前端的话,有本地可呈现的页面也就可以了。作品会和需求挂钩,要给自己找需求,没有的话问问工程师朋友,他们都做过什么项目,有哪些简单的自己可以试着做做。 5、学好一门语言再去学其他的,js就是最理想的入门语言,而且日后发展方向多。从使用量和前后通杀的现状来看,必然还会活跃很长的时间,未来哪一天成为编程界的英语也保不准。 6、多在程序员的圈子浸泡,很多概念可能一开始没理解,很多别人讨论的问题可能也没听懂。但,这些概念的熟悉度会提高,这些问题未来的某天可能也会遇到,那时一个聊天搜索或者帖子搜索就能帮你剩下几个小时甚至几天寻找思路的时间。(时间点回到现在,js微信群和JavaScript社区就是很好的技术圈子,已经帮我解决了不少技术问题。) 写给想转职的朋友的其他的话 很多事情都是有风险的,包括转职这件事。但这件事的风险也并非不可控,它的风险并不在于你能不能学成编程这项技术,只要你够努力,方法对,学成只是时间早晚的问题。风险在于,如果你想把它当做一门职业,你能不能为市场提供它想要又价钱合理的东西?这涉及两个因素,一个你学的技术是不是市场需要的?另一个是,你是否能拿得出匹配你想要工资的能力?如果上面两者你都能回答是,那么年龄、专业、学历、经历通通不是问题。因为人家要的就是你有他买得起的又想要的能力。 对于这两个问题。 工资嘛,你可以开的低点。大不了中级水平去应聘初级岗,老板肯定高兴得当场想把你签下。 至于你的技术是不是市场需要的这个问题,我敢说你能来到JavaScript社区,这个未来几年已经不是问题了,前提是你够努力。至于几年之后会如何,那就要看JavaScript社区的小伙伴们的努力了。 当然,这里面自然也包括了你,加油哦^o^。

May 5, 2018 · 1 min

工作三周分享——做前端可能需要的一些知识

转行成为前端工程师三周了,有很多东西想分享给社区的小伙伴,但无奈现在每天都是枪林弹雨,周末和晚上都在狂补基础,时间实在有限,更多的东西等缓过来再分享,这里就先简单的分享下这段时间我觉得对转前端比较重要的东西,很多是徐帅在课上强调过的,还有一些我开始找工作的时候徐帅也给过建议,但是当时没有get到点,现在有了切身体会,所以供小伙伴们参考和补课。 1、DOM对象,这是链接HTML/CSS与JS的关键知识点,也是jQuery/Vue等库和框架的底层基础,少了它前端知识会有重大缺失。有的公司不一定用它,但这个知识对于理解前端框架非常重要。 2、原生CSS,虽然有很多框架,徐帅也说过用框架会有效率。但是,工作中不可避免会遇到一些框架解决不了的问题,这个时候使用原生的CSS就不可避免。然后,这里重点的是CSS布局。因为布局定好以后基本就是调样式的问题了。 3、jQuery,很多公司已经不用这个了,但是还可能有很多公司在用,我公司的一个管理页面就是用的它。所以,有时间的话最好学习一下,而且如果了解了上面提到的 DOM 对象,看jq其实非常快。 4、js基础,就像徐帅说的一切都是JS,无论是小程序还是各种框架甚至是google插件本质上都是JS写出来的。js基础越好就意味着你能做的事情越多,在具备基础的html/css知识后,本质上考验的就是你的js基础知识了。 5、VUE和小程序,小程序和VUE很像,但是还是有很多不一样的地方,如果要开发小程序,一定要认真看小程序开发文档,虽然有和徐帅学VUE理解会很快,但这不代表你可以直接上来就用。认真看文档是程序员最基本的素质。 6、把知识用起来。很多同学跟着学习了好长时间还不知道怎么用,这里反应了两个问题。第一个是没需求,第二个是没思路。 (1)工作与不工作对于学技术最大的区别不在于有没有工资,而在于有没有需求。当产品提需求的时候,为了工作我们自然而然要去把知识用起来。但是还没工作的同学就没有这个条件。那怎么办呢?自己找需求。方式很多,比如做老师布置的作业、做自己想做的东西、到freecodecamp上做题以及问问工作了的同学在做什么,只要你想给自己找需求自然找得到。 (2)有需求后很多同学做的时候会没思路,这个问题其实不单没工作的同学会遇到,工作了的也会遇到。除了多看基础多思考外,更高效的方法就是多看别人的Demo,demo就是别人写好的项目代码,最好看类似项目的开源代码。这个过程里不单可以直接把部分代码拿过来用,而且可以学习和借鉴别人的思路解决自己的问题,同时这也是运用基础知识的过程,通过这个过程你会发现自己的不足,就可以有针对性的去补基础了。 7、看demo的技巧。 (1)有的demo往往很大,这个时候很难下手,这个时候可以试着庖丁解牛。就是需要用什么功能就重点看对应部分的代码。 (2)在想弄明白代码作用的时候,可以多用删除和撤销。这样就能很直观的理解很多代码的作用。 (3)编辑器搜索,当我们想了解一个变量或者函数的作用的时候,不妨在文件甚至项目里搜索它,看看它都用在什么地方,或者在那里定义,又或者从哪里引入。这对于理解变量和函数有着非常大的帮助。 (4)把开发文档、w3c和mdn当作字典来用。虽然google也可以很快查的你想要的东西,但直接使用开发文档或者w3c和mdn来查相关内容效率会高很多,看demo就像看英文文章一样,学过html/css/js就像基本知道了语法,剩下的标签、属性、借口无非就是单词。碰到不懂的查一查,看demo基本问题就不大了。 8、photoshop,如果是找做前端页面的工作(比如实习工作),会要求你根据PSD切图还原界面,这是传统的前端做法。psd就是ps设计稿,基本你需要做的就是切图还有写html,再通过css调样式,之后给页面绑接口。如果是找这类型的工作,建议简单学一下PS的基础技能,不算难,学几个具体的PS技能就可以办到了。

April 7, 2018 · 1 min

Javascript连学一月活动总结

一个月的时间,很快就过去啦。一个月来在老师的带领下学习和复习了很多的知识点。关于知识点的总结在问题里还有老师的总结里已经写得很详细,我就分享一下心得体会吧。 首先要检讨下自己,由于中间好友结婚去帮忙所以有几天的学习是后补的。好在学习这个事情永远都躺开大门,只要你想学,知识永远在等着你。 在上老师的JavaScript入门课之前,我实际上并没有真正接触过JS。虽然有着大学C的基础,以及先前学习过Ruby on Rails框架的基本套路,但我始终没有搞明白在底层的数据结构和上层的功能之间究竟发生了什么,也就是他们是如何打通的。 这个疑问我最终在老师的JS入门课上找到了答案。然而这个答案只是思想上的答案,它并不能使我立即懂得Ruby的基础,也不能使我立即拿起C的基础去实现高级的功能。它只给了我一个方向,至少要先把一门语言的知识从下到上真正打通。 这时我就面临了是往上学JS还是往下学Ruby的问题(直接抛弃C)。由于JS和HTML及CSS一起构成了前端三大件,在深入学习ROR过程中也早晚需要学习,加上在JS入门课时已经在看了部分犀牛书,因而选择优先深入学习JavaScript。 就在我慢慢啃犀牛书的时候,老师发起了这个一连三十天的活动。到今天为止,我也就啃到了7.6,更不用说一个月前。然而,这并不影响我参加老师的活动。闭包、索引、Promise、constructor、docker……这一票的概念我也是看到问题后才去翻书、去google的学习的。 这是看书学习的两种模式,在面对实际问题的时候往往第二种模式更有效率。第一种模式,类似于我们的对象遍历方法,它是在遍历书上的知识,并为他们在你的大脑里建立索引。而这么做的一个目的无非是为你将来在使用第二种模式解决问题的时候更有效率,能更快的找到你要的东西。 个人认为老师这一个月不单为了教给我们一些知识和工具,更重要的是尝试着带我们熟悉这种解决问题的模式。给你一个问题,去找一个知识点;给你一个库,去找它的用法;给你一个需求,去找它的实现。写到这里,不由得想起老师在js入门课第一节和最后一节上说过的话,大意是:我们不希望这门课只是教你们一些套路,我们更希望能教你们一些东西,能让你们去解决问题,能去做出真正的东西来。 问题就是我在JS入门课上找到的把编程语言从下到上打通的关键,经过这一个月我更加坚信这一点。在编程的世界里没有多余的东西,因为那会消耗多余的资源。数据类型也好、方法函数也好,它们一定解决了什么问题才得以在编程世界存在,而它们解决问题的方法又能组合起来解决更大更复杂的问题,以此类推直到我们能直观感受到的程序与应用,这就是这些基础知识存在的意义。 而打算迈入编程世界大门的我们需要掌握这些基础知识的意义在于,当我们遇到一个未知的问题并试图分析解决的时候,你会发现在这棵发散的问题树的末端,等着你的始终是基本的数值、文本、布尔值、数组、对象、方法、函数、库这些最基本的东西。只有你懂得并正确运用它们,才能将这棵发散的问题树反向收敛,并最终解决你想要解决的问题。 诚然,有一些问题不需要太多的知识,可能掌握一两个库就能轻松解决,但另一些问题则不是。掌握越多的知识意味着能解决的问题也就越多。而要掌握越来越多的知识,也即意味着不断的学习。 老师带领我们的这一个月,充其量不过是常规热热身而已。

October 31, 2017 · 1 min

Refactor & 效能提升第五章作业

由于商店网站中有订单时间这一项,而且出现在了用户及管理员两个订单页面,而且时间格式可能会更改。所以,针对读取时间且装换类型的语句进行了,helper封装。 由于网站中并未出现HTML 与Ruby 高度混杂、该段程式码有很多 if / else、该段程式码衣服穿很多层,所以并未使用helper来输出ruby代码。 最后,由于商店是个精简的系统,所以代码并未出现重复,且相关的功能已经实现partial,所以也不需要进一步的partial优化。

September 29, 2017 · 1 min

Refactor & 效能提升第三章作业

为什么后端效能大部分是慢在资料库?如何解决这个问题? 主要有两个原因,首先,是因为网页生成代码实际上近乎完成了,大体上只差相关数据而已,相对运行起来会比较快。而数据则需要去数据库里面去,这就涉及到读取和赋值,并最终生产网页。所以会慢一些。其次,是因为有时候数据库和后端代码并不在一个地方,所以本身传输又会占用一些时间。综上两点,读取的数据越多,这相应的时间则越多。而后端的code代码则是基本不变的。 解决这个问题本质上就是减少数据读取的时间,具体有4个方法: 1、减少数据请求次数 因为在读取数据前,还会进行数据请求,这个过程就会花时间,所以同样的数据量请求的次数越少则消耗的时间越少。 2、提高数据读取效率 在读取数据前需要找到数据,但数据量比较大时就会在搜寻数据上就会画更多的时间。所以,使用一些数据寻找技巧就非常重要,而最主要的就是建立索引index,它的本质就是对数据建立分类索引,因而能降低寻找范围进而提高效率。 3、使用更合理的数据结构来索引 由于不同的数据占用的存储资源不同,所以在使用索引的时候,如果使用占有存储资源小的数据结构来进行的话,也会减少一些时间。比如布尔值和数值就比时间值快很多。 4、减少数据运算时间 在请求数据是有时会对数据进行运算,比如counter运算。所以,相对的就可以事先进行相应的计算并把计算结果存入关联的counter_cache里,这样在请求数据的时候就不需要进行计算,而是直接读取。这样就把读取网页的时间减少了,而是把运行过程留给数据推送后的后端进行。

September 28, 2017 · 1 min

安装gem "bullet"

1、打开bullet的github官网网页,认真阅读README.MD文件 2、在gemfile文件里,gem rails 及数据库gem的后面加上 gem 'bullet', group: 'development' 3、在config/environments/development.rb里加入初始化命令 config.after_initialize do Bullet.enable = true Bullet.alert = true Bullet.bullet_logger = true Bullet.console = true #Bullet.growl = true #Bullet.xmpp = { :account => 'bullets_account@jabber.org', # :password => 'bullets_password_for_jabber', # :receiver => 'your_account@jabber.org', # :show_online_status => true } Bullet.rails_logger = true #Bullet.honeybadger = true #Bullet.bugsnag = true #Bullet.airbrake = true #Bullet.rollbar = true Bullet.add_footer = true #Bullet.stacktrace_includes = [ 'your_gem', 'your_middleware' ] #Bullet.stacktrace_excludes = [ 'their_gem', 'their_middleware' ] #Bullet.slack = { webhook_url: 'http://some.slack.url', channel: '#default', username: 'notifier' } end 由于是本地开发使用的,因此不需要使用发信及关联其他软件,故将相关的选项屏蔽 ...

September 28, 2017 · 1 min

Refactor & 效能提升第二章作业

1.为什么要将 CSS 放在最顶层,将 JavaScript 放在最底层? 首先,网页打开的时候会经历一个过程,这个过程中会加载html、还有下载相关文件、执行css和js。由于css是进行页面渲染的,所以通常需要一开始就执行。而如果将css和js文件放在一起,它的下载时间就会很久,这样就会出现画面很久才打开。又因为javascript是进行动作相应的,所以这一块实际上对现实页面的主题影响不大,因而把它放在后面。这样就可以实现页面的快速打开后,才加载js。这不但复合网页加载逻辑,而且也会使得用户在打开页面的时候会有很好的体验。 2.如何尽可能减少HTTP Requests? 减少http requestes的方法就是将文件打包下载,而不是多次请求。具体方法,就是将css文件以及js文件合并在一起,而不用分写在多个文件里,进而多次请求。然而,在使用ror的时候,实际上rails已经帮我们实现了这些功能。 3.CDN是什么?请用自己的话解释 CDN的英语是content delivery network,直译就是内容分发网络。通常我们读取文件都是之间链接到明确的一台服务器去取得,这样就是收到和这台服务器之间的网络链接所限制,而CDN就是解决这个问题的一个办法,具体的就是我们在取得资源的时候,不是直接连到源服务器。而是连接到这个内容分发网络,它是由分散的服务器组构成,它会缓存一些源文件在分散的服务器中,所以如果同过它取得资源时,如果该内容在他们服务器组中有储存,它就会自动的选择一台离我们最近的服务器给我们回传数据,如果内容在他们的服务器组中没有存储,它们会去源服务器读取文件并发送给我们,同时会进行一份缓存。 4.如何提升自己的网站加载速度? 提高自己的网站加载速度有以下方法:1、将css放在Html文件开头,而把javascript放在html文件末尾;2、使用CDN来分发网络资源;3、使用多节点访问网络资源;4、将css/js文件合并在一起;

September 28, 2017 · 1 min

Refactor & 效能提升第一章作业

打开一个网站的速度通常取决于三个因素:1、网页文件的大小(和网速决定下载需要的时间,通常一个页面100-200KB,网速通常不可控。);2、服务器所在位置;3、服务器生产页面所需要的时间(通常100-200ms)。网页打开的时间实际上是由这几个因素需要的时间的累加。 网页文件代码通常包含html、css、javescript三部分,他对打开网页的影响就体现在其对下载文件所需要的时间的影响上。后端代码通常包括ruby code以及数据库相关,其对打开网页所需要的时间的影响,体现在它运行代码从数据库拿出相关数据并生成相应的页面和文件需要的时间(也就是从收到quest请求,到routing、controller、model、view的时间)。服务器所在地就简单多了,主要看服务器离使用者的远近(对应相应的地理位置)以及服务器能够提供的带宽,它可以通过使用ping命令查看完成一次封包请求需要的时间来测试。 所以,针对这三点我们要提高一个网页的打开速度。其中,提高网页文件的大小属于前端调整。而提高服务器的位置以及服务器产生页面的时间属于后端调整。 然而,在进行代码优化的时候我们就不得不考虑一个问题,那就是从那块开始优化的时间投入产出比最高?也可以说,如果使得见效最快。 这就需要考虑两个问题,一个是优化需要的时间,还有一个是优化后的效果。 比较三者,可以发现调整网页文件的大小和服务器的位置效果最明显。而,调整后端命令,由于本身后端生成页面时所需要的时间量级已经小于两者,所以收效较低。举个例子如下: 调整前端架构或搬机器:从 10s 下降到 2s (1s = 1000ms) 调整后端代码或数据库架构:从 500ms 下降到 150ms 再来看看投入时间,由于服务器通常是成组的,而且调整服务器会涉及到很多问题,特别是跨大区域调整服务器是问题非常多。而修改网页代码以及后端程序生成代码则相对简单得多,只需要对代码进行调整就好。而其中,后端代码往往相互关联所以调整起来规模又会比调整相对独立的前端页面代码复杂的多。 所以,综上,优先调整前端代码的时间和效率是最划算的。特别是作为个体户程序员来讲,这个往这个方向思考会更有效率。

September 27, 2017 · 1 min

元学习课2017版学习心得

元学习课 元学习课是一门关于怎么学习的课程,它是重点针对类似于英语与编程这类技能类学习而设计的。全栈营的编程课程即是这么元学习课的践行版。所以,同其他课程一样,元学习课是需要践行的,如果学习了而不践行等于是浪费自己的时间与生命。 编程 编程最简单的描述就是输入一些东西,然后进行运算,最后输出一些东西。所以,本质上来说,它其实是很简单的一件事情。然而,一般人觉得他难的原因在于,大家并没有使用正确的学习方法。他就如同我们在生活中学习的其他技能一样,重点在于先模仿后理解,比如做菜、踩自行车、走路等等。如果一开始就纠结于原理,不但不能很好的上手,而且还会充满挫折感,导致从入门到放弃。 编程等技能的学习方法 元学习课的核心理论主要有三点:1、拼图理论;2、成就感;3、重复训练。 拼图理论 拼图理论是指,在学习过程中,将要学习的知识分散学习,而不需要强调从小到大,从前到后。也就是像拼图一样,一块知识一块知识的收集起来。而在收集到足够多的知识后,自然而然就会开始理解拼图之间的联系,这时候如果需要深入学习,再像登山学习一样,从头串到尾,从小概念联系到大概念。 成就感 在学习过程中保持持续的成就感很重要,因为一开始的激情很容易退却,如果没有后续的情绪激励则会放慢下来、或者产生厌学情绪,进而很容易放弃。 重复训练 由于我们是通过拼图式的方式学习,所以一定要通过多次训练将这些小知识巩固在我们的大脑里,进而形成“肌肉记忆”。正式这些基础的记忆为我们后面的深入学习奠定重要的基础。 游戏化学习 游戏化正式运用了上述三个理论点的学习模式,它通过将不同的知识点形成知识块的小关卡,同时以整合知识块形成稍大一些的知识块的模式,使我们一边获得升级成就感的同时,复习旧的知识,不断学习新的知识,让我们在游戏化的学习方式中不断进步。 认知心理学原理 游戏化学习的原理是源于人类的大脑认知模式,即左脑模式和右脑模式。左脑模式为分析模式,专注于细节间的解析,而右脑模式则专注于捕捉外界的大体框架。由于左脑模式的分析是基于已有的知识之间的联系,所以在新学一门技能的初始,脑内还没有建立很多相关的知识点,所以这个过程就会相当的“痛苦”,进而容易导致意志力薄弱的同学放弃,而右脑模式则更类似于拍照式的粗略记忆,所以并不会产生解析上的痛苦。因而,我们在学习新技能的初期,为了降低学习的难度于挫折感,可以试着关掉部分或全部的左脑分析功能,让其在学习过程中任期自发的解析,或者留到后期拥有足够的知识点后再从头来一遍理解式的学习。 践行 不管是否接受老师的这套理论,但是不妨先假设它是正确的,然后开始行动,行动之后,是否有效就自会明了。 初学者的错误认知 基于元学习理论的知识实际上真对应着初学者对于学习的错误认知,初学者通常认为技能学习必须要有天赋、必须看懂每一步、必须从基层原理学起、禁止使用捷径。它们实际上是错误的观念。真是由于使用了这些错误的观念,学习才变得枯燥和难受,进而需要我们咬牙坚持。实际上,取得技能和学会技能是两码事。取得技能即表示我们能够使用它,而学习技能不但表示我们能使用它,还能对它说出一二三四。比如语法、单词、腔调等等。每个人在学习母语的时候,都是先取得,再学会。但是在学习第二门语言和其他技能的时候,却常常想先学会,再取得。事实证明,大多数采用后者的学习都失败了,尤其是编程学习。一方面的原因,是大多数的编程人员,其实并不会教,他们只是想教,但是却没能get到教编程的技巧。在面对这个情况下,我们就需要发挥自学来摆正这个错误的认识了。比如,买一本实作型初学指南,做出小项目,重复做三遍(,之后再去补基础理论知识)。这三遍,可以先复制粘贴一遍、跟着打一遍,边尝试理解边跟着打一遍。这个过程中碰到错误要重点纪录,而且要连解法一起纪录。纪录错误的是因为,能加深印象。而正确的可以不用纪录,因为教材上面有。这样,在跳过一个又一个错误后,我们就可以不断的前进。 大脑运作原理 如前所述,根据认知心理学,学习的时候有两个要点:1、初速度要快,形成正循环;2、先利用右脑,形成肌肉记忆。而这是由大脑的运作原理所决定的。具体有以下几个方面: 1、大脑并不善于快速思考 大脑在进行快速思考的时候实际上依赖的是习惯,而并非是像慢速思考那样调取各种资源来解决问题。一个例子就是蜡烛、图钉和墙壁。 2、多数的思考,并不是真的思考,而是调用过去记忆所组成的结果 人的大脑记忆分为了个区间,一个是工作记忆,另一个是长期记忆。工作记忆区间就像电脑的内存,内容小、时间段、会丢失,但是存取速度够快。而长期记忆就像是外村依旧是硬盘,内容大、时间长、可重复调用,但是存取速度慢。简单的例子就是78的运算和70008000的运算。 3、人是利用已知的事物理解新的事物 理解一定程度实际上是记忆。一方面如果它不是记忆,那么我们理解完了以后就不可能记得下来,另一方面他又是在存在我们大脑中的知识点建立连接知识点。这一点和数据库的存储结构有点类似。git的使用指南,实际上就是一个很好的反例,它展示了我们在理解未知事物的过程中是多么费劲。对比的,人类在利用已知的事物理解新的事物时,就轻松很多。本质上,理解未知事物的过程也是在一点一点的把未知变成已知,然后在通过理解建立联系。 4、没有重复的练习,不可能精通任何脑力活 正如前面所说,我们进行快速思考的时候,实际上是调用已经形成的记忆。而这些快速调用的记忆又可以称之为“直觉”。他们是保存在大脑里的深刻的记忆,课程里的说法是深焊在肌肉里面的长期记忆。要达到这种程度的记忆,必须通过持续的、大量的、重复的练习,否则不会形成如此深刻的记忆。做不到这一点,对任何脑力活都不可能精通。 5、题海战术以及填鸭教育,有时是必须的 明白了大脑的工作原理,就可以明白,题海战术以及填鸭教育,有时是必须的。比如,我们最初的九九乘法表,以及最开始的古诗学习。他们都是通过先种下记忆点的方式,之后在逐步理解。而对于种下记忆点的方式,有两种强化的方法:一种是提取练习,另一种是迁移练习。 提取练习是通过靠记忆力将学到的知识回忆或者写下来,之后在于教材或者上一份知识比对的方法来强化相关记忆的。更进一步的,将写下的记忆教给别人,创造出一套属于自己的传播的学问模板。学习之后复习是很重要的一件事的,学习之后不复习,只不过是刷了个脑袋爽而已。而提取练习,就是很好的一种复习方式。 迁移练习是指我们在开始学习一个东西的开始,会进步非常快,这有两个原因,一个是因为初期的知识比较简单,另一个是教材设计者设计的比较好。但是当我们要具体使用这些东西去解决问题的时候就会发现适用不出来,这个就叫做新手运。解决这个问题的方法就是换个状况做迁移练习。在这个过程中要秉持取得技能的心态,所以快速取得成就感最重要,而且要明白的是,野路子不需要他人的认可。 最终,通过复盘与练习我们就可以将听与学的单条连结,通过教编程无数连结。 要点 首先,挑选高频小套路->练熟->提取->教别人->练习更多小套路。 其次,小套路兜出中套路->练熟->提取->教别人->迁移到兴趣主题 一万小时理论 通常是的从平凡到超凡需要经过一万小时的理论是怎么得来的,在业界成为专家通常需要五年,而这五年的时间并不代表说需要五年才能学会,实际上它是在学会以后经过一段积累起才成为了专家。便于编程也是如此,通常需要工作五年的时间才能从入门到成为编程专家。 德雷福斯模型 德雷福斯模型将成为专家的道路分成了五个阶段:新手、高级新手、胜任者、精通者、专家。 经验 通过执行这项技术,最后促成了思维与技能上的改变。有的人工作了十年,但是水平还是像一个新手一样,那是因为他的十年其实只是一年的有效经验重复了十年而已。 新手 新手无法独立完成某个事情,他们完成一个工作会遵循这么一个模式:Standard Operation Procedure。即当X时执行Y。 高级新手 能使用基本规则完成任务,能够独立解决问题。 胜任者 能把很多经验梳理成规则,属于团队核心。 精通者 能提炼出指导性的架构与方法。 专家 能创造出方法把所在领域往前推进。 人们常常认为业界人员分布在这五个阶段符合正态分布,即胜任者占大多数。然而事实上,是高级新手占多数,也就是说着不符合正态分布。实际比例是,高级新手>50%,精通者<10%,专家<1%。若以通常的职称来评定的话,通常的新手就是指初级工程师,高级新手就是工程师,胜任者就是资深工程师,精通者就是架构师,专家就是大神。而成为一个资深工程师往往需要3-5年。而成为高级新手,只需要400小时。 所以,成为高级新手的核心就是如果坚持400小时。一个一秒钟辨别大师&高级新手的方法是,问他们如何坚持学习。教你如何坚持做事的方法论的一般是高级新手,而回答白痴,我都不知道怎么坚持,才有可能是真正的专家。因为能成为专家的人必定是在兴趣之下投入大量的时间,光靠意志力是很难走这么远的。 坚持 坚持,是一种很低效的行为。它实际上表明你不喜欢现在正在做的事情,而大师们的坚持,其实是上瘾状态。看上去的坚持,其实只是一种习惯,一种由于上瘾而引发的习惯。 即便是之前提到的有效学习方法,即高频小套路->重复练习->烧到记忆里,如果没有感受到乐趣,也是很难持续执行的。 游戏化 游戏的核心就是建立习惯。所谓游戏,就是根据人类大脑原理,用来“引导建立习惯”的一套系统性公式。它形成习惯的原理是(Habit Loop)提醒行动->惯性行为->相关奖励。游戏的本质就是习惯+强烈的奖励。有一本书《Actionable Gamification》,就是游戏设计原理的。主要步骤如下:Discovery(发现这个游戏可以玩)->Onboarding(获得头几次胜利状态)->Scaffolding(达成多个胜利状态)->Endgame(没有胜利状态了,弃玩)。其中Onboarding阶段不能让人不知怎么玩,Scaffolding不能太单调/太难玩,到达这一阶段后,为了让用户不弃玩,会设置大小和时机都会变动的随机奖励,以上用户保持上瘾的状态。 所以,好的学习方法应该也能达到这一种,让用户上瘾的状态。然而,事实上很多人在教育之下是极度排斥上瘾的,理由也很简单,因为我们通常上瘾的东西,都是诸如游戏之类的影响生活的事物。然而,大多数的大神,其实也是瘾君子,他们其实并不排斥自己会上瘾的体质,但是会将他们用到合适的地方。这就是他们和普通人不同的地方,普通人无法控制自己的上瘾,所以后来变得拒绝上瘾。对于游戏,我们通常不要沉迷往往是有益处的,但是如果对于学习也如此,那么可能会在学习效果上大打折扣。虽然老师把这两个和平庸挂钩,但是我并不这么认为。事实上,还是有很多大神大师采用的是另一种非常自律的生活方式。当然,如果采用普通的方式没法学一个东西的话,不妨试试游戏化的学习。我个人学习英语就是试过了各种方法,最终尝试了游戏化进而走上正轨的。所以,比起逃离上瘾,不如将自己的瘾安放在合适的地方让他起作用。但是,则需要平时不要抵抗上瘾,而是将它合理利用与转化,这样才不会把你体内的上瘾机制给扼杀掉。 Xdite老师的方法是,比如她对一个游戏上瘾,她觉得不合适,就是跑去玩另一个更容易上瘾且生厌的游戏,而通过这个更容易上瘾的游戏,将之前一个游戏的瘾盖掉,进一步的通过这个游戏生厌后,她同时也就对游戏生厌了,这样就不会沉迷之前的那个游戏了。可以说这个方法因人而异,如果是对游戏比较执着的人,我想最后有一定可能还是会跑回去玩之前那个游戏的吧。 如何人工制造“成瘾” 游戏成瘾的本质其实是自我价值的他处实现,也就是说,实现自我价值才是成瘾的核心。比如健身族,迷恋自己的身材。学习族,享受性感的大脑。这都是通过这些东西实现了一定程度的自我价值。所以,依据这条理论,有一个方法可以创造学习的自我价值,那就是,将你学的东西拿去教别人。帮别人会收获到变动的意外奖励,进一步变得停不下来。 B = MAT Behavior = Motive + Ability + Trigger 行为 = 动机 + 行动能力 + 触发点 降低行动的门槛->提高行动的动机->触发行为的发生 ...

September 27, 2017 · 1 min

20170621学习纪录

##Objective ###今天做了什么? 写ORID 全栈营 ###关于今天的学习,你记得什么? ####新旧知识 全栈营的课程框架:懂得拆、懂得做、做得完、卖得动、卖得好 懂得拆(Computational Thinking,User story) 懂得做(Programming,architecture) 做得完(Project managing) 卖得动(Marketing research,Solving value problem) 卖得好(UX,growthhacking) Xdite写ORID的时候,是白天简单记笔记(关键词),然后洗澡的时候回忆下,接着第二天再写出来,这就比我们直接第二天动脑子回忆轻松很多。 cd - change directory ls - list pwd - print work directory rake - ruby make db - database mkdir - make directory rm - remove rails g - rails generate rails s - rails server rails c - rails console 编程要做的事是:观察输入和输出是什么;把大问题拆成小问题;寻找资源;用电脑自动化解决问题; render大致是将数据提交给表单的意思,所以在controller和view里面本质是一样的,controller里面是直接给action表单,view里面是给partial表单。 当老师的情绪影响她做事的时候,她就去睡觉,她解释说因为她的血糖耐心已经用完了,注意力很重要,所以要去休息。 “所有的人都是从镜像模仿开始,掌握基本的高频小套路,熟练之后,才复盘补充、学习基础理论,最后牢固的。” “Computational Thinking => Programming;在这里给各位总结一下,编程是什么?编程是:观察输入是什么,输出是什么(就是大问题的起始条件和最终结果);把大问题拆解成可以实作的小问题;在实作过程中找到资源;用电脑自动化解决问题;如此单纯而已。” rake = ruby make ####遗留问题 ...

June 23, 2017 · 1 min