这篇文章将从 0 开始帮助你学习编程并找到程序员相关工作,持续进步。
可以配合视频观看:
●在线观看:https://meeting.tencent.com/v2/cloud-record/share?id=c7024f3f-7406-48c7-b79b-668499273fa6&from=3 访问密码:bRzM
●阿里云盘:https://www.aliyundrive.com/s/Sdce6Tmf6fd 提取码: ds30
●百度云盘:https://pan.baidu.com/s/14A5U4ya6uwV2HNHqmxwR2w 提取码: d3t0
确定方向
必须尽早确定求职方向,后续的所有学习和准备都必须朝着该方向前进。
目前和编程相关的主流岗位如下:
●前端开发工程师
●后端开发工程师
●PC 客户端开发工程师
●移动端开发工程师
●大数据开发工程师
●软件测试工程师
●运维工程师
●网络工程师
●云计算工程师
●算法工程师
选择因素
1个人兴趣
2需求量
3薪资
4前景
5岗位和实际能力的匹配度
6学习时间
7学历
8个人发展目标
方向选择案例
●前端还是后端?
●算法岗位如何?
●编程语言的选择?
○C++
○Java
○Go
○Python
○PHP
读研还是就业?
在准备考研之前,首先要想清楚自己为什么要读研?
可以看下这个视频,了解一下目前的考研形势、以及自己是否适合读研:https://www.bilibili.com/video/BV1y3411p7Ck
这两年考研同学的压力的确是很大,一方面是希望星球里准备考研的同学加油拼搏,另一方面是给还没面临这些选择的同学一个建议:不管你之后要读研还是就业,不要 all in 考研,基本的开发技能一定要学会!这样哪怕考研失利依然可以通过几个月的时间在春招拿到 offer。时刻给自己留一条后路总没错的。
备战考研和直面工作怎么选?鱼皮的回答:https://t.zsxq.com/r7aurni
参考资料
大学计算机各专业介绍:https://www.bilibili.com/video/BV1YF411a75Y
计算机热门话题答疑:https://www.bilibili.com/video/BV1xg411T7c1
学习技术
编程学习的套路
无论学习任何编程技术,都可以遵循以下步骤:
1首先了解这个技术是做什么的?有什么优点和缺点?适用于什么场景?(不感兴趣或者和目标无关的技术可先不学)
2能够 被动 使用这个技术来完成项目或解决问题(要多写代码,会用技术),这里的被动是指别人让你用这个技术(比如网上现成的项目或教程视频)
3进一步了解该技术的特性,并能熟练运用,主动用该技术去解决对应的问题(阅读官方文档、进阶书籍等)
4了解该技术的核心思想、关键模块、各模块的作用(阅读官方文档、技术文章、进阶书籍等)
5阅读该技术的源码,由整体到局部逐渐深入(利用开源仓库)
6能够在该源码的基础上修改源码 / 定制开发,或者给该项目贡献代码或插件(可以多和原作者、项目的 issues 区讨论交流)
7自己实现类似的技术(推陈出新)
如果为了找实习或一般的工作,前 2 个步骤完成即可,企业中大多数的工作其实就是复制粘贴,只要进入公司一般不会遇到工作不能完成的问题。
如果想进大厂,一定要有部分技术能够完成前 4 个步骤,能做到第 4 步之后当然更好了,但要注意时间的把控。
掌握正确的学习方法
给大家分享一些帮助大家坚持学习的视频:
如何逼自己学习?6个方法专治不想学、没动力(杨真直):https://www.bilibili.com/video/BV1Ya4y1W7iT
如果你是一名大学生,可以看下百大 UP 主【取景框看世界】的视频,考研、就业、学习方法、方向选择都有!(框框也是咱们 编程导航知识星球 的嘉宾)
学习建议
1想学好编程,千万别背代码!要多写代码、多练习、多做项目(把这句话刻到脑子里)。很多知识记不住没关系,只要你实践过,下次让你再做同样的事情时,你能够想起来用什么技术 / 什么方法,能通过查阅文档和百度来实现就可以了。
2现在网上的学习资料非常多(星球内也很多),并不是什么资料我们都需要看一遍。选一个相对完整、自己看的舒服的资料去学习就好了,基本都是大同小异,但注意千万不要看过期的视频(最好看 1 - 2 年内的)。
3准备好一款在线、随时随地写代码的工具,不用在本地去安装和配置,是初学者的好帮手。推荐菜鸟工具:https://c.runoob.com/compile/10
4准备一款记笔记的软件(推荐 Typora + Markdown),适当地将学编程过程中老师的思路、自己遇到的问题、解决问题的方法、心得感悟、遇到的好资料等进行记录。好记性不如烂笔头,后期复习时可以帮助你事半功倍。
5学完一门编程语言后,可以去世界最大的代码开源平台 GitHub 上搜索代码或者项目,看看其他程序员的作品。(GitHub 加速访问教程:https://t.zsxq.com/2V3nQRj)
6学会自主解决问题以及如何高效地提问(建议阅读 《提问的智慧》)
各方向学习路线
todo 待补充原创文章链接
应对焦虑
1 大目标分解,持续立 Flag
2 找到自己的成就感(做事的动力)
3 灌鸡汤:
○https://www.bilibili.com/video/BV1U44y1V7P4
○https://www.bilibili.com/video/BV1sF41137z3
4 乐观看待事物
积累经验
实践经验是求职的核心竞争力!
项目
建议
最好能够独立从 0 到 1 完成至少一个项目,需求分析、技术选型、初始化、增删改查、单元测试、部署上线、不断完善和优化。
如何获得项目经历?
●课堂大作业
●视频 / 书籍 / 文章教程(掘金)
●参加竞赛
●给开源项目贡献
○Issues 区答疑
○Bug 修复
○新增功能
○负责模块
●开源项目仿写
○完全仿写
○新增功能
○使用另外一种语言实现(比如 zx)
●仿站
●实验室 / 课题
●工作室 / 社团
●创新项目
●外包
●自主实现
什么样的项目有竞争力?
●个人参与度高(负责)
●和你要求职的方向高度吻合
●用的技术较为丰富,且每个技术用的恰到好处,为了业务而应用
●有某个方面或比较全面的优化点,如性能、稳定性、可用性等
●设计的算法很巧妙、效果很好,比如大数据推荐算法的执行效率、准确性
●能够解决某个问题。比如业务场景:帮忙抢到火车票,技术问题:自动化构建平台、组件库,行业问题:广告计算平台等
●前沿,比如区块链、前端流行的低代码平台、后端流行的云原生等
●项目影响力,比如 star 数、用户数等
●项目创意很好,能做出市面上没有且有一定作用的东西
项目优化思路
●性能
●可靠性:这个人很靠谱,但他可能很懒惰。一般不出手,出手不一般。
●可用性:这个人很勤快,但他可能不靠谱,99.99999%
●成本
●系统复杂度
●可伸缩性(容器)
●稳定性
●可维护性
●可扩展性
●体验
●合理性
●并发(缓存、性能优化、降级)
●容错性
●安全性
●可观测性(直观清晰地查看系统的运行状态)
优质项目分享
todo 待补充外链
实习
●寒假实习
●暑期实习
●日常实习
●远程实习
科研
●实验室
●论文
竞赛
算法类竞赛:
●蓝桥杯
●ACM
●LeetCode 周赛
●百度之星
●CodeM
●阿里天池
●Kaggle
作品类竞赛:
●计算机应用能力大赛
●微信小程序应用开发赛
●三创赛
●互联网+
●挑战杯
证书
●语言 / 框架认证
●华为 / 思科 / 红帽等专业认证
●软考(软件设计师)
●PAT 认证
●计算机等级考试
求职 - 准备简历
简历模板
不用太纠结!从上到下、布局清晰、简洁干净就好。
制作简历:https://www.wondercv.com/
写简历技巧
而写简历的目标是:在真实的前提下锋芒毕露,将有限的积累 无限放大 ,向面试官表达出 “我很主动、我自学能力很强、能够胜任工作” 等信息。
1内容划分清晰、完整全面,简历通常包括几个部分:个人简介(基本信息、照片、学校、专业、成绩、四六级证书、特长介绍等)、竞赛奖项、个人技术栈、实习经历、项目经历、科研经历等。
2合理划分各部分的比例,多写经历(实习、项目等),少写正确的废话(自我评价)
3简历必须一页,排版整洁;色调不宜过暗或过亮,推荐蓝色或淡灰色;色彩不要太丰富,要让人看起来舒服。
4依据个人优势对内容板块进行排序,把最有亮点的部分放上面,突出自己的优势和亮点,尽量减少和其他同学简历的相似度。和短视频逻辑一样,面试官如果觉得你的简历千篇一律,一下就刷走了。
5文字内容要精炼,拒绝口语化;用词尽量专业,体现专业性,不用担心面试官看不懂。
6项目 / 实习经历介绍中,可用 STAR 分析(场景、任务、行动、成果)来梳理自己的核心工作。标准句式:在 xx 公司 xx 项目中,在 xx 情况下,运用 xx 技术,解决了 xx,优化了 xx,达到了 xx 效果,带来 xx 收益等。举个例子:为适应产品特性、加快迭代速度,后端由 Springboot 重构至 Node.js ,数据库由 MySQL 迁移至 MongoDB ,实现了前后一体的 集中式配置中心 ,提高了接近 1 倍 的开发效率。注意每段介绍不宜过长,留给面试官提问的空间。
7最好给项目附上可直接访问的链接,有个人博客的话也最好写上去,建议多在博客中记录和总结自己学到的知识,让面试官感受到你的努力积累、脚踏实地。
8学会利用简历去引导面试官。很多面试官都会针对简历中提到的技术去展开提问,因此必须熟悉简历中的项目和用到的技术,提前想好对策。常见的问题有:项目中用了哪些技术?为什么用这个技术不用别的?有什么亮点?怎么去优化等等。
9可以针对不同的岗位和 JD(岗位描述),准备不同的简历,在部分细节和工作内容上调整。比如你前后端都会,投递后端开发岗位时,把后端技术放在前端技术上面去写,项目经历、实习经历等都要侧重于后端。
10内容允许夸大,尤其是对于没有特别多项目的同学,在简历的项目部分是需要 适度包装 的。举个例子:用 xx 框架提升了 20% 的查询性能,20% 是一个很不显眼的数字,如果你改成 90%,会更抓眼一些,并且对于大部分场合来说是合理的。但是 杜绝欺骗 ,尤其是工作年限等有准确数字、可被调查的问题,请实事求是,否则后果自负。
11写完简历后,一定要自己通读几遍。
12有机会可以多阅读借鉴他人的简历,查漏补缺。
优秀简历参考
求职 - 投递简历
投递时间
完整时间:
●2 月 ~ 5 月
○春招,面向大四 / 研二等即将毕业的同学
○暑期实习,面向非毕业生
●6 月 ~ 11 月
○秋招,面向大四 / 研二等即将毕业的同学
○寒假实习,面向非毕业生
●全年
○日常实习(如果要参与的话,尽量提前修完一些课程,给自己腾出时间)
○劳务实习
黄金时间(提前批):
●金三银四? 2 ~ 3 月
●金九银十? 7 ~ 9 月
建议大家利用好提前批,相当于在正式秋招 / 春招之余又多了一次机会。
投递目标
建议多投简历,从相对不想去的公司开始投递。
●岗位
●公司
●部门
●技术匹配度
●地点
投递渠道
●官网(建议先从官网了解各岗位的技术和能力要求)
●官方公众号(比如腾讯招聘)
●内推(建议部门直推)
●宣讲会(线上 / 线下)
●绿色通道
●找工作的网站
○实习僧,鱼皮的第一份实习就是在这里找的,机会很多
○牛客网,有很多互联网公司的内推机会(互联网)
○智联招聘
○Boss 直聘
○前程无忧
○拉勾招聘
求职 - 参加笔试
可以去牛客网查看各公司历年笔试题目。
笔试内容:
●性格测试
●算法题
●技术类题目(选择题、填空题)
准备面试
一般一场面试 30 - 60 分钟,一定要提前准备!
自我介绍
1 分钟左右,在自我介绍中突出自己的技术 / 业务 / 项目优势,并且在结尾抛出 “钩子”,吸引面试官提问。
要讲清楚以下几点:
●你是谁?
●你的经历:表达出你学过哪些技术?做过什么?
●要突出你的优势,自信一些
项目介绍
怎么介绍项目?
1为什么要做这个? 突出 自主性
2从 0 到 1 实现了这个项目,用了哪些技术?
3有哪些亮点?做过哪些优化?尽量 引导面试官
算法
如何刷题?参考星球内语雀知识库的算法学习路线
大厂每轮面试基本必考 2 - 3 道算法,建议刷题,刷题时每道题目的时间控制在 40 分钟 ~ 1 小时。
即使没空刷算法,你也要了解每个算法和数据结构做了什么?
技术
八股文,见星球语雀知识库。
面试软技巧
●礼貌精神
●不要抢话,想清楚再回答
面试过程
自我介绍
项目考察
技术考察
算法考察
不仅要说出思路,还要能运行,还要能通过。
智力题
抛硬币、硬币称重
业务考察
举例:
●设计一个地铁轨道交通系统?
●设计一个实时弹幕系统?
●设计一个排行榜、点赞?
反转问答
●对你的建议
●“收集” 一些信息
●询问一些题目的解法
面试复盘
面试之后要做的事
1快速回想并记录自己面试中遇到的题目和心得,最好可以写面经
2保证自己没答出的题目在下次面试可以回答出来
优秀面经
●星球同学的分享
●牛客网
●LeetCode
Offer 选择
尽可能多地争取 offer,不要拿到一家后就躺平了。
选择因素
●薪资
●地点
●技术匹配度
●行业
●工作时长
●公司口碑
●部门口碑
●领导口碑
●业务口碑
●稳定性
●情怀
参考平台
1校招薪水 Offer Show 小程序
2脉脉职言
职场生存
●先思考再提问
●尽可能多地获取信息
●日常总结,持续积累
●主动承担
●学会沟通
●礼貌待人
●谨言慎行
●合理分配需求的时间
程序员重要能力
想成为大佬,就是要通过持续学习和积累,提升自己的各方面能力,比较抽象,共勉!
1团队协作能力
2高效沟通能力
3需求分析能力
4架构设计能力
5抽象复用能力
6独立创造能力
7问题解决能力
8归纳总结能力
9自主学习能力
10工具利用能力
11高效编码能力
12信息检索能力
13开源建设能力
14源码阅读能力
15自测审查能力
16文档编写能力
17知识表达能力
18绘图描述能力
19持续学习(兴趣驱动)
20保持好奇心
编程误区
1我不适合学编程?❌(兴趣比天赋更重要,不要怀疑自己)
2忽视基础,急于求成 ❌(勿以浮沙筑高台)
3数学、英语差,就学不好编程 ❌(开发工作基本不用高等数学,英语可以使用翻译软件、工作中提升)
4编程时,刻意记忆代码 ❌(知道每行代码的意义,能看文档写出来就行)
5每行代码都要追求完美 ❌(何为完美?每个人的定义不同。先完成,再根据实际情况不断优化才是王道)
6用百度搜索、复制粘贴的都是菜鸡程序员 ❌(99% 的程序员写代码都离不开搜索和文档,这是很正常的)
7我做的项目太小了,就不整理了 ❌(自己的每个项目都要整理,可以记录自己的成长)
8跟别人交流很麻烦,我更愿意自己写代码 ❌(1 + 1 > 2,切勿闭门造车,不过也要找到合适的同学去交流)
9做别人做过的项目没有意义 ❌(连别人做过的项目都做不出,还想造新轮子?)
10遇到 Bug,想办法绕过而不是寻找解决方案 ❌(Bug 最能使人成长)
11遇到问题,第一时间去问别人而非自己解决 ❌(建议阅读《提问的智慧》)
12花了很多时间、看了很多书,就能学好编程 ❌(编程最忌讳纸上谈兵)
13只向前学习,不整理学过的知识 ❌(建议每学完一个知识,都去回想、总结、写心得,这个时间的花费是值得的)
14单元测试不重要 ❌(在实际开发中,越早发现问题越好)
15写文档不重要 ❌(缺失文档的项目后期会很难维护)
16和我无关的工作,就不需要了解 ❌(了解团队、同行是很重要的,全局视野)
17收藏的资源从来不看,就不收藏了 ❌(万一以后用到了呢?)
18不去考虑需求的价值,而是一味寻求解决方案 ❌(不要成为需求机器,要有自己的独立思考)
高效法则
如何高效学习编程、完成工作。
1不要过分追求完美,完成比完美更重要。
2有现成的代码,就不要自己写,避免重复劳动(学习除外)。
3学会使用软件及快捷键来提升自己的编码效率。
4做项目前,要先想清楚怎么做,做好充分的预研和设计。这样不仅便于后续的程序扩展,也能避免无意义的返工。
5将大的目标进行拆解,做好计划,分清主次。不要因为觉得目标遥不可及而拖延,也不要盲目乐观而松懈。
6养成好的作息习惯,找到自己适合工作的黄金时间。
7记性不好,就多记录、多总结、定期复习。哪怕实在记不住,也可以借助文档、收藏夹软件来当自己的第二大脑。
8积累属于自己的工具库,配合搜索软件实现随用随取。
9多和其他同行交流或订阅技术推送,拓宽知识渠道,从而了解更多的工具和方法。有些东西你只要听说过,要用时也许就能节省大量查找时间。
10找到让自己进入专注做事的状态的方法,比如戴上耳机、嚼口香糖等。
11做事高效,离不开经验的积累,因此要多写代码、多做项目