胡锋的博客分享 http://blog.sciencenet.cn/u/hufeng 希望理解鸟怎么一起飞,鱼怎么一起游;希望和身边的人分享科学的乐趣。

博文

一个物理学家学习windows编程的感受 精选

已有 16260 次阅读 2011-12-3 15:09 |个人分类:未分类|系统分类:观点评述| 学习windows编程, 物理学思维

最近学习用Visual C++ 作为平台的windows 编程,感觉到学习这种编程技术的过程与学习物理的思维差异非常大。最明显的,比如对于物理课本,在学习的时候值得一个字一个词的认真去读,有时候需要读上好几遍。但在学习编程的时候,即使是号称世界级的教科书,也最好是不懂的地方就跳过去,不需要的地方跳过去,不求甚解,以能够动手上机操作为目的。我现在明白了这种差异来自于一个是面对的是自然世界,一个面对的是人工系统。

 

物理学以理解自然为最高目标,物理课本是经过浓缩的一代代物理学家所得到的知识。阅读大自然并非易事,比如当年英国物理学家焦耳花了二十年的时间,测定了热功当量的值1卡=4.2焦耳。这件工作确立了热力学第一定律的基础,可是在物理课本中也就几句话。物理课本上的内容是几百年以来的知识的结晶,然后用了精巧的数学把它包裹了起来。在这样层层的包裹下,其实也许核心就是那么一点点,如果真的学懂了,感受很像华罗庚教授所说的“由厚到薄”,厚厚一本书籍变成了少量一些key points。我现在正在教授本科生的大学物理课程,在第一学期,要花掉大约3个月的时间讲授力学,大概物理系的本科生学习力学要花掉一个学期的时间。其实,转过头想一下,力学(不算狭义相对论)的内容,不就是牛顿三定律吗。当然,在这个基础上,发展出了能量,动量,角动量这些非常重要的概念。但是,平均到每节课,也就那么一点点的核心概念,而其它的是“越来越多的爱克斯”。我常劝我的学生认真读课本,而且多读几遍,在课堂上我也会做一下演示实验,并且鼓励他们互相讨论。这一些努力,就是希望他们能够知道哪些知识点是最重要的,哪些是不重要的。

 

物理学的难懂,也不仅仅是知识经过了浓缩,因为大自然的本性有时候难以琢磨(不知道她是否“邪恶”),所以我们只能花费多的时间去“琢磨”。对于我来说,狭义相对论就是这样一个例子。学习的时候,让我有数不清的晚上失眠,在两年前,也亲自教了一遍,但直到现在,这里面的一些概念还是让会让我头疼一会儿。狭义相对论难懂的原因是因为里面的概念违反了直觉,最有名的例子是“同时的相对性”。在日常生活中,几乎无法想象,如果你对你的朋友说“我1年前在重庆爱上了我的女朋友”,另一个在飞船上得家伙大声说“你是一年半前爱上的”,你想你该有多么愤怒。而狭义相对论说这两种说法都对。正是因为违背了直觉,所以当有时思考狭义相对论的问题时,你需要不停的问自己一些愚蠢的问题“这个时间是站台的人的还是火车上人的”。著名物理学家海森堡大概也碰到了这样的麻烦,他说狭义相对论中的物理因为违反直觉而理解起来很费力。

 

而最近学习的Windows编程的这套系统是人工的系统,是由很多的微软的技术专家堆砌的系统。所以你需要的是了解他们的一些想法。这些想法当然“不邪恶”,很多时候倒是很繁琐。你需要的是知道他们的一些设计,从而弄懂这个系统如何运作。在这个过程中,常常会碰到一些生僻的名词,这是我劝我的学生要在表述物理问题时尽量避免的,我不会对这些名词像物理学中碰到的一样去努力弄清楚含义,太费事了就跳过去(可能心中也不屑于花太多的时间去弄懂它)。有时候,甚至不懂它的原理,但是会操作了,也就ok了,这对于习惯于物理思维的我来说,确实是一个挑战。

 

