前端知识学了却不会用,都是没走心
我发现,许多人在学习前端的时候,更多的时候是处于一种“对外宣称正在学习中”的状态。而他本人真正的学习了多少前端知识?未必。
我之前就多次说过,“学习前端开发不是学习js脚本”。学习前端开发其实是一种用分析问题、理解需求、解决问题、响应变化的思维方式,是要动脑的。这种思维方式的不是一开始就能具备的,它无疑是一种技能,它是需要大量的练习的。
就像你面对一个姑娘,第一次的时候会很笨、很腼腆,很无措。但只要你练习足够,慢慢的你就老司机了。为什么成为老司机?因为万物都有规律,刚开始跟姑娘聊天,三句话把天聊死了;到后来你可以一次聊三天了。
为什么后来你可以一次聊三天?因为你说的每句话都有它的用处,每句话都是承接下一句话,每句话说出来都勾搭着姑娘往前走。。。
不多说了,回到js这里,这种“分析、理解、解决、响应”的前端开发思维方式,要成为每个前端从业者的本能,要达到面对任何一个问题,一个需求,都能下意识的使用这种思维方式去看待它。
那么,如何做到这一点呢?我认为至少需要下面四点,
(1)、面对一个需求时,要首先理解它的运行顺序。
从第一步到最后一步,每一步在做什么?需要什么?提供什么?。。。这些东西先在纸上画出来,如果自己画不出来。看在钱的份上,脸皮厚一点,请别人帮助画出来。
在日常生活中,也要有意识的去训练自己这方面的思维。例如在厨房里,你可以这样想,厨房能做饭也能炒菜,这是它的二个方法,
function 厨房(){
this.炒菜 = function(n){
console.log(n)
}
this.煮饭 = function(){
}
}
“我”,想要炒菜,那么就得这样,
var xx = new 厨房;
xx.炒菜('葱姜肉');
就这样,从日常的生活中,理解程序运行的规则;
(2)、一个需求之中的多个参与者之间的关系。
大到一个项目、一个应用,小到一个需求,都不是一个元素能够完成的。它里面一定有众多的“参与”者,那么它们之间的关系是什么?谁操作谁?谁是谁的前置条件?谁是谁的运行结果?。。。把它们在纸上画出来,这种能力也是要在工作、生活中不断训练自己的。
例如,厨房里,你要炒菜,参与元素有哪些:火、锅、油、菜、抽油烟机......不多写了
1,先打开火;
2,锅放火上;
3,油放锅里;
4,油烧热了,放菜;
5,酌情开抽油烟机。
它们这几个元素中,谁操作谁?谁是谁的前置条件?谁是谁的运行结果?
if( 火 == 燃烧 ){
火(function(){
锅(function(){
if(油温 >= 100){
放菜(...);
}
})
});
} else {
点火()
}
funct.. 锅( callback ){
callback();
}
//...
尝试着用js的思路去解释你生活中的事物,因为你在工作中遇到的所有需求,全都是来源于真实生活。而js的最明显的思路是什么?回调嘛,所以你看上面那段伪代码,全都是回调。
(3)、抓住需求、业务中的那条“线”。
警察破案讲究线索,出门要确定路线,我们写代码也一样,要抓住业务中的那条线。但这条线事实客观上并不存在,怎么办?
要找“点”,每一个功能,每一个需求,每一个条件,它们都是构成线索的点,这些点连在一起就成了线。沿着这条线走下去,从头走到尾,你就理清了一个需求的业务逻辑。
当然了,实际操作中,你还要注意多个业务之间相互的影响、关系,需要你对于前端的全局有一个整体的把握和理解,这叫“大局观”。
最后再说一下,你学会一个东西的真实表现是,面对一个问题的时候,脑子里的思路马上转换为前端开发的思维方式,而不会学了一堆js,然后面对需求手足无措。
- 抓住“新代码”的影子 —— 基于GoAhead系列网络摄像头多个漏洞分析
- Python 用OPEN读文件报错 ,路径以及r
- python 如何设置多线程
- R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)
- python 多进程设置 整理版本1
- 11g Dataguard中的snapshot standby特性(r8笔记第49天)
- 物化视图刷新结合ADG的尝试 (r8笔记第47天)
- 关于CPU使用率高的awr分析(r8笔记第46天)
- 图形工具和命令行的博弈-swingbench配置(r8笔记第63天)
- 手把手教你用LDA特征选择
- 一个关于执行计划的小问题测试(r8笔记第60天)
- 【Go 语言社区】www.golangweb.com通过工信部审核,正式挂牌社区域名
- golang 算法课程 正式开课--第一季 第1节
- 在 Mac OS X 装不上 TensorFlow?看了这篇就会装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Geant4--一次编译,运行多个Run,极大提升模拟效率
- Geant4--是怎样使用的?--(1.信息抽取)
- ROOT-数据读取-直方图-Roofit拟合基本流程-(入门实用)
- 最简单的基于FFmpeg的直播系统开发移动端例子:IOS 视频解码器
- 哇塞哇塞--一行命令搞定视频截取和gif制作!
- 01.Android崩溃Crash封装库
- Geant4的root文件读取
- Geant4的几何边界判断代码解析
- Blender+Geant4一文入门3D模型文件导入
- Geant4官网虚拟机的完全使用入门
- VCS入门教程(四)
- VCS入门教程(三)
- VCS入门教程(二)
- VCS入门教程(一)
- WebRTC架构图说明