> 文档中心 > 程序员是做什么的?怎么成为程序员?

程序员是做什么的?怎么成为程序员?

我是一个程序员,我知道程序员是做什么的,但是我身边有很多亲朋好友并不知道。
他们经常认为程序员就是对电脑很懂得人,包括电脑的软硬件问题,包括电脑装系统。
实际上,可能不只是我的这些亲朋好友,绝大多数不做程序员的人可能都不知道程序员究竟是做什么的,也不太清楚何谓程序、何谓软件。程序员到底是做什么的,这可能是很多想要进入软件行业的人都很想知道的一个问题,那么我就根据我目前的理解说说我的看法,如果有理解有误之处,欢迎指正。

软件和硬件的区分及关系

首先,现在电脑和手机都应用非常普遍,大家都知道手机和电脑上都有很多软件,例如微信、QQ、支付宝,他们都是软件,甚至于手机的基础功能打电话、发短信,手机和电脑的基本操作系统等,他们也全都属于软件。
那么与这些软件对应的,我们可以直接摸得到的设备如电脑、手机、平板等等,就是硬件,软件最终依托于硬件之上。

软件的部分分类

上边举例了很多的软件,但是就如硬件各种各样,软件也是各不相同的,软件也有很多的分类。
例如微信、QQ、支付宝、打电话、发短信等,就属于应用软件,而像android系统、windows系统这些就属于操作系统软件。
应用软件一般都具有特定的直接服务于用户的功能,操作系统则是可以直接管理硬件资源,应用软件一般依托于操作系统之上。
虽然这些都是软件,但是可能区别就相当于飞机和火车一样,会开飞机的未必会开火车,会造火车的未必会造飞机。

软件和程序的区别

那么,大概了解了软件和硬件的区别,对软件有个大概概念之后,就可以进一步理解软件和程序的区别了。
一般而言,软件是由程序构成的,软件一般是具有具体功能、可以使用的程序包,而程序可能只是一小段代码
假如说一辆小轿车就是一个软件,那么上边的轮子、方向盘、离合器就都是不同的程序,各种各样的零件最终组装成一辆小轿车,就如同各种各样的程序片段最终形成一个软件。

程序和代码

上边提到了程序可能是一小段代码,生活中可能也会听到有人说程序员就是码农,就是敲代码的,那么代码是什么呢?
某种意义上,代码和程序可能可以理解为一个意思,通俗点讲,代码就是用编程语言写出来的一行行的字符串。
字符串是什么,简单理解就是若干个字符的组合,字符又是什么,常见的英文字母以及数字都可以称为字符。
如果不考虑中文编程语言的情况下,可以理解为代码就是根据特定规则,用英文字母和数字以及各种符号组成的字符串。
这种字符串由于遵循了某些特定的格式,因此最终可以被电子设备如电脑、手机等识别并做一些事情。

什么是编程语言

那么上边说了,代码就是根据特定规则编写的字符串,因为这些特定的规则,所以最终这些字符串能转换成电信号,而电信号才是直接和电子设备的硬件打交道。
电信号从某种意义上来说只有有电和没电的区别,那么最初要直接转换成代码的字符串,就是由0和1组成,一个代表有,一个代表没有,专业的说法就是真或假,true或者false,这种格式组成的代码,称之为机器语言。
单纯的0和1组成的字符串,对于人类来说肯定是不友好的,完全看不懂,所以需要特定的对比规则进行对比翻译。
为了对人类更加友好,于是0和1组成的机器语言的基础上又发展出增加了一些英语单词规则的新的编程语言,称之为汇编语言,而 那些英语单词称之为助记符。
汇编语言相对于机器语言,由于增加了助记符,所以肯定是更容易被人看懂和记住的,但是由于助记符是有限的,实际上依旧不是那么容易,因此在此基础上就又发展出了对人类更加友好的编程语言,称之为高级编程语言,这个阶段语言的思想是面向过程的,代表行的就是C语言。
什么是面向过程呢,我理解的就是关注点在于这一步做什么、下一步做什么。
那么随着软件技术的发展,又进一步发展出了其他的高级编程语言,例如C++、JAVA、C#、IOS等等,像JAVA等语言的思想就是面向对象,关注点就是这个东西能做什么、有什么,而不是关注过程。
面向对象的这种思想相对于面向过程,就对重用、复用更友好,但是做一件事情必然有先后顺序,因此最终还是有面向过程的东西在里边,并不是说面向对象就不管过程了。