希望能在几个月后,能够用程序画出一些好看的图线来,我的目的也就达到了。

 

                                                                                                                                                                        胡锋           2011-12-3

 

 



https://blog.sciencenet.cn/blog-43547-514490.html

上一篇:广电××这个东西
下一篇:相互作用:从力、能量到信息
收藏 IP: 113.250.237.*| 热度|

7 刘全慧 欧阳峰 李宇斌 陈小斌 叶青 文克玲 arpku

该博文允许注册用户评论 请点击登录 评论 (61 个评论)

IP: 59.66.57.*   | 赞 +1 [28]文克玲   2012-4-15 17:43
我有时也自称物理学家,也用机器码,汇编,Basic, algol, Fortran, and VC编过程,不奇怪。也许我应该试试QT和QWT?
回复  看来我们有些感受相似。谢谢推荐的QW,很快会用一下。
2012-4-16 10:341 楼(回复楼主) 赞 +1 |
IP: 59.46.172.*   | 赞 +1 [27]闫志刚   2012-3-6 22:13
博主能够以物理为专业还是很幸福的,我就惨了
IP: 118.202.172.*   | 赞 +1 [26]闫志刚   2012-3-4 21:43
学物理就是要深入扣每一个字眼
这句话说得很多,我也很喜欢很习惯于这种学习方式,通过这样我的数学能够学的还可以,比别人理解的要深一些。
但这种方法如果用到社会科学的实证研究中,你就吃大亏了,你就会陷入一个无底洞之中,永远无法发文章。
回复  有同感,
2012-3-5 20:271 楼(回复楼主) 赞 +1 |
IP: 27.186.104.*   | 赞 +1 [25]foolman1   2012-2-25 22:06
说的很对,学物理就是要深入扣每一个字眼
IP: 114.138.103.*   | 赞 +1 [24]lejcey   2011-12-19 23:04
博主你好,QT是一个跨平台C++库,设计的初衷是用于GUI程序的开发,不过经过十几年的发展,现在QT库非常庞大,包括GUI、富文本编辑、网络、数据库、多线程、2D、3D、QML(更漂亮的界面)、多媒体、WebKit、XML等等,几乎囊括了常见的开发任务。QT现在由NOKIA公司维护,他是开源的,使用LGPL协议。Qwt是在QT的基础上开发的专门用于技术绘图的库,也就是说Qwt是基于QT的,而QT是基于C++的,博主既然很喜欢C++,不妨尝试使用QT。QT提供了一系列的工具用于简化C++的开发,比如专用的开发环境Qt Creator,设计界面的QT Designer,浏览文档的QT Assistant,本地化应用程序的QT Linguist等等。就个人知识所限,个人认为QT是所有C++ GUI开发中最容易上手和使用的了,它的文档资源的自带的例子非常丰富,是个人所见的各种库中唯一能和MSDN相媲美的,几乎不用专门学习,看文档就能上手。
IP: 114.138.107.*   | 赞 +1 [23]lejcey   2011-12-15 21:42
博主你好,QT有个库叫做Qwt,这个库就是专门用来绘图的,参考网址:
http://qwt.sourceforge.net/
前提是你必须使用C++,因为QT是C++的,不过在诸多GUI库当中,QT算是最简单的了,而且非常强大。
另外,被遗忘的Flash一样可以达到你的要求。用AS3语言即可,AS3语言比C/C++简单得太多!AS3现在也可以开发界面,用Adobe的AIR。
回复  lejcey, 看起来很不错,谢谢你的推荐。

不知道你对QT是否熟悉?我初略的看了一下,不知是否在我的程序中用Qwt 时,只需要在头文件中include一下,然后就可以直接用了。

QT又在其中起什么作用?
2011-12-17 22:061 楼(回复楼主) 赞 +1 |
IP: 114.138.107.*   | 赞 +1 [22]lejcey   2011-12-14 20:05
看了您的大作以及评论,专门注册ID给博主一些参考。

对于C/C++,他的擅长领域本来就不是GUI编程,而是接近底层,或用来构建其他语言,或构建核心部分。C/C++很“纯粹”,

