问题

如何通过自学找到一份开发的工作?

回答
想靠自己摸索着成为一名开发者,然后找到一份真正的工作?这绝对是个挑战,但并非不可能。我当年也是这么过来的,所以想跟你聊聊这条路怎么走。

首先,得明确一点:自学绝对不是一条“捷径”,更像是一场马拉松。 你要比那些在学校里系统学习的人投入更多的时间、精力和耐心。但好的一面是,你可以按照自己的节奏,学自己真正感兴趣的东西,并且更能理解知识的来龙去脉,因为你是自己主动去找答案的。

第一步:定位你的方向——你想做什么?

别上来就想着“我要当程序员”。这个词太宽泛了。开发的世界大着呢,你可以是:

前端开发: 负责网页界面的美观和交互。想想那些你用过的网站、App,里面的按钮点击会发生什么、文字怎么排版,都属于前端的范畴。
后端开发: 负责服务器、数据库、逻辑处理,是网站和App的“幕后英雄”。比如你登录一个账号,数据怎么保存,怎么验证,都归后端管。
移动端开发: 专门做手机App的。Android(Java/Kotlin)和iOS(Swift/ObjectiveC)是两大阵营。
全栈开发: 前端后端都懂一点,能够独立完成一个项目。这个听起来很酷,但初期需要掌握更多技能。
数据科学/机器学习: 如果你对数学、统计和算法感兴趣,想让机器学会“思考”,这条路就很适合你。

怎么选? 别纠结太久。刚开始可以先了解一下它们大概是做什么的。你可以搜集一些“前端开发日常”、“后端开发入门”、“App开发体验”之类的文章或视频,看看哪个的描述让你觉得“哇,这个好像挺有意思的!”。别怕试错,就算你学了一阵子发现不喜欢,再换也来得及。关键是开始行动。

第二步:打下坚实的基础——学什么?

一旦有了方向,就可以开始具体学习了。无论哪个方向,有一些基础是共通的:

编程语言:
前端: HTML, CSS, JavaScript 是必不可少的“三剑客”。你必须得把它们吃透。
后端: Python (简单易学,生态好), Java (企业级应用广泛), Go (性能好,并发强), Node.js (JavaScript 服务端运行环境) 等都是不错的选择。新手推荐从 Python 或 JavaScript (Node.js) 入手。
移动端: Android 官方是 Java 和 Kotlin;iOS 是 Swift。
数据科学: Python (配合 NumPy, Pandas, Scikitlearn, TensorFlow, PyTorch 等库) 是主流。

数据结构与算法: 这是程序员的“内功”。理解常见的数据结构(数组、链表、栈、队列、树、图等)和算法(排序、查找、递归等)能够让你写出更高效、更优雅的代码。别想着能绕过它,面试的时候肯定会考。

计算机网络: 了解 TCP/IP 模型、HTTP/HTTPS 协议等等,能帮你理解数据是如何在网络上传输的,为什么你的代码会发送请求,又是怎么收到响应的。

操作系统: 知道进程、线程、内存管理这些基本概念,对你理解程序运行的底层逻辑很有帮助。

数据库: 无论是前端(有时需要操作一些本地数据)还是后端(存储和管理数据),都离不开数据库。关系型数据库(如 MySQL, PostgreSQL)和非关系型数据库(如 MongoDB, Redis)都需要了解一下。

第三步:找学习资源——哪里学?

现在互联网上有太多免费或付费的学习资源了,关键是找到适合你的:

官方文档: 这是最权威、最准确的资料。别害怕文档写得枯燥,很多时候你卡住的地方,答案就在文档里。
在线课程平台:
免费类: Coursera (很多大学课程,有中文字幕), edX, freeCodeCamp (专注于前端,项目驱动), MDN Web Docs (前端必备), Codecademy (互动式学习)。
付费类: Udemy, Udacity, Pluralsight, B站上的很多优质课程。选择那种口碑好、更新及时的课程。
书籍: 经典的计算机书籍能让你学得更深入。比如《算法导论》、《计算机网络:自顶向下方法》等。
博客和技术社区: GitHub, Stack Overflow, Medium, CSDN, SegmentFault 等等,你可以看到别人的经验分享,解决问题,学习新知识。
YouTube/B站: 搜索你想要学的技术名称,会有大量的教程视频,很多国外技术大神也会分享干货。

重点: 不要陷入“学习资源收集癖”的陷阱,光看不练假把式。找到一两个好的入门资源,先跟着学起来。

第四步:动手实践——项目为王!

自学最大的挑战之一就是“学了不知道怎么用”。所以,从第一天起,就要把实践放在首位。

