欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

学 Python 发现学一门编程语言很难,有哪些学好编程的方法或技巧?

程序员文章站 2022-05-15 20:38:28
...

回复内容:

最难的编程语言是哪门?
不是C++,不是Lisp,而是你的第一门语言
这门语言哪里最难?
入门最难。

比如下述代码:
print "hello world!"
作为一个从Python慢慢起步,学近2年的人,我分享如下,望用之而非误人子弟。

1.快速入门
《Dive Into Python woodpecker.org.cn/divei
这个教程是快速入门的典范,记得入职第一天主管就让我看这本教程,两周的时间看完,能掌握Python基本的语法。如果你需要更加哈皮些,可以尝试《Head First Python(中文版)

2.进阶入门
《Python核心编程2》,这本书分基础和高级两部分,最重要的就是扎实基础,去年买的这本书,已读不下三遍,每遍都是新的感受和总结。然后在进阶Python高级部分,如正则,多线程,多进程,网络编程等。

3.实战部分
在学习过程中,光看书是不够的,实战最重要,所谓学以致用,如在《Python核心编程2》中课后练习题/学一些小脚本/等,这里提供几个站点,用于Python脚本实例的学习:
(1). 代码分享列表 -- Python
(2). python代码库
(3). searchcode.com/
(4). github最佳选择,多search一些相关项目,看看人家的代码,抄*!!

4.高阶入门
Python高级部分的学习可参考《Python核心编程2》,不够这些是远远不够的。我们可以从以下书籍中汲取新知:
(1).《编写高质量代码:改善Python程序的91个建议
(2).《深入理解python》

5.Python库的学习
学习Python 常用的标准库以及第三方库,具体可以参考这里Python 常用的标准库以及第三方库有哪些?
网上热售的《Python标准库》个人建议最好不要买,去年入手一本,翻来看看让人后悔。这些知识Python官方文档已详尽,其该书翻译的’差强人意‘。

6.网站推荐学习
(1). 学习Python编程的11个资源 (这里着重推荐:Online Python Tutor:Python 初学者的好帮手,通过这个工具,教师或学生可以直接在 Web 浏览器中编写 Python 代码,并一步一步可视化地执行程序。Online Python Tutor)
(2).Python - 标签 (Cnblog 网友Vamei 的Python总结)
(3). Python - 中国Zope用户组
(4).PyZh — 一起写Python文章,一起看Python文章

7.应用开发
  • 网站开发-- Django,flask, tornado。(文档都比较齐全)
  • 游戏开发 --PyGame
  • 图形界面开发
  • 服务器开发
  • 大数据(目前较 )《Python自然语言处理》,《利用Python进行数据分析
这些在学习的过程中会慢慢接触,比较推荐Django。对于API开发,比较青睐异步网络框架tornado,对于小而美的web服务推荐flask更加pythonic.

Python学习道路平坦且遥远,我一直在探索的道路上,一步一个脚印地去诠释Python之美……

更新于2015/12/21

回想起来,从2013年初到现在,关于python的学习一直没中断,这里再推荐一些书籍或方法。

巩固类:《Python学习手册(第4版)》床头,案头,枕头都可必备之,基本涵盖python相关基础知识,对于巩固学习是不错之选。

python3:《Dive Into Python 3》或者看看 @廖雪峰 前辈的python3教程 Python教程 - 廖雪峰的官方网站

进阶类:《Python Cookbook 中文版,第 3 版》,《Python高级编程》,还有一本法国人写的《Python高手之路

在进行python服务器开发,总逃不过网络编程这个字眼,个人推荐书籍如下:
  • 《UNIX网络编程 : 第1卷:套接口API(第3版)
  • 《Python网络编程基础 : 使用Python构建网络程序的综合指南
  • 《Linux高性能服务器编程
个人觉得环境很重要,一个了良好的公司环境和开发环境能让你事半功倍,多和同行交流(除了同事,大牛外,还有github, 知乎,*等平台),切勿闭门造车。 求大家别推荐那些心灵鸡汤一样的书好吗?大家拍着胸脯说,那些书真的更有利于主学会编程吗?

题主说 Python 难,大家也不想想他为什么觉得Python 难。他有可能是觉得 Python 语法难吗?那不是违反常识吗?

