我是如何从一个新闻狗转行成为程序猿的?

点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事


640?wx_fmt=jpeg

作者

long

微信公众号:longtalk

已获原作者授权,如需转载,请联系原作者。


我本科硕士都是读新闻专业, 毕业后却去了游戏公司做程序员, 震惊了不止我的老师、同学,也震惊了我的父母。那么, 这么大跨度的转变我是如何实现的呢?


要想从完全不相关专业和背景转换成为程序员,基础、时间、决心,三个条件只要具备了两个就有很大概率成功。接下来,我将和你说说我的故事,希望对你有所帮助。

       

决心:从产品经理到工程师

       

大四的时候(2015~2016年),正是国内互联网巨头群雄逐鹿的时代,每天打开手机看新闻和朋友圈都是相关的资讯,而且互联网的高薪和发展前景非常吸引我。于是我就开始马上学习编程要做程序员升职加薪迎娶白富美当上CEO了么?


当然不是了。


一开始我认为大学非理工专业的人要进互联网行业肯定是先从运营或者产品经理开始。所以我先打算成为一个产品经理。


我在一番拉勾、实习僧和微信群中的寻找和投递后,获得了在百度图片当产品实习生的机会。这段实习让我不是很想继续追求做产品经理了——因为我发现他们所需要的“产品实习”只是需要有人帮他们重复地评审图片而已,这并不是多有技术含量的工作,如同流水线工人一般,非常的无聊。


这次实习最大的收获或许是百度的那种重视技术的文化(百度每年各种奖项都是颁给技术人员)。这让我下定决心,要放弃成为PM而转为RD(百度内对程序员的称呼)。

                

起步:学习编程的基础

       

那么我有学习编程的基础么?算是有,也算是没有。


我在高中学过的pascal的基础——是真的很基础,就是差不多会写if-else和for语句的那种水平。大一的时候我又学了C语言。虽然这些语言的知识我已经几乎全部忘光了,但是学习过编程的经历让我对编程这件事至少有一些感觉,不会一想到要学习编程就觉得这对我来说不可能(而这却恰恰阻碍了很多人)。


经历一些编程学习的人都知道编程不是什么黑魔法,其实也就是人把自己脑子里的逻辑思路写到电脑里去让它执行,本质上和写一篇英语文章是很类似的。 


起步阶段,我想先学一些容易的内容。


16年的时候前端大热,我就先是报了个网易云课堂的前端微专业,开始跟着学习HTML、CSS和JS这些东西。不过我学了两个月后,听说Java作为后端最常用的语言更好找工作,于是又同时开始学习Java方面的课程。


通过这两个方向的课程,我对web开发的前后端都有了一定的了解,并且发现自己更喜欢做的是后端的编程,因为前端很多东西过于琐碎了,经常在为了视觉上的一些对齐而纠结。

       

深入:学习数据结构和算法

       

在接触Java学习的同时,我也经常上知乎等网站看一些前辈对学习编程的建议。在这些程序老手的建议中,反复被提及的就是要学好数据结构和算法,因为它们是一个程序员的基本功。


这时候,我刚好读硕士第一年开学,我赶紧就利用大学的在线系统,查一下学校里有哪里在开《数据结构》和《算法》这两门课。查询到具体课程的上课时间、地点和专任教师后,我就通过邮件咨询了老师看看我能不能去上课。 

       

640?wx_fmt=jpeg

                

现在看来我这封邮件言辞非常不谦虚,接触了一两个月Java和JS竟敢自称“熟练”。不过所幸我但凡有发邮件的教师/教授都给了我积极的回应,因此很快我就出现在了计算机和信管专业的教室里。 


