刚进公司就负责项目,把老弟整蒙了!

刚进公司就负责项目,把老弟整蒙了!

大家好,我是鱼皮,先把封面图送给大家:

又快到周末了,今天分享一些轻松的编程经验~

还记得我学编程的老弟小阿巴么?他目前大二,听说最近刚刚找到了一家创业公司的暑期实习。

前两天小阿巴又跑来向我诉苦了:鱼皮 gie gie,我不是找了份暑期实习嘛,结果还没到暑假呢,公司的老大就联系我了,说公司最近有很多新项目要启动,等我暑假再来准备估计来不及了,让我提前先调研一下新项目的技术选型。

鱼皮:这不是挺好的么?还没进公司,就已经成为项目负责人了哈哈。

小阿巴:好个毛 🥚 啊,以前我自己都是跟着网上的教程学做项目,把老师的代码拉下来改几下,这让我负责一个项目,我一点底气和思路都没有。还有他说的什么 “技术选型”,我都没听说过!彻底蒙圈了。。。

鱼皮:嗯,这确实是个问题,看来得跟你科普一下 “技术选型” 了。先考你一下,你知道什么是技术选型么?

小阿巴:emm,我猜就是用什么技术来开发这个项目?比如开发前端用 Vue、开发后端用 Spring Boot?

鱼皮:不错,如果把做项目比喻成打仗,那么技术选型就相当于打仗之前选择武器。你要选择合适的武器才能打胜仗,选择合适的技术才能更好地完成项目。

小阿巴:但有个问题,现在主流的开发技术不就那么几种么,像我上面说的 Vue、Spring Boot?有啥好选的?

鱼皮:你说的其实只是技术选型的其中一点,也是最浅的一层。技术选型不止有 “选择开发框架”,还包括很多不同的方面和细节。

由浅入深来看,技术选型包括:

1)用哪类技术?比如编程语言、开发框架、数据存储、缓存

2)具体用什么技术?比如编程语言用 Java 还是 Go?开发框架用 Spring 还是 Netty?缓存用 Redis 还是 Memcached?

3)技术用哪个版本?比如用 Java 8 还是 11?Vue 2 还是 Vue 3?Redis 5 还是 6?

4)具体用到哪些技术特性?比如 Spring 的 AOP、Redis 的 GEO 高级数据结构等。

小阿巴:我滴妈呀!这么复杂嘛,我之前根本没想过这些,好像也想不到。。。

鱼皮:这是很正常的,因为之前你都是自己跟着教程做项目,用什么技术、用哪个版本都是老师给你提前规划好的。

小阿巴:确实唉,我觉得有点太麻烦了。。。能不能不做技术选型呀!老夫直接用 Spring Boot + Vue 一把梭。

鱼皮:哈哈,技术选型当然不是绝对的呀,比如你在学校自己做项目,那你就用熟悉的技术或者想学的技术即可。但是等当你进入企业、尤其是负责项目时,就必须要跟团队同学一起确认技术选型。而且对于规模越大、越复杂的项目,你要考虑的技术选型的角度和深度要求就越高!不能再像自己做项目一样随便了。

小阿巴:我就随便,又怎样?

鱼皮:可以的,我看你是不到黄河心不死不见棺材不落泪欲穷千里目更上一层楼啊!给你讲讲我在学校的时候有次带团队做项目时,不做技术选型的翻车经历吧。

很多年前了,当时我们在做一个校园贴吧网站,记得我是用 React 来开发前端页面的。刚开始很顺利,但直到有一天需要开发帖子页面信息状态保存功能的时候,才发现 React 不像 Vue Router 一样有现成的 keep-alive,后来又花了好久才找到一个类似的组件,结果还一堆 Bug。。。

唉,当时确实是经验不足呀。如果最开始就考虑到这点,选择 Vue 系列技术栈,那么就能节省很多时间了。

小阿巴:我悟了!就是说在开发一个完整项目前,我们要先整体思考一下实现项目功能可能会用到的一些技术,这样不至于到后面才发现难以实现?

鱼皮:good,是这样。越是对项目侵入性强的技术,后期的改动成本就越大。比如我刚刚举的例子,等你页面都写了几十个了,再去切换开发框架,就会很麻烦;而且有的时候,你给项目引入新的组件或类库,可能会和现有的库版本冲突,导致后面项目跑不起来。这些其实都是技术选型不当带来的问题,也是我们做技术选型的必要性。

