(Poor Man's) Introduction to F#

终于鼓起勇气准备开坑写写F#! 这也是我第一次尝试进行公开的写作,要振作加油,最好能坚持下去呢 ;)

我计划写写当前F#社区的生态,介绍社区里面比较火热的一些项目,开发工具链等等。所以,这会是一个系列的文章。说到网络上学习F#语言相关的资料,大概主要都是英文的;中文的资料比较少,但也有一些不错的,例如园子里已经有不少前辈介绍过F#语言的一些入门的知识,或者是通过F#介绍函数式编程的理念,又或者是翻译英文的一些高质量的文章。但是似乎还没有人和我一样的选题。我倒是觉得这样的话题挺不错,能够给那些想要更进一步了解F#的朋友提供一个另类的观察角度,让他们知道F#作为一门实用的(practical)通用型编程语言,真的并非只是说说而已(,最主要还是对写作者的水平要求不高,这样我就可以愉快地水一水文章而不用担心暴露我的浅薄啦)。作为一个稍微有点F#使用经验的老菜鸟,对于一些想要学习F#的朋友们普遍的心理活动,我是很能体会的。大家经过一段时间的学习和了解以后,不再满足于仅仅查查文档了解基本的语法,这时或许都会对如何更进一步学习和应用F#产生浓厚的兴趣。一个比较尴尬的情况是,现时网络上的学习资料,要么太基础,要么太高深(来,跟我一起念:monoid,functor,monad。。(当然如果你觉得一点也不高深,请给老菜鸟保留一点颜面,不要当面揭穿我)),要么可能过时了。如果你正在困惑于网络上缺少指导你继续前进的资料,或许了解一下当前F#开发的环境和工具链,和一些重要的开源项目及它们的应用领域,会对你比较有帮助。让大家了解如果开始自己动手实践F#编程,正是本系列文章的目的所在。

所以,这个系列文章面向的读者,大概是已经自学过一些F#和函数式编程的基本概念的人。如果你需要寻找F#的入门资料,那我想这个宇宙里可能没有比 Scott Wlaschin的博客:https://fsharpforfunandprofit.com/ ,更好的启蒙读物了(,没错,学好外语很重要啊;不过要对自己有信心,也没多难读的)。然后经常翻翻微软官方文档(可以用VS Help Viewer 下载到本地查阅哦),入门应该就足够了。

写到这里,还是觉得要岔开话题,扯一扯那些形而上的闲篇。作为一个.NET平台的开发者和F#语言的爱好者,无可避免的要回答自己最本质的动机:(你已经有C#这么好的语言了,要啥自行车)为什么要学习F#呢?

首先,我是个很笨的开发者。所谓吾生而有涯,而知也无涯。在学习编程的过程中,总会不断的遇到激起我探索欲望的新知识和领域;但是那些东西都太多太多,而且对愚钝的我来说也都显得过分的高深。而F#这门神奇的语言,居然能激励人探索的信心,我经常觉得心智低能如我,也可以使用F#分析解决真正复杂的问题。这样的体验,真的只有F#带给过我。

在我的理解里面,编程语言,如字面意思理解,真的只是一门“语言”;编程活动,本质也确实就是用这“语言”进行交流和写作;用编程语言描述你关心的问题,表达你对它的解决方案,如此而已。C++/Java/C#一派的c族OOP语言,或者是Haskell,F#这样的FP语言,能力上都是完备的,从完成工作的结果上看,使用语言的不同不会导致结果的不同。但是不同语言本身确实会有各自的philosophy,有对解决问题的方法论的偏好,和对语言特性的取舍;最终这些会影响到语言使用者的思考方式,对所构建的系统也产生影响。F#带给我的影响,我觉得是它给了我函数式编程理念的启蒙;从使用类型系统描述问题领域的基础开始,通过函数组合的方式由小到大构建问题的解决方案,就像是确定了推理的公理基础,然后自然而然的会推导得到解决方案;F#在语法设计上也很精心和克制,让使用者充分运用语言的抽象能力而较少会承受语言本身附加的额外心智负担。

编程不应该存在黑魔法 (未完。。)

猜你喜欢

转载自www.cnblogs.com/lemonhead/p/11055935.html