我一个非工科专业学生学习CS核心课程,一开始就是抱着诚惶诚恐的心态的。我基本上每节课都坐在第一排,然后尽可能做到课前预习,课后完成老师要求的作业,并且上完一个章节的知识就写一篇知识总结。相关的算法和数据结构知识总结我很多发在了简书上(https://www.jianshu.com/nb/7225186)。


在上算法课的实验课写上机作业的时候,因为当天学的东西掌握得还不牢,我经常还得一直请教助教小哥怎么写。好在助教小哥是人长得很帅人还超好的学长,基本上我有问必答。有一次我还去学长的宿舍楼下问图算法那章节的作业,学长解答完了我的问题才和他女朋友出门……


一整个学期下来,我成功学习完了《算法分析与设计》、《数据结构》、《离散数学》这三门课,其中算法得了93,数据结构得了88分(哎,我为啥一开始不直接学CS……),对整个计算机专业的体系结构有了初步的认识。


第二个学期,我又报了《计算机网络》、《操作系统》、《机器学习入门》、《计算社会学》、《文本挖掘》等课程。报了这么多课程,一方面是因为第一个学期我的学习成绩让我觉得自己能够handle更复杂深入的课程了,另外一方面则因为我硕士学业有很多的选修学分需要完成,既然我现在打算走CS这条道路了,那么就干脆选修课也全上CS好了。

      

       

走出校园:实习与就业

       

学习编程、踏入CS最后还是为了能找个写程序的工作,但是万事开头难。 


我在上算法的那个学期的期末就开始积极寻找相关实习,希望寒假的时间能积累自己的简历。然而,北京之大,我在拉勾投递了三四十个简历后,却只收到了两三个面试机会。


其中有一次,有一个小公司说让我去北京的东五环外的一个地方面试,结果我到了那里之后却发现这公司在一个废弃工厂里,而且这个地方周围一个人都没有。我面试完出来的时候是晚上八九点,一个人瑟瑟发抖,心想万一被传销分子抓走了怎么办。 


所幸我后来在新浪找到了一个实习的机会,因此那个寒假都呆在新浪,工作主要是帮数据管理/分析员打下手,做些凌杂的事情。


这段实习做了一个多月后,我感觉能学习到的东西实在有限,因为我主要想做开发岗位,而当时数据管理/数据分析的工作主要是单纯写SQL调取数据以及处理一些其他数据报表的小问题。这项工作要求人比较细心且对数据非常敏感,这并不是我喜欢和擅长的方面。


大概三月份的时候,各个互联网厂商都开始暑期实习的招聘。名义上这是暑期实习,但其实就是当年的秋招,因为实习机会就是留用机会。而且一旦取得一个大厂的实习机会后,收获的不仅仅是这个大厂的留用机会,也是秋招时候简历上的经历,一举两得。


我一边买了面试准备的书(主要都是《Java程序员面试笔试宝典》之类)学习准备面试常考的技术知识,另一边投递了几乎所有市面上叫得出的有规模的互联网公司,也收获了很多次面试机会。


640?wx_fmt=png


其中我印象很深刻、感觉特别挫败的是阿里的面试:我面到了第二轮的时候,被面试官嘲讽我是不是写的代码非常少,因为面试时候他让我说出我遇见的Exception,我说了大概五六个就语塞说不下去了,确实体现了我开发经历严重不足。


还有一次,我面了今日头条的岗位,两轮面试写代码后,面试官还带我去食堂吃了饭,然后HR和我谈,问我打算什么时候实习,来实习多久。我回学校后天天刷邮箱就等着发实习offer,没想到过了几天却收了一封拒信。


暑期实习招聘的那段时间我整个人感觉非常焦虑又亢奋,每天都在想如果我一个实习都找不到,干脆还是放弃了回去做本行专业找个工作或者考公务员好了。还好最后,我有幸通过了一家知名游戏公司的面试,成为暑期实习生的一员,并且最后也通过完成实习项目获得了公司的留用offer(那个暑假也过得很艰难,但是篇幅所限不再展开了~)。


这段暑期实习的从求职到最后结束,让我才开始确信,我真的成功转行到技术了。回头看,我特别感激我当时暑期实习公司的领导兼导师。 


之后,秋招的时候,我也投了很多公司,进行了一轮尝试,因为我想知道自己到底是因为实力能留在实习的公司,还是单纯的运气而已。最终秋招里我拿到了百度开发类的SP(据说算法的SP更高)、滴滴出行的小SP、央行背景的网联清算公司(给北京户口和年20多万薪水)、华为、招银网络以及招行深圳分行的研发offer。 


因为我想离开北京,所以我放弃了网联清算、百度和滴滴的SP。由于当时对暑期实习公司的好感以及一种被认可的感激之心吧,我最后选择留在它们这里而不是去深圳华为。

       

回顾:理性乐观地选择,扎扎实实地努力


回头看16、17年这两年,做这个转型的过程是痛苦和快乐交织着的:做自己不熟悉而且风险很大的方向,自然是有很多痛苦的,跑不起来代码又自己解决不了不得不到处微信上问人的经历我真的是每天都有;


但是做技术不断进步,看到自己不断取得成绩,理解越来越多的方面知识,这种成就感所带来的快乐又是巨大的。


我在向技术转型的这两年,经常反复读知乎问题《23 岁的你,曾处于什么样的状态?现在呢?》中的一个回答(https://www.zhihu.com/question/19832061/answer/13163761)


答主是一个自己努力学习成长克服困难最后在北京扎下根的技术女前辈。


她说:


做事要努力,困难面前不屈不挠; 

选择不要犹豫,下了决心就付出行动; 


放下过去的成绩,才能担当新的重任; 

工作很重要,家庭更重要; 

乐观、积极、向上的心态是幸福的源泉。


我谨把这些话送给所有决心走这条路的人。


- The End -

「若你有原创文章想与大家分享,欢迎投稿。」

加编辑微信ID,备注#投稿#:

程序 丨 druidlost  

小七 丨 duoshangshuang


点文末阅读全文,看『程序人生』其他精彩文章推荐。


免费公开课|扫码即可报名


想学习超级账本的同学千万不要错过!开课前报名可免费观看直播和回放,课程结束后只有会员才可免费观看回放哦!

640?wx_fmt=jpeg


推荐阅读:

640?wx_fmt=gif

print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)


<think>好的,我现在需要帮一个程序员朋友规划转行到AI行业的学习路径。首先,我得理清楚AI开发需要哪些核心技能,然后根据他的背景推荐合适的学习步骤和资源。 程序员已经有编程基础,这应该是优势。但AI涉及的领域比较广,可能需要补充数学知识,比如线性代数、概率统计和微积分。不过,具体需要掌握到什么程度呢?可能得先了解常用的数学概念,比如矩阵运算、梯度下降、概率分布这些,而不是深入理论证明。 接下来是编程方面。Python在AI领域用得最多,尤其是数据处理和模型训练。虽然他可能熟悉其他语言,但Python的库像NumPy、Pandas、Matplotlib是必须的。然后是机器学习框架,比如TensorFlow和PyTorch,这两个应该重点学习。还有数据处理工具,比如SQL,可能也需要补充。 然后是机器学习的基础知识。监督学习、无监督学习、强化学习这些概念,常见的算法如线性回归、决策树、SVM、神经网络。需要理解原理和应用场景。项目实践很重要,可以通过Kaggle竞赛或者开源项目来练习。 深度学习是AI的重要部分,得学习神经网络的结构,CNN、RNN、Transformer这些模型。可能还要了解自然语言处理或计算机视觉的具体应用,比如BERT、ResNet。框架方面,PyTorch现在比较流行,应该深入学习。 工程化能力也不能忽视。模型训练好后如何部署,比如使用Flask或FastAPI搭建API,Docker容器化,云计算平台如AWS、Azure的使用。模型优化方面,剪枝、量化这些技术,以及分布式训练的知识。 行业应用方面,不同领域有不同的需求,比如推荐系统、图像识别、NLP。他需要明确方向,学习相关的技术和业务逻辑。同时,了解伦理问题,比如数据隐私和算法偏见,也是必要的。 最后,保持学习的态度,跟进最新的论文和技术动态,参与社区和项目积累经验。可能需要推荐一些书籍和在线课程,比如《机器学习实战》、Andrew Ng的课程,或者Hugging Face的教程。 总结一下,学习路径大概分为数学基础、编程工具、机器学习理论、深度学习、工程化部署、行业应用几个阶段。根据他的情况调整深度和顺序,重点放在实践和项目上,逐步过渡到AI开发岗位。</think>以下是针对程序员转行AI开发的系统性学习路径(分阶段递进,带关键工具/概念标注): --- ### **一、夯实数理基础(选择性补足,聚焦应用层)** 1. **线性代数** - 核心:矩阵运算($Ax = b$)、特征值分解(PCA基础)、张量概念($T_{ijk}$) - 工具:NumPy实现矩阵操作(`np.linalg.svd`) 2. **概率统计** - 核心:贝叶斯定理($P(A|B) = \frac{P(B|A)P(A)}{P(B)}$)、高斯分布、假设检验 - 应用:评估模型指标(准确率/召回率计算公式:$\text{Precision} = \frac{TP}{TP+FP}$) 3. **微积分** - 核心:梯度概念($\nabla f$)、链式法则(反向传播基础)、最优化(损失函数曲面) --- ### **二、掌握AI开发工具链** 1. **Python生态** - 数据处理:Pandas(DataFrame操作)、NumPy(广播机制) - 可视化:Matplotlib(`plt.subplots`)、Seaborn(分布图) - 范例:用Scikit-learn快速实现分类(`from sklearn.ensemble import RandomForestClassifier`) 2. **深度学习框架** - PyTorch:动态计算图(`torch.autograd`)、模型定义(`nn.Module`) - TensorFlow:静态图(`@tf.function`)、Keras高层API(`model.fit()`) 3. **数据处理工程化** - 大数据:PySpark(RDD操作)、Dask(并行DataFrame) - 数据库:SQL查询优化(窗口函数`OVER(PARTITION BY...)`) --- ### **三、机器学习核心知识体系** ```mermaid graph LR A[机器学习方法论] --> B[监督学习] A --> C[无监督学习] A --> D[强化学习] B --> E[回归问题: 房价预测] B --> F[分类问题: 图像识别] C --> G[聚类: 用户分群] C --> H[降维: t-SNE可视化] D --> I[Q-Learning] D --> J[PPO算法] ``` 1. **经典算法实现** - 手写梯度下降(代码示例): ```python def gradient_descent(X, y, lr=0.01, epochs=100): theta = np.zeros(X.shape[1]) for _ in range(epochs): grad = X.T @ (X @ theta - y) / len(y) theta -= lr * grad return theta ``` 2. **模型评估** - 交叉验证(`sklearn.model_selection.KFold`) - ROC曲线绘制(`sklearn.metrics.roc_curve`) --- ### **四、深度学习专项突破** 1. **CV方向技术栈** - 核心架构:ResNet残差连接(解决梯度消失) - 实践:使用MMDetection训练目标检测模型(配置文件`configs/faster_rcnn_r50_fpn.py`) 2. **NLP方向技术栈** - Transformer详解:自注意力机制($\text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$) - 实战:Hugging Face库调用BERT(`AutoModelForSequenceClassification`) 3. **模型压缩部署** - ONNX格式导出:`torch.onnx.export(model, input, "model.onnx")` - TensorRT优化:FP16量化(`builder.fp16_mode = True`) --- ### **五、工程化落地能力** 1. **MLOps全流程** - 持续集成:GitHub Actions自动化测试 - 模型监控:Prometheus + Grafana指标看板 2. **云平台实战** - AWS SageMaker全流程示例: ```python from sagemaker.pytorch import PyTorch estimator = PyTorch(entry_point='train.py', role=sagemaker.get_execution_role(), framework_version='1.8.0', instance_count=2, instance_type='ml.p3.8xlarge') estimator.fit({'training': inputs}) ``` --- ### **六、持续进阶策略** 1. **论文复现** - 使用Papers With Code查找实现(如Vision Transformer复现) - 参与AI竞赛(Kaggle特征工程技巧积累) 2. **社区参与** - 贡献开源项目(PyTorch Lightning模块开发) - 技术博客撰写(Medium/知乎分享模型优化心得) --- **转行建议**:优先从AI工程岗切入(模型部署优化),逐步向算法岗过渡。初期可关注以下岗位: - AI平台开发工程师 - 机器学习系统工程师 - 计算机视觉部署工程师 当前行业对具备传统开发经验+AI工程化能力的复合型人才需求旺盛,平均薪资溢价可达30%-50%。保持代码能力优势的同时深化AI专项技能,是成功转型的关键路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值