小阿巴:原来如此,那做技术选型有没有什么好的经验呢?

鱼皮:一句话,我们做技术选型的目标是 在有限的条件下、选取特定场景下的技术最优解。

有限条件包括我们团队同学会的技术、我们的时间和金钱成本。比如大家都只会 Java、项目又急着上线,那肯定优先选择 Java 相关技术栈,不要因为什么 Go 语言的性能高就让大家加班去学 Go。再比如公司很有钱,但是缺人手,那么很多服务(比如数据库)就不用自己搭建了,直接买大厂云服务即可。

特定场景是指我们的技术选型一定要围绕着业务和需求来做,可以思考以下几点:

  1. 你的业务量级有多大:如果用户数巨多,要不要用 Nginx 或者 LVS 来做个负载均衡?如果存储量巨大,要不要使用分布式数据库、要不要搞分库分表?
  2. 系统的核心业务流程和关键数据结构是什么?比如要做一个管理系统,那么数据库选择主流的关系型数据库 MySQL 就好。而如果要做数据分析系统,那么应该选择 OLAP 利好的数据库,比如 Postgre SQL、ClickHouse 等。
  3. 系统更注重哪些性能?比如日志收集的场景更注重高性能和吞吐量,那么可以选择 Kafka 消息队列来采集;比如注重低延迟以及消息的准确性,那么可以选择 RabbitMQ 等。很多时候,我们做技术选型和设计算法一样,没有绝对的最优解,而是对时间、空间、稳定性、可用性等等的综合权衡。

小阿巴:大哥,我悟了,您别念了!

鱼皮:哈哈,另外还有两个建议

  1. 做技术选型时,可以通过编写最简单的 Demo 来快速验证下技术是否可用,不要直接拍板!
  2. 原则上优先选择知名度高的、开源的、用户多生态好的技术,没几个人用的技术,估计你用的话就是踩雷去了。

小阿巴:我明白了,那我就先问清楚我们这个项目大概要做哪些功能、预计有多少用户和存储需求,再根据这些到网上搜技术选型!

鱼皮:糊涂啊!都 2023 年了,直接问 ChatGPT!

我的编程导航网站:https://www.code-nav.cn

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis超详细入门手册教程!还不快来看看?

地址: RedisRedis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures …https://redis.io/ 1:NoSQL简介 1.1:数据库应用的演变历程 单…

线程的原子性、可见性、有序性及线程安全知识整理

要想保证线程安全,必须同时满足原子性、可见性、有序性。 一、定义 1.1 原子性 一个操作或者多个操作,要么全部执行,并且执行的过程不会被打断, 要么就全部不执行(一个操作是不可被分割的)。 Java中实现…

ApiPost简单使用

目录 环境与变量 设置与使用 随机参数变量 内置Mock字段随机参数 自定义随机参数 全局参数 使用手册 apipost可支持一键压测和自动化接口测试 环境与变量 设置与使用 设置 环境变量可设置环境名称、变量名称、变量初始值、URL: 可以在请求变量或者接口 URL…

攻防世界-web-simple js

题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 打开链接: 然后我们会发现不管我们输入什么密码,发现是都是这样的报错 1. 先用bp抓包看看,可以抓到这样的一串js脚本 看不懂…

matlab实现BP神经网络(完整DEMO)

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、BP神经网络Demo代码 1.1 代码整体思路 1.2 BP神经网络Demo代码 二、运行结果 2.1 拟合曲线 2.2训练误差与预测误差 三、相关文章 3.1-BP的入门学习目录:老饼…

JavaScript经典教程(七)-- JavaScript初级

190:JavaScript初级内容 - DOM查询、插入内容、赋予样式等 1、DOM操作 DOM:节点,也就是html中的元素; DOM操作:其实就是节点元素的方法; (1)innerHTML - 返回元素内容 同时也可以…

关于maven

一、maven是什么 一个java项目构建工具 二、maven的作用 (1)依赖管理 不同框架整合,互相依赖jar包版本不同,版本不一样,程序跑起来就会报错。用maven管理jar包。 (2)跨平台构建项目 linux服…

数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)

目录 最大堆的建立 方法1 方法2 思路图解 代码实现 代码解释 PercDown BuildHeap 最大堆的建立 建立最大堆:将已经存在的N个元素按最大堆的要求存放在一个一维数组中。 方法1 通过插入操作,将N个元素一个一个地插入到一个初始为空的堆中去。…

