转行做程序员,多晚都不晚
大家好啊,我是董董灿。
最近有不少小伙伴加我微信咨询一些问题,有同学想了解AI行业的现状,想着转行的,也有在校生想了解毕业后工作方向的,当然也有想学习编程知识的。
诚惶诚恐,没想到之前写的文章,能有这么多小伙伴关注。今天打算挑几个话题结合我的个人经历,写一写我对这些问题的思考。
文章较长,偏意识流,欢迎一起交流~
1、我的就业

这是一个研究方向与计算机视觉有关,但又不是计算机视觉专业的同学发来的。
最近两年CV领域越来越卷,尤其是算法岗,确实导致很多研究CV的同学害怕毕业后找不到好工作。
更何况还有很多其他专业的同学,比如机械、自动化、环境等专业,他们研究的内容也有不少与计算机视觉有交叉。
所以毕业时的竞争压力,除了来自本专业,还有其他专业,更别提还有潜在的来自学校层面985/211的压力了。
但这件事是无解的么? 当然不是。
记得我毕业那会儿,对于未来的职业规划也不清晰。
读研期间,我除了专业知识的学习外,还经常混迹图书馆,看了一些闲书(可惜图书馆在毕业那年拆了),到毕业时,虽然已经拿到了offer准备入职,但仍然对未来有一丝恐惧。
当时就一直在想,未来那么长,我到底要做什么呢?
现在回想,选择工作,看的无外乎就是:发展潜力、自己是否感兴趣、公司平台、工资这些条件。
毕业后的第一份工作,这几样中总得占一样吧。
于是我从机械专业,转行做了程序开发,也算遵循了内心的选择,慢慢的变成了现在的一名攻城狮:敲敲代码,看看论文,学学算法,写写文章。
如果现在有人问我,你找到喜欢的职业了?我会摇摇头,不知道。
前段时间在看一本书,名字叫做《远见》,里面把人的职业生涯划分成3个阶段,每个阶段以15年为限。
第一阶段指的是刚毕业的第一个15年。
这15年是寻找职场兴趣点的15年,这期间,我们有大量的时间来试错,换工作甚至换城市,从而能找准自己未来的职业方向,并且准备在第二个黄金15年里持续为之发力。
这么算下来,我也才刚刚开始。
所以对于职业规划,我的认识是,现阶段随遇而安,喜欢做什么,就去做什么。后两个15年我还远未达到,不清楚该怎么做,遵循内心,去做自己真正喜欢的事情。
所以,上面同学的疑问,读书期间对未来十分迷茫,再加上现在就业越来越卷,这事怎么解?
有解,读书期间就做读书期间该做的事:该写论文写论文,该学知识学知识,该看书看书。就业卷是事实,我们改变不了,能改变的只有自己。
研究生就是步入社会之前的演武场,可以不断尝试,不断犯错,不断纠正。谁也无法确定未来真的会做什么。
喜欢读书就多看书,很有可能,未来的中国,会少一个机械工程师,但是会多一个畅销书作家。
2、我的学习

这位同学用过不少计算机视觉相关的代码库,如OpenCV,但是也仅仅局限于使用,对于视觉算法的了解不太够,更没有亲自实现过某些算法。
这就导致我想到了一个学习的对立面,是应该一知半解还是应该学透原理?
说个我的故事。
记得大学时有一堂课是《理论力学》,老师突然点名让我到黑板上推导一个较为复杂的公式,当时推的什么公式现在已经忘了,但很清楚的记得,在我成功推导出来之后,我潇洒的从讲台上走向自己座位时,走路的姿势都是不一样的。
很幸运,那次上课前,我心血来潮预习的比较充分。可以说,当时的我,对那个公式是“学透”了的。
但大学里众多课程知识点,当时学起来仍然是一知半解,直到毕业,直到现在慢慢的已经记不起来了。
后来在工作中接触了AI算法,才发现,很多知识不参透是不行的,毕竟是工作中吃饭的家伙,容不得半点马虎,稍不注意,程序分分钟报bug给你看。
王国维在《人间词话》中说过人生三境界,而学透一个算法:从了解到手推最后到代码实现,每一步都像是在三境界中升级打怪一般。
了解了某个算法,那就是“独上高楼,望尽天涯路”。
挑灯夜战,十几页纸手推算法成功,那就是“衣带渐宽终不悔,为伊消得人憔悴”。
待到熬夜将代码敲出来,成功跑通算法之后,再回过头来看,那不就是“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”么?
学习,需要经过这些过程,才能真正做到融会贯通。
很感谢研究生期间刘老师的教导,刘老师不仅教会了读研期间需要的专业知识,还花了大量的时间和精力教我们学习和做事方法。“授人以鱼不如授人以渔”,这些方法和态度,都将陪伴终身,一生受益。
3、我的自学

