论IT领域

对于IT技术岗位来说,大体可以分为两大类:研发应用

先说说研发类岗位吧。为什么要研发?主要研发什么?

研发也分为两类,一类是硬件研发,另一类是软件研发。硬件研发主要是专注于电子硬件产品的开发,例如我们常见的键盘、鼠标、手机、音响等硬件产品,所以硬件开发人员就是做这一方面的产品开发研究,其工作主要包括设计原理图、设计电路图、PCB板设计以及功能性、稳定性的测试,最后才是生产。总的来说硬件研发的技术壁垒较高。举个例子,我们要使用洗衣机首先得有洗衣机的硬件部分,如马达、飞轮等,硬件是最基础最底层的东西,不可缺失。

另一类是软件研发岗位。为什么要有这个岗位?为什么会用到软件?因为虽然有了硬件,但硬件暴露的接口功能过于简陋,而且直接用其来实现功能比较繁琐麻烦。计算机刚生产出来只有硬件接口,在硬件级别要实现复杂功能是非常困难的,需要的代价非常大,而且功能是写死在硬件上的,由于固化的原因导致要变换一下功能很麻烦。那怎么办呢?我们考虑到在硬件这一层次上再附加一层更为复杂的逻辑----这个逻辑就是软件。硬件的接口过于底层,需要软件来把接口做得更加人性化、更加易于使用,同时把底层的复杂性给隐藏起来----这就是软件的作用了。但这并不是说软件的复杂性不存在了,只是硬件的复杂性由软件来承接而已,看上去简单但不是真简单。这样一来有个好处,那就是硬件只需要提供最基本的功能即可,而各种复杂功能由软件来实现。举个栗子,铁锅是用来炒菜的,硬件部分只需要有承载食物并导热的功能即可,但我们仍然可以用铁锅来炒出各式各样的菜色。

这里给了我们一个启示:我们所提供的这个工具越接近最终形态,它的适用领域就越窄。计算机也是如此,尽然计算机系统分为硬件系统和软件系统,把硬件保持最原始形态,把其他高级功能皆由软件来实现,这样硬件的通用性就大大提高了。


为了帮助理解,再举个栗子,几乎去饭堂的人是为了吃食物填饱肚子,在这批人中要吃米饭的人、要吃馒头的人等分别又分出了更少的一批人,既要吃米饭又要吃大白菜的人又更少了。食物能提供的功能是填饱肚子,这一功能越简单能满足的人数就越多,既要吃米饭又要吃大白菜能实现的功能越复杂,因此能满足的人数就越少。

计算机也是如此,硬件只是完成最简单的运算操作,并识别一些简单的指令(由CPU接收),而软件把底层硬件封装起来实现更加复杂的功能,例如编辑图像、播放视频、编辑文本、上网......

对于人来说,计算机接口是二进制指令,如果通过机器语言来编程(即对二进制数据进行加工)则代码量太大,实现周期过长,排查难度太大,几乎不能胜任。所以就出现了易于人理解的编程语言。所谓软件就是程序员使用编程语言来写的程序代码,而不是用机器语言(最底层)来实现。

编程语言又分为低级语言高级语言,所以在编程里由分出了不同的程序员岗位。对于低级语言来说,其中代表是汇编语言,一般由芯片厂商提供,虽然已经开始使用人类自然语言描述了(如ADD,SUB等),但仅仅是把二进制转换成易于人理解的自然语言符号而已,所以汇编语言提供的接口依旧相对简陋一些。相比于机器语言,汇编所使用的代码量已经大大减少了,但对于人而言,汇编的代码量仍然很大。虽然代码量大(相对于人),但性能非常好,机器跑起来非常快,常用于写驱动程序,而早期的Unix系统就是用汇编写的。由于汇编语言跟机器耦合度非常高,适用范围较小,程序员学完汇编后在技能应用上没有普适性,这对于工业培养人才比较不方便,因此就出现了高级语言。

高级语言是比汇编语言更加人性化的编程语言,像C,C++语言是建筑在汇编之上的另外一种语言,代码量少很多。但不管是低级语言(汇编)还是高级语言,虽然人能识别,但机器是识别不了的,因此需要有一个中间层(转换器)作为桥梁,把对方背后的逻辑复杂性屏蔽掉,这样的中间人在汇编语言中叫做汇编器,在高级语言中是编译器,总之就是充当翻译官的角色。高级语言的编译过程包括两个步骤,首先将高级语言转换为汇编语言,再转换成机器语言。

虽然程序员用高级语言写起来代码量少得多,但对于机器而言代码量要大得多。这是因为在编译时要附加大量其他加以说明环境的代码。打个比方,例如到国外旅游时跟老外交流时,身边有个翻译官帮助双方沟通,当老外问到“What kind of books do you read?”时,你回答“《红楼梦》”,那么这时翻译官不仅要跟老外说明你读的书是《红楼梦》之外,还需要介绍大量关于《红楼梦》这本书的背景,这样老外才能理解你读的是什么书,而不至于听成“在红色的楼里做梦”......

