写点什么

学习一门新编程语言的 6 步

  • 2019-09-27
  • 本文字数:3109 字

    阅读完需:约 10 分钟

学习一门新编程语言的6步

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

有些人学习编程刚开始头脑发热,买了很多书,下载很多视频,收藏上百 G 的资料,没过几天,热情就褪去了,最后完成了从入门到放弃的全过程,究其原因主要是缺乏清晰的目标,没有方向,或者方向不明确。那么,我们应该要怎么学习才能掌握新的编程语言呢?让我们来看看 Jun Wu 是怎么做的。



学习一门新编程语言是一个让你能学到重要人生经验的过程。


我们要求程序员学习很多东西。随着大数据、人工智能、机器学习和云计算的普及,开发人员正努力克服系统开发中的大量挑战。我们所有的开发人员都不再仅仅是程序员了。藉由新的体系结构,我们可以熟练地学习我们系统的新基础设施设计。通过新的人工智能机器学习算法,我们在学习数学、统计学和函数式编程方面很熟练。有了大数据,我们就能擅长学习所有可用于分析数据的不同 API。


在某种程度上,我们作为开发人员的工作,正日益趋向多学科化。在这个蓬勃发展的多学科世界里,我们面临的最大挑战就是学习。


快速学习编程语言和深入了解不同学科是一项挑战。但这是一个非常有趣的过程。对我来说,正是学习,让我一次又一次地回到编程上来。


通过不断学习,你可以通过以下几种方式为你的生活增添光彩:


  • 拜见该领域的新专家

  • 在思考你的项目时,引入新的创造力

  • 拓展你的职业前景

  • 当你对目前工作变得自满时,克服无聊

  • 在技术领域中保持领先地位

  • 发现生活中的新激情


在我上一篇文章《如何快速学习一门新的编程语言》(How To Learn a New Programming Language Fast)中,我曾介绍了一个秘诀,如何能够以快速和敏捷的方式掌握许多编程语言。


在本文中,我将对学习过程进行拆分,这样你就可以对学习新的语言和概念有一个大致了解。有时候,学习一门新语言需要十年时间,就像徒步攀登高山一样。当你认为自己是 Python 大师的时候,你就会发现,你可以做更多其他种类的项目,这些项目将提高你对 Python 在特定目的上的使用水平,这些都是你以前从未想过的。


最终,一切都在掌控中。


一旦你成为专家,你就可以像体操运动员那样敏捷地编程,你的手指将会引路,而你的大脑是一个富有效率、充满创造性的司机。


你得到的回报并不是工作保障,而是生活上的安全感。


这是一种安全感,知道自己可以学到任何复杂的东西,可以克服解决问题的任何障碍。


在心理学中,知识的内化也包括行为的内化。通过知识的内化,你就创造了新的思维路径,这将得到以下结果:


  1. 将知识从短期记忆转移到长期记忆。

  2. 创建能够吸收新知识的知识路径。

  3. 能够创建新的知识获取、知识保留和知识创建的行为。

一、先从关键要素和概念开始

最初,当你学习一门新的编程语言时,你想将学习重点放在那门编程语言的关键要素和概念上。列出一份这门编程语言的“核心”学习清单,然后一步一步地进行学习,这才是正确的方法。


知所知,知弗知


如果你想学习 Python,可以请 Python 专家或老师为你画一张“核心”学习的清单。你还可以通过学习一门课程来逐步了解 Python 编程的基础。搜索该编程语言的面试问题清单。

二、进行发散,提出足够多的问题,找出正确答案

当你在学习编程语言中的“核心”概念时,你是否经常列出要提问的问题清单?我经常发现自己离题十万八千里。也就是说,我倾向于沿着我的思路,打破砂锅问到底。


所以我从关于 Python 的概念 A 开始,然后在 Google 上搜索一大堆关于 Python 中面向对象编程的内容,这就发现了一个以后可能要做的项目。


通过这一过程,我将语法约定、面向对象的编程概念和一系列常用的数据结构加入了书签。要问的正确问题可能就隐藏在我刚刚加入书签的其中一个网页中。通过浏览这些网站,我就将能够编制出一份关键问题的清单。


