这半个月看完了一本前端入门书《Head First HTML与CSS》。700多页,我还以为我要看一个月才能看完,毕竟前端知识我一点都不懂。开始看前我看了好几个知乎回答,图书馆的前端书也都花一天时间全翻了一遍,选来选去就选了这本没什么难度的入门书。
其实是抱着一种工具的态度去学前端的,想写自己的个人主页,到时候应聘就拿这个主页当简历——就一串网址,感觉很牛逼的样子。本来也没打算花多少时间在上面,所以没选那种真正的大部头去啃(C++就选了一本大部头,啃了半年都不敢说自己懂多少C++)。
今天回过头看看之前收藏的几篇知乎关于CSS的评论,突然有了一种“冒牌的高屋建瓴”的感觉。
还得从一开始说起。
最开始学C++的时候,很多文章都在强调一点:C++是真正的屠龙之术。什么是屠龙之术呢?简单的说,程序语言在设计之初都会被创立者建立一些特性,以此来让语言在某一个具体的领域十分强大,代价就是别的领域就不行了。而C++的创立者却抱着“任何已知领域”都能强大的思想,建立了一些用于打破特性的特性。用通俗易懂的话说,别的语言就像是杀猪刀、宰牛刀,你当然可以拿杀猪刀杀牛,宰牛刀杀猪——只不过不顺手不省力罢了。而C++就像是一把会变形的刀,只要你足够了解它,它可以变成杀猪刀也可以变成宰牛刀!
在我看来这是一种很强大的思想,就如同“一法通万法”的那种牛逼。
我一直以为万能=无敌,虽然万能的代价是要付出更多的学习成本。正因为这种巨大的学习成本,C++被称为屠龙之术————这世上没有龙,学那么厉害反而自讨苦吃。
我第一门接触的语言就是C++这门拥有无限可能的语言。也正因为如此,思维上我接受了这么一种定式:设计的理由一定是为了适应所有变化,既然是为了适应“所有”变化,那么就必须是毫无破绽的,所有方面都要自己去亲自定义。
这也是C++被划入强语言范畴的原因之一吧——所有方面都能被精准定义。
而这次我学的前端就不一样了,HTML是一门弱语言,里面相当一部分东西都被弱化为语言本身自行判断和定义的了。最简单的一个例子:
C++里,a=5+“5“是不成立的,因为字符和数字不能用+来运算。
而HTML里,语言本身会自己判断:a=5+”5”。由于默认,a的结果是字符55,即把第一个数字5看成了字符5,+变成了连接两个字符的符号。当然你也有办法把a的结果弄成数字10。
为什么会这样?因为定位不一样。
我之前一直认为各种语言之所以会有擅长不擅长的原因是“让人在一定的学习成本下,能在一个方向做出最大效率的事情“——而这种想法在我看来就比不得C++这种全能语言。因为我觉得“一法通万法”中的“一法“才是真正的正道。就好比网游中会分物理魔法一样,初期可能单线走物理或者魔法牛逼,到了后期魔物双修能完爆单线的一样。C++就是双修之道,其它语言都是一条路走到黑。
而前端里,HTML负责表达内容,CSS负责内容的显示方式,Javascript的作用我还不是很懂就先不提它。也就是说,这是一种奇怪的结合体,不像C++那样一门语言包括了所有方面——HTML就只负责结构,CSS只负责规范。
这是很奇怪的感觉,虽然从某种意义上C++语言中不同的内容也起到了这个作用:变量类型负责数据结构或者说存储方式等,函数负责定义一套方法之类——具体方向有具体的特性支持,但是大框架上都是属于同一门语言C++的。可HTML和CSS则是完全不同的东西,语法是不一样的,不像C++的函数定义方法,方法中必须用到变量,那么变量类型就无法避免地要涉及到。
我又一次想到了集成的重要性。你很难想象会有哪一门学科能够把当今所有科学都容纳进去——当然你也可以说“科学“就是这门学科,但这不过是文字游戏罢了。C++在程序语言中做到了这一点,我觉得十分厉害。可现在学了前端的HTML和CSS,却让我了解到了分工的强大。
近百年来,诞生的语言都有其局限性,但无一例外的,都曾风光一时——既然如此就必然有其优势所在。不能轻易的否定这一点,不能骄傲自大。
所以现在看来,学学别的语言,找到这些东西,也是一个重要的提升方向。这将列入我未来的学习蓝图里。同时也更加让我体会到,所谓人生真理,并不一定能用在任何事情上。
绝知此事要躬行,古人诚不欺我!
顺便放下自己目前的学习路线:
副线:
1.《C++ primer 5th·中文版》——>《C++ API设计》MartinReddy著——>找一个游戏制作工具——回头复习。
2.积极心理学视频系列。
主线:
1.《Head First与HTML与CSS》(副线:《HTML5权威指南》Adam Freeman著)——》;《CSS权威指南》(副线《HTML5实战》RobCrowther等著)——>写个人主页——>回头复习——>java和数据分析。