软件工程师所需掌握的“终极技术”是什么?

最近,我在微博上看到@程序员邹欣老师发的一条微博 — “不少大学同学都有一个想法:先做几年技术,然后做管理;也有一些同学说:我技术不行,希望直接找到一个管理的工作,就像PM那样。请看 PM 需要什么样的能力:(链接略去)”。在读这条微博的前一部分内容时,我的第一反应是:难道同学们以为做技术管理不需要很好的技术功底?刚好在此之前,我写过《技术敏感度 — 基层技术管理者必备》一文,强调技术功底对于基层技术管理者的重要性。于是,我对该条微博评论了:“建议邹老师建议他们好好地学一学技术,技术的精进一定会让我们或多或少地贯通管理(掌握软件开发的常识)。对于真要做管理的,建议他们在以后摆好心态 — 承认自己对技术的‘无知’,以及充分尊重技术人才并放权于他们”。之后,邹欣老师帮同学们提了一个让人深思的问题 — “技术有很多,有些技术还会过时,你具体指哪些技术呢?”某种程度上,这问题可以理解为是问:“终极技术”是什么?


在执笔本文时,我总觉得以前写过类似的文章。查了一下,两年前的确以《软件开发,到底应当学什么?》为题写过了一篇博文。不过,过去的两年我又有了新的收获,或许可以借此机会再梳理一下自己的认识,以便与大家分享。

身处节奏很快的IT行业,软件工程师一定希望自己在职业发展的道路上掌握“终极技术”,以便将来即使“长江后浪推前浪”仍能获得竞争优势。掌握“终极技术”对于我们究竟意味着什么?深刻理解这一问题有助于我们在面对技术学习和技术选择时不至于迷茫或人云亦云。我认为,掌握“终极技术”的最终目的不是为了能在工作中“耍酷”(“哇,这问题其他哥们都搞不定,只有我能!”),也不是为了追赶“技术潮流”(“听说Go语言以后能替代C/C++和Java,我得赶快去学!”),而是为了高质高效地工作,因为只有这样才能提高我们的生活品质和减少浪费(浪费可能包括奢华的青春和/或宝贵的社会资源)。

实际上,我们一生都是在工作质量和工作效率的二维坐标系上“画线”。有的人一生都难以走出低质低效的困境(比如下图中黑色曲线所代表的人),而有的人却能进入高质高效的殿堂(比如下图中红色曲线所代表的人)。

明白了掌握“终极技术”的意义,那“终极技术”究竟是什么?会是C/C++、Java、Objective-C或Go等编程语言吗?当一个只精通C/C++编程语言的人加入到以Objective-C为编程语言的项目上时,显然他必须重新学习编程语言。由此看来编程语言因为对不同的项目并不具备普适性,难以拥有“终极技术”之名。对于网上不少为编程语言而打口水仗的人,我真怀疑他们将编程语言当作是“终极技术”了。一旦知晓了“终极技术”的存在,你一定会发现,其实所谓的编程语言“优劣”跟本就不是业内的大问题。如果某种语言直接导致了项目的失败,那该语言早就绝迹了;反过来,如果某种语言直接导致了项目的成功,那世界上估计也只会有这一种语言了。因此,选择编程语言的重点不是考究其“优劣”,而是其适用性。过分计较编程语言的“优劣”其实是不成熟的一种表现。这类人还容易犯的一个毛病是 — 生怕落后,热衷于学习新的编程语言。请别忘了,编程语言我们无论如何也学不全,即使真有人学全了,我也怀疑他所学的只是皮毛。

“终极技术”又会是Linux或Windows这样的操作系统平台吗?由于它们同样不具普适性,所以不可能有“终极技术”之实。同样地,.Net、ACE、QT等都不可能是“终极技术”。

真正的“终极技术”一定具有一定的普适性,能让我们将之运用于各种不同的软件项目。正因如此,“终极技术”具有一定的抽象性。对于软件行业来说,真正掌握“终极技术”意味着:深刻地理解软件(开发)的复杂性本质,并拥有有助于实现高质高效工作的行为(意识、工作习惯等)、能力(思维、业务、沟通)和方法(流程、工具、复用)。

