再谈独孤九剑与黑客编程

在开始之前,我希望大家能够先看看这篇文章:http://catb.org/~esr/faqs/hacker-howto.html
       
如果非要我选择9门编程语言的话,我会这样选:
       ASM/C/Python/.NET/JAVA/PHP/C++/Javascript/Objective-C

        仁者见仁智者见智,当然还有很多比较优秀的语言,perl,ruby,Lisp等,如果你是这类语言学习者你可以替换掉我这个独孤九剑式,写一个你自己的。

        在选语言之前,你可以先看看《黑客与画家》、《代码的未来》、《大话设计模式》和软件工程之类的书。

        现在看来delphi和asp确实有点老了。我们姑且不管那些老鸟有没有在用delphi和asp,反正我们新手是不会用了。我们学编程70%的原因是市场的推动,之前C++做桌面应用很多,C#出来后C++做桌面应用的越来越少了,C++回到了它最擅长的领域,驱动、嵌入式这些底层开发。

        微软的C#.NET、oracle的JAVA、苹果的Objective-C等这类编程语言背后都有一个很大的商业集团在运作。有商业运作其实不是件坏事,因为有商机所以才有钱途,为什么现在很多人学.NET、学JAVA、学安卓、学IOS?因为商机在里面。做为我们学程序的而言,我们学这些起码现在可以找个差不多的工作。对于创业者来说,借助这样的技术可以创造更多的财富。

        .NET会淘汰么?JAVA会淘汰么?C++会淘汰么?Objective-C会淘汰么?PHP会淘汰么?等等诸如此类的问题,其实一直困扰着我们初学者。大鸟是不会考虑这些的,我是菜鸟,所以我经常会想这些。而跟我一样的小鸟们也经常问这样的问题。其实会不会淘汰不是我们个人主观意志所决定的,是市场决定的。任何事物都要遵循产生、发展、衰退、消亡的规律,编程语言也不例外。但这些主流的编程语言目前来看10年内不会淘汰,不要有任何顾虑,学就对了。也不要抱着一门语言以为得到了武林秘籍,其他语言就不看了。多看看不同类型的编程语言开拓下视野很有必要。

        不要成为某一种语言的信徒,不要把自己定位成.NET程序员、JAVA程序员、PHP程序员。不管别人是怎么称呼自己的不重要,但你心里要明白,我只是在某个阶段用某种语言编程而已。你把自己定位成某种语言的程序员其实就是把自己框死了。你看问题就会有局限性。

        不要被框架所累,如果你打算学多门语言,就不要把精力放在框架上面。框架只会让你受累,而不会让你感觉自由。没有自己的感觉,你也就没有了创造的灵感。你只是奴隶,而不是上帝。学JAVA的朋友一般会学
struts+spring+hibernate这些框架;学.NET的人要学ASP.NET MVC、学WPF、WCF等;学C++的你可能要熟悉MFC或者QT库;学python你可能要学django等等。偶,天哪,这么多框架,这么多类库,我要学到什么时候啊,穷极一生恐怕也学不完的。其实在学习的过程中你应该知道自己想要什么,不要把态度精力放在研究这些框架上,同样的框架熟悉一个就好,比如MFC或者QT选其一就行。

        有人说现在python在中国火了,其实node.js、MongoDB 、HTML5在世界上都火了。国外芳菲尽,国内始盛开。用这两句来形容中国的IT界一点都不夸张。python在1989年底开始发明。1991年发布第一个版本。大家可以算算多少年了。但现在才在中国大地普及开来。我们应该高兴还是悲哀?

        