他的速度最快,但是最复杂,很容易让人陷进去无法自拔。个人有时候就是为了追求这种“纯粹”,每当学习到新想法,新知

识,就把代码重写一遍又一遍,浪费了太多时间,太不值得!

C/C++更像是建筑物的基础,虽然基础承载了建筑物所有的力,但是没必要用构建基础的方法装饰建筑物。

再者,博主或许有些钻牛角尖,也许博主认为C++ coder很牛,所以一定采用C++,殊不知,计算机是作为一种工具而发明的,

写程序的目的只是为了解决现实问题,他仅仅是一种工具,如果一种更简单更高级的语言可以很快的解决,那就立即选择他。

解决问题才是最关键的,因此不希望博主陷入C++的泥沼中,毕竟你我都不是专职程序员,我们没有必要去研究工具本身。

如果博主一定要用C++来开发GUI,推荐更容易使用的QT库,前提是博主能忍受QT库使用带来的一些稍微的性能下降,以及所必

须的超大DLL。

对于能够解决现实问题的编程语言,还有很多更简单、更易用的选择,比如C#,比如Java等等等等,他简单到可以让你快速上

手,而且有全中文文档。点点鼠标,写几行代码就可以很快弄出一个“能用”的东西,前提是你能忍受他的速度,以及资源的

消耗。但是博主要知道,类似C#、JAVA这类新型语言,今日虽然如日中天,但个人认为玩玩就好,对于工作需要的,不做评论

,因为它们所适用的领域太窄,个人认为有一天会被淹没在历史的洪流中,就像当年红极一时的Dehphi,如今早已跌落神坛,

一旦有一种更好的语言产生,他们会立即被取代。C诞生到今天已经有了几十年,仍然是最广泛的语言之一。

对于VC,假设博主你指代的VC是win32和MFC,个人不想评论太多,很多历史遗留下来的东西造就了今天的VC。就像C++为了完

全兼容C,个人感觉发展得越来越畸形。如果博主一定要学习VC,大可以去MSDN,上面有微软的文档,最权威最可靠,前提是博主能看懂英文,这些部分几十年来没有中文翻译,或许今后也许也不会有。

说了很多,希望楼主三思而后行。仅仅为了做一些物理学的演示动画而学习VC、学习GDI、甚至学习Direct2D、3D等等,太过

于浪费我们苦短的人生。

画位图完全可以使用PS,矢量图用illustrator、Corel Draw。当然如果博主舍得学习研究,用TeX中

的绘图程序也不是不可以,做动画完全可以用大家几乎都已经遗忘的Flash之类的软件,做3D完全可以用3DS MAX、Maya等,

它们都是这些领域专业的软件,各种专业领域都有专门的软件,而且现在都可以很容易下载,并且到处充斥着教程,博主犯不着跟自己过不去。

备注:以上只是个人的胡言乱语。

最后,奉劝一句,善用佳软。
回复  谢谢劝告。

我目前用c语言,已经编制了一些程序。在前一段时间,我在程序中产生了数据(x轴和y轴),很想在坐标轴上动态的画出曲线来。当时在网上搜索实现这种功能的方法,但一直没有找到合适的。

如果您知道实现这种功能的方法,希望不吝赐教。
2011-12-15 10:461 楼(回复楼主) 赞 +1 |
IP: 64.124.28.*   | 赞 +1 [21]陈小斌   2011-12-5 16:02
还是建议学Delphi。真正的程序员用VC,聪明的程序员用Delph。聪明者、非为编程、 而是在其他方面,非常不一般。
回复  谢谢提供的信息,我会考虑的。
2011-12-6 14:281 楼(回复楼主) 赞 +1 |
IP: 202.38.87.*   | 赞 +1 [20]刘太祥   2011-12-5 10:41
被惊了一跳!原来是一个敢自称“物理学家”的学VC++。。。
博主回复(2011-12-4 10:09):思考物理,研究物理,就称为物理学家。

