1、我眼中的计算机学科:
就像武侠小说酱紫。武功分内功和外功。其实这些都是大学学过的,只是在体制和大环境下,大多人都没领悟到什么,都是泛泛而谈60分万岁。
①、逻辑数理层的:积分/微分/线性/离散/概率...
②、物理层上的:模电数电
③、硬件层的:计算机组成原理,微机接口,编译原理,汇编
④、OS层的:操作系统
⑤、网络层:TCP/IP协议...
⑥、应用层:数据结构和算法,设计模式,几门载体语言(C/CPP/Java...)
2、根据不同的工作需求,都有一定的偏向:
例如做硬件层开发,嵌入式之类的肯定偏向物理层和硬件层居多,做应用层开发的大多偏向于上层接口居多...诸如此类。
3、砌积木和做积木的区别:
1、通常一般性的开发,诸如现在很火的移动开发。大多数情况下都是砌积木。就是写几段顶多初中数学水平的逻辑代码,然后黏合别人做好的API,或者第三方库。实现该有的功能,把他做成领导想要的形状就大功告成。市场上的开发者良莠不齐,绝大多数都属于这种情况。
2、而我是从事移动开发的一名小菜鸟,从我的认知所得,语言就一个载体而已,用来承载系统API用的。而系统API大范畴的编写基于某种框架(例如:MVC,MVVM,等),在code层上也肯定用到N种设计模式来减少耦合性\增加重用性\扩展性等。而里面的每个类肯定用到N种数据结构和算法。上面三层,一层比一层范围小。(PS:以后有时间,也会出一篇详细解释 数据结构,算法,设计模式,框架。到底是什么,到底有什么用的博客)等累积多了就封装成一个SDK提供出去,用某种载体语言来调用。而跨平台的原理也无非如此,跨平台分为硬件实现和软件实现,例如OpenGL,不过我现在所说的跨平台是基于软件实现的,例如cocoa2dx。只不过是用一层语言封装了不同OS上的不同实现,露出了相通的API接口调用而已。然而很多框架也用了一层胶水语言来间接调用,例如LUA,毕竟解释语言的语法相对简单。
3、而我认为找这种应用层的开发者,面试主要针对这几个方面:
①对载体语法的熟练
②对系统api的熟练程度
③对开发工具&辅助工具&第三方库的熟练程度
③代码规范&设计模式
④算法功底
⑤对各种底层实现(系统&网络…)的了解程度
一条比一条难度大。对开发者的要求也越高。
4、内功和外功:
我认为
1、内功无非就是数理逻辑,组成原理,OS,数据结构和算法,设计模式,再加几把语言(我经常把他比喻成一把武器)。根据不同领域也有一定偏重。
2、外功就是砌积木的熟练程度啦。对系统API的熟练程度。
本人小菜鸟,如果哪点说得不恰当,欢迎拍砖、指点。