本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 1836|回复: 2
打印 上一主题 下一主题

七周七语言系列活动之六 “Scala” - GDG主办

[复制链接]
跳转到指定楼层
1#
发表于 2013-1-14 20:35:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
活动介绍
预计参加人数:40人
活动时间:1月19日 9:00-18:00
参加本次活动的新会员,可以获得杜邦莱卡面料的GDG精美纪念T恤一件。

在大部分人的职业生涯中,主要由于机会的原因,只是接触到了少数几种知名的编程语言。
语言变化等同于思维变化
By Craig Riecke (East Syracuse, 美国纽约)
如果你认同Sapir-Whorf的理论,你会相信语言的选择会影响你对这个世界的看法。
"当你参加完此活动,你无法成为其中任何一门语言的专家,但你将知道每门语言所提供的独特的东西"
本次活动提供了一些广受青睐的或被重新探索的先锋语言,因为这些语言提供了在未来应用和计算机系统开发中所需要的新的编程范式以及更高的开发效率。
几乎没有人能充分地了解所有这些语言,即使你对所有这些语言都有一些了解,这也是一个让你获得一些额外的见解的机会。
将大家在学习任何新语言时所常问的问题汇总,并通过这种方式帮助大家学习新语言,这些问题包括:
这门语言的类型模型是什么?
这门语言的编程模型是什么?
你如何与这门语言交互?
这门语言都有哪些决策构造与核心数据结构?
这门语言都有哪些独特的核心特性?
每个语言的活动为一天,分为上午公开课和下午的实践活动。
然后在上午的公开课结束之后,将在下午确定具体的题目,指导参加者完成学习作业项目。
为了保证确实是想学习的人来参加,也为了刺激参加的专注效果,并提供良好的服务。每门语言活动的收费为50元,但是在完成当周的作业后可以全额返还。
未返还的金额,将作为奖金池累计,由组织者购买奖金奖励完成作业最好的三个人。
目前暂定7种语言如下:
Golang,node.js,CoffeeScript,R,Scala,Python,Ruby
也可能考虑Objective C,Lisp,Dart等。
欢迎精通以上语言的高手自荐,联系stingchen@topgeek.org

本次活动讲师介绍
张   赟: Autodesk 软件工程师                 微博: bbsmrdj
何晓乾: Autodesk 软件工程师                 微博: 何晓乾

活动形式:
1 上午为基础课程,讲师教授,学习语言基础知识

2 中午休息,午餐。(由于公益性课程,不提供午餐,可以由志愿者帮忙代订)

3 下午为Coding Dojo,实践学到的语言知识
分组练习,每组合作完成一个小项目。
完成后,每组演示代码,并由讲师点评。

4 课后作业
讲师将分派一个课后作业,每个人必须在一周内独立完成。并发布在指定的网站上,由讲师进行评估。评估合格,可以返还50元。

参加者必须自带笔记本电脑。
首次七周七语言-Golang 35人参加,21人交押金,13人完成
第二次七周七语言-Python 65人参加,38人交押金,24人完成
第三次七周七语言-R 50人参加,16人交押金,11人完成
第四次七周七语言-Ruby 28人参加,16人交押金,7人完成
第五次七周七语言-node.js 40人参加,11人交押金,8人完成

七周七语言 QQ群:62498052




预习资料简介
Scala编程语言近来抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。
Christopher Diggins认为:
不太久之前编程语言还可以毫无疑义地归类成“命令式”或者“函数式”。Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。
根据David Rupp在博客中的说法,Scala可能是下下一代Java。这么高的评价让人不禁想看看它到底是什么东西。  
Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。用David Rupp的话来说, 它也可以访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。
这让Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框架,Scala会经常性地针对这几个版本的Java进行测试。Scala以BSD许可发布,并且数年前就已经被认为相当稳定了。
历史
洛桑联邦理工学院的Martin Odersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。 Odersky先前的工作是Generic Java和javac(Sun Java编译器)。Scala于2003年底/2004年初发布。该语言第二个版本,v2.0,发布于2006年3月。
Scala 2.8的特性包括重写的Scala容器库(Scala collections library)、调用方法的命名参数和默认参数、包对象(package object),以及Continuation.
2012年1月,发布版本 2.9.1。
2012年4月,发布版本 2.9.2。
使用Scala的公司/软件
2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。