由于“终极技术”过于抽象,使得我们不得不通过一些问题来间接感知。比如:
1)编程好习惯对于软件产品的质量重要吗?如果重要,如何让团队形成良好的编程习惯?哪些编程习惯算是好的?
2)软件质量的根本是什么?是设计,抑或测试?高质量的软件对工程师的工作与生活又意味着什么?
3)软件架构师重要吗?还是只是个虚职?如果重要,软件架构师需要掌握哪些技能?
4)在软件行业具有很大影响力的CMM(软件成熟度模型),其倡导用软件过程的成熟度来度量组织的软件开发能力。那为什么通过CMM最高级别认证的组织仍会开发出质量一塌糊涂的软件?如果你身临其中,能发现导致这种糟糕结果的关键因素吗?
5)软件平台与框架被广泛地认为是高效开发高质软件的方法,但为什么企业运用这一方法后,平台与框架最终却成了一个包袱?困境的表现是什么?什么因素造成了这种困境?有方法避免进入这种困境吗?
6)业内大量使用“最佳实践”这一词汇。真正存在最佳实践吗?为什么有的“最佳实践”在组织中却无效?
7)……

这些问题大多是开放性的,而且不少问题既涉及管理域,又涉及技术域。面对这些问题的关键不在于其是否有标准答案(或许根本没有标准答案),而在于我们是否为之痛苦过、思考过,并形成了自己的想法。要知道,这些想法就是我们在工作中面对选择时用作决策的依据。如果从来没有这类苦恼,很难想象我们真正掌握了“终极技术”。值得一提的是,这些问题只是基于我自己肤浅的认识所提出的,我相信读者还有很多类似或其他的问题。

如果将软件(开发)的复杂性比喻为一头大象,那么我们每一个人或许是正在摸象的又瞎又聋的人,我们穷一生通过“摸”的方式,在头脑中构建“象”的模样。这个比喻间接地告诉我们,“终极技术”并非是某种一成不变的内容,其中更涵盖有每个人根据自己的阅历所总结出来的在高质高效工作道路上成功应对困境的方法和信念。

“终极技术”一定是通过掌握象编程语言等非“终极技术”而最终掌握的,也需要我们通过经受软件项目的痛苦磨砺去沉淀。在没有掌握“终极技术”之前,请不要停留在编程语言专家、Linux内核专家、.Net专家这样的光环之下,继续探索,前面还有更大的舞台等着你!在掌握“终极技术”的职场旅途中,我们得先认识到一点:就技术内容而言,职场首先比拼的并不是智商,而是我们的坚持与良好的工作习惯。工作中的很多道理我们都懂,但就是不能坚持做到深究,也难以通过坚持克服陋习去形成更多的好习惯。在掌握“终极技术”的道路上,我们一定会看到很多不尽人意的内容,也会面临不少困难与挫折,即使理智上悲观,但我们在行动和意志上一定要保持乐观(注:Antonio Gramsci的原话是“理智上悲观,意志上乐观”)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux中项目部署和日志查看

1 查找进程 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 ps -ef | grep java 查看所有关于java的进程 root 17540 1 0 2009 ? 01:42:27 /usr/java/jdk1.5.0_1…

走技术线,还是技术管理线?

最近因为要给刚毕业的学生做一次演讲,所以就职业发展这类话题先以写博客的形式做一些思考,希望届时能给同学们带来质量更高的内容。我在《驾驭你的“职场布朗运动”》一文中谈了25条职场感悟并提出了“走技术线,还是技术管理线?”…

[Nikon D80]樱花盛开的校园

花开花落,阳春三月,随身背着相机在学校里游走,不断的寻找视角。知道自己拍的不好,总觉得自己拍的片有各式各样的缺陷,也许这就是大师与学徒的区别吧。用好手头的装备,出好片,锻炼Visual Effect …

软件技术发展的驱动力

软件产品的终极目标是为了实现用户需求从而满足人们的需要。也正是为了不断满足人们的需要使得软件行业不断向前发展。比如,新的算法(MPEG-1、MPEG-2、MPEG-4、H.264、……)等的出现都在当时为了满足不同的需要而被发明。然而,人们…

无敌简单快速的文件服务器sgfs