不自由宁勿死,有人说学.NET是带着镣铐在跳舞,是因为它不开源,我们不知道内部的细节。好在有mono,但人们还是会担心微软会告mono侵权。虽然微软说不会效仿oracle告谷歌,但是万一微软一念之间告了,我们又有什么办法呢?看到了安卓的悲剧,我们不得不想到一个问题。那就是被商业公司所左右的编程语言其实无形给我们带上了枷锁。你根本掌控不了。我在《独孤九剑与黑客编程》里面提到的第二个境界,软剑级就是指的这类语言。因此,开源才是王道。

        跨平台才是好,因此我们必须用一种通用语言,C/C++/Python。这九门语言中我最看好的就是这三门。当然如果你觉得C++太难学可以去掉,但是Python和C结合起来混编才更强悍。学python的朋友可以多用下ctype库。也有人说C是python语言无法取代的吧,C万古长青。呵呵,python为什么取代C?两个语言是应该搭配起来很好的协助。我不是python语言的信徒,同样也不是C/C++的信徒,我们应该想办法让这些语言为我们服务,合适的场景下用合适的语言。总之,没有哪一个语言会万古长青的。

        如果你只会一门编程语言,那么你就没有了选择,是的,C++能做到的,C也可以,Python能做到的Ruby也可以。就连javascript都可以做操作系统了,还有什么不可能的?
         
http://www.masswerk.at/jsuix/大家可以看看,这个是javascript写的JS/UIX系统。同样的C#和java也可以写操作系统,任何编程语言都可以。之前一直讨论编程语言,其实编程语言与其说是技术,不如说是思考问题的方式。你可以以计算机的思维来写0110或汇编代码,也可也用C这种面向过程的方式,你也可以用OOP。无剑的境界是不研究具体某一个编程语言的,而是研究的技术,什么是技术?
硬件方面:
结构控制和指令系统
算法和逻辑结构
存储器结构
冯·诺伊曼结构
哈佛结构
输入/输出和数据通信
数字逻辑
逻辑设计
集成电路
计算机系统组织
计算机系统结构
计算机网络
分布式计算
网络安全
计算机系统实现
软件方面:
系统软件
操作系统
编译器
应用软件
计算机游戏
办公自动化
网络软件
CAD软件
计算机程序
程序设计和程序设计实践
面向对象技术
程序设计语言
软件工程
软件复用
驱动程序
计算机模拟
程序设计方法学
数据和信息系统
数据结构
数据存储表示
数据加密
数据压缩
编码与信息论
文件
信息系统
管理信息系统
决策支持系统- 专家系统
数据库
信息存储和数据存取
信息交互与表达
主要的研究领域
形式化基础
逻辑学
谓词逻辑
模态逻辑
时序逻辑
描述逻辑
数学
泛代数
递归论
模型论
概率论和数理统计
逻辑代数
布尔代数
离散数学
组合数学
图论
网论
信息论
理论计算机科学
形式语言
自动机
可计算性
算法
计算复杂性
描述复杂性
编译器
程序设计理论
信息论
类型理论
指称语义
微程序
遗传算法
并行计算
计算方法学
人工智能
机器翻译
计算机图形学
图像处理与计算机视觉
模式识别
语音识别
文字识别
签名识别
人脸识别
指纹识别
仿真与建模
数字信号处理
文档与文本处理
计算机应用
数值计算
数值分析
定理机器证明
计算机代数
工程计算
计算机化学
计算机物理
生物信息论
计算生物学
非数值计算
工厂自动化
办公室自动化
人工智能
信息存储与检索
符号语言处理
计算机辅助科学
计算机辅助设计
计算机辅助教学
计算机辅助管理
计算机辅助软件工程
机器人学
多媒体技术
人机交互
电子商务
特定技术
测试基准
机器视觉
数据压缩
软件设计模式
数字信号处理
文件格式
信息安全
国际互联网络
超大规模集成电路设计
网络传输协议
网络处理器技术
整数运算器
浮点运算器
矩阵运算处理器
网格
计算科学史
计算机历史
软件业历史
编程思想
这些才是技术。编程语言只是技术实现的一种形式,或者说是一种手段。
看了这些我等小菜只能:路漫漫其修远兮,吾将上下而求索 
 
========================================================

暂时写到这里吧,算是自己这些天来的一点感悟。

菜鸟之见,大牛勿喷。 
posted @ 2013-09-09 10:27  MXi4oyu  阅读(296)  评论(0编辑  收藏  举报