回复博主:思考物理,研究物理,可以称为物理学感兴趣者。
研究物理,对物理学有深的理解,可以称为物理研究者。
对物理学有深的理解,并且有见地,可以称为学者之类。
对物理学很很深的理解,有独特的见地,对推动物理学科知识的发展有贡献,可称作令人敬仰的物理学家!物理学家不是自称的,是大家推崇认可的!
以上只是个人的看法!
回复  物理学家,高居庙堂,受人爱戴,令人神往。
2011-12-5 12:071 楼(回复楼主) 赞 +1 |
IP: 202.38.87.*   | 赞 +1 [19]刘太祥   2011-12-5 10:39
被惊了一跳!原来是一个敢自称“物理学家”的学VC++。。。
博主回复(2011-12-4 10:09):思考物理,研究物理,就称为物理学家。
思考物理,研究物理,可以称为物理学感兴趣者。
研究物理,对物理学有深的理解,可以称为物理研究者。
对物理学有深的理解,并且有见地,可以称为学者之类。
对物理学很很深的理解,有独特的见地,对推动物理学科知识的发展有贡献,可称作令人敬仰的物理学家!物理学家不是自称的,是大家推崇认可的!
以上只是个人的看法!
IP: 202.113.11.*   | 赞 +1 [18]张敏   2011-12-4 23:29
男人如果要想实现自己的梦想,就读物理吧
回复  哇,
2011-12-5 09:571 楼(回复楼主) 赞 +1 |
IP: 70.36.146.*   | 赞 +1 [17]陈小斌   2011-12-4 23:19
物理学家,以及其他一些非程序员的科学家,建议学Delphi编程,不要去搞VC,这样会事半功倍,会大大节省学编程的时间。
回复  希望这次能够一股做气,花3个月的时间,学会在windows平台上用VC编程。忍受它很长时间了。
2011-12-5 10:001 楼(回复楼主) 赞 +1 |
IP: 111.164.170.*   | 赞 +1 [16]郭景涛   2011-12-4 17:24
不是物理和计算机专业科班出身,只不过两者都学过。说说我的感受。我学物理能学明白,学MFC没学明白。反省一下,原因可能在于物理学知识已经被名家们提炼为一些经典教材了,我们仅仅是学习而非探索。MFC编程方面还没有有效地教材(也许有,但不好找),学习过程更像是发现未知的过程,所以很难。另一个原因是,物理学知识内在逻辑性强,可以归结为不多的定律。而MFC的知识的内在逻辑不强或不容易发现。
有时候觉得把生命投入到弄清楚MFC这种漏洞百出的人造物上很可悲,尤其是微软可能就不想让你弄明白,因此设置了重重障碍。制谜总比猜谜容易。
回复  一个是一代代物理学家花了几百年的时间,找到的”漂亮的贝壳“。另一个只是一批技术专家花了几十年时间搭建的人工系统。两者不可同日而语。
2011-12-5 10:011 楼(回复楼主) 赞 +1 |
IP: 222.66.55.*   | 赞 +1 [15]dd3   2011-12-4 15:18
我是1楼
re:[7] 匿名 回1楼:windows SDK和MFC也算底层?DDK才算吧?
DDK编程确实更接近操作系统核心,对核心的理解也要求更高,这个没错,但是真正的核心还要深入一步。SDK和MFC自然不是操作系统的核心,SDK是开放给应用程序的接口,MFC是对SDK的C++封装(使用比较古老的C++)。我
使用SDK和MFC10多年了,不敢说深入理解,只能说是皮毛。一直试图自己写个类似于MFC那样的东西,对SDK按自己的理解进行封装,但是终于没成功。近5年来,有个外国人试图按自己对SDK的理解封装并形成一个开源项目WIN32++(使用了稍微先进点的C++,但为和VC6兼容,还是没有使用更多新C++标准),挺不错的,我一直在跟踪他的项目。但是他的特点是每个版本的更改几乎都会推翻前面的版本的代码,由此可见初始设计和保持版本的兼容性是多么的困难,你不能说你一开始是菜鸟,然后后面的版本不断更新,你水平也不断成长,然后你的每次升级都要推翻前面幼稚的设计,那么兼容性何来?微软系统的兼容性真的让我佩服的五体投地,里面有绝顶的高手,进行了初始的设计,在那些20年前的架构上,微软的大厦今天还在上面继续营造。
re:博主回复(2011-12-4 11:03):windows > physics , right?
我本科和研究生都是学数学的,学数学的人有个臭毛病,追求纯之又纯的所谓
纯科学,拆穿了讲,听有些老师的口气,他们连物理都不大瞧的起的,搞纯理论的瞧不起搞应用的,在他们眼里,物理只不过他们数学的一点点应用而已。
在编程这件事情上,有的老师是不屑一顾的,认为他不屑一学而已,学了一定是高手,当然学数学确实有利于学计算机,微软内部也聘用了大量数学高手甚至是菲尔兹奖得主。但是真的,我可以这样说,我们同学里面,大部分人,要去搞懂一般的物理学理论,应该不会很困难,但是真正上手成为WINDOWS高手的,可以说一个也没有,我10多年了,前面说过,只是皮毛而已。
回复  关于各个学科之间的这种“arogance”是个很有趣的话题。
有时候在物理课堂上面,我反复对我的学生说,物理学不是数学,不要沉迷在一堆公式中玩数学游戏,物理学有自己的思想体系。
其实,我倒听说,物理学家一般被认为是很傲慢的,”最硬的科学“,这可能与上个世纪中物理学几乎主导了科学的发展有关。
我为自己的物理背景自豪,但前段时间与生物学家合作时,我也清醒的意识到,他们有他们的价值判断准则。比如一个生物学教授在和我一起野外考察时说”learn from animals“,这一点让我这个喜欢理论的人很有些不适应,但也收获非浅。
2011-12-4 16:561 楼(回复楼主) 赞 +1 |
IP: 60.12.143.*   | 赞 +1 [14]郭克   2011-12-4 13:13
俺不是物理学家,读医学院时感兴趣把朗道的十卷囫囵吞枣读过一遍,有点似懂非懂,跟数学系的老姐恶补了几个月数学后,又把吴大猷的教科书翻了一遍。至于编程,你说你可以把教科书跳过几节,没错,但是其实我在接触c++时只是因为他时髦,我用过MFC,visual studio,觉得很酷。读了Bjarne Stroustrup 的砖头后就开始自己写,实际是,你写的代码质量跟你用的语言没关系,使用的函数库,所在的操作系统平台,而取决于你了解机器的程度,你对机器如何运行了解得越深刻,你无论用什么语言,c,c++,汇编都能写出好的代码,俺毕业后在程序公司晃过两年,后来觉得没意思就离开了,有时写写小代码哄哄女朋友,不敢说初入门径,不是装B,非专业人员干不过那些对机器了解比对自己了解更深刻的老家伙,程序员不是青春饭,只有对机器了解的非常深刻时,你无论用什么库,都能写出漂亮的代码。
回复  谢谢分享的信息。我有一个同学曾经也把吴大猷的全套讲义复印了一遍,不知道现在读完了没有。
2011-12-4 14:271 楼(回复楼主) 赞 +1 |
IP: 115.156.92.*   | 赞 +1 [13]方庆林   2011-12-4 11:40
学windows编程,善于找到好的技术图书很重要,另外善于对某些东西提问题,也很重要。光看书,不自己抛开书,是不行的。
       视频推荐孙鑫的VC++教程,书本推荐侯俊杰(侯捷)MFC深入浅出》,不过对于非程序员而言,会使用Matlab、Mathematica、Maple三者之一,就足够了。
       至于内核这一块,windows技术和物理,不具可比性。要比,只能说windows远远不如(因为这是技术与科学的比较,等博主明白了什么才是真正的科学,你的技术成果也会随着科学理论的高度而得到展现)。
       另外,把自己公然称自己为物理学家,有失妥当。
       参考;【1】匿名