总而言之,高级语言写起来容易,但机器跑起来相对较慢。在高级语言里也分成两类:系统级语言应用级语言。系统级语言如C,C++语言常用于编写操作系统(如Linux,windows)以及对系统性能要求较高的服务类程序(如Oracle,MySQL等),在高级语言里代码量相对较大,在这一方面成材相对困难。

而应用级语言如Java,Python,ruby等就非常接近人类了,但离机器越远了,常用于编写应用程序如ansible,puppet等。其中Java是非常流行的语言,而Python性能比较差,但随着计算机处理能力越来越强,所以Python性能差这一点倒是可以忽略了,所以在近几年Python渐渐流行起来,至少在研发上节省的时间足以抵消系统运行的时间,即投入产出比大。

总结:对于软件研发岗位,程序员的工作就是通过软件的方式让底层机器利用简陋的功能去实现一些列复杂的功能。程序员有多种,跟机器打交道的程序员就使用汇编,写一些关键程序的程序员就使用系统级语言,如果写一些对系统性能要求不高的程序的程序员应该使用应用级语言。

谈完了研发这一类岗位,接下来谈谈应用这一岗位。

所谓应用领域就是把程序员写好的各种应用程序应用好,而对于Linux领域来讲通常称为Linux运维,或者说Linux运维是应用领域的一个分支。Linux运维是做什么的?简单来说就是把建构在Linux生态圈中的各种应用程序应用好。那么如果不采取任何措施的话,日常的运行维护工作是比较繁琐的,这样一来运维人员是不是所有的事情都得自己动手去完成呢?非也。Linux运维人员需要尽可能地以一种编程的视角,把这些管理各种应用的工作让程序来帮助完成。shell脚本编程是其中一种,通过shell脚本编程可以让某些管理工作和应用工作自动完成(即通过程序来完成)。但是shell从本质上不算是一门完整的编程语言,它只是建构在解释器上的让别的程序运行得更好的一种程序逻辑工具而已,要想实现更加复杂的功能需要用到更为专业、更为完整的编程语言了,如Python。例如socket编程是shell编程实现不了的,而Python实现起来容易得多,还有自动化运维工具ansible、云操作系统openstack就是用Python写的。Python是一种非常高级的语言,甚至比Java还高级,除了shell之外,Python几乎是最容易学的。

总结:运行维护就是拿着程序员(研发团队)写好的程序(软件),根据企业的业务需要将其组织起来以满足用户的需求,能完成企业运营需要完成的任务即可。这就是应用岗位的职责。Linux运维是其中的一个分支,对于Linux运维来说发展方向很多,例如深入学习MySQL、NoSQL去做DBA是一个方向,深入学习运维工具、编程语言做DevOps是一个方向,深入学习虚拟化和云计算也是一个方向,深入学习大数据又是一个方向,而架构师是一个大方向,各方面都要能掌握,但底层配置可由其他人员完成。

公司技术部一般由研发团队和应用团队组成,比例大概是5:1到10:1,研发岗位相对更多,但职业风险相对应用大。研发不是运维的最终目的,运维开发工具只是为了使运维更加灵活、更加自动化而已。

时间: 2024-10-29 19:12:09

论IT领域的相关文章

领域驱动设计-入门

领域驱动设计围绕着对象进行设计,类似于传统的OO,但是还是不同的. 传统的OO更像是贫血的领域对象,它具有数据,很多get set方法,但是缺少业务逻辑.客户端使用时,需要进行一大串的set操作.举个栗子: 这种方式中customer是一个贫血的领域对象,客户端必须进行很多的set,最后调用dao进行保存. --------------- 那么,怎样才是不贫血的领域对象呢?主要看两点:boundedcontext,通用领域语言. 领域对象是通过通用领域语言进行描述的,通用语言是领域专家和开发人员

JetBrains发布DataGrip 1.0——数据库与SQL领域中的瑞士军刀

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/12/datagrip-released 近日,来自捷克的软件公司JetBrains发布了全新的重量级产品DataGrip 1.0--号称数据库与SQL领域中的瑞士军刀.DataGrip的前身0xDBE已经发布一年多的时间了,这也是JetBrains向广大用户提供的开发版本,每个版本都有一定的使用期限,过期后用户可以从JetBrains网站上下载新的开发版本.经过了长时间的开

领域驱动设计之实体、值对象、领域服务

