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

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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行