想全职做国外的小程序外包包,例如freelancer,能分享下经验吗

当我大概搞清楚了一句 “Hello world!”是怎么出现在屏幕上的时候&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&printf(&Hello world!&);
&/code&&/pre&&/div&&br&printf 是一个C runtime的函数,“Hello world!& 是一个常量字符串,编码是ASCII的'\0'结尾的,传递给printf的是const char * 类型的指针,指针通过push指令压栈,通过call指令调用函数。&br&&br&printf会把这个字符串写入一个叫
stdout的抽象文件句柄,而这个文件句柄会被console接管。&br&&br&当console从stdout读取这个字符串后,会把他写入console的缓冲区,根据当前光标位置决定字符的位置&br&&br&console的会根据缓冲来刷新屏幕显示&br&&br&显示字符的时候需要根据当前字体设置,用”Hello world!&的每个字符的Unicode值去计算字体内对应的字符索引,根据索引获取字模。&br&&br&根据字模来绘制字符图形,用当前字体颜色填充,做字体边缘平滑,生成包含字符的RGB32位图&br&&br&把RGB32位图复制到console窗口对应的frame buffer&br&&br&操作系统的图形引擎把窗口的frame buffer渲染到屏幕对应的显存内的frame buffer&br&&br&显卡根据显存buffer 生成信号给显示器,显示器根据信号调整屏幕上每个像素的颜色和亮度。&br&&br&终于可以看到“Hello world!”了&br&&br&注:这只是个粗略过程,中间省略了不少于10万字。
当我大概搞清楚了一句 “Hello world!”是怎么出现在屏幕上的时候 printf("Hello world!");
printf 是一个C runtime的函数,“Hello world!" 是一个常量字符串,编码是ASCII的'\0'结尾的,传递给printf的是const char * 类型的指针,指针通过push指令压栈…
&p&&b&声明&/b&:只是经验分享!!!当故事看看就好。不同的人,不同的环境,不具备可复制性。故事看完路还是要自己走的。&/p&&br&&p&我照着萧大的指导找到了工作,已经入职有一个月了,过来将我的过程分享出来,希望能有点参考价值。&/p&&p&先介绍下我的基本情况:211本科土木工程,大学期间学过一丁点儿C语,算是零基础。毕业后在工地上做建筑施工工作五个月,然后转行到一个外包公司做功能测试八个月,9月中旬入职现在的公司,工作内容是用python做openstack的二次开发。&/p&&br&&p&下面说下详细过程:
最早接触python是在《黑客与画家》这本书中,在大学里看闲书读到的,其中有一篇作者特别推崇python,当时没有去了解更多,但对python有了深刻印象。&/p&&p&在工地工作期间有转行的想法时,因为深圳有腾讯,便想不如去做程序员吧。当年的C语考试将近满分,让我对学编程没有畏惧心理。于是便想起了python,在知乎搜索收集了一通信息,建了个收藏夹&a href=&/collection/& class=&internal&&那些幻想&/a&,当时还只是幻想,没有开始行动。&/p&&p&后来下定决心转行了,就找到了《Python简明教程》(A Byte of Python)打印了跟着敲。&/p&&p&当时对于从什么岗位干起两眼一抹黑,机缘巧合,经一个朋友的介绍认识了一个干了十年嵌入式的程序员,他建议我可以&b&从测试岗位干起,工作门槛不高,而且工作相对轻松,有时间自学&/b&。于是投测试岗位的简历,顺利找到一份功能测试工作,元旦后入职。公司的程序员用的是Java。&/p&&p&测试岗位确实比较闲,入职没几天,我就把《Python简明教程》剩下的部分学完了。然后直到过年回家的一个月时间,我陷入了迷茫。Foxmail订阅了国内的各种互联网媒体博客等,每天了解国内外IT界的新闻就花掉几个小时的工作时间,其他时间学一些测试的东西,没有人带,自己上网搜,东一榔头西一棒子的看,&b&觉得有用的记录到印象笔记上&/b&。&/p&&p&过年期间,一声炮响,送来了萧大的&a href=&/xiao-jing-mo/& class=&internal&&编程入门指南 &/a&(现在是1.4版本,较之前的版本有改动)。顿觉前途明亮人生有望了有没有!!!&/p&&p&年后回到深圳,有了指路明灯,还不策马狂奔?花了一周时间去codecademy上敲完python部分,然后开始听&a href=&///?target=http%3A///courses/MITx/6_00_1x/2014_T2/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机科学和Python编程导论&i class=&icon-external&&&/i&&/a&,做课后的Problem Set,同时开始支线任务《&a href=&///?target=http%3A///subject/3112503/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python核心编程&i class=&icon-external&&&/i&&/a&》。还根据萧大的指南做了个流程图:(还是1.0版本的,上传了百度网盘,需要的自取)
Visio版:链接:&a href=&///?target=http%3A///s/1qWpEFoS& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&百度云&i class=&icon-external&&&/i&&/a& 密码:kqtq
PDF版:链接:&a href=&///?target=http%3A///s/1pJtK5DL& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&百度云&i class=&icon-external&&&/i&&/a& 密码:2zk1&/p&&img src=&/7db40a889e0c3ccf32e8_b.png& data-rawwidth=&1181& data-rawheight=&834& class=&origin_image zh-lightbox-thumb& width=&1181& data-original=&/7db40a889e0c3ccf32e8_r.png&&&br&&p&这样听课做题的简单日子只持续到4月上旬,有一个多月效率很低。直到6月才恢复了正常的学习节奏。同时看些闲书,《大话数据结构》《编码的奥秘》这种趣味入门书,不深究,了解个大概。这段时间还去了解了爬虫,没有写出像样的爬虫,但是了解了一些计算机网络通信的知识。另外微信订阅的Crossin的编程教室上出了一系列用web.py框架做小网站的教程,也跟着学了,不过好久没有更新了。&/p&&p&拖拖拉拉到6月底,才学完MIT的导论课,《Python核心编程》的书还没看完。但是那个时候对所在公司的各种制度不满,想尽快学到能干活的程度跳槽。于是正式开始了Flask的学习(《Flask Web开发》书老早就买了,之前零零碎碎看了点),每天下班在公司学到9点。期间有过很多蛋疼的时刻,但还是死磕过来了。到8月上旬,基本过完一遍书,将应用部署到Heroku上折腾了有一周时间。&/p&&p&8月中旬,在书上代码的基础上,自己做一些改动,并翻译成中文界面,再重新部署下,便提了辞职做份简历找工作去了。由于对python的基础掌握不牢不全面,面试期间很不顺利。面了几家后都希望渺茫,想着要不回家再学一个月再来找工作。所幸,在上家公司离职当天收到了现在公司的offer,尽管是以应届生的待遇。&/p&&p&总的来看,我的学习过程分三个阶段:
第一阶段:python基础语法
关键字:《A Byte of Python》跟着书敲,python 3.4,Windows 7,IDLE&/p&&p&第二阶段:复习python语法,了解其他基础知识
关键字:Codecademy,MIT导论课,《Python核心编程》,看书做题
&b&# 补充:python 2.7&/b&&/p&&p&第三阶段:Flask框架
关键字:《Flask Web开发》,Linux(推荐Ubuntu或CentOS),Git,QQ群请教
&b&# 补充:python 2.7&/b&&/p&&p&另外,学的过程中,最好慢慢养成下列习惯:
1. 优先读官方英文文档,其次是别人的经验/理解(博客、百度知道、论坛帖子这些);
2. 善用Google,最近发现AOL也还不错(尽量不用百度,不靠谱耽误事);
3. 你遇到的问题很有可能其他人也遇到过并解决了,Stackoverflow是个好东西;
4. 以上三步都不能解决的问题,再请教别人。
5. 将过程记录下来,常做总结。觉得可能对他人有帮助的,分享出来。&/p&&p&先这样吧,有时间再补充。&/p&&p&----------------------------- 加班间隙,补充点资料 ------------------------------
1. 关于QQ群,直接搜索关键字就可以找到很多,多加几个,择善保留
2. 推荐几个微信订阅号:
PythonCoder(Python开发者)
crossincode(前面提到的Crossin的编程教室)
LinuxHub(Linux爱好者)
3. Git推荐廖雪峰老师的教程:&a href=&///?target=http%3A///wiki/bb000& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Git教程 - 廖雪峰的官方网站&i class=&icon-external&&&/i&&/a&
4. 数据库的学习,推荐《&a href=&///?target=http%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQL必知必会&i class=&icon-external&&&/i&&/a&》这本小册子
5. 前端的学习,去&a href=&///?target=http%3A//.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&w3school&i class=&icon-external&&&/i&&/a&,HTML、JS、CSS做到能看懂能改&/p&&p&技术的学习不是一蹴而就的,但只要你的知识&b&够用&/b&就能找到工作。调整好心态,踏踏实实看书敲代码去吧。&/p&&p&#&a href=&tel:&&&/a&更
觉得读英文文档有困难的童鞋,去装个微软的必应词典,打开取词。好用再来谢我~&/p&&p&#日更&/p&&p&好多同学在刚开始接触Flask的时候,会遇到一些小白问题,很正常,我一开始也这样。不过一个一个解答效率太低,所以来把我当时记录踩坑的博客贴出来:&a href=&///?target=http%3A//blog.csdn.net/leadpython%3Fviewmode%3Dcontents& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从0到1 日拱一卒&i class=&icon-external&&&/i&&/a&&/p&
声明:只是经验分享!!!当故事看看就好。不同的人,不同的环境,不具备可复制性。故事看完路还是要自己走的。 我照着萧大的指导找到了工作,已经入职有一个月了,过来将我的过程分享出来,希望能有点参考价值。先介绍下我的基本情况:211本科土木工程,大…
&p&尽管我读的是软件工程,但是其实很多重要的学习过程我已经在中学就完成了,大一搞定了clrs和龙书,我也勉强算非科班出身吧。&/p&&br&&p&如果你要成为一个专业的程序员,千万不要过早设定自己的方向,因为专业的程序员都是能够把很多个方向做的很牛逼,其中有一两个方向超级牛逼。像你这么年轻的人,应该去巩固一下基础知识的同时,你可以学习ios等级能用来养家糊口。学习ios是为了赚钱,同时为了让你争取时间学习更多的知识,从而成为一个专业的程序员。这并不矛盾。创造windows的dave cutler今年都70岁了,20年前4、50岁了才刚刚开始写winnt,人家在30岁之前都还不太懂怎么写代码,所以不要着急。&/p&&br&&p&因此我认为你在学习ios找工作的同时你应该同时学习(不需要成为专家,学习就好了)&/p&&ul&&li&计算机图形学&/li&&li&编译原理&/li&&li&操作系统的基础知识&/li&&li&分布式系统的架构&/li&&li&对你的代码进行靠谱的自动化测试&/li&&li&学会写framework和library,不要一味地写application&/li&&/ul&&br&&p&这些对于你成为互联网行业的未来的标准制定者和奠定技术基础的人是有帮助的。&/p&
尽管我读的是软件工程,但是其实很多重要的学习过程我已经在中学就完成了,大一搞定了clrs和龙书,我也勉强算非科班出身吧。 如果你要成为一个专业的程序员,千万不要过早设定自己的方向,因为专业的程序员都是能够把很多个方向做的很牛逼,其中有一两个方…
利益相关:四年211学校软件学院学生,四年的软件公司开发经验。&br&&br&这八年觉得入了好几次门,但是现在是不是入门我也不知道了。&br&第一个月:学会了C语言写了个简单的加减法计算器,觉得我入门了。&br&第一年:写了个支持四则运算,括号,开方,字母运算的计算器。学习过程中自动领悟了模块化,觉得进入了一个新天地,觉得我入门了。&br&第二年:和舍友合作,做了个魔兽主题的俄罗斯方块,有动画声效。体验了多人合作,代码管理,高层设计,模块测试,觉得我入门了。&br&第三年:做了个和同学合作,做了个搜索引擎,有索引算法,网站,网页,搜到了H网站,觉得百度也就这样了,我一定入门了。&br&第四年:做了个基于Java web,数据库的房产管理系统,管理软件也不过如此嘛,觉得我入门了。&br&&br&------------------毕业工作的分隔线--------------------------&br&&br&工作一个月:用了一天的时间自学了JavaScript,html,发现自学一门新技术也就这样了,这一定是入门的征兆。&br&工作第二个月:开始接触公司里面的一个10W行级别的软件,发现直接绕晕,无法理解。觉得自己有点虚。&br&工作第六个月:突然顿悟如何在一个陌生的中型项目(10w级别)工作。当时感觉这就是入门吧。&br&工作一年零六个月:带领两个校招的毕业生,负责了一个3W行左右的小型项目,做的不错,老板还给精神+物质嘉奖了,觉得做一个leader可能就是这样吧,入门一定是这个感觉。&br&工作两年:和我们组的leader,一个写了12年代码的资深工程师深入合作,发现难以望其项背啊,突然觉得自己好弱。然后在他的指导下,学习设计,重构,敏捷等等。&br&工作三年:公司有一个新项目,需要研究新技术,派我上了。当时奋战了一个月,研究技术,出了一些成果之后做了原型,老板觉得不错,决定立项开工。头一次独立开荒,并且结果不错,可能这就是真的入门了吧。&br&&br&------------------跳槽的分隔线--------------------------&br&&br&工作四年-现在:跳了个槽,入职当天就开始改代码,修bug了。发现新的项目,新的技术已经不再是障碍了。这是入门吗?&br&新工作三个月:发现这个项目里面有诸多的设计失误,坚信如果初期架构由我来做,一定会更好些。&br&&br&&b&这到底怎么样才算是入门呢?&/b&&br&&br&&br&&b&===============原答案的分隔线============&br&&/b&&br&&br&&br&编辑草稿的时候正好100个赞了,惶恐,知乎的第一个称得上“高票”的答案了。&br&&br&鉴于评论区里面有几位问我算法不好或者不是计算机专业的,适不适合做开发,并且看起来是学生,这里统一回答一下这个问题。&br&数据结构和算法到底有多重要。&b&对于学生来说,很重要。因为如果你这个学不好,能通过大公司的校招可能性微乎其微。&/b&因为公司评价一个学生的素质基本上就是看潜力(你得聪明),能做事(学习扎实),能学好数据结构这两条是缺一不可的。但是工作中我却从来没有直接的写过一个所谓算法或者数据结构,因为大多数的开发工作是应用开发,数据结构大可以用STL之类的库里面的,你自己几乎不可能写一个质量或者效率超过这些库的代码的。&br&&br&专业有多重要。我自己是软件工程专业的,算是科班出身了。我不太好判断非科班会有多少劣势。但是我在公司中见过很多很多非科班的高手,有学生物的,机械的,还有设计的。如果你是非科班的话,自学就很重要了。学什么呢?我凭记忆写一下我大学时候的专业课吧,可能不全,尽量凭记忆写,如果我写了书名号,你可以百度这本书,这就是教材。《计算系统基础》,&b&数据结构与算法,操作系统,面向对象编程&/b&,计算机组成原理,网络技术原理,数据库原理,&b&《代码大全》&/b&,统计数学,离散数学,&b&c++&/b&,软件工程导论,软件设计导论。&br&加粗的地方是我认为比较重要,至少对于校招面试是有帮助的。&br&&br&校招是去大公司还是小公司呢?有人说小公司可以迅速独当一面,成长快,大公司只是螺丝钉。这点我承认。但是根据我的判断,小公司,长得快;大公司,长得高。&br&我第一份工作是大公司。公司名我不说了,大致描述一下吧,国际化上市公司,从公司离职的有去BAT,google,microsoft的,从BAT出来的也有到这家公司的。我在里面就算一个中流选手吧。大公司的一个好处,无法替代的,对于成长很重要的好处,就是你和优秀的人一起工作,见识了成熟的开发方法,见识了大牛是什么样的,见识了复杂的软件是怎么做出来的,这对于一个刚步入工作的人很重要。并且这些在小公司是很难见识到的。并且大公司里面你往往会有一个资深且优秀的Leader进行辅导带领,这点小公司同样很难提供。&br&&br&我的第二份工作是一个创业公司,技术团队十几个人吧。假如我第一份工作就在这里,很可能我的开发路子就会变得很“野”,不正规。这种野路子可能会很快,但是大量的软件工程先驱探索出的正路子才能够帮你走的更远。并且小公司人水平良莠不齐,业务压力也大,能让你跟着一个资深的高手学习的机会和时间也有限。&br&&br&学过打字的都感觉得到,刚开始随心所欲的打字,开始是打的快。但是真正要打的快,打得好,刚开始就得用“别扭”的正规姿势和指法来打。&br&综上,如果你想在软件开发作为职业生涯,第一份工作建议大公司。
利益相关:四年211学校软件学院学生,四年的软件公司开发经验。 这八年觉得入了好几次门,但是现在是不是入门我也不知道了。 第一个月:学会了C语言写了个简单的加减法计算器,觉得我入门了。 第一年:写了个支持四则运算,括号,开方,字母运算的计算器。…
&p&题主使用的教材不对。请看我给我老婆写的教材:&/p&&p&《&b&教老婆学python》&/b&&/p&&p&&b&注:&/b&未完待续....等我整理完了会发到&a href=&/codingart?group_id=782464& class=&internal&&水风的游戏思考 - 知乎专栏&/a&,欢迎关注。&/p&&p&什么是code:
code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如,你让你老公去买个西瓜,你老公会自己决定去哪里买,买几个,找个搞活动打折的买,总之,你给他钱,他就给你买回来让你吃到爽的西瓜。但是,你想让计算机买一个西瓜?你要告诉他:去门口的鲜丰水果店买,买沙瓤无子西瓜,若旁边的店打折,就去旁边的店买。总之,你不能让计算机做任何决定,你要清楚的告诉他所有情况下的所有的行为。而code,就是你和计算机交流的语言,或者说是对计算机的命令。&/p&&p&我们就把计算机理解为一个人,这个人很死板,只能按照你给他的详细命令进行工作。而这个人工作速度特别特别快,并且保证工作结果都是正确的。&/p&&p&编程语言其实不重要,重要的是要明白如何和计算机交流,明白了这个也就能看懂代码了。&/p&&p&python就是一种和计算机交流的语言,这种语言单词(关键字)不多,规则也少。下面所有的内容都基于python。&/p&&h2&&b&判断&/b&&/h2&&p&当你命令计算机做一件事情的时候,这件事情可能分一些情况进行处理。
判断通常涉及到的关键字有:if , else, elseif, and, or,&, &,=,&=,&=,==&/p&&p&比如,你让计算机买西瓜,希望买到打折的西瓜,不打折的话你就不吃了。&/p&&div class=&highlight&&&pre&&code class=&language-text&&if
水果店打折:
&/code&&/pre&&/div&&p&通过这个命令,计算机变得更智能了一些,他可以根据情况执行你的命令。&/p&&p&水果店不打折你就吃不到西瓜,你不开心。那么,我们让计算机更智能一些。假如西瓜打折,就买西瓜;不打折的话让计算机跟老板讲价,老板同意打折,就买西瓜;不同意,不吃了;&/p&&div class=&highlight&&&pre&&code class=&language-text&&if
水果店打折:
与老板讲价
if 讲价成功:
&/code&&/pre&&/div&&p&虽然和老板讲价一般都能讲成功,但是有的老板给力给打五折,有的老板只给打九折。你就想了,若老板打五折,我就买两个,今天吃一个,明天吃一个。若老板不给力,打折不到五折,就买一个,今天先吃,明天再说。&/p&&div class=&highlight&&&pre&&code class=&language-text&&if
水果店打折:
与老板讲价
if 打折成功 and 打折力度&=5:
买两个西瓜
elseif 打折成功 and 打折力度 & 5:
买一个西瓜
&/code&&/pre&&/div&&p&此外,有没有发现,打着成功这段代码其实也可以写成:&/p&&div class=&highlight&&&pre&&code class=&language-text&&if 打折成功:
if 打折力度&=5:
买两个西瓜
买一个西瓜
&/code&&/pre&&/div&&p&由此可见,计算机也不是完全的一成不变,只要你给他的命令他能理解并且不会默认两可,他都可以完成工作。&/p&&p&and的意思代表且,or的意思代表或。and和or的顺序不同,结果也不同,可以通过括号来说明判断条件的优先级。&/p&&p&a==b是比较a和b是否相等的意思,而=代表赋值。赋值的含义,我在下面的&b&变量章节&/b&介绍。&/p&&h2&&b&循环&/b&&/h2&&p&python中涉及到循环的关键字包括:for...in... ,while,break,continue&/p&&p&上面的例子我们已经让电脑成功的可以根据不同的情况去水果店买西瓜了,但是若老板不打折,你就吃不到西瓜了。这时,你就想了,咱们小区门口有三家水果店,分别是鲜丰水果、四季水果和路边摊,一家不打折不代表三家都不打折啊,所以你希望电脑可以去三家都去看看,挑一家打折的店买西瓜。&/p&&div class=&highlight&&&pre&&code class=&language-text&&for 水果店 in (鲜丰水果、四季水果和路边摊):
if 水果店 打折:
break(循环结束)
带西瓜回家
&/code&&/pre&&/div&&p&循环的意义在于,可以用电脑对不同的对象执行相同的命令。&/p&&p&介绍下break,break的意思就是结束循环。比如,这段代码中的break表示,我们一旦买了西瓜,那么就带西瓜回家。&/p&&h2&&b&变量&/b&&/h2&&p&现在是时候介绍'变量'这个重要的东西了。&/p&&p&我们依然把电脑理解为帮我们工作的一个人,那么作为一个人,他需要有记忆力,而我们就可以通过变量去控制、利用计算机的记忆力。&/p&&p&变量可以理解为计算机的一个记忆单元,计算机拥有极好的记忆力,所以,可以随心所欲的使用,用完了就扔,需要了就要。(当然,说随心所欲是不严谨的,但是你可以理解为随心所欲)&/p&&p&那为什么叫变量呢,就是因为可以改变。为什么要改变呢?比如我们都有自己的年龄,我今年18,明年就19了。所以,'年龄'在我的记忆里是每年改变的。&/p&&p&变量对应的一个东西叫常量,在我的记忆力,我的老婆是江江同学。而这个'老婆'这个记忆单元在我的脑子里是不会变的,她永远都是江江同学。常量你现在可以不用理解,我写主要是为了秀恩爱。&/p&&p&现在,计算机又要去买西瓜了。不过这次,你希望计算机可以在三个水果店中,找到一个打折力度最大的水果店去买水果。&/p&&div class=&highlight&&&pre&&code class=&language-text&&之前所有水果店的最大折扣 = None
之前给最大折扣的水果店 = None
for 水果店 in (鲜丰水果、四季水果和路边摊):
当前水果店折扣 = 老板给的折扣
if 当前水果店折扣 & 之前所有水果店的最大折扣:#4折比5折力度大
之前所有水果店的最大折扣 = 当前水果店折扣
之前给最大折扣的水果店 = 水果店
去 之前给最大折扣的水果店 买一个西瓜
&/code&&/pre&&/div&&p&以上有以下几个记忆单元:&/p&&ul&&li&之前所有水果店的最大折扣&/li&&li&之前给最大折扣的水果店&/li&&li&当前水果店折扣&/li&&li&水果店 注意,for a in b,a也是一个变量,他在每次执行的时候都是b中的当前执行的一个元素。&/li&&/ul&&p&这里需要介绍一些概念:&/p&&ul&&li&None 在python中表示空,表示这个记忆单元现在啥都没有。比如在我情窦初开时,脑海中就已经有了情人这个记忆单元,我一直在寻找,但遇到你之前一直没有找到,所以那段时间这个记忆单元里面一直是空。&/li&&li&赋值符号:=。 注意,在计算机语言里面,一个'='号表示赋值,两个等号'=='表示比较前后元素。赋值的意思是,把后面的元素,放到前面的变量里面。&/li&&/ul&&p&&b&变量的作用域&/b&&/p&&p&作用域这个东西非常重要,但是真心不想讲,因为没办法结合现实的例子,不过还是大体说明下。&/p&&p&还是刚才的例子,我加了行号,并且我使用-代表空格,表示代码的缩进。&/p&&div class=&highlight&&&pre&&code class=&language-text&&1 之前所有水果店的最大折扣 = None
2 之前给最大折扣的水果店 = None
3 for 水果店 in (鲜丰水果、四季水果和路边摊):
4 ---当前水果店折扣 = 老板给的折扣
5 ---if 当前水果店折扣 & 之前所有水果店的最大折扣:#4折比5折力度大
6 ------之前所有水果店的最大折扣 = 当前水果店折扣
7 ---之前给最大折扣的水果店 = 水果店
8 去 之前给最大折扣的水果店 买一个西瓜
&/code&&/pre&&/div&&p&你看这个例子可能纳闷,为什么要先给'之前所有水果店的最大折扣'、'之前给最大折扣的水果店'这两个变量赋值为None呢。就是因为作用域问题。&/p&&p&你看这个程序,每行代码的缩进都是不一样的。变量作用域可以理解为:一个变量,只有在其第一次出现的地方的缩进,以及缩进更多的代码里面,才有效。我们第1、2行的变量,就可以用于3-8行,因为这些代码的缩进都在1、2行的后面。而第四行的变量'当前水果店折扣',只在5、6、7行有效&/p&&div class=&highlight&&&pre&&code class=&language-text&&1
————B = None
————..
————————C = None
————————..
————D = None
————..
————————..
————————..
&/code&&/pre&&/div&&p&再举个例子,ABCD是变量,..代表某些代码。A的作用域就是1-11行,即1-11行都可以使用A。B的作用域是2-9行,C的作用域只有4-5行,&i&注意,8-9行就不能再使用C了,虽然他的缩进和4、5行一样&/i&,作用域遇到第一个不能用缩进行代码即结束。D的作用域就是6-9行。&/p&&h2&&b&函数和模块&/b&&/h2&&p&看懂以上几节,大概应该明白计算机如何执行代码的了。&/p&&p&而函数和模块,和之前的介绍不太一样。之前是介绍如何让计算机工作,是面向计算机的。而这一节,是面向人的,是如何让我们写给计算机的代码看起来更加简洁、明了。函数和模块都是对代码结构的优化,否则一个稍微大点的项目,一大坨代码,计算机看得懂人看不懂,不利于管理和交流。&/p&&p&首先说函数。函数是一系列代码的集合,用函数一般是有几个原因:
1.给一段代码起个名字。
2.这段代码和使用它的代码关系不大,所以可以抽出来,抽出来后代码更简洁。关系不大的意思就是:使用函数的代码通过传给函数几个参数,函数就可以执行。
3.代码集合起来就可以在代码的不同地方使用。&/p&&p&依然我们去买西瓜,不过我们希望电脑可以今天买完西瓜明天再买一个。按照之前的方式,这个逻辑应该写成这样:&/p&&div class=&highlight&&&pre&&code class=&language-text&&for 水果店 in (鲜丰水果、四季水果和路边摊):
水果店打折:
与老板讲价
if 打折成功 and 打折力度&=5:
买两个西瓜
elseif 打折成功 and 打折力度 & 5:
买一个西瓜
休息一天。
for 水果店 in (鲜丰水果、四季水果和路边摊):
水果店打折:
与老板讲价
if 打折成功 and 打折力度&=5:
买两个西瓜
elseif 打折成功 and 打折力度 & 5:
买一个西瓜
&/code&&/pre&&/div&&p&上面的代码可以实现我们的要求,但是买西瓜的代码其实是重复的,对于重复代码,管理起来比较麻烦,比如你想改一点,那么就要去各个地方都改一次。&/p&&p&那么,我们把买西瓜的代码弄成一个函数,代码就可以整理为:&/p&&div class=&highlight&&&pre&&code class=&language-text&&def 买西瓜_函数():
for 水果店 in (鲜丰水果、四季水果和路边摊):
水果店打折:
与老板讲价
if 打折成功 and 打折力度&=5:
买两个西瓜
elseif 打折成功 and 打折力度 & 5:
买一个西瓜
买西瓜_函数()
休息一天。
买西瓜_函数()
&/code&&/pre&&/div&&p&这一次,代码整洁多了,而且,我们每次想修改买西瓜的代码,都只需要改这个函数一处代码都可以。&/p&&p&在python中,使用def function_name():定义函数,函数下面所有的缩进都属于这个函数,叫函数体。&/p&&p&使用function_name()调用函数。&/p&&p&&b&函数参数&/b&&/p&&p&现在你又不满足与电脑只会买西瓜了,你又想吃柚子。怎么办呢,那么是不是我们又要写一个买柚子的函数呢。&/p&&p&当然可以再写一个买柚子函数,但是买柚子函数的逻辑和买西瓜函数的逻辑都是一样的,命令也一样,唯一的区别就是之前是卖西瓜,现在是买柚子。如果再写一个类似的买柚子函数,那么又出现刚才说的问题,每次修改买水果的逻辑,都需要同时去修改买西瓜、买柚子函数,如果柚子吃腻了,又要买香蕉、苹果、梨,岂不是要写非常多的函数?&/p&&p&为了解决这个问题,其实有一个更好的方法,就是使用函数参数。&/p&&p&由于我们买水果(无论是西瓜、还是柚子)的功能都是一样的,所以我们可以写一个买水果函数,买水果函数定义了买一个水果的流程,当我们使用这个函数的时候,我们只要告诉这个函数我们要买什么水果,函数就可以根据你告诉他的水果名,去买对应的水果。&/p&&p&买水果函数的代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&def 买水果函数(水果名):
for 水果店 in (鲜丰水果、四季水果和路边摊):
水果店打折:
买[水果名]
与老板讲价
if 打折成功 and 打折力度&=5:
买两个[水果名]
elseif 打折成功 and 打折力度 & 5:
买一个[水果名]
买水果函数(西瓜)#让电脑去买西瓜
买水果函数(柚子)#让电脑去买柚子
&/code&&/pre&&/div&&p&在python中想使用函数参数,只需要在函数定义的时候,在括号里面加上参数即可,我们这里的参数就是'水果名'。在函数体中代码可以使用函数参数。&/p&&p&在调用函数的时候,把一个变量或者常量写在函数名后面的括号里面,传给函数。&/p&&p&注意,若是存在多个参数,函数定义和调用函数的参数顺序一定要一致。&/p&&p&在python中,还存在默认参数、关键字参数等稍微高级一点的使用方式,举个例子,不详细说明了。&/p&&div class=&highlight&&&pre&&code class=&language-text&&def sum(a, b = 0,c = 1):#b/c是默认参数
return a+b+c
func(1,0,1)
func(1,c=1)
&/code&&/pre&&/div&&p&这三个func调用的结果都是一样的。&/p&&br&&p&未完待续....等我整理完了会发到&a href=&/codingart?group_id=782464& class=&internal&&水风的游戏思考 - 知乎专栏&/a&,欢迎关注。&/p&
题主使用的教材不对。请看我给我老婆写的教材:《教老婆学python》注:未完待续....等我整理完了会发到,欢迎关注。什么是code:
code就就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。…
&p&不知道算不算强答,零基础学了半年吧,没去找工作,只是接了些活儿,挣了些1000多的外快。&/p&&p&明天就要去北京回学校了,今天在家整理书籍,感慨良多,写个答案,算是整理一下半年的学习过程。&/p&&p&(写完了才发现这感慨确实有点多,这个答案是边整理书边写的,所以有点多,基本概括了我半年学习路线,不知道能不能对你有点帮助。)&/p&&br&&p&父亲去年五月份查出肝癌晚期,暑假我向学校申请休学半年,九月份的时候父亲病逝,我一直在家忙后事。为了不在家浪费时间,加上我早就有建筑学弃坑的想法,九月底的时候正式开始学习编程。&/p&&br&&p&不过需要说明的是我并非完全的零基础,去年年初就有心转学cs,只是没人教,学业也繁忙,大概就是看完了《笨办法学python》《think python》,《编码》这个样子吧。&/p&&p&后来就想着利用在家的这段时间试试水,编程学得下去就转cs,不行就老老实实去干我的建筑。所以那个时候学编程给自己定的目标就是寒假能去找份实习。然后在知乎上看到萧丼陌说python加flask是最快找工作的,就从那本《flask web 开发》狗书开始学起。&/p&&br&&img src=&/v2-286eee5c9f932c952da558_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&p&开始的时候简直学这本书痛不欲生,一天啃个一两章,看不懂就先跳过去,咬牙坚持到第七章的时候就崩了,完全不知道该怎么继续学下去。因为学《think python》的时候非常顺畅,书里代码也都敲完了,我居然就天真地以为自己就有了python基础。而且那个时候我没有学git,只是把作者最终代码下载下来,对照着敲,怎么可能看得懂。&/p&&p&后来就开始回头补python基础,因为离开了学校,所有的书都需要我自己买。补基础这段时间我看的是《python基础教程 第二版》,手头还备着一本《python核心编程 第二版》翻阅,也是在这段时间里学了爬虫,爬了赶集网几万条数据吧,写爬虫的时候,看着屏幕上翻滚着一条条的数据,特别有成就感。&/p&&img src=&/v2-7d22b039ffe9ba2d4126d_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&p&用python写了一个2048,总算是积累了一些代码,通过写这个项目开始知道了什么是类,什么是面向对象编程。&/p&&p&十月份重新去撸狗书,这次学乖了,从目录前言开始一字不落。他要我学Git,就老老实实把廖雪峰的Git看完,学完了Git才知道,原来每章都有对应的源码,不懂git,初学者是不可能通过这本书学会Flask的,后来别人问我怎么学Flask的时候我都会再三跟他强调,先学git和github,不然别学这本书。&/p&&p&十月二十六号的时候,那天我生日,敲完了狗书,上传到github。有人可能觉得我速度太慢了,二十多天近一个月才学完这本书。因为我为了学这本书,同时还学了很多本其他书····&/p&&p&网络基础知识缺乏,就去买了《图解http》(看完了)、《图解tcp/ip》(看完了第一章基础知识)、《计算机网络自顶向下方法》(看完了第一章)。&/p&&img src=&/v2-0bdb869ce44e_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&br&&p&我的经验就是这样,如果你对某一个章节的知识点不懂的话,不如索性把挂着知识点的那棵树都给挖出来,效率还要高得多。&/p&&p&数据库那部分代码跑倒是跑通了,就是不太理解原理,看完了《python基础知识》、《python核心编程第二版》、《python核心编程第三版》所有关于数据库的章节,代码也敲了好几遍还是不太明白,后来买了一本《SQL必知必会》看完了一下子就懂了。&/p&&p&Bootstrap框架不知道什么意思,买了一本《Bootstrap实战》,没想到书还是看不懂,就去过了一遍html和css常识,知道Bootstrap基本就是把已经做好的css引入就结束了,没再深究。因为这类知识有太多的细节,暂时没打算学,逻辑上弄懂是个什么东西就好了。&/p&&br&&img src=&/v2-e32c551d98e52f0226d2bfb4cc766060_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&p&也顺便学了JS,买了三本书《JS DOM编程艺术》、《JS语言精粹》、《JS高程》,撸完了第一本,写得很好,第二本翻翻,不太习惯,第三本主要拿来查疑,翻阅的。说实在的,习惯了python的优雅简洁,再去看JS没完没了的大括号、分号,很不适应。&/p&&img src=&/v2-46b7fbc6de70e8f7e21e9_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&p&撸完了狗书之后就有点迷茫了,不知道该干啥,在家打了一个星期的lol,十一月份的时候去找武汉的小伙伴们玩耍,小伙伴们要么在准备即将到来的考研,要么在忙者找工作。我拉着他们一个一个聊天,看着他们在人生岔口上或迷茫、或失意、或焦虑、或安然,有了些想法。&/p&&p&武汉浪了一个星期后回家买了本董伟明的《python web开发实战》继续学flask。这本书很有意思,与其说是讲flask的,不如说是列了一个提纲,告诉你flask开发要用到什么什么,我学习方式基本就是这本书上提到了一个什么什么我就去把相关的文档过一下。通过这样学习了解了一些网站开发架构的常识。这本书我只看到第六章,后面的需要很多实际工程经验,我看不了。&/p&&p&学习的过程中我给狗书的网站写了一个上传图片,并将图片处理成头像的功能。自己设计编写代码要比照着别人的敲有意思多了。&/p&&img src=&/v2-1e95ad369_b.jpg& data-rawwidth=&520& data-rawheight=&293& class=&origin_image zh-lightbox-thumb& width=&520& data-original=&/v2-1e95ad369_r.jpg&&&br&&p&同时还买了《python cookbook》,强力推荐,很好的一本书。最大的作用是改变了我对python的看法,原来代码还可以这么写,当然是不可能看完的,印象里看了几十页吧。&/p&&p&因为我的学习都是自己闷在屋子里,自己敲代码,代码只跑给机器看,所以我的代码很不规范,命名注释什么的都很混乱,自己也知道这一点,所以买了本《编写高质量代码 python》来看。后来发现代码本身没改善多少,对python内部机制的了解深入了一些。&/p&&img src=&/v2-129b344f66c38c075e52b9ea_b.jpg& data-rawwidth=&520& data-rawheight=&293& class=&origin_image zh-lightbox-thumb& width=&520& data-original=&/v2-129b344f66c38c075e52b9ea_r.jpg&&&br&&p&那个时候感觉技术陷入了一个瓶颈,学习好像变成了拼积木,学习了某个模块,知道了怎么用然后就没了。所以就尝试着学底层,去读flask源码,用python写一个web应用框架,突然间,难度TM地暴涨,就好像我魂斗罗小米加步枪一直打得蛮顺,突然给我刷出一个CF里的僵尸。当时就蒙蔽了&/p&&p&根据之前的经验,我知道,我该去撸真正的基础了。去了一趟武汉之后对于找实习这件事也不怎么执着了,就准备去啃那些科班书了。&/p&&p&买了一本《C Primer Plus》和一本《C程序设计语言》跟着网易云课堂上的翁凯老师把c语言过了一遍,主要是把指针这一块儿弄明白,不求掌握c语言,只求能看明白。&/p&&p&这两本书都没看完,主要用来对照的。老师讲什么,就把对应的章节看了,主要看的是《c plus》,觉得写得详细些。&/p&&p&然后买了《大话数据结构》、《数据结构与算法分析 C语言》开始撸数据结构,把《大话数据结构》撸到“树”这一章之后在翻《数据结构与算法分析》发现这玩意需要很长时间才能啃下来。我在家的时间很自由,但也很有限,主要是为了大致了解CS到底是个什么玩意儿,把时间全花在这里不太值当。况且我这专业不学数学,“学完建筑之后就只会三位数以内的加减法了·····”(我老师说的)所以我还得回学校把数学这个前置技能给点了才好过来继续撸算法。&/p&&img src=&/v2-4e577de6a285faabbd9149c_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&p&在知乎上听人吹《深入理解计算机系统》已经听得够多了,再加上自己以前就看过《编码》,早就对计算机的内部运行好奇地要死,就选择了这本书来学习。&/p&&img src=&/v2-007d1cb35dbc34a7adb514_b.jpg& data-rawwidth=&293& data-rawheight=&520& class=&content_image& width=&293&&&br&&p&第一章,good,nice!很顺畅。&/p&&p&第二章,我擦,好难哟,咬着牙啃了。&/p&&p&第三章,马勒戈壁,不会要先去学个汇编再来撸这本书吧·········&/p&&p&在这里卡住了之后,我就绕道而行,选择了国内的教材,唐朔飞老师的《计算机组成原理》和配套的习题跟着网易公开课上的配套课程学习。基本就是学完了计算机组成原理之机器章节,就回过头来把《深入》这本书的第六章存储器给撸一边,学完了计算机组成原理之数字,就回过头来把《深入》的第二章再复习一遍。&/p&&p&同时学习两套教材,确实感觉风格很不一样。《深入》这本书重视知识的融汇与广度,什么东西都会给你提一下,在原理深度上不如《计算机组成原理》。《计算机组成原理》的课后习题基本是在问我上课讲的东西你记住了没?而《深入》这本书则是在问我刚刚说的东西你知道怎么用了吗?当然,两本书我都没学完,认知可能会有偏颇,总体来说,各有千秋。&/p&&p&学到这儿的时候就已经到了2016年基本就过去了,再后来家里的事情增多,爷爷也病重,小伙伴们放了寒假来找我玩,所以2017年的时候基本就没怎么学了,代码也不怎么敲了,到现在已经生疏了很多。&/p&&p&回首这半年,大概可能敲了五千行左右的代码,编程是我的生活主流,但并非全部,还打了500多场lol,刷了几百集电视剧动漫(以前从来不看电视剧的),几十部电影,不定时锻炼,写作练字,偶尔去驾校客串教练,刷知乎。因为没有社交,基本长期都闷在自己的卧室里,懒得出门,倒是硬盘里的片子换了一部又一部········&/p&&p&自己感觉最大的收获除了俯卧撑从原来的5个到了30个之外就是学习能力提高了不少。自学嘛,各种各样稀奇古怪的问题,全靠自己克服。&/p&&p&前天心血来潮,撸了一个微信小程序,是专门给一个妹子定制的日历程序。虽然基本不会js,当初只花了两三天撸了一遍《JS DOM艺术》,但还是只花了两个下午搞定了这个小程序,一个下午用来申请资质、读小程序的文档,搜集资料以及解决为什么我死活改代码,小程序TM的就是没反应的操蛋问题。一个下午用来边学js边写后台逻辑,边查css边写前台页面。当然,程序并不完善,算个Demo吧,还有很多想要的功能,设计的彩蛋都没写,去北京之后补上。因为腾讯爸爸并不接受个人开发者,得想法子绕过去,所以暂时没有上线,希望能在月底上线。&/p&&br&&img src=&/v2-c2a4d3e1afc_b.jpg& data-rawwidth=&512& data-rawheight=&910& class=&origin_image zh-lightbox-thumb& width=&512& data-original=&/v2-c2a4d3e1afc_r.jpg&&&br&&p&以上基本就是我这半年的学习经历。我并没有完全按照萧丼陌大神推荐的学习路线来学习,全部都是自己搞,不过学完了之后对照一看,路线基本差不太多。&/p&&p&其实我还想再写写,写写自学过程中一点经验。&/p&&p&例如怎么学习安装各种各样的框架、环境、包、工具?(初学者都知道,安装这些稀奇古怪的东西是多么痛苦耗费时间的事。)&/p&&p&怎么样搜集和选择学习资源,学习资料?(我其实不太懂为什么有人要花好几千去培训公司看视频。那些达内全套前端视频,麦子学院的全套python培训视频等等等,我硬盘这里都一套一套的。)&/p&&p&怎么样在实力还很水的时候忽悠别人挣点外快?(我挣的1000多基本全都拿去买书了。其实没有刻意去挣钱,主要是给自己一点动力。)&/p&&p&如何降低自学的难度?&/p&&p&········&/p&&p&不过不能再写了,在这个答案写完发布后,我就得把这台电脑给拆了送到快递店打包发到北京去,再写下去,人家就关门下班了······况且写了这么多废话,肯看完的人估计也没几个········&/p&&br&&p&最后来一张这半年买的书籍合影&/p&&img src=&/v2-5aedceeacc40cae7d857a_b.jpg& data-rawwidth=&4160& data-rawheight=&2340& class=&origin_image zh-lightbox-thumb& width=&4160& data-original=&/v2-5aedceeacc40cae7d857a_r.jpg&&&p&没错,我就是来晒书的!(???)&/p&
不知道算不算强答,零基础学了半年吧,没去找工作,只是接了些活儿,挣了些1000多的外快。明天就要去北京回学校了,今天在家整理书籍,感慨良多,写个答案,算是整理一下半年的学习过程。(写完了才发现这感慨确实有点多,这个答案是边整理书边写的,所以有…
干货:基础python Web ,主要是django框架&br&&br&(分类:编程社区):&br&&a href=&///?target=https%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.csdn.net/%3Fref%3Dtoolbar& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSDN.NET - 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图灵社区&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SegmentFault&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//python-china.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python China&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&酷壳

我要回帖

更多关于 外包过程控制程序 的文章

 

随机推荐