跟着教程写代码: 看视频、看文档的时候,一定要边看边敲。不要只复制粘贴,试着自己写一遍。
做小练习: 比如写一个计算器、一个简单的待办事项列表、一个猜数字游戏等。这些小练习能帮你巩固语法和逻辑。
复刻: 找到你喜欢的网站或App,尝试用你学到的技术去复刻它的某个功能或页面。这是一个非常好的学习方法,能让你逼着自己去解决实际问题。
参与开源项目: 一开始可能觉得难,但可以从一些小的贡献开始,比如修改文档错误、修复小 bug。这是了解真实项目运作方式、学习团队协作的最佳途径。GitHub 上有很多适合新手入门的开源项目。
个人项目: 这是展示你能力最直接的方式。围绕你自己的兴趣或解决一个你遇到的问题来构思一个项目。比如做一个记录学习进度的网站、一个分享食谱的App、一个自动化脚本等。

你的 GitHub 仓库就是你的作品集,务必维护好! 每次写完一个项目,都要写好 README 文件,说明项目的功能、技术栈、如何运行等。

第五步:简历和面试准备——敲门砖!

当你觉得有一定基础,能够独立完成一些项目后,就可以开始准备找工作了。

简历:
突出项目经验: 写清楚你做了什么项目,用了什么技术,遇到了什么挑战,怎么解决的。量化你的成果(如果可能)。
技术栈: 列出你熟练掌握的语言、框架、工具。
技能: 包括但不限于编程语言、框架、数据库、版本控制(Git)、操作系统、一些软技能(如学习能力、沟通能力)。
不要写虚假信息: 面试官很容易通过提问来验证。

面试:
准备常见的技术问题: 针对你申请的岗位,复习相关的技术知识点。比如前端会问 CSS 布局、事件循环;后端会问数据库索引、高并发处理;算法是通用考点。
模拟面试: 找朋友一起练习,或者利用一些在线的模拟面试平台。练习清晰地表达你的思路。
行为面试: 面试官会问你关于团队合作、解决冲突、项目中的挑战等问题,准备好你的“故事”。
研究公司和职位: 了解公司的业务、技术栈,以及职位具体需要什么能力,这会帮助你更有针对性地准备。

第六步:寻找机会——投递和坚持!

招聘平台: BOSS 直聘、拉勾网、前程无忧、猎聘等。
公司官网: 很多公司会在官网发布招聘信息。
内推: 如果有认识的朋友在行业里工作,争取内推机会。
不要怕被拒绝: 自学找工作是一个概率问题,前期的拒绝很正常。每一次面试都是一次学习和成长的机会。从拒绝中总结经验,不断改进。
小公司、初创公司: 很多时候,小公司对经验的要求可能不像大公司那么苛刻,更看重你的潜力、学习能力和解决问题的能力,是很好的起点。

一些额外的建议,让你更像个“过来人”:

保持好奇心和学习热情: 技术更新换代很快,你必须保持持续学习的态度。
学会搜索和解决问题: 遇到问题时,先尝试自己搜索,学习如何有效地使用搜索引擎、查阅文档、在社区提问。这本身就是一项重要的技能。
沟通能力同样重要: 即使是技术岗位,也要学会清晰地表达你的想法、跟同事协作。
加入开发者社群: 和其他开发者交流,可以让你获得很多灵感和帮助,也能让你不那么孤单。
劳逸结合: 自学很辛苦,注意身体健康,别把自己逼得太紧。适当的休息和娱乐是长期作战的保证。

最后,我想说,这条路一定会充满挑战,会有无数次想要放弃的瞬间。但请记住,每一个优秀的开发者,都是从“不会”开始的。你的坚持、你的好奇心,以及你解决一个个难题的成就感,最终会带你走向目标。祝你成功!

网友意见

user avatar

我是该问题的题主(由于在上一家公司的时候有许多同事混知乎自己又不喜欢匿名,所以当时临时注册了一个小号来提的这个问题),从6月份开始辞职到北京找工作,面了一共8家一二线互联网公司,并拿到了其中的7个offer,最终在百度和完美世界之间选了完美世界。

感谢

@萧井陌 @蓝色

在技术学习的相关问题上给我的建议和指点。

感谢

@萧井陌 @蓝色 @于鑫

在选择offer时给出的宝贵意见。

同时也非常感谢所有在该问题下给出建议的朋友们 : )

