邻居的一位同学快毕业了,签约到一家从事物联网的公司,计划是从事 stm32 芯片相关产品的开发。他找到我问:“骆驼,我需不需要学习一下汇编?”西安一所知名大学的毕业生来问我这个问题,我有点不知道如何回答。他在大学期间老师应该对职业规划作出了明确的指导才对,如今来问我这个问题是不是有点晚?话说西安地处内陆,人们的思想有些保守,发展有些滞后,但是如今互联网如此发达,很多问题其实他可以通过网络了解。
2013 年时,我到西安一家电力企业工作,部门经理向我提了一个要求 --- 指导硬件部门的同事学习一下 C 语言。我的顶头上司,也就我的这个部门经理,工作十几年了,一直使用汇编语言编程,而且竟然完成了公司复杂的开发任务。另一位在单位工作 5 年多的女同事使用的也是汇编,新招的一个研究生只是负责硬件的设计。另外两名同事也是刚毕业的,我成为单位唯一有 C 语言编程基础的人。
说起我从汇编向 C 语言的转型,还有一个小插曲。我毕业后做的第一个项目也是以汇编语言作为工具开始的,但是在项目进行到三分之一时换了领导,新任的领导要求我们必须使用 C 作为开发工具,我只好被迫转型。从此以后,我再也没有使用汇编完成过一个项目,时隔多年除了一些基础概念,汇编语言也基本忘光了。后来的工作中我再也没有接触过汇编。目前看来,随着编程语言的发展,人们对高级语言的接受程度越来越高,未来貌似也不会有机会使用汇编了。现在我在做 liunx 项目使用的是 C++,但是我当年可是花费了
很多时间去学习汇编的,真是让人懊恼奥不已。
说起那次被迫转向 C 语言,其实我当时对这件事情非常排斥。但是刚到新单位工作,领导又如此重视这件事情,实在不好意思拒绝。这个项目结束以后,又过了半年单位就彻底放弃了汇编。我因为任务完成的出色还受到了单位的奖励。
现在工作的单位还有几款产品是使用汇编开发的。有一天在外地工作的一位销售经理回西安了,满口称赞那款产品。
“看看人家汇编代码,写的多规整,没有一行多余的……”
一个现象的出现总是有很多背景因素。当年之所以选择汇编有很大历史缘故,一是单片机资源问题,二是 C 语言开发人员的储备问题。至于“没有一行多余的”,只能说这位同事不懂汇编,甚至可能不懂程序。程序为了健壮总会有一些冗余的代码。
而且编程的问题不仅仅体现在语言上,并且语言所占比例非常少,而且随着工作的时间变长,会发现语言所占的比例越来越少。最后就会出现根本不是问题。如果您去面试一份工作机会,面试题中考察语言成份的问题越多,说明这份工作越没有技术含量。
一个程序员价值应该体现在解决问题的能力上。对某一方面知识掌握只是其解决问题能力的一小部分,这是一个综合的问题。而且有一个很奇怪的现象,就是经常使用的知识也只占我们所学的专业知识的一部分。但是其它知识即使不用,也不能缺失。在平时可能体现不出任何问题,但是在关键的时候就有了明显的区别,所以程序员是一个综合知识结构体。
第一,首先必须拥有良好的专业背景知识。对计算机原理、计算机体系机构有一个较好的了解。知道计算机为什么能自动的处理、解决问题,其优越性和局限性是什么。这个问题在本科或者专科阶段就应该非常明确了,但是在学校的课程比较简单,所以只能大概了解一下了。
不过要有一定的感觉,比如明白申明得一个变量与物理内存的之间的关系。虽然这一点看似非常简单,但是也有工作很长时间的工程师不是太明白。
第二,如果从事单片机或嵌入式的程序开发,对硬件必须有一定的了解。程序是在硬件中运行的,如果程序运行结果与预计的有区别,必须作出一个准确判断,到底是硬件问题还是软件问题?并且有一定解决硬件问题的能力。这就要求程序员必须对元器件、数字电路、模拟电路有一定掌握。
第三,比较深刻理解了《数据结构》,有可能工作很长时间也没有使用过二叉树、链表、队列等等。但是《数据结构》是以计算机为工具解决问题总体介绍,即使我们不是明确使用了其中内容,但是书中的概念和解决问题方法总是影响我们的编程思路和解决问题的方法。
第四,了解一种编程语言,并且能完成日常性工作。之所以是“了解一种语言”,是因为“掌握”一种语言牵扯的问题太多。合格的程序员需要一个养成的过程,需要一个不短时间的工作过程,这个过程时间远比学习的时间长。也就是只有在工作中才能产生合格的程序员。但是也没有什么要特别担心的,学习也可以产生能工作的程序员。
第五,具有良好的编程风格,一个程序员风格到底怎么样,不是太容易界定。但是良好的编程风格有明确的体现。程序的容错性、扩展性、一致性、复用性都必须有非常好体现。这个更是不容易通过短时间的学习获得。日雕月磨通过一段不短时间的学习,一部分人可以是做到的。
当然还有其他方面的要求,比如文档处理能力,行业应用知识等等。这个是列举不完的。程序员的群体非常特殊,水平高程序员可以完成一件普通的工作,水平低程序员也同样可以完成一件普通的工作。只是使用时间、资源不同,以及完成质量不太一样。但是如果目标是为了完成工作任务,其实有可能都是可以的。这就给人一个非常不好的错觉,就是程序员的工作技术含量不高。很多企业不愿意花更多的钱来聘请技术水平更好的程序员。可以说这种观点非常不靠谱,或者管理者没有没有仔细核算成本。一个项目三个月完成、四个月完成、六个月完成,企业不是仅仅多付出一点点工资。而是牵扯到产品上市延迟、办公场地、行政管理等费用支出,如果与涉及到与其他部门协调问题,更是麻烦。如果产品因为程序可靠性低的问题,在后期维护上成本支出更大。这些费用应该是程序工资 10 倍甚至更多。
其实我不太想告诉邻居到底是“学”或者“不学”汇编语言。一个合格程序员的也不仅仅是多学一两门语言的问题。而且泛泛学习某种语言也不是太难的事情,有一句比较刻薄的话 ---“如果你已经会使用一种语言编程。另外一种也就半个小时至两天就可以上手。否则就是 ...”我怀疑这句话是一位非常自信的程序员提出的,但是确实有参考性。
与非网原创内容,不经允许,不得转载。