大公司的工程师是怎么废掉的...
大家好,我是砖一。
此文作者以嵌入式工程师为基本视角,细说了从初阶到高阶工程师的资质需求,并提示工程师职业道路上的陷阱。可供参考。
一,基础知识
一个嵌入式工程师,很多都是从51单片机或者STM32单片机开始,对于单片机的开发环境,开发流程,基础外设都了解,做过一些实际的案例,比如点流水灯之类的。那么对于基本的中断的概念,寄存器的概念,看门狗,AD等基本原理能大概的讲出来。掌握硬件设计方法,能设计原理图PCB,至少两层板。
能画出三极管及MOS管作为开关管的实际应用电路,对电源芯片的设计有基本的了解。能利用网络进行信息检索,能在理解别人图纸的基础上进行copy。
这是一个本科嵌入式毕业生应该具备的水平。项目做的多的同学,可能在某些专业方向有较深的钻研,和较多的涉猎,比如对一些基本的传感器,编码器,执行机构的了解等,再比如研究生同学会使用matlab等软件进行算法仿真,控制方向的同学会用单片机调用FOC库控制PMSM电机,图像方向的同学会调用opencv进行一些图像处理等。
这个阶段如果有国际开源社区贡献经验的,那就是非常加分了。至少在英语和git使用上是基本过关了。
二,项目心态
做过完整项目的工程师都明白,在项目的推进过程中,会经历各种心态,有时候会让人崩溃,可能很多次都想放弃,但是你体会过坚持并有结果的感觉后,就明白没有干不出来的项目(其实是项目论证阶段的时候,更高阶的工程师已经做个评估了)。项目心态其实就是技术人员的死磕心态,没有搞不定的难题,没有干不出来的项目。
一般工作三年左右的工程师,应该都经历过完整项目了。很多工程师可能第一年的时候都在补大学的课,所以三年比较保险。三年工作经验的工程师可能还不具备全局视野和架构视野,但是一定要具备良好的项目心态了。
并且3年左右的工程师正是在死磕心态的支持下,可能各种论坛,各种帖子去搜索解决问题的方法,应该也要具备独立解决问题的能力了。
三,技术架构
技术架构是个什么东西,项目做的多了,接触的项目大了,会发现一个问题,所有的项目都有共通之处,所有的嵌入式设备都是换汤不换药。那么有没有积累一套稳定的基础程序库和架构就显得非常重要了。比如,串口协议编解码,log系统,滤波算法,操作系统,GUI,按键io,定时器库等。
这些东西我一向不主张重复造轮子,因为世界上聪明人实在是太多了,github搜一下,找一些适合自己的基础库进行集成改造。看看别人写的东西之后,会发现自己的技术思路有时候真的很low。
比如按键,很多人认为是一个非常简单的东西,但是一个按键,多个按键,单击,双击,三击,长按,短按等,你如果按照你的逻辑来写,90%的人会写的非常笨。
再比如,环形缓冲,以前我刚参加工作的时候,看到同事写的串口环形缓冲区程序,觉得同事真牛逼。
诸如此类就太多了,所以有时候,开阔的技术视野比你闷着头在那里发奋图强实际要有效的多。然后站在巨人的肩膀上,去发现bug,去修改,去完善,慢慢的就越来越健壮了。同时,你也会拥有更谦卑的心态。技术架构,建议探索、参考一些经典的开源硬件项目。
四,技术视野
技术视野来自于几个方面:
1. 一个是做的项目够多,接触的东西够多
2. 对技术有足够的好奇心,想了解清楚底层究竟是如何在运行
3. 勤奋(有时候来自于热情,并不需要刻意)
接触开源硬件是扩展技术视野非常好的途径,最好是参与进去,如果有兴趣的话。px4,到现在我都还没有把整个架构完全弄清楚,里面会涉及到非常多的知识,linux,gcc,cmake,docker,python解析,nuxt系统(类linux,posix接口),git,mavlink协议,各种算法及paper,仿真方法,编译下载等。但是这是一个非常有意思的过程。再回过头去玩单片机的时候,你就知道一个单片机要运转大型复杂的项目应该是什么样子的了。
五,成熟方案
成熟方案就是你在做过很多项目后,这些项目成果。都是可以稳定市场化的东西。在以上那些基础上,你做过的项目,在硬件和软件上都应该是稳定的,且是可以市场化的东西。你在不需要浪费一个开发周期就可以拿来用的东西,就是成熟方案。
比如你做过的电机驱动,你做过的打印机方案等。这时候本质上讲,你是可以开方案公司的了。至少技术上是可以的了。但是还缺点啥?
六,一通百通
这个时候,你对任何你遇到的项目,仿佛总有办法把它又快又好的干出来了,因为看到一个新案子的时候,你看问题的角度和新手是不同的了,无非是你所积累的架构的一个变种而已。要不就执行机构变一下,要不就是传感器变一下。
选型能力
上面说,你要开方案公司的话还缺点东西,其实缺的就是选型能力,不是技术上跑通了,就可以市场化的,市场化比如要同行对比,你是否体现了成本优势,技术领先优势,解决了独到问题等。成本问题就涉及到你积累的供应商资源,以及你搜索供应商资源和实际的对外沟通能力了。
笔者曾经给一款消费电子产品降本,三到六个月之后,整个行业全部都换成笔者设计的那套方案了。
七,其他能力
如果还要考察其他能力的话,那就是性格和人品了,因为降成本有时候是一个很敏感的东西,意味着你会在公司打破某种微妙平衡,你会碰到非常大的阻力,常常会让你觉得自己吃力不讨好。但凡你有一点怀疑和退缩,你就会妥协。
所以技术的上层是更复杂的一些东西了。这个时候的坚守靠的是价值观,你坚信你把更大的利益让给了消费者,你用你的技术视野和项目推进能力是创造了最终价值的。
八,当心温柔陷阱
很多人做十年,都停留在基础层级,甚至在退化,他们公司做系统集成,他每天只需要做串口协议的解析和转发工作,换一个产品,还是做这个,而一套程序成熟后又没什么大改的地方,最多就是不同的用户要不同的功能,对协议进行一些增删而已。
这种公司一般还都是大公司,慢慢的,做这个工作的工程师在某种程度上就被废掉了。同理,天天调pid,换一套系统,还在一样的。所以很多公司要求要有一个产品从零到一的过程。
在这种陷阱里似乎很舒服,但也有些危险,容易遭受年轻人的挑战,他们比你年轻、有精力,工作更拼命。工程师危机呀~
作为技术人不停地跟技术难题死磕、更新知识,或许这才是对的状态,以图长久的保持市场竞争力。
转自:最后一个bug
免责声明:本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系,谢谢!
相关文章:
大公司的工程师是怎么废掉的...
大家好,我是砖一。 此文作者以嵌入式工程师为基本视角,细说了从初阶到高阶工程师的资质需求,并提示工程师职业道路上的陷阱。可供参考。 一,基础知识 一个嵌入式工程师,很多都是从51单片机或者STM32单片机开始&…...
将yolov8权重文件转为onnx格式并在c#中使用
yolo模型转ONNX 在yolov8中,我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类,使用pip安装ultralytics库,然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…...
在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication
一、SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解 在Spring Boot启动时禁止自动配置数据源相关的组件。 SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解的使用案例 这个注解通常应该写在微服务项目的主启动类上&…...
程序人生:不积跬步无以致千里
程序人生 癸卯年冬月,往渭南韩城,拜访司马迁祠。入门攀爬而上,至人有困乏之时,抬头现:高山仰止。归路下山,始现三官洞,遥想西汉时三官洞,出口处刻意再拜别:高山仰止。泪…...
通过二叉树例题深入理解递归问题
目录 引入: 例1:二叉树的前序遍历: 例2: N叉树的前序遍历: 例3:二叉树的最大深度: 例4:二叉树的最小深度 例5:N叉树的最大深度: 例6:左叶子…...
【Android 协程常见用法】
我们这里只讲解一下,协程在Android项目中常见用法,原理知识不在进行说明了。 依赖 lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。依赖库: implementation androidx.lifecycle:lifecycle…...
python 进程笔记一 (概念+示例代码)
1. 进程的概念 进程是资源分配的最小单位,也是线程的容器,线程(python 线程 (概念示例代码))是CPU调度的基本单位,一个进程包括多个线程。 程序:例如xxx.py是一个程序 进程…...
各中间件数据库默认访问端口总结
说明 在生态丰富的开发环境下,我们常常需要接触很多中间件产品,中间件默认的连接端口以及可视化ui访问端口也时不时的需要用到,这里循序渐进做好登记,以备查阅! 中间件/数据库名称默认端口管理台端口默认账号密码rabbi…...
鲲鹏arm64架构下安装KubeSphere
鲲鹏arm64架构下安装KubeSphere 官方参考文档: https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/ 在Kubernetes基础上最小化安装 KubeSphere 前提条件 官方参考文档: https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequi…...
python 函数-02-返回值注释格式
01 函数返回值 1)python中函数可以没有返回值,也可以有通过return的方式 – 【特殊性,区别于java c#等】 2)返回值可以是一个或者多个,多个时通过逗号隔开 – 【特殊性,区别于java c#等】 3)多…...
【前端素材】推荐优质后台管理系统Upcube平台模板(附源码)
一、需求分析 后台管理系统在多个层次上提供了丰富的功能和细致的管理手段,帮助管理员轻松管理和控制系统的各个方面。其灵活性和可扩展性使得后台管理系统成为各种网站、应用程序和系统不可或缺的管理工具。 当我们从多个层次来详细分析后台管理系统时࿰…...
可视化 RAG 数据 — 用于检索增强生成的 EDA
原文地址:Visualize your RAG Data — EDA for Retrieval-Augmented Generation 2024 年 2 月 8 日 Github:https://github.com/Renumics/rag-demo/blob/main/notebooks/visualize_rag_tutorial.ipynb 为探索Spotlight中的数据,我们使用Pa…...
数学建模论文、代码百度网盘链接
1.[2018中国大数据年终总决赛冠军] 金融市场板块划分与轮动规律挖掘与可视化问题 2.[2019第九届MathorCup数模二等奖] 数据驱动的城市轨道交通网络优化策略 3.[2019电工杯一等奖] 露天停车场停车位的优化设计 4.[2019数学中国网络数模一等奖] 基于机器学习的保险业数字化变革…...
mysql 迁移-data目录拷贝方式
背景:从服务器进水坏掉,50多G的数据库要重新做主从,但以导入导出的方式太慢,简直是灾难性的,一夜都没好,只好想到了拷贝mysql数据文件的方式 拷贝的数据文件的前提 1.数据库版本必需一致(可以…...
学习 LangChain 的 Passing data through
学习 LangChain 的 Passing data through 1. Passing data through2. 示例 1. Passing data through RunnablePassthrough 允许不改变或添加额外的键来传递输入。这通常与 RunnableParallel 结合使用,将数据分配给映射中的新键。 RunnablePassthrough() 单独调用&…...
C# OpenVINO PaddleSeg实时人像抠图PP-MattingV2
目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…...
【Android 11】AOSP Settings WIFI随机MAC地址功能
AOSP Settings WIFI随机MAC地址功能 背景 最近客户提出了想要实现随机WIFIMAC地址的功能(我们默认WIFI的MAC地址是固定的)。网上搜到了一篇不错的文章,本次改动也是基于这个来写的。 由于客户指定使用的settings是AOSP的,所以在…...
dmrman备份还原
脱机还原工具-dmrman 前言 根据达梦官网文档整理 一、概述 DMRMAN 命令行设置参数执行又可分为命令行指定脚本、命令行指定语句两种执行方式。 指定语句 $ DMRMAN RMAN>BACKUP DATABASE/dmdata/data/DAMENG/dm.ini;指定脚本 创建一个名为 cmd_file.txt 的文件&#x…...
网页403错误(Spring Security报异常 Encoded password does not look like BCrypt)
这个错误通常表现为"403 Forbidden"或"HTTP Status 403",它指的是访问资源被服务器理解但拒绝授权。换句话说,服务器可以理解你请求看到的页面,但它拒绝给你权限。 也就是说很可能测试给定的参数有问题,后端…...
单细胞多组学整合与对齐的计算方法
Computational Methods for Single-cell Multi-omics Integration and Alignment Bioinformatics-2022-密西根大学 关键词:单细胞;多组学;机器学习;无监督学习;集成 摘要 最近发展起来的生成单细胞基因组数据的技术在生物学领域产生了革命性的影响。多组学测定提…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...
leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...
