假如时光倒流,我要这样学编程

>点击上方“编程大叔”关注<

看看你有多少好友也关注了我

Photo From Internet

相信每个初入计算机编程大门的小白都会有很多问题?例如我应该学习哪门编程语言?学习了这门编程语言我能进入 BAT 大厂吗?除了编程语言我还要学习什么?

网上有很多文章讲述初学者应该如何去学习,内容五花八门,错综复杂。文章翻了又翻,初入编程大门的小朋友们最终还是无法下定决心,反而看了以后开始变得更加迷茫,怀疑自己的智商。

在这里我想要说的是,我和你一样曾经也迷茫过,不是因为你太笨,而是因为互联网上的知识太多了,作为初学者的你根本不知道如何抉择。

我和你一样,曾经迷茫过,但庆幸的是我最后找到了答案,打开了计算机编程的大门。

如今作为一个编程近十载的老码农,我想就此将我的经验分享与你。此文仅代表的我的个人观点,欢迎一起讨论学习。

我将编程生涯分为了三个阶段,并且我会告诉你这三个阶段你分别要掌握什么样的技能,以及这三个阶段你可以做什么样的事情。

三个阶段

站在食物链顶端的程序员必然会经历过三个阶段。

悲催的是有些人整个职业生涯都处于第一阶段,而还有一部分停留在了第二阶段,只有少量的人才能进入第三阶段。

这三个阶段分别是:码农(代码民工)、程序员 和 架构师。

接下来我们一起详细聊聊这三个阶段:

第一阶段:码农

每个程序员都会从码农做起。

还记得大学上第一节 C 语言课程的时候老师问谁有编程经验,教室里面有十来个同学举起手来,然而那时候我不知道编程是什么。没错,很多人还没进入大学就达到了码农阶段。

码农到底是什么,如何定义码农?

码农知道如何跟机器交流,他可以编写计算机能读得懂的文字。

当遇到一些问题时候,码农可以将问题转换为计算机可以读懂的代码,让计算机帮助我们干活(不管三七二十一,先 run 起来再说)。

如何你在这个阶段感觉到非常痛苦和难受,那么你应该认真思考一下是不是适合程序员这个职业。

如果 feel so good,那么恭喜你,你有可能会成为一个不错的程序员。

然而可悲的是,很多人在整个职业生涯中都处于码农这一阶段。

但是我要告诉你的是,这一阶段的你虽然能干活,但是很容易被年轻人替代,因为随着你年纪的增长,年轻人会比你更有活力,而且他们可以忍受拿更少的钱,搬更多的砖头。

如果你只是个码农,你的晋升机会也会很少,同时意味着你的薪水也会较少。

如果你想加入 BAT 级别的大公司,这个阶段的你会处处碰壁,面试一次被打击一次,你会面到开始怀疑人生,自暴自弃。

因此你需要掌握更多的技能,然后达到第二个阶段,成为一名程序员

第二阶段:程序员

在这个阶段,你可能接触了至少 2 门编程语言,一个动态类型语言和一个静态类型语言。

程序员本质上是一个高级的码农,那么我们该如何进一步提升自己呢?

码农编写可以正常 run 起来的代码,俗称搬砖。而程序员呢,是编写高质量高性能的可以 run 的代码,俗称高级搬砖(哈哈哈)。

那想成为程序员你需要掌握哪些技能呢:

  • 了解代码最终如何变成硬件芯片可以理解和执行的指令。

  • 了解如何让代码有效利用计算机资源,例如 处理器、内存和网络。

  • 了解如何使用数据结构和算法编写高效的代码。

  • 了解代码质量很重要,并且会编写测试代码。

到此你是不是被吓到了,成为程序员居然还有这么多知识要学习,安安静静地做一个码农不香吗。

我要告诉你的是,码农很多,但是真正基础扎实的程序员并不多。如果你能静下心来修炼内功,达到这一阶段,BAT 的大门将随时为你敞开,你会收获更多的东西。

绝大多数人一辈子都会停留在这个阶段,直到退休。

第三阶段:架构师

很悲催的告诉你,编程永无止尽,你需要不断的去学习去进步。

当你到达这个阶段时候,你会站在一个更高的角度,对系统的全局的思考比对细节的细腻了解更多。

你对设计大型分布式系统有扎实的了解,并且知道如何构建高可用,高并发,高可伸缩的大型分布式系统。

你永远不会停止学习,并且始终关注前沿的技术,当然你可能也会创造出一些技术。

在这个级别上,你可能会负责公司的大型项目,并且管理着一个团队,团队里面有几个骨干程序员和多个码农来完成工作。

你可能会经常和其他团队开会讨论和制定技术方案,同时你需要有出色的社交和领导才能。

如上就是我认为的程序员职业发展的三个重要阶段,那么接下来我们一起聊聊在这三个阶段我们该如何去学习,逐步打怪升级走向程序人生的巅峰。

