有没有用过任你扫脚本圈的脚本小明和他们的小伙伴们

&p&关于深度学习,网上的资料很多,不过貌似大部分都不太适合初学者。
这里有几个原因:
1.深度学习确实需要一定的数学基础。如果不用深入浅出地方法讲,有些读者就会有畏难的情绪,因而容易过早地放弃。
2.中国人或美国人写的书籍或文章,普遍比较难一些。我不太清楚为什么,不过确实是这样子的。&/p&&p&深度学习,确实需要一定的数学基础,但真的那么难么?这个,还真没有。不信?听我来给你侃侃。看完,你也会觉得没那么难了。&/p&&p&本文是针对初学者,高手可以无视,有不对的地方,还请多多批评指正。&/p&&p&这里,先推荐一篇非常不错的文章:
《1天搞懂深度学习》,300多页的ppt,台湾李宏毅教授写的,非常棒。
不夸张地说,是我看过最系统,也最通俗易懂的,关于深度学习的文章。&/p&&p&这是slideshare的链接:
&a href=&//link.zhihu.com/?target=http%3A//www.slideshare.net/tw_dsconf/ss-Fqid%3D108adce3-2c3d-d0a57e46bc%26v%3D%26b%3D%26from_search%3D3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://www.slideshare.net/tw_dsconf/ss-?qid=108adce3-2c3d-d0a57e46bc&v=&b=&from_search=3&/a&&/p&&p&没梯子的同学,可以从我的网盘下:
链接:&a href=&//link.zhihu.com/?target=http%3A//pan.baidu.com/s/1nv54p9R& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pan.baidu.com/s/1nv54p9&/span&&span class=&invisible&&R&/span&&span class=&ellipsis&&&/span&&/a& 密码:3mty&/p&&p&要说先准备什么,私以为,其实只需要知道导数和相关的函数概念就可以了。高等数学也没学过?很好,我就是想让文科生也能看懂,您只需要学过初中数学就可以了。&/p&&p&其实不必有畏难的情绪,个人很推崇李书福的精神,在一次电视采访中,李书福说:谁说中国人不能造汽车?造汽车有啥难的,不就是四个轮子加两排沙发嘛。当然,他这个结论有失偏颇,不过精神可嘉。&/p&&p&导数是什么,无非就是变化率呗,王小二今年卖了100头猪,去年卖了90头,前年卖了80头。。。变化率或者增长率是什么?每年增长10头猪,多简单。这里需要注意有个时间变量---年。王小二卖猪的增长率是10头/年,也就是说,导数是10.
函数y=f(x)=10x+30,这里我们假设王小二第一年卖了30头,以后每年增长10头,x代表时间(年),y代表猪的头数。
当然,这是增长率固定的情形,现实生活中,很多时候,变化量也不是固定的,也就是说增长率也不是恒定的。比如,函数可能是这样: y=f(x)=5x?+30,这里x和y依然代表的是时间和头数,不过增长率变了,怎么算这个增长率,我们回头再讲。或者你干脆记住几个求导的公式也可以。&/p&&p&深度学习还有一个重要的数学概念:偏导数,偏导数的偏怎么理解?偏头疼的偏,还是我不让你导,你偏要导?都不是,我们还以王小二卖猪为例,刚才我们讲到,x变量是时间(年),可是卖出去的猪,不光跟时间有关啊,随着业务的增长,王小二不仅扩大了养猪场,还雇了很多员工一起养猪。所以方程式又变了:y=f(x)=5x??+8x? + 35x? +30
这里x?代表面积,x?代表员工数,当然x?还是时间。
上面我们讲了,导数其实就是变化率,那么偏导数是什么?偏导数无非就是多个变量的时候,针对某个变量的变化率呗。在上面的公式里,如果针对x?求偏导数,也就是说,员工对于猪的增长率贡献有多大,或者说,随着(每个)员工的增长,猪增加了多少,这里等于35---每增加一个员工,就多卖出去35头猪. 计算偏导数的时候,其他变量都可以看成常量,这点很重要,常量的变化率为0,所以导数为0,所以就剩对35x? 求导数,等于35. 对于x?求偏导,也是类似的。
求偏导我们用一个符号 表示:比如 y/ x? 就表示y对 x?求偏导。&/p&&p&废话半天,这些跟深度学习到底有啥关系?有关系,我们知道,深度学习是采用神经网络,用于解决线性不可分的问题。关于这一点,我们回头再讨论,大家也可以网上搜一下相关的文章。我这里主要讲讲数学与深度学习的关系。先给大家看几张图:&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-cbe0cdfd0af76d328ebe_b.jpg& data-rawwidth=&631& data-rawheight=&488& class=&origin_image zh-lightbox-thumb& width=&631& data-original=&https://pic2.zhimg.com/50/v2-cbe0cdfd0af76d328ebe_r.jpg&&&/figure&&p& 图1. 所谓深度学习,就是具有很多个隐层的神经网络。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-0d5accd6d800be9f933b_b.jpg& data-rawwidth=&432& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&432& data-original=&https://pic1.zhimg.com/50/v2-0d5accd6d800be9f933b_r.jpg&&&/figure&&br&&p&图2.单输出的时候,怎么求偏导数&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-c52b1fcdd42c3ace40a8619_b.jpg& data-rawwidth=&432& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&432& data-original=&https://pic2.zhimg.com/50/v2-c52b1fcdd42c3ace40a8619_r.jpg&&&/figure&&p&图3.多输出的时候,怎么求偏导数。后面两张图是日语的,这是日本人写的关于深度学习的书。感觉写的不错,把图盗来用一下。所谓入力层,出力层,中间层,分别对应于中文的:输入层,输出层,和隐层。&/p&&p&大家不要被这几张图吓着,其实很简单的。干脆再举一个例子,就以撩妹为例。男女恋爱我们大致可以分为三个阶段:
1.初恋期。相当于深度学习的输入层。别人吸引你,肯定是有很多因素,比如:身高,身材,脸蛋,学历,性格等等,这些都是输入层的参数,对每个人来说权重可能都不一样。
2.热恋期。我们就让它对应于隐层吧。这个期间,双方各种磨合,柴米油盐酱醋茶。
3.稳定期。对应于输出层,是否合适,就看磨合得咋样了。&/p&&p&大家都知道,磨合很重要,怎么磨合呢?就是不断学习训练和修正的过程嘛!比如女朋友喜欢草莓蛋糕,你买了蓝莓的,她的反馈是negative,你下次就别买了蓝莓,改草莓了。
------------------------------------------------------------------------------------------------
看完这个,有些小伙可能要开始对自己女友调参了。有点不放心,所以补充一下。
撩妹和深度学习一样,既要防止欠拟合,也要防止过拟合。所谓欠拟合,对深度学习而言,就是训练得不够,数据不足,就好比,你撩妹经验不足,需要多学着点,送花当然是最基本的了,还需要提高其他方面,比如,提高自身说话的幽默感等,因为本文重点并不是撩妹,所以就不展开讲了。这里需要提一点,欠拟合固然不好,但过拟合就更不合适了。过拟合跟欠拟合相反,一方面,如果过拟合,她会觉得你有陈冠希老师的潜质,更重要的是,每个人情况不一样,就像深度学习一样,训练集效果很好,但测试集不行!就撩妹而言,她会觉得你受前任(训练集)影响很大,这是大忌!如果给她这个映象,你以后有的烦了,切记切记!
------------------------------------------------------------------------------------------------&/p&&p&深度学习也是一个不断磨合的过程,刚开始定义一个标准参数(这些是经验值。就好比情人节和生日必须送花一样),然后不断地修正,得出图1每个节点间的权重。为什么要这样磨合?试想一下,我们假设深度学习是一个小孩,我们怎么教他看图识字?肯定得先把图片给他看,并且告诉他正确的答案,需要很多图片,不断地教他,训练他,这个训练的过程,其实就类似于求解神经网络权重的过程。以后测试的时候,你只要给他图片,他就知道图里面有什么了。&/p&&p&所以训练集,其实就是给小孩看的,带有正确答案的图片,对于深度学习而言,训练集就是用来求解神经网络的权重的,最后形成模型;而测试集,就是用来验证模型的准确度的。&/p&&p&对于已经训练好的模型,如下图所示,权重(w1,w2...)都已知。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-9e08dbbab5aa63b6527bd4_b.jpg& data-rawwidth=&940& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&https://pic3.zhimg.com/50/v2-9e08dbbab5aa63b6527bd4_r.jpg&&&/figure&&p&
图4&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-ef5ad0d06a316f762ff43_b.jpg& data-rawwidth=&776& data-rawheight=&174& class=&origin_image zh-lightbox-thumb& width=&776& data-original=&https://pic1.zhimg.com/50/v2-ef5ad0d06a316f762ff43_r.jpg&&&/figure&&p&
图5&/p&&p&我们知道,像上面这样,从左至右容易算出来。但反过来呢,我们上面讲到,测试集有图片,也有预期的正确答案,要反过来求w1,w2......,怎么办?&/p&&p&绕了半天,终于该求偏导出场了。目前的情况是:&/p&&p&1.我们假定一个神经网络已经定义好,比如有多少层,都什么类型,每层有多少个节点,激活函数(后面讲)用什么等。这个没办法,刚开始得有一个初始设置(大部分框架都需要define-and-run,也有部分是define-by-run)。你喜欢一个美女,她也不是刚从娘胎里出来的,也是带有各种默认设置的。至于怎么调教,那就得求偏导。&/p&&p&2.我们已知正确答案,比如图2和3里的r,训练的时候,是从左至右计算,得出的结果为y,r与y一般来说是不一样的。那么他们之间的差距,就是图2和3里的E。这个差距怎么算?当然,直接相减是一个办法,尤其是对于只有一个输出的情况,比如图2; 但很多时候,其实像图3里的那样,那么这个差距,一般可以这样算,当然,还可以有其他的评估办法,只是函数不同而已,作用是类似的:&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-e5ddd26d65aa04ed82f2a51fc8212427_b.jpg& data-rawwidth=&484& data-rawheight=&102& class=&origin_image zh-lightbox-thumb& width=&484& data-original=&https://pic2.zhimg.com/50/v2-e5ddd26d65aa04ed82f2a51fc8212427_r.jpg&&&/figure&&p&不得不说,理想跟现实还是有差距的,我们当然是希望差距越小越好,怎么才能让差距越来越小呢?得调整参数呗,因为输入(图像)确定的情况下,只有调整参数才能改变输出的值。怎么调整,怎么磨合?刚才我们讲到,每个参数都有一个默认值,我们就对每个参数加上一定的数值?,然后看看结果如何?如果参数调大,差距也变大,你懂的,那就得减小?,因为我们的目标是要让差距变小;反之亦然。所以为了把参数调整到最佳,我们需要了解误差对每个参数的变化率,这不就是求误差对于该参数的偏导数嘛。&/p&&p&关键是怎么求偏导。图2和图3分别给了推导的方法,其实很简单,从右至左挨个求偏导就可以。相邻层的求偏导其实很简单,因为是线性的,所以偏导数其实就是参数本身嘛,就跟求解x?的偏导类似。然后把各个偏导相乘就可以了。&/p&&p&这里有两个点:&/p&&p&这里有两个点:一个是激活函数,这主要是为了让整个网络具有非线性特征,因为我们前面也提到了,很多情况下,线性函数没办法对输入进行适当的分类(很多情况下识别主要是做分类),那么就要让网络学出来一个非线性函数,这里就需要激活函数,因为它本身就是非线性的,所以让整个网络也具有非线性特征。另外,激活函数也让每个节点的输出值在一个可控的范围内,这样计算也方便。&/p&&p&貌似这样解释还是很不通俗,其实还可以用撩妹来打比方;女生都不喜欢白开水一样的日子,因为这是线性的,生活中当然需要一些浪漫情怀了,这个激活函数嘛,我感觉类似于生活中的小浪漫,小惊喜,是不是?相处的每个阶段,需要时不时激活一下,制造点小浪漫,小惊喜,比如;一般女生见了可爱的小杯子,瓷器之类都迈不开步子,那就在她生日的时候送一个特别样式,要让她感动得想哭。前面讲到男人要幽默,这是为了让她笑;适当的时候还要让她激动得哭。一哭一笑,多整几个回合,她就离不开你了。因为你的非线性特征太强了。&/p&&p&当然,过犹不及,小惊喜也不是越多越好,但完全没有就成白开水了。就好比每个layer都可以加激活函数,当然,不见得每层都要加激活函数,但完全没有,那是不行的。&/p&&p&由于激活函数的存在,所以在求偏导的时候,也要把它算进去,激活函数,一般用sigmoid,也可以用Relu等。激活函数的求导其实也非常简单:&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-aaedc22cee9ed_b.jpg& data-rawwidth=&257& data-rawheight=&159& class=&content_image& width=&257&&&/figure&&p&求导: f'(x)=f(x)*[1-f(x)]
这个方面,有时间可以翻看一下高数,没时间,直接记住就行了。
至于Relu,那就更简单了,就是f(x) 当x&0的时候y等于0,其他时候,y等于x。
当然,你也可以定义你自己的Relu函数,比如x大于等于0的时候,y等于0.01x,也可以。&/p&&p&另一个是学习系数,为什么叫学习系数?刚才我们上面讲到?增量,到底每次增加多少合适?是不是等同于偏导数(变化率)?经验告诉我们,需要乘以一个百分比,这个就是学习系数,而且,随着训练的深入,这个系数是可以变的。&/p&&p&当然,还有一些很重要的基本知识,比如SGD(随机梯度下降),mini batch 和 epoch(用于训练集的选择),限于篇幅,以后再侃吧。其实参考李宏毅的那篇文章就可以了。&/p&&p&这篇拙文,算是对我另一个回答的补充吧:
&a href=&https://www.zhihu.com/question//answer/?from=profile_answer_card& class=&internal&&深度学习入门必看的书和论文?有哪些必备的技能需学习? - jacky yang 的回答&/a&&/p&&p&其实上面描述的,主要是关于怎么调整参数,属于初级阶段。上面其实也提到,在调参之前,都有默认的网络模型和参数,如何定义最初始的模型和参数?就需要进一步深入了解。
不过对于一般做工程而言,只需要在默认的网络上调参就可以了,相当于用算法;
对于学者和科学家而言,他们会发明算法,难度还是不小的。向他们致敬!&/p&&p&写得很辛苦,觉得好就给我点个赞吧:)&/p&&p&------------------------------------------------------------------------------------------------&/p&&p&关于求偏导的推导过程,我尽快抽时间,把数学公式用通俗易懂的语言详细描述一下,前一段时间比较忙,抱歉:)&/p&&p&------------------------------------------------------------------------------------------------&/p&
关于深度学习,网上的资料很多,不过貌似大部分都不太适合初学者。
这里有几个原因:
1.深度学习确实需要一定的数学基础。如果不用深入浅出地方法讲,有些读者就会有畏难的情绪,因而容易过早地放弃。
2.中国人或美国人写的书籍或文章,普遍比较难一些。我…
&b&多图预警,200赞之后补了几张图片~~手机党斟酌一下0.0&/b&&br&------------------------------------------------------------------------------------------&br&我默默的刷新着,看着赞同一点一点的上涨,现在竟然已经过百赞了!!真心谢谢大家!「鞠躬~」&br&嘛,不过感觉我第一个过百赞的回答竟然是个推荐向的而不是用自己的知识回答的&_&,心里还是有点怪怪的啦~&br&哎呀不要紧不要紧,把好东西分享给大家也很值得开心的说~~\^0^/我会继续努力哒!&br&再次谢谢你们!&br&------------------------------------------------------------------------------------------&br&如果只是为了好玩的话我倒是知道一个,真的好玩,而且能学到东西:&b&CodeCombat&/b&&br&&br&有中文的说,而且还在招翻译人员,大家有能力可以去帮帮忙。&br&&br&这里是介绍:&a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//www.csdn.net/article//2818050-CodeCombat& target=&_blank& rel=&nofollow noreferrer&&CodeCombat游戏全面开源:玩游戏也能学编程-CSDN.NET&/a&&br&这里是源码:&a class=& wrap external& href=&//link.zhihu.com/?target=https%3A//github.com/codecombat/codecombat& target=&_blank& rel=&nofollow noreferrer&&codecombat/codecombat · GitHub&/a&&br&&b&这里是地址&/b&:&a class=& external& href=&//link.zhihu.com/?target=https%3A//codecombat.com/& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&codecombat.com/&/span&&span class=&invisible&&&/span&&/a&&br&&br&「&b&!!!&/b&如果上面的https地址打不开的话试试这个:&a class=& external& href=&//link.zhihu.com/?target=http%3A//codecombat.com/GitHub& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&codecombat.com/GitHub&/span&&span class=&invisible&&&/span&&/a&,会显示找不到网页。然后点左上角,就能跳到主页了。」&br&&br&在我这里访问有点慢,目前还不知道是否需要梯子。但是我以前成功打开过,分享一下。「补充:&b&不用梯子,正常访问&/b&」&br&&br&补官网介绍:&br&什么是 CODECOMBAT?&blockquote&&p&&a href=&//link.zhihu.com/?target=http%3A//georgesaines.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&George&/a&, &a href=&//link.zhihu.com/?target=http%3A//scotterickson.info/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scott&/a&, 和 &a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//www.nickwinter.net/& target=&_blank& rel=&nofollow noreferrer&&Nick&/a& 在 2013 年开始一起编写 CodeCombat。在 2008 年时,我们还创造&a href=&//link.zhihu.com/?target=http%3A//www.skritter.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Skritter&/a& 并且发展出了开发中文和日文的 Web 和 IOS 应用的首选教程&/p&&p&现在是时候教人们如何写代码了。&/p&&/blockquote&为什么选择 CODECOMBAT?&blockquote&&p&当我们制作 Skritter 时,George 还不会写程序,对于不能实现他的灵感这一点很苦恼。他试着学了学,但那些课程都太慢了。他的室友不想通过教材学习新技能,试了试 CodeAcademy,但是觉得“太无聊了。”每星期都会有个熟人尝试 CodeAcademy,然后无一例外地放弃掉。我们发现这和 Skritter 想要解决的是一个问题:人们想要的是高速学习、充分练习,得到的却是缓慢、冗长的课程。我们知道该怎么办了。&/p&&p&你想学编程?你不用上课。你需要的是写好多代码,并且享受这个过程。&/p&&p&这才是编程的要义。编程必须要好玩。不是 &i&哇又一个奖章诶&/i& 那种“好玩”,而是&i&老妈,我得先把这关打完!&/i& 这就是为什么 CodeCombat 是个多人游戏,而不是一个游戏化的编程课。你不停,我们就不停——但这次这是件好事。&/p&&p&如果你一定要对游戏上瘾,那就对这个游戏上瘾,然后成为科技时代的法师吧。&/p&&p&再说,这游戏还是免费的。&/p&&/blockquote&补两张截图:&br&&figure&&img data-rawheight=&350& data-rawwidth=&750& src=&https://pic4.zhimg.com/50/a8b34da5dae17158fa04_b.jpg& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic4.zhimg.com/50/a8b34da5dae17158fa04_r.jpg&&&/figure&&figure&&img data-rawheight=&582& data-rawwidth=&1146& src=&https://pic2.zhimg.com/50/4f31e706f4f3a4683d83_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1146& data-original=&https://pic2.zhimg.com/50/4f31e706f4f3a4683d83_r.jpg&&&/figure&------------------------------------------------------------------------------------------&br&200赞惹 OwO,我再补一些简单的介绍吧。&br&首先打开主页,又上角选中文,然后就是下图这样「图片做了缩小处理」&br&&figure&&img data-rawheight=&441& data-rawwidth=&512& src=&https://pic1.zhimg.com/50/22a2ab464d453de6168b7a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&512& data-original=&https://pic1.zhimg.com/50/22a2ab464d453de6168b7a_r.jpg&&&/figure&初学者点那个战役模式吧,要是学过js可以点多人游戏试试……我还没点过。&br&&br&然后会进入一个自定义人物装扮的界面:&br&&figure&&img data-rawheight=&300& data-rawwidth=&512& src=&https://pic3.zhimg.com/50/0aca3bf0fd7d6_b.jpg& class=&origin_image zh-lightbox-thumb& width=&512& data-original=&https://pic3.zhimg.com/50/0aca3bf0fd7d6_r.jpg&&&/figure&&br&最后我把自己鼓捣成了这个样子:&br&&figure&&img data-rawheight=&515& data-rawwidth=&583& src=&https://pic4.zhimg.com/50/d34eef00dfa284abdce8_b.jpg& class=&origin_image zh-lightbox-thumb& width=&583& data-original=&https://pic4.zhimg.com/50/d34eef00dfa284abdce8_r.jpg&&&/figure&&br&Done以后是一段介绍性的话,我就不截图了,大家跟着教程吧。&br&直接来到游戏画面:&br&&figure&&img data-rawheight=&705& data-rawwidth=&1381& src=&https://pic2.zhimg.com/50/8f1aa0b62f6e092d9730bf_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1381& data-original=&https://pic2.zhimg.com/50/8f1aa0b62f6e092d9730bf_r.jpg&&&/figure&「请点开看大图吧,对了以下的解释只是为了给完全木有编程基础的朋友们简单介绍一下,可以跳过。」&br&左边这个是游戏窗口,下面有时间轴,人物对话。&br&你是那个踏着七彩祥云,额,那个蓝蓝的云的法师,右边是你的「咒语编辑器」。那个拿着大剑的武士会根据你的「咒语」来行动。&br&第一关也就是教程关,从图上可以看出来武士不应该走到这个位置,而是应该在:&br&══╩═&br&这个分叉点向上走,所以教程让我们删除第六行的 this.moveRight(),这句话大概看得懂英语单词就能懂吧。可以暂时理解为 this 就是那个红红的东西,「.」点号后面表示他的动作,moveRight就是向右移动一个单位。&br&嘛,改正之后我又打了几行,移动到了右下方那个怪的上面一格。&br&&figure&&img data-rawheight=&705& data-rawwidth=&1381& src=&https://pic2.zhimg.com/50/9ff898de3bb87d4ae6f4d7_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1381& data-original=&https://pic2.zhimg.com/50/9ff898de3bb87d4ae6f4d7_r.jpg&&&/figure&教学提示我们用attackNearbyEnemy() 攻击附近敌人。打进咒语编辑器,再点击一下发动咒语,可以看一段动画的哟~然后就过关啦~&br&&figure&&img data-rawheight=&451& data-rawwidth=&594& src=&https://pic4.zhimg.com/50/412c6fcd69d52a02ceca_b.jpg& class=&origin_image zh-lightbox-thumb& width=&594& data-original=&https://pic4.zhimg.com/50/412c6fcd69d52a02ceca_r.jpg&&&/figure&嘛,如果大家想接着玩下去的话建议注册个账户吧0.0&br&嗯嗯,后面会有更多的法术的,比如say可以和别人说话~等大家慢慢发发现咯。&br&&br&对了,「发动咒语」按钮右边的那个齿轮按钮是控制咒语自动执行的,建议改成手动的说,要不然写代码的时候自动执行还是比较烦的。&br&因为整个游戏是Flash,所以可能会感觉卡卡的……目前我也木有什么好办法。&br&&br&多人模式我木有尝试过,可能就是和主页上的那种风格吧,和Kindom Rush挺像的好像~大家自己玩玩看嘛~&br&------------------------------------------------------------------------------------------&br&&b&一起来学编程吧~!&/b&
多图预警,200赞之后补了几张图片~~手机党斟酌一下0.0 ------------------------------------------------------------------------------------------ 我默默的刷新着,看着赞同一点一点的上涨,现在竟然已经过百赞了!!真心谢谢大家!「鞠躬~」 嘛,…
&p&作者:&a href=&https://www.zhihu.com/people/fd7c571a0ada1a72e42e8d& class=&internal&&@萧井陌&/a&, &a href=&https://www.zhihu.com/people/d2facf05b31ad4& class=&internal&&@Badger&/a&&/p&&ul&&li&自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0&/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//cocode.cc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoCode&/a&:一个让大家学习、成长、相聚并获得乐趣的技术社区&/li&&li&答疑邮箱: xiao. (&a href=&https://www.zhihu.com/people/fd7c571a0ada1a72e42e8d& class=&internal&&@萧井陌&/a&&/li&&li&编程入门指南学习群:&a href=&http://link.zhihu.com/?target=https%3A//jq.qq.com/%3F_wv%3DD4AoJu1a& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&/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=&http://link.zhihu.com/?target=http%3A//cocode.cc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoCode&/a& 公开讨论。&/p&&br&&p&&b&心态调整&/b&&/p&&p&&b&确定目标&/b&&/p&&p&在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏? iOS 或者 Android 应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。&/p&&p&这段视频也许能给你启发:&a href=&http://link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XNTIzNzE2NzQ4.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&What Most Schools Don't Teach&/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=&http://link.zhihu.com/?target=http%3A//www.ccs.neu.edu/home/matthi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to Design Programs&/a& 一书中明确指出了这种「速成」的趋势并予以了以上的讽刺。&/p&&p&所谓的「捷径」或者说「&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/No_Silver_Bullet& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&银弹&/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=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Linus_Torvalds& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linus Torvalds&/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&&figure&&img data-rawheight=&326& src=&https://pic1.zhimg.com/c158c3a0fc25db6ce30774_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/c158c3a0fc25db6ce30774_r.jpg&&&/figure&&br&&p&这幅图取自 Douglas Hofstadter 的著作 &a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/G& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&G?del, Escher, Bach&/a&。图中的每一个字母都由其他更小的字母组成。在最高层级,我们看的是 &MU&,M 这个字母由三个 HOLISM (&a href=&http://link.zhihu.com/?target=http%3A//zh.wikipedia.org/wiki/%25E6%%25E5%%25E8%25A7%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&整全观&/a&)构成,U则是由一个 REDUCTIONISM (&a href=&http://link.zhihu.com/?target=http%3A//zh.wikipedia.org/wiki/%5BF%5E5%2525& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&还原论&/a&)构成,前者的每一个字母都包含后者的后者整个词,反之亦然。而在最低层级,你会发现最小的字母又是由重复的 &MU& 组成的。&/p&&p&每一层次的抽象都蕴含着信息,如果你只是幼稚地单一运用整体论在最高层级观察,或运用还原论观察最低层级,你所得到的只有 &MU& (在一些地区的方言中 mu 意味着什么都没有)。问题来了,怎样才能尽可能多的获取每个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?&/p&&p&教育与学习过程中普遍存在一个关键问题:初学者们的目标经常过于倾向&a href=&http://link.zhihu.com/?target=http%3A//zh.wikipedia.org/wiki/%25E6%%25E5%%25E8%25A7%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&整全观&/a&而忽略了基础,举个常见的例子,学生们非常想做一个机器人,却对背后的&/p&&p&理解物理模型 → 理解电子工程基础 → 理解伺服系统与传感器 → 让机器人动起来&/p&&p&这一过程完全提不起兴趣。&/p&&p&在这里对于初学者有两个大坑:&/p&&ol&&li&1 如果初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。&/li&&li&2 第二个坑没有第一个那么明显:幼稚的「整体论」方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来「补足基础」会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。&/li&&/ol&&p&但也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。&/p&&p&为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为「大厨」,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。但是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。&/p&&p&总之,编程是连接理论与实践的纽带,是&a href=&http://link.zhihu.com/?target=http%3A//zh.wikip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机科学&/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&&MIT 6.00.1x&/a& (&a href=&http://link.zhihu.com/?target=http%3A//www.xuetangx.com/courses/course-v1%3AMITx%2B6_00_1x%2Bsp/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工:计算机科学和 Python 编程导论&/a&)。虽然该课程的教学语言为 Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,Python 编程语言,一些简单的数据结构与算法,测试与调试。&/li&&li&o 完成 &a href=&http://link.zhihu.com/?target=https%3A//www.edx.org/course/introduction-computer-science-harvardx-cs50x& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Harvard CS50x&/a& (&a href=&http://link.zhihu.com/?target=http%3A//v.163.com/special/opencourse/cs50.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&哈佛大学:计算机科学&/a&)。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:阅读《&a href=&http://link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编码&/a&》&/li&&li&o 完成 &a href=&http://link.zhihu.com/?target=http%3A//www.liaoxuefeng.com/wiki/958fa6d3a2e542c000& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python 教程&/a&。&/li&&/ol&&br&&p&&b&入门&/b&&/p&&p&结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如 Web 开发, Android 开发,iOS 开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习&a href=&http://link.zhihu.com/?target=http%3A//zh.wikipedia.org/wiki/%25E8%25AE%25A1%25E7%25AE%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机科学&/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=&http://link.zhihu.com/?target=https%3A//github.com/sarabander/sicp-pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Structure and Interpretation of Computer Programs&/a& (SICP)《&a href=&http://link.zhihu.com/?target=https%3A//book.douban.com/subject/1148282/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机程序的构造和解释&/a&》,它为你指明了这三个变量的方向。在阅读 SICP 之前,你也许能通过调用几个函数解决一个简单问题。但阅读完 SICP 之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP 的教学语言为 Scheme,可以让你初步了解&a href=&http://link.zhihu.com/?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&&函数式编程&/a&。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。&/p&&p&&a href=&http://link.zhihu.com/?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&/a& 曾经写过一篇非常精彩的 SICP &a href=&http://link.zhihu.com/?target=http%3A//www.amazon.com/review/R403HR4VL71K8/ref%3Dcm_cr_rdp_perm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&书评&/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=&http://link.zhihu.com/?target=https%3A//www.udacity.com/course/cs212& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Udacity CS212 Design of Computer Program&/a&:由上文提到的Google 研究主管 Peter Norvig 主讲,教学语言为 Python,内容有一定难度。&/li&&li&o &a href=&http://link.zhihu.com/?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&/a&:HtDP 的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读 HtDP。&/li&&li&o &a href=&%22ht&&UC Berkeley SICP 授课视频&/a&以及 SICP 的两位作者给 Hewlett-Packard 公司员工培训时的录像(&a href=&http://link.zhihu.com/?target=https%3A//github.com/DeathKing/Learning-SICP/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&中文化项目&/a&)&/li&&li&o &a href=&http://link.zhihu.com/?target=http%3A//composingprograms.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Composing Programs&/a&:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)&/li&&li&o &a href=&http://link.zhihu.com/?target=http%3A//sicp.readthedocs.org/en/latest/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SICP 解题集&/a&:对于书后的习题,作为初学者应尽力并量力完成。&/li&&/ol&&p&完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,推荐你关注 &a href=&http://zhuanlan.zhihu.com/alchemelon& class=&internal&&炼瓜研究所 &/a&,或者从 &a href=&http://link.zhihu.com/?target=https%3A//github.com/karan/Projects/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mega Project List&/a& 中选取自己喜欢的项目。&/p&&p&如果你觉得 SICP 就是搞不定,也不要强迫自己,先跳过,继续走常规路线:开始读 &a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/1998341/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Elements of Computing Systems&/a& 吧,它会教会你从最基本的 Nand 门开始构建计算机,直到俄罗斯方块在你的计算机上顺利运行。 &a href=&http://link.zhihu.com/?target=http%3A//www.nand2tetris.org/course.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&具体内容&/a&不多说了,这本书会贯穿你的整个编程入门阶段,你入门阶段的目标就是坚持完成这本书的所有项目(包括一个&b&最简的&/b&编译器与操作系统)。&/p&&p&&b&为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要做足功课(注意:下面的内容没有绝对意义上的先后顺序):&/b&&/p&&br&&p&&b&计算机系统基础&/b&&/p&&p&有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:&a href=&http://link.zhihu.com/?target=http%3A//csapp.cs.cmu.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Systems: A Programmer's Perspective, 3/E&/a&《&a href=&%22http:&&深入理解计算机系统&/a&》。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是 &a href=&http://link.zhihu.com/?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&/a& 的「&a href=&http://link.zhihu.com/?target=https%3A//www.cs.cmu.edu/%7E213/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机系统导论&/a&」的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以「程序在计算机中如何执行」为主线,全面阐述计算机系统内部实现的诸多细节。&/p&&p&如果你看书觉得有些枯燥的话,可以跟一门 Coursera 上的 MOOC: &a href=&http://link.zhihu.com/?target=https%3A//www.coursera.org/course/hwswinterface& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Hardware/Software Interface&/a&,这门课的内容是 CSAPP 的一个子集,但是最经典的&a href=&http://link.zhihu.com/?target=http%3A//csapp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实验部分&/a&都移植过来了。同时,可以看看 &a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/1139336/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The C Programming Language&/a&,回顾一下C语言的知识。&/p&&p&完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络-&内存-&缓存-&CPU 的流向。&/p&&br&&p&&b&数据结构与算法基础&/b&&/p&&p&如今,很多人认为编程(特别是做 web 开发)的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的「码农」思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。&/p&&p&数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/List_of_data_structures& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构&/a&和&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/List_of_algorithms& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&算法&/a&,你要去搜它主要拿来干嘛的,使用场景是什么。&/p&&p&供你参考的学习资源:&/p&&ol&&li&o 《&a href=&http://link.zhihu.com/?target=http%3A//book.do& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&算法导论&/a&》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《&a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/1139426/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构与算法分析&/a&》&/li&&li&o Algorithms: Design and Analysis [&a href=&http://link.zhihu.com/?target=https%3A//www.coursera.org/course/algo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Part 1&/a&] & [&a href=&http://link.zhihu.com/?target=https%3A//www.coursera.org/course/algo2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Part 2&/a&]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;如果英文不过关:&a href=&http://link.zhihu.com/?target=http%3A//v.163.com/special/opencourse/algorithms.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工学院:算法导论&/a&&/li&&li&o 入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分可以读读这几本书:《&a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/3227098/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程珠玑&/a&》,《&a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/1173548/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序设计实践 &/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://&&The Pragmatic Programmer&/a&&/p&&p&此外还要知道,学习第 n 门编程语言的难度是第 (n-1) 门的一半,所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:「干净」的脚本语言 Python, 传统的命令式语言 C, 以及&a href=&http://link.zhihu.com/?target=http%3A//matt.might.net/articles/i-love-you-in-racket/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&浪漫&/a&的函数式语言 Scheme 三个好朋友。但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 &a href=&http://link.zhihu.com/?target=http%3A//mislav.uniqpath.com/poignant-guide/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ruby&/a& 小姑娘,Hindley-Milner 语言家族的掌中宝 &a href=&http://link.zhihu.com/?target=http%3A//learnyouahaskell.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Haskell&/a& 都是不错的选择。至于 &a href=&%22http:/&&C++ &/a&,喜欢的话学学也无妨。&/p&&p&现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。&/p&&p&供你参考的学习资源:&/p&&ol&&li&o &a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/2152385/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《程序设计语言-实践之路》&/a&:CMU 编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。&/li&&li&o &a href=&http://link.zhihu.com/?target=https%3A//www.coursera.org/course/proglang& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming Languages&/a&:课堂上你能接触到极端 FP (函数式)的 SML,中性偏 FP 的 Racket,以及极端 OOP (&a href=&http://link.zhihu.com/?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&&面向对象&/a&)的 Ruby,并学会问题的 FP 分解 vs OOP 分解、ML 的模式匹配、Lisp 宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。&/li&&li&o &a href=&http://link.zhihu.com/?target=https%3A//www.udacity.com/course/cs262& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Udacity CS262 Programming Language&/a&:热热身,教你写一个简单的浏览器——其实就是一个 JavaScript 和 HTML 的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个 &a href=&http://link.zhihu.com/?target=http%3A//inst.eecs.berkeley.edu/%7Ecs61a/fa13/proj/scheme/scheme.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scheme Interpreter&/a&&/li&&/ol&&p&&b&其他&/b&&/p&&p&编程入门阶段比较容易忽视的几点:&/p&&ol&&li&1 学会提问:学习中肯定会遇到问题,应该学会正确的使用搜索引擎。当单靠检索无法解决问题时,去 &a href=&http://link.zhihu.com/?target=http%3A//stackoverflow.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stack Overflow&/a& 或知乎提问,提问前读读这篇文章:&a href=&http://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3NDI5ODQ2Ng%3D%3D%26mid%3D%26idx%3D1%26sn%3D201ccfdfb5d855& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&能有效解决问题的提问方法&/a&。&/li&&li&2 不要做一匹独狼:尝试在 &a href=&http://link.zhihu.com/?target=http%3A//cocode.cc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoCode&/a& 与他人交流想法。尝试搭建一个像&a href=&%22h&&这样&/a&简单的个人网站。试着在博客上记录自己的想法。订阅自己喜欢的编程类博客,推荐几个供你参考:&a href=&http://link.zhihu.com/?target=http%3A//www.joelonsoftware.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Joel on Software&/a&, &a href=&http://link.zhihu.com/?target=http%3A//www.norvig.com/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Peter Norvig&/a&, &a href=&http://link.zhihu.com/?target=http%3A//blog.codinghorror.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coding Horror&/a&&/li&&li&3 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。&/li&&/ol&&p&&b&小结&/b&&/p&&p&以上的内容你不应该感到惧怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试&a href=&http://link.zhihu.com/?target=http%3A//www.quora.com/Education/How-can-you-learn-faster/answer/Acaz-Pereira& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&「费曼」技巧&/a&:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗。&/p&&p&此外不要局限于上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。这里不得不提到在 &a href=&http://link.zhihu.com/?target=http%3A//stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stack Overflow&/a& 上票选得出的程序员必读书单中,排在前两位的两本书:&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/Fi%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Code Complete&/a&:不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补自己的知识缺陷。对于入门阶段的新手们,可以重点看看涉及变量名,测试,个人性格的章节。&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//book.douban.com/subject/1417047/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Pragmatic Programmer&/a& :有人称这本书为代码小全:从 &a href=&http://link.zhihu.com/?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&/a& 到 &a href=&http://link.zhihu.com/?target=http%3A//zh.wikipedia.org/wiki/KISS%25E5%258E%259F%25E5%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KISS&/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=&http://link.zhihu.com/?target=https%3A//pragprog.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Pragmatic Bookshelf&/a& 一直以来都积极地影响着我,因此这篇指南我也尽量贯彻了这个思想,引导并希望你们成为一名真正的 Pragmatic Programmer 。&/p&&br&&p&&b&后记&/b&&/p&&p&如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程入门。这意味着你在之后更深入的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些「复杂」的 API,更不会畏惧学习具体的技术,甚至感觉很容易。当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,获得极大的自信,看老师同学和 &a href=&http://link.zhihu.com/?target=http%3A//www.csdn.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSDN&/a& 的眼光会变得非常微妙,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。&/p&&figure&&img data-rawheight=&337& src=&https://pic1.zhimg.com/5d6f72ac17ad317be649f8_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/5d6f72ac17ad317be649f8_r.jpg&&&/figure&&br&&p&欢迎实践过的同学现身说法。几位读者的实例:&/p&&ol&&li&o &a href=&http://link.zhihu.com/?target=http%3A//zhi.hu/hhiA& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&非计算机专业,计算机如何入门? - 浪无痕&/a&&/li&&li&o &a href=&http://link.zhihu.com/?target=http%3A//my.oschina.net/voler/blog/396424& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&我只想成为一名合格的程序员&/a&&/li&&li&o &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/a910626/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&知乎《编程入门指南v1.3》思维导图&/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=&http://www.zhihu.com/question//answer& class=&internal&&怎么成为一个优秀的程序员,而不是一个优秀的码农?&/a&&/li&&/ol&&p&优秀的程序员会告诉你打根基的重要性,会劝你在厚积薄发前要隐忍。&/p&&p&优秀的程序员应该善用包装...&/p&&ol&&li&o &a href=&http://www.zhihu.com/question//answer/& class=&internal&&计算机本科应届毕业生要有怎样的能力才算比较好的?&/a&&/li&&/ol&&p&对本科生的要求其实很简单,认真学过专业课就行。&/p&&p&所谓认真学过专业课的程度是:...&/p&&ol&&li&o &a href=&http://www.zhihu.com/& class=&internal&&想进入微软,本科该如何努力?&/a&&/li&&/ol&&p&你可以找一个美国大学学他们的计算机课程,课程设置和教材都能查到,书都能买到。那几所学校的本科课程安排差异比较大,全学也不是不可以。做好这几点: ...&/p&&ol&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&大四学生,想通过两到三年的积累去Google工作,请问应如何准备?&/a&&/li&&/ol&&p&我觉得你得先找到一个技术方向,树立一个以此技术方向为首要目标的原则,做好这个方面的事情,对这个方面的所有技术细节都务求深入了解。然后呢...&/p&&ol&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&文科生如何转行当程序员?考研是最好选择吗?&/a&&/li&&/ol&&p&0. 找一本《计算机导论》类的书籍看看,了解一下行业大致情况,随便翻翻就好&/p&&p&1. 去维基百科翻一下历年图灵奖得奖情况,粗略了解一下行业历史...&/p&&ol&&li&o &a href=&http://www.zhihu.com/question//a& class=&internal&&有哪些适合程序员读的人文书籍?&/a&&/li&&/ol&&p&程序员也是人, 程序员的整体素质在其他行业也是通用的.&/p&&p&so.... 这就产生了很多其他行业的书...&/p&&p&方法:&/p&&ol&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&如何学习不感兴趣但自己也认为很重要的东西?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&兴趣广泛和保持专注是否矛盾?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&在学习编程的过程中如何权衡寻求方法工具和埋头苦干?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&新手关于如何看编程经典书的一些疑惑?&/a&&/li&&li&o &a href=&http://link.zhihu.com/?target=http%3A//zhi.hu/aaOB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机方面的经典书籍,不做或少做习题会对学习效果造成多大影响呢?&/a&&/li&&li&o 有哪些老鸟程序员知道而新手不知道的小技巧?&/li&&li&o &a href=&https://www.zhihu.com/question//answer/& class=&internal&&改bug是程序员的任务里比较低贱的工作内容吗?&/a&&/li&&li&o &a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何辨别一个程序员水平的高低?&/a&&/li&&/ol&&br&&p&细分:&/p&&ul&&ul&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&如何去学习程序员的三大浪漫,编译原理,图形学,操作系统?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&数据库、操作系统、编译原理应该以怎样的的顺序学习?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&如何在六个月的时间内完成一个简单的操作系统,应该要学些什么?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&计算机系大四学生如何在六个月的时间内完成一个编译器?要学些什么?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&算法到底应该怎么学?&/a&&/li&&li&o &a href=&http://zhihu.com/question& class=&internal&&WEB 开发还有前途吗?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&嵌入式开发还有前途吗?&/a&&/li&&li&o &a href=&http://zhihu.com/question//answer/& class=&internal&&已参加工作的程序员如何系统提升英语阅读能力?&/a&&/li&&/ul&&/ul&&br&&p&&b&@&/b&&b&萧井陌的知乎回答集锦&/b&(按赞同数排列) ( 更新)&/p&&ol&&li&o &a href=&%22&&PDF 格式&/a&&/li&&li&o &a href=&http://link.zhihu.com/?target=http%3A//pan.baidu.com/s/1qWqNzPi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ePub 格式&/a&&/li&&/ol&&figure&&img data-rawheight=&445& src=&https://pic1.zhimg.com/3d9d7ba432eabc38cd140_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/3d9d7ba432eabc38cd140_r.jpg&&&/figure&&br&&p&---&/p&&br&&p&...&/p&
作者:, 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0:一个让大家学习、成长、相聚并获得乐趣的技术社区答疑邮箱: xiao. (编程入门指南学习群:--- 日 v1.5 更新2…
&b&我看以上各位答主的思路等等已经回答的很好了,所以我想在这里给大家推荐这些教程资源。&/b&&b&如果你想学习编程,但是找不到学习路径和资源,欢迎关注专栏:&a class=&internal& href=&https://zhuanlan.zhihu.com/passer&&学习编程&/a&&b&(此帖长期更新:最近一次更新:)&/b&&/b&&br&&blockquote&&b&(被收藏了6731次赞了2081次,点赞的汉子找到女朋友,妹子瘦10斤)&/b&&/blockquote&&br&&b&以下所有教程目录&/b&&ul&&li& java教程整理&/li&&li& c语言教程整理&/li&&li&html5教程整理&/li&&li&python教程整理 &/li&&li&前端开发教程整理&/li&&li&git教程整理 &/li&&li&linux教程整理&/li&&li&零基础开发游戏教程整理 &/li&&li&php教程整理 &br&&/li&&li&Javascript教程整理&/li&&li&ios、android教程整理&/li&&li&mysql教程整理 &/li&&li&正则表达式教程整理&/li&&li&大数据&/li&&li&其它内容&br&&/li&&/ul&&p&&b&Java教程: &/b&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&如何一步一步的学Java - 学习编程 - 知乎专栏&/a&&br&&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&java初学者,如何学习java? - 路人甲的回答&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&Java工程师面试题整理[社招篇] - 学习编程 - 知乎专栏&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Java工程师笔试题整理[校招篇] - 学习编程 - 知乎专栏&/a&&/p&&p&&b&C语言教程&/b&:&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&自学c语言,有什么好的建议或方法吗? - 路人甲的回答&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&C、C++语言学习资料 - 学习编程 - 知乎专栏&/a&&br&&/p&&br&&p&&b&html5教程:&/b&&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&想自学html5,应该从那些方面入手,望指教。? - 路人甲的回答&/a&&/p&&p&&b&python教程:&/b&&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&怎么用最短时间高效而踏实地学习 Python? - 路人甲的回答&/a&&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&编程零基础应当如何开始学习 Python ? - 路人甲的回答&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/?from=profile_answer_card& class=&internal&&网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&如何学习Python爬虫[入门篇] - 学习编程 - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&Python常用库整理 - 学习编程 - 知乎专栏&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&学好Python的11个优秀资源 - 学习编程 - 知乎专栏&/a&&br&&/p&&p&&b&前端开发教程&/b&:&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&本科生如何系统地学习前端开发? - 路人甲的回答&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&如何成为前端工程师? - 学习编程 - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&Front End Developer Questions(前端开发面试题) - 学习编程 - 知乎专栏&/a&&/p&&p&&b&git教程 &/b&:&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&git - 入门指南 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&linux教程: &/b&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/?refer=passer& class=&internal&&vim/vi命令整理 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&零基础开发游戏教程:&/b&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/?refer=passer& class=&internal&&零基础如何开发游戏 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&php教程整理 &/b&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/?refer=passer& class=&internal&&让php给你一个美好的晚安! - 学习编程 - 知乎专栏&/a&&/p&&p&&b&Javascript教程&/b&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&Javascript常伴你左右 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&ios、android教程&/b&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/?refer=passer& class=&internal&&如何开发一款APP - 学习编程 - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&文科生13年毕业,已工作2年,想转行做IT,自学安卓靠谱吗?还是选择培训? - 路人甲的回答&/a&&/p&&p&&a class=&internal& href=&https://www.zhihu.com/question//answer/&&新手从零开始学Android开发要点? - 路人甲的回答&/a&&/p&&p&&b&mysql教程&/b&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&从Mysql迈入数据库 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&正则表达式教程&/b&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&正则表达式 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&大数据相关&/b&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&大数据可视化工具推荐 - 学习编程 - 知乎专栏&/a&&/p&&p&&b&其它内容 &/b&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&编程话题实用问答整理 - 学习编程 - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/个常用的代码文本编辑器/IDE - 学习编程 - 知乎专栏&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&代码编辑器的配色方案 - 学习编程 - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&代码编辑器的插件推荐 - 学习编程 - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&更舒服的写代码[字体篇] - 学习编程 - 知乎专栏&/a&&/p&&br&&p&学习编程专栏同步订阅号现已上线,以后所有教程文章以及教程资源都会首发于订阅号 &br&&/p&&p&学习编程订阅号(一个程序员的日常)(或者扫描以下二维码):&b&smcode2016&/b&&/p&&br&&p&&a href=&//link.zhihu.com/?target=http%3A//weixin.qq.com/r/aDuKklbE6guVrRLx9256& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/aDuKklb&/span&&span class=&invisible&&E6guVrRLx9256&/span&&span class=&ellipsis&&&/span&&/a& (二维码自动识别)&/p&
我看以上各位答主的思路等等已经回答的很好了,所以我想在这里给大家推荐这些教程资源。如果你想学习编程,但是找不到学习路径和资源,欢迎关注专栏:(此帖长期更新:最近一次更新:) (被收藏了6731次赞了2081次,点赞的汉子找到女朋…
&p&十年前,我大二创业期间自学过编程。&/p&&p&如果你想学编程的话,这12个网站可以帮助你,它们都提供了免费的课程供你学习,因此你无需担心费用的问题。&/p&&p&1.&a href=&//link.zhihu.com/?target=http%3A//www.codecademy.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codecademy&/a&&/p&&p&其中,Codecademy是最受欢迎的免费编程学习网站之一。事实上,已经有超过2400万人通过这家公司的教育模式学会了编程。Codecademy开设的课程有HTML&CSS,JavaScript,jQuery的,PHP,Python和Ruby。&/p&&p&2.&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/courses%3Fquery%3Dprogramming& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coursera&/a&&/p&&p&Coursera成立于2012年,如今已经成长为一个主要以营利为目的的技术教育公司,现提供来自119家机构的超过1000门课程。如果你想要获得证书,可能需要为一定的课程付费,这里也有一些来自不同大学的免费编程课程,如华盛顿大学,斯坦福大学,多伦多大学和范德比尔特大学等。&/p&&p&3.&a href=&//link.zhihu.com/?target=https%3A//www.edx.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&edX&/a&&/p&&p&edX是另一个领先的在线学习平台,重点是它不是以营利为目的,而是开源的。edX是由美国哈佛大学和麻省理工学院于2012年联合创办的,所以你将会在这里学习到先进的技术和理论。如今,edX已涵盖了60所学校。此外在这里,你应该不会错过哈佛大学的计算机科学导论的,免费的哦。&/p&&p&4.&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Udemy&/a&&/p&&p&Udemy成立于2010年,是一个在线学习平台,可以帮助你改善或学习工作技能。虽然有部分课程需要付费,但也有大量的免费编程学习课程,通过视频讲授。&/p&&p&5.&a href=&//link.zhihu.com/?target=http%3A//blog.agupieware.com/2014/05/online-learning-bachelors-level.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&aGupieWare&/a&&/p&&p&一个独立APP开发者从美国的一些领先机构调查了计算机科学程序,然后基于斯坦福大学,麻省理工学院,卡耐基梅隆大学伯克利分校和哥伦比亚大学提供的免费课程,它创建了一个类似的课程。该程序分为15个课程:3个入门课程,7门核心课程和5个选修课程。&/p&&p&对有潜力的程序员来说,这简直是一个完美的入门程序。(本段感觉译的不是很好,有其他见解还请赐教~)&/p&&p&6.&a href=&//link.zhihu.com/?target=https%3A//github.com/vhf/free-programming-books/blob/master/free-programming-books.md%23professional-development& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub&/a&&/p&&p&这个我想大多数开发者都知道就不多说了,作为开源代码库以及版本控制系统,Github拥有140多万开发者用户。&/p&&p&7.MIT Open Courseware&/p&&p&如果你已经学过基础知识,并向更深入的层次探索,比如探究背后的编码理论等,麻省理工学院提供了包括如计算机科学导论,Java编程介绍和C语言编程等免费课件的网站,值得好好利用一下。&/p&&p&8.Hack.pledge()&/p&&p&这是一个开发者社区,其中聚集了一些知名度比较高的开发者,如Bram Cohen,BitTorrent的创始人。在那里,你可以从一些大牛那里学习到一些编程技巧。&/p&&p&9.&a href=&//link.zhihu.com/?target=https%3A//www.codeavengers.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Code Avengers&/a&&/p&&p&Code Avengers提供了很多有趣的和互动性的程序设计课程,教你如何编写游戏,应用程序,以及如何使用JavaScript,HTML和CSS创建网站。每门课程只需要12个小时即可完成,并且支持英语,俄语,荷兰语,西班牙语,意大利语,土耳其语和葡萄牙语。&/p&&p&10.&a href=&//link.zhihu.com/?target=https%3A//www.khanacademy.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Khan Academy&/a&&/p&&p&Khan Academy由教育家萨尔曼汗创建于2006年,是其免费在线学习机构之一。这里提供一步一步的视频教程,你可以在这里学习如何使用JavaScript和ProcessingJS编写动画,游戏等,或者学习如何使用HTML和CSS创建网页。&/p&&p&11.Free Code Camp&/p&&p&在这里,你可以学习HTML5,CSS3,JavaScript,数据库,DevTools,Node.js,Angular.js和Agile的知识。你甚至免费创建自己的应用,以锻炼自己的编程技巧。总之,在这里你可以学习到真正的技能,并且对你解决实际中的问题十分有帮助。&/p&&p&12.HTML5 Rocks&/p&&p&为对抗苹果的HTML 5,谷歌于2010年推出该项目。该网站提供了大量的教程,资源以及最新的HTML5更新。它是开源的,因此开发人员可以尽情使用HTML5代码。由于这比大多数课程都要先进,因此在这里你肯定会比没来之前获得更多的知识和经验。&/p&&p&学习编程常常需要看一些比较昂贵的书籍和课程,但是现在由于互联网的发展,市场上有很多可以免费学习编程的网站,所以费用问题就不用太担心了。&/p&&p&——————————————————————————————————————&/p&&p&看到大家对这个问题这么感兴趣,我再整理几个自学的网站给你们吧。&/p&&p&&b&1、麦子学}

我要回帖

更多关于 小明和他们的小伙伴们 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信