学习过程

  1. 比较仔细的学习了《c++primer》,并对每个习题都自己写代码实现了一遍,包括稍微复杂一点的例子。
  2. 认真读完了《effective c++》,《effective stl》。
  3. 比较仔细的学完了《数据结构与算法分析》,并把其中的每种数据结构和算法都用c++实现了一遍。包括各种线性表,树(二叉树、AVL树、RB树的各种操作),图(BFS、DFS、prim、kruskal、djkstra、floyd、拓扑排序、关键路径等)查找算法,排序算法。
  4. 2-3个月认真学完《csapp》并做完书上的课后习题(由于时间的关系,没有在做家庭作业),顺带学习了一些gcc的嵌入汇编的用法。
  5. 读完了《深度探索C++对象模型》,对象C++底层实现机制有了一定的了解。
  6. 读完了《TCP IP详解卷一》
  7. 读了《APUE》的大部分内容以及《UNP卷一》有关TCP/UDP的部分,略过了SCTP的部分。
  8. 研究学习 @陈硕的muduo网络库源码,受益良多,在期间发现过其中的一两个小问题,提了几个pull request,研究完了muduo源码后又看了其相关的书《Linux多线程服务端编程 (豆瓣)
  9. 学习了云风的skynet网络库的小部分源码,主要为了了解actor模式和reactor的异同。
  10. 学习了google test框架的部分源码,弄懂了内部的的运行原理。
  11. 刷《剑指offer》的所有习题。
  12. 刷leetcode,代码在liyuan989/leetcode · GitHub,由于时间的关系大约刷了130道就开始找工作了。

关于练手项目,写了简易STL,C++协程库,以及一些http server,rpc之类的。

关于找工作

由于基本都是同学朋友内推,不存在简历被HR筛掉了。

其实自己都惊讶在找工作的时候有些异常顺利,因为面试官问的问题很少有答不上来的。绝大多数问题个人感觉不难,大多都是问的一些比较基础、底层的东西,比如互斥锁底层是怎么实现的?如何用C语言实现C++的异常,说说基本思路这样的问题。然后就是根据简历上写的东西来问。

另外一个要说的就是纸上手写算法题了,手写代码和机器上写代码的感觉不一样,我个人是没事自己在纸上写写一些基本的算法来熟悉,比如快排、堆排序之类的。

然后面试要问的算法题一般都不难,多数都是翻转链表,判断链表是否有环,回文数,找出链表倒数第k个数这样的题目。

很少遇到问二叉树的问题,没有遇到过问图的相关问题。唯一碰到一个动态规划的问题,就是最典型的最长公共子序列问题,难点的就是百度第一面最后问了一个leetcode上hard难度的原题,总的来说刷一些题还是很有必要的。

============= 分割线 =============

看到有网友问我驱动力是什么?

引用一下

@萧井陌

萧大在问题

怎么成为一个优秀的程序员,而不是一个优秀的码农? - 互联网

中的回答:

好比,我们说,嫖娼是有巨大道德压力、金钱压力和风险的事情,为啥知乎上那么多嫖客乐此不疲并努力给自己洗脑合理化这件事呢?因为在他们的眼中嫖娼是最有趣的事情、是不吃饭不睡觉也不能不做的事情、是不做就活着没劲的事,有了这种死也要死在床上的精神,还怕什么呢?


这就是推动力

对于我来说驱动力就是兴趣和坚持吧,再一个就是有一种「做一件事就要把它做好的信念」。

讲一下我个人的两个经历。

在我中学的时候对篮球很有兴趣,但是刚开始的时候运球都运不稳,更别说上篮、突破、三威胁之类的高级动作了。然后我就在网上找到了张卫平老师的篮球教学系列视频,学基本的运球动作,投篮动作以及基本步法,在家里没事都会练练步法。每天晚上傍晚看不太清的时候都去练投篮找投篮感觉,然后看NBA学一两个实用的晃人、假动作技巧,再慢慢练习。最终在高中的时候进了当时的校篮球队,拿了当时市高中比赛的冠军。

另一个就是关于WOW了。高中毕业的时候被一帮从地球年代就开始玩的同学拉去玩WOW了,由于之前没有玩过类似WOW的网游,什么都不懂,完完全全的一个小白,一下副本就被队友、同学骂。然后呢,我就去NGA看各种攻略贴、精华帖、视频。仔细研究每一个技能的描述,冷却时间。慢慢的,下各种副本团队时候DPS都超过了我的同学,再到后来加入了服务器FD团队,拿过几个服务器首杀,单个BOSS的DPS排行也进过WOL全球前10。PVP方面也是的,开始在奥格门口是个人都能虐我,然后我每天观摩那些高手怎么放技能,怎么衔接,然后每天泡在奥格门口决斗练习,看NGA刀锋山的各种精华帖,看各种PVP视频,慢慢的在奥格门口几乎没有对手了,成为了所谓的门神。后来觉得决斗没意思,就开始玩竞技场,也是这样的一个学习过程,最后也打到了角斗士龙。

最后,我很喜欢

@刘未鹏

先生说过的一句话的:

兴趣遍地都是,专注和持之以恒才是真正稀缺的。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有