非零基础新手学编程的路径及注意事项

新手该如何通过自学入门编程呢?

非零基础这里指的是高中以上学习经历。经过一定深度的数学,物理或者其他辩证学科以及语文和英语的学习经历,实际上你已经具有了学习编程的基础,所以已经不是传统意义上的零基础了。

如果你听说过学编程就是学JAVA之类的话,并且信以为真,那么向自己借几分钟,认真阅读下面的讨论将产生足够的价值使你改变这个想法:


全文4235个字,阅读约需6分钟,
每超过1分钟将带来+2%收益
低于1分钟负收益,浪费了你的精力让我很难过


正逢一位趣味相同的的网友想转行学习编程,他可能纠结于到底是JAVA还是C,所以我们讨论了这个问题。

出于尊重对方隐私的考虑,隐去了知乎网友的回复。

开篇

学编程来点方法论,明确它未来是你的职业,得快速入门不能等热情被消耗完。有规划+对比不同教程,教程不只是具体哪门语言,比如你说的java,还要补点必不可缺的好东西。我爱人零基础,最近她自学前端-规划三个月成,实际上时间大部分用在基础知识或者通识知识上。所以推荐阅读:知乎问题,“如何通过自学找到一份开发工作”。另我在做软件安全工作,大言不惭的说接触的计算机技术比较广泛。所以有什么相关问题欢迎一起讨论交流。一直有关注你关于XXXXXXX的讨论,为你点赞(。ò ∀ ó。)

第一封讨论信

以下讨论目的是让我们不要成为技术上的瘸子,能在一大堆技术中找出应当首先学习的一批,以及未来的学习方向。

如何通过自学找到一份开发的工作?
https://www.zhihu.com/question/26421707

不知你看了这些详细自学记录感受如何,照着似乎可行又不可行,但是到底听谁的呢?

分类

自认为比较好的归类,计算机自学内容无非如下四类+一类:

一:编程语言:
你需要一种编程语言和计算机打交道,几乎可以任选:
它们可以互换,而且掌握一种,其他的都是小菜,如果只是掌握语法,在你熟悉一们语言,1周一门新语言并不困难。
所以JAVA还是C++(不推荐C),同时学两门反倒可能更快。

二:算法-数据结构相关:
算法是编程的灵魂。别人的程序为什么总比我们的快一万倍呢?
别人一台机器能搞定,我们得花N台还搞不定。比如C10K问题。

三:通用系统原理的:
操作系统、数据库。
这些是整个软件环境的基础,在本项的探索深度将影响其他的发展深度。

四:现有组件的底层原理的:
例如,了解Java语法之后“Java虚拟机”这个底层知识就是你的突破口。
了解C++语法后,虚函数表的原理通常是一个突破口。

五:套路们
设计模式在JAVA中广泛使用,就是前人开发软件被坑时避免下次被坑想出的东西。
因为需求经常乱变,以往程序员被动变,现在程序员主动将可能变和不变的东西分开。

分析

以上五路,
学院派,一,二,三共修。四,五得靠个人兴趣自学或者工作后被逼学会或者最终都一知半解。

自学派,容易掉到一里面去,学一门语言,但是由于算法-数据结构学习不了解应该投入,投入过少而感觉学习太浅。

如果投入在“三:通用系统原理”方面过少,就会感觉整个系统就是一个黑盒子难度高,缺少大视角.我想学院派嘲讽自学派的原因之一就是,自学派没有开上帝视角,底层知识-重要的东西没投入不清楚要投入强调努力,而学院派自己因为有已经论证过的全面的课程安排,所以省心的同时路不歪.

投入“四:现有组件的底层原理的:”这个嘛不用急,很多初级程序员并不知道TA需要在该方面投入,所以初学不必在纠结于此。
“五:套路们”:设计模式得搞。

知乎的自学经历归类

如何通过自学找到一份开发的工作?
https://www.zhihu.com/question/26421707
善于总结向来是件好事:

