搞软件的人,编程语言的掌握是基本功,如果单单是学习语法,最慢的一周之内也应该可以搞定(个人认为 语法层面c++是最复杂的)。不幸的是,软件的本质是逻辑,解决方案的设计是要借助某种解决问题或编程的思想的。本文试图从抽象层面概括一点编程思想方面的东西。
一 c语言
1、相关概念:实模式、保护模式、调度、中断、调用栈、回调……基本上计算机科学里面的基本概念都会涉及
2、编程思想:结构化编程,即将解决方案描述为一个清晰的过程,这其中会涉及数据的建模(数据结构),接口的定义(函数),项目整体的组织结构(类似于中断向量表的注册、回调机制)。整个实现的过程就是这种流程从粗到细,步步细化的过程。
3、适合的领域:编译系统(很容易划分为 lexer、parser、walker等)、OS(很容易分成 cpu相关、内存相关、外设相关、进程相关)、DBMS等系统软件,或者是靠近
硬件的嵌入式系统(除了汇编就只能用c了)
二 c++
1、相关概念:虚函数、虚表、内联、多继承、const、泛型、模板(语言相关)……opencv、OGRE、3D渲染、GPU、mesh、skeleton、帧循环、DX、GUI、MFC、Qt、消息队列、非阻塞IO(应用领域相关)……
2、编程思想:过程化、oo、泛型、函数式 4种同时支持,实际中用OO比较多。
3、适合领域:多媒体、高性能网络服务器等较讲究效率的应用程序
三 java
1、相关概念:字节码、虚拟机、垃圾回收、接口、多线程、包、程序库、反射、框架、集成、组件、http、web、数据库、SSH、javaee……
2、编程思想:OO,即思考的角度是更面向问题域的对象,整个程序是对象不断细化,以及对象间交互的过程(调用相应的方法)。java的程序比较讲究扩展性和可维护性,一般会使用比较多的设计模式,常用的程序组织形式是MVC、监听者模式等。
3、适合领域:大部分没有硬实时要求的应用程序(可能正因为此,所以java程序员的数量是最多的)
四 Javascript
1、相关概念:闭包、对象、函数、CSS、DOM、Ajax、HTML5、node.js、V8……
2、编程思想:基于prototype的OO,以及基于闭包的函数式编程(后者用的更多)。常用代码组织形式:事件触发的回调机制(node.js与前端的区别是其自己定义、触发事件)、基于非阻塞异步IO的框架(node.js)
3、适合领域:web前端,
PS:有人觉得node.js适合做后端,我觉得不适合。node.js是比较通用的脚本引擎框架,我在实际进行开发时,发现node.js有这么几个问题:
1、没有原生的对于模块化(如java的包)的支持
2、JS是无类型语言,很难看懂代码逻辑(本质上逻辑是对数据的操作,没有类型的信息就很难看懂代码)
3、js的调试工具还是不够好用
4、没有统一的init的过程(很多的匿名闭包、以及无处不在的回调),很难捋清晰系统的组成和调用关系
一 c语言
1、相关概念:实模式、保护模式、调度、中断、调用栈、回调……基本上计算机科学里面的基本概念都会涉及
2、编程思想:结构化编程,即将解决方案描述为一个清晰的过程,这其中会涉及数据的建模(数据结构),接口的定义(函数),项目整体的组织结构(类似于中断向量表的注册、回调机制)。整个实现的过程就是这种流程从粗到细,步步细化的过程。
3、适合的领域:编译系统(很容易划分为 lexer、parser、walker等)、OS(很容易分成 cpu相关、内存相关、外设相关、进程相关)、DBMS等系统软件,或者是靠近
硬件的嵌入式系统(除了汇编就只能用c了)
二 c++
1、相关概念:虚函数、虚表、内联、多继承、const、泛型、模板(语言相关)……opencv、OGRE、3D渲染、GPU、mesh、skeleton、帧循环、DX、GUI、MFC、Qt、消息队列、非阻塞IO(应用领域相关)……
2、编程思想:过程化、oo、泛型、函数式 4种同时支持,实际中用OO比较多。
3、适合领域:多媒体、高性能网络服务器等较讲究效率的应用程序
三 java
1、相关概念:字节码、虚拟机、垃圾回收、接口、多线程、包、程序库、反射、框架、集成、组件、http、web、数据库、SSH、javaee……
2、编程思想:OO,即思考的角度是更面向问题域的对象,整个程序是对象不断细化,以及对象间交互的过程(调用相应的方法)。java的程序比较讲究扩展性和可维护性,一般会使用比较多的设计模式,常用的程序组织形式是MVC、监听者模式等。
3、适合领域:大部分没有硬实时要求的应用程序(可能正因为此,所以java程序员的数量是最多的)
四 Javascript
1、相关概念:闭包、对象、函数、CSS、DOM、Ajax、HTML5、node.js、V8……
2、编程思想:基于prototype的OO,以及基于闭包的函数式编程(后者用的更多)。常用代码组织形式:事件触发的回调机制(node.js与前端的区别是其自己定义、触发事件)、基于非阻塞异步IO的框架(node.js)
3、适合领域:web前端,
PS:有人觉得node.js适合做后端,我觉得不适合。node.js是比较通用的脚本引擎框架,我在实际进行开发时,发现node.js有这么几个问题:
1、没有原生的对于模块化(如java的包)的支持
2、JS是无类型语言,很难看懂代码逻辑(本质上逻辑是对数据的操作,没有类型的信息就很难看懂代码)
3、js的调试工具还是不够好用
4、没有统一的init的过程(很多的匿名闭包、以及无处不在的回调),很难捋清晰系统的组成和调用关系
5、完全异步触发的模式,使得代码很难读(打断点都不知道在哪打,即使打了断点也要想点办法来触发那个断点)
来自:http://eric-weitm.iteye.com/blog/1495370