免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2250 | 回复: 4
打印 上一主题 下一主题

我的编程之路--一个老程序员给新手的文章 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-17 00:44 |只看该作者 |倒序浏览
我接触计算机比较早,1993年作为一个初中生学习了DOS、WPS和五笔,谈不上编程,然后埋头学习课堂知识一直到大二,这是一个空前繁荣的时代,市场上有至少4家X86CPU厂商竞争,IBM的硬盘做不过昆腾,极其不稳定的win98装了又装,那个时候还乐此不疲,单机版游戏空前繁荣,大学在 win98和dos7学习在如海的单机游戏种度过,理解了操作系统原理、软件环境、硬件环境,学了一门编程语言basic。毕业了凭借着这些知识找了份工作,开始使用VBS、ASP、VBscript、VB、java、VC++、PB、delphi,都是windows平台开发,谈不上什么风格、素养和框架,这样干了4年,开始深入学习java,unix(AIX)上的服务程序用java,管理界面用delphi,深入了解了n层网站构架、PKI、 PMI、J2EE框架、Bea应用服务器、JSP实现方案,这些其实都不是我要说的。终于有一天我打算做一个编译器,不会手写,开始研究lex、 Flex、bison、yacc,发现在win下面写一个编译器如此麻烦,使用win版的Flex和Bison出现了这样那样的问题,于是我开始考虑 linux,有了工具基础我相当顺利的完成了一个类C编译器,开始使用win和linux的混合平台,开始研究linux的软件开发模式,发现linux 和类unix系统由于图形系统不进入内核和为了软件的移植,编写一个软件总是先建立函数库,然后编写命令行,最后再考虑图形界面(利用管道向命令行传递参数),这样很让人惊讶,有很多好处,库可以支持别人开发,命令行可以最快完成软件功能和基本用户接口,命令行可以以最简洁的方式向操作系统甚至向内核传递命令、参数,根本不与X打交道,也有缺点就是新手感觉linux图形界面的控制力不如win,我来说说win是怎么做的,win2000以后图形界面深入操作系统核心,GUI函数跟操作系统核心函数是一个优先级,可能在win下面编程也了解了,GUI和功能函数是混合在一起的被主函数调用,这种开发模式,要支持第三方软件需要开发专门的接口,GUI容易死锁,GUI死锁软件就崩溃(除非采用linux开发模式),速度慢,因为GUI的响应也是程序的一部分。再说说C++,C++是最复杂的语言,众多的最尖端的3D游戏引擎都是C++开发的,win上的MFC朴实、扎实比API调用有更好的稳定性(API 也是C++和C开发的,微软这方面很严谨),反观linux的kde4问题就很多,本人经历三次KDE崩溃,这在号称比win稳定linux上是不可想象的,原因就是KDE是基于C++的,开源世界的系统程序员对C++的掌控力远比微软逊色(注意我说的是系统GUI,不包括openGL),gnome是基于C的,稳定并根X完美结合,C在开源界远远比C++容易控制(C++本身就是一个颇具争议的语言,很多人批评其稳定性,但是其功能强大、高效一直走在技术的最尖端),C也有面向对象的使用方法,这里不细说了。web的兴起使得动态脚本兴盛起来,一时间大有超越C、C++的趋势,但是编写操作系统底层、编译器离不开C,编写图形图像复杂高级应用离不开C++,当然ada、fortran也是功能强大的语言,但是民间不留行。我们应该支持什么,我想大家都有个结论,最后说一些题外话,IBM、HP这些大公司喜欢瘦客户机,把大量的计算放在服务器上,他们打算利用他们的服务永远的垄断挣钱,作为一个小网民我们应当充分利用我们的桌面反抗计算垄断反抗霸权,是PC造就了微软(用过linux的人知道win98是多么垃圾,但是我们还是支持他),现在微软垄断了,我们幸好还有linux,我们是桌面用户,我们要BT、P2P那样的计算,现在有很多完美的PC上的分布式服务计算解决方案,不要迷信超级计算机,桌面组成的网络计算也很强大,况且很多超级计算机也是不同层面的集群,所以我们最后要明白我们支持什么、开发什么样的开源软件。
      早在2002年就使用过redhat7.2和8.0,那个时候 linux还有很多问题,易用性不强,中文环境也有很多问题,所以当时放弃了linux,一年前(2008.9)我开始使用ubuntu,现在基本上不用 win了,虽然有时候还进入win测试一下软件,仅此而已。同样一个语言、一个系统、一个数据库都有自己的生存周期。
      google是一个有灵性的公司,在众多的阵地向垄断的微软开始进攻,google在搜索方面的垄断让我担忧,他会不会推行霸权主义,mysql走向商业公司,现在在oracle下成为鸡肋,被商业毁掉了。众所周知python因为支持桌面共享计算的BT而成名,希望google不要毁掉python。寄存器虚拟机lua早就使用了,不过指令很简单只有37条,原来我也看不上寄存器虚拟机,现在看来perl6的parrot、python都开始有所应用了,java也有寄存器虚拟机的实现,好像就是google搞的,java平台很混乱,多种前端、后端的非官方实现。一直有个梦想,自己做一个lua为默认开发语言的linux发行版(可能已经有人开始做了,ubuntu是python作为默认开发语言)。
     有的人比较推崇python,本人比较喜欢lua,虚拟机喜欢parrot,parrot是perl6的核心思想,他它不再看重语言的前端,基于类和对象的共享,就如同把各种语言合并成了一种语言;lua是简单的,很喜欢lua的语法--pascal式的lisp。
     其实python和lua还有很多动态语言都是用来替换原来C++的工作,在性能要求不是很苛刻的时候动态语言可以快速实现功能,D是一个例外、java 也不是动态语言,D与java的区别是前者是编译器后者是解释器,Android平台的Dalvik推出预示着堆栈式JVM开始走下坡路,新兴的寄存器虚拟机开始流行。
     perl6,parrotVM,一个超越javaVM的方案,perl5实现perl6,perl6被编译成parrotVM的中间代码,跑在parrotVM上,同事支持各种语言的前端实现,包括lua,这是perl6支持的语言前端列表:http://www.parrot.org/languages,一个完全不同于javaVM的动态语言专用虚拟机,比javaVM高级,比LLVM更高级。lua自己的库很少,但是lua是用c和C++扩展的,自己可以动手封装,这不同于python官方封装而已,确实python很强大,但lua一点也不弱。
    现在是一个动态语言泛滥的时代,你可以选在你认为最完美的语法,你认为最优秀的中间代码,你认为效率最高的虚拟机,三个层面互相交错,根本分不清什么是原配了,lua展开BNF是60多条很简洁优美,但是其中间代码一般,虚拟机实现太简单。原来做商业java应用觉得java完美,现在认为它仅仅是完整。   
    我也做了大约4年java,厌倦了一家的东西,java名义上说开源,但是其源代码的量巨大,在那个时候核心技术也是保密的,solaris如果早开源,有没有linux都难说,Sun当时根本不是真心想共享自己的技术而是以此来吸引开发者,不如python透明,lua更甚,根本不提供编译版本,直接给你源码,哪个真正透明呀!很简单sun是dotcom,lua是dotORG,现在来说JVM的堆栈虚拟机技术也落后了,web应用上 ASPdotnet、PHP、jsp、CGI(fastCGI)四种技术jsp是最慢的,java的优势就是完整什么都能解决j2ee提供的库和bea的 WebLogic已经把封装做到了极致,庞大的第三方组件支持,但是这些都需要付钱,PHP已经排到编程语言第三名,PHP的大多代码资源都是免费的,PHP嵌入网页执行也是最快的。看看有多少LAMP服务吧还有多少在使用jsp呢,web上jsp、Asp已经输给了PHP。
    java和Lua还有python都是代替C++工作的,编译器都是c编写的,java有很多现成的库,都是自己在JVM上实现的,python是官方封装C和C++的库,自己也实现一部分,lua是由用户自己动手封装C和C++库,自己的库很小,都能解决问题,其实单单用C就能解决全部问题,使用什么语言完全看个人喜好。java平台现在失控了,出现了多重跑在JVM上的新语言,出现了java语法的寄存器虚拟机实现(Android平台的 Dalvik--google开发的)。
    python就语法角度来讲很多功能是重复的,不使用 OO(class),可以把数据、变量、函数放进list和字典里自己手工实现OO特性,lua就是采用这个办法,lua的关系表就是python的字典,形式不一样本质类似,lua实现真正的对象需要使用高阶函数(直接控制元表)和关系表(两种都可以实现也可以结合使用),C语言实现面向对象就是使用结构存储指向函数的指针,当然还有很多其他技巧参看《用C实现面向对象》,lua的源码就使用了部分这种技巧。
   java很严谨,类似MFC,工作做的很扎实,考虑的很周到,它的结果就是死板、冗繁,太自由的东西比如perl又难以约束规范代码,python是成熟的折衷方案,lua还在成长,编程时间长了,应该可以在任何语法上发挥自己的风格。流行的语言发展到现在都能解决你需要的大多数问题。
-------------------------------------
   我理想的编程语言,lua的语法,parrot(perl6)的VM,中间代码自己实现,我在向这个方向努力,Pyin就是类lua语法,后端也与lua类似有yacc实现c实现,pascal实现,luajit实现,parrot实现,都在紧张研究中。

论坛徽章:
0
2 [报告]
发表于 2009-09-17 00:46 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2009-09-17 07:30 |只看该作者
见贤思齐

论坛徽章:
0
4 [报告]
发表于 2009-09-21 17:10 |只看该作者
作者能人啊,老手啊,什么都懂呀!!!路漫漫其修远~~~~

论坛徽章:
0
5 [报告]
发表于 2009-09-25 17:37 |只看该作者

回复 #1 rawa9999 的帖子

骨灰级人物了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP