阿秀现身揭秘抖音内部最常用的编程语言学习方法

2024-01-21 02:48

本文主要是介绍阿秀现身揭秘抖音内部最常用的编程语言学习方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

f48aae072aeb1be385e381f3f0ddb1fa.png

作者:阿秀
阿秀的校招笔记:https://interviewguide.cn

大家好,我是阿秀,今天给大家分享一点不一样的东西。

上个月我在公司搬砖写码间歇,趁机摸鱼划水的时候,看到一篇针对校招新人,主要是讲“在当今快节奏时代,如何快速学会一门编程语言”的文章,看完很受震撼!!

这篇文章在我看的时候已经有超过28,000次的浏览,也收获了8000+ 点赞,不少小伙伴都直呼学到了并且受益不少。

我在浏览文章的过程中发现文章中有些观点说的很好,跟我自身的体会差不多,在取得原文主人同意后,我结合自身的经历跟大家分享一下:如何在技术更新速度极快的今天快速学会一门编程语言

不过如果你是一名小白,Hello World都不会写的那种,那么这篇文章并不是很适合你。

这篇文章适合那种有自己的主攻语言,但是由于一些原因,需要在十天半个月的时间内快速学会一门语言的小伙伴。

我以前就分享过不少学习路线和优秀的编程资源,公众号后台回复“学习路线”可见。

我觉得自己就比较适合上述这种情况,我写过很多语言,VB、C、C#、Java、Python、C++等。

写的时间最久的应该是C#,大学的课程设计基本都是用C#做的。

还有就是C++写的时间也比较久,我也最喜欢这门语言,不为别的,就因为它足够严谨。。

1、两种方法

“新鞋走老路,新瓶装旧酒” ,这句话是很多互联网的职场根本,说人话就是要在有限的时间里做正确的事情,如果你不会,那就去学。

怎么学?方法很重要。

方法对了可以大大提升学习效率;方法错了,耗时耗力不说,且得不偿失。

一般而言,现在的互联网开发工作中经常需要我们快速掌握一门语言,但跟你在学校里不一样,没有学校期间那种充沛的一两个月去让你学习一门语言,去彻彻底底了解它的前世今生,把它彻底掰碎了揉开了再去动手写东西干活。

等你毕业踏入工作会慢慢发现,花两三个月去学一门语言这种情况基本不会再出现了。

大多数人在面临需要完成这种”快速学会一门语言的挑战“时,一般会采取如下两种方法:

第一种方法:大致看看语言的基本语法,比如for循环怎么写、int变量怎么定义、数组如何定义、如何输出变量,是printf、还是cout 或者是console.log,这样大致了解一下。

然后直接撸起袖子开始干,一边干一边查,去菜鸟教程、W3C、各种博客快速入门教程中去查。

第二种方法:花自己能花的最大时间完整的把整个语言系统性学习一遍,每个知识点都做到胸有成竹,不学明白不罢手!然后再开始干活!

我知道很多人,看到这里都会觉得我在说废话,是个人都能知道第二种方法不可取,应该采用第一种方法。

我也是这么想的,说明你和我一样,我也觉得应该用第一种方法,说明大家都是正常人哈哈哈

f306bce61971653eb972bd6c3a31e536.png

其实两种方法都不好,都有各自的弊病。

第二种方法缺点很明显,浪费时间不说,还偏离初心。

大家要时刻紧记学习一门语言的目的是为了解决问题的,没有谁是专门为了学习语言而去学习一门语言的。

除此之外,第二种学习方法的学习效率很低,想一想你要在很短时间内系统学习一门语言,你能学好吗?

这与大家在大学里进行期末考试不一样,期末考试考察的基本都是课后题,你把课后题学会了,那这门考试基本就稳了。

如果你一直使用第二种学习方法学习,你会不自觉地成为了一名语言专家,对于各种语言的优缺点可能随口就能娓娓道来,但这种没有实际问题去驱动的学习所带来的知识一般都是不牢固的,当然也不深入。

那么第一种语言就没毛病吗?

不是,如果我们在对于一门语言还不了解的情况下就直接上手开始干,写出来的基本都是不入流的代码。

这里说的了解指的是对于一门语言的脾气秉性的有一个基本的了解,不是说上来就直接撸袖子开始干!

