软件编程概念与入门

简介: 软件编程概念与入门1.概要2 项目开发流程3.编程提升

1.概要

(1)软件编程为什么存在?

随着技术的发展,项目的复杂度与程序的复杂度骤增,导致编程实际与预期有所偏差。项目管理、软件工程是用于解决这类问题的最佳实践。在实际中如何应用这些学科知识,需要随着项目实际经验进行选择与不断的迭代。

(2)理念

软件编程包括很多:util,设计,调试,需要真正落地,也十分花时间。

  • 做正确的事情,识别真实的需求。
  • 正确的做事情,正确的流程、架构下进行。
  • 经济的做事情,多快好省。

2 项目开发流程

(1)需求与范围

质量是核心,时间、成本、范围达到平衡状态。直接面向开发人员的是时间、成本。其中范围表示事情的边界,什么样的事情是做的,什么样的事情是不要做的。什么服务我们提供,什么服务我们不提供。

2)架构设计

架构相当于系统的奠基人,在技术选型上如果选择不对,对于项目影响颇深。需求正确、方案不对。技术升级是特别的迅速的,是否使用某种新的技术是项目架构师需要考虑的事情。项目最重要的是稳定,比如jdk17已经商用,但是没有经历大型项目的考验,因此实际上的项目中很少会进行更新。


(3)编程规范

可读性与可维护性。代码规范一般是最佳实践,一般是公司约定,或者客户约定。规范分为主动性的:通过文档由编程者遵守,被动性:通过tool进行检查,格式化。推荐阅读《阿里巴巴编程规范》,里面有很多编程规范的实际经验案例。


(4) 环境和工具

cpu、内核,编程工具,操作系统,版本控制工具,尽量保证编程环境的一致性,这样不会因为环境不一致导致编程遇到的问题不一致。软件版本、配置,出文档,避免开发人员使用版本出现安全、版权及性能问题。


(5)软件架构

需求:做什么,架构:怎么做,细节设计:在前两者基础上进行,进行具体的方案选择,对同一个事情各个方案列出具体评价维度,由team或者有经验的人一起打分。


(6)编码


(7)测试

debug,unit test,function test,integration test, system test


(8)项目的部署

3.编程提升

(1)代码特性

外在特性:可用性(用户学习使用的程度),效率性(带宽等)、可靠性、安全性、扩展性、精确性(银行对金额精确性高)、健壮性(压力流量)

内在特性:可读性

(2)为什么进行编程提升

一致性成本:防止出现问题需要付出的成本,培训、会议、流程、软件测试评估、代码审查。

不一致性成本:出现问题的处理成本。基于经验来说,我们的不一致性成本较一致性成本要高,因此尽量在问题出现前进行处理。除了有形的经济成本外,对于客户的声誉、对于团队的信心也影响颇深。


(3)编程提升方式

1)代码审查(gerrit)


自动化检查(工具编译,有可能两个人在本地编译都能通过,但是两个代码在一起编译时会出现问题)

人工审查

正式审查(对于一些复杂的算法,核心功能,复杂部分可以进行正式审查,通过审查团队以审查会议形式进行审查,在审查员不熟悉此部分代码的情况下,可以由开发人员编写概要文档,审查会议一般是两小时左右,主要是发现问题,而不是解决问题,如果出现争论点,可以将其留到第三个小时讨论,发现的问题一般指派给开发者,也可以指派给专业领域的专家)。

2)测试


自动化测试,工具要及时跟进,才能跟上项目的快速迭代。

工具测试,做一些小工具,可以生成report,log,不用运行整个项目,可以对各个小单元测试。

常常设计工具的场景包括:Right,bundary,inverse,cross,error,performance,做的好很有用,做不好只是负担。

3)编程原则

单一功能原则(一个类一个功能)

开闭原则(可以加功能,不要改我)

里氏替换原则(子类最好覆盖父类行为进行替换,不要有太多自己的特别的行为)

接口隔离原则(每个特定功能提供一个特定的接口)

依赖反转(编程依赖于抽象不依赖于实例)


4)重构

代码迭代,工程师换了一代又一代,否则代码会越来越臃肿,是熵增,而重构是商减。重构的原则是不改变代码的行为,使代码维护性、扩展性更强。怎么判断?在代码中觉得很怪的地方。重构的级别有data、statement、method,class。重构的总方法就是一点点重构,一点点测试。重写区别于重构,会改变代码的逻辑。


相关文章
|
7月前
|
存储 关系型数据库 MySQL
由浅入深:数据库编程概念与实战
由浅入深:数据库编程概念与实战
177 1
|
1月前
|
设计模式 程序员 Serverless
探索编程之美:从代码细节到技术哲学
【10月更文挑战第28天】在这篇文章中,我们将一起走进编程的世界,探索那些隐藏在代码行间的艺术与哲理。通过深入浅出的讲解和实际的代码示例,我们不仅能够学习到技术层面的知识,更能体会到编程作为一种创造性活动所带来的乐趣和启示。无论你是初学者还是资深开发者,都能在这段旅程中找到新的视角和灵感。
54 11
|
6月前
|
存储 数据库 芯片
计算机系统论述与相关概念-思维导图
计算机系统论述与相关概念-思维导图
|
运维 监控 架构师
第二章 软件过程与思想 第一节 基础
第二章 软件过程与思想 第一节 基础
|
7月前
|
设计模式 存储 算法
【软件设计师—基础精讲笔记7】第七章 面向对象技术
【软件设计师—基础精讲笔记7】第七章 面向对象技术
135 1
|
7月前
|
自然语言处理 Java 编译器
【软件设计师—基础精讲笔记10】第十章 程序设计语言基础
【软件设计师—基础精讲笔记10】第十章 程序设计语言基础
116 1
|
7月前
|
程序员 Python
类的设计奥秘:从代码到架构的科普全解
类的设计奥秘:从代码到架构的科普全解
102 2
|
7月前
|
存储 缓存 算法
作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现
作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现
63 0
|
程序员 C语言 C++
[C++]基本知识与概念
[C++]基本知识与概念
106 0
|
数据可视化 测试技术 uml
【UML建模】(1) UML建模的初了解,概述,组成,作用
UML (Unified Modeling Language)是一种通用的可视化的建模语言,可以用来描述、可视化、构造和文档化软件密集型系统的各种工件。它不是一种程序设计语言。 UML 是独立于过程的,它可以在软件生命周期的各个阶段运用,不过主要应用于软件开发的设计与分析阶段。
489 0
【UML建模】(1) UML建模的初了解,概述,组成,作用