怎么卸载onenote20166怎么降级

微软推出Mac和iPhone版OneNote重大更新
来源:LiveSino
微软今天宣布了&Mac&和&iPhone/iPad&版OneNote三款应用的重要更新,主要是为企业和学校用户反馈做出改进,可以在对应的应用商店更新或搜索OneNote安装。&&Mac和iPhone/iPad版OneNote最新的这次更新主要有四个方面新功能:Mac版OneNote支持OneDrive for Business和SharePoint Online,打开和插入文件(包括Office文档、PDF),查看密码保护的笔记,改进组织、分享(以PDF分享)和复制(保留格式)内容。&其中,插入文件功能支持将PDF文档内容直接渲染到OneNote中,从而可以对PDF内容进行注释和笔记。加入粉絲團
不知道大家是否有看到上個月的(2015年11月初):微軟開始要調降 ,原本 Office 365 付費用戶的無限空間改回 1TB 空間,並且 OneDrive 免費用戶的 15 GB 免費空間將會在 2016 年初全面調降為 5 GB ,還會取消另外因為照片手機上傳功能而贈送的 15 GB 空間。
也就是說,無論新舊 OneDrive 免費用戶,原本擁有的 30 GB 免費空間(預設 15GB 加上開啟照片上傳功能獲得 15 GB ),會在 2016 年全面強制改回 5 GB 。
這個改變,當然讓 OneDrive 用戶強烈的反彈,於是經過了一個月後微軟回心轉意,決定讓「舊 OneDrive 用戶」有機會「保留」大家的 15 GB + 15 GB 空間,不過你必須手動去執行一個動作才行!
如果你還需要利用 OneDrive 免費空間來儲存資料,那麼別忘了去執行這個保留免費空間的動作。
只要進入「 」這個網頁,就可以看到一個「要求保留免費空間」的按鈕。
網頁裡也提到,在 2016 年之後,原本免費的 15 GB 空間和照片上傳獲贈的另外 15 GB 空間都會取消,改為 5 GB 免費空間,只有舊用戶可以要求保留原本的這 30 GB 空間。
(更新,目前看起來微軟在網頁中取消了電子郵件這個勾選項目)在點擊按鈕前,我們可以取消勾選下面的電子郵件寄送選項,這個選項是用來寄送微軟的其他優惠訊息用的,取消後依然可以動作。
登入你的 OneDrive 帳戶,並且點擊按鈕後,就會跳轉到一個成功的訊息畫面,這代表你已經成功要求保留 15 GB + 15 GB 的免費空間囉!
微軟其實這兩年來在雲端工作平台上有很好的表現,例如
都愈來愈好用,而這些雲端服務其實都依賴 OneDrive 的空間來儲存內容,所以這個空間還是很重要的,如果你是免費用戶,建議要記得去執行要求保留空間的動作。
轉貼本文時禁止修改,禁止商業使用,並且必須註明來自電腦玩物原創作者 esor huang(異塵行者),及附上原文連結:
馬上按讚 加入T客邦 3C 科技
更多3C新消息,快來加入T客邦粉絲團
你可能有興趣的文章
你也可能喜歡這些文章
更多相關文章&p&&b&写在前面&/b&:&/p&&ol&&li&社招和校招不一样,侧重点不同,难度也更大,我能拿到offer得益于校招。&/li&&li&985的确有一些优势,但在计算机这个行业中优势没有想象中那么大,看中学校的公司有,但不多,主要看能力,有很多学校差一点的同学去年秋招也找到了很好的工作。&/li&&li&我写的这些只是我学习过程的记录,不代表适合每个人,还是根据个人情况具体问题具体分析。&/li&&li&想要从中提取些东西的话,还是看看学习方法吧,&a href=&/question//answer/& class=&internal&&这里提到一些&/a&。&/li&&/ol&&p&------------------------------------------------------------------------------------------------------------------&/p&&br&&p&从15年9月(大三)开始自学编程,到现在17年3月,差不多1年半时间,春招拿到了几个offer,也算通过自学转行了。&/p&&br&&p&&b&背景&/b&&/p&&p&中游985电子科学与技术专业本科生,大学前没接触过编程,大一上过C++课,不过翘了大部分课和上机,都是靠考前看书通过考试,也没有学过其他计算机相关课程,刚大三时编程水平应该和零基础差不多。经过大学前两年的学习,感觉很虚,大多都是为了考试,所以大三时想要自学些技能。那时候刚上知乎,主要是看到了萧大的好多回答还有编程入门指南,然后就打算学编程,发现很感兴趣也很适合自己,就决定转行当程序员。&/p&&br&&p&&b&学习过程&/b&&/p&&p&主要是参考 &a class=&member_mention& href=&///people/fd7c571a0ada1a72e42e8d& data-hash=&fd7c571a0ada1a72e42e8d& data-hovercard=&p$b$fd7c571a0ada1a72e42e8d&&@萧井陌&/a& 和 &a class=&member_mention& href=&///people/d2facf05b31ad4& data-hash=&d2facf05b31ad4& data-hovercard=&p$b$d2facf05b31ad4&&@Badger4us&/a& 的&a href=&/p/?columnSlug=xiao-jing-mo& class=&internal&&编程入门指南 v1.5 - 知乎专栏&/a&自学的(大致按照时间顺序):&/p&&p& 0.
&b&关于看公开课、视频和看书的选择&/b&:我只看过2个公开课:1个是计算机导论课,1个是算法导论公开课,都只看了很少一部分,之后就再也没看过视频。我觉得看视频不适合自己,还是看书更有效率,也更能沉下心来(虽然看算法导论公开课是因为算法导论看不下去了)。这个根据个人情况选择吧。&/p&&ol&&li&1个月左右的时间看完了《计算机程序的构造和解释》、《C程序设计语言》和《深入理解计算机系统》,几乎没有敲代码,囫囵吞枣。&/li&&li&1个月的时间看完了《Python核心编程》和《Flask Web开发》,也在网上学了一遍HTML和CSS,跟着搭了一个博客。&/li&&li&经过最开始2个月左右时间的学习,这时候的我是非常迷茫的,感到编程很难,好像花了很多时间,学了很多东西,却没有收获到什么,自己像是空中楼阁,没有一点根基,后来就决定踏踏实实的&b&补充基础知识&/b&,向科班看齐。&/li&&li&认真看了《计算机程序的构造和解释》前三章,做了大部分习题。&/li&&li&认真看了《深入理解计算机系统》所有,做了部分习题和大部分lab(除了第四章)。&/li&&li&看了《算法导论》前几章,打算先放下,决定先深入一方面再扩宽知识面。&/li&&li&之前学习都是用虚拟机开Ubuntu,比较卡,大三寒假换成了Ubuntu单系统一直到现在。&/li&&li&寒假认真看了《Linux/UNIX系统编程手册》。&/li&&li&开学又看了一遍《C程序设计语言》,第一次看的时候只觉得难度很大,这次看发现了很多有用的东西,比如很多库函数、C语言的预处理替换、UNIX的系统命令还有很多数据结构与算法的东西,写编译器的时候也参考了里面第5章的复杂声明解析dcl;粗略看了《C和指针》、《C专家编程》和《C缺陷与陷阱》。&/li&&li&认真看了《TCP/IP详解 卷1》和《UNIX网络编程 卷1》,粗略看了《高级TCP/IP编程》。&/li&&li&结合《Redis设计与实现》看了部分redis源码,之后写了两个小项目(写的很烂)。&/li&&li&&b&关于看源码&/b&:能力不够时,不要强求去看大型开源项目源码,一是无法体会其中的设计思想;二是看不了解或者说没有用过的项目的源码会没有重点,效率很低,最好是用过、带着问题去看。之后我就很少看源码了,现在会去看。&/li&&li&认真学了《算法导论》前17章、22章和32章,做了部分习题,刷了一遍LeetCode的easy和medium就快到秋招了。&/li&&li&去年秋招的时候,感到非常虚,简历用markdown写的都写不满一页A4纸。不过因为个人原因,秋招时没打算找工作,只是想感受一下校招难度,但是最后笔试都没过,压力很大。笔试做的自我感觉还行,问题感觉出现在简历上,关键是没有项目,所以大四上除了学习新知识,重点在造轮子。&/li&&li&大四上课还很多,争取在每天8点半上课之前做完3道LeetCode题,一直做到16年底又刷完一遍easy和medium。&/li&&li&看了Flask源码,其实重点在理解WSGI、Werkzeug、HTTP等,而不是Flask。&/li&&li&通过看《C语言接口与实现》、《操作系统精髓与设计原理》、《计算机网络自顶向下方法》、《数据结构与算法分析 C语言描述》等复习。&/li&&li&学习《编译器设计》,写了一个json解析生成库,参考 &a class=&member_mention& href=&///people/88d925c6356ffd1f28f2d3& data-hash=&88d925c6356ffd1f28f2d3& data-hovercard=&p$b$88d925c6356ffd1f28f2d3&&@wgtsam&/a& 的&a href=&/question//answer/& class=&internal&&如何写一个简单的编译器? - 知乎&/a&,写了一个半成品C编译器。&/li&&li&学习《HTTP权威指南》和《Linux高性能服务器编程》,参考 &a class=&member_mention& href=&///people/88d925c6356ffd1f28f2d3& data-hash=&88d925c6356ffd1f28f2d3& data-hovercard=&p$b$88d925c6356ffd1f28f2d3&&@wgtsam&/a& 的&a href=&/p/& class=&internal&&写一个并发http服务器 - 知乎专栏&/a&,写了一个http服务器。&/li&&li&学习《Go程序设计语言》,正在学《数据库系统概念》、《数据库系统实现》来做毕设。&/li&&/ol&&br&&p&&b&如何去学&/b&&/p&&p&之前的&a href=&/question//answer/& class=&internal&&答案&/a&里写了蛮多,重点还是要多敲代码吧,多写才会踩坑,才会对书中的知识有更好的理解。 &a class=&member_mention& href=&///people/7a2d7be320e2800ccd818& data-hash=&7a2d7be320e2800ccd818& data-hovercard=&p$b$7a2d7be320e2800ccd818&&@姚冬&/a& 大大的回答 &a href=&/question//answer/& class=&internal&&编程是一门手艺&/a&
还有 &a class=&member_mention& href=&///people/c1c892f179f95da8b37a1dcc& data-hash=&c1c892f179f95da8b37a1dcc& data-hovercard=&p$b$c1c892f179f95da8b37a1dcc&&@陈硕&/a& 大大的回答 &a href=&/question//answer/& class=&internal&&抓住主要矛盾、分清主次、突出重点&/a& 对我影响也很大。&/p&&br&&p&&b&校招准备&/b&&/p&&p&在春招前我也提过一个问题&a href=&/question/& class=&internal&&如何准备才能在春招中找到合适的工作? - 知乎&/a&,不过之后出了些状况,浪费了一个月时间,没做准备就去校招了。我之前也没有专门为校招做些专项练习什么的,要说准备的话也就刷了不少LeetCode,其实主要还是为了巩固一下《算法导论》里的知识。网上的资源有很多,比如牛客网上的练习、《剑指offer》还有面经真题之类的,我不喜欢做这些东西,感觉除了笔面试有些用,对技术没什么提升。还是看个人情况吧,如果多做些,应该会有用。&/p&&br&&p&&b&春招过程&/b&&/p&&p&3月初开始春招,本来是海投的,投了不少简历,参加了不少笔试。没想到春招很顺利,一开始就拿到了一个offer,之后就拒掉了很多的笔面试,最后参加面试的都拿到了offer。校招和社招区别还是很大的,校招大多考的是&b&基础知识:操作系统、计算机网络、数据结构与算法&/b&等,数据库和编译原理提到的比较少。还会要求手写代码,感觉和平时敲代码没什么区别(我写代码用Vim,今年年初才配上ycm自动补全,LeetCode也是在网页上写)。&/p&&br&&p&&b&关于本专业课程和考研&/b&&/p&&p&从零开始自学的难度还是很大的,单靠自己压力也很大,而且还有本专业课程的压力。我是电子的,大三大四的课也不少,难度也不小,像电磁场、信号与系统什么的,还是要&b&保证在不挂科的前提下再去学习其他的知识&/b&。我从打算转行当程序员后,本专业课程就不听了,抱着自己的书坐在最后一排看,有时候老师也会问几句,我只要能保证最后考试不挂,老师也不会管我。我基础还行,学习能力也还行,所以每门课认真看两三天书就能过,成绩也还行。其实考研我也考虑过,因为如果直接找工作的话,时间怕不够,准备不充分,所以&b&读研对于自学或转行的来说会是很好的缓冲和积累的时期,也更稳妥&/b&。最后还是觉得直接工作可能对自己的提升会更大,而且当时也有不读研的理由。&/p&&br&&p&&b&动力&/b&&/p&&p&关键还是&b&兴趣和压力&/b&吧。毕竟大三才开始自学,大四就要找工作了,压力比较大,所以会推着你去学习,兴趣也是能坚持下来的原因,有时候上拉钩看看薪水也蛮打鸡血的,而且看到知乎上很多同届的甚至更小的同学已经很厉害了,自己还差的很远,也就会加倍努力。回想这过去一年多还是比较累的,每天7点多出门,晚上9,10点回到宿舍,无论是周末还是放假,因为我效率不是很高,只能多花时间来增加有效学习时间。其实还有一个更深层次的动力一直支撑着我。&/p&&br&&p&&b&一些建议&/b&&/p&&p&社招不太了解,给和我一样的学生党一些建议吧:&b&好好打基础,多敲代码,多用图书馆的资源,还要注意身体,多运动,保护眼睛&/b&。我曾经天真的以为大学里不会去一次图书馆,直到大三下学期才第一次去,发现图书管里资源那么丰富,有很多书,可以省下一些买书的钱。&/p&&br&&p&最后感谢 &a class=&member_mention& href=&///people/fd7c571a0ada1a72e42e8d& data-hash=&fd7c571a0ada1a72e42e8d& data-hovercard=&p$b$fd7c571a0ada1a72e42e8d&&@萧井陌&/a& 和&a class=&member_mention& href=&///people/d2facf05b31ad4& data-hash=&d2facf05b31ad4& data-hovercard=&p$b$d2facf05b31ad4&&@Badger4us&/a& 带我走进编程的世界。 &/p&&p&感谢 &a class=&member_mention& href=&///people/745f68a74a02e455b1e1& data-hash=&745f68a74a02e455b1e1& data-hovercard=&p$b$745f68a74a02e455b1e1&&@蓝色&/a& 、&a class=&member_mention& href=&///people/c1c892f179f95da8b37a1dcc& data-hash=&c1c892f179f95da8b37a1dcc& data-hovercard=&p$b$c1c892f179f95da8b37a1dcc&&@陈硕&/a& 、&a class=&member_mention& href=&///people/a06cfb38e37dacdf4d7f032& data-hash=&a06cfb38e37dacdf4d7f032& data-hovercard=&p$b$a06cfb38e37dacdf4d7f032&&@RednaxelaFX&/a&、&a class=&member_mention& href=&///people/60cdd8d5ddba060ef35a8a& data-hash=&60cdd8d5ddba060ef35a8a& data-hovercard=&p$b$60cdd8d5ddba060ef35a8a&&@灵剑&/a& 等大大,翻看你们的回答都有很多收获。&/p&&p&感谢 &a class=&member_mention& href=&///people/c8d22cca942a39ba1e1834& data-hash=&c8d22cca942a39ba1e1834& data-hovercard=&p$b$c8d22cca942a39ba1e1834&&@origin&/a& ,你的经历也给了我很多信心;还有 &a class=&member_mention& href=&///people/88d925c6356ffd1f28f2d3& data-hash=&88d925c6356ffd1f28f2d3& data-hovercard=&p$b$88d925c6356ffd1f28f2d3&&@wgtsam&/a& ,从你那学习了很多。&/p&&p&祝大家身体健康、学习进步、都有好offer吧。&/p&&p&P.S. &a href=&/question/& class=&internal&&offer比较:普联、美团点评、小米? - 知乎&/a& 希望大家能提下建议。&/p&
写在前面:社招和校招不一样,侧重点不同,难度也更大,我能拿到offer得益于校招。985的确有一些优势,但在计算机这个行业中优势没有想象中那么大,看中学校的公司有,但不多,主要看能力,有很多学校差一点的同学去年秋招也找到了很好的工作。我写的这些只…
&p&作者:&a href=&/people/fd7c571a0ada1a72e42e8d& class=&internal&&@萧井陌&/a&, &a href=&/people/d2facf05b31ad4& class=&internal&&@Badger&/a&&/p&&ul&&li&自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0&/li&&li&&a href=&/?target=http%3A//cocode.cc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoCode&i class=&icon-external&&&/i&&/a&:一个让大家学习、成长、相聚并获得乐趣的技术社区&/li&&li&答疑邮箱: xiao. (&a href=&/people/fd7c571a0ada1a72e42e8d& class=&internal&&@萧井陌&/a&&/li&&li&编程入门指南学习群:&a href=&/?target=https%3A///%3F_wv%3DD4AoJu1a& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&---&/p&&br&&p&日 v1.5 更新&/p&&p&日 v1.4 更新&/p&&p&日 v1.3 更新&/p&&p&日 v1.2 更新&/p&&p&日 v1.1 更新&/p&&p&日 v1.0 更新&/p&&p&---&/p&&br&&p&文章结构:&/p&&ul&&li&o 前言&/li&&li&o 心态调整&/li&&ul&&li&o 确定目标&/li&&li&o 不要浮躁&/li&&li&o 培养兴趣&/li&&li&o 开始学习&/li&&li&o 令人警醒的故事&/li&&li&o 警醒后的反思&/li&&li&o 启蒙&/li&&li&o 入门&/li&&ul&&li&? 计算机系统基础&/li&&li&? 数据结构与算法基础&/li&&li&? 编程语言基础&/li&&li&? 其他&/li&&/ul&&li&o 小结&/li&&li&o 后记&/li&&/ul&&br&&ul&&li&o 附录&/li&&li&o @萧井陌 的编程类回答汇总&/li&&li&o ...&/li&&/ul&&/ul&&p&---&/p&&br&&p&&b&前言&/b&&/p&&p&如今编程成为了一个越来越重要的「技能」:作为设计师,懂一些编程可能会帮你更好地理解自己的工作内容;作为创业者,技术创始人的身份则会让你的很多工作显得更容易。而作为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始;入门轻松度过初级材料的学习后,发现学习越来越困难,陡峭的学习曲线又让你望而却步;你知道如何在页面上打印输出一些文本行,但是你不知道何时该进行一个真正的有用的项目;你不清楚自己还有哪些不知道的东西,你甚至搞不清下一步该学什么。&/p&&p&这篇文章的内容对此不仅会有一些方向性的建议,还会包含一个&b&基础核心向&/b&的编程入门导引。当然,Step by Step 的路线是不现实的,并且每个人都会有自己的特点,所以给出的这个编程入门导引更多的是为了引发读者的思考,最终帮助你形成适用于自己的学习路线。&/p&&p&但要注意:这篇文章是写给那些真心想学编程的人看的——那些憋着一股狠劲儿,一定要做出个什么真东西,不学好不罢休的人;而不是那些「听说编程好玩」的人,在我看来,这种人永远都入不了编程的门,更别提做出个像样的东西来了。&/p&&p&---&/p&&p&「Disclaimer」: 虽然整篇文章的基调都是所谓的「Strong Opinions, Weakly Held」,但读者还是应该像怀疑身边所有东西那样 怀疑我们所写内容的准确性。若有任何相关疑问欢迎在知乎或技术社区 &a href=&/?target=http%3A//cocode.cc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoCode&i class=&icon-external&&&/i&&/a& 公开讨论。&/p&&br&&p&&b&心态调整&/b&&/p&&p&&b&确定目标&/b&&/p&&p&在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏? iOS 或者 Android 应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。&/p&&p&这段视频也许能给你启发:&a href=&/?target=http%3A///v_show/id_XNTIzNzE2NzQ4.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&What Most Schools Don't Teach&i class=&icon-external&&&/i&&/a&&/p&&p&&b&不要浮躁&/b&&/p&&p&Bad programming is easy. Even Dummies can learn it in 21 days. Good programming requires thought, but everyone can do it and everyone can experience the extreme satisfaction that comes with it.&/p&&p&不管是在线下还是线上的书店,满目都是《21天学通 X》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术。Matthias Felleisen 在他的著作 &a href=&/?target=http%3A//www.ccs.neu.edu/home/matthi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to Design Programs&i class=&icon-external&&&/i&&/a& 一书中明确指出了这种「速成」的趋势并予以了以上的讽刺。&/p&&p&所谓的「捷径」或者说「&a href=&/?target=http%3A//en.wikipedia.org/wiki/No_Silver_Bullet& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&银弹&i class=&icon-external&&&/i&&/a&」是不存在的,智者说过,精通某个东西需要10年或10000个小时,也就是汉语中的「十年磨一剑」,所以不用着急,功不唐捐。&/p&&p&&b&培养兴趣&/b&&/p&&p&Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.&/p&&p&– &a href=&/?target=http%3A//en.wikipedia.org/wiki/Linus_Torvalds& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linus Torvalds&i class=&icon-external&&&/i&&/a&&/p&&p&沉醉于编程,编程更是为了兴趣。兴趣是推动力的不竭源泉,保持这种充满兴趣的感觉,以便于你能将其投入到你的10年/10000小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。&/p&&br&&p&&b&开始学习&/b&&/p&&p&&b&令人警醒的故事&/b&&/p&&p&刚上初中时我便开始了编程学习,很不幸,我读完了好几本当时普遍存在的诸如《21天精通C++》这类的垃圾书,当时读完也无大碍,甚至还能写点小程序。但是软件出故障了我不知道为什么,稍显庞大的编程问题无从下手,碰到现有的库做不到的事也只能两手一摊。虽然我每天不停地编码,但我发现自己的编程能力却是提高的如此缓慢,对于「迭代」与「递归」的概念只有极其有限的了解,可以说只是把计算机当成了计算器来使用。&/p&&p&进入大学后,我主修了物理学,最初的一段时间里我一直在记忆背诵那些物理公式,却不理解她们是如何得出的,她们之间有什么联系,亦或是她们的意义。我不停地学习如何计算解答一些常见的物理问题,却对在这些 How 背后的 Why 一无所知。&/p&&p&而在我尝试做一些基于物理行为的电脑游戏时我再次遇到了之前的的困难:面对新问题时无从下手,面对新问题时的恐惧不断累积滋生,我开始主动逃避,不去真正地理解,而是幻想能通过Google搜索复制粘贴代码解决问题。幸运的是,大二时的一堂课完全改变了我的学习方法。那是第一次我有了「开天眼」的感觉,我痛苦地意识到,我对一些学科只有少的可怜的真正的理解,包括我主修的物理与辅修的计算机科学。&/p&&p&关于那堂课:那时我们刚刚学习完电学和狭义相对论的内容,教授在黑板上写下了这两个主题,并画了一根线将他们连了起来。「假设我们有一个电子沿导线以相对论级别的速度移动…」,一开始教授只是写下了那些我们所熟悉的电学与狭义相对论的常见公式,但在数个黑板的代数推导后,磁场的公式神奇的出现了。虽然几年前我早已知道这个公式,但那时我根本不知道这些现象间的有着这样潜在的联系。磁与电之间的差别只是「观察角度」的问题,我猛然醒悟,此后我不再仅仅追求怎么做 (How),我开始问为什么 (why),开始回过头来,拾起那些最基础的部分,学习那些我之前我本该好好学的知识。这个回头的过程是痛苦的,希望你们能就此警醒,永远不要做这种傻事。&/p&&p&&b&警醒后的反思&/b&&/p&&img data-rawheight=&326& src=&/c158c3a0fc25db6ce30774_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/c158c3a0fc25db6ce30774_r.png&&&br&&p&这幅图取自 Douglas Hofstadter 的著作 &a href=&/?target=http%3A//en.wikipedia.org/wiki/G& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&G?del, Escher, Bach&i class=&icon-external&&&/i&&/a&。图中的每一个字母都由其他更小的字母组成。在最高层级,我们看的是 &MU&,M 这个字母由三个 HOLISM (&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E6%%25E5%%25E8%25A7%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&整全观&i class=&icon-external&&&/i&&/a&)构成,U则是由一个 REDUCTIONISM (&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%5BF%5E5%2525& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&还原论&i class=&icon-external&&&/i&&/a&)构成,前者的每一个字母都包含后者的后者整个词,反之亦然。而在最低层级,你会发现最小的字母又是由重复的 &MU& 组成的。&/p&&p&每一层次的抽象都蕴含着信息,如果你只是幼稚地单一运用整体论在最高层级观察,或运用还原论观察最低层级,你所得到的只有 &MU& (在一些地区的方言中 mu 意味着什么都没有)。问题来了,怎样才能尽可能多的获取每个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?&/p&&p&教育与学习过程中普遍存在一个关键问题:初学者们的目标经常过于倾向&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E6%%25E5%%25E8%25A7%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&整全观&i class=&icon-external&&&/i&&/a&而忽略了基础,举个常见的例子,学生们非常想做一个机器人,却对背后的&/p&&p&理解物理模型 → 理解电子工程基础 → 理解伺服系统与传感器 → 让机器人动起来&/p&&p&这一过程完全提不起兴趣。&/p&&p&在这里对于初学者有两个大坑:&/p&&ol&&li&1 如果初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。&/li&&li&2 第二个坑没有第一个那么明显:幼稚的「整体论」方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来「补足基础」会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。&/li&&/ol&&p&但也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。&/p&&p&为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为「大厨」,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。但是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。&/p&&p&总之,编程是连接理论与实践的纽带,是&a href=&/?target=http%3A//zh.wikip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机科学&i class=&icon-external&&&/i&&/a&与计算机应用技术相交融的领域。正确的编程学习方法应该是:通过自顶而下的探索与项目实践,获得编程直觉与推动力;从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。&/p&&p&作为初学者,应以后者为主,前者为辅。&/p&&p&&b&启蒙&/b&&/p&&p&「学编程应该学哪门语言?」这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是「哪些东西构成了编程学习的基础」?&/p&&p&编程知识的金字塔底部有三个关键的部分:&/p&&ol&&li&o 算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量,之后对于每个数…&/li&&li&o 语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。&/li&&li&o 系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() { int x = 0; return &x; } 是不可行的?&/li&&/ol&&p&启蒙阶段的初学者若选择C语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前要花费很多时间。&/p&&p&因此,为了尽量最小化「语法」与「系统基础」这两部分,建议使用 Python 作为学习的第一门语言,虽然 Python 对初学者很友好,但这并不意味着它只是一个「玩具」,在大型项目中你也能见到它强大而灵活的身影。熟悉 Python 后,学习 C 语言是便是一个不错的选择了:学习 C 语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理解操作系统层级的一些原理。&/p&&p&下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。下面的材料没有先后顺序,如果卡壳的话可以考虑换另一份材料。&/p&&ol&&li&o 完成 &a href=&%22& data-editable=&true& data-title=&MIT 6.00.1x&&MIT 6.00.1x&/a& (&a href=&/?target=http%3A///courses/course-v1%3AMITx%2B6_00_1x%2Bsp/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工:计算机科学和 Python 编程导论&i class=&icon-external&&&/i&&/a&)。虽然该课程的教学语言为 Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,Python 编程语言,一些简单的数据结构与算法,测试与调试。&/li&&li&o 完成 &a href=&/?target=https%3A//www.edx.org/course/introduction-computer-science-harvardx-cs50x& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Harvard CS50x&i class=&icon-external&&&/i&&/a& (&a href=&/?target=http%3A///special/opencourse/cs50.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&哈佛大学:计算机科学&i class=&icon-external&&&/i&&/a&)。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:阅读《&a href=&/?target=https%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编码&i class=&icon-external&&&/i&&/a&》&/li&&li&o 完成 &a href=&/?target=http%3A///wiki/958fa6d3a2e542c000& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python 教程&i class=&icon-external&&&/i&&/a&。&/li&&/ol&&br&&p&&b&入门&/b&&/p&&p&结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如 Web 开发, Android 开发,iOS 开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E8%25AE%25A1%25E7%25AE%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机科学&i class=&icon-external&&&/i&&/a&通用基础知识的时候,不要试图去抄近路直接学你现在想学的东西,这是注定会失败的。&/p&&p&那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么 (Why) 要这样设计?,思考怎样 (How) 写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。&/p&&p&设想 :&/p&&p&X = 用于思考解决方案的时间,即「解决问题」 部分&/p&&p&Y = 用于实现代码的时间,即「利用计算机」部分」&/p&&p&编程能力 = F(X, Y) (X&Y)&/p&&p&要想提高编程能力,就得优化 X,Y 与函数 F(X, Y),很少有书的内容能同时着重集中在这三点上,但有一本书做到了——&a href=&/?target=https%3A///sarabander/sicp-pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Structure and Interpretation of Computer Programs&i class=&icon-external&&&/i&&/a& (SICP)《&a href=&/?target=https%3A///subject/1148282/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机程序的构造和解释&i class=&icon-external&&&/i&&/a&》,它为你指明了这三个变量的方向。在阅读 SICP 之前,你也许能通过调用几个函数解决一个简单问题。但阅读完 SICP 之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP 的教学语言为 Scheme,可以让你初步了解&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E5%2587%25BD%25E6%%25E7%25A8%258B%25E5%25BC%258F%25E8%25AA%259E%25E8%25A8%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&函数式编程&i class=&icon-external&&&/i&&/a&。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。&/p&&p&&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E5%25BD%25BC%25E5%25BE%25B7%25C2%25B7%25E8%25AB%25BE%25E7%25B1%25B3%25E6%25A0%25BC& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Peter Norvig&i class=&icon-external&&&/i&&/a& 曾经写过一篇非常精彩的 SICP &a href=&/?target=http%3A///review/R403HR4VL71K8/ref%3Dcm_cr_rdp_perm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&书评&i class=&icon-external&&&/i&&/a&,其中有这样一段:&/p&&p&To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.&/p&&p&如果你是文中的前者,阅读SICP将成为你衔接启蒙与入门阶段的关键点&/p&&p&虽然SICP是一本「入门书」,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:&/p&&ol&&li&o &a href=&/?target=https%3A///course/cs212& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Udacity CS212 Design of Computer Program&i class=&icon-external&&&/i&&/a&:由上文提到的Google 研究主管 Peter Norvig 主讲,教学语言为 Python,内容有一定难度。&/li&&li&o &a href=&/?target=http%3A//www.ccs.neu.edu/home/matthias/HtDP2e/Draft/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to Design Programs, Second Edition&i class=&icon-external&&&/i&&/a&:HtDP 的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读 HtDP。&/li&&li&o &a href=&%22ht& data-editable=&true& data-title=&UC Berkeley SICP 授课视频&&UC Berkeley SICP 授课视频&/a&以及 SICP 的两位作者给 Hewlett-Packard 公司员工培训时的录像(&a href=&/?target=https%3A///DeathKing/Learning-SICP/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&中文化项目&i class=&icon-external&&&/i&&/a&)&/li&&li&o &a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Composing Programs&i class=&icon-external&&&/i&&/a&:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)&/li&&li&o &a href=&/?target=http%3A//sicp.readthedocs.org/en/latest/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SICP 解题集&i class=&icon-external&&&/i&&/a&:对于书后的习题,作为初学者应尽力并量力完成。&/li&&/ol&&p&完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,推荐你关注 &a href=&/alchemelon& class=&internal&&炼瓜研究所 &/a&,或者从 &a href=&/?target=https%3A///karan/Projects/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mega Project List&i class=&icon-external&&&/i&&/a& 中选取自己喜欢的项目。&/p&&p&如果你觉得 SICP 就是搞不定,也不要强迫自己,先跳过,继续走常规路线:开始读 &a href=&/?target=http%3A///subject/1998341/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Elements of Computing Systems&i class=&icon-external&&&/i&&/a& 吧,它会教会你从最基本的 Nand 门开始构建计算机,直到俄罗斯方块在你的计算机上顺利运行。 &a href=&/?target=http%3A//www.nand2tetris.org/course.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&具体内容&i class=&icon-external&&&/i&&/a&不多说了,这本书会贯穿你的整个编程入门阶段,你入门阶段的目标就是坚持完成这本书的所有项目(包括一个&b&最简的&/b&编译器与操作系统)。&/p&&p&&b&为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要做足功课(注意:下面的内容没有绝对意义上的先后顺序):&/b&&/p&&br&&p&&b&计算机系统基础&/b&&/p&&p&有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:&a href=&/?target=http%3A//csapp.cs.cmu.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Systems: A Programmer's Perspective, 3/E&i class=&icon-external&&&/i&&/a&《&a href=&%22http:& data-editable=&true& data-title=&深入理解计算机系统&&深入理解计算机系统&/a&》。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是 &a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E5%258D%25A1%25E5%E5%259F%25BA%25E6%25A2%%259A%%25A4%25A7%25E5%25AD%25A6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CMU&i class=&icon-external&&&/i&&/a& 的「&a href=&/?target=https%3A//www.cs.cmu.edu/%7E213/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机系统导论&i class=&icon-external&&&/i&&/a&」的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以「程序在计算机中如何执行」为主线,全面阐述计算机系统内部实现的诸多细节。&/p&&p&如果你看书觉得有些枯燥的话,可以跟一门 Coursera 上的 MOOC: &a href=&/?target=https%3A//www.coursera.org/course/hwswinterface& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Hardware/Software Interface&i class=&icon-external&&&/i&&/a&,这门课的内容是 CSAPP 的一个子集,但是最经典的&a href=&/?target=http%3A//csapp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实验部分&i class=&icon-external&&&/i&&/a&都移植过来了。同时,可以看看 &a href=&/?target=http%3A///subject/1139336/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The C Programming Language&i class=&icon-external&&&/i&&/a&,回顾一下C语言的知识。&/p&&p&完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络-&内存-&缓存-&CPU 的流向。&/p&&br&&p&&b&数据结构与算法基础&/b&&/p&&p&如今,很多人认为编程(特别是做 web 开发)的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的「码农」思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。&/p&&p&数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的&a href=&/?target=http%3A//en.wikipedia.org/wiki/List_of_data_structures& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构&i class=&icon-external&&&/i&&/a&和&a href=&/?target=http%3A//en.wikipedia.org/wiki/List_of_algorithms& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&算法&i class=&icon-external&&&/i&&/a&,你要去搜它主要拿来干嘛的,使用场景是什么。&/p&&p&供你参考的学习资源:&/p&&ol&&li&o 《&a href=&/?target=http%3A//book.do& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&算法导论&i class=&icon-external&&&/i&&/a&》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《&a href=&/?target=http%3A///subject/1139426/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构与算法分析&i class=&icon-external&&&/i&&/a&》&/li&&li&o Algorithms: Design and Analysis [&a href=&/?target=https%3A//www.coursera.org/course/algo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Part 1&i class=&icon-external&&&/i&&/a&] & [&a href=&/?target=https%3A//www.coursera.org/course/algo2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Part 2&i class=&icon-external&&&/i&&/a&]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;如果英文不过关:&a href=&/?target=http%3A///special/opencourse/algorithms.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工学院:算法导论&i class=&icon-external&&&/i&&/a&&/li&&li&o 入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分可以读读这几本书:《&a href=&/?target=http%3A///subject/3227098/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程珠玑&i class=&icon-external&&&/i&&/a&》,《&a href=&/?target=http%3A///subject/1173548/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序设计实践 &i class=&icon-external&&&/i&&/a&》&/li&&/ol&&p&&b&编程语言基础&/b&&/p&&p&Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet&/p&&p&- &a href=&%22https://& data-editable=&true& data-title=&The Pragmatic Programmer&&The Pragmatic Programmer&/a&&/p&&p&此外还要知道,学习第 n 门编程语言的难度是第 (n-1) 门的一半,所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:「干净」的脚本语言 Python, 传统的命令式语言 C, 以及&a href=&/?target=http%3A//matt.might.net/articles/i-love-you-in-racket/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&浪漫&i class=&icon-external&&&/i&&/a&的函数式语言 Scheme 三个好朋友。但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 &a href=&/?target=http%3A///poignant-guide/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ruby&i class=&icon-external&&&/i&&/a& 小姑娘,Hindley-Milner 语言家族的掌中宝 &a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Haskell&i class=&icon-external&&&/i&&/a& 都是不错的选择。至于 &a href=&%22http:/& data-editable=&true& data-title=&C++ &&C++ &/a&,喜欢的话学学也无妨。&/p&&p&现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。&/p&&p&供你参考的学习资源:&/p&&ol&&li&o &a href=&/?target=http%3A///subject/2152385/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《程序设计语言-实践之路》&i class=&icon-external&&&/i&&/a&:CMU 编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。&/li&&li&o &a href=&/?target=https%3A//www.coursera.org/course/proglang& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming Languages&i class=&icon-external&&&/i&&/a&:课堂上你能接触到极端 FP (函数式)的 SML,中性偏 FP 的 Racket,以及极端 OOP (&a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E9%259D%25A2%25E5%E5%25AF%25B9%25E8%25B1%25A1%25E7%25A8%258B%25E5%25BA%258F%25E8%25AE%25BE%25E8%25AE& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&面向对象&i class=&icon-external&&&/i&&/a&)的 Ruby,并学会问题的 FP 分解 vs OOP 分解、ML 的模式匹配、Lisp 宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。&/li&&li&o &a href=&/?target=https%3A///course/cs262& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Udacity CS262 Programming Language&i class=&icon-external&&&/i&&/a&:热热身,教你写一个简单的浏览器——其实就是一个 JavaScript 和 HTML 的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个 &a href=&/?target=http%3A//inst.eecs.berkeley.edu/%7Ecs61a/fa13/proj/scheme/scheme.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scheme Interpreter&i class=&icon-external&&&/i&&/a&&/li&&/ol&&p&&b&其他&/b&&/p&&p&编程入门阶段比较容易忽视的几点:&/p&&ol&&li&1 学会提问:学习中肯定会遇到问题,应该学会正确的使用搜索引擎。当单靠检索无法解决问题时,去 &a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stack Overflow&i class=&icon-external&&&/i&&/a& 或知乎提问,提问前读读这篇文章:&a href=&/?target=http%3A//mp./s%3F__biz%3DMzI3NDI5ODQ2Ng%3D%3D%26mid%3D%26idx%3D1%26sn%3D201ccfdfb5d855& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&能有效解决问题的提问方法&i class=&icon-external&&&/i&&/a&。&/li&&li&2 不要做一匹独狼:尝试在 &a href=&/?target=http%3A//cocode.cc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoCode&i class=&icon-external&&&/i&&/a& 与他人交流想法。尝试搭建一个像&a href=&%22h& data-editable=&true& data-title=&这样&&这样&/a&简单的个人网站。试着在博客上记录自己的想法。订阅自己喜欢的编程类博客,推荐几个供你参考:&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Joel on Software&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A///index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Peter Norvig&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coding Horror&i class=&icon-external&&&/i&&/a&&/li&&li&3 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。&/li&&/ol&&p&&b&小结&/b&&/p&&p&以上的内容你不应该感到惧怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试&a href=&/?target=http%3A///Education/How-can-you-learn-faster/answer/Acaz-Pereira& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&「费曼」技巧&i class=&icon-external&&&/i&&/a&:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗。&/p&&p&此外不要局限于上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。这里不得不提到在 &a href=&/?target=http%3A///questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stack Overflow&i class=&icon-external&&&/i&&/a& 上票选得出的程序员必读书单中,排在前两位的两本书:&/p&&p&&a href=&/?target=http%3A///subject/Fi%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Code Complete&i class=&icon-external&&&/i&&/a&:不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补自己的知识缺陷。对于入门阶段的新手们,可以重点看看涉及变量名,测试,个人性格的章节。&/p&&p&&a href=&/?target=http%3A///subject/1417047/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Pragmatic Programmer&i class=&icon-external&&&/i&&/a& :有人称这本书为代码小全:从 &a href=&/?target=http%3A//zh.wikipedia.org/wiki/%25E4%25B8%%25AC%25A1%25E4%25B8%%25BB%%25B8%%25AC%25A1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DRY&i class=&icon-external&&&/i&&/a& 到 &a href=&/?target=http%3A//zh.wikipedia.org/wiki/KISS%25E5%258E%259F%25E5%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KISS&i class=&icon-external&&&/i&&/a&,从做人到做程序员均有涉及。&/p&&br&&p&这本书的作者 Dave ,在书中开篇留了这样一段话:&/p&&p&&b&You’re a Pragmatic Programmer. You aren’t wedded to any particular technology, but you have a broad enough background in the science, and your experience with practical projects allows you to choose good solutions in particular situations. Theory and practice combine to make you strong. You adjust your approach to suit the current circumstances and environment. And you do this continuously as the work progresses. Pragmatic Programmers get the job done, and do it well.&/b&&/p&&p&这段话以及他创立的 &a href=&/?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Pragmatic Bookshelf&i class=&icon-external&&&/i&&/a& 一直以来都积极地影响着我,因此这篇指南我也尽量贯彻了这个思想,引导并希望你们成为一名真正的 Pragmatic Programmer 。&/p&&br&&p&&b&后记&/b&&/p&&p&如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程入门。这意味着你在之后更深入的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些「复杂」的 API,更不会畏惧学习具体的技术,甚至感觉很容易。当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,获得极大的自信,看老师同学和 &a href=&/?target=http%3A//www.csdn.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSDN&i class=&icon-external&&&/i&&/a& 的眼光会变得非常微妙,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。&/p&&img data-rawheight=&337& src=&/5d6f72ac17ad317be649f8_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/5d6f72ac17ad317be649f8_r.png&&&br&&p&欢迎实践过的同学现身说法。几位读者的实例:&/p&&ol&&li&o &a href=&/?target=http%3A//zhi.hu/hhiA& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&非计算机专业,计算机如何入门? - 浪无痕&i class=&icon-external&&&/i&&/a&&/li&&li&o &a href=&/?target=http%3A//my.oschina.net/voler/blog/396424& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&我只想成为一名合格的程序员&i class=&icon-external&&&/i&&/a&&/li&&li&o &a href=&/?target=http%3A//blog.csdn.net/a910626/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&知乎《编程入门指南v1.3》思维导图&i class=&icon-external&&&/i&&/a&&/li&&/ol&&br&&p&附(zhèng)录(wén)&/p&&p&&b&@&/b&&b&萧井陌&/b&&b&的编程类回答汇总&/b&&/p&&p&方向:&/p&&ol&&li&o &a href=&/question//answer& class=&internal&&怎么成为一个优秀的程序员,而不是一个优秀的码农?&/a&&/li&&/ol&&p&优秀的程序员会告诉你打根基的重要性,会劝你在厚积薄发前要隐忍。&/p&&p&优秀的程序员应该善用包装...&/p&&ol&&li&o &a href=&/question//answer/& class=&internal&&计算机本科应届毕业生要有怎样的能力才算比较好的?&/a&&/li&&/ol&&p&对本科生的要求其实很简单,认真学过专业课就行。&/p&&p&所谓认真学过专业课的程度是:...&/p&&ol&&li&o &a href=&/& class=&internal&&想进入微软,本科该如何努力?&/a&&/li&&/ol&&p&你可以找一个美国大学学他们的计算机课程,课程设置和教材都能查到,书都能买到。那几所学校的本科课程安排差异比较大,全学也不是不可以。做好这几点: ...&/p&&ol&&li&o &a href=&/question//answer/& class=&internal&&大四学生,想通过两到三年的积累去Google工作,请问应如何准备?&/a&&/li&&/ol&&p&我觉得你得先找到一个技术方向,树立一个以此技术方向为首要目标的原则,做好这个方面的事情,对这个方面的所有技术细节都务求深入了解。然后呢...&/p&&ol&&li&o &a href=&/question//answer/& class=&internal&&文科生如何转行当程序员?考研是最好选择吗?&/a&&/li&&/ol&&p&0. 找一本《计算机导论》类的书籍看看,了解一下行业大致情况,随便翻翻就好&/p&&p&1. 去维基百科翻一下历年图灵奖得奖情况,粗略了解一下行业历史...&/p&&ol&&li&o &a href=&/question//a& class=&internal&&有哪些适合程序员读的人文书籍?&/a&&/li&&/ol&&p&程序员也是人, 程序员的整体素质在其他行业也是通用的.&/p&&p&so.... 这就产生了很多其他行业的书...&/p&&p&方法:&/p&&ol&&li&o &a href=&/question//answer/& class=&internal&&如何学习不感兴趣但自己也认为很重要的东西?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&兴趣广泛和保持专注是否矛盾?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&在学习编程的过程中如何权衡寻求方法工具和埋头苦干?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&新手关于如何看编程经典书的一些疑惑?&/a&&/li&&li&o &a href=&/?target=http%3A//zhi.hu/aaOB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机方面的经典书籍,不做或少做习题会对学习效果造成多大影响呢?&i class=&icon-external&&&/i&&/a&&/li&&li&o 有哪些老鸟程序员知道而新手不知道的小技巧?&/li&&li&o &a href=&/question//answer/& class=&internal&&改bug是程序员的任务里比较低贱的工作内容吗?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&如何辨别一个程序员水平的高低?&/a&&/li&&/ol&&br&&p&细分:&/p&&ul&&ul&&li&o &a href=&/question//answer/& class=&internal&&如何去学习程序员的三大浪漫,编译原理,图形学,操作系统?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&数据库、操作系统、编译原理应该以怎样的的顺序学习?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&如何在六个月的时间内完成一个简单的操作系统,应该要学些什么?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&计算机系大四学生如何在六个月的时间内完成一个编译器?要学些什么?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&算法到底应该怎么学?&/a&&/li&&li&o &a href=&/question& class=&internal&&WEB 开发还有前途吗?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&嵌入式开发还有前途吗?&/a&&/li&&li&o &a href=&/question//answer/& class=&internal&&已参加工作的程序员如何系统提升英语阅读能力?&/a&&/li&&/ul&&/ul&&br&&p&&b&@&/b&&b&萧井陌的知乎回答集锦&/b&(按赞同数排列) ( 更新)&/p&&ol&&li&o &a href=&%22& data-editable=&true& data-title=&PDF 格式&&PDF 格式&/a&&/li&&li&o &a href=&/?target=http%3A///s/1qWqNzPi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ePub 格式&i class=&icon-external&&&/i&&/a&&/li&&/ol&&img data-rawheight=&445& src=&/3d9d7ba432eabc38cd140_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/3d9d7ba432eabc38cd140_r.png&&&br&&p&---&/p&&br&&p&...&/p&
作者:, 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0:一个让大家学习、成长、相聚并获得乐趣的技术社区答疑邮箱: xiao. (编程入门指南学习群:--- 日 v1.5 更新2…
&p&谢邀。MIT的老师其实非常重视上课,准备很充分,都想更好地把知识传授给学生。下面列几个我上过的非常好而且课程资料也公开的课程。&/p&&p&&a href=&///?target=https%3A//pdos.csail.mit.edu/6.824/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&6.824 &i class=&icon-external&&&/i&&/a&Distributed System: 系统方向非常好的一门课程,每堂课都讲一个新的分布式系统模型,没有教材,每堂课都是直接讲论文。老师是MIT PDOS的神牛Robert Morris (不错,这人就是当年因为发明蠕虫病毒而蹲监然后回MIT当教授的神人)和Frans Kaashoek。这些分布式系统都是实际用在各个大公司里的系统,比如说Spark, GFS,PNUTS。当年我修这门课的时候感觉课程压力非常大,有期中期末考试,有lab作业,有reading work, 还有course project,但是整个课程设计得非常好。lab要用Golang实现,硬生生地学了门新的语言。最后我的course project是用Go实现了一个Spark原型系统(&a href=&///?target=https%3A///metalbubble/GoSpark& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&metalbubble/GoSpark&i class=&icon-external&&&/i&&/a&),那个还是2013年的时候,Spark还刚开始崭露头角:)。&/p&&p&6.830 &a href=&///?target=http%3A//db.csail.mit.edu/6.830/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Database Systems&i class=&icon-external&&&/i&&/a&: 数据库系统的一门核心课程。由数据库的一大山头Samuel Madden教授。前半部分比较基础的数据库的知识,后半段主要在讲Distributed Databases的东西,各种consistency挺有意思,也是database比较火的研究方向。&/p&&p&&a href=&///?target=http%3A//people.csail.mit.edu/moitra/409.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&18.409 Algorithmic Aspects of Machine Learning, Spring 2015&i class=&icon-external&&&/i&&/a&: Ankur Moitra教的machine learning课程。课程切入点跟一般的机器学习课程都不同,Ankur自己是做theory背景的(攻FOCS, STOC之类的会),所以这个课程有深厚的理论根基。对sparse coding, topic model, tensor decompositions等会有脑洞大开的认识。&/p&&p&6.869 Advances in Computer Vision (&a href=&///?target=http%3A//6.869.csail.mit.edu/fa16/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fall 2016&i class=&icon-external&&&/i&&/a& &a href=&///?target=http%3A//6.869.csail.mit.edu/fa15/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fall 2015&i class=&icon-external&&&/i&&/a&) 我TA过的一门计算机视觉的课程。课件不错,过了一遍CV的传统内容,也增加了很多deep learning的内容,适合初学者入门,也适合除了deep learning就不懂computer vision其他东西的朋友。。。Final Project我设计了一个Mini Places Challenge, 让学生可以组队比赛,训练深度模型。&/p&&p&其他我想到了再补充。&/p&
谢邀。MIT的老师其实非常重视上课,准备很充分,都想更好地把知识传授给学生。下面列几个我上过的非常好而且课程资料也公开的课程。Distributed System: 系统方向非常好的一门课程,每堂课都讲一个新的分布式系统模型,没有教材,每堂课都是直接讲论…
&p&看到这个问题我必须拿出我收藏多年,不到关键时刻不示人的计算机之神:Ravindrababu Ravula,数据结构和算法、编译原理、操作系统、计算机网络全都懂,懂还就算了,讲课还非常棒!&/p&&img src=&/v2-fef7694c9edf10c32d2439_b.png& data-rawwidth=&1117& data-rawheight=&626& class=&origin_image zh-lightbox-thumb& width=&1117& data-original=&/v2-fef7694c9edf10c32d2439_r.png&&&p&&a href=&///?target=https%3A///channel/UCJjC1hn78yZqTf0vdTC6wAQ& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/channel/UCJ&/span&&span class=&invisible&&jC1hn78yZqTf0vdTC6wAQ&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&很久之前因为工作原因需要一点编译原理的知识,但是本科上课的知识已经忘光了(其实上课的时候也没怎么认真听懂)。然后就上 Youtube 搜了一下,找到这位帅气的印度小哥。怀着试一下的心态看了几分钟,然后发现:&b&根本停不下来&/b&!就一口气把 Parser 相关的知识全听完了,隔天消化一下,后续就写出了人生第一个 Parser,并且应用到了前端的模版引擎当中。虽然我不知道他的名字怎么念,但是我知道他讲课是在太棒了。&/p&&p&给你讲解 Parser 的分类:&/p&&img src=&/v2-a5b4ef654ac91_b.png& data-rawwidth=&1242& data-rawheight=&652& class=&origin_image zh-lightbox-thumb& width=&1242& data-original=&/v2-a5b4ef654ac91_r.png&&&p&Top-down Parsing 的工作原理:&/p&&img src=&/v2-87dc532fb_b.png& data-rawwidth=&1126& data-rawheight=&631& class=&origin_image zh-lightbox-thumb& width=&1126& data-original=&/v2-87dc532fb_r.png&&&p&通过大量的白板演算实例教你怎么算 First 和 Follow 集,直到教到你懂为止:&/p&&img src=&/v2-6990abab4af7ba2a180b_b.png& data-rawwidth=&1263& data-rawheight=&647& class=&origin_image zh-lightbox-thumb& width=&1263& data-original=&/v2-6990abab4af7ba2a180b_r.png&&&p&一步步教你 Parsing Table:&/p&&img src=&/v2-822d0ba1bdb764ea5fde7f549c99a512_b.png& data-rawwidth=&1213& data-rawheight=&628& class=&origin_image zh-lightbox-thumb& width=&1213& data-original=&/v2-822d0ba1bdb764ea5fde7f549c99a512_r.png&&&p&通过实际白板代码推演递归下降的 LL(1) Parser,告诉你每一步代码做了什么,每一步的程序状态是怎么样的,教到你懂为止:&/p&&img src=&/v2-21c9af1bbcdf7f36cb4ef_b.png& data-rawwidth=&600& data-rawheight=&313& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/v2-21c9af1bbcdf7f36cb4ef_r.png&&&p&我这里当然省略了 Ravula 老师讲课的很多细节。这位名字我不会念的老师讲课细致、逻辑清晰,有条不紊,难的地方通过大量实例一步步讲解,不含糊,让人如痴如醉欲罢不能,以至于我现在写简单的 Parser 都是直接怼 EBNF 直接开撸。然后我回忆了一下本科给我们讲编译原理的那位老先生,原来当年听不懂课除了跟我智商低有关系以外,还跟讲课的人有很大的关系啊!&/p&&p&不轻易间点看了 Ravula 老师的主页,发现他不仅仅懂编译原理,而且懂几乎所有计算机学科相关的基础课程,包括数据结构和算法、编译原理、操作系统、计算机网络:&/p&&img src=&/v2-d2a231dfa9205_b.png& data-rawwidth=&1081& data-rawheight=&862& class=&origin_image zh-lightbox-thumb& width=&1081& data-original=&/v2-d2a231dfa9205_r.png&&&br&&img src=&/v2-679c9c388adfb21d1e266f3cd53958e2_b.png& data-rawwidth=&1079& data-rawheight=&826& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&/v2-679c9c388adfb21d1e266f3cd53958e2_r.png&&&p&这些个好东西这么多年来我都是偷偷看的,我发现国内很少人知道他。可能是跟你得学会怎么听印度口音的英文才能听他讲课有关系[捂脸](不过不用怕,Youtube 的字幕就好了,但是也是英文字幕)。&/p&&p&当然小哥也不是万能的,有些地方还是需要有一点知识储备才能听懂,所以最好是能够结合一些资料来配合着看最佳。&/p&&p&UPDATE:评论区好多朋友都说看过小哥的 KMP、后缀树等,看来我对小哥还是知之甚少。&/p&&p&UPDATE:很多朋友问有没有中文字幕,讲道理应该是没有的。最猴还是能习惯一下听英文,配合着 Youtube 的英文字幕其实还可以,毕竟来来去去就那几个词。习惯听英文,新世界的大门会向你敞开。&/p&&p&UPDATE:有朋友说怎么开字幕,这里有个 CC 啊,点他啊&/p&&img src=&/v2-8bf97f291a560bb3d0f855_b.png& data-rawwidth=&241& data-rawheight=&127& class=&content_image& width=&241&&&p&PS:小哥能不能给我点广告费。&/p&&p&UPDATE: 有些朋友说听不懂...那我也很绝望啊,我还能怎么办&/p&
看到这个问题我必须拿出我收藏多年,不到关键时刻不示人的计算机之神:Ravindrababu Ravula,数据结构和算法、编译原理、操作系统、计算机网络全都懂,懂还就算了,讲课还非常棒!很久之前因为工…
&p&有关前端工程师的价值到底有多大,相信是很多前端工程师心里的一道坎。在这里小编推荐一篇阮一峰同学的:《母鸡与前端工程师》的文章,这篇文章可以给选择这个行业的同学一些信心,正文如下:
&a href=&///?target=http%3A///m/8145/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&母鸡与前端工程师-博客-云栖社区-阿里云&i class=&icon-external&&&/i&&/a&&/p&&p&1.&/p&&p&新闻说,今年全国高校毕业生达到空前的&a href=&///?target=http%3A//.cn/n1//c5.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&756万&i class=&icon-external&&&/i&&/a&,又赶上很多传统行业压缩产能,就业压力很大。&/p&&p&很多曾经的&明星专业&,都已经就业困难。我考大学的时候,国际贸易是最热门的专业之一,大家认定这个专业容易赚钱。但是现在这个专业的毕业生,想找一份好工作会很难,上海将它列入&a href=&///?target=http%3A///m/a9435812.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&10大预警专业&i class=&icon-external&&&/i&&/a&,即最难就业的十个专业之一。&/p&&br&&img src=&/a7d22cc4bc528d152e9591_b.jpg& data-rawwidth=&550& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&/a7d22cc4bc528d152e9591_r.jpg&&&br&&p&但是,并非所有行业都不景气。至少有一个行业的用工需求极其旺盛,到处都是招聘广告,工作岗位是应聘者数量的好几倍,通常你都有好几家公司可以挑。每周都有朋友发来消息,能不能帮忙介绍几个人过来,我们实在是缺人啊。&/p&&p&这个行业就叫做互联网开发。&/p&&p&2.&/p&&p&互联网行业的劳动力需求,可以用&用工荒&来形容。&/p&&p&只要你会做网页,尤其是手机App的页面,或者微信的活动页面,就不愁找不到工作。哪怕你刚刚学会几个月,或者刚从培训班毕业,只要能拿出作品,就会有比其他行业高得多的起薪。等到有了一两年工作经验,工资就可以达到大学教授的水平。&/p&&br&&p&这样的就业行情,怎不令人趋之若骛。尽管每年都有好几万新人加入,互联网公司还是在喊,工程师严重短缺。&/p&&p&我曾经不太理解,为什么网页开发工程师(或称&前端工程师&)这么&a href=&/question/& class=&internal&&抢手&/a&。直到有一天,看到了一组鸡蛋的统计数据,才想通了这个问题。&/p&&br&&img src=&/cee1ded1741_b.jpg& data-rawwidth=&700& data-rawheight=&467& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&/cee1ded1741_r.jpg&&&br&&p&3.&/p&&p&中国是世界鸡蛋第一大国。&a href=&///?target=http%3A//.cn/livestock/poultry//2178089.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&据统计&i class=&icon-external&&&/i&&/a&,2013年全国产量5750亿枚,一个中国人平均一年要吃掉400多枚鸡蛋。&/p&&p&那么中国需要多少只母鸡,才能达到这样的产量?&/p&&br&&img src=&/ef8c8ad8cad1638a8bca9ac43fe74c1e_b.jpg& data-rawwidth=&460& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&460& data-original=&/ef8c8ad8cad1638a8bca9ac43fe74c1e_r.jpg&&&br&&br&&p&据说,普通母鸡一年大概生200~250枚鸡蛋。养鸡场里面最优秀的母鸡,一年可以达到320枚。以250枚计算的话,中国至少需要有23亿只母鸡,才能满足全国人民吃蛋的需求。&/p&&br&&p&4.&/p&&br&&p&如果把鸡蛋换成网页,同样的问题就是,中国一年需要生产多少张网页,才能满足人民消费的需要?&/p&&p&去年,我国手机用户超过13亿,智能手机用户&a href=&///?target=http%3A///blog/http%3A///mobile41787.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&超过6亿&i class=&icon-external&&&/i&&/a&。就算其中只有一半人上网,那也是3亿多人。这么多人,每天都有几十分钟或者几个小时,要使用手机上网。全体中国人一年消费的网页和App的数量,是一个天文数字。&/p&&br&&img src=&/652e4c27add_b.jpg& data-rawwidth=&612& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&612& data-original=&/652e4c27add_r.jpg&&&br&&p&鸡蛋是母鸡生出来的,网页从哪里来?归根结底,所有页面都需要工程师做出来。那么多互联网公司,每家公司都需要前端工程师。而全国的前端工程师,目前可能总共有几十万人,对比那么大的内容消费量,肯定是远远不够的(想一想吧,全国的母鸡有23亿只)。这样一想,工程师抢手就不奇怪了。&/p&&p&还有一个很重要的原因,学校不教前端开发,可能会有一些相关课程,但不会系统地教,所有前端工程师都是靠自学的。这也导致了供给偏少。&/p&&p&5.&/p&&p&由于工作好找和工资较高,前端工程师现在成了一个热门职业。很多不是搞计算机的人,也在考虑转行加入。社会上的培训班,每个周末的各种讲座和大会,都已经人满为患。&/p&&p&我经常收到电子邮件,咨询是否应该改行。&/p&&blockquote&&我是一名会计/教师/导游,现在的工作没有任何成就感,感到没有发展空间。如果我拿出一年左右的时间去自学前端类的课程,将来能走上程序员这条路吗?&&/blockquote&&p&这可怎么答复?&/p&&p&6.&/p&&p&前端编程入门,确实不难,可以短期速成。只要你对计算机有基本的理解,哪怕编程零基础,经过三四个月的培训,也能做出网页和App。&/p&&p&如果你确实想改行,我觉得,这基本上是一件好事,你应该选择那些更有前景的职业。但问题是,并非每个人都适合编程。现在那么多人一窝蜂学习互联网开发,肯定有人将来会后悔。&/p&&p&你最好事先知道下面三件事,再考虑加入这个行业。&/p&&p&7.&/p&&p&首先,你应该热爱编程。&/p&&p&职业程序员每天都必须长时间地坐在电脑前面,与机器对话的时间,远超过与人对话。如果不是真心热爱编程,这会很难忍受,简直像是一种惩罚。让一个人在他不喜欢的事情上面,筋疲力尽地干上几年甚至几十年,那是多么痛苦的人生。&/p&&p&其次,编程本身虽然是一种智力活动,但是中国的现实却更像一种体力劳动。&/p&&p&由于运营活动太多,开发是做不完的,App必须不断地推出新版本。工作量常常是超负荷的,任务排期一个接着一个,中间根本没有喘息时间,同时做多个项目也是家常便饭。每个项目都有截止期,做不完只能加班。这样说吧,制作网页本身是有趣的,但是像流水线一样的&制造&网页是乏味的,好比养鸡场的母鸡不停得下蛋,每周必须完成5个蛋的指标。&/p&&p&最后,这个行业的新陈代谢很快。&/p&&p&快速的技术更新和极大的工作强度,使得年轻人具有天然的优势。等到职业生涯后期,你的开发速度开始慢下来,就是你被更年轻的人取代的时候。一只母鸡一生中,大约总共可以生2000枚鸡蛋,你的一生中可以制作的网页(或者 App),大概也是一个常数。&/p&&p&8.&/p&&p&如果你不喜欢编程,体会不到代码的乐趣和成就感,只是为了一份好的薪水,就跑来干,那就是很糟糕的选择。想一想如果十年前,你听说国际贸易很兴旺,高考志愿就填了国际贸易,今天会怎样呢?&/p&&p&你应该选择,那些让你产生最大兴趣和热情的职业。因为未来所有行业,低端的、低技能的岗位都会被机器取代,只有技能最强、最有创造性的人不会被淘汰。兴趣,也只有兴趣,才会让你产生不倦的热情,钻研下去,变得更优秀。&/p&&p&(完)&/p&&p&另外做决定最重要的是信息的掌握程度,云栖社区中还有一篇有关中国程序员的调研总结内容,各位准备入行的同学推荐看一看:《2016软件开发全行业调查白皮书》&a href=&///?target=http%3A///m/13619/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2016软件开发全行业调查白皮书 告诉你最真实的程序猿世界&i class=&icon-external&&&/i&&/a&&/p&
有关前端工程师的价值到底有多大,相信是很多前端工程师心里的一道坎。在这里小编推荐一篇阮一峰同学的:《母鸡与前端工程师》的文章,这篇文章可以给选择这个行业的同学一些信心,正文如下: 1.新闻说,今年全国高校…
&img src=&/v2-55f3dc4d09b1a2f47dea_b.jpg& data-rawwidth=&1000& data-rawheight=&667& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&/v2-55f3dc4d09b1a2f47dea_r.jpg&&&blockquote&作者:百度外卖FE
&i&&a href=&/?target=https%3A///clancyz/vue-learning-notes& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&clancyz&i class=&icon-external&&&/i&&/a&&br&&/i&&/blockquote&&h2&&b&摘要&/b&&/h2&&p&Vue.js作为先进的前端MVVM框架,在外卖已经广泛应用在各业务线中。本文阐述了Vue.js作为前端MVVM框架的主要优势,并从Vue.js的三个核心点:Observer, Watcher, Compiler出发,深入阐述Vue.js的设计与实现原理。&br&&/p&&h2&&b&背景&/b&&/h2&&p&Vue.js 是一个轻量级的前端 MVVM 框架,专注于web视图(View)层的开发 。&br&自2013年以来,Vue.js 通过其可扩展的数据绑定机制、极低的上手成本、简洁明了的API、高效完善的组件化设计等特性,吸引了越来越多的开发者。在github上已经有30,000+ star,且不断在增长;在国内外都有广泛的应用,社区和配套工具也在不断完善,影响力日益扩大,与React 、AngularJS 这种「世界级框架」几乎平起平坐。&br&外卖B端的FE同学比较早(0.10.x版本)就引入了 Vue.js 进行业务开发,经过一年多的实践,积累了一定的理解。在此基础上,我们希望去更深入地了解 Vue.js , 而不是一直停留在表面。所以「阅读源码」成为了一项课外任务。&br&我个人从9月份开始阅读Vue的源码,陆陆续续看了2个月,&a class=& wrap external& href=&/?target=https%3A///clancyz/vue-learning-notes& target=&_blank& rel=&nofollow noreferrer&&这里&i class=&icon-external&&&/i&&/a&是我的源码学习笔记。本篇文章希望从 Vue.js 1.0版本的设计和实现为主线,阐述自己阅读源码的一些心得体会。&br&&/p&&h2&&b&前端为什么需要有MVVM框架?&/b&&/h2&&p&前端刀耕火种的历史在这里就不赘述,在jquery 等DOM操作库大行其道的年代,主要的开发痛点集中于:&br&&/p&&ul&&li&当数据更新时,需要开发者主动地使用 DOM API 操作DOM;当DOM发生变化时,需要开发者去主动获取DOM的数据,把数据同步或提交;&/li&&li&同样的数据映射到不同的视图时,需要新的一套DOM操作,复用性低;&/li&&li&大量的DOM操作使得业务逻辑繁琐冗长,代码的可维护性差。&/li&&/ul&&p&于是,问题的聚焦点就在于:&br&&/p&&ul&&li&业务逻辑应该专注在操作数据(Model),更新DOM不希望有大量的显式操作。&/li&&li&在数据和视图间做到同步(数据绑定和更新监听),不需要人为干预。&/li&&li&同样的数据可以方便地对应多个视图。&/li&&/ul&&p&此外,还应该做到的一些特性:&br&&/p&&ul&&li&方便地实现视图逻辑(声明式或命令式);&/li&&li&方便地创建和连接、复用组件;&/li&&li&管理状态和路由。&/li&&/ul&&p&MVVM框架可以很好地解决以上问题。通过 ViewModel 对 View 和 Model 进行桥接,而Model 和 ViewModel 之间的交互是双向的,View 数据的变化会同步到 Model 中,Model 中的数据变化也会立即反应到 View 上,即我们通常所说的「双向绑定」。这是不需要人为干涉的,所以开发者只需要关注业务逻辑,其他的DOM操作、状态维护等都由MVVM框架来实现。&br&&/p&&h2&&b&Why Vue?&/b&&/h2&&p&Vue.js的优点主要体现在:&br&&/p&&ul&&li&开发者的上手成本很低,开发体验好。&br&&/li&&li&如果使用过 angular 的同学就知道,里面的API多如牛毛,而且还会要求开发者去熟悉类似 controller , directive ,dependency injection , digest cycle 这些概念;&/li&&li&angular2 更是需要提前去了解 Typescript 、RxJS 等基础知识;&/li&&li&要让一个前端小白去搞定 React 的全家桶,ES6 + Babel , 函数式编程 ,JSX , 工程化构建 这些也是必需要过的槛。&/li&&/ul&&p&Vue.js 就没有这些开发负担,对开发者屏蔽了一系列复杂的概念,API从数量、设计上都十分精简,很接地气地支持js的各种方言,让前端小白可以快速上手 — 当然,对于有一定经验的同学,也可以使用流行的语言、框架、库、工程化工具来做自由合理搭配。&br&&/p&&ul&&li&&p&博采众长,集成各种优秀特性 — Vue.js 里面有像 angular 这样的双向数据绑定,2.0版本也提供了像 React 这样的 JSX,Virtual-DOM ,服务端同构 的特性;同时 vuex ,vue-router ,vue-cli 等配套工具也组成了一个完整的框架生态。&/p&&/li&&li&&p&性能优秀。 Vue.js 在1.x版本的时候性能已经明显优于同期基于 dirty check (条件性全量脏检查) 的 angular 1.x ;总体上来说,Vue.js 1.x版本 的性能与React 的性能相近,而且 Vue.js 不需要像React 那样去手动声明shouldComponentUpdate 来优化状态变更时的重新渲染的性能。Vue2.0版本使用了Virtual DOM + Dependency Tracking 方案,性能得到进一步优化。当然,不分场景的性能比较属于耍流氓。 这个&a class=& wrap external& href=&/?target=https%3A///krausest/js-framework-benchmark/b4b79ebb3c7db6e519fe3dbcc3cf43a21bbd8b1c/webdriver-java/table.html& target=&_blank& rel=&nofollow noreferrer&&benchmark&i class=&icon-external&&&/i&&/a& 对比了主流前端框架的性能,可以看出 Vue.js 的性能在大部分场景下都属于业界顶尖。&/p&&/li&&/ul&&h2&&b&Vue.js的绑定设计思路&/b&&/h2&&p&根据上面

我要回帖

更多关于 onenote2016怎么激活 的文章

 

随机推荐