天天,都会有人在微博上私信我,问我关于学习和成长的问题。这种问题我通常都不会回复某个j,毕竟每一个人的状况不同,每一个人对待事物的性格也不同,我不能夸下海口的说,你看某本书几个月就能如何如何,我能作的多数时候只是鼓励鼓励,其次我也从不认为我已经成长到一个多高的境界上,让我去给别人作指导,我仍是当之有愧的。jquery
可是,有时候看到你们私信个人时候,确实是处于一种很痛苦或是须要帮助的状态上。 最近晚上有空,就想写写本身从第一次接触程序,到一路颠簸学到今天的一些故事和经验,但愿对你们有所帮助。git
第一阶段:消费者阶段程序员
我在快上高中的时候,开始接触的程序。那会儿家里有一本 Visual Basic 的书,30 多页左右,也是家里惟一一本计算机类书籍,是我哥学校发的一本课外书,他对计算机貌似没有什么兴趣,就一直堆在家里,直到无心中被我翻到。github
书里的程序格外的简单,几行简单的英语代码,就能让计算机弹出一个对话框,当时看到简直神奇极了!跃跃欲试的在老妈店里的电脑上一步一步的敲下代码,弹出一个简单的对话框,那一瞬间,感受像是推开了新世界的大门,今后一发不可收拾。 实践完 VB 后,又在小书摊,看到了一本 《黑客 X 档案》,看着各路高深的入侵,木马,盗号,试图努力学会这些技能,而后去跟朋友们炫耀,但一直都没法入门。由于须要太多计算机的基础知识了,不是写个弹框,或者计算器水平的人能搞定的。ajax
那会儿家里也没有懂电脑的,也没有人能够问,又处在小城市,连个培训班都没有。编程
随即,开始漫漫买书求学路。缓存
一旦开始买书,就进入了学习的第一个阶段:消费者阶段。当个消费者实际上是个挺轻松的事情,对着书本照猫画虎,一下子就能跑起来一个看着颇有趣的程序。安全
那会儿,疯狂的买各类书,可是因为周围没有人指导,买了不少相似 21 天 xxx 系列的书,那会儿真的有这种书,我还抱有幻想⋯⋯以为 21 天后我就⋯⋯服务器
如今想一想国内的图书市场简直恶劣到必定程度。不少高校,教师升职评比须要考察发表书籍状况,致使国内一大批烂书其实都是高校老师发出来的。我如今依然认为国内 95% 的技术类书籍是不值得买的,除了像侯杰老师这种文笔很好的技术人之外。微信
不少做者老是作不到『以读者能理解的顺序,而非本身认为的顺序』写文章,坑害了很多对计算机有兴趣的同窗。我一直很崇拜侯杰老师的另外一个缘由是侯杰老师的书,老是能把你最想问的,如同庖丁解牛,深刻浅出的解答出来。就如同 MFC 框架(很早前的一个 Windows SDK 框架,如今已经用的不多了),MFC 是很复杂的一个框架,全部初学的人,都会问同样的问题:"这玩意儿是怎么工做起来的?!",但全部国产的 Visual C++ 的书,都避而不答,让你照猫画虎的作,就能弹出一个窗体。当初国内只有 《深刻浅出 MFC》一书,讲明白了背后的一切。
学完一些基础知识后,就进入了学习的第二个阶段 实践者阶段 阶段。所谓实践者,就是开始用本身所学,去开发程序,成为一名专业或非专业的码农,不少人的职业生涯,也就停留在了这个阶段,过上了小富即安的程序员的日子。
我从消费者阶段过分到实践者阶段大概用了三四年的时间,其实已经挺长的了。我一直都认为我是一只笨鸟,无心中起飞,却飞了好久的那种。
第二阶段:实践者阶段
我真正开始实践的,是在本科学校作的几个网站。
第一个是个学校的匿名聊天系统,就是全部人均可以登陆学校的站点,而后会匿名匹配到一个异性,开始聊天,当时用的 Asp.net 作的开发,配合 ajax + jquery,但因为当时技术太差,致使不少人聊着聊着就断线了,致使小产品不告而终。
第二个是给咱们信息学院开发的一个官网,用的 PHP。在作这个网站的同时,我选修了一门叫《网络安全》的课程,这门课的老师叫陈路,我曾当着老师的面儿,夸下海口,我开发的官网,坚如盘石...(大概这个意思😳)陈老师知道了我作的网站,随即下达一个做业:"谁能攻陷咱们的官网,一个漏洞加五分...",后来,咳咳⋯网站数据没有了⋯⋯ 有个同窗用一个很通用的扫描工具,在他也不知道发生了什么的状况下,工具把网站内容都删除了⋯⋯恩,我犯了个超低级的错误⋯⋯ GET 请求能够删除数据,外加身份认证代码有误⋯⋯
幸亏,查看 Apache 日志的时候,发现删除请求到来的前几分钟,Google 爬虫来过(那会儿 Google 还能用),随即立刻去 Google 的缓存里找回了全部的数据。 后来陈路老师被学校批斗了一顿,批斗的罪名是『鼓励学生攻击校园网络』,我实际上是极力跟学校执事说明这个错误是我犯的,陈老师作的并无错,并且我到如今仍是很喜欢陈老师这种教学方法,毕竟实践出真知。
可能如今陈老师在教《网络安全》课程的时候,会以 "当年有个学生...." 做为开头,有时候想一想也挺有意思的。
再后来我花了不少实践学习 Web 安全相关的知识。写各类 Web 程序时,都会最大程度的考虑安全问题。 网站攻陷后没多久,Android 出来了,我买了第一部 Android 手机,而后本身照着官方文档开始学 Android,动力的源头,是我据说写 App 能赚钱。赚钱真是学技术的很强的动力,以前写网站零零星星的赚了六七千块钱,做为同窗里的小土豪,我又把目光转到了刚出来没多久的 Android 上。 当时先定了一个目标,写一个图片类 App,打算叫『无尽画廊』。由于很喜欢 WeHeartIt 这个小众文艺图片网站。随即计划利用正则解析图片地址,而后用把图片呈如今 App 上。那会儿 Java 和 Android 彻底零基础。
本身在入门 Android 的时候真的超级拼。早上 6 点起床,而后开始悄悄下床(不能吵着舍友),打开电脑开始研究加开发。折腾到早上 7点半左右就和舍友一块儿去吃早饭,而后上课。中午回来也不午休,开发到快上课,晚上基本都会熬到 12 点左右。持续了 1 个月左右,终于从零基础到开发出一个粗糙的 1.0 版本,发到了国内的几个 App 市场。反馈不是不少,可是都挺积极,随即决定开发 2.0 版本,还加入了广告积分墙。就这样超拼的持续了 3 个月左右。如今网上能看到的基本都是 2.0 版本。我从这个 App 里,也赚到了一些广告费,大概几百块。可是由于广告服务商倒闭了⋯⋯ 钱到如今还没取出来⋯⋯ 心痛⋯⋯ 持续更新那个 App 到快毕业的时候,选择了保送到北师大。
暑假的时候去上海一家小公司去实习了,在实习的这家小公司,我作了一个到如今来看依然很屌的功能。如今来看是一个至关不错的 Growth Hacker 的一个案例(那会儿可没有增加黑客这个概念)。
实习所在的公司,是作相似小米盒子的东西。当时的盒子,最重要的当属内容,版权还处于蛮荒时代的时候,你们纷纷解析优酷,土豆这类的网站,以最少的成本,盗用优酷的带宽。简单点而来讲,就是作视频聚合。视频聚合最麻烦的就是提取视频的真实文件地址,这样能为全部的创业公司免去版权纠纷,同时解决带宽费用问题。
我去那家公司实习的主要内容,就是用 Node 语言作视频地址解析,费劲功夫搞定了几乎全部的视频网站,各类黑科技都用上了,抓包,逆向,Headless Browser 等等。搞定全部网站后,也算勉强跟竞争对手站在同一块儿跑线。实习第二周的时候,已经有些没事儿干了,就在这会儿疯狂的想法出现了!
可能不少人还记得当年伟大的迅雷云播,解救了不知道多少个少男寂寞的夜。咱们疯狂的想法就是要让咱们的小盒子,可以流畅的播放用户从电脑上推送的任意种子文件,无需等待。在那会儿 TV 上,这种功能简直就是创举!
想法出来后,我抗下大旗,开始用代码模拟迅雷云播的全套流程。开发的过程十分艰难,得从不一样平台的迅雷上抓包,寻找蛛丝马迹。优先从 Web 端模拟登录和提交种子文件,这些都相对容易一些,最难的是如何提取到视频的真实地址。花了大概一周时间攻陷了全部的流程,而后公司买了 10 几个迅雷会员,又和各路 BT 网站开始合做,开启了浩浩荡荡的用户增加之旅。具体增加了多少新用户,其实我内心没有数,可是看见旁边的小朋友,天天都在加服务器,优化 Socket 链接数,我猜那一周得新增了 5 - 10万用户,更为壮观的是每到夜里,全部的迅雷帐号里就瞬间塞满各类不可描述的日本电影,所有清空后,又被瞬间塞满。以致于后来,实习到第十七八天的时候,个人老板和 CTO 喊我过去,直接送了我 20 万期权,那感受也是蛮爽的。后来微博上,这个功能也是火了一阵子,不过很快就挂了,原由是有用户在微博上 at 了小米电视和迅雷,让他们跟咱们学着点儿⋯⋯ 而后,不超过半小时⋯⋯ 服务就挂掉了⋯⋯ 不过挂掉没几天我就去帝都准备研究生报名了。
还有一件很爽的事,就是我上了研究生后的半年里,那家公司一直给我支付着工资⋯⋯ 每月轻轻松松就有几千块钱零花钱⋯⋯ 再后来的后来,那家公司倒闭了⋯⋯
快从上海实习结束的时候(实习一个月),我又认识了少楠,加入了 AT!组织。AT! 组织是一个分享优质原创动画的小团队,今后我从一枚野生开发正式晋升为一枚正规军。少楠是一枚很是优秀的产品经理兼设计师,跟着他学到了不少产品的知识和团队协做的技巧,也让我最后真的开发出了近百万用户的 App。AT!组织到如今都是我爱的组织,你们虽然从事不一样行业,但就跟亲人同样。每次聚会都是一年一度最嗨皮的日子,都是我经历过最真诚的聊天。从后来作了 AnimeTaste 再到 EverMemo,我第一感受到团队的重要性,第一次见识到优秀的设计师和 iOS 开发者。
以上的诸多经历也为本身创业埋下了不少伏笔。这些都是我是个人实践者阶段,漫长的三四年。
第三阶段:创造者阶段
实践者阶段以后,本身开始尝试创造。也是我认为学习的第三个阶段 — 创造者阶段,这个阶段是没有结束节点,就一直这么存在着。
我大体是研究生一年级的时候开始摸到创造者阶段的门梁,大三的时候接触的 GitHub,感受是我学程序来,打开的第二个世界的大门(第一个,算是那个 VB 程序的弹框)。接触到 GitHub 让我第一次开始学习和研究脚本语言( Python,Node,PhantomJS 等等),第一次开始接触真正的生产工具(相似 Less,Sass 等等),GitHub 简直是求学者的宝库,你会很期待明天的 Trending 榜单上会是什么新东西冒了出来。
那会儿在研究生阶段,每月有了公司发的几千块钱,也开始入手了人生第一台 iPhone,一台土豪金版的 iPhone5s,买 App 太贵便折腾起了越狱(如今都是买 App 了)。装了一款越狱后的 Store(我忘了叫什么了),那个 Store,在下载一个 App 的时候,有个超漂亮的进度条,我每次都会认真的的盯着那个进度条,一边看,一边感叹,一边也暗许本身也要在 Android 上实现一套,这也是我开始第一次开发自定义组件的初衷,也是 NumberProgressBar 诞生的最初缘由。
啃下第一个自定义组件,对不少人来讲都是很痛苦的,我也同样,那会儿的 Android 组件少的可怜,不断的看文档,看源码,读别人的代码,试图搞清楚更多更底层的东西,不断的尝试运行,折腾了一周左右(天天超过 10 小时投入),终于作出来了,照猫画虎的写好文档,作好测试,当心翼翼的发布到 GitHub,而后发表到当时为数很少的 GitHub Android 分享社群里。地址在这里:https://plus.google.com/+daimajia/posts/d6DJhLhLn1c
再到后来的几个月,又陆续写了一些其余的库,发到 GitHub 上,其实我根本没想到会有那么多人去 Star,可能跟下手比较早有关,恩。
创造者阶段,就是努力创造那些没有的,源自你脑海里的东西,而不是别人安排给你的。努力作到让更多的人用到,能够是一个 App,能够是一个帮助人们提升效率的 Chrome 插件,也能够是一个简单的组件。创造是最挑战你对一个行业的热爱程度的。
我历来不反对重复发明轮子。每个轮子即使有一些小的改进,都是适应天然法则,优胜劣汰的。
就我身边而言,我最崇拜的创造者是尤小右,将一个小的 Framework,一点点的作大,再到作出国际影响力,真是个不得了的事情,也是不少技术人求之不得的事情。
*总而言之 *
若是你突然以为本身这几年一直处在一个很稳定的状态中,以为本身没有提高,那你得想一想是否是我卡在了某个阶段,一直没法突破,你是否须要作些什么,突破到下一阶段去。随后的文章我也总结了一些误区和突破方法。
当年,有一本书刊特别流行,叫《故事会》。《故事会》后来销声匿迹了,在我眼里,取代《故事会》的是知乎。对,就是那个知乎。 我其实一直很反对一个论调:“上知乎,学知识”。醒醒吧。知乎明显就是现代版的故事会好吗?! 我不否定知乎存在有价值的知识,但,根本不值得你花那么多时间,去发现那少的可怜的知识。去读书吧。用最系统的逻辑,去学会一项技能,哪怕你去《硅谷百年史》里去读那些振奋人心的仙童半导体的故事,也比你不断的知乎看着水的一笔的帖子要强的多。如今,最可怕的是你们在知乎上消费着垃圾,却依然以为本身在吃着奶酪,学习的过程都是伴随着思考和痛苦的,若是你边笑边学习,那你真的得醒醒了。
我在大三下半学期被保研后,开始了另外一个小项目,一个叫 小熊词典 的 App,原由是由于在学英语的时候,全部词典类 App 想要获取最全的词语解释都须要联网,流量消耗大不说,电量是最大问题,自习一早上电量就没了。因此,本身想动手写一个词典 App,主打离线词库和快速查询。
但最后的时候,小项目胎死腹中。说实话,整个 App,已经开发到 95% 了,抓取了很是多有名的词库的数据,而且整理成了规范格式。但项目最后仍是放弃了。即使今天来看这个词典依然很酷!(最丰富的词库和最快的查询速度)
如今想一想,当初一我的开发的时候,每次想到一个很酷的功能,就决定加进来,项目进度遥遥无期。彻底没有项目管理的思路,也没有意识到这样会很快拖垮个人体力,消磨掉本身的意志和热情。
对于不少初学者来讲,老是抱着书学,其实也是一样的后果,你没法得到任何的反馈和激励,以致于以为一件事情越作越难。学习的过程,最好能定一个简单的目标,好比:“我即使如今什么都不会,我就要作个小游戏出来,这个游戏应该是这样的一个玩儿法,blablabla。”,作出来后,快些去找用户,能够是你的朋友,也能够是你的父母,最好是那些不吝惜赞美的朋友们,让他们无形之中给你一些动力。
我认识的朋友中,他们都有各类稀奇古怪的想法亟待实现,但最后,以信誓旦旦开始 Side projects,最后却都销声匿迹了,这是不无缘由的。由于不少的开发者在刚开始的时候,缺少清晰的计划,却想一步登顶完美的境地。这是很可怕的想法。就比如,我一个不多爬山的人,却在第一次的时候,就决定登顶珠峰,结果天然可想而知。在实践本身想法的时候,最好能考虑以最低成本去展示你想法的核心部分,而非一个大而全的方案。
从最小成本的想法核心,一步步的去验证本身的想法,去收集反馈,调整策略。最终抵达一个正确的目标。
不得不认可懒惰是人的共性,当你看到别的朋友作出来很酷的小游戏的时候,你是否也有几分钟冲动的想要去学习游戏制做。不要等!快去买两本书抓紧学起来,哪怕你知道你这个热情的苗头很快会熄灭,但请不要放弃任何发现新大陆的机会,在学习冲动消失以前,去入个门先。
我每次跟人互相分享初高中生涯的时候,我老是能想起来我初中时候的一位语文老师,微胖,性格和善。 她在一次自由复习准备期末考试的时候给我说: “你复习,不要局限在课本上,你背会 24 节气都是颇有意义的,想看什么书,就去看,不要等,不要担忧本身学不会。” 这话对我学习新东西影响特别深,如今我基本上想学习什么东西,立马去学,即使可能一周后气馁了,放弃了,可是历来不会怀疑学这些零碎知识的意义。 我学过吉他,写过毛笔字,写过 Delphi,用 Sketch 画过 icon,用 Blender 画过 3D 保龄球,写过 Unity 小游戏⋯⋯ 不少我都没坚持下来,但给我带来的最大改变就是我不会害怕去接受新事物,思考问题的时候老是能把不少场景考虑到。也能慢慢的找到本身最爱作的那件事情,更清楚的定位本身。 因此,当你突然对某件事情有兴趣的时候,抓住那几分钟,那几天,赶忙去学点新东西。 毕竟,点老是会串成线的。
我作 Gank 以来,不少开发者都投稿过,以致于如今后台还挤压着 2000 多个投稿没有处理。看过这么一圈然后,我开始不主张去看别人写的技术类文章。看别人的文章,你看到的是他想讲给你的,而这些可能只是他在本身的项目里用到的,而不是一个客观全面的角度。时间一长,以致于你只知道这个东西的一两种用法,更可怕的是你可能已经对思考丧失兴趣,总想走捷径,可能这样前期学习效果显著,可是后期会很快到达瓶颈。我想若是你常常读各类语言的官方文档,老是会有 “啊哈!这样均可以,我之前都不知道还有这种方法存在。” 的感叹,但你看别人的文章,却不多有这种感受。
至于主张看优秀的代码,实际上是但愿学习一个技术细节,是伴随着思考的。其实,评价某一种方案好与很差,是没有意义的。只有多积累其余人解决同一问题的方法,才能在下一次作决策的时候,找到适合当前场景的最优解,不少时候,也能举一反三,给解决其余问题提供思路。
技术提高这个过程,实际上是你对二手知识减小依赖的过程。二手知识是什么?就是那些通过别人翻译,总结的文章。一开始入门,你们看到的都是二手知识(也多是三手,四手的知识),但,想要提高本身的能力,强迫本身多去看些更官方的文档,体系化去学习。这个过程是很消耗体力和脑力的,但多坚持,必定会有明显改善的。
不少人看到不错的文章,总要 @个人印象笔记⋯⋯ 我以前也会这么干,常常把一些不错的文章,存到 Pocket 或者 Readability 里,但,真的回顾去看那些文章的机会太少了,而收藏这些文章给我带来很多压力。有的文章,我只是浅显的读了读,脑子里老是得记着有时间了再去读完剩下部分,正如大多数人同样,不再会去读了。长此以往,拖延症也就变得理所应当。
有可能你会说万一哪天用到呢?其实我以为再 Google 一次就好啦,可能会找到比这篇文章更好的。就这样。
如今,看到一篇不错的文章,首先从标题推测下内容,再扫一眼,若是跟我猜想的八九不离十,我基本就关掉了。若是有跟个人推测截然不同,我必定会一口气读完,而不是收藏起来之后再读。
之因此我说收藏什么也改变不了,是由于读别人的东西,思考的过程是别人的。努力去减小从别人文章里阅读学习的频率,多去读一手资料而后本身总结。
你有没有在 PM 说了要实现某个效果或者功能的时候,你站出来反对,说这样并不合理。若是你有过,那么我想你也是一个有理想的开发者,而不是一个“码农”。聪明人喜欢跟聪明人合做,你们一开口就互相明白了。没有人是天生聪明的,只是看的多了,想的多了,就显得聪明了。
看些什么呢?看看一个优秀的 App 早起的冷启动是怎么作的,看看 Apple Store 或者 Google Play 上最近有没有什么新奇的 App 出现,看看 Tech Crunch 上最近又有什么天马行空的项目融到了钱。
想些什么呢?想一想一个产品功能的存在有没有意义,他的下个阶段又会怎么发展,想一想某段文案是否会下降产品某个功能的转换率,想一想某个动画效果是不是很恼人的存在,若是你能够对微信加一个功能,减一个功能,你又会做何选择。
我在西安读大学那会儿开始,就有一个小本子,记录着忽然冲入本身脑海的一些靠谱或是离谱小想法。上面会写着相似:
那个小本上记录了本身好多作产品的想法,有很多,后来市面上都出来了相应的产品。也有一些如今看来很好笑,有的想法今天再翻看的时候,仍然会冲动的想要组团队去实现。
Idea list 老是能激发你去创造的欲望,有空,就去不断的记录本身的 Idea list 吧。
另外,不要把本身的 idea 当作一个秘密,多和人去讨论本身的想法,在不断的否定和确定中,完善本身的想法,idea 是不值钱的,只有实现它才是有价值的。
这句话可能你们都懂,但个人体会却比你们都深入。
我在西安一个叫西北大学的地方读的大学,是一个普通的 211。计算机专业客观来讲比较通常,在来北京师范大学读研究生以前,我甚至没据说过 ACM。
Python、Ruby、Node 这种编程语言在咱们的计算机系,根本连影子都没有,因此正统的计算机技能点基本都是 C,C++这样,这并无什么错⋯⋯ 但路子就变窄了不少,学长毕业去个腾讯、阿里,已经能被你们推上神坛。
本科学校大二会给计算机系开一门日语课。为何会给计算机系开日语课呢?由于不少外包来自日本。这个逻辑我一直都接受不能。这都什么年代了,咱们早都不须要用外包支撑我国的 IT 产业了。
学校给学生的定位更可能是一个学校展现就业率的棋子,你会什么不重要啦,只要你最后有个工做就行了,不要拖累了学校的名声。
来师大后,感觉到了史无前例的转变。学校总体的气氛至关自由,不少老师们,都是各自领域的专家,你问一个问题,他们能给你引导出不少有意思的点。长此以往,你也会被这些感染到。有时候,我也会想,之后稳定下来以后,要不要去申请个美国名校读一读。
目前能想到的一些学习的技巧和陷阱,大体都列了出来。都是我我的的一些学习的经验,若是对你有帮助,想必也是极好的,若是你以为我写的有不合理的地方也欢迎指出。坚持着去实施说起的一些方法,必定会对你的生活和职业带来改变。
另外,这篇文章是一个在线的可编辑的 Doc,就放在 Dropbox 的 Paper 上,若是你发现什么错别字,抑或是想要发一些评论到某些段落,欢迎直接戳过来给我留言,地址:http://t.cn/Rc9ePRz
我还会在公众号里分享更多本身的经验,欢迎你们关注。