他人学习Python感悟
作者:王一
链接:https://www.zhihu.com/question/26235428/answer/36568428
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
很多程序员,在学习一门新技术的时候,都会陷入像题主你这样迷茫的状态。我也一样。而且不止陷入一次两次。比如学习新的框架的时候,学习新的语言的时候,学习移动开发的时候。
这事儿多了以后,我就在想。不对,肯定有哪里不对,看着StackOverflow也好,Github也好,上面那么多的高手,回答各种问题。而很多人居然还是在校的学生。我有种感觉,这肯定是我的方法出了问题,肯定是在某个很深很深的根源上出了问题。大家都是人,一天三餐吃喝拉撒,学生虽然自由时间多一些,但是我们毕竟也干了这么多年的程序员。新东西每天都在往出冒,不可能有人能那么快得全部掌握。而现实是确实出一种新技术,瞬间一堆高手就冒了出来。这事儿,有问题。
于是我就开始找问题的根源。其实这事儿没这么复杂,只要静下心来,不要看到一个新技术就急慌慌的去学,很快就能反映过来。根源其实就是两点:
1. 计算机技术的底层原理从来没有变过。
2. 任何一门新技术都是人为写成的。
这是我在迷茫了N次后,静下心来,制造出的自己在技术海洋上的指南针。对不对好不好不敢说,大家批判这看吧。
在学习任何一门新技术新框架新语言时,我会先把这两条引用到整个学习过程中去。
1. 计算机的底层原理从来没有变过。
网络需要通讯原理,编程需要数据结构与算法。一个列表的排序不管你是JAVA是C是PYTHON,哪怕你调用的函数名字千差万别,最后的算法其实疏通同归。你大可不去查文档自己写一个出来。一个一个网页上得表单,不管哪个框架哪个语言哪个MVC,最后都要归于一个HTTP的POST,最后都要连接上数据库,写进去存起来。
这就是原理不变。你要先把这个道理时时刻刻的记在心里。当遇到看不懂的东西,迷茫的时候,去想想这个函数到底做了什么,然后从那个不变得原理反推回来,大部分时候你会发现很多新技术不过是早已有的技术的重组与包装而已。
2. 任何一门新技术都是人为写成的。
这里的新技术主要指的是目前百花齐放的各种框架啊库啊类啊语言啊一类的。一开始我也很很多人一样,觉得哇好牛好酷好高大上。但是慢慢的,我有一种被欺骗的感觉,这种感觉类似于某类产品持续的营销,今天我们有这个口味,明天我们有哪个口味。区别只是一个加了蜂蜜一个没加。
因此在总结了第一个‘原理不变‘之后,很自然的我推出了第二个’人为写成‘。意思是不管看起来多么新潮,多么高大上的语言,它首先要遵循第一条原理不变的道理。而如果在使用它的过程中,发现了某些有违第一条的感觉函数,方法,逻辑。那么百分之百这个函数方法逻辑只是做了人为的包装而已。去看文档,不要纠结为什么,作者当时可能脑袋进水,不要跟着他一起跳坑。
简单说,什么Django, Flask, Web.py,CSS, HTML5, ...别被那些炫名词的给洗脑了。原理原理原理,本质本质本质!不要诚惶诚恐,就当它是烂泥巴搓圆弄扁踩两脚,抱着这种心态来学才对。
简单解释了一下我草草归纳的两条规律。回到答主的问题上来。
你的第一个问题是我该干什么?很简单,做第一个网站,做第二个网站,做第三个网站。做网站做吐了就去做做手机APP,做的无聊的就去玩玩爬虫。记得把你所有写得东西都扔到GITHUB上去,每天在SO上答问题问问题。就这样。
不要做到完美。记小时候玩泥巴么?就那么玩。堆个城堡起来,踢两脚,扔一边儿,再堆一个长城起来,再扔一边儿。玩的时候时刻记得我说的那两条规律。
2.在实际工作中,python工程师工作到底是做哪一块的?(尽可能的详细点)
亲,请先找到工作。
3.如果从事django开发,还需要哪些技能?要学前端么?
你学的不是Django开发,你学的应该是计算机科学中,网络应用方向的一部分。这才应该是学什么Php网站开发,Python开发真正应该叫的名字。 Django只是你工具箱里的一个工具而已,比方说它是把锯子。这个锯子的牌子叫做Django. 其他生产锯子的厂家包括但不限于Php, Flask, Java, Go....但是他们的本质都是锯子。都可以做一样的事情。有的厂家在锯子上安了个小手电,于是它的牌子的锯子也许多了一些功能。这就是框架与框架的区别。
所以,你需要的不是Django开发的技能,你需要的是网络开发与管理的技能。如果题主专注于做网站的话,相信我,数据库数据库数据库!一个设计良好,结构合理的数据库,是任何优秀网站的前提。
4.如果想去实习需要达到什么水平?
别想,别问,做吧。当你能按照上面说得,持续不断的更新你得个人项目,持续不断的在SO也好,V2EX也好上累积你的资历,持续不断的,抓住计算机科学的本质去学习。实习?这是个事儿么?
作者:Kyon N
链接:https://www.zhihu.com/question/26235428/answer/62892102
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这是个去年的老问题,可能题主的疑惑已经解决了,这个答案主要写给有类似疑惑的人看。如果你学编程时感觉要学的东西很多,毫无头绪,可以来看看这个回答。
题主的这种情况,我称之为「深入学习综合征」。
具体症状表现是:想学个什么或是写个什么,于是就开始学习相关资料,发现好多东西要学啊,头大……学着学着发现还得学另外一个领域的知识,我勒个去……
这不是正确的学习方法啊,正确的方法是增量开发,用啥学啥嘛!!
回想高中时学数学的过程,一开始学平面几何的时候,我们也没去学解析几何的方法吧?刚学增函数、减函数的时候,我们也没用导数解决问题吧?学编程也类似,对于任何知识,先只深入到现在够用的程度,把东西码出来再说。
就拿题主写个Blog这个需求来举例,我现在自己模拟一下学习过程:
Python,俺会import,会用dir()查看属性,会用A.a()调用,好,够了。
Django,看起来好麻烦啊,问大牛A,他推荐了Flask,额,怎么还是有点麻烦,又听说有个Bottle,恩,就这个吧。
MySQL,靠,SQL语句怎么这么蛋疼……诶?有个号称NoSQL的数据库叫Mongo,就它了。
决定用这些东西来写,接下来就开始一步步码:
第一步——用Bottle显示一个页面(上网找段代码,依样画葫芦):
from bottle import get, run @get('/') def homepage(): return '<p style="color:red">Hello World!</p>' run(host='', port=25252)
搞定了:
第二步——从数据库里拽个东西出来显示:
上网搜「Mongo建立数据库、Mongo插入数据」有真相,先往数据库里插几条数据再说:
db.test.insert({"text":"first"}) db.test.insert({"text":"second"})
然后搜一下「Python Mongo」找到pymongo库,加到代码里用:
from bottle import get, run import pymongo db = pymongo.Connection(host = "127.0.0.1", port = 27017).mydb @get('/') def homepage(): rst = "" for i in db.test.find(): rst += "<p>" + i['text'] + "</p>" return rst run(host='', port=25252)
好了,现在网页显示了我这个blog的头两篇文章:
诶,我们可以发现,现在我用db.test.insert({"text":"third"})这条语句,可以给我的blog插入新文章了(虽然还不是在网页上操作),而我的网页也可以显示我的所有文章,这样一个最简陋的blog不是已经有了么?
我做以上操作只花了5分钟,写了10行Python代码。就算是完完全全的小白,有那么两三天写出这十行不过分吧?
接下来,和上面的操作类似,每次确定一个很小的目标,比如「我现在想把网页上文本框里的内容用提交按钮传到服务器上」,然后百度(连Google都不用搬出来!),在半个小时内解决目标,再继续下一个目标……搞着搞着,就会发现Python好像越来越熟练了,前端也掌握了不少技巧……这不就慢慢学会了么?
基础的、系统性的知识,可以在之后慢慢补充,凭借上述过程,写个最简陋的blog完全不是问题!接下来的事情,只需要锻炼两种能力就行了:
①搜索的能力
百度当然不能解决所有问题,之后还要去Google,还要去StackOverflow,看官方文档……
②发现问题的能力
比如说,上面代码里抄来的 @get('/') 这句,@符号是干什么用的呢?为什么这句话能够让下面那个函数返回网页呢?发现了这些问题,上网搜索,一点点看,就越学越多了。
(写于部署一个PHP网站被恶心得要死的晚上,人生苦短,去XXX的PHP!!)
作者:rush zerg
链接:https://www.zhihu.com/question/26235428/answer/32443656
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我画个简图,这个图有点山寨,其实是招聘的提问参考(大牛们请勿吐槽,这真的是简图):
言归正传。
本答主使用django二年有余,曾经用django做管理后台、做cms、做pv几千的问答网站,和题主一样,也是从0基础开始学。我很能理解题主的困惑。
1.请问下一步我该干什么了?(我真的是不知道该往那个方向?阶段?)
你处在初学的阶段,就算你天天跟django打交道,前几个月都是初学阶段。
你已经觉得很迷茫了,说明真正入门了。我的建议是,你该准备一些web开发的基础知识了
a、你应当了解一下某种数据库软件,mysql、Mongodb均可,推荐mysql
至少应该具备独立安装配置mysql数据库、和基础的SQL语法常识
b、你应当了解一下常见的HTML标签和语法,应当了解常见的css样式,基本的JS语法(至少能用JS写个ajax收发吧)
推荐你看看http://getbootstrap.com/">bootstrap
花两三天时间,掌握bootstrap以后,你就可以独自实现前端
c、你应当了解,django不是服务器,只提供服务。因此,学习nginx、或是apache是必要的。(IIS不了解,不过题主应该不在windows下部署网站吧。。。)
d、其他的,你自己慢慢会发现
2.在实际工作中,python工程师工作到底是做哪一块的?(尽可能的详细点)
我觉得你是想问django工程师吧?我们对django工程师要求较为全面(但是并不难),主要就是服务器后端的这些业务逻辑了,顺便,也要做一些full-stack的工作。具体点说,django工程师和产品沟通,确定网络服务的功能,然后独自设计数据库,设计网站结构、URL结构,独自完成网站的所有服务器逻辑;还要和前端交流,协助他们把想法变成代码。
如果你真的是问python工程师,他们要干的就多了,写服务器、写爬虫、写运维工具、做数据分析、有时还要改开源的项目
3.如果从事django开发,还需要哪些技能?要学前端么?
前端要学,但是只需要能改简单的css代码、还有就是javascript越懂越好
其他技能:在(1)问中回答了
4.如果想去实习需要达到什么水平?
题主你没说哪家公司啊!!
鉴于国内使用django的公司真的很少,这个真的很难说。
不过之前的标准为例:
pythonic 必须熟练掌握至少一类python网络框架,如django、tornado或其他 必须熟悉异步编程,掌握twisted框架加分 必须熟悉并习惯在Linux/Unix下进行日常开发,了解Linux下的服务器级应用程序,如Nginx,MySQL/Postgresql, Redis, Sphinx等 必须掌握javascript、jQuery,具备基础的前端代码设计能力 必须掌握、善用UnitTest进行开发, 熟悉MySQL或Postgresql, 能够编写DDL,DML, 熟悉HTTP协议,了解RESTful
如果题主你学习的首要目的是就业,可以考虑PHP,需求大
Henry