你要学会提出正确的问题来掌握核心技能。

三、养成每天学习的习惯

在我的职业生涯中,从学习许多编程语言中得到的一些最好的收获就是,我在生活中养成提高效率的习惯。我每天至少要花两个小时学习,这一习惯贯穿了我的职业生涯中。


每天两个小时看似不多,但一年下来,并坚持 15 年呢?那将是一个可观的数字:2x365x15=10950 小时!工作之余,就像健身训练一样,我还有一个长达 10950 小时的健脑训练,已持续 15 年,让我能够 得以学习到新的东西。


大部分时间,我只是在早上 5 点起床而不是早上 7 点,或者晚上 11 点而不是 9 点睡觉,这样我就有更多的时间用来学习。


你终将知晓,学习是有趣的,学习是在你自己的时间,学习是一种激情。

四、雪球效应

当你克服学习复杂概念和项目的复杂障碍后,你的信心就会像滚雪球那样越滚越大。我在工作中也目睹过。这并不完全是“流”的状态。它更像是一种激励你的能量,让你整个人都充满活力。这与喝咖啡、果汁或过健康的生活方式一样。汝欲乘长风,破万里浪兮。


这种激励能量转化为想要学习所有关于基础设施、设计和存储的知识之动力。这种动力转化为想要尝试不同的方式进行编程:命令性、事件驱动、流程驱动等。


这种激励能量转化为提出一些问题,比如“为什么我们要这样设计系统的这一部分?为什么我们要在这个项目使用这种编程语言?为什么我们要选择这种基础设施技术来扩展项目?为什么我们要用这种方式来对项目的这部分进行编码?为什么我们要这样设计错误处理?为什么我们要这样设计消息处理?”


问这些问题会让你找到解决问题的方法。在项目上工作,会让你不断学习如何正确回答“为什么……”这一系列问题,可以让你更快地变得精通起来。


你要有动力去问为什么,这样你才能找出答案。

五、养成反复实践的习惯,敢于冒险,勇于创新

你是自己编程生涯的主人。每个人对风险的接受程度并不一样。是编程,让我学会了在职业生涯中承担一定的风险。是编程,让我对自己解决问题的能力有了信心。是编程,让我学会了要对自己的创造力充满信心。


这一切都是因为我反复练习编程语言,而这些语言是我最熟悉的编程语言。反复练习未必枯燥乏味。事实上,要想真正精通一门编程语言,参加能让你学习编程语言不同部分的项目是必不可少的。


只有学会了不同解决问题的方法,你才能学会在解决问题的过程中发挥创造性。只有在考虑编写代码的最佳方式时,你才能提高代码的效率。只有通过反复的练习,你才能对代码片段产生“啊哈”的感觉,让你编写出最有效的代码。


通过学习来提高效率和创造性,你学会了精通。

六、依靠你所知道的来实现跨越

最后,当你已经学会并练习了你所熟悉的编程语言时,你现在就可以在职业生涯中实现跨越了。这通常就是当你从初级开发人员晋升到高级开发人员的时候。


你将凭藉掌握“原因和做法”的知识在面试中取得了优秀的成绩,进入你的编程生涯的下一阶段。你可以用自己所熟悉的语言以一定的灵活性来编写代码。


你不再长时间进行工作了。你终于有时间和你朋友出游。你完成你的工作然后去休假。你开始指导初级程序员,你在工作中示范并使用最佳实践。你在架构会议上踊跃发言,并发表自己的观点。你在团队中是出了名的专家。


恭喜你!你已经将你所学的编程语言内化成了长期记忆。现在,它就像你的母语一样。


现在,你已经知道学习任何一门新的编程语言的过程了。你知道,在学习之旅中不能半途而废。花在编程上的每两个小时,就是你离开所爱的人的两个小时。因此,要让这两个小时变得有意义。让每一个两小时,每天成倍增长,直到你学会并内化了这些概念。


一旦你在完成足够多的项目之后变得精通了,你要知道,这远非结束。这是一个新的开始。从零开始,再次学习并内化新的编程语言和新的编程概念。一旦你在整个编程栈中增加了新的知识广度和深度,学习就会自然而然地流动起来,成为你生活的一部分。


