程序员相关OMOOC.py程序员

设计师学编程?从五个思维训练开始

2015-04-18  本文已影响2512人  Kidult

编程语言虽说跟自然语言类似,但有一些本质的区别,如果不理解这些区别,编程的槛始终过不去。这篇文章尝试把几个最要紧的概念提取出来咀嚼消化。

一、变量 vs 替身

例如:想要写个程序,实现:周一至至周日显示不同的早餐菜单。

我们需要有一个东西来代表“今天是周几”。可能性有 7 种,但是活在当下的只有 1 个,于是需要一个“替身”,框定它的“变身”范围是周一至周日,然后让它根据条件变变变……

这是对编程思维的第一个训练:【抽象】将某种类型、某个范围内变化的“实例”,抽象为一个“代号”。

坑:

填坑:

二、数组 vs 分格抽屉

替身虽好,但是有时候还是不好管理,执行命令起来效率有点儿低,因为同质性不够高(虽然替身都是人,但可能年龄、爱好、性取向、左撇右撇、甜豆花派咸豆花派等等都不尽相同)、以及没有按顺序排列。

于是我们需要一个更“军事化”的组织——数组。数组就像一个分格抽屉:



从外面看来,一个抽屉就是一个东西(里面能装很多东西);打开抽屉,里面是按照顺序放置的同一类东西,每一格都有位置编号(指针)。

这是对编程思维的第二个训练:【压缩】对同样的东西,折叠再折叠,收纳再收纳。

坑:

填坑:

数组一直是我的槛,回头需要再补看视频和笨方法,专门写写数组的笔记。

三、判断+循环 vs 防伪点钞机

嗯?点钞机?

点钞机工作特点:根据设定的条件,重复同一步骤。这正是 “判断+循环”的精髓。感谢它将我们从机械劳动中解放出来。

下面的代码虽然只有几行,但是综合了变量、运算、循环判断、数组等等,浓缩是浓缩,坑也很多……

for shapes in shape_list:
    if shapes[1] == "circle":
        canvas.draw_circle(shapes[0],Radius, 1, "Black",shapes[2])
    else:
        canvas.draw_polygon(shapes[0], 1, "Black",shapes[2])

以上对编程思维的第三个训练:【自动化】找出条件,识别共同步骤,循环处理,实现量变到质变。

坑:

填坑:

四、函数 vs 百宝袋

每个函数,都是哆啦A梦百宝袋里面的一件宝物!

宝物的特点是什么?实现大雄的一个愿望。至于怎么实现的,大雄并不用担心。当然,想实现多个愿望,最好不要指望于一件宝物,那样往往会出bug……

说回最开始一周早餐菜单的例子。要 print 不同的菜单,我们需要先判断今天是周几,这件事可以写到一个函数 whatIsTheDay() 中。以后一旦要做这件事,就 call 一下这个函数,外包这项任务给它,自己就翘着二郎腿等着它给出结果。一个程序中有多个函数,也就成了一个百宝袋。

函数的强大之处还在于,可以通过参数实现定制化需求。比如我们在函数 whatIsTheDay(year,month,date) 加入三个参数 year 、month 和 date ,告诉函数:“我想知道 某年、某月、某日 是周几 ”

以上是对编程思维的第四个训练:【模块化】分产承包,责任到户;结果导向,过程自理。

坑:

填坑:

五、类 vs 招聘职位

每一个类都包含属性(变量和值)和行为(函数)。对比一下:

JD(招聘职位描述):

WXG01-微信高级交互设计师(广州)

工作职责:

- 参与微信相关产品从概念到原型的设计过程,输出相关设计文档;
- 对产品持续进行设计优化,提升用户体验;
- 协调和推动可用性测试及用户研究,以验证现有和将来的功能设计;
- 负责设计前瞻性的相关研究。

工作要求:

- 工业设计、心理学、计算机、视觉传达相关背景,本科及以上学历;
- 3年以上工作经验,主导过1000万+用户的移动互联网产品的设计,具备多领域设计工作相关经验,如产品设计、硬件设计、视觉设计等;
- 对互联网交互设计有深刻理解,具备完整的理论和技术体系;
- 优秀的产品意识,良好的全局观、前瞻性和判断力;
- 同理心强烈,擅长换位及独立思考,卓越的情景还原能力;
- 优秀的沟通、组织和项目管理能力;
- 性格乐观向上,兴趣爱好广泛。

类:

class Character:
   def __init__(self, name, initial_health):   # __int__ 初始化对象
       self.name = name                 # self 是新的对象的引用
       self.health = initial_health # name 和 health 是self对象中的域(field)
       self.inventory = []
       
   def __str__(self):
       s  = "Name: " + self.name
       s += " Health: " + str(self.health)
       s += " Inventory: " + str(self.inventory)
       return s
   
   def grab(self, item):            # methond defines the behaviors of objects
       self.inventory.append(item)
       
   def get_health(self):            # method 所有方法的第一个参数都是self
       return self.health

工作要求其实就相当于类的“属性”,作为这类人,本身需要具备什么样的条件和素质;工作职责相当于类的“行为”,这类人要干什么事情。

类和函数的区别在于,类只能操作某个类型的对象,而不能通过其他方法直接被调用。

面向对象编程的强大之处,对于一个类,理解其接口和已实现的方法,就可以使用了。

**这是对编程思维的第五个训练:【面向对象】:打包成型,封装上架 **

坑:还没有真正练习过 囧,待踩。

今天先到这~ 可能有很多不恰当的类别,请各位程序猿轻拍~


00的公众号,更多分享酝酿中……
上一篇下一篇

猜你喜欢

热点阅读