软件工程真的是一门什么用都没有的学科么?

软件工程真的是一门什么用都没有的学科么?

-----读《构建之法》有感

楔子

我很惭愧,构建之法这本书已经出版四五年了,我之前却未曾涉猎,还是在通过组织长沙.net技术社区之后,才因为因缘际遇有幸认识邹欣邹老师之后,才了解和阅读了这本书。这是一本非常不错的软件工程学著作,事实上应该值得IT企业中不同岗位的从业者都来读,而不仅仅只是软件工程师或软件设计师来读。  


回到10多年前,当时我有幸就读于位于湖南湘中小城娄底的人文科技学院,那是湖南众多二本院校中排名较后的普通学府,并且我就读的专业是数学系下的学科,信息与计算科学专业,这是一个数学和计算机的边缘学科。事实上呢,其实当时班上绝大多数人都是调剂生,我是为数不多的一志愿录取吧,因为对计算机感兴趣,高中数学成绩太差,想在进一步学习数学才选了这个专业,当然,实际上入学后我的数学成绩依然很差,这就是后话了。 


由于这个专业的教授队伍本身就是数学教授为主,因此开设了许多数学加计算机的课程,那些数学课程令我头大,屡屡挂科,但是那些计算机学科的课程却令我痴迷,并最终让我选择了IT行业,并在这条道路上已经迈过来十个年头,甚至已经决定把他当做终生职业来奋斗。这些课程中,包括了软件工程,当时使用的教材来自于清华大学,那本在我这种阅读爱好者看来浅显易懂的软件工程基础书,在我的同学眼中却仿佛看天书。在书中,作者以比较容易理解的角度简单介绍了软件工程的前因后果和本质,让我觉得如获至宝,经常手不释卷,一直到大学毕业后三年,我都保留了这本书,并时常翻阅。

什么叫做软件工程?

不知不觉从业十年,再回过头来看这门学科,我觉得我有了不同的体会。软件工程究竟是什么?应该说时至今日,许多资深从业者都不能理解,这也证明为什么有的院校的软件工程课,最终应学生的要求改成了学习JAVA视频教学的原因吧。作为一名十年经验的开发者,我不打算引用原文中的话来说明究竟什么是软件工程,而是说一下自己的理解,我认为软件工程实际上定义了IT公司的管理流程,设计理念,企业架构的方方面面。在这个知识大爆炸的时代,计算机领域的书籍非常多,大部分都是偏重于介绍开发者技能提高的书籍,大概可以成为技能书,通过阅读这些技能书,开发者只需花较短的时间就能快速的掌握作者多年学习的收获,并快速的成长,进而实现自己收入的大幅度提高。软件工程所介绍的内容,在某些读者眼里,看起来就像天书昏昏欲睡,尤其是那些UML图和设计理念,在某些开发者眼里认为,就是浪费公司的人力财力和时间,于是有人说软件工程其实什么用都没有。 


我觉得软件工程更像是心法,技术不好的时候,心法通则技术通,技术好了,更需要读心法,这样可以让你的念头通达,格局透彻。软件工程,或许并不像一门工程学,更像两种东西的融合,一个是软件管理学,一个是软件设计学,更像是从更高的维度来看待软件和软件公司的全生命周期,又从更微观的角度来介绍如何优雅的设计一个软件。这也大概是邹老师的杰作,《构建之法》的标题,取的是构建,而不是架构的原因吧。 


构建是什么?在最开始听到这个名词时,我以为是build,我甚至觉得构建一个软件,不就是开发集成环境中的一个按钮么?难道这本书谈的是编译原理?然而我错了,这本书实际上是build一套企业管理制度和文化,build一套切实可行的软件技术体系,正是讲述如何优雅的build一家能够持久生存的IT公司,用现在的主流说法,就是打造优秀IT企业的最佳实践方法吧。 


