求些MASTERCANvb编程求平均数 的零件

当前位置:
文件名称:masscan-master
所属分类:
标签属性:
上传时间:
文件大小:
浏览/下载:
233次 / 0次
提 供 者:
相关连接:
下载说明:
别用迅雷下载,失败请重下,重下不扣分!
全网扫描工具!nenggou shixian 6 fenzhong quanwang saomiao-A tool to scan the whole internet
(系统自动生成,下载前可以参看下载内容)下载文件列表
masscan-master/
masscan-master/.travis.yml
masscan-master/LICENSE
masscan-master/Makefile
masscan-master/README.md
masscan-master/VULNINFO.md
masscan-master/bin/
masscan-master/bin/.gitignore
masscan-master/data/
masscan-master/data/exclude.conf
masscan-master/debian/
masscan-master/debian/.gitignore
masscan-master/debian/README.Debian
masscan-master/debian/changelog
masscan-master/debian/compat
masscan-master/debian/control
masscan-master/debian/copyright
masscan-master/debian/masscan.dirs
masscan-master/debian/masscan.docs
masscan-master/debian/masscan.install
masscan-master/debian/masscan.manpages
masscan-master/debian/rules
masscan-master/debian/source/
masscan-master/debian/source/format
masscan-master/debian/watch
masscan-master/doc/
masscan-master/doc/algorithm.js
masscan-master/doc/bot.hml
masscan-master/doc/masscan.8
masscan-master/doc/masscan.8.markdown
masscan-master/src/
masscan-master/src/crypto-base64.c
masscan-master/src/crypto-base64.h
masscan-master/src/crypto-blackrock2.c
masscan-master/src/event-timeout.c
masscan-master/src/event-timeout.h
masscan-master/src/in-binary.c
masscan-master/src/in-binary.h
masscan-master/src/logger.c
masscan-master/src/logger.h
masscan-master/src/main-conf.c
masscan-master/src/main-dedup.c
masscan-master/src/main-dedup.h
masscan-master/src/main-globals.h
masscan-master/src/main-initadapter.c
masscan-master/src/main-listscan.c
masscan-master/src/main-ptrace.c
masscan-master/src/main-ptrace.h
masscan-master/src/main-readrange.c
masscan-master/src/main-readrange.h
masscan-master/src/main-src.c
masscan-master/src/main-src.h
masscan-master/src/main-status.c
masscan-master/src/main-status.h
masscan-master/src/main-throttle.c
masscan-master/src/main-throttle.h
masscan-master/src/main.c
masscan-master/src/masscan-app.c
masscan-master/src/masscan-app.h
masscan-master/src/masscan-status.h
masscan-master/src/masscan-version.h
masscan-master/src/masscan.h
masscan-master/src/out-binary.c
masscan-master/src/out-certs.c
masscan-master/src/out-grepable.c
masscan-master/src/out-json.c
masscan-master/src/out-null.c
masscan-master/src/out-record.h
masscan-master/src/out-redis.c
masscan-master/src/out-text.c
masscan-master/src/out-unicornscan.c
masscan-master/src/out-xml.c
masscan-master/src/output.c
masscan-master/src/output.h
masscan-master/src/packet-queue.h
masscan-master/src/pixie-backtrace.c
masscan-master/src/pixie-backtrace.h
masscan-master/src/pixie-file.c
masscan-master/src/pixie-file.h
masscan-master/src/pixie-sockets.h
masscan-master/src/pixie-threads.c
masscan-master/src/pixie-threads.h
masscan-master/src/pixie-timer.c
masscan-master/src/pixie-timer.h
masscan-master/src/proto-arp.c
masscan-master/src/proto-arp.h
masscan-master/src/proto-banner1.c
masscan-master/src/proto-banner1.h
masscan-master/src/proto-banout.c
masscan-master/src/proto-banout.h
masscan-master/src/proto-dns-parse.h
masscan-master/src/proto-dns.c
masscan-master/src/proto-dns.h
masscan-master/src/proto-ftp.c
masscan-master/src/proto-ftp.h
masscan-master/src/proto-http.c
masscan-master/src/proto-http.h
masscan-master/src/proto-icmp.c
masscan-master/src/proto-icmp.h
masscan-master/src/proto-imap4.c
masscan-master/src/proto-imap4.h
masscan-master/src/proto-interactive.c
masscan-master/src/proto-interactive.h
masscan-master/src/proto-netbios.c
masscan-master/src/proto-netbios.h
masscan-master/src/proto-ntp.c
masscan-master/src/proto-ntp.h
masscan-master/src/proto-pop3.c
masscan-master/src/proto-pop3.h
masscan-master/src/proto-preprocess.c
masscan-master/src/proto-preprocess.h
masscan-master/src/proto-sctp.c
masscan-master/src/proto-sctp.h
masscan-master/src/proto-smtp.c
masscan-master/src/proto-smtp.h
masscan-master/src/proto-snmp.c
masscan-master/src/proto-snmp.h
masscan-master/src/proto-ssh.c
masscan-master/src/proto-ssh.h
masscan-master/src/proto-ssl-test.c
masscan-master/src/proto-ssl.c
masscan-master/src/proto-ssl.h
masscan-master/src/proto-tcp-telnet.c
masscan-master/src/proto-tcp-telnet.h
masscan-master/src/proto-tcp.c
masscan-master/src/proto-tcp.h
masscan-master/src/proto-udp.c
masscan-master/src/proto-udp.h
masscan-master/src/proto-vnc.c
masscan-master/src/proto-vnc.h
masscan-master/src/proto-x509.c
masscan-master/src/proto-x509.h
masscan-master/src/proto-zeroaccess.c
masscan-master/src/proto-zeroaccess.h
masscan-master/src/rand-blackrock.c
masscan-master/src/rand-blackrock.h
masscan-master/src/rand-lcg.c
masscan-master/src/rand-lcg.h
masscan-master/src/rand-primegen.c
masscan-master/src/rand-primegen.h
masscan-master/src/ranges.c
masscan-master/src/ranges.h
masscan-master/src/rawsock-adapter.h
masscan-master/src/rawsock-arp.c
masscan-master/src/rawsock-getif.c
masscan-master/src/rawsock-getip.c
masscan-master/src/rawsock-getmac.c
masscan-master/src/rawsock-getroute.c
masscan-master/src/rawsock-pcapfile.c
masscan-master/src/rawsock-pcapfile.h
masscan-master/src/rawsock-pfring.c
masscan-master/src/rawsock-pfring.h
masscan-master/src/rawsock.c
masscan-master/src/rawsock.h
masscan-master/src/rte-ring.c
masscan-master/src/rte-ring.h
masscan-master/src/script-ntp-monlist.c
masscan-master/src/script.c
masscan-master/sr
暂无评论内容.
*快速评论:
和说明不符
不是源码或资料
纯粹是垃圾
*内  容:
*验 证 码:
搜珍网是交换下载平台,下载的内容请自行研究使用或咨询上传人.
资源属性分别代表:系统平台,开发平台,开发语言,文件格式四部分.
本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用进行解压.
如果您发现此软件无法下载,请稍后再次尝试;或者.
本站提供下载的内容为网上收集或会员上传提供,若无意中侵犯了您的版权,.
如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
如下载后发现下载的内容跟说明不相乎,可以联系本站的客服,经确认可以退回消费了的积分.
联系我们网站
·电话:(0)
搜珍网 www.dssz.com
All Rights Reserved.基于Mastercam的零件车削编程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Mastercam的零件车削编程
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩21页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢mastercanm怎么让圆弧刀具路径编程直线刀具路径_百度知道
mastercanm怎么让圆弧刀具路径编程直线刀具路径
我有更好的答案
master编程分为2维加工和3维加工,2维保护铣面,挖槽,外形和钻孔方法; 3维铣分粗加工(3中加工方法)和精加工(10种加工方法),具体操作步骤: 1,绘制出要加工的图形 2,设定加工的毛坯大小 3,选择加工指令(上面提到的方法)
采纳率:89%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。小学的时候,大家都报课外兴趣班,我不想学什么写作,书法,就给爸妈说,学手风琴吧。&br&&br&我爸花了几个月的薪水,买了个看起来相当专业的琴来,又大又重,我都背不动。其他的同学的琴就小巧的多,看起来也便宜不少。&br&&br&学了一两年,在刚能抱着琴站起来的时候,我放弃了,不学了,不喜欢。我爸把琴卖了。&br&&br&从此之后,我就发现一个个人规律。&br&&br&当我真的想做一个事的时候,有没有器材,我都不会停,都能想到办法,找到资源做成这个事。每当我开始追求器材,纠结细节,酝酿太长时间感情的时候,事情往往做不成,会半途而废。&br&&br&回来说编程。学编程,似乎必须买电脑。但真的是这样吗?&br&&br&也不尽然。&br&&br&很多程序员,在学编程的时候,并没有自己的电脑。老师教,书上学,纸上写,写好了检查。差不多了,再去校机房调试。照样可以成为很好的程序员。&br&&br&你不是没电脑,只是没有自己的电脑罢了。这样也好,逼你把有限的上机时间,用到编程上。我那时有自己的电脑,还是天天打游戏,看看周围,又有几个寝室的电脑在跑C++?&br&&br&为什么培训机构出来的程序员,表现往往不如人意?因为他们缺了太多的基础课,数据结构,软件工程,操作系统都不学,只学语言,和一两个流行的框架。他们学的不是编程,只是编码。而编码,只是设计实现中的最后一步。缺乏基础的编码者,在应对工作中复杂多变的问题时,往往会显得后劲不足,头脑混乱,而且难以点明教会。&br&&br&这些重要的基础课,对上机时间的要求不多,更多是思考和理解,没有理由不学好。&br&&br&专业程序员学习,也是看书为主,不是电脑开着才能学。刚入门的时候,线下十小时的认真学习,上机一小时的调试,照样能学好。不要因为一小时的不方便,而放弃十小时的学习。&br&&br&没电脑,就要更努力。
小学的时候,大家都报课外兴趣班,我不想学什么写作,书法,就给爸妈说,学手风琴吧。 我爸花了几个月的薪水,买了个看起来相当专业的琴来,又大又重,我都背不动。其他的同学的琴就小巧的多,看起来也便宜不少。 学了一两年,在刚能抱着琴站起来的时候,我…
&figure&&img src=&https://pic4.zhimg.com/v2-b823bbdec3c826bf40b4feb944b1e3f1_b.jpg& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-b823bbdec3c826bf40b4feb944b1e3f1_r.jpg&&&/figure&&p&&i&【首发表于本人微信公众号:赛门喵Simon(ID: NowEnglish)】&/i&&br&&/p&&p&&i&虽然这是一篇和英语学习没有一毛钱关系的文章,不过,因为我没有别的专栏,所以就还是放在这里吧……&/i&&/p&&p&&i&---&/i&&/p&在知乎上常常看到想要转行IT,或者是想学习编程但不知如何开始的朋友。回答这类问题的人往往只是列出书单资源然后给出一个大致的方向。有些朋友一开始就扎入了理论学习的汪洋大海,从苦读类似《算法导论》开始,能够坚持读下来的寥寥无几,学习的积极性也被不断的挫败感消磨的所剩无几。&p&一直以来,编程对我而言是一种「黑魔法」般的存在。今年阿里月饼门,当很多人都参与到是非之争的时候,我更加着迷于程序员区区几行代码的脚本所展现出的威力,对于外行而言,这是超乎他们想象之外的某种能力——为什么我守在电脑面前盯着秒针然后拼命点击鼠标都不一定能抢到的礼物,程序员只需要提前花5分钟写3行代码就轻松搞定?&/p&&p&所以,我的心底深处一直都想变成这样的一位魔法师。今年的8月,刚好工作上想要开发一个基于微信的英语学习网站,借此机会,我决定好好学习一下编程。在此之前,我所有关于程序的知识仅仅来源于两部分,一是本科时期的C语言必修课,现在已经忘的一干二净,不过好歹我从中明白编程是怎么回事;第二部分是大概两年前由于工作关系学的一些Python,不过只是皮毛,现在忘的七七八八。&/p&&p&简单说,我的目标是建立一个网站,不过这个网站是动态的,也就是说它能识别谁登陆,然后对不同的人显示不同的内容。而当时的现实是,我完全不明白网页是如何显示出来的?譬如每个人登陆知乎的时候看到的是定制化的页面,后台是如何基于每个ID来组织出不同的页面的?所有我们看到的问题,回答,参与的评论在背后的服务器上是以一种什么样的形式存在的?又比如为什么有些页面只能在微信端打开,在电脑上就会出错?(不知道你有没有发现这一点)&/p&&p&当时我的心中充满了无数个类似的问号?当然如果你也是小白,一定有着同样的疑问。&/p&&p&&b&好处是一开始就明确了学习的目的:Web建站。所以我的学习方案基本就是通过做项目学习,哪里不懂就解决哪里,边做边学习,不断推进。&/b&另外,由于知道很多成功的网站在用Python做服务器开发,比如知乎,所以我就自然选择了Python。&br&&/p&&p&于是我就开始了我充满着挫败感和成就感的编程之路……&/p&&p&从8月到12月的四个月里,除去本来的工作,为了学习质量,我会保证&b&平均每天4个小时&/b&的学习时间,周末也不例外。另外,所有的文档,问答都尽量看英文的,这可以帮你剩下大量的时间。12月13日,我做的网站上线了,3天时间大概有5000人访问了这个网站,我有时在后台看着日志,不免有些心潮喷涌,我想把自己的经验写下来,希望对于那些有心学习编程但无从下手的朋友提供一些帮助和鼓励。&br&&/p&&br&&h2&1. 我的自学编程之路&/h2&&p&1)基础&br&&/p&&p&刚开始的时候,我对搭建网站一无所知。为了给自己迅速建立一个框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服务器脚本等等知识,不求精通,只是了解每一项技术是干嘛的,另一方面建立起了一个学习的roadmap,这样大概知道做一个Web App需要哪些知识,分别学习的主次顺序。重点推荐两个资源:&/p&&p&Python基础知识:&a href=&https://link.zhihu.com/?target=https%3A//learnpythonthehardway.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn Python the Hard Way&/a&&/p&&p&Web App基础知识:@张秋怡的&a href=&https://www.zhihu.com/question//answer/& class=&internal&&答案&/a&写的通俗易懂,极力推荐。&/p&&p&有了这个roadmap,我明白了前端三大必须掌握技能HTML,CSS和JavaScript,花了大概10天左右把W3Schools上的教程全部过了一遍,然后试着写了几个网页,感觉自己写的很没有底气。于是根据知乎和豆瓣上的推荐,买了《JaveScript DOM》和《Head First HTML与CSS》,边看书边把例子过了一遍。&/p&&p&W3Schools: &a href=&https://link.zhihu.com/?target=http%3A//www.baidu.com/link%3Furl%3DIYCvCXzSkGQLt7ulZZFmBNaPMEd_6GSSHjvs-BKvWu-oYzYfW7aAUyj8JGqiQpVB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&www.w3schools.com/&/a&&/p&&p&JavaScript:&a href=&https://link.zhihu.com/?target=https%3A//book.douban.com/subject/1921890/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JavaScript DOM编程艺术&/a&&/p&&p&HTML & CSS : &a href=&https://link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Head First HTML与CSS(第2版)&/a&&/p&&p&前端是需要慢慢学习的,在看完上面的资料后,虽然能写出来一些挺漂亮的页面,但是我自己知道很多都是不符合标准的,更不要说代码风格什么的。这只能通过不断地积累和增加代码量来提高。由于明白服务器端需要耗费自己大量的时间,所以在发现自己能够按照构思勉强实现网页之后,我就把学习中心放到了服务器端上。不过每天还是会抽空写一写网页,避免手生。&/p&&p&2)服务器端&/p&&p&最先了解的是HTTP协议,也就是浏览器和服务器之间是如何通信的。也就是当你在浏览器里键入网址按下回车直到网页显示在你浏览器的这个过程中,浏览器和浏览器之间发生了什么事情。这是很有意思的内容,我是以读小说的心情了解了这部分内容。了解这部分后,你就会明白类似为什么有时候会有404页面?在百度搜索框里键入的搜索词是如何提交到百度服务器的?为什么重新登录知乎的时候就不用再输入密码了?之类的问题了。&/p&&p&HTTP协议学习资料:&a href=&https://link.zhihu.com/?target=https%3A//www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&In Introduction to HTTP Basics&/a&&/p&&p&&a href=&https://www.zhihu.com/people/a179aa706eacbd2f7088& data-hash=&a179aa706eacbd2f7088& class=&member_mention& data-title=&@Vamei& data-editable=&true& data-hovercard=&p$b$a179aa706eacbd2f7088&&@Vamei&/a&的博客:&a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/vamei/archive//2802811.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协议森林&/a&&/p&&br&&p&了解了HTTP协议之后,我就多少有些入迷了。看似神秘难懂的现象其实原理并不复杂,你反而会被吸引。接下来就进入到我投入时间最多的部分了——后端开发。记得当时了解Web开发的MVC(Model-View-Controller)模式后,有一种心血喷涌的感觉,觉得太有意思了(程序员别喷,我就是这么没见过世面)。我们以知乎为例子来说明MVC是个啥:&/p&&br&&figure&&img src=&https://pic1.zhimg.com/v2-0f9a88b7e281cc7ffd5e_b.jpg& data-rawwidth=&1029& data-rawheight=&623& class=&origin_image zh-lightbox-thumb& width=&1029& data-original=&https://pic1.zhimg.com/v2-0f9a88b7e281cc7ffd5e_r.jpg&&&/figure&&br&&p&每个人的主页都是相同的布局和风格,例如最上面的菜单搜索栏,颜色分割,左边显示动态等,右边是个人信息等,然后具体的内容却因人而异——每个人的头像,名字,动态都是不一样的。那么知乎是如何保证每一个人看到的都是自己的主页呢?&/p&&p&你可以把这个相同的布局想象成一个模板,里面有一个个空格子,当你用你的账户登陆页面时,想象你的电脑里有无数个小人根据你的账号从知乎后台的数据库里取出你的头像,动态,认证信息等等内容,然后对应着模板上规定好的位置,把对应的内容填进去。这些小人的动作实在是太快了,以至于你觉得这是在瞬间完成的。&/p&&p&上面所说的模板就是MVC中的V,是View的缩写,负责显示。这样做的好处在于,如果知乎有一天突然想改变一下个人主页的风格,那么只需要改变这一个模板,然后几千万注册用户的主页就相应的变化了,因为模板是公用的,是不是省了很多事情?(早期的Web开发可不是这样哟,你可能要一个个用户去改,非常麻烦。)&/p&&p&而这些小人除了摆放内容,它们真正负责的是业务逻辑,我们把他们叫做Controller,也就是MVC中的C。例如当你登陆的时候,这些小人要检查你的用户名是不是准确的,如果准确,它们要去数据库里取出你请求的信息等,如果用户名错误,它们要拦截住你的登陆。它们的职责还有很多,无法一一列举。在实际中,这些小人做的事情其实就是Python(或者其它脚本语言)做的事情。&/p&&p&最后,MVC中的Model其实就是传给View的数据,包括上面的头像,用户名,动态等因人而异的数据。这些数据在知乎服务器上是以数据库表格(table)的形式存在的,你可以把它们想象成很多不同的excel表格,不同的表格储存着不同的信息,有些记录着知乎用户的个人信息,有些记录着回答,有些记录着评论等等,而这些表格之间又彼此联系,当你在知乎的不同网页间跳转的时候,上面说的那些小人就根据你的要求,组合对应的表格取出对应的数据,然后把他们放到模板对应的空格里,发送给浏览器。然后浏览器根据你写的CSS,用不同的颜色,大小等等,将数据很漂亮的显示出来。&/p&&p&这样做的好处是什么呢?虽然你最终在浏览器里看到的是一个完整的页面,但是在后端逻辑上它们都是区分开的——模型(M),视图(V)和控制器(C)的区分就保证了较高的可维护性——我可以随时修改主页的显示并看到效果,同样我可以随时加入一些业务逻辑。&/p&&p&如果你的学习坚持到这里了,首先要恭喜你。其次你可能已经知道一些非常成熟的Python Web框架了,例如Django,Flask等等,并且你可能看到了很多小白教程教你直接使用,毕竟大部分人可能觉得没有必要重复造轮子。&/p&&p&本来为了省事,我也打算直接用框架。我是在设计数据库的时候,当时在看SQLAlchemy文档,觉得相对自己的项目SQLAlchemy太过复杂,所以我决定自己写自己的ORM(名词不懂没关系),这对于当时的我来说是一件难度非常大的事情。于是我投入了极大的精力每天都在看关于SQL和Python相关的教程和资料,&a href=&https://link.zhihu.com/?target=https%3A//book.douban.com/subject/3112503/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python核心编程(第二版) &/a&给了我很大的启发。在自己完成了ORM后,又写了URL处理函数,同样没有用任何现成的Web框架。&/p&&p&现在回头看,我认为这一段时间的造轮子是提升编程能力最快的时候。比如为了写ORM,就必须去花很多时间学习SQL,去了解Python里面的metaclass,而如果用一个现成的框架,我很有可能偷懒不去关注某些细节。而不出问题还好,一旦出问题,我就只能跪。另外,造轮子迫使我在开始的时候就构思整个框架,因为我必须尽可能的考虑到所有的情况,于是就会不断的强迫自己完善知识体系,和别人的代码作对比从而改进自己的,这个过程充满了无尽的挫败感,但是得来的成就和快乐也是无可比拟的。&/p&&p&SQL书籍:&a href=&https://link.zhihu.com/?target=https%3A//www.amazon.com/Sams-Teach-Yourself-MySQL-Days/dp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sams Teach Yourself MySQL in 21 Days&/a&&/p&&p&Python:&a href=&https://link.zhihu.com/?target=https%3A//book.douban.com/subject/3112503/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python核心编程(第二版) &/a&&/p&&p&Github上的优质Python资源:&a href=&https://link.zhihu.com/?target=https%3A//github.com/CodementorIO/Python-Learning-Resources& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CodementorIO/Python-Learning-Resources&/a&&/p&&p&过程中还牵涉到部署,我的网站是跑在Linux上的。关于部署网上有非常多的优质教程,一搜一大把。这里就不再赘述。&/p&&p&这些是我学习大致路线,当然过程中充满着小的磕磕绊绊,虽然网站上线了,貌似运行还比较顺利,但是如果以一个程序员的标准来要求自己,自己依然非常菜鸟。不过我并没有以前那样惧怕技术了,就像你明白魔术的背后的原理后,会更多的思考原理本身。&/p&&br&&h2&2. 自学编程需要注意的问题&/h2&&p&很多人都推荐小白第一门语言选Python,因为语法简单。这句话只说了一半,Python确实容易上手,对初学者的门槛很低。但我发现,对于小白真正的门槛在于系统知识,这就和用什么语言完全没有任何关系了。例如很多人学完了Python的语法,觉得确实简单,但是转头去用Python标准库的时候,却发现自己连文档都看不懂。标准库提供了Python和其它系统功能的接口,最终实现了Python和系统之间的互动。读标准库需要系统知识,比如操作系统,数据库,进程和线程,socket编程,网络协议等等,这些对于编程小白来才构成很高的门槛,但是只有学会这些,才能真正发挥出Python的威力来。&/p&&p&这也是我觉得自己的经历对小白是有价值的一个原因。因为设计一个动态的网页是一个很不错的练手Project。建立网页(Web App)会逼迫你了解从你在浏览器里键入地址按下回车到网页显示在浏览器的过程中,浏览器,网络,服务器都干了些什么。具体到技术上面,你不得不去学习前端的HTML,CSS和JavaScript,后端的脚本,数据库,操作系统等。也就是说,这个过程能够促使你去主动学习上面提到的系统知识,如果你再做另外一个项目,你就不会像现在这样无从下手,而有能力去进行一些技术性的探讨,所以我认为这是一个非常好的练手项目。&br&&/p&&p&1)一定要空出时间补充理论知识&/p&&br&很多人会强调learn by doing,边做项目边学习,这也是我自己采用的方式。在这种方式中,你不断犯错,改正……学习效率非常高。但是,很多人走了极端,最后的结果就是不注意理论知识的学习。你会发现自己Google的能力越来越高,但是真实的编程能力并没有得到提升。如果有这种情况,你需要反思一下。&p&一种可能是你太过于依赖各种成熟的框架,结果编程就变成了用「胶水」去粘合不同的框架完成需求。就好比你的Web App用了SQLAlchemy,虽然自己不太懂SQL,但是网站跑的也还不错。这时候如果数据库出现了问题,那你就只能跪了。&/p&&p&另外一种可能是你完全沉浸在做项目中,忽略了学习理论知识。做项目虽然充满困难,但回报是强烈的成就感,很容易沉浸其中。我觉得这是极其错误的。首先半路出家的程序员都没有经过系统的学习,没有形成自己的知识体系,如果你不懂数据结构,算法复杂度,操作系统这些理论,那么你能达到的高度就极其有限。所以,在每天做项目的同时,一定要保证抽出一定的时间,恶补理论知识。这部分的书单在豆瓣和知乎上都有很多总结,可以自行搜索。&/p&&p&2)不要太纠结于无意义的问题,比如什么框架好,XX语言比XX语言好啦这种问题。前期确定了练手项目,就去专心积累代码量,积累基础知识。那些你现在还看不懂的炫酷技术你慢慢也就能明白是怎么回事了,反而没有基础,再炫酷的框架对你而言都是天书。&/p&&p&3)学会发问。好问题是建立在你自己已经实践或者思考的基础上问出来的,这是对自己的负责,也是对别人的尊重。不要一遇到困难就喜欢直接上网搜索:「这个问题是怎么回事啊?」,「我不明白你能不能帮我看看……」。&/p&&p&4)学好英语。&/p&
【首发表于本人微信公众号:赛门喵Simon(ID: NowEnglish)】 虽然这是一篇和英语学习没有一毛钱关系的文章,不过,因为我没有别的专栏,所以就还是放在这里吧……---在知乎上常常看到想要转行IT,或者是想学习编程但不知如何开始的朋友。回答这类问题的人…
&p&根据前两期的内容,我想你们一定猜到了,这一期我们会转进到和&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Abstract_data_type& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Abstract data type&/a&相关的内容。毕竟解决了allocator的类型问题之后,我们就应该来看一看container接口的问题。&/p&&p&C++现在的STL很不好,把Abstract Data Type的操作都写在具体实现里。假如一个container既实现了Stack又实现了Queue,那么请问 container.push 究竟是Stack的push还是Queue的push?&br&&/p&&p&所以接下来,我们来看一点点&a href=&https://link.zhihu.com/?target=https%3A//github.com/pfultz2/Tick/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&& pfultz2/Tick&/a& 的原理,实现一个naive的Trait机制。&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&p&&...&/span&&span class=&n&&Args&/span&&span class=&o&&&&/span&
&span class=&k&&using&/span& &span class=&n&&VOID&/span& &span class=&o&&=&/span& &span class=&kt&&void&/span&&span class=&p&&;&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span&&span class=&p&&,&/span& &span class=&k&&typename&/span&&span class=&o&&&&/span&
&span class=&k&&struct&/span& &span class=&n&&SAME_TYPE&/span&&span class=&p&&;&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&struct&/span& &span class=&n&&SAME_TYPE&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&p&&,&/span&&span class=&n&&T&/span&&span class=&o&&&&/span& &span class=&p&&{&/span&
&span class=&p&&};&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&p&&,&/span& &span class=&k&&typename&/span& &span class=&n&&Trait&/span&&span class=&o&&&&/span&
&span class=&k&&using&/span& &span class=&n&&IMPLEMENTS&/span& &span class=&o&&=&/span& &span class=&k&&decltype&/span&&span class=&p&&(&/span&&span class=&n&&Trait&/span&&span class=&o&&::&/span&&span class=&k&&template&/span& &span class=&n&&REQUIRE&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&o&&&&/span&&span class=&p&&());&/span&
&span class=&k&&struct&/span& &span class=&n&&MyFirstTrait&/span& &span class=&p&&{&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&struct&/span& &span class=&n&&Impl&/span&&span class=&p&&;&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&static&/span&
&span class=&kt&&void&/span&
&span class=&n&&f&/span&&span class=&p&&(&/span&&span class=&n&&T&/span&&span class=&o&&&&/span& &span class=&n&&self&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&Impl&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&o&&&::&/span&&span class=&n&&f&/span&&span class=&p&&(&/span&&span class=&n&&self&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&constexpr&/span&
&span class=&k&&static&/span&
&span class=&k&&auto&/span&
&span class=&n&&REQUIRE&/span&&span class=&p&&()&/span& &span class=&o&&-&&/span& &span class=&n&&VOID&/span&&span class=&o&&&&/span&
&span class=&n&&SAME_TYPE&/span&&span class=&o&&&&/span&&span class=&k&&decltype&/span&&span class=&p&&(&/span&&span class=&n&&Impl&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&o&&&::&/span&&span class=&n&&f&/span&&span class=&p&&),&/span& &span class=&k&&decltype&/span&&span class=&p&&(&/span&&span class=&n&&f&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&o&&&&/span&&span class=&p&&)&/span&&span class=&o&&&&/span&
&span class=&o&&&&/span&&span class=&p&&;&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&比如我们有两个struct,一个实现了MyFirstTrait,一个没有实现&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&k&&struct&/span& &span class=&n&&Foo&/span& &span class=&p&&{&/span&
&span class=&p&&};&/span&
&span class=&k&&template&/span&&span class=&o&&&&&/span&
&span class=&k&&struct&/span& &span class=&n&&MyFirstTrait&/span&&span class=&o&&::&/span&&span class=&n&&Impl&/span&&span class=&o&&&&/span&&span class=&n&&Foo&/span&&span class=&o&&&&/span& &span class=&p&&{&/span&
&span class=&k&&static&/span&
&span class=&kt&&void&/span&
&span class=&n&&f&/span&&span class=&p&&(&/span&&span class=&n&&Foo&/span&&span class=&o&&&&/span& &span class=&n&&self&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&p&&}&/span&
&span class=&p&&};&/span&
&span class=&k&&struct&/span& &span class=&n&&Bar&/span& &span class=&p&&{&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&那一个函数怎么针对不同的trait有不同的实现?&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&cp&&#include&/span& &span class=&cpf&&&stdio.h&&/span&&span class=&cp&&&/span&
&span class=&cp&&#include&/span& &span class=&cpf&&&utility&&/span&&span class=&cp&&&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&p&&,&/span& &span class=&k&&typename&/span&&span class=&o&&=&/span&&span class=&kt&&void&/span&&span class=&o&&&&/span&
&span class=&k&&constexpr&/span&
&span class=&kt&&int&/span& &span class=&n&&_test&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&constexpr&/span&
&span class=&kt&&int&/span& &span class=&n&&_test&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&p&&,&/span& &span class=&n&&IMPLEMENTS&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&p&&,&/span& &span class=&n&&MyFirstTrait&/span&&span class=&o&&&&&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&typename&/span& &span class=&o&&::&/span&&span class=&n&&std&/span&&span class=&o&&::&/span&&span class=&n&&enable_if&/span&&span class=&o&&&&/span&&span class=&n&&_test&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&o&&&&/span& &span class=&o&&==&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&kt&&void&/span&&span class=&o&&&::&/span&&span class=&n&&type&/span&
&span class=&n&&test&/span&&span class=&p&&(&/span&&span class=&n&&T&/span&&span class=&o&&&&&/span& &span class=&n&&x&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&0&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&k&&typename&/span& &span class=&o&&::&/span&&span class=&n&&std&/span&&span class=&o&&::&/span&&span class=&n&&enable_if&/span&&span class=&o&&&&/span&&span class=&n&&_test&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&o&&&&/span& &span class=&o&&==&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&kt&&void&/span&&span class=&o&&&::&/span&&span class=&n&&type&/span&
&span class=&n&&test&/span&&span class=&p&&(&/span&&span class=&n&&T&/span&&span class=&o&&&&&/span& &span class=&n&&x&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&MyFirstTrait&/span&&span class=&o&&::&/span&&span class=&n&&f&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&1&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&kt&&int&/span&
&span class=&n&&main&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&n&&test&/span&&span class=&p&&(&/span&&span class=&n&&Foo&/span& &span class=&p&&{});&/span&
&span class=&n&&test&/span&&span class=&p&&(&/span&&span class=&n&&Bar&/span& &span class=&p&&{});&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&如何让编译器拒绝没有实现某个Trait的类型?&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&T&/span&&span class=&o&&&&/span&
&span class=&n&&IMPLEMENTS&/span&&span class=&o&&&&/span&&span class=&n&&T&/span&&span class=&p&&,&/span& &span class=&n&&MyFirstTrait&/span&&span class=&o&&&&/span&
&span class=&n&&fail&/span&&span class=&p&&(&/span&&span class=&n&&T&/span&&span class=&o&&&&&/span& &span class=&n&&x&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&p&&}&/span&
&span class=&kt&&int&/span&
&span class=&n&&main&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&n&&fail&/span&&span class=&p&&(&/span&&span class=&n&&Foo&/span& &span class=&p&&{});&/span&
&span class=&n&&fail&/span&&span class=&p&&(&/span&&span class=&n&&Bar&/span& &span class=&p&&{});&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&本期内容非常简单,就到此结束吧。&/p&
根据前两期的内容,我想你们一定猜到了,这一期我们会转进到和相关的内容。毕竟解决了allocator的类型问题之后,我们就应该来看一看container接口的问题。C++现在的STL很不好,把Abstract Data Type的操作都写在具体实现里。假如一个cont…
&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=&http://pic1.zhimg.com/c158c3a0fc25db6ce30774_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&http://pic1.zhimg.com/c158c3a0fc25db6ce30774_r.png&&&/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=&http://pic1.zhimg.com/5d6f72ac17ad317be649f8_b.png& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&http://pic1.zhimg.com/5d6f72ac17ad317be649f8_r.png&&&/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 externa

我要回帖

更多关于 vb编程求平均数 的文章

 

随机推荐