回复  谢谢分享的信息。
2011-12-4 14:281 楼(回复楼主) 赞 +1 |
IP: 121.28.69.*   | 赞 +1 [12]stdu   2011-12-4 11:01
不是这个意思,以后你会明白的!
IP: 123.139.97.*   | 赞 +1 [11]whliang   2011-12-4 10:58
为什么用VC++?
如果只是画图,用 Mathematica 不是更简单一些吗?
如果只是Windows,用C#或VB.NET不是更容易些吗?
回复  谢谢相告。
挑战一下我自己吧。
2011-12-4 11:001 楼(回复楼主) 赞 +1 |
IP: 121.28.69.*   | 赞 +1 [10]stdu   2011-12-4 10:36
我们正在进入一个技术时代, 很多东西不是靠机械模型,物理模型就能理解的, 呵呵,所以需要转变思维方式!不然,你只能钻牛角了!
回复  你是说,科学过时了?
2011-12-4 11:001 楼(回复楼主) 赞 +1 |
IP: 202.38.87.*   | 赞 +1 [9]刘太祥   2011-12-4 09:48
被惊了一跳!原来是一个敢自称“物理学家”的学VC++。。。
回复  思考物理,研究物理,就称为物理学家。
2011-12-4 10:091 楼(回复楼主) 赞 +1 |
IP: 124.234.177.*   | 赞 +1 [8]梁智鹏   2011-12-4 09:36
飞船上说一年半前爱上的, 传到"我"耳中, 早已物是人非了吧....
回复  同时的相对性。
2011-12-4 10:101 楼(回复楼主) 赞 +1 |
回复  幸好飞船上的人只能说说而已
2011-12-4 10:262 楼(回复楼主) 赞 +1 |
IP: 60.255.200.*   | 赞 +1 [7]张成功   2011-12-4 09:05
窃以为物理学家和数学家更适合学Lisp
回复  Lisp 是什么?
2011-12-4 10:121 楼(回复楼主) 赞 +1 |
IP: 220.169.46.*   | 赞 +1 [6]dsp2008   2011-12-4 08:55
都成物理学家了,还用得着自己编程吗?