当然,来到9102年的今天IT公司似乎已经成为一个令人不适的名词,在大家的眼中,仿佛言不离互联网公司,似乎一家公司自称是IT公司就自降身价一般。然而,互联网公司难道不是IT公司么?留给读者们评说吧。

 

那些所谓的最佳实践

说到最佳实践,目前我也在一家互联网公司,也有幸接触了一些比较大的圈子,那就是中国的MVP们,他们是微软最有价值的技术专家,这些专家们都对技术充满了无限的追求、并积累了丰富的知识体系,从他们的交流沟通过程以及我自己平时的积累,我遇到了以下几种常见,却不一定正确的最佳实践。 


1、设计优先 
互联网公司常用的模式之一,就是设计和用户体验优先,在这种理念中,认为用户体验是第一生产力,技术是第二生产力。先把面子做好,再把产品做好。 


2,架构优先 
这种理念认为,软件架构体系是决定软件生死命脉的关键因素。往往容易变成架构师优先,往往会招一位优秀的架构师,然后来组建他的核心班底,再变成一家技术优先的企业。真的是最佳实践么?谁吃过苦谁自己明白。 


3,中台优先 
阿里巴巴的实践告诉我们,要重中台,轻前台,一切以业务流转为目标。但是真的是每家企业的最佳实践么? 


4,数据优先 
这种理念认为,数据是第一生产力,一切业务都是数据。在前几年的DT时代,就是这么鼓吹数据优先,然后各种大数据平台层出不穷,但是,往往做成了多数据,数据大(意思是指那些看起来大,却不符合5v特点的数据),却很少有必要做成大数据,大数据也属于被国人玩坏的概念吧?。

 

论构建的重要性

可以说,中国人大概是最善于玩文字游戏的,那些来自成功企业的所谓最佳实践,依然得依据企业的实际情况出发才能产生效果。 


我认为,或许对IT企业来说,最佳实践应该依然是,构建优先,即作为一家软件公司,野蛮生长到最终,依然是构建符合企业实际的IT企业管理体系。例如阿里巴巴,不仅汇聚了全国最顶级的技术人才,更是建立了一套最为完善的IT管理体系,最终才得以让IT技术促进企业得以快速发展。 


必须承认,在中国有许多业务优先的公司,其实并不能理解IT公司与传统公司的区别,总是用自己片面的理解认为,公司什么都缺,缺的只是一个程序员或几个程序员,但是,真的是这样么?没有,哪怕有幸被你招到了一位能独挑大梁的优秀程序员,往往也会由于与企业文化和管理理念极度的不适应而离去。 


在互联网概念已经深入人心的今天,从某种意义上讲,或许对于企业,只要掌握了合适的时机加上一些机遇,也许总是能获得成功。但是,真的能存活超过十年的时间,并保持持续的增长么?在偌大的中国,近些年以来有许多优秀的企业凭借优秀的产品获得了短期的成功,却深刻反映出中国经济发展全靠吃人口红利的客观事实。 


尤其是那些看起来短期依靠员工的创新能力获得快速发展的中小型或者独角兽企业,越是容易因为创新能力枯竭而最终内卷化。每家公司都有机会火五分钟,但是有的公司大概只能火那么几分钟。 


任何IT公司,撇开软件管理之道谈纯粹的技术实现或产品输出,或许都不过是一瞬间的爆发,越是看起来成功的优秀的互联网公司越是必须基于软件工程学的理论出发,建立一套切实可行,持续迭代的管理体系才能获得长久的生命力。 


但是,哪怕有了构建之法,又该如何打破中国IT企业平均寿命不过2.8年的客观事实呢?我想我还是好好搬砖吧。。

640?wx_fmt=jpeg


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

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

相关文章

Ball Dropping

Ball Dropping 题意&#xff1a; 求&#xff1f;的具体长度 题解&#xff1a; 算一算就出来了 代码&#xff1a; #include<bits/stdc.h> using namespace std; int main(){double r,a,b,h;cin>>r>>a>>b>>h;if(2*r<b&&2*r<…