1 - 编程

首先考虑如何成为一个码农,在这个阶段你往往会有这样的困惑,我到底该学哪门编程语言?

Java,Python,C#,Ruby,Go,JavaScript 。。。

其实你不应该为选择编程语言发愁,因为这个阶段,重要的不是特定的编程语言,而是一些编程的概念。这些概念在几乎所有其他编程语言中都适用。

当你成为经验丰富的程序员时,学习一种新的编程语言所需的时间不超过一个星期,所以不要浪费时间去纠结 “完美的” 编程语言,因为根本不存在,也没有必要。

话虽如此,我还是会推荐 2 门编程语言给你,从最简单的开始慢慢建立自信心,打怪升级从编程中获得乐趣。

Python

我强烈建议你从 Python 开始学习。

为什么?

因为 Python 是一门非常易于学习的语言,它真的,真的,真的很容易!

Python 是一门高级的编程语言,使用它可以非常快速的开发出一个程序,正如 Python 之父的名言:人生苦短,我用 Python。

夸张一点说,100 行 Java 代码完成的事情,Python 只要一行就搞定了。

那么如何学习 Python 呢?

在此推荐一下廖雪峰大神的在线图文 Python教程,这是比较全面的一套教程。

如果要继续简单点,你还可以在这个在线学习网站开始学习:Python 基础教程。

当然最好还是要搭配一本书一起学习,我推荐一下《Python 编程从入门到实战》,喜欢读纸制书的同学,它可以是你的一个选择。

Java

学完 Python 之后,我强烈建议你学习另外一门语言 Java。学习 Java 将会把你带入面向对象的世界,这是和面向过程完全不同的编程思想。

Python是一种动态类型的语言,而 Java 是一种静态类型的语言,此时你可能一脸懵逼,当你学完这两种语言之后你会茅塞顿开。

Python 和 Java的组合是很好的入门方法,学习他俩你会掌握到几乎所有的编程概念,为以后学习其他编程语言打下扎实的基础。

我要告诉你的是,Python 和 Java 目前在企业里被大量使用,同时 Python 是机器学习首选语言,Java 是大数据生态的核心语言,学习他们也会更利于你找到一份好的工作。

对于 Java 的学习,初期我建议你主要学习 Java Core 知识,等到熟悉以后再去学习高阶知识。此时,我不再会推荐你去在线网站学习,因为你已经拥有了编程基础,同时有了很强的动手能力,我会推荐你从书籍入手。

学习 Java 当然少不了经典的 Java 编程思想,我推荐 Bruce Eckel 大师的最新 Java 巨作《 On Java 8 》,这是内容相当充实的一本书,学完它你将掌握 Java 编程的核心技能,同时关于 Java 语言的面试题对你来说将会是小菜一碟,不信你读读看?

如果此时你仍然不满足,我会推荐你去学习一下 Java 之父 James Gosling 鼎力推荐的 《 Effective Java 》,它将教会你如何写出高效的 Java 代码,学完此书你的 Java 技能将会更上一层楼,此时你已经甩掉一大部分 Java 码农。

此处我要恭喜你!你已经获得码农资格证!

2 - 计算机的构造

此时你已经可以写出大量的代码,但是你真的明白计算机底层究竟发生了什么吗?

假设你编写了一个非常简单的程序,打印 Hello World 到屏幕上。

例如用 Python 来编写:

hello = 'Hello World'
print(hello)

在硬件级别,变量分配(hello = 'Hello World')是什么意思?字符串 'Hello World' 在硬件中如何表示?结果如何显示在你的屏幕上?

归根结底,计算机只是硬件芯片和电线的集合。

计算机到底是怎么理解我们的代码,并且完美的执行呢?小朋友你是否有很多问号?

事实是,代码只是最表面的东西。代码下还有许多其他层,它们一起互相协同工作,最终执行了我们输入的代码指令。

相信此时你已经迫不及待的去解决头上的众多问题,不要着急,我推荐一本书给你。

这本书从最基础的角度介绍了硬件,编译器,链接器和操作系统,非常适合初学者。

它将告诉你,如何创建一种编程语言,如何创建编译器和链接器,最后创建操作系统。

3 - 算法和数据结构

现在你处于高度兴奋状,此时你的编程思维发生了转变。

因为现在,你知道代码之下计算机是怎么运行的,硬件是如何工作的。

你知道硬件资源是有限的,并且了解如何高效利用有限的资源。

但是还不够,我们要学习算法和数据结构。数据结构和算法是进入 BAT 大厂的必考项目,当然我们学习数据结构和算法也不仅仅是为了进入大厂,归根结底还是为了写出高效的代码,具体可以参考我之前的文章:面试了一个月,到底要不要刷算法?我有了答案。

