找回密码
 注册
Simdroid-非首页
查看: 2049|回复: 12

[原创短文] 多年没来,冒个泡

[复制链接]
发表于 2014-3-5 14:43:17 | 显示全部楼层 |阅读模式 来自 美国
好久不见诸位,不知道寂寞高手和waynebuaa还在不在,一晃上次在同济和FreddyMusic老兄见面已经是五年前的事了,感叹时间过得飞快啊!

我在美国待了四年,没能找到去Wolfram实习的机会,我曾经到了第二轮面试,但是对方说他们需要的是C++的开发者而不是有经验的Mathematica用户,但是那个时候我对C++既不熟悉也不感兴趣,所以也就放弃了。因为我后来做了嵌入式系统,所以没有太多玩Mathematica的机会,只有在数据处理的时候才能用到。而且美国访问simwe似乎比较慢,所以就来的很少了。

美国这边几乎每所学校的机房都有Mathematica,但非常可惜的是大部分人都把它定义为高级的函数曲线绘图工具,不过也有少数人和我谈起Mathematica时满脸放光,“Mathematica is tremendously powerful!!!” 因为Mathematica这个名字暗示了它就是一款数学软件,这是很糟糕的市场定位,所以下一阶段Wolfram意欲把Mathematica整合到一个叫做Wolfram Language的系统中,并且强调在金融和系统构建领域的应用,从而摆脱数学软件的定位。

Mathematica的代码很难重用,因为软件本身的性能有限,而且代码写得规范很困难,所以它不是一个适合开发系统的语言。从上高中起到现在,我用Mathematica从4.0开始到现在也将近十年了,过去一段时间我也反思,Mathematica到底适合做什么,一个领悟到Mathematica潜能的人,要在什么地方才能施展自己的力量,同时Mathematica的局限又在哪里。

我大概总结一下:

1. 一个语言所支持的programming paradigms很多,不见得它什么都能做。比如写应用程序最好还是使用操作系统原生的开发语言和框架,OS X就用Objective-C+Cocoa,Windows就用VS+.Net。对于大规模的并发系统,Erlang是无二的选择,对于简单但对性能要求高的代码,自然需要用C,才能精细调节各种I/O,CPU和GPU之间的协调。

所以Mathematica,以及类似多paradigm的语言共同的问题就是,它越是看起来能做的事越多,你就越不知道该用它做什么。因为你熟悉它,所以本来应该用domain specific的语言来解决的问题,你是更倾向于用它解决。但是到头来你什么都做不了。

2. 那么Mathematica对一个人帮助最大的地方在哪里呢?就是它能够及时地告诉你一个操作对数据形状的影响,使你能够尽快地认识到你所拥有的数据形式,和你想要的数据形式之间的关系和变化方法。函数式编程提供了结构化的描述数据变化的方法,便利的绘图帮助我们快速直观地验证想法。这是其它任何一个语言或工具都无法达成的。

所以,我们看到了Mathematica在我们做事当中的角色:帮助我们快速了解数据,快速验证想法。其它一切编程工具,都是我们在输出,在搭建系统,写应用程序给别人用,但是Mathematica可以使写程序的人自己受益,它是我们心智的延伸。我们的目标不应该是用Mathematica替代其它工具,而是专门用Mathematica做其它工具无法代替的事。