如果你直接撸起袖子就开始干,短时间内没什么问题,因为在开发阶段的初期测试完备程度有限,你的那些自以为写的很好实际上很垃圾的代码能够通过代码审查或者Review,然后就会想艾滋病一样潜伏在整个项目各个地方。

在后期,这些毒瘤会冷不丁地跳出来狠狠地打你的脸!你会陷入拆东墙补西墙的循环往复中,掉入泥潭而无法自拔!

2、危害

其实学习编程语言是有一定的规律的,如果你是像我这样有一门主攻的编程语言的话,学会一门陌生的语言,基本十天半个月就足够了。

在短短的一周时间里就可以掌握一门语言最常用的50%,不会出现路子走偏了,甚至开车开到沟里去了的情况。

不怕你完全不会,也不怕你全部会了,最怕的是你一知半解,似会似不会,这是最糟糕的一种情况。

这不是张无忌学习太极拳和太极剑,学着学着忘了,然后直接去一打二、甚至一打三了。

5298212c02dfd341ac9b0021994cf34a.png
醒醒,你不是帅逼张无忌

假如你完全不会这门语言,那你就会去查阅资料,查百度、查stackoverflow、查书籍,如果你的学习能力好的话,写出来的代码自然不会差,代码质量也过得去。

假如你会了,那就不说了...

最严重的就是你不会,那就好像中国大跃进时期土法炼铁炼钢一样。

大家听完号召都兴冲冲的把家里吃饭的家伙事儿,锅碗瓢盆、饭勺锄头,有一个算一个,只要是含铁的全部丢进土窑里炼,这样你炼出来的基本都是用不上的废铜烂铁。

在编程语言上,最典型的应该就是C语言的指针,很多人不去了解“正路子”,只会死记硬背一句“指针里的都是地址,不是真正的值”,不管在什么情况下永远是这一句。

这样凭借自己的一知半解去攒野路子是最危险的,这就像是达摩克利斯之剑一样,不知道什么时候就会给你来上一刀。

e5a6e7ab3e73a550340427138e5421a8.png
达摩克利斯之剑-出自理查德·韦斯托尔手绘

因此,即使时间再紧张、情况再紧急,有些内容也是必须要首先完整了解一遍的。

只有掌握这些内容之后再进入实际的开发过程中,才不会剑走偏锋,误入歧途,退一步说,即使有问题,也基本不会伤及项目大体。

所以归纳总结一番就是:在实际的工作中,学习一门新的编程语言,既不能不能一上来就瞎干,也不能等系统学完了再实践。

应该首先掌握最基本的数据类型和基本语义语法和构造等核心基础的知识再开始动手开始写东西,然后在实践中不断巩固和深入,这才是最正确的方法。

当然了,如果你还在学校里那自然不必,你大可以花几个月去学习一门新语言和新技术。

写到这里,再次感慨后悔没能在学校里多接触点前沿的技术,掌握多点技能。

上学期间真的是最好的学习新技术的时候了。

3、提纲

最后分享一个学习提纲,再次重申一点:这个提纲的适用者是上文中我提到的那些有一门自己主攻语言的小伙伴,而不是小白新手们,千万注意!

这个提纲适用于绝大多数语言,基本上流行编程语言Top30都适用。

我专门去查了一下2021年的编程语言排行榜,参阅了TIOBE Index for October 2021:

2f88c254f9e7c5c68d2f84d5a1dfeb1b.png
2021年十月编程语言排行榜Top 20

基本上我听过的语言都在这上面了,简单罗列一下:

Python、C、Java、C++、C#、Visual Basic、JavaScript、SQL、PHP、Assembly language、Classic Visual Basic、Go、MATLAB、R、Groovy、Ruby、Swift、Fortran、Perl、Delphi/Object Pascal

这份提纲又分为初级部分高级部分,在简单了解完初级部分就可以动手开始干活。

初级部分

1、最基本的数据结构和基本语法要做到粗略了解,然后加以运用。比如基本的运算符(&&、||、!、?)、输出格式(Printf?Cout?System.out.Println?console.log?)等。

2、了解一些集合的基本运用。比如数组、字符串、set、map、哈希表等数据结构是如何定义和输出,具体来说如何为数组赋初始值。