特性
支持的编程范式
面向对象特性
Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。
函数式编程
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型(Algebraic type)。
更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。在这些情形中,列表推导式(List comprehension)功能对编写公式化查询非常有用。
由于JVM不支持尾调用,Scala也不能完全支持尾调用优化。不过,Scala编译器可以把某些简单的尾递归优化成循环。
以下代码以函数式风格实现了快速排序算法,可以与Erlang快速排序的例子做个比较:
def qsort(list: List[Int]): List[Int] = {
  case Nil => Nil
  case pivot :: tail =>
    val (smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller) ::: pivot :: qsort(rest)
}
静态类型
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:
· 泛型类型,
· 型变注释(Variance Annotation),
· 类型继承结构的上限和下限,
· 把类别和抽象类型作为对象成员,
· 复合类型,
· 引用自己时显式指定类型,
· 视图,
· 多态方法。
扩展性
Scala的设计承认一个事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:
· 任何方法可用作前缀或后缀操作符,
· 可以根据预期类型自动构造闭包。
联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。
安装测试
以下是测试Scala代码的一些方式:
· ScalaCheck,类似于Haskell的QuickCheck的一个库
· specs,一个用于Scala的行为驱动的开发工具库
内置的Scala库SUnit已经不赞成使用,已在2.8.0版中移除。
在线视频课程官方网站帮助文档图书
· Programming in Scala - (ISBN 978-0-9815316-0-1) A comprehensive step-by-step guide by Martin Odersky, Lex Spoon, and Bill Venners.
· Beginning Scala - (ISBN 978-1-4302-1989-7) A down–to–earth approach to teaching Scala by David Pollak.
· Programming Scala - (ISBN 978-1-934356-31-9) Creating highly scalable, highly concurrent applications on the Java platform by Venkat Subramaniam.
链接
· [url=http://en.literateprograms.org/Categoryrogramming_language:Scala]Literate Programs - Scala[/url]
· Scala Presentation From The Googleplex (video) - given by Martin Odersky, creator of the language; accompanying slides from the talk
· Lift Slides from Pollak's lift video, contains a presentation of Scala




加入谷歌开发者论坛
参加本次活动的新会员,可以获得杜邦莱卡面料的GDG精美纪念T恤一件。
会员加入方法:
上海Google开发者论坛(GDG Shanghai)是交流Google技术,发布线下活动的主要社区。加入后可以及时获得活动信息,并进行交流互动。
上海谷歌开发者社区的论坛是上海及周边城市里爱好谷歌开发技术、互联网技术、移动应用开发、游戏开发、开源代码、以及其它互联网技术的开发者组成的一个开放社区,欢迎任何有相同兴趣爱好的人来加入。
社区目标是利用谷歌开发技术、开源代码、公开互联网标准等技术来推动互联网应用的开发和创新。
这是一个开放和自由的社区,大家可以自由发言和提问,分享你在互联网和移动应用开发方面的知识和开发的经验。
希望这个社区能够对你未来的进一步学习以及创新能够起到帮助的作用。
欢迎更多的有志于社区建设和技术分享的成员们加入进来,一起组织社区未来的技术学习和分享活动。如果你有兴趣,请和我们联系。
要订阅此论坛,请发邮件至 [url=mailto:gdg-shanghai+subscribe@googlegroups.com]gdg-shanghai+subscribe@googlegroups.com[/url]
或访问Shanghai GDG论坛 加入
上海谷歌开发者社区 ( Google Plus Page , 新浪微博)



ChinaGDG.com
回复

使用道具 举报

2#
 楼主| 发表于 2013-1-22 21:33:45 | 只看该作者
1月19日,在Autodesk办公室,举办了七周七语言Scala的学习和CodeJam活动, 由Autodesk的两位Scala高手化了一上午系统讲授了Scala语言,并带着大家下午一起做练习,掌握了函数式编程的特性。


上午为基础课程,讲师教授,学习语言基础知识


张   赟: 微博: bbsmrdj
何晓乾: 微博: 何晓乾

下午为Coding Dojo,实践学到的语言知识

布置习题,大家很专心地领会。
做到下午4点半,找了一个同学来演示他的作业
又来了一个同学,一起现场写代码
最后,老师再做些总结和指点。
在布置了家庭作业后,留到最后的一起合影。
七周七语言-Scala课堂作业文件:”patmat.zip”,huffman算法 http://t.cn/zjFwR98
建议大家都去这个网站学习和看视频:http://t.cn/zjFwR9Q
分组练习,每组合作完成一个小项目。
完成后,每组演示代码,并由讲师点评。

本次活动除了讲师和组织者,一共有21人参加,其中11人坚持到下午CodeJam结束,有9人缴纳了50元押金以督促自己学习完成作业。



课后作业
讲师分派的一个课后作业,每个人必须在一周内独立完成。并发布在指定的网站be001.com 上,由讲师进行评估。
课后作业文件包:”forcomp.zip”,http://t.cn/zjFUMan
评估合格,可以返还50元押金。

参加者必须自带笔记本电脑。





预习资料简介
Scala编程语言近来抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。
Christopher Diggins认为:
不太久之前编程语言还可以毫无疑义地归类成“命令式”或者“函数式”。Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。
根据David Rupp在博客中的说法,Scala可能是下下一代Java。这么高的评价让人不禁想看看它到底是什么东西。  
Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。用David Rupp的话来说, 它也可以访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。
这让Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框架,Scala会经常性地针对这几个版本的Java进行测试。Scala以BSD许可发布,并且数年前就已经被认为相当稳定了。
历史
洛桑联邦理工学院的Martin Odersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。 Odersky先前的工作是Generic Java和javac(Sun Java编译器)。Scala于2003年底/2004年初发布。该语言第二个版本,v2.0,发布于2006年3月。
Scala 2.8的特性包括重写的Scala容器库(Scala collections library)、调用方法的命名参数和默认参数、包对象(package object),以及Continuation.
2012年1月,发布版本 2.9.1。
2012年4月,发布版本 2.9.2。
使用Scala的公司/软件
2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。

特性
支持的编程范式
面向对象特性
Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。
函数式编程
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型(Algebraic type)。
更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。在这些情形中,列表推导式(List comprehension)功能对编写公式化查询非常有用。
由于JVM不支持尾调用,Scala也不能完全支持尾调用优化。不过,Scala编译器可以把某些简单的尾递归优化成循环。
以下代码以函数式风格实现了快速排序算法,可以与Erlang快速排序的例子做个比较:
def qsort(list: List[Int]): List[Int] = {
  case Nil => Nil
  case pivot :: tail =>
    val (smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller) ::: pivot :: qsort(rest)
}
静态类型
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:
· 泛型类型,
· 型变注释(Variance Annotation),
· 类型继承结构的上限和下限,
· 把类别和抽象类型作为对象成员,
· 复合类型,
· 引用自己时显式指定类型,
· 视图,
· 多态方法。
扩展性
Scala的设计承认一个事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:
· 任何方法可用作前缀或后缀操作符,
· 可以根据预期类型自动构造闭包。
联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。
安装测试
以下是测试Scala代码的一些方式:
· ScalaCheck,类似于Haskell的QuickCheck的一个库
· specs,一个用于Scala的行为驱动的开发工具库
内置的Scala库SUnit已经不赞成使用,已在2.8.0版中移除。
在线视频课程官方网站帮助文档图书
· Programming in Scala - (ISBN 978-0-9815316-0-1) A comprehensive step-by-step guide by Martin Odersky, Lex Spoon, and Bill Venners.
· Beginning Scala - (ISBN 978-1-4302-1989-7) A down–to–earth approach to teaching Scala by David Pollak.
· Programming Scala - (ISBN 978-1-934356-31-9) Creating highly scalable, highly concurrent applications on the Java platform by Venkat Subramaniam.
链接
· [url=http://en.literateprograms.org/Categoryrogramming_language:Scala]Literate Programs - Scala[/url]
· Scala Presentation From The Googleplex (video) - given by Martin Odersky, creator of the language; accompanying slides from the talk
· Lift Slides from Pollak’s lift video, contains a presentation of Scala


首次七周七语言-Golang 35人参加,21人交押金,13人完成
第二次七周七语言-Python 65人参加,38人交押金,24人完成
第三次七周七语言-R 50人参加,16人交押金,11人完成
第四次七周七语言-Ruby 28人参加,16人交押金,7人完成
第五次七周七语言-node.js 40人参加,11人交押金,8人完成


七周七语言 QQ群:62498052





ChinaGDG.com
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2013-2-23 14:23:26 | 只看该作者
活动最后结果揭晓,是有9人交押金,其中5人完成了作业。

老师对作业的评分为:
leochenliu 96
GU 95  
Jacksky007 94
方宇晨 94   
xiaomin 92

前2名的优秀者将在下次GDG大会上颁奖。
ChinaGDG.com
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表