我爱人对“如何通过自学找到一份开发的工作?”里面回答者提到学习内容的归类:

公开课:
1. 哈佛大学公开课:计算机科学cs50;
2. 麻省理工公开课:计算机科学和 Python 编程导论;
3. 斯坦福大学公开课:编程范式;
4. 麻省理工学院公开课:算法导论;(1-4都可以在网易公开课找到)
5、结合The Hardware/Software Interface公开课阅读《深入理解计算机系统》(时间不够,没做习题)
CSAPP偏硬件角度,学习操作系统看的是《现代操作系统》;
6、慕课网上完成了“Linux运维工程师”系列课程学习;

书籍:
《计算机程序的构造和解释》
《深入理解计算机系统》
《现代操作系统》
《算法导论》
《C语言编程》
《C++Prime》
《笨方法学Python》
《Flask web开发》
《计算机网络自顶向下方法》
《TCP/IP 核心卷一》
《APUE》
《UNP卷一》
《SQL必知必会》
《高性能MySQL》
《深入理解Nginx》
《Thinking in java》
《深入理解Java虚拟机》
《Linux多线程服务端编程 》

计算机自学分类:
一、语言层面学习:
C 语言:《C语言编程》,《C++Prime》,《笨方法学Python》,《effective c++》,《effective stl》
Java:《Thinking in java》;

二、框架:
SSM框架:《深入理解Java虚拟机》;
PyCharm搭建网站:《Flask web开发》

三、系统知识:
Nginx 源码:《深入理解Nginx》
操作系统:《现代操作系统》、《深入理解计算机系统》
《csapp》

四、计算网络基础知识:
《计算机网络自顶向下方法》,《TCP/IP 核心卷一》,
《算法导论》、《数据结构与算法分析》
{数据结构和算法:包括各种线性表,树(二叉树、AVL树、RB树的各种操作),
图(BFS、DFS、prim、kruskal、djkstra、floyd、拓扑排序、关键路径等)
查找算法,排序算法。}

五、学习记录:
编写:学习使用 markdown 编写方式;
代码:用git管理自己的代码,学习github上的优秀源代码;
命令:熟悉Linux的常用操作与命令;

貌似她归类清晰,值得鼓励,但实际上归类混淆

我们刚才总结了一下我们的归类:
一:编程语言:
二:算法-数据结构相关:
三:通用系统原理的:
四:现有组件的底层原理的:
五:套路们

将上面内容对号入座:

一:编程语言:
《计算机程序的构造和解释》
《C语言编程》
《C++Prime》
《笨方法学Python》
《SQL必知必会》
《Thinking in java》
麻省理工公开课:计算机科学和 Python 编程导论;

二:算法-数据结构相关:
《算法导论》书籍
麻省理工学院公开课:算法导论;(1-4都可以在网易公开课找到)
哈佛大学公开课:计算机科学cs50;
《数据结构与算法分析》
{数据结构和算法:包括各种线性表,树(二叉树、AVL树、RB树的各种操作),
图(BFS、DFS、prim、kruskal、djkstra、floyd、拓扑排序、关键路径等)
查找算法,排序算法。}
……

三:通用系统原理的:
《深入理解计算机系统》
《现代操作系统》
《Linux多线程服务端编程 》
《TCP/IP 核心卷一》
结合The Hardware/Software Interface公开课阅读《深入理解计算机系统》:完成它的习题;
CSAPP偏硬件角度,学习操作系统看的是《现代操作系统》;
《高性能MySQL》//数据库属于系统原理
《计算机网络自顶向下方法》
……

四:现有组件的底层原理的:
《计算机网络自顶向下方法》
《深入理解Java虚拟机》
……

五:套路们
《大话设计模式》有趣的书,里面用JAVA写的例子.反对推荐艰深到让人丢书的东西给新手.
……

自学最迷茫的就是不知道要看什么教材。 本来我是想从C开始的,但公司里说,刚好有个JAVA项目,结果我就开始学JAVA了。网上找到一套视频,现在才看了一半多一点。不知道看完这个后,还需要再看什么了。 

