简单说吧,如果你真的“思考过来龙去脉”的话,那么你起码就该知道——HTML和CSS就特么是东拼西凑出来的垃圾。
然而它又是目前为止“最不坏”的垃圾。
原因很简单:HTML先天不足。
它根本上是一种简易的“图文混排”系统。
这带来两个关键特点。
一,它是设计来表现静态内容的、类似图文出版领域的描述方案。
换句话说,它压根不该拿来呈现动态内容。先天不足。
二,它是“简易”图文混排系统
换句话说,相对于出版业使用的、正式的文档系统,它只是个玩具。
然而,这并不该责怪html。
因为互联网的发展出乎所有人的意外。
9x年,我上学时,学校机房都还是286、386,486都少见。那时常见的硬盘容量甚至只有20M——就这么个容量,你能放几张图?
然而,看看这速度:
1、92年,奔腾处理器问世,处理速度达到60MHZ
2、94年,奔腾处理器2代上市,速度从75MHZ开始起飞,一口气到200MHZ
3、97年1月,奔腾MMX处理器上市,速度166、200、233、266MHZ
4、97年5月,奔腾2处理器上市——到了这时候,国内大学都还普遍用286、386……
5、99年2月,奔腾3上市
6、蛰伏良久的AMD突然发力,超过1GHZ的athon处理器问世
7、2000年,在超频奔腾3挑战1GHZ失败召回后,Intel奔腾4上市。这款处理器流水线超长、时钟频率很高,然而性能弱鸡。彻底卖倒了奔腾这块金字招牌。
互联网就发达于2000年左右——看看这半年一件大事的节奏。
95年,800M的硬盘很大很大,大到大家开始头疼“这么大的空间装什么”。
97年,1G的硬盘成为主流
99年,我的电脑用的是15G的硬盘
00年,我同学装机上了40G硬盘
05年,我给自己装的机器用了160G硬盘;到了后半年,又添加了一块500G的新硬盘
……
现在,1T的硬盘够做什么?
我们这专业玩电脑的,4T——4000G——的硬盘都不够用!
在这种迅猛增长的带动下,HTML被迫赶鸭子上架——它一个玩具版的图文混排系统(事实上,显示图片都是硬塞给它的,它本来只打算管文本的,还是字体显示都很薄弱的玩具版),突然要……拿来写动态界面和用户交互了?!!!
怎么办?
瞎玩呗。
比如,我可以显示个界面,上面有按钮;但按钮其实是个图片,这个图片还是个超链接,点了之后让服务器自动给你从头生成个页面——你看,“动态”了吧?
但这样事事都要麻烦服务器,压力太大了,流量太多了,速度也太慢了……
怎么办?
继续拼凑:我在html中嵌入一段程序,让浏览器解释执行;这段程序可以生成一些html字符串,代替它原本的位置……
等等,程序怎么嵌?浏览器解释执行?意思是浏览器里面得嵌入个编程语言解释器?这种语言是什么语言?
没人知道。随便做个,凑合用呗。
于是,1995 年, Brendan Eich 给网景浏览器写了个简单的解释器,这就是著名的JavaScript语言——它和Java没关系。
之所以叫JavaScript,仅仅是因为一家三流公司想要蹭Java的热度而已。
html、js、css,都是这么凑合出来的——谁让硬盘容量膨胀的这么快、网络带宽一年一个样、计算机半年换个代呢?
一开始没有准备,结果市场反响强烈,于是全球一窝蜂的都来搞。
软件硬件千万个领域遍地开花、然后你还得同时支持所有人“因陋就简”出来的各种脑洞……
这么紧凑的“需求变更”节奏、这纷纷乱乱毫无规律的需求,谁跟得上?谁有时间分析、设计,谋定而后动?
还不都是走一步算一步。
PS:有人对“html不是为显示图片设计的”提出质疑,因为它的名字就是“超文本标记语言”,就涵盖了图片需求……
但是呢,第一,就评论区朋友指出的,html的hypertext指的是可以支持“超链接”,从而把一堆文本有机组织起来、随意跳转。
第二,虽然html的确从一开始就有一定的图像支持;但实际情况是,html提出来时,大家都还在用这玩意儿呢:
最上面那个,你猜人家能存多少东西?
没错。“惊人”的80KB。
——当年的惊人和现在的惊人不是一个惊人,哈哈。
当然,html提出时,八寸盘已经不怎么用了,IT业已经进步到5寸盘甚至3.5寸盘时代了——其中,5寸盘可以存储更“惊人”的180K、360K或者1.2M数据;而更加先进的3.5寸盘体积更小,存储容量却高达1.44M!
至于硬盘……那种存储量高达10M以上的、昂贵的奢侈品,哪怕高校都不会随便用。
所以,现实约束下,对html设计者来说,图片支持和现在很多软件里面的人工智能一样,是一种“蹭仙气”的行为——允许你用,但从没人想过,一张网页上面可以放很多张高清图。
——别闹!带宽如此金贵、磁盘如此狭小;文本里来张0.5k的图片意思意思就行 :你看,这个表情已经足够生动活泼了!你还要怎样?
——不是吧?你不会真想在里面用50K的超级大图吧?满足你!够慷慨了吧?!
可想而知,这种缺乏远见的系统会有多么乱。
尤其是,这个过程还不是一家公司主导的。
网景起来了,又败了;微软膨胀了,又瘪了;苹果另起炉灶,google接力……
吵吵嚷嚷乱七八糟……甚至因为生怕丢失用户,浏览器厂商又玩着命的搞兼容……
令出多门……
怎么办?
先做出来,万一流行了就事后追认……
一大群人七嘴八舌,各有各的想法,说不通就先做出来用着,让市场选择……结果市场说前三名我都要……
更可恨的,第一名说哈哈我有钱,前十名我都兼容了!
这么一搞,就成了“一件事有一千种各自不同的做法,所有做法都对,但所有做法又都不可能完全做对”——你居然想从这种乱糟糟的玩意儿里面找到“本质”?
韭菜猪肉鸡蛋大蒜生姜酱油醋混成一团,你说这玩意哪来的“本质”?
当然,业界早就知道了这些弊端。
这些年来,也的确有无数专家做了很多很多努力,希望给html、js、css三者各自搞个标准……
但还是那句话:这破烂是从错误的地基上搞起来的。
这玩意儿你再修补,能补好?
到现在,这破烂看似搞的“光滑”了一点点,html负责数据组织,css负责呈现风格,js实现动态逻辑……
但是,它的底层设计仍然是那个破烂——这玩意儿哪个懂工程设计的能不骂!
html管数据组织?那你搞个毛的frame、span!
专心做你的数据结构不好吗?
干嘛要在页面呈现上插上一脚?
css负责呈现风格?
那你干干脆脆的搞个窗口系统,彻底hold住每个控件的位置行不?
不行。那是html的事。不敢插手。
等等?你不是要把布局从html上面剥离了吗?怎么又反复无常起来了?
哦,你就看不上table布局啊?行啊,你给它免了,你就搞一套更好的替代品嘛。
不会?
不会你是来干嘛的?
js实现动态逻辑?
服务器通讯怎么做?
哦,还是超链接啊……那不还是html的东西吗?
那你这模块是怎么切分的?这一刀究竟切在哪?自己鸡鸡上?
你看,职责不清,凑出来像那个样子就算——60分万岁,多一分浪费!
标准的屎山。
和桌面应用的MVC比,那真是提鞋都不配。哪怕笨拙凌乱的MFC都比它强的太多。
程序员界有个公认的说法叫“编程语言有两种,一种是被骂的狗血淋头的,另一种是没人用的”。
但是呢,你会发现,无论python还是Java或者C/C++,这东西都有人骂。骂的狗血淋头……
甚至,Linux本身都被骂的不轻,以至于关于它的、最专业的网站之一叫 http://linux.die.net。
然而,很奇怪的,html/css用的人特别特别多,却没什么人骂。
这大概是唯一用的人超级超级多、却不怎么被骂的IT技术了。
你以为是它做的太好、找不到骂点吗?
恰恰相反。它都不配被骂。
说白了,C/C++/Java它们做的太优秀太专业了,骂它才有B格——这么高大上的东西我也能挑出缺点,是不是显得我很牛?
可html+css+js这一套呢?
不好意思。这种破玩意儿,骂它丢我们的人。
但这样比也是不公平的。
html出现于1990年。那时候虽然“640K内存对任何人都够用了”已经受到了挑战,但个人电脑配1M以上内存仍然是一件很奢侈的事。
而MFC发布是和微软的C++一起发布、拿来支持Windows图形编程的;MFC打遍天下无敌手多年后,MVC架构才被提出来。
就好像在你学会走路之前不可能学会骑自行车一样,你也不可能在没有见过图形甚至视频当道、web应用如火如荼的互联网之前,就提出MVC的网络增强版。
事实上,HTML之所以能有如此强大的生命力——你看更后面更完善的flash都凉了,它都还坚挺着呢——是因为它在某些方面做的特别特别好。
好到业界几乎所有人都来给它“画蛇添足”,硬生生把它整不会了。
经过二三十年的无序发展之后,说这玩意儿能一下子走向正轨,那是扯淡。
但最起码,现在html、css、js三者功能逐渐分离,这条路无疑是正确的。只是历史包袱太重,又要兼容性(兼容三十年前的网站!),又要简便、高效、入门门槛低……这些要求其实很多地方都是互斥的,你必须牺牲其中一些。
实际上,早在多年前,被我吐槽的“数据组织”问题都要被自发解决了。
这个问题的“官方”解决方案其实是xml;然而xml实在不大行;然后json又流行起来……
类似的,将来,html、css、js的功能很可能将会进一步被拆分、分离。
比如html的布局功能可能逐渐被废弃,仅仅拿来做failsafe,比如在文本浏览器之类上古遗留物里面呈现信息;布局功能移入css、同时导致css被进一步拆分,比如拆出来一个布局/对齐模块和一个字体/风格模块,等等。
总之,像现在这样,终究是不行的。根子都不正,上层建筑当然怎么搞怎么歪:功能重叠,一件事忽然一大堆人都要管、可真想要彻底解决呢,就一下子全都见不到了。越搞越复杂,越复杂事情越做不好……
当然,现在我们的确只能用屎山。那么,用屎山的诀窍就是:不要深究,凑出结果就行。
因为它压根经不起挖。越挖越臭。
我在知乎不知道苦口婆心的说过多少次,CSS不是程序员搞出来的玩意儿……
你所追寻的原理,规律,理性。特么一开始就不存在……
所以你的思维方式是错的,但错不在你,错在你的思维方式和CSS的设计者不同步。你要搞清楚他们就是一群做排版的搞出来的,说的好听点是做艺术的,不好听点儿就是擅长把一个简单的问题用复杂的方式给弄出来。
flexible box之前的一切布局模式都应该扔掉……兼容问题遇到再说就好了,不行就直接td的valign……
不要试图去解释那些行为,反正解释权也不在你手里……
你这不是思维问题,是性格问题。
10张截图,只有1张是讨论技术的,其余9张都是要对方承认自己对。大量的“我就是”,“这就是”,“明白吗”,要求对方全盘接受自己。
“我就是这样的,外界应当适应我”
这是性格问题。没有人关心你是怎样的,也不会特别配适你的喜好,越早明白,越少碰壁。
刨根问底不会影响学编程,甚至也不影响学CSS,只是快慢而已。可能有影响的是你的逻辑能力,在图中,你说自己不喜欢快餐式学习,两三句后,又说对方,“你不喜欢只能代表你不喜欢”,而对方并没说过“不喜欢”,这三个字是你说的。逻辑上看起来就很混乱,这可能会影响编程。
另外,“快”,“准”,是两个字。
这大约是新手的通病,尤其是基础知识不扎实的程序员的通病,也就是固执己见。
只有外行才把所有东西都叫做编程。这没错,但是是外行,就像外行把所有内容都叫看病,你去问问医生们,他们科室分得可细了。
在软件方面也是如此。前端本身就有html, css,js等一系列内容,而这些又只是软件技术里面极其简单的一块,浏览器展示,这一块,最多只占软件技术的5%。就展示来说,还有非浏览器展示,比如微软新的winUI3,后端又有海量的内容,不单单是普通人熟悉的各种语言,还有各种服务器技术,各种容器技术,各种运维相关技术,各种持久化技术,各种路由和流量技术,等等等等,就连一个普通人完全接触不到的日志技术就有十多种主流框架,至少5种习惯实现。在这每一个技术下面,都有至少三到五个常用实现,每个实现都有其独特的技术。比如数据库技术就三大关系型加上三大非关系型,每一个下面都有几百页文档可以看。
我看了对话,是很典型的“学生程序员大佬”,也就是刚对某些概念有了初步的理解,但是很可能没有足够的时间进行实操。这种情况下一般会如此,1是不熟悉细节但想太多,2是分不清技术之间的层次而想太多
比如
这里面就有两个认知错误。不是所有技术都需要考虑未来兼容的,网页技术一般不考虑无限兼容,因为熟悉的人都知道,基于html的浏览器网页技术,本身就构建在不稳定之上,大部分情况下,网页技术是一种可抛弃技术,也就是与其设计一个可以兼容未知需求的浏览器内容,不如构建当前恰好,等到有大改动的时候,直接抛弃原来的页面,做个新的。这是因为html技术本身就因为各家的实现和自身的缺陷导致不严谨,多年以后的兼容性改动会非常昂贵。同时,也不理解flex技术和css技术之间的区别,他们不是同层次的技术,css是样式表语言,而flex是模式。打个比方,这句话就等于有人说,用java多蠢,我不如直接上工厂模式。难道css3没有flexbox模式?模式的实现基于语言,分不清语言和应用语言的模式,这就是基本功的问题。而后面反而说自己是追求原理的人,这就是懂得太少而想得太多。这是程序员需要保持谦卑的一个重要原因。
后面的对话就已经脱离了实际意义了,大部分“学生程序员大佬”都这样。我喜欢底层。知道为什么吗?顶层的实现是实打实的,就像这个老哥说的,你做出来啊,就算是最简单的html页面,也得做出来,浏览器跑得出才是,而“研究底层原理”,没验证的,不需要编译器解释器教你做人,就打字就成了。
比如你虽然口口声声喜欢研究底层原理,但这两句话就直接暴露了根本不懂底层原理。
浏览器的底层原理是什么你研究出来了吗?浏览器懂什么?浏览器渲染就是按照html来的,js只不过是操作html,我恐怕你根本不明白html元素和js对象之间的关系。
你这个思维很错,但是错得很普遍。大部分稍微懂点,手里只有一个锤子看什么都是钉子的人都这样。而程序员要能够自我提升,最重要的一点是放下这种心态,无论对方是谁,都应该去试图理解他的思路的原因,而不是本能地去争辩。软件技术这个世界广博到无可附加,任何人,无论年龄无论资历无论大小,都能从其他人身上学到东西,而你作为没入行的人就固执己见,这就是最错的地方。
你犯了初学者经常犯的错误,就是觉得刨根问底是对的。比如你现在要盖房子,那么首先要想需要什么材料盖房子。但是让你这么刨根问底,你就会想房子需要砖和水泥。那么砖怎么做的,怎么烧制的,制作砖需要什么样的工艺,需要多少温度烧成砖,烧砖的砖窑怎么建造,需要什么样的耐火材料,需要多少燃料,那种燃料最好,燃料怎么形成的,煤如果合适,煤又怎么形成的,地球原来有多少树木,这些树木怎么生长的,当年怎么长成树木的,树木细胞是什么样的,地球为什么有生物,地球怎么来的。。。。你觉得你思考方式是不有问题?
盖房子需要首先盖起来,了解怎么把房子盖起来,这个流程首先掌握,然后在盖的过程中,需要掌握什么样的结构房子能牢固,怎么设计满足客户对房子的要求?房顶铺盖几层材料才不会漏水?你学的是盖房子,不是其他的。你要明确你学习的边界,我不觉的你是研究性的人,就是不知道哪些东西是重点。你师父没有问题。问题在你自己。你觉得你自己刨根问底的东西实际上在软件开发中不是你现在要理解的问题。就好像房子还不会建先去了解水泥的构成,有意义吗?你小学到大学学数学首先让你学的是加减法,你上来说1+1为什么等于2,你能学到东西吗?当你学到很多后才知道什么是数学大难点,解决1+1等于2这个解答需要什么样的知识。
既然找了师父,就要先保持谦虚谨慎的态度。先掌握师父知识,你才能质疑师父,你啥都不会质疑师父,哈哈,就好像小学生上来质疑1+1为什么等于2,你觉得大科学家给你解释,你能听懂吗?
这个老师态度还是不错的,如果是我,我说你去找哪本书,然后你找来后两眼一抹黑,然后就失去了软件开发的学习想法了。然后你就没然后了。我也是这么过来的,直到我遇到就业问题时才意识的自己浪费了2年时间,像个傻子似的。
你的那种求甚解的想法没问题,你师父那个追求快速出成果的思路也完全正确!
这个世界并不是非黑即白的。
我就两种想法兼有之。
上班的时候,项目里的工作,有时限,我会以最快出成果的思路去完成。甚至有时候弄好了不知道怎么好的,也不去深究,既然好了,就处理下一个任务。甚至有时候弄不好了,为了不影响整体进度,早早提出来,跟其他成员一起研究有没有什么不解决这个问题的迂回方案。总之,最终是服务客户,客户满意就可以。
类似你这种CSS的问题,解决不了跨浏览器问题,就看看能不能说服客户使用限定的浏览器,或者换一个设计。毕竟,技术永远是为非技术服务的。
然而,上班以外的时间,我比较喜欢自己做点小玩意儿。这时候没有工期限制,那就可以由着自己的性子,想挖多深挖多深。一个库的使用结果与自己预想不同了,我可以花几个月时间去查那个库的源代码,一点点读懂理顺……
CCS之类的一个概念不明白了,我可以去找官方标准文档(就是那种正常人基本看不懂的),慢慢理解研究…
一个算法搞不清楚了,我可以重新学数学……
为了搞懂一个工具的原理或者为了使用一个新的工具,我可以去学习一门新的编程语言……
反正没有工期限制,可以不计成本的无限深挖。往往都是自己觉得挖够了或者挖累了才结束。
所以,两者不矛盾。而且,我发现,自己业余时间挖过之后,上班时遇到的问题,很多都被我秒杀了,因为之前类似问题已经挖过了。
身边很多人惊诧于我什么都会,但他们不知道我在他们下班后吃烤串、撩姑娘的时候,乐在其中地挖那些不一定有用的东西。
所以,你喜欢把一个知识搞透,喜欢挖细节,我是支持的。但要在不影响他人和整体工作进度的前提下。
然而,我与你不同的是,当发现一个人——不论多厉害——无法提供我需要的帮助也不愿意讨论相关问题时,就不会继续与他纠缠了。
每个人有每个人的想法,每个人有每个人喜欢挖的东西。我喜欢挖技术细节,对明星八卦啥的,就完全没兴趣。要是有人非要跟我讨论明星八卦,哪怕讨论的是比尔盖茨和乔布斯是不是有基情,我也会觉得烦,觉得他无聊,觉得这些是没啥用的东西。很显然,这些绝不是没用的,至少很多自媒体就靠这种东西赚得比我还多。只是我不喜欢,不想了解这些知识,不想通过这些赚钱罢了。
你师父也是,我觉得他应该有自己喜欢深挖的技术领域,但绝不是CSS。那你继续跟他争这些东西,毫无意义。既不能帮你精进技术,也不能帮你解决问题,更不可能获得赞同。你收获到的,只有两个生命毫无意义的流逝和双方关系的恶化。
从你们的对话中,我觉得要不要深挖技术细节并不重要,你想挖,自己去挖就好了,去查资料或者再找个对CSS有兴趣的师父。学会求同存异,与不同的人讨论不同的事物。一个人学习的过程中可以有很多师父的,你看郭靖,就不会去跟江南七怪讨论吐纳心法和降龙十八掌,这是对师父的最基本的尊重。就你那聊天里的语气和态度,换我早就懒得教导你了,你给钱我都不干。明显的不信任我,我教你干啥?自己找添堵?
所以,你最大的问题,不是技术怎么学,而是怎么做人。加油吧!
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有