你为什么选择程序员这个职业?

news2025/1/19 14:32:30

注意,今天的这篇文章,我只是对程序员这份工作所需要面对的问题挑选一些有意思的话题讲讲我的理解,并不是对程序员的职业规划进行分享。本文分为入行前和入行后两个部分,分别聊聊。

入行前
所谓入行前,其实就是指还是学生的你是否应该选择程序员作为你的职业工作、如何获得这份工作。作为一名学生,你真的要想清楚是否程序员这份工作适合你,因为它牵扯的个人精力实在太多,导致你不可能有太多的个人爱好。大家都知道,很多程序员会自嘲称呼为码农,目前来看,程序员是最容易逆袭的职业,码农也是从收入角度最容易逆袭的工作,但同时码农也习惯了自嘲,于是把自己描绘的异常辛苦,总觉得自己赚钱多是应该的,因为太累了。

入行前,作为学生的你们,除了正常的上课、实习之外,还可以通过一些竞赛类的准备工作提升自己的技术能力,此外,一般也需要通过校招进入技术含量较高的科技公司。针对这两点,我分别谈谈自己的看法。

对于 ACM 的理解
以个人的经验,搞 ACM 的学生遇到的问题,有点类似与高中各科竞赛,需要为了竞争而学习比较深层次的知识,拥有大量做题带来的经验,但致命的是除了顶尖高中竞赛选手和顶尖大学的 ACMer 之外,其余所有人学习的知识都不太系统,尤其是数学上的。

大多数人对数学的学习仅仅局限于数据结构 / 离散数学,可能因为 ACM 要有数论题而学习了一点数论和组合数学的皮毛,具体就不会深入看进去了。结果,ACMer 的数学功底并没有因为 ACM 的做题训练而提高多少,对算法的理解甚至可能是仅局限于套用算法模板,这对于未来想从事算法研究的人来说,无论是在公司为了某个任务做优化,还是在研究机构发论文,都会存在致命的基础短板。

ACM 除了算法之外,带来的间接好处是可以提高编程能力,但很明显提升编程能力的主要途径就是编程,至于写什么样的代码、什么语言的代码,区别不是很大。但不可否认,ACM 确实是一个可以锻炼写代码能力的机会。

公平地说,ACM 依然是我接触的大学里所有比赛中最公平、最锻炼能力的。在我看来,ACM 这种准备时间长、比赛时间短、评价体系又比较客观的竞赛,应该是最锻炼人能力也最有说服力的。因此如果想参加比赛,ACM 应该是计算机专业的首选,但并不是说 ACM 有价值,而是 ACM 是否是最有价值的事情,应该也不是,因为 ACM 本身就是一种游戏,它可以让人痴迷,可以让人形成一种容不得别人说 ACM 不好的圈子。不管怎么说,可以肯定的是,ACM 的经历让学生更容易被公司相中,因为“平均水平”高一些,起码觉得搞 ACM 的更有可能靠谱,尤其是编码能力这种无法体现在简历上的实际能力。

参加校招
最近几年读参与了公司组织的校园招聘工作,每次去都会见到大量的学生,我喜欢和他们交流,观察他们的一言一行,为了进一步考察他们的综合能力和性格组成,我每次都会自己准备面试题,这些题目包括了编程基本概念、算法编程题、操作系统、数据库编程、开源代码阅读、垃圾回收机制、系统架构描述、实习期经历回顾、人生过程中遇到过的挫折、对于工作氛围的想法、未来的职业发展方向设定等。

这些问题中其实大多数都是开放式问题,一些是没有固定的答案,另一些甚至于是完全开放式的,需要学生提出问题。我的这组题目中,可能只有编程基本概念这一条有固定的标准答案,算法编程、数据库编程都有多种回答方案,只不过每一种回答的运行效率不同,这些都属于半开放式的技术问答。操作系统、开源代码阅读、垃圾回收机制、系统架构描述,这些个问题则属于是自己出题的题目,为什么这么说?因为我会根据你所了解的知识点一点点地深究下去,一点点往下问,所以这是完全开放式的技术问答。实习期经历回顾、人生过程中遇到过的挫折、对于工作氛围的想法、未来的职业发展方向设定,这四个问题属于非技术领域的完全开放问答,我之所以提出这些问题,是希望能够更加接近学生的真实生活、内心想法,了解学生的过往经历、三观,以及周围环境,这样可以决定是否录用,以及如何更好地发挥学生的能力。

我讲一下自己的校招经历。很多年前,我去参加一家德国企业的面试,总经理是位中国人,50 来岁的老博士,他让我谈谈对于公司情况的了解情况,其实我已经做足了功课,把他们网站上的英文背出来了,我一边背,他一边睁大了眼睛,扶了扶眼镜,还纠正了对于创始人德文名字的发音错误,然后和我说:“你有什么要求,现在就可以提”。

除了实际的技术基础能力以外,我觉得一名学生还需要具备做人的格局,做人不要仅限于眼前利益,不要太实际,不要只考虑自己。推荐大家担任大公司的“校园大使”,这个工作一定要尽自己最大可能做好,积极配合 HR 小姐姐,其实过程中你也在被观察。

这次就遇到了三位截然不同的大使,第一位非常认真,两天时间忙上忙下,布置会场、参与宣讲会、电话联系学生、引导学生面试流程等等,还找了几位好朋友过来帮忙,忙到自己没有时间参加免于,虽然他存在不太擅长于沟通的弱点,但是我在晚上 9 点结束面试后,单独给他留出了面试时间,并且和 HR 一起邀请他加入,他很感激地不停鞠躬。人如果能做到对帮助自己的人心怀感激,这人一定不会差。第二位,面试当天他自己也坐下来面试了,技术一般,他自己介绍是校园大使,我正在犹豫时 HR 小姐姐和我聊起了他,“这个人责任心太差,请他帮忙招呼学生,他都懒得说话,自己管自己玩手机、吃饭,请他打电话联系没有来的学生问问情况,他一脸不屑,好像很看不起我们公司”,“哦,知道了,既然他看不上我么,我们也不用给他机会了”,他就这么错过了一家很棒的公司。第三位,我们面试当天她给自己安排了一天的面试,露了个面后就消失了,等她的事情干完了再跑来想面试,当然,我直接忽视了她。

入行后关于深度思考的理解
我觉得技术能力是可以培养的,而且可能可以快速培养,只要这个人具备深度思考的能力,因为知识体系的建立一定是基于思考之上的,而不会是填鸭式的。

多年来养成一种习惯,或者说不得不养成这样的习惯,就是在夜深人静的时候,静静地思考一天来的经历。白天,大部分时间是在异常忙乱中度过,没有时间思考。夜色下来,一切归于宁静,望着窗外闪烁的路灯,可以静静地思考自己和世界,思考在自己从事的工作中发生的各种各样或大或小的事情,从中找出有意义的东西,做一点小小的思想享受。这种思考,对人是有益的。

一个人做多了自己的职业活动,如果不调整,就会变得单一。思想也慢慢定向,没有开放式的思维方式,所以要在紧张的大脑和肢体活动之余,发现思维的新空间。作为一名软件工程师,我的大部分时间都用在了这个领域,我也发现,生活上的几乎所有细节也可以被放在这个领域里找到对应点或面,此外,程序员也需要从产品、运营方面思考技术,这样才能不断开阔自己的思考方式。我之所以愿意把这些思想“沉淀”积累起来,不是因为它们有特别的价值,而是因为它们是在宁静的外界和宁静的内心状态下形成的,宁静致远,对于拥有技术愿景的程序员来说,这是一个值得追求的境界。

对于工作时间的理解
时间是很值钱的,这种事情很多时候必须是上完学开始工作了才能理解。一个原因是对绝大多数学生来说,工作之后的空闲时间会变少,那么原来业余生活里快感度比较低的事情就不做了,这是因为你的时间可以换来收入,而收入可以用来在空闲时间换取更爽的快感,那么你的选择空间也就更多了。上学的时候,空闲的时间太多,以至于连写东西吐槽、在网上跟人互喷,都能排上日程。

我在一篇描述自我管理方式的文章里不小心说出了自己每天的工作时间(这里说的工作时间,其实也是学习时间,对于程序员来说,所有工作时间都是可以用来学习的,就看你会不会找方法),10-12 个小时,引起了读者的一波评论,我可以肯定的回答,确实是这样的。作为一名程序员,我认为你每周的工作时间应该保持在 60-65 个小时,因为我们这个行业的技术更新速度实在太快了,我认识的所有厉害的大牛都是这么熬过来的,没有人可以用很短的时间学会别人花费很长时间学会的技术。当然,每周的工作时间最好能够控制在 75-80 个小时以内,毕竟一个人的睡眠是需要保证的,也需要有一些陪伴家人的时间、个人娱乐时间。

关于公司的选择
我们发小三人,毕业后走上了不同的道路。一位一直在小型公司作为主力程序员,虽然也去过大公司,但是受不了那里的管理方式,最终选择了走上自己创业的道路,开了工作室。一位进了军工行业的研究所,一干 15 年,已经习惯了固定节奏的开发模式,虽然收入不能和外面的企业比,但是也挺舒服的,准备干到退休。一位在几家大公司干,工作的公司规模越来越大,他也习惯了按照研发流程和技术管理方法论工作,虽然每天需要面对的是激烈的内部和外部竞争环境、技术变更、产品驱动压力,但是也已经习惯了压力,继续着自己的道路。人各有志,也各有各的优劣势,找到属于自己的那一个点,尽力放大吧。

如果你希望自己在某一个或几个领域成为资深码农,你应该选择有技术并且有业务的大公司。技术层面,既要有技术积累,也要有高水平的同事。业务层面,要让业务对基础架构有足够的挑战性。其实当前满足后者的公司比前者多得多,毕竟让大多数互联网公司所做的事情来说,技术都不是决定性的,提前对技术做过于超前的储备大概率会浪费。反过来,假设一个公司有技术积累又有高水平的员工,一旦业务上不去高水平员工肯定会跑,最终只剩下哪些当年技术比较不错的技术人员,长期来看技术早晚要落后。这些原因导致业界很多公司存在业务发展非常快而技术跟不上的情况,去这样的公司也一样有挑战,但做的工作未必系统,而且同事的能力也不见得有保障。

怎么看技术人员话语权不高
一位朋友原先是做分布式数据库的,最近跳槽去了一家做无人车的公司,和他聊了一下,了解他的看法。做无人车和软件基础设施相比,最大的区别是做软件基础设施的技术人员,尤其是搞数据库开发的程序员,很多时候解决的是技术的门槛问题。我们认为数据库的一切问题归纳为本质上是“可用”的问题,对业务来说能扛住压力不丢数据不超时,并且各种功能都支持,这就是“可用”,至于在高并发情况下依然“可用”,那就是“高可用”。一旦把技术问题转化为“可用”的问题,就会让技术变成一个门槛,达不到的话业务受影响,达到后业务做得好或是坏,其实和技术的关系就不那么大了。这也是很多公司技术人员话语权不高的原因。

关于为什么去做高难度的技术
例如像 BAT、华为、小米这样的大公司,对软件基础设施的门槛要求还是比较高的,所以这个工作还是比较有技术含量的,尤其是比大多数实现业务逻辑、项目经理需求的工作有技术含量。就我前面提到的这位朋友的情况而言,无人车有更大的吸引力,因为它更难,难到我们并不确定什么时候才能真正做出来。表面上看它也是一个门槛—一个“可用”的无人驾驶技术,但因为难度足够大,所以有挑战性,必须不断地改善技术,做全球范围内还没有做出来的技术。搞数据库时处理的一些问题可能是其他公司已经解决的,并非“人类”都还没有解决的问题。很多时候需要和其他公司交流,互相借鉴经验,或者看看 Google 这样的领航者是怎么做的。

而做无人车因为这个领域很新,也都没做成熟,不存在谁跟随谁的问题,甚至严格来说并不存在领航者。到了一定程度后,自己取得的里程碑可能就是行业的里程碑了。无人驾驶是刚需,谁做出来谁赚大钱。相对应的,有些创业项目是解决了不存在的需求,有些项目是解决了存在的需求但不怎么赚钱。无人车是存在的需求,市场规模很大的需求,技术含量很高的需求。无人车并不是今年才有的,但在这个行当的人也不算太多。这个时候去做,虽然不算什么行业先驱,但是也亲身经历了行业比较初期的发展了。当然无人车本质上也是个大数据的行业,必然还会涉及到数据的存储、计算等等,这不就更棒了嘛。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

要如何成为Android架构师?

搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;

对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,希望能帮你突破瓶颈,跳槽进大厂;

最后我必须强调几点:

1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。

你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣面试150: O(1) 时间插入、删除和获取随机元素 HashMap结合数组