现在答案已经很明显了,C还是JAVA开始并不重要,因为从编程角度看它们地位接近平等的,但你要掌握一门语言的语法。

明确自己无论是学任何语言都要恶补的东西:

二:算法-数据结构相关:
三:通用系统原理的:
四:现有组件的底层原理的:

这是所有合格程序员的必经之路.几百万人已经试过这条路.

高中之路,大学之路绝对会给我们学习新的知识带来更广的视野和助益.

你有提到,你的同学初中辍学,我看到可不是他很幸运,很遗憾他在计算机学习路上必定会比我们付出更多的代价.我也差点初中去读技校学计算机,但是由于我当时自学C#语言看不懂“数组”是什么意思,所以我去了高中。所以我们作为较高学历者只要转行优势非常大,只是你之前没有选择这行而已,但如果你灵活运用这些知识,包括你现在的职业的技能,这些技能都不会是白费的,一个精通会计的编程,总会在人生一些节点起到作用。赶超之日不会远的,除了赶超前人和改善生活(新手没见过低于5k的行情),我认为编程还能带来自由,这个或许将来会体验更深。

现在了解更多的编程自学的方向了吧?那么该好好考虑一下怎么分配时间啦:)
如果有其他疑问,欢迎讨论。

第二封讨论信

强调两个点,

  1. 不要慢,要快.
  2. 不要坚持学编程

初期要制定计划严格执行,如果学编程真的对你来说很重要的话.

你可以想想未来几十年你可能靠它提供主要收入,靠它完成一些别的梦想.比如之前缺钱完不成的梦想.
制作任意软件的梦想.
自己制作软件被成千上万人使用,并且做出更多贡献而得到应有报酬的梦想.
……
所以这不是一件痛苦的事,不需要坚持!(唯一的一个感叹号)
这么一件有趣的事,达成你人生梦想的事,不需要坚持,自然有动力,自然是越快越好,
换我的话,谁拦我学习我跟谁急.所以学编程这件事在头脑要主动.

给自己一个规划并尽快执行.

补充几种我个人在用的学习编程的小方法:

  1. 记笔记,尝试写博客记录学习成长过程.以及每日学习进度安排,及昨天完成程度.
    方便圈子交流,成长回视.自我督促.
  2. 小技巧-虽然都听过,但每次都用起来效果必然不同:

    • 跳出学习者思维,从设计者角度去看:为什么要设计垃圾回收机制?如果学习更深,可以尝试提出“如果我来设计垃圾回收怎么设计?”
    • 多问为什么,例:JAVA申请,需要我们释放吗?难道不会出问题吗?它是怎么避免的?
    • 举一反三,还是那个例子:JAVA的内存管理方式是XXXXX,那么还有哪些内存管理方式?
      一下子就进入:“现有组件的底层原理”,“通用系统原理”的内容。这样知识点就连起来了。
  3. 找到这个圈子的聚集地-享受氛围
    或者是QQ群或者是该技术的网站,那里有老手有新手,可以把自己的知识教给比自己新的新手,也可以向老手请教问题。和一群与自己一样成长进步的人交流会很爽的。享受氛围有时也蛮重要的。
    也会给自己带来更广的视野和工作学习机会。

祝快乐编程!

