什么是程序员_程序员的解释_noock的博客-程序员宅基地

技术标签: objective c  语言  汇编  脚本  开发工具  软件工程  编程  一家之言  

    对于前几天的一篇博文《好的程序员应该熟悉的几门编程语言》,有网友质疑我对程序员的定义,很可能是感觉我对程序员的定义超出了其想象,但事实上程序员的定义应该远远超乎其想象。这里说明一下我对程序员的理解,也没有绝对的对错,不同意见的朋友可以讨论,疏漏部分期待补充,欢迎交流沟通。

    在软件工程上“软件=程序+文档”,有些把数据也列为软件的一个要素,但我喜欢把数据当成程序的一部分,因为数据是用于记录计算机指令执行状态的。而且我认为,文档不仅仅是指软件的使用说明书、需求、设计等文档文件,还应该包括与软件相关的所有文字,包括代码注释,甚至源代码以及软件界面中显示的所有文字。而进行程序开发的人员都是程序员。

    记得有一篇文章将程序员分为十几个等级,分得比较细,每级之间可能就差一两年的差距,甚至更接近,但有些阶段或许需要一辈子去追求。我个人比较讨厌记数字,数字对于我来讲多了与没有是一样的,所以我不喜欢分那么多级别,我认为程序员只需要分为三个级别:编码人员、设计人员、架构人员。

    其中,编码人员负责对已有设计的编码实现。这个级别的程序员很可能就是很多人眼中的程序员,但其实这类的程序员准确地讲应该叫Coder,与“程序员(Programmer)”的概念是一个部分与全部的关系“,是一个具有包含关系的概念,而不是相等。该级别的程序员关注的是局部的实现以及代码的优化,不对系统的整体负责,这一级别的程序员超越该级别的一个条件就是达到编程实现时的语言的无关性——无论用什么语言,只要有了设计都可以对其进行实现,语言只是编码实施的工具而已。除了编码实现时需要使用的主要编程语言,可能还需要其它语言进行辅助开发,比如开发工具的自动化脚本、测试的自动化脚本、构建的自动化脚本、数据库查询语言等,所以才写了《好的程序员言熟悉的几门编程语言》。每一类语言都有它与其它类别的语言不同的编码方法、编码风格、实现思路、优化方法等,每一类语言都熟悉一种,一旦用到某一类语言就可以很快上手进行编码实现。这也是十几年来的心得,记忆比较深刻的最早一次就是在上大学时的一次微机原理实验课上,老师让编程来控制一个硬件电路板实现一个数字时钟,因为课下在另外一个实现室学习过Keil的C语言编程,所以用了没多长时间就使用C语言实现完了,然后交给老师看,结果老师说必须使用汇编,然后又用剩下的时间用汇编重写了一遍交了作业。虽然是一次实验课,但在工作中也经常会遇到类似的情况,从开始用MCS-51的汇编、C语言编程,后来用到CPLD、FPGA开始用VHDL编程,又感觉VHDL语言不够简洁,又改用Verilog HDL,后来学C++、VB,脚本学了shell跟python,工作中遇到旧代码是用perl写的,然后就拿本perl的书查着语法把旧代码给改了,做界面又用C#,在开发Oracle的应用程序时由于C++的库收费,然后就又选择Java实现,做WEB时用到Flash,又开始用Action Script做拓扑图,后来公司要开发iPhone应用,又学习Objective C等等。通过一种种新语言的学习,一路过来并没有感觉学习一门新的语言要花太多时间,一旦把一门语言掌握得比较熟,理解比较深,特别是C++,再学习其它语言非常快,而语法只需要把书翻一下就可以了,无非就是一些变量定义、流程控制、函数定义、对象定义、API,每种语言大同小异。通过多种语言的学习,最终达到一定的境界——语言无关。

    当然编程语言只是超越这个级别需要提升的其中一个方面,只是工具而己,并不是会了语言就是一个好的程序员了,这只是一个必要条件,还必须对微机原理、操作系统、数据结构、算法设计等有一定的理解,保证在根据设计进行实现时没有障碍。

    然后,更高一级别就是设计人员,这一级别的程序员要能够完成一个小型的软件或系统的一个组件的设计,因为之前的修炼已经了解了常用的设计语言以及底层的基本技术,再加上对设计模式、面向对象等设计方法的学习与理解,能够完成一个完整的设计,并完成概要设计和详细设计,因为文档也是软件开发一个很重要的部分。 这一级别的程序员,不仅要对自己的产品理解较深,对常用的设计技术熟练掌握,还要对一些开源的组件、程序库有一定的了解,能够不再“造轮子”,把精力集中在业务上,迅速完成小型的设计方案。

   最后,也是最高一级别就是架构人员,这一级别的程序员要能够完成对整个系统的架构,不仅要对各种开发工具、方法、语言有足够的理解,还要能够对技术选型做出正确的决策,对三方组件、相关开源工程的了解有足够的广度和使用经验,能够深入理解整个系统的上下文环境,并根据环境及业务需求做出正确的决策,完成技术的选型、架构、接口定义,然后对系统进行解耦、切分,以将不同的模块、组件交给更低级别的设计人员设计,从而完成整个系统的设计。这一级别的程序员不仅要在技术上能够做出正确决策,还要有足够的经验从各上方面对系统进行评估,平衡各方面因素,包括技术的与人文的,而且要能够充分评估风险,保证设计切实可行。

    总之,程序员不仅仅只是编码员,好的程序员也不只是会使用一种语言写出好程序就可以了;而且,好的程序也不单单中代码运行效率高、稳定性好、性能好,因为在软件的整个生命周期中开发阶段仅占其不到一半的工作量,程序好不好应用软件的整个生命周期进行评价,这又引出另外一个话题,不再展开,有机会再讨论。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Nocky/article/details/8079177