基于上述考虑,我摸索出一套新的结构化的写Mathematica的风格,比如
  1. ClearSystemCache[]
  2. WhetherContainsWhiteSpace=Length@StringCases[#,WhitespaceCharacter]>0&;
  3. SplitByCharacter = (Flatten /@ #) &@Partition[#, 2] &@SplitBy[#, WhetherContainsWhiteSpace] &;
  4. SplitPoint = Most /@ StringSplit[#, "|"] &;
  5. SplitNumbers = StringSplit /@ # &;
  6. SplitPointAndNumber = ({First@#, ToExpression@SplitNumbers@SplitPoint@Rest@#} & /@ #) &;
  7. FormTangents=({First@#,Map[Partition[#,2]&,#,{2}]&@Map[Partition[#,2]&,#,{2}]&@Last@#}&/@#)&;
  8. PrependLastTangent=Join[{Reverse@#,#}&@{First@First@#,Last@Last@#},#]&;
  9. PrependTangents={First@#,PrependLastTangent/@Last@#}&/@#&;

  10. Preprocessed =PrependTangents@FormTangents@SplitPointAndNumber@SplitByCharacter@Data
复制代码
当然你不必知道这段代码目的为何。重要的是看代码风格。把每个小的操作都用一个函数名代替,尽可能在函数名中就说明它在数据流中承担的工作,不要怕啰嗦,因为可以用复合函数@把它们连起来,再用一个更抽象的名字代替。这种风格最大限度发挥了Mathematica简洁明快的函数定义,也使得代码的结构非常清晰,便于日后port到其他语言。

过去几年我积攒了很多类似的经验,除了Mathematica本身,我也研究了如何让Objective-C和C的代码挖掘出适合Mathematica处理的数据。不久的将来我应该会像Freddy一样写本书吧。

我大概今年底或明年初就回国了,也许会有机会寻访诸位追求Mathematica的同道中人,如果能够发起一个Mathematica的用户小组,并且能够定期交流分享就太好了。我看到豆瓣和果壳都有Mathematica小组,但是水平都很弱。回去之后我会把我最近做的几个Mathematica大项目呈现给大家。

点评

强烈支持!  发表于 2014-3-5 16:13

评分

1

查看全部评分

发表于 2014-3-5 23:14:30 | 显示全部楼层 来自 上海
Simdroid开发平台
                     好了歌

小淘转眼变老陶,美国一晃五年了。
难觅同道知音少,学富五车归国了。
万千代码写得好,多少程序跑完了。
文采飞扬立意好,笑容依旧酷毙了。
登坛说法讲经好,著书立论不得了。
前浪死了死了好,后浪拍上前浪了。
贤弟何时往沪好,愚兄望穿秋水了。
煮酒举杯月光好,一醉方休无忧了。
回复 不支持

使用道具 举报

 楼主| 发表于 2014-3-6 06:48:45 | 显示全部楼层 来自 美国
承蒙Freddy兄誇獎,到現在其實還沒做出什麼有趣的東西來。

我另外有一個想法,就是逐漸放棄Mathematica,因為這個優秀的語言和它的運行環境結合的太緊密了,並且太依賴Wolfram公司本身。有一個不僅繼承Mathematica語言的優點,並且從內在機制上完全凌駕于這個軟件之上的語言和系統,名叫Forth。大家如果有興趣可以了解一下。
回复 不支持

使用道具 举报

发表于 2014-4-1 19:45:38 | 显示全部楼层 来自 甘肃兰州
专程打的前来回复
回复 不支持

使用道具 举报

发表于 2014-4-1 19:49:01 | 显示全部楼层 来自 甘肃兰州
呵呵,刚认识tau的时候(网上认识,就在这个论坛吧)我才上大二,现在在考博了,,,
回复 不支持

使用道具 举报

发表于 2014-4-5 10:09:32 | 显示全部楼层 来自 北京
本帖最后由 waynebuaa 于 2014-4-5 10:12 编辑

Mathematica 10要发布了,之前版本的logo都是红的越来越厉害,9已然是红的不能再红了.
所以我很好奇10会是什么颜色, 于是想起 来simwe溜达了一下.
幸亏溜达了一下,得见几个昔日故人在此小聚.
Tau是我所经历的少有的几个心智最奔放的人了. 如今奔放成了海龟派了,非常期待你的新作品!
记得当初jimogsh还是新进的大学生,Mathematica水平进步的是噌噌的快,现在已然要成博士了!
FreddyMusic 这个Mathematica瘾君子和隐者竟然也露出水面了.
还有一个smarten的,@smarten,  不知在哪里,很是怀念.
汗,...., 我大学毕业之后就一直做C++开发了.
如果要发动线下活动的话,我会兴然响应的.


回复 不支持

使用道具 举报

发表于 2014-4-5 18:04:31 | 显示全部楼层 来自 上海
waynebuaa 你博士毕业了吗?
想我们Mathematica版还是出了那么多的人才,实在是令人高兴啊。

点评

没有,本科毕业之后一直在工作...  发表于 2014-4-5 22:53
回复 不支持

使用道具 举报

发表于 2014-4-14 18:04:34 | 显示全部楼层 来自 吉林长春
本帖最后由 hankeyee 于 2014-5-31 10:43 编辑

why,show me the reason please.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2014-4-19 20:54:26 | 显示全部楼层 来自 上海
有问题应该单独发帖,不应该跟帖在不相干的主题中。



  1. a=0.0005;
  2. b=0.0005;
  3. c=Pi/4;  (* TBD *)
  4. d=7 Pi/30;
  5. e=0;
  6. f=20 Pi;
  7. g=Pi/60;
  8. h=0.00157;
  9. i=4 Pi/9;
  10. j=94.3 10^6;
  11. m=0.002;
  12. n=0.0003;

  13. func={Sin[x3]==Sqrt[2] Sin[x5],
  14. Cos[x2+x4]==Tan[x5]/Tan[x3],
  15. Sin[x5]==Sin[d] Sin[x1],
  16. Tan[x4+e]==Tan[d] Cos[x1],
  17. Tan[x1]==(Sin[i] Cos[e] Cos[x2] (1+Tan[e] Tan[x2])+Tan[x3] Cos[e] (Tan[c] Tan[e]-Cos[i]))/(Cos[i] Sin[x2]+Tan[c] Cos[x2])};

  18. sol=FindRoot[func,{{x1,Pi/4},{x2,Pi/4},{x3,Pi/4},{x4,Pi/4},{x5,Pi/4}}]

  19. F1=(j m n Cos[x4])/((Cos[x2+x4] Cos[x5] Cos[x3]+Sin[x5] Sin[x3]) Sin[x2]);
  20. F1//.sol

复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2015-10-17 23:13:42 | 显示全部楼层 来自 湖南怀化
Mathematica 的基础应用价值远没有得到足够的重视,我仅仅知道的它在辅助数学学习方面功能就十分强大。
Mathematica名方面都比较强,但在很多前沿领域它使不上力,比如我在做大规模计算时还是会回归 C 或 Fortran,因为前人用这个。
Mathematica变成一门独特的语言系统不是没有可能,但C,Fortran 等代码的积累是财富也是负担。
回复 不支持

使用道具 举报

发表于 2018-3-7 17:49:41 | 显示全部楼层 来自 江西南昌
有幸在这回复个吧,兴许多年后会发现自己留下过一些脚印,留下些慰藉。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 17:12 , Processed in 0.046706 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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