你还在等什么呢?


作者介绍:


Jun Wu,是单亲妈妈,也是作家、技术专家和诗人。爱好广泛,涵盖了技术、人工智能、数据科学、领导力、心理学、育儿、教育、生活、工作和诗歌等等。


原文链接:


6 Stages of Learning a New Programming Language


2019-09-27 18:047343
用户头像

发布了 530 篇内容, 共 251.4 次阅读, 收获喜欢 1552 次。

关注

评论 5 条评论

发布
用户头像
很多错的文章,对于想从事技术的技术人指明了方向,谢谢作者的方向。
2019-09-29 16:56
回复
用户头像
对于新手来说,如何去学习一门新的语言,也不是一件容易的事。这篇文章很有启发性。
2019-09-28 02:01
回复
用户头像
说得特别好呢,也适用于国内程序员掌握新语言的思路。这是不分国界的。
2019-09-27 22:01
回复
用户头像
第三段,markdown语法**没打出来,变成斜体
第四段,功能性应该是函数式,程序性应该是面向过程的
2019-09-27 18:49
回复
谢谢指正,已修改
2019-09-28 15:58
回复
没有更多了
发现更多内容

Go- 变量

HelloBug

变量 Go 语言

破解AI开课难题!2021 全国人工智能师资培训落地厦门大学

百度大脑

人工智能

蔚来事故背后,“致命弯道”在辅助驾驶和自动驾驶之间

脑极体

JavaScript单元测试的“抹茶”组合:Mocha和Chai

devpoint

JavaScript 单元测试 8月日更

高可用架构(下)

编号94530

数据库 架构设计 异地多活容灾 高可用架构

架构1期模块五作业

五只羊

架构实战营

网络攻防学习笔记 Day108

穿过生命散发芬芳

网络安全 8月日更

如何实现分布式锁,聊聊你的想法?

卢卡多多

redis 分布式锁 8月日更

OceanBase源码解读(二):SQL的一生

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

云原生时代到来了么?

escray

学习 极客时间 如何落地业务建模 8月日更

简简单单实现 Python Web 的登录注册页面,还包含一半逻辑。

梦想橡皮擦

8月日更

Flink 和流式应用运维(十-上)

数据与智能

flink API REST API

🏆【分布式技术专题】【分布式技术专题】RocketMQ延迟消息实现原理和源码分析

洛神灬殇

RocketMQ 延时队列 8月日更 DelayedQueue

还在死磕 Ajax?那可就 out 了!

编程三昧

JavaScript 大前端 8月日更 Fetch

【架构设计模块五】:设计微博系统中”微博评论“的高性能高可用计算架构

Ryoma

Go- 常量

HelloBug

常量 const Go 语言

前端之算法(七)动态规划

Augus

算法 8月日更

Ansible 管理 Windows 机器配置过程。

耳东@Erdong

windows ansible 8月日更

敏捷实践 | 分不清Kanban和看板的只剩你了……

LigaAI

Scrum Kanban 敏捷开发 看板

java springboot微信小程序授权登录开发

清风

小程序 java小程序

Magician has released a new version

Magician网络编程包

Java Web 网络编程 io nio

耗时24小时整理了网络安全学习路线,非常详细!

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

Obsidian一个不错的软件

IT蜗壳-Tango

8月日更

CODING DevOps 高级架构师王炜入选木兰开源社区首批导师

CODING DevOps

DevOps Nocalhost 木兰开源社区 开发者生态

Go-基本元素

HelloBug

Go 语言

从0开始的TypeScriptの十:泛型

空城机

typescript 大前端 8月日更

敏捷开发

LeifChen

Scrum 敏捷开发 迭代 8月日更

Linux之ab命令

入门小站

Linux

模块五作业

老实人Honey

架构训练营

分片上传Minio存储服务的问题集锦[推荐收藏]

liuzhen007

8月日更

在线文字图标logo文章封面图生成工具

入门小站

工具

学习一门新编程语言的6步_文化 & 方法_Jun Wu_InfoQ精选文章