九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

初学编程该怎么学?——对初学者程序设计语言学习的思考(2)

初学编程该怎么学?——对初学者程序设计语言学习的思考(2)

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

作为学习编程几年的并且现在还靠着号称世界上特别复杂的一种语言C++活着的人来说,我也能在这些简单的图形中绘制中找到编程的乐趣,这就是turtle的乐趣了,我想初学者能找到的乐趣会比我更加多吧。

其实,对于初级编程来说,最主要的就是流程的控制,而流程的控制也就那么几种形式,这里有个我以前为Python写的流程控制表,其实实际上各类语言都差不多:

电脑,程序基础模型:

 

基本程序执行流程

 

  1. 顺序执行:

    Python的表现形式,一条接一条的语句

  2. 分支:

    Python表现方式:If-else

     

     

    python表现语法形式:if-elif-

 

3.循环:

python语法表现形式:for-in

 

各类语言在这个层面上除了语法的略微不同外,基本上是一致的,这些确实培养计算机思维逻辑的基础,也可以算是编程的初步知识,起码Small Basic用于熟练这些知识还有有用的,虽然它的设计原本是面对小孩子的。不要因为Small Basic是面向小孩子设计的就觉得它功能弱到学习功能都不够,事实上,因为SB对图形的重视,使得对图形控制如此容易,反而可以轻松的做一些很有意思的事情。

比如下面的例子,(超炫的文字显示,来自于http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/b1b383c1-6b13-49c0-bf29-00de86103ac6

很炫的效果,才区区几行代码:

GraphicsWindow.BackgroundColor = "midnight"

gw = GraphicsWindow.Width

gh = GraphicsWindow.Height

GraphicsWindow.FontSize = 100

Turtle.Move (100)

Turtle.Turn (1*1)

While ("True")

For i = 1 To 50

GraphicsWindow.SetPixel(Math.GetRandomNumber(gw),Math.GetRandomNumber(gh),GraphicsWindow.GetRandomColor())

EndFor

Turtle.Move(1)

GraphicsWindow.BrushColor = "Black"

GraphicsWindow.DrawBoundText(30,110,gw-20,"Small Basic")

 

EndWhile

 

这是几乎每个人执行完后都会说"Impressive"的程序。

再来一些更多的SB程序图:

 

大家可以到(http://social.msdn.microsoft.com/Forums/en-US/smallbasic/threads)

中过去看看,其中有很多很有意思的例子。

其实我说了这么多,并不是鼓励大家都去学习Small Basic,仅仅是为初学者指出一条路,我觉得编程本质的复杂度来源于数学,思维和逻辑,不在于程序语言,即便是如SB这样的kids语言,在合理的思维逻辑下,一样有强大的效果,程序语言的本质并没有改变。

 

"Small Basic is a project that's aimed at bringing "fun" back to programming."MS如是说,的确是,什么时候我们失去了编程的乐趣了?为什么我们用的都是这样庞大的难以理解的语言?因为商业的需求,一个一个现代化的软件都是如此的庞大,犹如新特性的集合体,大量库的堆积。。。。让我们失去了太多本来该有的乐趣。

当然,假如仅仅局限于SB语言,那么用途毕竟还是比较有限的,教育意义也就没有那么大了。。。。虽然我感觉到能从SB中获得乐趣,但是。。。人还是要吃饭的,所以,对于正的想以编程作为职业的人来说,从Python开始,也还算是不错的主意(仅仅从学习角度,目前国内对Python的需求还是比较有限)。当时我处于这个考虑,准备用PyQt实现一个与SB一模一样的turtle库,结果经过查阅,发现Python的标准库中已经附带上一个了,呵呵,一如既往,Python的标准库之丰富与兼容并包简直不可想象。。。。。。。。你能想象到哪天C++的标准库里面加上一个这样的画乌龟的库吗?-_-!

因为Python标准库中就带有turtle库,所以我们完全可以用Python的语法来实现上述功能,同时还能使用一些Python比SB更强大一些的功能(Python的turtle库功能更多一些),并且,还有同时熟悉Python语法的功效。假如说Python是作为初学者迈入程序设计大门的合适的第一步的话,我认为Python的turtle库的使用,可以作为学习Python的合适的第一步。首先熟悉的是程序的思维和逻辑,其他的仅仅是这些的延生。(哪怕上升到DP,OO层次,这些还是不可或缺的基础)

这里给出原来用SB实现的那个最复杂的圆环结构的示例,其他的就省略了。要说的是,虽然用Python可以用更熟悉的语法,但是回到Python的编辑器来后,发现SB那个IDE也真是'Impressive'啊。。。

源代码:

import turtle

tr = turtle.getturtle()

tr.shape("turtle")

 

tr.speed('fast')

IN_TIMES = 40

TIMES = 20

for i in range(TIMES):

tr.right(360/TIMES)

tr.forward(200/TIMES)

for j in range(IN_TIMES):

tr.right(360/IN_TIMES)

tr.forward (400/IN_TIMES)

 

 

#tr.write(" Click me to exit", font = ("Courier", 12, "bold") )

screen = turtle.Screen()

screen.exitonclick()

 

可以看看Pythonturtle库中的example代码,其操作复杂到让你会误以为这是Flash完成的效果,其实,这都是乌龟的爬行而已。呵呵,要想以一个乌龟完成很多事情,除了需要足够好的数学基础外,还需要一点想象力。。。。。。。当然,还有美感。Gregor Lingl明显都不缺这些,所以他完成了一个很有意思的turtle库及很有意思的示例。

    turtle熟悉Python的基本语法估计是没有问题并且充满乐趣的,乐趣对初学者来说可是最重要的东西。并且,当你想用其实现更复杂逻辑的时候,也不得不用到更多的Python特性,这个自然过程会促进/巩固对Python的学习。这也许是除了单独学习一门语言外,另一个初学者可以尝试的入门之路,充满乐趣的路途。

write by 九天雁翎(JTianLing) -- www.jtianling.com

分类:  随笔 
标签:  Python  Small Basic 

Posted By 九天雁翎 at 九天雁翎的博客 on 2009年07月19日

前一篇: 初学编程该怎么学?——对初学者程序设计语言学习的思考(1) 后一篇: 异常处理与MiniDump详解(3) SEH(Structured Exception Handling)