这是一个想系统地自学一些编程知识和计算机体系结构的同学发的。我给他推荐了一些我之前学习看过的书和视频。
自学真的很难,难不在知识,难在坚持。
我第一份工作做程序开发,那时的工作大部分集中在某arm芯片配置寄存器上,并非真正的算法开发,事实上,与算法没有任何关系。
而机械专业出身的我,自然对计算机的知识了解的少之又少。工欲善其事,必先利其器,既然工作用到了,那就缺啥补啥。
感谢互联网的便捷,网上有大量的慕课课程,有编程语言,有计算机考研课程,很成体系,也很细节。
记得当时学一门C++的课程,百度某资深工程师授课,整个课程全是干货,没有半点口水话,几十节课程共20多个小时,我来回听了6遍。虽然课程中的很多知识在工作中并未真正用到,也并未真正全部实践过,但直到现在,里面的很多知识还能顺口说出来。
学习真的是一件很快乐的事。所以自学可行么?当然可行。
自学需要投入大量的业余精力,想学到入门级水平,书籍和课程看一两遍就够了,想学到工作信手拈来的水平,多看几遍,多实战几遍,肯定能上手,如果不行,那就再来几遍。
最后,回归到上面的几个问题,无论是就业,还是上学,还是自学,与其想该如何如何去做,不如找准目标,轻装上阵,干就是了。
有句很有名的鸡汤说的很好:“种一颗树,最好的时间是10年前,其次,就是现在。”
小伙伴们,撸起袖子加油干吧。
祝所有看到本篇文章的小伙伴在未来都能收获自己的大树。
点击下方卡片与我联系,一起交流职业成长。
相关文章:
转行做程序员,多晚都不晚
大家好啊,我是董董灿。 最近有不少小伙伴加我微信咨询一些问题,有同学想了解AI行业的现状,想着转行的,也有在校生想了解毕业后工作方向的,当然也有想学习编程知识的。 诚惶诚恐,没想到之前写的文章&#…...
自动化运维ansible
一、Ansible概述: 是一个配置管理系统(configuration management system),当下最流行的批量自动化运维工具之一。 Ansible是一个开源的自动化工具,用于配置管理、应用程序部署和编排等 IT 任务的执行。它专注于简单性和可扩展性,并…...
记录:Unity脚本的编写4.0
目录 前言导入音乐编写脚本 前言 之前使用脚本对uniry中的模型进行了控制,诸如使用键盘控制对象模型的移动或者使用鼠标对对象模型进行角度的切换(或者是类似的东西),而我们在游戏的过程中,总是伴随着一些好听的bgm&a…...
vue中引入jquery解决跨域问题
1、vue 工程文件 package.json 中 引入 “dependencies”: { “jquery”:“^2.2.4” }, 2、控制台执行命令,当前工程文件夹下 cnpm install 3、修改的vue文件中 加入 import $ from ‘jquery’ 4、调用 ajax请求 $.ajax({url:http://192.168.0.10:9099/strutsJspA…...
车规MCU开发工具之Vector DaVinci Configurator执行arxml合并操作
环境 Step1 导入要合并的arxml 、 Step 2 比较、合并过程 <完>...
数字滚动动效(纯HTML5版和Vue版本)
数字从0到指定数字的滚动动效,直接上代码; H5 <!DOCTYPE html> <html> <head><style>/* 设置数字显示的样式 */.counter {font-weight:700;font-size: 36px;color: #333;}</style> </head> <body><div cl…...
Leetcode—2530.执行K次操作后的最大分数【中等】(C语言向上取整数学公式)
2023每日刷题(五) Leetcode—2530.执行K次操作后的最大分数 向上取整思想 参考了这篇文章 有人肯定会问,这个向上取整为什么是这样来的。接下来我简单讲解一下。 数学式: x y 数学式:\frac{x}{y} 数学式:…...
CMakeList 编写示例
cmake_minimum_required(VERSION 3.8) #指定cmake的最小版本 set(PROJECT_NAME Untitled_1) #初始化变量 project(${PROJECT_NAME} VERSION 1.0) #创建一个project set(CMAKE_AUTOMOC ON) #初始化内置变量, 该变量为Qt工程专属变量 set(CMAKE_AUTORCC ON) set(CMAKE_A…...
OSI笔记
由7层组成,由下自上分别为: 物理层(硬件方面,例如物理网络设备、布线电缆、光纤等), 传输数据主要是比特流0 1 、电信号数据链路层(确定了0 1 的分组方式,通过广播的方式࿰…...
C++之前置声明
在C中,前置声明是一种声明类或函数的方式,但并不定义它们。 前置声明的主要目的是为了解决编译时的依赖性问题,提高编译效率,并允许更灵活的代码组织。 原理 C前置声明可以减少头文件依赖的原理在于,通过前置声明&am…...
用3D扫描生成合成数据
合成数据集(Synthetic Datasets)正在成为计算机视觉模型训练的标准部分。 虽然新工具使合成数据集变得更容易访问,但除了标准机器学习过程之外,许多工具还需要对 3D 建模有基本的了解。 最简单的捷径是从现实世界中获取现有对象并…...
pip安装依赖报错
执行命令时 pip install --upgrade pip 报错: pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。pip install --upgrade pip~~~ Category…...
规范的项目流程图怎么写
编写规范的项目流程图可以遵循以下步骤: 1.明确项目目标:首先,明确项目的目标以及需要实现的结果。这有助于确定项目的范围和要求。 2.识别项目任务:识别和列出所有的任务,这可以包括获得资源、实施动作、收集信息等…...
模型部署笔记--Pytorch-FX量化
目录 1--Pytorch-FX量化 2--校准模型 3--代码实例 3-1--主函数 3-2--prepare_dataloader函数 3-3--训练和测试函数 1--Pytorch-FX量化 Pytorch在torch.quantization.quantize_fx中提供了两个API,即prepare_fx和convert_fx。 prepare_fx的作用是准备量化&#…...
解决XXLJOB重复执行问题--Redis加锁+注解+AOP
基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图: 线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有…...
云安全(1)--初识容器逃逸之特权容器逃逸
文章目录 前言privileged,特权容器逃逸环境配置实际利用实际环境利用计划任务/var/spool/cron/crontabs/ 适用于ubuntu debain/var/spool/cron 适用于centos ld.so.preloadssh 前言 在10.15号的上海中华武数杯的渗透赛里做到了一个k8s的题目,这应该是我第一次在比赛…...
二阶系统时域响应
二阶系统微分方程 二阶系统传递函数 二阶系统单位阶跃响应 过阻尼系统 临界阻尼系统 欠阻尼系统 无阻尼系统 二阶系统阶跃响应仿真 在Matlab中进行仿真,设置不同阻尼比2、1、0.5和0,可以得到结论: 阻尼比越小,系统响应速度越快&…...
mstsc改端口为33389
windows 远程默认端口3389不太安全,改成33389防下小人 把下面的2个文本存在后缀.reg的文件,双击导入注册表,"PortNumber"dword:0000826d 这个就是33389对应的端口号的16进制值,要想自己改成其它的换下值即可 Windows …...
经典算法试题(二)
文章目录 一、岁数1、题目2、思路讲解3、代码实现4、结果 二、打碎的鸡蛋1、题目2、思路讲解3、代码实现4、结果 三、分糖1、题目2、思路讲解3、代码实现4、结果 四、兔子产子1、题目2、思路讲解3、代码实现4、结果 五、矩阵问题1、题目2、思路讲解3、代码实现4、结果 六、谁是…...
Linux——生产者消费者模型
目录 一.为何要使用生产者消费者模型 二.生产者消费者模型优点 三.基于BlockingQueue的生产者消费者模型 1.BlockingQueue——阻塞队列 2.实现代码 四.POSIX信号量 五.基于环形队列的生产消费模型 一.为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