廉价的程序员遍地都是,随便花点小钱,就可以雇一个熟练工了。
回复  现在还是处于需要自己编程的阶段。
2011-12-4 10:131 楼(回复楼主) 赞 +1 |
IP: 218.21.78.*   | 赞 +1 [5]nnxxsh   2011-12-4 02:01
咋一看,我还以为是爱翁穿越回来学编程呢
回复  爱翁是一个伟大的物理学家,我是布他后尘者之一。
2011-12-4 10:151 楼(回复楼主) 赞 +1 |
回复  爱翁回不来了。
我们还在这儿。
2011-12-4 11:012 楼(回复楼主) 赞 +1 |
IP: 173.64.116.*   | 赞 +1 [4]欧阳峰   2011-12-3 22:51
非常有同感,握手!学编程,绝大多数时间是“与人斗”,试图明白别人的思路和做法。其实不是非要这样的,如果产品说明和训练能做得到位的话。
回复  看来您也有过这种过程。
2011-12-4 10:151 楼(回复楼主) 赞 +1 |
IP: 218.81.133.*   | 赞 +1 [3]ecnux   2011-12-3 22:19
量子力学的范围和难度绝对不输给windows的。任何学问都不是一个人穷尽一生能够掌握的, 而是千千万万的聪明的脑袋堆积起来的.
回复  quantum mechanics > windows.
2011-12-4 11:061 楼(回复楼主) 赞 +1 |
IP: 123.138.79.*   | 赞 +1 [2]VisualMind   2011-12-3 21:41
这就是工科与理科的区别
回复  隔行如隔山。
2011-12-4 11:051 楼(回复楼主) 赞 +1 |
IP: 202.112.90.*   | 赞 +1 [1]闫小勇   2011-12-3 21:09
只是画图线,何必用vc++自己找罪受呢?应该使用适合科研人员用的编程语言和工具,例如python或matlab。
回复  python 是什么,好用吗?Mathematica我用得比较多。
2011-12-4 11:041 楼(回复楼主) 赞 +1 |

1/1 | 总计:28 | 首页 | 上一页 | 下一页 | 末页 | 跳转

扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2025-3-8 11:41

Powered by ScienceNet.cn

Copyright © 2007-2025 中国科学报社

返回顶部