明显是题主在编程的时候没明白自己到底在做什么。

建议题主买本小册子,学学 C 语言。真心的。花同样的时间学习 C 语言并不能让你更快的做出软件来,但是能更快的让你了解你到底实在干嘛。我也是半路出家学编程的,我很理解跟我一样半路出家学编程的人最终没学到能靠写代码上班的程度,不是因为智商低也不是因为记性差,而是他们没有办法吧代码和现实中计算机里发生的事情对应起来。很多书籍对这种情况的解决方法是想当然的,他们认为接口封装的越高级,语言设计的越“自然”,就越有利于学习。但实际上是,越高级的接口和语言,越有利于用户借由这些学习更复杂的知识,但并不有利于学习编程本身。

尤其是现在的高级语言,越是用起来简单的,越是混合了面向对象,模板,函数式编程等高级的编程模型。这些东西往往和最基础的东西混杂在同一本教科书里,让新手更是一头雾水。

题主你就去买本《The C Program Language》或者别的也行,认识一下内存和CPU,理解一下变量和变量类型是什么,if 是怎么回事,C语言代码是在说什么,编译又是把什么变成什么。这些东西能给你一个整体的把握,再回头看 Python 至少感觉上不会看一页半页不知道在说什么了。当你用 C 语言写过几行代码之后,你就能了解为啥会有 Python,它简单在哪儿,为了这个简单,它引入了什么概念。

以及,先别管什么面向对象,其实大部分程序员也说不明白那是个什么。

我原来有个同事,做生产的,业余比较爱好编程,他们部门里内部使用的小工具都是他用 VB6 写的。还被借调到研发来参与开发过 MIS 系统。那时候我是实习生,他其实水平比我高。有一次他要考什么证书,有天跑来问我什么是指针的指针……我以为他消遣我,没想到是真不知道。

另一位前同事大哥,据说本科学软开的,做过 java,做过.net,据说还 web,跑我们部门来写 C++,有次出差调 bug 调到后半夜了都,我寻思着帮前辈看看问题呗,然后就赫然看到这位老人家在代码里把 mutex 建在堆栈上想用来锁函数……你说他不能干吗?挺能干的。你说他外行?也不能算外行。但是……有些事情就是这样,你最开始没搞明白你在干什么,时间越久,麻烦就越多。 我一直反对Python作为第一门语言。

Python对有基本的程序概念的人来说很简单,但对于新手来说真不一定算简单。

(我说的新手,是一点点c都没学过的,你们很多人,其实在本科是学过c的,只是你没学会而已,但是很多东西是有概念的。)

写起来简单不代表概念简单,很多我们认为理所当然的概念,一个完全没有基础的新手是很难理解的。比如动态类型和duck typing,很可能一个新手连数据类型概念都没建立啊。比如自省,新手会有概念么?没有编程经验和数据结构概念的话会不会很难理解列表和列表解析为什么重要、字典有什么用?还有lambda,高阶函数,generator和Python的那一套OO机制等等?

我还是觉得,入门就两条路:一是汇编+C或Pascal之类的;二是SICP(scheme)。这两条路,一条从计算机入门,一条从数学概念入门,踏踏实实把基础打好,入了门之后再考虑其他的。

嗯哼~ 如果你会一门编程语言。学习PYTHON几个小时就可以拿来用了。
如果你零基础,对编程没概念。那么你可能需要3~6个月才能理解什么是编程。
对于非英语国家来说,理解编程要花更多的时间。因为编程本质上就是描述。但是非英语国家看着一堆抽象的英语字符把编程大大的神秘化了。 从SICP开始学起,这会让你更好的理解大学中的一些数学课程,甚至对统计产生兴趣....
然后你就可以丢掉Python了 顶楼推荐的《dive into python》是一本很糟糕的书,时至今日,此书对初学者或其他语言程序员都已无帮助

此书成书于10年前,很多内容已经过时(当然这不是重点)