建立领域模型的第一步就是需要识别出实体.值对象与领域服务. 一.实体 1.实体是领域中需要唯一标识的领域概念.通常在业务中,需要唯一标识与区分的对象并需要持续对它进行跟踪,这样的对象我们认为是实体. 2.如果两个实体所有状态都一样,但如果标识不一样,就是两个不同实体.比如订单对象就应该是实体,就算两个订单的订单日期.订单总额等信息都一样,只要标识不一样,比如订单号,我们就认为它们是不同的实体. 3.实体只保留必要的属性与行为.比如一个客户实体应该保留客户的基本信息,但像国家.省.城市.街道等信息

Java NIO通信框架在电信领域的实践

Java NIO通信框架在电信领域的实践 此文配图有错,华为电信软件V1版逻辑架构图与华为电信软件V2 MVC版逻辑架构图两张配图是同一张啊 另:我觉得作者在本文中遇到由于同步io引起的历史遗留问题更多的是架构的问题,在作架构时就需要考虑到同步io引起的阻塞问题,我觉得比较好的解决方案是使用排队的方式来下发请求,而不是每次下发请求都启一个线程,这样如果对方还是响应慢的话即使是用nio也是解决不了问题的.

《互联网医疗大棋局》中美移动医疗领域的现状、机会、限制。五星推荐

全书分析中美移动医疗领域的现状.机会.限制.个人感觉水平比较高. 书中几个重要的观点: 1:流量换收入的互联网思维在医疗领域没用. 2:美国与中国在医疗行业有诸多不同:最重要的是奥巴马的医改法案,让医疗界更关注医疗质量而不是门诊手术数量,因而让医疗界有动力去通过技术手段与病人在诊前诊后互动,提高病人的健康水平,也让移动医疗有更多的机会:中国则好医院忙于应付现有病人,没有动力去做移动医疗: 3:美国的许多移动医疗产品,都成功地找到了支付方,有许多是保险公司付费的(依旧归功于奥巴马医改),还有雇主和

医疗时鲜资讯:医疗领域入口的划分

背景: 医疗时鲜资讯系列的出发点是整理和摘录医疗行业的最新资讯,当然不可能只摘录,那我一个人怎能比得上健康界.HC3I--这两个是我有勇气写该系列博文的支撑.近期拜读了医库软件董事长Dr.2的系列文章,深受启发遂决定修改一下该系列博文的角度:以一个医疗设备相关软件开发从业人员的角度来观察医疗行业,从"医院.医生.患者.设备"四个大的方向来整理相关资讯,发表自己的些许感想. 医疗领域的划分(医院.医生.患者.设备): 翻出前段时间博文的一个老图,如下所示.当初画该图的出发点源于"

我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践

写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯新湖,鱼跃翠堤:第一次念你,燕飞巢冷,释怀记忆:第一次梦你,云翔海岛,轮渡迤逦:第一次认你,怨江别续,草桥知己:第一次怕你,命悬一线,遗憾禁忌:第一次悟你,千年菩提,生死一起. 人生有很多的第一次:小时候第一次牙牙学语.第一次学蹒跚学步...长大后第一次上课.第一次逃课.第一次骑自行车.第一次懂事.第一次和喜

分布式系统领域有哪些经典论文

0 个回答 默认排序 知乎用户 机器学习 话题的优秀回答者 901 人赞同了该回答 谢邀!五一快乐!分布式系统在互联网时代,尤其是大数据时代到来之后,成为了每个程序员的必备技能之一.分布式系统从上个世纪80年代就开始有了不少出色的研究和论文,我在这里只列举最近15年范围以内我觉得有重大影响意义的15篇论文(15 within 15).1. The Google File System: 这是分布式文件系统领域划时代意义的论文,文中的多副本机制.控制流与数据流隔离和追加写模式等概念几乎成为了分布式

由微服务,领域事件,分布式事件谈“业务分析三维度理论”的实践

今天读了在微服务中使用领域事件 这篇文章,通过分布式,订单系统直接将事件推送给订阅此事件的账户系统,然后账户系统再处理,整个系统设计很好. 不过,我觉得所谓微服务的分布式事件,从抽象概念上还是弱了点,不如Actor模型,应该将事件抽象成消息,消息包括命令,事件,或者其它无关紧要的东西.每一个Actor接收场景中的消息,或者产生消息,或者转发消息:消息如何处理,取决于Actor的内置规则. 所以,真实世界的模型是有很多场景,在某个场景中有些Actor,Actor相互交互,发生和改变什么东西.场景中

容器领域软件栈与学习建议路线

容器技术软件堆栈 右边表格标红粗的是相比较最火的,其次是标蓝粗的需要多加关注 生态圈最核心的控制点实际在编排调度层(kubernetes,openstack,mesos,swarm)这其实是PaaS,IaaS的核心点.其属于基础设施层,以此开放能力(Cloud Service),构筑面向行业的SaaS的基础能力. 容器管理这一层分化为两类:面向资源的和面向应用的,CloudServce时代,微服务化架构应用雨后春笋,所以从长期看终会是面向应用的. libcontainer是docker提供的na