程序员是什么

那么有了上边的知识基础,就能再来说程序员是什么了。
通过上边的叙述,应该可以知道,软件是由根据编程语言写出来的程序组成的,是用来操作电子设备的,那么写这种程序的人,肯定就是程序员。
但是,如果说程序员就是敲代码的,那就不完全正确,因为程序员的分类至少就有开发、测试、运维、DBA这些,开发是主要写代码的,测试和运维以及DBA不一定写代码,但他们其实都算程序员。
程序员有哪些分类
其实上边也提到,开发、测试、运维、DBA都算程序员,这是一个比较大的分类,但不是唯一,如果是用来简单初步了解程序员,我想应该够了。
开发主要是实现软件的功能,主要敲代码的。
测试主要是进行专业的测试和验证,但是并不局限于功能,还需要性能测试,很多时候可能也需要写脚本类的代码支持自动化测试。
运维主要负责软件运行环境的搭建和部署以及部分软件使用问题的支持,同时也可能需要写脚本或者其他代码支持自动化部署。
DBA主要是处理数据库相关的事情,经常需要优化操作数据库的sql,sql本身也是一种代码。
除了上边说的,单纯的开发来说,实际还可以有更多细分,例如主要负责看得到的页面的,称作UI,但是很多时候实际没有专门的UI,而是页面由前端一起负责,前端程序员实际就是直接操作看得到的页面功能的程序员。
与前端对应的就是后端开发程序员,实现一些看不到的功能逻辑,有的直接有前端的功能页面对应,有的就是纯粹的后端程序。
上边的简单分类实际是站在软件分层的角度说的,那么实际还可以站在编程语言的角度分类,例如java程序员、c++程序员、c#程序员等等,这些分类实际就是以命名的这个编程语言为主,但是实际未必就只会这一种。
就拿java后端程序员来说,一般可能都还会一些前端javascript语言以及linux的shell语言。

怎么成为程序员

可能有一些不是程序员的朋友想要成为一个程序员,因为目前公认的,程序员普遍收入是比较高的。
那么怎么成为一个程序员呢?
首先,我觉得要先确定好自己的方向,是想做软件开发,还是软件测试,还是软件运维,还是DBA?或者所有都做,成为一个全栈程序员?
众所周知,人的精力是有限的,术业有专攻,虽然也有很多人是全栈程序员,是什么都做,但是个人认为如果零基础想要直接成为一个全栈,实际是有很大难度的,所以个人觉得还是先找一个熟了再说。
话再说回来,怎么成为一个程序员呢?
首先,还在读书的,可以选择计算机专业,很多计算机专业,学校都会有程序员相关的专业和课程。
其次,如果已经选择了非计算机专业或者已经出了社会,也可以自学或者参加培训机构的培训,或者有人脉的也可以直接找熟人教。
计算机专业就不说了,应该也不需要看这篇文章。
先说自学,这个对于多数人都是很有难度的,很容易信心满满的开始,垂头丧气的放弃,虽然我觉得很多编程语言入门都很简单,但是自学依然还是会有很大难度。
再说培训,这个是很多野生程序员的选择,正所谓术业有专攻,人家就是吃这碗饭的,自然有能吃这饭的道理。相对于自学,参加培训肯定更容易入门学会,只是不同的培训机构水平不同,不同的培训机构理念不能,能否找到好的培训机构就需要注意。
另外,培训机构一般讲的都很快,最好是先试听一段时间再说。
最后再说熟人教这事,这应该选择的人比较少,虽然可能看起来省钱,但是也可能因此没有那么大的压迫感,也因为并不是专业教学的,所以最终很难学会。