一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 2137|回复: 0
收起左侧

[经验总结] 回报一亩三分地之如何进阶提高编程——我为何推荐各位学习Functional Programming

[复制链接] |试试Instant~ |关注本帖
北美农民 发表于 2015-1-23 13:46:52 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
先说明:这篇文章的方法论适合有一定Object-oriented programming基础的人, 转cs的同学也可以参考
但是对于一门编程语言都不熟练的同学来说, 这并不是很适合当前的你, 希望先熟练一门编程技能
为主。虽然是找工就业版版主, 但我认为把帖子发在这更加有意义。版主看到了请自觉加精, 谢谢。
接下来我要开始装逼了, 如有不适请自觉关闭窗口

. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
每一种编程语言, 都有其创始者所设计的编程范式,也就是programming paradigm。何为范式? 我的理
解是编程的基础风格, a style of building data structures and elements in program。举个例子, OO是最
流行的编程范式, 要通过OO去解决问题,通常范式是设计类, 成员方法,成员变量, 继承关系,交互
关系等等。我所理解的编程语言主要范式有:

i. Imperative programming paradigm, 也就是命令式编程, 如有脚本性质的语言。
ii. Object-oriented programming paradigm, 也就是最常用的oop了, 比如java, c++, python, etc.-google 1point3acres
iii. Functional Programming paradigm, 也就是本帖要说的函数式编程范式, 比如scala, ml系, Haskell, scheme, lisp等等。
iv. Paralell/Concurrent programming  paradigm, 并行化编程范式, 比如cilk等等。. from: 1point3acres.com/bbs

.鐣欏璁哄潧-涓浜-涓夊垎鍦
(说明一下, 有的语言是适应多种编程范式的。)

大多数同学接触的都是c++, java之类OOP范式, 经常会有通过了一些实践经历后,会陷入一个瓶颈期, 这
个阶段的代码工作通常并没有什么实质上的进步了, 通常要花费200%的时间才能带来一些新的领会。究其
原因是大脑产生了思维定势, 问题和程序就应该用这样一种思路去下手。 通常对于这样的情况, 最好的方
法是尝试一种新的编程范式, to renovate a new prog thinking style that is much different from OOP.


这里我推荐functional programming(以后就叫fp), 原因是fp具备太多的优良的设计思维。 比如tail recursion,
immutability,strong/weak type, high-class function, curry, pattern matching等等这些是你完全不可能从OOP上
领会得到的设计, 他们统统能让你大开眼界。如果你们没有体会, 举个例子, 著名的MapReduce实际上是Jeff Dean
当年受到FP语言中最最常见的概念left fold/right fold启发而设计的框架。 此外, FP极其优雅的代码实现能让你
不知不觉应用到其它编程语言中, 真正提高implementing ability。本人的经历也算一个例子。 我是EE转CS, 13年
才接触java, 做了一个暑假的项目, 熟悉了基本的design pattern后觉得再无太大的提高空间,14年中开始
自学半年Scala和Ocaml, 暑假一边实习一边抽空自己写写练习, 编程能力得到了巨大的提高。 在之后的面试求职
也得益于这段经历, 不仅大部分代码题得到了面试官直截了当"i like your code"的评价, 还可以侃侃而谈不同编
程语言编程范式的优劣,项目中的应用, make a big plus。

关于如何学习,FP语言有很多, 我推荐Scala或者ML系的语言任意一种即可。 Scala在工业界比较火, twitter, LinkedIn,
Groupon等公司大量项目使用到了scala。
. Waral 鍗氬鏈夋洿澶氭枃绔,

Scala在JVM上运行, 和java无缝兼容,实际上也是多范式的编程语言, 不过具备很好的FP设计, 对于想学scala的朋友,
可以看scala创始人讲授的Functional Programming Principles in Scala。 ML是一门很有意思的FP语言,具备很多优秀的
设计以至于很多别的FP语言沿用了这些设计至今。 ML的历史非常悠久, 经历了很大的发展和进步。想学的同学可以看. 1point 3acres 璁哄潧
看Programming Languages这门课。 以上两门课都可以在coursera或者youtube搜到。. 鍥磋鎴戜滑@1point 3 acres


扩展阅读: Functional Programming Is Hard,That's Why It's Good. 1point 3acres 璁哄潧
.鏈枃鍘熷垱鑷1point3acres璁哄潧

评分

9

查看全部评分

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-5 22:46

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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