重点是这本书根本没有为编程新手考虑过。例如本书第一个程序如下,我就不知道作者在想什么了,反正当初我看到后就崩溃了(当然啦,人家说了是为有经验的程序员编写的
def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)
首先我想说的是,对于想学好的编程的人来说,无论从哪一门语言开始入手,语言的本身其实并不是我们最应该的关心的,至少不是作为一个初学者首先关心的。也可以说开始让你觉得困难的地方不一定是语言的本身(如语法syntax等),而是整个编程的思想和编程的结构。事实上你所学习的python语言的语法和操作方面,比起c/c++和java等语言来说呢,算是对于初学编程的人来说相对比较简单的入门的了。
在学习编程之前,你的理解什么是编程为什么我们需要编程?了解好了我们要学习的对象我们才能知道从哪个方面下手把它学好。至于我自己的理解呢,狭义上编程其实就是对于不同语言写出不同的代码(什么是编程?),而编程的目的就是通过编程语言来和计算机交流并且操控它为我们工作,实现我们需要的东西(算法algorithm等)(为什么我们需要编程?)。然而具体根据我们需要实现什么来选择编程语言,比如对于安卓来说,就是java,xml等,对于ios来说,就是object c之类的。因此正如我之前所描述的那样,编程语言是为我们与计算机交流所服务的,就像我们学习世界上某个国家的语言是为了与某个国家的人交流,而不是为了学某种语言而学习某种语言的,语言不是我们学习编程的最终目的,恰恰是开始!
在了解了我们为什么要需要编程以后呢,我们再来讨论下该如何把它学好。其实编程的入门呢,应该是一个学习编程思想,深入理解什么是编程的一个过程。而至于选择什么语言呢最开始其实并不是那么重要,甚至可以运用伪代码来学习,但是为了方便初学者学习,能实际实现的语言更加能够让初学者理解编程。这也就是说为什么大多数学校(至少是大多数美国computer science(计算机科学)本科)的第一门课叫做intro to computer science with XXX language(用XXX语言实现的计算机科学入门)。再次不厌其烦的声明,这里的with也是说明了后面的xxx语言是为了辅助我们学习计算机科学入门的工具,计算机科学入门才是我们的重点,而不是叫XXX语言课。这里也不得不吐槽,一些国内的计算机培训机构为了能迅速培养程序员而专门鼓吹某某语言强,而只专注于培养学生编程语言学习的本身。这样培养出来的只能是仿照他人的程序调用者,而不是自己曾经希望的计算机科学工作者。
好了,说了这么多大话,下面来一些干货,让你对计算机科学入门能够快一点。
计算机科学入门的第一课除了我之前说的那些为什么要学编程,什么是编程的一些理论话以外,第一个实际的东西就是所有程序员都知道的Hello World(至少对于大多数情况下来说)。
在python中就是: print "Hello, World!"
在java就是:public class ClassName {
public static void main(String [] args) {
System.out.print("Hello, World!");
}
}
在c++就是: #include
int main{
std::cout return 0;
}
这三个呢其实表示的都是同一个意思,就是通过系统输出string(一串字符串)


有输出就有输入,比如input() (python), cin(c++)等。输入与输出是几乎每一个编程语言都具备的,也是人与计算机交流最基础的手段之一

然后一般就会开始介绍数据类型(data type),比如int,double,long,boolean等(在python中相对简单,因为在定义变量(variable)的时候系统能够自动识别对变量的初始化值或者赋值值的数据类型)。这里要强调虽然数据类型看起来很简单,但是我们知道无论人与人交流还是人与计算机交流,信息的交换是最基础的目的,而在计算机科学中信息的交换基于数据的交换,所以数据对于计算机科学十分重要。而随着今后的学习,要逐渐掌握并熟练运用各数据类型,明确什么时候运用什么数据类型等。甚至今后还会学到抽象数据类型(abstract data type)。

紧接着就是学习一些判断语句(if/else语句,switch语句等)和循环语句(while循环, for循环, do while循环等),这里面呢涉及一个十分重要的数据类型(boolean布尔值),简单地就是对和错(truefalse)。虽然boolean的基本概念很好理解,但是boolean是布尔代数的基础。基础的布尔代数在离散数学中有所涉及,所以这里强调一点,对于计算机科学学生或者想学好计算机来说,数学十分重要,尤其是离散数学。不像很多大学或者培训机构对数学的淡漠态度,相反他们应该重视数学思想在计算机学习中的培养。离散数学是计算机科学的基础,微积分线性代数等是离散数学的基础,所以大学中所安排的数学课程不应该受到学生和老师的忽视。在今后无论是数据结构还是算法的学习中,数学的基础都能很好的帮助你学习好计算机科学。