3、了解集合的处理和使用。在了解完最基本的集合定义和输出后,这个阶段要学会一些基本集合方法的使用,比如数组最常用的push方法、splice方法,字符串最常用的split方法,set集合的add方法以及字符串的简单处理,比如查找、替换、截断等基本方法。

当然了,如果你对泛型有所了解的话,也可以理解一下泛型,没有理解也没关系,日后用到再说。

4、了解面向对象或者函数式编程的特征,就好比C++三大特性:封装、继承、多态等,还有一些Lambda函数或者JavaScript中的箭头函数的语法糖之类的,如果有别的语言的经验的话,其实很快就能明白过来。

这里多说一句,其实很多东西都是换汤不换药、新瓶装旧酒,大山沟里的村花陈素芬和一线城市中光鲜亮丽的都市白领Madam.Chen其实是一个人,只是身处的环境和周遭人不同而已,所在环境不同造就人的不同,其实内里是一个人。

5、了解断言、异常、错误捕捉、调试等,特别是异常的使用。在我们日常开发中,bug是再正常不过的了,特别是在刚开始接手写一个项目的时候,正确捕捉和处理这些错误/异常是很重要的。

6、了解整个程序的组织机制,比如典型的作用域上浮,关键字/变量的查找顺序等,不过大多数书籍并不是很注意这部分的知识点。

以上就是初级部分,在对上述部分初步了解之后其实就可以开始动手写项目了,这个时候你已经能够写出一些简单的控制数据,达到你初步想要的结果了。

然后在实际生产环境中,根据具体需求去学,不管是做DB数据库还是网络通信等,去找当下比较流行的框架或库,一边做一边学,在实战中学会、沉淀、总结、进步。

高级部分

高级部分有好几个大部分组成,并不意味着你需要每个都学会甚至是掌握,在具体的工作中,遇到哪个再去了解哪个即可。

时刻谨记:你是来解决问题的,而不是来学习编程语言的

1、了解回调函数以及时间驱动编程模型。比如回调函数的机制,它是是如何调用的,最典型的应该就是JavaScript中的回调函数,如果不能好好了解回调函数的特性和机制,初学者很容易陷入回调地域的漩涡中。还有C++中的tr1::function/bind等知识点。

2、了解序列化和反序列化,掌握缺省机制以及Regex处理问题,如果当前项目没有这个必要直接跳过即可。

3、进一步了解并发以及异步调用机制。学习一个项目最好的方式就是去学习仿写别人已经写好的项目,研究被人的源码再去动手写自己的代码,特别是并发和异步部分,如果没有现成的例子可以参考,就贸贸然开始动手写,写出来的东西绝对是一个噩梦。

4、更深的知识点,主要包括动态编程、元数据编程、程序运行执行的机制和编译/解释执行的机制

5、如果有可能的话,去找一些大手子去请教一些当前语言最常用一些特性/功能是什么?可不可以给一些关键字?然后自己去补充学习。

巨人的肩膀:

https://bytedance.feishu.cn/docs/doccnI6ZwT4fI1GaUQAJkn4g

https://blog.csdn.net/myan/article/details/3144661

我是阿秀,一个在互联网苟延残喘的人,我们下期再见。

推荐👍:《逆袭进大厂系列》(包含C++、操作系统、计算机网络、MySQL、Redis、情景题)

推荐👍:总有人在你不知道的时候,默默前行(他人经验)

推荐👍:求职软实力(面试、话术、简历)

---END---

你好,我是阿秀,本硕均于普通双非学校就读,读书时做过写手、玩过爬虫、耍过单片机、搞 过GPU、搭过服务器。校招时拿下字节跳动SP、华为、百度等6个offer,现于抖音旗下担任研发工程师,技术栈为C/C++/Golang,前端缺人偶尔也能顶一手。

点击此处查看我的幡然醒悟的八个月自学经历,不是逆天改命也不是逆袭,只是多花了点时间和坚持。一路走来,很累也很不容易,希望能帮助到更多像我一样的普通学校的学生。我踩的坑不希望你再踩,我走过的路希望你照着走下来。

这篇关于阿秀现身揭秘抖音内部最常用的编程语言学习方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/628133

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