尝试:Script Lab,开发模式之知识储备//SL02

前期00&#xff1a;深度&#xff1a;从 Office 365 新图标来看微软背后的设计新理念前期01&#xff1a;尝试&#xff1a;Script Lab&#xff0c;快速 Office 365 开发工具 //SL01本期02&#xff1a;尝试&#xff1a;Script Lab&#xff0c;开发模式之知识储备 //SL02项目特点适…

WebApi网关之Bumblebee和Ocelot性能对比

Bumblebee是基于.net core 2.1开发的WebApi网关组件&#xff0c;由于Bumblebee所追求的轻量化和性能&#xff0c;所以它并没有像Ocelot那样从asp.net core上进行扩展&#xff1b;而是构建在BeetleX.FastHttpApi之上&#xff0c;主要原因BeetleX.FastHttpApi有着更轻量化和高性能…

在 .NET Core 中运行 JavaScript

一.前言在 .NET Framework 时&#xff0c;我们可以通过V8.NET等组件来运行 JavaScript&#xff0c;不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core &#xff0c;我们如何在 .NET Core 中运行 JavaScript 呢&#xff0c;答案是使用 NodeServices。关于为何有在 .N…

Named Volume 在 MySQL 数据持久化上的基本应用

原文作者&#xff1a;春哥非常感谢春哥的投稿&#xff0c;同时也有一些感慨。初识春哥时&#xff0c;春哥是美术设计大咖。后不久&#xff0c;创业并致力于游戏开发&#xff0c;已有3年。从Unity3D到IOS&#xff08;Swift&#xff09;开发&#xff0c;从前端开发到后端以及容器…

.Netcore 2.0 Ocelot Api网关教程(7)- 限流

本文介绍Ocelot中的限流&#xff0c;限流允许Api网关控制一段时间内特定api的总访问次数。限流的使用非常简单&#xff0c;只需要添加配置即可。1、添加限流修改 configuration.json 配置文件&#xff0c;对 UpstreamPathTemplate 为 /webapib/values 的配置修改如下&#xff1…

微信开发必看,使用.Net Core 开发微信跨平台应用

.NET Core 是一个开源通用的开发框架&#xff0c;源码由微软官方和社区共同支持。支持跨平台&#xff0c;即支持在 Window&#xff0c;macOS&#xff0c;Linux 等系统上的开发和部署&#xff0c;并且可以在硬件设备&#xff0c;云服务&#xff0c;和嵌入式/物联网方案中进行使用…

CF1526 D. Kill Anton

CF1526 D. Kill Anton 题意&#xff1a; 给你一个由’A’,‘N’.‘T’,O’四个字符组成的字符串b&#xff0c;现在要求你改变b的顺序得到a&#xff0c;使得a通过移动回到b的步数最多。 每次移动只能移动相邻两项 题解&#xff1a; 官方题解说&#xff1a;最佳情况为相同字符…

ASP.NET Core 3.0预览版体验

目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3&#xff0c;对应ASP.NET Core 3.0 Preview 3。ASP.NET Core 3.0 之后将不再支持.NET Framework&#xff0c;只运行在.NET Core 上面。ASP.NET Core 3.0 现在已经出到了第三个预览版&#xff0c;增加和改进了很多功能。环境准…

C# .net 中 Timeout 的处理及遇到的问题

C# 中 Timeout 的处理前言最近在项目中要实现一个功能&#xff0c;是关于 Timeout 的&#xff0c;主要是要在要在 TCP 连接建立的时间 和 整个请求完成的时间&#xff0c;在这两个时间层面上&#xff0c;如果超出了设置的时间&#xff0c;就抛出异常&#xff0c;程序中断。研究…

[CodeJam 2021 Round 3] Square Free(调整法 / 字典序最小解网络流)