随后就是学习函数(function)的概念。函数本质上就是将我们与计算机交流和操作的过程抽象形成方便我们多次使用的一种方法,所以函数在编程中也叫方法(method)。可以使我们在做相同类型的操作的时候,能够有一个类似的方法来解决,而不是每次都重复输入大量的类似内容。在计算机科学中,化繁为简是一个很好的习惯,而函数正是帮助我们简化程序的一个基础。函数通常由返回类型或者函数的数据类型(我们希望通过函数获得的),参数我们给予函数所需的),和函数的主体函数是如何运作的)。函数也恰好体现了人与计算机交流的一种途径,人给予函数参数,函数给予我们返回值(或者有时函数是void类型,也就是不返回任何值,但是void通常也是会完成我们需要的特定操作),也恰好是信息交换的一种方法。


在学习c++的时候还会涉及到指针(pointer)这个概念,这是在c++中一个很重要的概念,也以后需要注意的东西,等你自己学到就会明白。

在学习完我之前所提及的那些(虽然我没有全部详细涉及)比较基础的计算机编程的概念后,你就会涉及OOP(object-oriented programming 面向对象的编程)在高级编程语言中大量涉及甚至是基础,也是今后的编程趋势。实际上只运用之前所讲的东西进行编程的话,可以狭义的成为面向过程的编程。实际上OOP是在函数之后,又一个简化我们编程的一种手段,我们将事情更加抽象但更加方便。通过定义我们自己的数据类型, 建立对象(object)来实现对数据的管理和操作。通过对象来和计算机进行深入和有目的性的交流。面向对象编程的三大核心(重要但不仅限于):封装(encapsulation),继承(inheritance),多态(polymorphism)。封装就是把我们定义的数据类型组装成一个整体,从而形成一个个可用的对象(有点像工厂流水线上的模具),继承就是获得某个或某些父类的一些特性在新的子类中运用(就如同子女从父母身上遗传的一些特性),多态就是实现我们所规定的一些抽象的可以运用或者重新定义的方法(简而言之就是一个事物可以在不同对象身上呈现的多种状态)。

面向对象编程不仅简化方便了我们的编程,同时保护了数据在交换过程中的隐私。类似private的,只能是自己对象才能知道和拥有(就如同自己的钱包只能自己掌控一样),类似public的,可以展示在main函数(主函数)中为其他数据所用。由此清晰地界定了数据的使用界限,也是编程历史上具有划时代意义的一个进步。

说了这么多,只是简单的描述了计算机的入门脉络,在以后还会学到数据结构(如何管理我们的数据),以及算法等等。希望能对你有所帮助。

至于技巧,我觉得最重要的就是你学习编程的方法,也就是我反复强调的,不仅仅专注于编程语言的本身,而是要随着深入地学习,不断掌握和理解编程的主要思想。

推荐些网站给你:
python学习网站: http://www.codecademy.com/

计算机科学入门课程:CS 61A Fall 2013: Structure and Interpretation of Computer Programs
这是加州大学伯克利分校的入门课程,开始是用python教的。 对不起我来晚了,我第一次接触 Python 的时候也没觉得编程简单。

除了大学用 C 写过作业,Python 应该算是我接触的第一门语言了,当时在某一家在知乎上很火的公司实习,我不说名字了,以防口水。我记得当时写代码觉得很困难,完全不知道怎么下手。我估计你现在的情况跟我当时类似。然后我用了一个笨办法,这个方法或许对初次接触编程的人有帮助:

找一些有完整功能的代码,把跑起来实现这个功能,然后给代码里面看不懂的内容插资料也好看书也好,在代码里面加上注释。嗯,这样你给几个项目加上注释之后,应该也就知道怎么写了。 请放弃,一个东西的难度就是用来挡住不符合规格的人的。连py都觉得难不太适合在业界混。学 Python 发现学一门编程语言很难,有哪些学好编程的方法或技巧?

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 学 Python 发现学一门编程语言很难,有哪些学好编程的方法或技巧?
  • 专题推荐