软件工程与项目管理
文章平均质量分 78
软件工程与项目管理
rayylee
awk 'BEGIN{O="o"~"o";o="O"=="O";O+=+o;o_+=o""o;for(;++_o!=o_-O;)O_=O_"%c";printf(O_,o_*(o_-o)+O+O,o_*(o_-O)-O,o_*o_,o_*o_,o_*(o_-o)-O,o_*(o_-O)+O,o_*(o_-O)+O,o_-o)}'
展开
-
《跃迁:从技术到管理的硅谷路径》读后感
技术管理包含两层含义:一层是管理自己和团队的技术,进行技术选型,在正确的场景使用最适合的技术,保证程序简捷、强壮、可维护,最终完成产品的上线;另一层是管理技术团队,帮助团队成员成长,把事情做成。原创 2023-02-08 20:18:20 · 501 阅读 · 0 评论 -
软件开发中Alpha、Beta、RC、GA版本的含义
GAGeneral Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。RELEASE正式发布版,官方推荐使用的版本,有的用GA来表示。比如spring。Stable稳定版,开源软件有的会用stable来表示正式发布的版本。比如Nginx。Final最终版,也是正式发布版的一种表示方法。比如Hibernate。RCRelease Candidate,发行候选版本,基本不再加入新的功能,主要修复bug。是最终发布成正式...原创 2022-03-29 10:55:41 · 2772 阅读 · 0 评论 -
优秀软件架构师成长之路
成为一名优秀架构师,是很多程序员努力的方向。相关的讨论也从没停过,除了大家说烂了的那些架构师的特质和需要具备的技能外,还有很多是我们可以在工作和学习过程中重点培养和关注的能力。1. 在软件工程师职业发展的各个阶段中,架构师担任着怎样的定位?• lv.1 程序员 主要实现软件功能、编写代码、处理漏洞等。经过沉淀,程序员可以晋升为高级程序员,负责某些模块具体和复杂功能的设计和开发,并编写核心代码。• lv.2 技术Leader 这个阶段,可能负责一个小团队,关注技术管理,如交付效率和交付质量,同时原创 2022-02-27 11:40:11 · 6414 阅读 · 0 评论 -
RPC调用链通信方法
RPC调用链可以将远程过程调用变成一个有效的堆栈。当我们编写应用程序时,我们中的许多人认为REST是服务间通信的一个通用标准。然而,还有许多其他形式的通信,RPC就是其中之一。值得注意的是,通信方式的选择取决于许多因素,如业务需求、遗留代码、技术和预算,更不用说你选择的架构模式。在分布式计算中很受欢迎,RPC(远程过程调用)是一个程序,其中计算机程序在不同的计算机(服务器)中执行,而程序(代码)抽象出客户端和服务器之间的连接。你们中的许多人可以在互联网上了解RPC,但我发现很难找到关于 "RPC链"原创 2022-01-17 15:14:39 · 1938 阅读 · 0 评论 -
程序员常用的画图软件推荐
常用图平时画的比较多的是流程图、交互图和架构图,一般使用 Draw.io 这款免费的在线网页绘图工具就可以搞定了。之所以选择这款绘图工具,主要是以下几个原因:1. 使用方便无需登录,直接进入网页,可以直接使用海量模板新建项目。选择模板然后进入编辑页面,在左侧选择需要的图形,拖到绘图区进行编辑,然后在右侧修改样式就好了。Draw.io 在线绘图可以直接搜索需要的图形,比如服务器,当然也可以直接粘贴本地或网络图片。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7原创 2021-08-25 20:34:29 · 17631 阅读 · 0 评论 -
DDD领域模型、贫血模型、充血模型概念总结
DDD领域模型领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型。它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象。业务对象模型从业务角色内部的观点定义了业务用例。该模型为产生预期效果确定了业务人员以及他们处理和使用的对象(“业务类和对象”)之间应该具有的静态和动态关系。它注重业原创 2021-08-19 10:28:18 · 9083 阅读 · 0 评论 -
软件工程师你应该知道的100个原则
构建软件:(1)过早优化是万恶之源。不要低估这个说法。(2) 您很少需要从头开始构建某些东西。几乎每个用例都有库和依赖项。所以握住你的键盘,不要重新发明轮子。(3) 了解问题的范围是您在找到解决方案之前需要做的第一步。我们错过了第一步而直接跳入解决方案是很常见的。(4) 不要太完美主义者。首先,让它工作,然后让它干净。软件交付始终具有最高优先级。(5) 糟糕的程序员担心代码。优秀的程序员担心数据结构及其关系。- 莱纳斯·托瓦兹(6) 使用代码注释来解释你为什么要做某事,而原创 2021-08-17 11:16:54 · 402 阅读 · 0 评论 -
高质量代码才能最快投入生产
软件开发被误解了,因为人们认为它是短期的创造,但是不明白:高质量却是将软件投入生产的最快方式。高质量的代码使维护更容易并减少代码交互时间。低质量的代码会慢慢地产生更多的问题并减慢开发速度。非开发人员和缺乏经验的开发人员没有着眼长远,也没有意识到质量在软件开发中的重要性。这就是为什么低代码开发不会成为开发人员或代码的终结,因为作为软件开发人员不仅仅是编写代码。软件开发被误解有一点知识的人不理解甚至看不到软件开发的复杂性。没有经验的开发人员和非开发人员(管理层、客户等)无法理解许多最佳实践和流程。这.原创 2021-08-08 21:44:04 · 183 阅读 · 1 评论 -
DDD(领域驱动设计)示例目录结构
- src - it // 集成测试模块 - integration // 集成测试代码 - resources // 集成测试配置文件 - ut // 单元测试模块 - unit // 单元测试代码 - main //业务代码 - pkg - interfaces // 用户接口层 - facade // 提.原创 2021-07-14 10:42:09 · 2307 阅读 · 0 评论 -
基于DDD的golang实现
DDD即领域驱动设计,该模式也算是比较热门的话题了。领域驱动设计(DDD)是一种软件开发方法,通过将实现与不断演变的模型相连接,简化了开发人员面临的复杂性。本文不会重点去解释Golang中实现DDD的相关理念。什么是DDD?以下是考虑使用DDD的原因:提供解决困难问题的原则和模式将复杂的设计基于领域模型在技术和领域专家之间发起创造性的协作,以迭代地完善解决领域问题的概念模型DDD包含4个层:Domain:这是定义应用程序的域和业务逻辑的地方Infrastructure:此层包含独立原创 2021-07-12 10:10:05 · 746 阅读 · 0 评论 -
高并发Redis缓存如何设计
缓存设计可谓老生常谈了,早些时候都是采用memcache,现在大家更多倾向使用redis,除了知晓常用的数据存储类型,结合业务场景有针对性选择,好像其他也没有什么大的难点。工程中引入Redis Client二方包,初始化一个 Bean 实例RedisTemplate ,一切搞定,so easy。如果是几十、几百并发的业务场景,缓存设计可能并不需要考虑那么多,但如果是亿级的系统呢?首先,了解缓存知识图谱早期的缓存用于加速 CPU 数据交换的 RAM。随着互联网的快速发展,缓存的应用更加宽泛,用于数据高原创 2021-06-11 15:11:06 · 359 阅读 · 0 评论 -
DDD(领域驱动设计)系列之二-应用架构
架构这个词源于英文里的“Architecture“,源头是土木工程里的“建筑”和“结构”,而架构里的”架“同时又包含了”架子“(scaffolding)的含义,意指能快速搭建起来的固定结构。而今天的应用架构,意指软件系统中固定不变的代码结构、设计模式、规范和组件间的通信方式。在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全、稳定、快速迭代。在一个团队内通过规定一个固定的架构设计,可以让团队内能力参差不齐的同学们都能有一个统一的开发规范,降低沟通成本,提升效率和代码质量。在做架构设计时,原创 2021-06-10 19:15:34 · 410 阅读 · 0 评论 -
DDD(领域驱动设计)系列之一-DomainPrimitive
导读:对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integration Patterns ,都是通过一系列的设计模式或范例来降低一些常见的复杂度。但是问题在于,这些书的理念是通过技术手段解决技术问题,但并没有从根本上解决业务的问题。所以 03 年 Eric Evans 的 D原创 2021-06-10 10:12:01 · 305 阅读 · 0 评论 -
架构师图谱·上篇
1. 概述“架构师图谱”是一个很宏大的命题,特别是优秀的架构师自身也是“由点到面再到图”,一点点成长积累起来,尝试写这篇文章的目的更多的是结合自身的一些架构、研发、管理经验对现阶段做一个复盘总结,所以这里更偏向于后端图谱,依赖于开源技术、云原生或者其他第三方服务。 这里会重点介绍一些技术栈、设计理念以及适应场景,这些可以作为我们选型时的依据。所谓“架构即决策”,是在一个有约束的盒子中寻求最优解。这个有约束的盒子是团队经验、成本、资源、进度、业务所处阶段等编织、掺杂在一起的综合体。本质上无优劣,但是存在恰当原创 2021-06-09 10:02:57 · 686 阅读 · 4 评论 -
LNMP知识结构
LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指LinuxN指NginxM一般指MySQL,也可以指MariaDBP一般指PHP,也可以指Perl或Python。最近刚好有些时间,就结合自己近几年的工作经验,整理了一些LNMP相关的资料,侧重于范围性的知识、基础原理,不过都是作为一个合格程序员应该熟练掌握的技能点。...原创 2021-06-09 09:46:32 · 245 阅读 · 0 评论 -
敏捷项目管理流程-Scrum框架最全总结
Scrum中的角色Scrum Master——项目负责人、项目经理保护团队不受外界干扰,是团队的领导和推进者,负责提升 Scrum 团队的工作效率,控制 Scrum 中的“检视和适应”周期过程。与 Product Owner 一起将投资产出最大化,他确保所有的利益相关者都可以理解敏捷和尊重敏捷的理念。Team——开发人员、测试人员、美工设计、DBA等全职能性团队团队负责交付产品并对其质量...原创 2019-01-18 09:33:09 · 1284 阅读 · 0 评论 -
人月神话总结
人月是神话,银弹是神话,完美是神话,神话般的产品是神话般的组织的体现。原创 2021-05-11 09:52:57 · 1562 阅读 · 0 评论 -
软件工程的难题-解耦问题
一、引言大学有一门课程《软件工程》,研究如何组织和管理软件项目。说实话,这门课不适合本科生,因为学生可能体会不到,课程到底要解决什么问题。只有亲身参与过大项目的开发,经历过大团队,才能感受为什么软件工程很重要,又很难做对。软件开发有一个难题,叫做"扩展"(scaling),即怎样服务更多的用户。 你有10000个并发用户,跟你有10个并发用户,这是完全不同的概念,哪怕功能完全相同,背后的实现是完全不一样的。并发用户数上升一个数量级,软件就必须重构,大量问题随之产生。大项目的技术难度高,管理难度更原创 2021-05-10 09:40:08 · 1500 阅读 · 1 评论 -
没有银弹的含义
软件工程中,常会提到一个词:银弹。《人月神话》16章提出因为软件工程是一个超级复杂的系统,所以断言没有银弹。很多人不知道银弹是什么意思,我们特意查了下资料。银弹一般指银色子弹,银色子弹(英文:Silver Bullet)。在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器。后来也被比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。由于银弹这个词是从英文silver bullet单纯的翻译而来,所以对于中国人原创 2021-05-11 09:32:08 · 3114 阅读 · 1 评论 -
四种限流算法图解
前言会使用分布式,那么就说明业务量是较大的,如果不对流量进行限制,很大几率就导致高峰期时机器宕机。而常用的限流算法有四种,这也是所有限流框架实现限流的基础,接下来就通过本文来认识下它们。1. 计数器限流算法计数器是限流中最简单的,规定为:在指定周期内累加访问次数,当访问次数达到设定的阈值时,出发限流策略,当进入下一个时间周期时会将访问次数清零优点:实现简单临界问题:如图所示,当在8-10秒和10-12秒内分别并发500,虽然没有超过阈值,但如果算8-12秒,则并发数高达1000,已经超过了原先原创 2021-05-24 13:50:12 · 1915 阅读 · 2 评论 -
每个程序员都应该知道的5个定律
定律或称法则,可以指导我们并让我们在同伴的错误中学习。这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的五大定律。其中有些和开发有关,有些和系统组织有关。它们可以帮助你成为合格的软件工程师。墨菲定律“凡事可能出错,就一定出错。”“凡事可能出错,就一定出错。”这条定律来源于 Edward Murphy —— 一名航天工程师在 50 年代初对火箭测试失败的回应。这条定律给我们的启示是永远在系统关键地方使用防御性设计,因为系统某些地方总会出错!这条定律很容易引入软件工程领域。当你将软件暴露给终端用户,原创 2021-05-12 09:00:02 · 190 阅读 · 0 评论 -
读《人月神话》有感
小brooks的《人月神话》这本书在软件工程管理领域畅销40年,我看的是40周年中文纪念版。相比于原版增加了一些作者根据今天软件工程管理现状添加的一些新的观点与评论,看看哪些过时了,哪些依然有效。另外还附录了一些名人以及读者对本书的评论。整体来说,本书的主线——人月神话、没有银弹在现今的软件工程管理领域依然属于有效的基础理论。但是,其中一些方法论对于国内的软件项目管理的环境是不适应的,对于这些方法论我们可以吸收其思想精髓,改造其具体方法,创造一些中国特色的软件项目管理方法。这是一个很大的话题,我经验尚浅,所原创 2021-05-11 15:10:11 · 199 阅读 · 0 评论