<think>好的,我现在需要帮用户解决“新手编程学习思路”的问题。首先,我得想想用户可能的需求是什么。用户是编程新手,所以需要从最基础的开始,逐步引导他们。可能需要先确定学习目标,然后选择合适的语言,接着是基础语法,再到项目实践,最后是持续提升。 用户可能没有明确的方向,不知道该从哪里下手。所以第一步应该建议他们明确目标,比如开发网站、做数据分析或者游戏开发。不同的目标对应不同的语言选择,比如Python适合数据分析,JavaScript适合网页开发。这点很重要,因为选择适合的语言能增加学习的动力。 接下来是学习编程基础。变量、数据类型、控制结构这些是必须的,但新手可能会觉得枯燥。需要强调循序渐进,避免一开始就接触复杂的概念,比如面向对象或者设计模式。同时,要提醒他们注意代码规范,比如命名规范和注释,这对以后协作和可读性很重要。 然后是项目实践。新手可能不知道如何将所应用到实际中,应该鼓励他们从小项目开始,比如计算器或待办事项列表,这样可以巩固知识。同时,参与开源项目或团队协作也是提升的好方法,但可能需要一定的引导。 遇到问题怎么办?调试和解决问题是关键能力。要教会他们使用搜索引擎、官方文档和社区资源,比如Stack Overflow。调试工具的使用也是需要练习的,比如断点和日志输出。 持续学习方面,推荐书籍和在线课程,但要选择适合新手的资源。参与技术社区可以保持学习热情,了解行业动态。算法和数据结构是进阶的基础,但可能需要一定的编程基础后再深入。 最后,要提醒避免常见的误区,比如不要追求完美代码,不要死记硬背,也不要过早接触复杂领域。保持耐心和坚持是关键。 现在要确保结构清晰,分点说明,使用用户易懂的语言。同时,按照系统指令,数公式用$...$,独立公式用$$...$$,不过这个问题可能涉及数较少,但如果有例子的话需要注意格式。比如在讲解算法复杂度时可能会提到$O(n)$,这时要用正确的格式。 检查是否有LaTeX语法错误,确保中文回答,不使用Markdown格式。最后,总结整个思路,让用户有一个明确的路径,从目标到实践,再到提升,逐步成长。</think>编程新手学习可遵循以下分阶思路(附知识地图): 一、明确学习目标(先导阶段) $$学习方向 = \begin{cases} Web开发 \rightarrow JavaScript/Python \\ 移动开发 \rightarrow Kotlin/Swift \\ 数据分析 \rightarrow Python/R \\ 游戏开发 \rightarrow C#/C++ \\ 系统编程 \rightarrow Go/Rust \end{cases}$$ 建议优先选择Python或JavaScript作为入门语言,因其语法简洁且应用场景广泛 二、掌握编程基础(筑基阶段) 1. 核心语法三要素: - 变量与数据类型:理解$变量 = 存储容器 + 类型标识$ - 控制结构:掌握条件语句(if-else)、循环语句(for/while) - 函数机制:理解$输出 = f(输入)$的映射关系 2. 代码规范训练: - 命名规范:userCount优于a - 注释规范:关键逻辑需添加说明 - 缩进规则:严格遵循语言约定 三、项目实践驱动(实战阶段) 推荐实践路线: ``` 命令行工具 → 简单网页 → 数据库应用 → API开发 → 完整项目 ``` 典型入门项目: - 温度单位转换器(变量运用) - 质数判断程序(循环逻辑) - 待办事项管理系统(CRUD操作) 四、调试与问题解决(关键能力) 1. 错误处理三部曲: 1. 阅读错误信息:定位报错位置 2. 最小化复现:构造简单测试用例 3. 分层验证:使用print/debugger逐层排查 2. 资源利用策略: - 官方文档 > 技术博客 > 视频教程 - Stack Overflow搜索技巧:使用[标签]+关键词 五、持续提升路径(进阶阶段) 1. 计算机科基础: - 算法复杂度分析(理解$O(n)$等表示法) - 数据结构:掌握链表、栈、队列的实现 $$二叉树深度 = \max(左子树深度, 右子树深度) + 1$$ 2. 工程化能力培养: - 版本控制(Git基础) - 单元测试编写 - 持续集成概念 六、避坑指南 1. 避免过早深入: - 设计模式 - 框架源码 - 系统架构 2. 克服典型障碍: - "教程地狱":看3小时教程不如写30分钟代码 - "完美主义":先实现再优化 - "知识焦虑":建立个人知识图谱 建议每周保持10小时有效学习,3个月后可完成从0到1的跨越。关键路径基础语法(2周)→小程序开发(4周)→完整项目(6周)→迭代优化(持续)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值