简述对象检测与图像分类与关键点检测区别

计算机视觉是人工智能的一个多元化领域,旨在检测和识别图像或视频的内容。大多数开始计算机视觉领域之旅的人的常见问题之一是:目标检测、图像分类和关键点检测之间有什么区别? 让我们先看看 什么是对象检测 对象检测是一种计算机视觉和图像…

excel中英文互译

在excel运行宏时弹出下面的提示: 无法运行“XXXXX”宏。可能是因为该宏在此工作薄中不可用,或者所有的宏都被禁用的错误提示 解决办法: 1、点击“文件”选项卡; 2、在选项卡界面窗口中选择“选项”按钮; 3、在“选项…

JavaScript实现在键盘输入按键,浏览器进行显示的代码

以下为实现在键盘输入按键,浏览器进行显示的代码和运行截图 目录 前言 一、在键盘输入按键,浏览器进行显示 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找&#xf…

智能汽车实验二(视觉传感器标定)

实验二 视觉传感器标定(实验报告) 【实验目的】 1、了解开源图像处理库OpenCV的结构,掌握OpenCV的基本使用方法。 2、了解开源图像处理库OpenCV的基本模块功能,掌握常用图像处理方法。 3、掌握摄像机标定算法,学会使用…

igraph的layout布局

做图论的社区检测,需要画图显示,用igraph可以进行可视化。 igraph有几个布局,分别如下: layout_with_dh : The Davidson-Harel layout algorithm Place vertices of a graph on the plane, according to the simulat…

113-Linux_安装c/c++开发库及连接mysql数据库

文章目录 一.安装c/c开发库二.连接mysql数据库三.用户的管理与授权 mysql数据库的安装 一.安装c/c开发库 安装开发c/c的库&#xff0c;命令&#xff1a;apt install libmysqlclient-dev 二.连接mysql数据库 #include<stdio.h> #include<mysql/mysql.h>void fun…

Python+Selenium4环境搭建

set集合 怎么把列表种相同的数据和不同的数据取出来 1.把列表转为set集合 2.按照集合的交集 selenium 自动化测试&#xff1a;自动化测试就是通过代码或者是工具模拟人的行为来进行对WEB&#xff08;APP&#xff09;来进行操作。 QTP (HP公司)&#xff1a;以录制回放的模式…

CSS进阶

01-复合选择器 定义&#xff1a;由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 作用&#xff1a;更准确、更高效的选择目标元素&#xff08;标签&#xff09;。 后代选择器 后代选择器&#xff1a;选中某元素的后代元素。 选择器写法&#xff1a;父选择器 …

学系统集成项目管理工程师(中项)系列19b_成本管理(下)

1. 成本估算 1.1. 编制完成项目活动所需资源的大致成本 1.2. 在设计阶段多做些额外的工作可能减少执行阶段和产品运行时的成本 1.3. 项目估算的准确性随着项目的进展而提高 1.3.1. 【19下选48】 1.4. 针对完成活动所需资源的可能成本进行的量化评估 1.5. 容易被忽视的主要…

华为pbr双出口外线,指定内网单个vlan绑定单个出口外线上网

公司两条外线&#xff0c;vlan 10用nat走上面转发出去上网&#xff0c;vlan 20 走下面那条外线出去nat上网 AR2&#xff1a; interface GigabitEthernet0/0/0 ip address 6.6.6.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 154.1.2.3 255.255.255.0 interface…

JavaScript通过js的方式来判断一个数奇偶性的代码

以下为通过js的方式来判断一个数奇偶性的程序代码和运行截图 目录 前言 一、通过js的方式来判断一个数奇偶性&#xff08;html部分&#xff09; 1.1 运行流程及思想 1.2 代码段 二、通过js的方式来判断一个数奇偶性&#xff08;js部分&#xff09; 2.1 运行流程及思想 2…

Linux操作系统如何查看CPU型号信息?一条命令搞定

Linux操作系统服务器如何查看CPU处理器信息&#xff1f;使用命令cat /proc/cpuinfo可以查看CPU详细信息&#xff0c;包括CPU核数、逻辑CPU、物理CPU个数、CPU是否启用超线程等&#xff0c;阿里云服务器网分享Linux服务器查看CPU信息命令&#xff1a; 目录 Linux服务器查看CPU…