Problem: 380. O(1) 时间插入、删除和获取随机元素 文章目录 思路复杂度Code 思路 👩‍🏫 三叶题解 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( n ) O(n) O(n) Code class RandomizedSet {static int[] nums new int[200_010];//存…

RabbitMQ小记

参考书籍:朱忠华的《RabbitMQ实战指南》 一、基础概念 1.Exchange 1.1 创建方法的参数,exchangeDeclare() exchange:交换器的名称type:交换器的类型durable:是否持久化,true代表持久化。(持…

iperf图形化打流工具JPerf2.0使用教程(1):相关设置介绍

0 前言 iperf是一个很常用的网络性能测试工具,经常来进行打流测试,用来查看丢包率、抖动时间等网络通信情况,但它是使用命令行操作的,使用起来不太友好。本文介绍基于iperf的图形化操作工具JPerf2.0。 1 JPerf2.0的客户端和服务…

蓝桥杯速成5-AD/DA模数转换

一、原理图 上图可知该芯片使用的是iic时序,而不是51单片机的xpt2046时序,iic我们都很熟悉了吧 并且大赛还提供了我们iic底层驱动代码 左上角有AIN0-4四个转换输入通道,和AOUT一个输出通道,由控制字节选择 地址字节:0x…

Stable Diffusion本地部署教程

Stable Diffusion本地部署的步骤一般包括准备环境、下载Stable Diffusion模型和依赖库、配置运行参数等。下面是一个通用的教程,用以在计算机上本地部署Stable Diffusion。 准备环境 1. 确保硬件满足最低要求: - 一块NVIDIA GPU,至少4GB…

LLMOps快速入门,轻松开发部署大语言模型

大家好,如今我们能够与ChatGPT进行轻松互动:只需输入提示,按下回车,就能迅速得到回应。然而,这个无缝互动的底层,是一系列复杂而有序的自动执行步骤,即大型语言模型运营(LLMOps&…

【数据分析面试】11. 计算账户关闭率(SQL:评估不同查询方法的性能效率)

题目 给定一个账户状态表,编写一个查询以获取在2019年12月31日活跃并在2020年1月1日关闭的账户所占的百分比,以及在2019年12月31日活跃的总账户数。每个账户只有一条每日记录,显示其在当天结束时的状态。 注意:将结果四舍五入到…

在同一个局域网如何共享打印机和文件

1.在连接了打印机的主机上设置 1.1启用windows共享 打开网络与共享中心,点击“更改高级共享设置” 选择: “启用网络发现”“启用文件和打印机共享”“启用共享以便可以访问网络的用户可以读取和写入公用文件夹中的文件” 打开控制面板,选…

STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式,生成代码四、MDK打开生成项目,编写HAL库的GPIO输出代码五、运行仿真程序,调试代码 一、功能需求分析 在完成开发环境搭建之后,开始使用STM32GP…

python标准数据类型--列表常用方法

在Python中,列表(List)是一种非常常用的数据类型,用于存储一组有序的元素。Python提供了许多内置方法来操作列表,使得对列表的处理变得非常灵活和便捷。在本篇博客中,我们将介绍一些常用的列表方法&#xf…

Python | Leetcode Python题解之第8题字符串转换整数atoi

题目: 题解: INT_MAX 2 ** 31 - 1 INT_MIN -2 ** 31class Automaton:def __init__(self):self.state startself.sign 1self.ans 0self.table {start: [start, signed, in_number, end],signed: [end, end, in_number, end],in_number: [end, end,…

基于Java+SpringBoot+vue3点餐/外卖管理系统设计与实现

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

linux 安装 pptp 协议

注意:目前iOS已不支持该协议 yum -y install ppp wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/pptpd-1.4.0-2.el7.x86_64.rpm yum -y install pptpd-1.4.0-2.el7.x86_64.rpm vi /etc/pptpd.conf 去除 localip 和 remoteip的注释 …

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题? 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

阿里云2核2G服务器租用价格,真便宜

阿里云2核2G服务器配置优惠价格61元一年和99元一年,61元是轻量应用服务器2核2G3M带宽、50G高效云盘;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large,2核2G、3M固定带宽、40G ESSD entry系统盘,阿里云活动链接 aliyunfuwuqi.…

真--开源个人收款系统方案--部署方案

继上文:真--个人收款系统方案,今天主要推出部署方案 1.下载源码 首先需要下载源码,源码地址:PayServer: 个人收款系统方案 - Gitee.com 并且pip下载依赖库: Flask2.5.1 Flask-Cors3.0.10 gevent23.6.0 websockets10.9 urllib31.26.1 2.修改配置 路径下有两个py文件&#xf…

【Frida】【Android】09_爬虫之Socket

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…

【Java网络编程】HTTPS协议

HTTPS协议 由于HTTP协议是采用明文传输的方式,因此带来了很大的数据安全隐患,所以在最近几年的时间内,大部分平台都采用了HTTPS逐渐取代了HTTP,但HTTPS并不是一种全新的协议,而是建立在HTTP协议的基础之上&#xff0c…

单链表的排序

目录 题目来源: 题目描述: 初始代码: 思路: 具体做法: 我的代码: 优化代码: 对比: 复习:List 基本介绍 常用方法 遍历方式 题目来源: 单链表的排…