在算法和数据结构方面,如果你已经掌握了 Java 编程,那么我推荐你从下面这本书入门:

好吧,书确实挺厚的,但是书中的内容绝对值得你去花时间学习,学完此书,你将扎实的掌握数据结构和算法。

如果你不喜欢选择这本以 Java 描述的算法书,如下这本也是一个不错的选择:

4 - 网络

到目前为止,我们还没有谈到网络,生活在互联网时代,我们的程序不可能仅仅单机运行,因此作为一名合格的程序员掌握网络是必不可少的。

基础知识是枯燥的,寻找一本有趣的书是非常有必要的。

如上《计算机网络:自顶向下的方法》是一本超级容易理解的书,它涵盖了你需要知道的所有的网络基础知识,同时也是一本你可以用来垫桌角,适当时间查询的资料书。

学完此书,相信你会回来感谢我的推荐。

5 - 操作系统

如果你按照我推荐的学习顺序,此时知道了计算机的组成原理,网络,算法数据结构,那么是时候开始学习操作系统了。

操作系统基本采用 C 语言编写,所以你需要一些 C 语言的基本知识。

操作系统是非常繁杂庞大的知识体系,了解它的各个方面的所有细节非常耗时。我不建议你陷入细节,除非你想成为一名操作系统研发人员。

在这里,你只需要掌握基本操作系统概念,然后继续前进,不要被繁杂的细节揪住。

学习操作系统你可以参考如下这本书:

恭喜你!此时你已经是一名合格的程序员了!

6 - 分布式系统

分布式系统是关于构建和设计可伸缩的软件系统,避免单点故障。这要求我们站在更高的层次考虑问题,而不是专注于如何编写一个模块组件(程序员和码农)。

举个例子,例如你想要和你的好朋友通过软件进行聊天通讯,你租用了一台服务器,上面运行了聊天服务端,你和朋友的电脑上都运行了聊天客户端,此时你们可以开始愉快的聊天了。

相信通过前面的学习过程,这对你来说简直易如反掌。

但是当你的朋友的朋友知道了这个工具,也想加入进来,朋友的朋友的朋友也知道了,你的客户满满的变得巨多无比。

现在,你的服务每秒可以收到数百万个聊天客户端的请求。

假如此时你的聊天服务器出现故障怎么办?

数百万的请求将无法得到满足,此时应该开始考虑分布式系统设计问题了。

分布式系统是在单台机器无法满足我们的请求时候,将多台机器通过软件连接在一起,共同对外提供服务。

当请求量增加时,我们可以灵活的添加服务节点。同时如果某个节点故障后,整个系统仍然可以对外提供服务。

此处,我推荐《分布式系统概念与设计》,它可以帮助你掌握分布式系统设计的基本原理。

7 - 机器学习

机器学习是一个横跨计算机科学,数学和统计学的领域,它是个硬骨头。

但是在当今时代,它被无处不在的使用!

例如每天刷抖音的小朋友应该深有体会,刷抖音一时爽,一直刷一直爽,都是机器学习搞的鬼,拼命的推荐你喜欢的东西。

即使你不从事相关的工作,我也建议那你学习了解一下它。

为什么?万一机器哪天会自己写代码了怎么办(哈哈哈)。

但是想要做这样的事情,我们还需要有数学和统计学基础,以及一些机器学习类库,例如,Python 的 Scikit-Learn。

机器学习主要有 2 种方法,一种方法和我们学习计算机基础知识类似,上来就是干,先学习类库撸代码,然后再补充理论知识(个人更喜欢这种);另外一种方式是先学习理论,数学、统计学和机器学习算法,这种方法在前期比较枯燥,初学者容易受挫。

当年学习 Java 我就采用了第一种方法,先直接撸代码,做项目,然后再巩固理论知识。这种方法容易形成正反馈,写代码一时爽,一直写代码一直爽。

一定有很多人采用这种方式,是的小朋友请举手。

但这种方法的缺点是,有时候比较难理解为什么这样做,这样做就没 Bug 了,因为我们缺少了理论知识。

相信你一定听说过大名鼎鼎的 Andrew Ng,他在 Coursera 发布的课程可以作为你的机器学习入门课程,这门课程里面没有采用 Python,采用了另外一门语言,具体原因相信你看到就懂了,Andrew 老师会细细的告诉你,哈哈。

如果你确确实实照我说的学习了上面的机器学习课程,那想必你应该已经知道了 Kaggle,去吧体验用技术赚钱的快感,嘿嘿。

恭喜你成神了!现在我认为你是一名架构师了!

感谢你的阅读,我为你准备了一份《高级 Java 面试指南》,点击在看,关注公众号,回复 "礼物" 获取。

推荐阅读

从 Google 算法大神那 "偷学" 的复杂度分析法,真香!

如何在面试中回答「你最大的缺点是什么」?

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值