智能推荐

swoole mysql 协程_swoole中的协程_冰鬼的博客-程序员宅基地

全局变量的危险性我们知道php-fpm模式是mast主进程->work子进程,一个http请求过来,从index.php开始加载执行,遇到io时挂起等待,直到io执行完成在继续往下执行,整个过程就是按照代码顺序执行的,fpm会通过fastCGI在请求完成时把内存释放掉,因此无论全局还是局部变量都会被销毁。而swoole是内存常驻,全局变量、全局对象在swoole程序全局期swoole生命周期..._swoole协程swoolecoroutinemysql

synchronized和volatile的区别-程序员宅基地

volatile关键字只能用于修饰变量,synchronized关键字可以修饰方法和代码块。volatile关键字是线程同步的轻量级实现,性能比synchronized关键字好。synchronized关键字在javase1.6版本之后进行了优化,引入了偏向锁和轻量级锁,减少了获得锁和释放锁带来的性能消耗,效率显著提升,所以现在基本不需要考虑两个关键字之间性能的差距。发生多线程访问时,volatile关键字不会发生阻塞,synchronized关键字会发生阻塞。volatile保证数据的可见性,但不.

Freeradius原理_freeradius 下发限速-程序员宅基地

FreeRadius原理,转载自:chinaunixFreeRadius原理分为3个部分:用户/nas/radius用户提供认证名、密码到NAS(Network Access Server)NAS一般是路由器、交换机等设备NAS提交相应信息到radius服务器,由radius服务器进行认证,其中认证信息也可以存放于mysql、ldap、oracle、postgreSQL等数据库_freeradius 下发限速

非理工科编程零基础文科生秒懂python学习笔记:pandas库dataframe核心基础数据选取loc与iloc_gdp_data.iloc[3,1:]_錒鉿一心大口吃肉换行写代码的博客-程序员宅基地

dataframe是python数据分析基础中的核心, 这位按字面意义可理解为数据表格、数据框架, 她跟excel的table很相似, 由三部分组成: 行索引,称为index; 列索引,称为column; 数据内容。 她的每一列都是一个series对象。_gdp_data.iloc[3,1:]

VMware Horizon 8 2303 - 虚拟桌面基础架构 (VDI) 和应用软件_sysin.org的博客-程序员宅基地

VMware Horizon 8 2303 - 虚拟桌面基础架构 (VDI) 和应用软件

JDBC连接MYSQL(实现查询数据库)-程序员宅基地

一、准备工作1、安装MySQL,2、安装Navicat Premium,因为只安装MySQL无法观看,管理具体数据库信息所以要安装Navicat Premium数据库管理工具。3、下载下载MySQL jdbc驱动:mysql-connector-java-5.1.42-bin.jar。二、连接1、加载数据库驱动程序首先将上面下载的驱动程序导入项目中,之后找到Driver.class的路...

随便推点

go语言Base64解码遇到的坑_hbmgyt-程序员宅基地

eyJhdF9oYXNoIjoiZXktaVFoY3NEUGdPR1pjTEh2MGJ4dyIsImF1ZCI6WyJhbm90aGVyLWNvbnN1bWVyNyJdLCJhdXRoX3RpbWUiOjE1NzgzNzg4NTAsImV4cCI6MTU3ODM4MjQ1MSwiaWF0IjoxNTc4Mzc4ODUxLCJpc3MiOiJodHRwOi8vMTcyLjE2LjIzLjE5Ojkw..._hbmgyt

Python告诉你这些旅游景点好玩、便宜、人又少!-程序员宅基地

(图片由CSDN付费下载自东方IC)作者 | 猪哥来源 |裸睡的猪(ID:IT--Pig)2019年国庆马上就要到来,今年来点新花样吧,玩肯定是要去玩的,不然怎么给祖...

html侧滑菜单代码,MUI - 侧滑菜单(示例代码)_李培智的博客-程序员宅基地

各大APP必备的侧滑菜单栏,支持手势滑动。包含QQ式、美团式等结构模板这里是示例Html, 必须使用Mui框架才能使用。主容器 菜单窗体 主窗体 左菜单 mui-off-canvas-left 右菜单 mui-off-canvas-right关闭侧滑菜单显示侧滑菜单侧滑核心js代码动画效果主界面移动,菜单不动 默认菜单移动,主界面不动 mui-slide-inQQ式移动 mui-scalablem...

python 取多维数据的某一列_python取list的第一维-程序员宅基地

table=[[0,0,0,0],[1,1,1,1],[2,2,2,2],[3,3,3,3]]不能使用table[:,0],可将其转为array,然后取列table1 = numpy.array(table)取第一列 table1[:,0] 得到[0 1 2 3],如果需要list,可以将其转为list,list(table1(:,0))..._python取list的第一维

upstream负载均衡-程序员宅基地

upstream 模块==========================================与 proxy 模块结合使用的模块中,最常用的当属upstream模块。upstream模块可定义一个新的上下文,它包含了一组upstream服务器,这些服务器可能被赋予了不同的权重、不同的类型甚至可以基于维护等原因被标记为down。示例:==================ups..._upstream

定性数据分析中高维列联表分析流程(附R代码)-程序员宅基地

动手写写关于定性数据分析上学期选修了定性数据分析这门课程,教材是王静龙、梁小筠的定性数据分析。高维列联表分析流程目录第一章 绪论 71.1 问题研究背景 71.2 数据来源 71.3 研究意义 1第二章 高维列联表独立性检验 22.1 高维列联表的相互独立性检验 22.2 高维列联表的边缘独立性检验 22.3 高维列联表的条件独立性检验 32.3.1层属性“地区”给定时的...