原问题地址是:https://www.zhihu.com/question/34388831
问题描述如下:
刚刚毕业,在公司一直做的是前端开发,之前都是自己去学习一些基础的前端知识(html+css+js)。到现在越来越迷茫,不知道自己该去学哪方面的。 在学校学的都是一些基础知识,毕业之后自己自学了JavaScript,在这个公司,要求不高能搭页面就行,可是我想提升自己。.求各位前辈指点!
我的回答:
想要提升的想法是对的。企业对员工的要求就是搭页面,只会是下面两种情况:1. 页面质量各方面都是top级别,交给你实现可以收益最大化;2. 你技术能力仅限搭个页面,其他活交给你不放心。由于你刚毕业,我想你应该是第二种,所以,如果你满足于现状,必然对自己职业发展是非常不利的,任何可以被轻易替换的职位都是不具有竞争力的,搭页面就是IT行业门槛最低的职位,没有之一,虽然实际上要想搭的好需要很多积累,但是,对于大多数企业,大部分用户,大部分场景,只需要页面视觉过得去就可以,而这种程度的要求实在太好实现了,而太多入行的新人都是这种程度,导致“问题一”的出现。
从理论上讲,只要你HTML和CSS足够精通,页面足够好,也是可以进入很好的单位,有不错的发展。但是,很难,对于大多数同学而言,往往是条不归路,所谓一叶蔽目,不见泰山,简单和舒适容易让人忽略的对边界和底层的不断探索,以及即使是大公司,也不希望你化太多精力在收益不直接不明显的事情上,所谓人在江湖,身不由己,因此很难坚持下来。
所以,我的建议是优先投入精力在JS的学习上,学习一定要系统,一定要是基础知识。
学习有经验式学习和系统学习两种。经验式可以收获书本上没有的一些知识,例如微信浏览器下的坑,以及知识具有极高概率的重复利用可能性,可以说是投入产出比非常高的一种学习方式;但是不足也很明显,一是学到的知识比较狭隘,拿搭页面举例,常用的CSS颠来倒去就那些,以至于很多小伙伴都没见过unicode-bidi等CSS属性;第二个是工作效率其实并不高,一旦遇到之前没有接触过的场景或者需求,就会不知从何下手,百之谷之问人之,大把时间都被耗掉了;第三个就是技术实现往往不是最优解,举例来说,想要知道A元素是否包含B元素。以前工作经历让我们知道parentElement可以获得父元素,于是,说不定就会写一个不断遍历父元素判断元素是否包含的方法。写的人自以为写了个很厉害的方法,殊不知,浏览器,包括低版本IE都天然支持元素是否包含的DOM方法contains。
而系统学习是成为一个技术能手所必须的,全部知识点在脑中(或者有印象),自然想要实现什么手到擒来。然而系统学习却是很枯燥,很花时间,有些知识可能一辈子都用不到几次,平均下来,似乎是个投入很大产出效率并不高的买卖。人总是喜欢舒适讨厌无用功的付出,因此,有非常多的开发人员的知识都是经验式学习,然后1年经验3年用,然后中年危机。
“基础知识”是相对上层工具或者应用而言的,例如,最近Vue很火,对于刚毕业的你,且公司又不需要你写Vue, 因此,Vue哪怕被说到天上去,也不要去学习,抓紧时间学习JS基础知识,原生的那些东西。
虽然前面讲过学习要系统,但是,JS知识点那么多,如果每个知识点都花大把功夫去学习,且不说能不能学懂,怕是压根腾不出这么多业余时间吧。因此,很有必要指出哪些内容是适合你当下学习的,否则学习无重点像无头苍蝇,很容易陷入迷茫的。
非计算机专业背景学习JS要点:
非常重要:先要对JS这门语言要有整体、感性的认识;
掌握JS中的字符串、函数、对象、数组、字面量等基本概念,熟记所有内置的方法(包括参数和返回值);
所有继承和原型相关内容跳过,注意,是跳过,不要看!没有这些JS一样可以活得很好,你的日常工作一样玩得飞起,当然,你没忍住看了相关知识也没关系,因为你会发现自己看不懂的;
DOM事件和所有DOM方法一定要掌握的牢不可破;
学好正则表达式;
然而,要记住JS所有字符串、函数、数组相关的方法,所有DOM相关方法是相当庞大的一项工作,因为,很容易忘记,方法也很简单,所谓好记性不如烂笔头。把编辑器的JS自带补全提示干掉,从小交互开始,尝试使用原生的JS书写,写着写着,一定就会记住了,这是最快学习成长的方法。
学习的过程一定是带有痛苦的,并且漫长的,千万不要出现类似“《JavaScript高级程序设计》和《JavaScript语言精粹》我都看完了,接下来我要学什么的言论”?你以为你是黄蓉啊,看一眼就记住啦!反复看,看完肯定会忘记,忘记了再看,我也是看这两本书学习JS的,《JavaScript高级程序设计》这本书已经被我翻到掉页了,《JavaScript语言精粹》上面满满的笔记,哪个知识点不记得了,基本上一翻就可以准确到对应的页数,因为也是翻了太多遍了。
最终学习是否成功的关键在于“坚持”。
在一个相对公平的环境下,想要超越他人,只要能够完成他人完成不了的事情就可以了。大多数非计算机背景前端从业人员对于JS的系统学习是很难坚持下来的,时间长,收益缓慢,但是,如果你坚持下来了,你就超越了这些人,你就不是一抓一大把的页面仔,而真正能独当一面抢手的前端开发了,完成了前端开发领域的阶级跨越。如果你学习的时候像放弃,想想前面这句话,或许就又有了额外的动力。
原问题地址是:https://www.zhihu.com/question/38922374
问题描述如下:
1.题主妹子,现在在培训学习前端,看到有人说不要培训出来的程序员,因为基础不扎实,自学能力差等,让我不得不重视这个问题;
2.题主上一份工作是做招聘的,也了解过,有的企业是不要自学的,因为没有经过系统学习,基础也不扎实,但是有人又说会喜欢自学的人多过培训的。
3.感慨就是这个世界好复杂,每个人想要的都不一样啊,那其实唯一的标准就是基础好不好嘛?
那问题来了:
对于前端,或者其他的IT岗位而言,怎样才算基础扎实呢?
我的回答:
这个问题我们其实可以通过咬文嚼字来理解,首先要明白什么是“基础”,然后理解什么是“扎实”。
“基础”汉字表形上有“土”“石”“山”,原本用在建筑构造上,由于地球重力的存在,现代建筑都是从下往上建的,而最下面这个用来稳固建筑的这个底层就是“基础”。众所周知,建筑越高,基础一定要越牢固,否则就会出现“眼看他起朱楼,眼看他楼塌了”的情况。在这世界上有非常非常多的东西都是从无到有建立起来的,就跟一栋建筑的拔地而起是一样的,先有个底子,然后再慢慢的往上添加东西,最终形成一个完整事物,而这个“底子”,我们也称之为“基础”,可以看成是事物发展的立命之本。
其中个人技能成长,就是非常典型的一个从无到有建立的过程,比如说打篮球,篮球规则,运球,定点投篮等就属于非常基本的东西,我们就可以称之为“基础”,就算篮球之神迈克尔乔丹也是踩着这些基础成长起来的;又比方说前端开发,在接触这玩意之前,大家显然都是一无所知的,到后来祝那个玩出点花样来,这个从无到有的过程也必然伴随着一些称之为“基础”的东西在里面,那到底是什么东西呢?
回到这个问题本身,目前行业中前端开发其实分两类,一类是偏逻辑系的,一支也是偏视觉系的,无论是哪个系的,基础都离不开HTML,CSS和JavaScript的,但不同系别最基础东西有差异,如果是偏逻辑系的,基础中的基础是JavaScript,至于逻辑思维能力和抽象能力,并不是基础,而是天赋,基础是通过努力可以夯实的,如果无论怎么努力也夯实不了,那就不能称之为基础;如果是视觉系的,基础中的基础就是HTML,没错,是HTML,不是CSS,虽然CSS出镜频率甩了HTML好几条街,但是,最基础的是HTML,自带行为和样式,前端中的前端。同样的审美能力和具象能力也不是基础,这东西天生的,很难练出来。
提问的妹子上一份工作是做招聘的,根据我其实不太靠谱的经验式猜测,妹子应该是走视觉系的,那前端基础排序应该是HTML > CSS > JavaScript。大家千万不要有这样一个误区,认为基础的重要程度是和学习时间成正比的,其实不是这样子的。很多人学HTML估计就几周时间,觉得学得很不错了,简历上可以写“精通”二字,因为最终的效果好像确实和预期的一样,我说这个并不是想吐槽这些人“槑”,而是想表达的是HTML这门语言相当的厉害,这绝对是一个会非常长盛的语言,因为其重要同时上手非常的简单,并且随着发展,说不定以后会一统万端。
这个问题的重点其实是“扎实”。先说说“实”吧,拿大米举例,我们盛了满满的一碗饭,用勺子再压一压,我们会觉得米饭很“扎实”,很管饱,但是我想从来不会有人觉得一碗粥很“扎实”吧,为什么呢?粥里面虽然也有米饭,但其实百分之八九十都是水,水大家都知道的,进到肚子里一会儿一泡尿一撒就没了……
基础知识的学习其实也是类似的,所以“实”,就是要满,就是要没有间隙,就是没有水分在里面。假设请问那些基础知识,无论HTML,CSS还是JavaScript,我们都看成是一碗米,那我们花两周速成那些知识,或者说平时项目开发所用的那些知识所代表的米粒顶多就一碗粥里面米饭的量,虽然吃的时候管饱,你以为好像知道了全世界,但实际上你知道的永远是碗里面那一小撮米而已,这就是不够“实”。
因此,所谓“实”,就是从中心到边界全部一个不落的进行细致的了解,比如说举个很简单的例子,是我问过我厂实习生的问题:“CSS vertical-align支持几个关键的属性值?CSS vertical-align支不支持负值?CSS vertical-align百分比值是相对哪个属性计算的?”
CSS vertical-align属性大家肯定都用过,一定是middle用的最多,有时候也会用用top或者bottom,然后有太多的人就会认为vertical-align:top/middle/bottom就是vertical-align属性的全世界,这就是典型的CSS前端知识不扎实,想要扎实非常简单,MDN文档看起来。HTML中有非常多的标签和属性,有新标签字的行为,有些属性自带行为,还有些属性自带样式,且影响无障碍访问,想要“实”,文档一个一个看过来,一定要一个不落,要记住;CSS那么多属性,默认值是什么,支持的属性值是什么,定义是什么,都是非常简单的不需要逻辑思维的东西,全部一个不拉记住。于是你会发现这些其实非常表面的一些东西,你花两周时间是根本来不及看的,我想很多人两年都看不完,或者说根本就看不下来,静不下心来,眼睛速度一扫,恩,我知道了,这些东西,好简单,其实屁什么都看不出来,就好像自己写的文章中的错别字,有时候复查个十几遍都看不出来。要想从简单的自以为了解的东西中看出一些不一样的东西出来,这个其实是需要天赋的,心态,专注度等都有关系。
所以,虽然我这里对这个问题进行了用心的回答,但是最终能带来多少好的结果我其实是保持极大的怀疑的。
最后,回答一下“扎”,“实”为“满”,可以理解为广度,“扎”则可以理解为深度,我们可以看两张图片,形象的感受一下这个“扎”这个动作:
扎水捕鱼 容嬷嬷扎针
也就是说基础扎实的另外一层意思就是要“进入水下”,“深入肌肤”,也就是说,我们除了要熟记表面的那些定义啊,语法啊,参数啊,还需要多思考,为什么这样设计?为什么会有这样的表现?
举个简单例子,我们或多或少都听说话,写页面要符合W3C标准,HTML一定要要语义化,但不知道大家有没有想过为什么要注意语义化?这其中背后的原因就是“扎”。
如果我们把前端基础知识点比多人的话,所以前端基础扎实,包括:在座所有的人我都知道你们的名字是什么,你们的父母叫什么,在什么地方上班,星座是什么,特长是什么;甚至我还知道你为什么你会叫这个名字,你为什么会有这样的性格。
发现没,“前端基础知识”这几个字看上去好像很简单,但实际上真的要做好其实是非常难的。HTML,CSS和JavaScript分属三门不同的语言,每门语言都有非常多的基础知识,要想全部记住并能自如在项目中选项应用,那一定是需要大量的时间学习和积累的。
但是如果你积累到一定程度,犹如万丈高楼一样,有非常好的基础,日后在前端领域,尤其技术这一块,日后的高度一定非常可观,而且持续上升。并且无形中会从一个前端使用者变成一个前端创造者,成为一个真正的高级前端开发人员,成为行业的香饽饽。
http://www.zhangxinxu.com/wordpress/?p=6183