CodeJam 2021 Round3 Square Freeproblemsolutioncodecode-stdproblem 神奈子是个很爱打麻将的老婆婆&#xff0c;有一天她把她的麻将放进了一个 nmn\times mnm 的网格图里&#xff0c;每个麻将可以左斜着放入网格中&#xff08;如 / &#xff09;&#xff0c;也可以右斜着&am…

ConsurrentDictionary并发字典知多少?

在上一篇文章你真的了解字典吗?一文中我介绍了Hash Function和字典的工作的基本原理.有网友在文章底部评论,说我的Remove和Add方法没有考虑线程安全问题.https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?redirectedfromMSDN&viewn…

ASP.NET Core 基于JWT的认证(二)

上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍&#xff0c;这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用。.Net Core 2.2Visual Studio 2017ASP.NET Core WebAPI2在上一篇文章中&#xff0c;我们详细的介绍了JWT的知识&#xff0c;这…

Docker最全教程之Go实战,墙裂推荐(十九)

前言与其他语言相比&#xff0c;Go非常值得推荐和学习&#xff0c;真香&#xff01;为什么&#xff1f;主要是可以直接编译成机器代码&#xff08;性能优越&#xff0c;体积非常小&#xff0c;可达10来M&#xff0c;见实践教程图片&#xff09;而且设计良好&#xff0c;上手门槛…

你注意到 .Net Framework 和 .Net Core 中使用 Session 的区别了吗?

在测试一个例子时发现的问题&#xff0c;这个示例实现的功能是刷新页面也能保持表格锁定列的状态&#xff0c;先看下页面的完成效果&#xff1a;测试中发现&#xff0c;几乎相同的代码&#xff1a;在 FineUIMvc&#xff08;Net Framework&#xff09;下没有问题&#xff1a;htt…

一键发布部署vs插件[AntDeploy]开源了

deploy to remote server by one button click功能支持docker一键部署(支持netcore)支持iis一键部署(支持netcore和framework)(支持增量发布)(支持一键回滚)(支持点火)支持windows服务一键部署(支持netcore和framework)(支持增量发布)(支持一键回滚) 使用插件前我要发布一个net…

【学习笔记】平等博弈及常见的公平博弈类型

文章目录平等博弈nim堆SG定理nim和常见的公平博弈模型bash博弈nim博弈nim-k博弈wythoff博弈扩展wythoff博弈fibonacci博弈阶梯博弈green hackenbushMisre Nim博弈Every-SGnim积翻棋子游戏游戏的积&#xff0c;tartan定理平等博弈 G{L∣R},LRG\{L|R\},LRG{L∣R},LR&#xff0c;所…

Excel催化剂开源第31波-pdf相关功能实现及类库介绍

在Excel催化剂刚推出的pdf相关功能中&#xff0c;反馈很热烈&#xff0c;不止是用户层面好多人喜欢&#xff0c;也听到在.NET开发群里有询问pdf在winform上展现的功能诉求&#xff0c;一段时间没写开源篇&#xff0c;生怕大家以为Excel催化剂太小气了&#xff0c;不再开发了&am…

[小技巧]ASP.NET Core中如何预压缩静态文件

原文地址&#xff1a;Pre-compressed static files with ASP.NET Core作者&#xff1a;Gunnar Peipman译者&#xff1a;Lamond Lu译文&#xff1a;https://www.cnblogs.com/lwqlun/p/10552131.html示例代码&#xff1a;https://github.com/lamondlu/CompressedStaticFileSample…

【学习笔记】简单的连通性状压DP——插头DP(不学以为是天书)

文章目录哈希链表插头DP概念括号表示法 / 最小表示法例题洛谷插头dp板题CITYParkIITonys TourEfficient Tree[CQOI2015]标识设计哈希链表 众所周知&#xff0c;哈希是有冲突的可能性的&#xff0c;而且在状态数越多&#xff0c;冲突的概率就越高。目前掌握的处理方案有多哈希&…