前言 想要构建一个Linux文件服务器?看看下面几个要求是不是你想要的? 1、只需要单节点部署就够了 2、部署启动简单,下载之后,一键启动,一键关闭 3、不需要任何其他的依赖安装,而且运行时占用内存资源少 4、…

CSS margin 属性简介

CSS margin 属性 设置外边距的最简单的方法就是使用 margin 属性。 margin 属性接受任何长度单位,可以是像素、英寸、毫米或 em。 margin 可以设置为 auto。更常见的做法是为外边距设置长度值。下面的声明在 h1 元素的各个边上设置了 1/4 英寸宽的空白:h…

MVC中使用代码创建数据库(code first +mysql+EF)

1.新建一个mvc项目 2.安装mysql需要的几个文件 EntityFramework、MySql.Data(6.9.12)和MySql.Data.Entity (6.9.12) 这里有几点要注意 1.MySql.Data和MySql.Data.Entity 版本必须一致 2.我试用了6.10的版本 要报错 3.我测试没有问…

github 学习使用

博主第一次使用github,所以会将过程全成描述欢迎使用Github注册安装进入仓库,创建、修改、上传文件。强制推送强制覆盖上传文件欢迎使用Github 注册 直接进入github官网:https://github.com 点击sigh up 进行注册 直接填写即可然后验证通过…

软件质量管理之困境与对策思考

相信在不少与软件开发相关的企业内,质量管理部门与软件开发部门在日常运作中形成了如下图所示的“哑铃形”组织结构。 开发部门执行质量管理部门所制定的流程,通过提供证据的形式将各种流程执行后的数据反馈给质量管理部门(包括缺陷率和各种流…

什么是 FreeMarker

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 转自官方文档,只是记录下官方在线手册地址:http://freemarker.foofun.cn/ FreeMarker 是一款 模板引擎&#xff…

C 温故知新 之 指针:数组指针、字符串指针、函数指针

一、数组指针 1.指向数组元素的指针 1、定义:还是那句话通俗的说指针就是地址   数组指针 :数组的起始地址 数组元素指针:数组元素的地址 2、定义一个指向数组元素的指针变量的方法,与之前介绍的指针变量相同。 例如&#…

mysql 查找配置文件 my.ini 位置方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 个人备注:不显示文件类型时,my.ini 文件名就叫作 my, 文件属性才显示 ini。 找到 my 文件看属性就知…

嵌入式操作系统内核原理和开发

嵌入式操作系统内核原理和开发(开篇) 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了。如果问大家操作系统是什么?可能有的人会说操作…

Java中对象比较

在Java之中不仅仅存在两个数字与两个字符串之间的比较,还存在两个对象之间的比较。 众所周知,两个数字之间的比较我们使用“”,两个字符串之间的比较我们使用“equals()”,那么两个对象之间如何进行比较呢?既然要进行两…

并发编程(多进程1)

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子进…

一本通1629聪明的燕姿

1629:聪明的燕姿 时间限制: 1000 ms 内存限制: 524288 KB【题目描述】 城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。 可是燕姿不一样,燕姿知道自己等的人是谁,…

数据清洗,筛选

本人在私募,负责数据收集以及清洗,就是包括收集数据,按照领导要求,选出满足条件的数据,用于校验策略是否正确。 现在就在这进行代码上传,即用于自己总结整理,也用于供大家学习了解,实…

HSTS的来龙去脉

前言 安全经常说“云、管、端”,“管”指的是管道,传输过程中的安全。为了确保信息在网络传输层的安全,现在很多网站都开启了HTTPS,也就是HTTPTLS,在传输过程中对信息进行加密。HTTPS使用了对称加密、非对称加密、消息…

利用XShell上传、下载文件(使用sz与rz命令) 超实用!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 rz、sz 安装方式:sz/rz命令安装方式 借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地&#…

quantaxis使用docker安装,解决了一个很奇特的问题

之前使用docker-compose pull 更新之后,使用docker-compose up进行安装。出现 qaweb显示address already in web,cmd中显示Starting qa_web is wrong。之前一直觉得什么毛病啊,试了很多办法。 比如关闭8010接口: netstat -ano|findstr “801…