有没有能磨练自己bug技smb1的hackbug?

目前比较全面的浏览器CSS BUG兼容汇总
作者:佚名
字体:[ ] 来源:互联网 时间:04-01 01:55:38
从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.
对于web2.0的过度,请尽量用xhtml格式写代码,而且DOCTYPE 影响 CSS 处理,作为W3C的标准,一定要加 DOCTYPE声明. 其它请参考: 1.div的垂直居中问题& vertical-align:& 将行距增加到和整个DIV一样高 line-height:200& 然后插入文字,就垂直居中了。缺点是要控制内容不要换行。 2. margin加倍的问题&&&&& 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。 解决方案是在这个div里面加上display:&&&& 例如: &#div id=&imfloat&&&&&& 相应的css为&&&& #IamFloat { float: margin:5/*IE下理解为10px*/& display:/*IE下再理解为5px*/ }&& 3.浮动ie产生的双倍距离&&&&& #box{ float: width:100 margin:0 0 0 100 //这种情况之下IE会产生200px的距离 display: //使浮动忽略 }& 这里细说一下block与inline两个元素: block元素的特点是,总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素); Inline元素的特点是,和其他元素在同一行上,不可控制(内嵌元素);&&&& #box {& display: //可以为内嵌元素模拟为块元素& display: //实现同一行排列的效果& diplay:& } 4 IE与宽度和高度的问题 IE 不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。&&&& 比如要设置背景图片,这个宽度是比较重要的。 要解决这个问题,可以这样:&&&& #box{ width: 80 height: 35} html&body #box {& width: height: min-width: 80 min-height: 35 } 5.页面的最小宽度&&&& min -width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个&div& 放到 &body& 标签下,然后为div指定一个类, 然后CSS这样设计: #container{ min-width: 600 width:e-xpression(document.body.clientWidth & 600? &600px&: &auto& );}&&&& 第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。 6.DIV浮动IE文本产生3象素的bug&&&& 左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.&&&& #box{ float: width:800}&&& #left{ float: width:50%;}&&& #right{ width:50%;}&&& *html #left{ margin-right:-3 //这句是关键}&&& &div id=&box&& &&& &div id=&left&&&/div&& &&& &div id=&right&&&/div& &/div& 7.IE捉迷藏的问题&&&& 当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。 解决办法: 对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。&& 8.float的div闭合;清除浮动;自适应高度;&&& ① 例如:&#div id=&floatA& &&#div id=&floatB& &&#div id=& NOTfloatC& &这里的NOTfloatC并不希望继续平移,而是希望往下排。(其中floatA、floatB的属性已经设置为 float:)&& 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在 &#div class=&floatB&& &#div class=&NOTfloatC&&之间加上 & #div class=&clear&&这个div一定要注意位置,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。 并且将clear这种样式定义为为如下即可: .clear{ clear:}&&& 作为外部 wrapper 的 div 不要定死高度 为了让高度能自动适应,要在wrapper里面加上overflow: 当包含float的 box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。&&& 例如某一个wrapper如下定义: .colwrapper{ overflow: zoom:1; margin:5}&&& 9.对于排版 我们用得最多的css描述可能就是float:left.有的时候我们需要在n栏的float div后面做一个统一的背景, 譬如:&& &div id=&page&&&& &div id=&left&&&/div&&& &div id=¢er&&&/div&&& &div id=&right&&&/div&&&& &/div&&&& 比如我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的, 但是我们会发现随着left center right的向下拉长,而 page居然保存高度不变,问题来了, 原因在于page不是float属性,而我们的page由于要居中,不能设置成float, 所以我们应该这样解决:&&&& &div id=&page&&&&& &div id=&bg& style=&float:width:100%&&&& &div id=&left&&&/div&&&& &div id=¢er&&&/div&&&& &div id=&right&&&/div&&&& &/div&&&& &/div&&&& 再嵌入一个float left而宽度是100%的DIV解决之& 10.万能float 闭合(非常重要!)&&&& 关于 clear float 的原理可参见 [How To Clear Floats Without Structural Markup],将以下代码加入Global CSS 中,给需要闭合的div加上 class=&clearfix& 即可,屡试不爽.&&& /* Clear Fix */& .clearfix:after { content:&.&; display: height:0; clear: visibility: }&&& .clearfix { display:inline- }&&&& /* Hide from IE Mac */&&&& .clearfix {display:}&&& /* End hide from IE Mac */&&& /* end of clearfix */&&&& 或者这样设置:.hackbox{ display: //将对象作为块元素级的表格显示}&& 11.高度不适应&&&& 高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或paddign 时。&&&& 例:&&& #box {background-color:# }&&&&& #box p {margin-top: 20margin-bottom: 20 text-align: }&&&&& &div id=&box&&&&&&& &p&p对象中的内容&/p&&&&&& &/div&&&&&& 解决方法: 在P对象上下各加2个空的div对象CSS代码: .1{height:0overflow:}或者为DIV加上border属性。 12 .IE6下为什么图片下有空隙产生& 解决这个BUG的方法也有很多, 可以是改变html的排版, 或者设置img 为display:block& 或者设置vertical-align 属性为 vertical-align:top | bottom |middle |text-bottom 都可以解决. 13.如何对齐文本与文本输入框& 加上 vertical-align:& &style type=&text/css&&& &!--& input {width:200 height:30border:1vertical-align: } --& &/style& 14.web标准中定义id与class有什么区别吗? 一.web标准中是不容许重复ID的,比如 div id=&aa&&& 不容许重复2次,而class 定义的是类,理论上可以无限重复, 这样需要多次引用的定义便可以使用他.& 二.属性的优先级问题 ID 的优先级要高于class,看上面的例子 三.方便JS等客户端脚本,如果在页面中要对某个对象进行脚本操作,那么可以给他定义一个ID,否则只能利用遍历页面元素加上指定特定属性来找到它,这是相对浪费时间资源,远远不如一个ID来得简单. 15. LI中内容超过长度后以省略号显示的方法& 此方法适用与IE与OP浏览器& &style type=&text/css&&& &!-- li { width:200 white-space: text-overflow: -o-text-overflow:& overflow:&&&&& }& --&& &/style& 16.为什么web标准中IE无法设置滚动条颜色了 解决办法是 将body换成html& &!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Strict//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&&& &meta http-equiv=&Content-Type& content=&text/ charset=gb2312& /&& &style type=&text/css&&& &!--& html {&&&&&& scrollbar-face-color:#f6f6f6;&&&&&& scrollbar-highlight-color:#&&&&& scrollbar-shadow-color:#&&&&& scrollbar-3dlight-color:#&&&&&& scrollbar-arrow-color:#000;&&&&&& scrollbar-track-color:#&&&&&& scrollbar-darkshadow-color:#&&&&&& }& --&& &/style& 17.为什么无法定义1px左右高度的容器 IE6下这个问题是因为默认的行高造成的, 解决的方法也有很多 例如:overflow:hidden | zoom:0.08 | line-height:1px 18.怎么样才能让层显示在FLASH之上呢 解决的办法是给FLASH设置透明& ¶m name=&wmode& value=&transparent& /& 19.怎样使一个层垂直居中于浏览器中 这里我们使用百分比绝对定位,与外补丁负值的方法,负值的大小为其自身宽度高度除以2 &style type=&text/css&&& &!& div& {&&&&&& position:&&&&&& top:50%;&&&&&& lef:50%;&&&&&& margin:-100px 0 0 -100&&&&&& width:200&&&&&& height:200&&&&&& border:1&&&&&& }& --&& &/style&
1. Div居中问题 div设置 margin-left, margin-right 为 auto 时已经居中, IE 不行,IE需要设定body居中, 首先在父级元素定义text-algin: 这个的意思就是在父级元素内的内容居中。&&& 2.链接(a标签)的边框与背景 a 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。 参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位,& 若不设 height, 可以在 menubar 中插入一个空格。 3.超链接访问过后hover样式就不出现的问题 被点击访问过的超链接样式不在具有hover和active了 解决方法是 改变CSS属性的排列顺序: L-V-H-A& Code:& &style type=&text/css&& &!-- a:link {}& a:visited {}& a:hover {}& a:active {}& --& &/style&&&&& 4. 游标手指cursor& cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以&& 5.UL的padding与margin ul标签在FF中默认是有padding值的, 而在IE中只有margin默认有值, 所以先定义 ul{margin:0;padding:0;}就能解决大部分问题&&& 6. FORM标签&&& 这个标签在IE中,将会自动margin一些边距,而在FF中margin则是0, 因此,如果想显示一致,所以最好在css中指定margin和 padding, 针对上面两个问题,我的css中一般首先都使用这样的样式 ul,form{margin:0;padding:0;} 给定义死了,所以后面就不会为这个头疼了.&& 7. BOX模型解释不一致问题&&& 在FF和IE 中的BOX模型解释不一致导致相差2px 解决方法: div{margin:30px!margin:28}& 注意这两个 margin的顺序一定不能写反, important这个属性IE不能识别, 但别的浏览器可以识别。 所以在IE下其实解释成这样:& div {maring:30margin:28px} 重复定义的话按照最后一个来执行,所以不可以只写margin:xx px!&&&&& #box {& width:600 //for ie6.0\ - w\idth:500 //for ff+ie6.0}&&&& #box{& width:600px!important //for ff& width:600 //for ff+ie6.0& width /**/:500 //for ie6.0-}&& 8.属性选择器(这个不能算是兼容,是隐藏css的一个bug)&&&& p[id]{}div[id]{}&&&& 这个对于IE6.0和IE6.0以下的版本都隐藏, FF和OPera作用.属性选择器和子选择器还是有区别的, 子选择器的范围从形式来说缩小了, 属性选择器的范围比较大, 如p[id]中,所有p标签中有id的都是同样式的.&& 9.最狠的手段 - !&&&& 如果实在没有办法解决一些细节问题, 可以用这个方法.FF对于&!important&会自动优先解析, 然而IE则会忽略. 如下&&& .tabd1 {&&&& background:url(/res/images/up/tab1.gif) no-repeat 0px 0px ! /*Style for FF*/&&&& background:url(/res/images/up/tab1.gif) no-repeat 1px 0 /* Style for IE */}&&& 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过&&& 10.IE,FF的默认值问题&&& 或许你一直在抱怨为什么要专门为IE和FF写不同的CSS, 为什么IE这样让人头疼,然后一边写css,一边咒骂那个可恶的M$ IE. 其实对于css的标准支持方面,IE并没有我们想象的那么可恶, 关键在于IE和FF的默认值不一样而已,掌握了这个技巧, 你会发现写出兼容FF和IE的css并不是那么困难,或许对于简单的css, 你完全可以不用&!important&这个东西了。&&&& 我们都知道,浏览器在显示网页的时候,都会根据网页的 css样式表来决定如何显示, 但是我们在样式表中未必会将所有的元素都进行了具体的描述, 当然也没有必要那么做,所以对于那些没有描述的属性, 浏览器将采用内置默认的方式来进行显示,譬如文字, 如果你没有在css中指定颜色,那么浏览器将采用黑色或者系统颜色来显示,div或者其他元素的背景, 如果在 css中没有被指定,浏览器则将其设置为白色或者透明,等等其他未定义的样式均如此。 所以有很多东西出现FF和IE显示不一样的根本原因在于它们的默认显示不一样,而这个默认样式该如何显示我知道在w3中有没有对应的标准来进行规定, 因此对于这点也就别去怪罪IE了。 11.为什么FF下文本无法撑开容器的高度 标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的, 那我又想固定高度,又想能被撑开需要怎样设置呢? 办法就是去掉height设置min-height:200&&& 这里为了照顾不认识min-height的IE6& 可以这样定义: { height:auto! height:200 min-height:200 } 12.FireFox下如何使连续长字段自动换行 众所周知IE中直接使用 word-wrap:break-word 就可以了,& FF中我们使用JS插入的方法来解决& &style type=&text/css&&& &!-- div& {&&&&&& width:300&&&&&& word-wrap:break-&&&&&& border:1 } --&& &/style&& &div id=&ff&&这里是一行很长的文字aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&/div&& &scrīpt type=&text/javascrīpt&&& /* &![CDATA[ */& function toBreakWord(el, intLen) {&&&&&& var ōbj=document.getElementById(el);&&&&&& var strContent=obj.innerHTML;&&&&&& var strTemp=&&;&&&&&& while(strContent.length&intLen) {&&&&&&&&&& strTemp+=strContent.substr(0,intLen)+& &;&&&&&&&&&& strContent=strContent.substr(intLen,strContent.length);&&&&&& }&&&&&& strTemp+=& &+strC&&&&&& obj.innerHTML=strT& }& if(document.getElementById&& &&&& !document.all)&&& toBreakWord(&ff&, 37);& /* ]]& */& &/scrīpt&& 13.为什么IE6下容器的宽度和FF解释不同呢 &?xml version=&1.0& encoding=&gb2312&?&& &!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Strict//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&& &meta http-equiv=&Content-Type& content=&text/ charset=gb2312& /& &style type=&text/css&& &!--div& {&&&&& cursor:&&&&&& width:200&&&&& height:200&&&&&& border:10px solid red&&&&&& } --&& &/style&& &div ōnclick=&alert(this.offsetWidth)&&让FireFox与IE兼容&/div&& 问题的差别在于容器的整体宽度有没有将边框(border)的宽度算在其内, 这里IE6解释为200PX ,而FF则解释为220PX,那究竟是怎么导致的问题呢? 大家把容器顶部的xml去掉就会发现原来问题出在这,顶部的申明触发了IE的qurks mode,关于qurks mode、 standards mode的相关知识, 请参考:http: ///china/msdn/library/webservices/asp.net/ ASPNETusStan.mspx?mfr=true IE6,IE7,FF&& IE7.0 出来了,对CSS的支持又有新问题。浏览器多了,网页兼容性更差了,疲于奔命的还是我们 , 为解决IE7.0的兼容问题,找来了下面这篇文章: 现在我大部分都是用!important来hack,对于ie6和firefox测试可以正常显示, 但是ie7对!important可以正确解释,会导致页面没按要求显示!
下面是三个浏览器的兼容性收集.
& 第一种,是CSS HACK的方法&&&& height:20 /*For Firefox*/&&&& *height:25 /*For IE7 & IE6*/&&&& _height:20 /*For IE6*/&&&& 注意顺序。& && 这样也属于CSS HACK,不过没有上面这样简洁。&&&& #example { color: #333; } /* Moz */&&&& * html #example { color: #666; } /* IE6 */&&&& *+html #example { color: #999; } /* IE7 */&&
第二种,条件注释 &!--其他浏览器 &&&&&& &link rel=&stylesheet& type=&text/css& href=&css.css& /&&&&& &!--[if IE 7]&& &!-- 适合于IE7 &&&&&& &link rel=&stylesheet& type=&text/css& href=&ie7.css& /&&&&& &![endif]&&&&&& &!--[if lte IE 6]&&&&& &!-- 适合于IE6及一下 &&&&&& &link rel=&stylesheet& type=&text/css& href=&ie.css& /&&&&& &![endif]&&&&
第三种,css filter的办法,以下为经典从国外网站翻译过来的。 新建一个css样式如下:&&&& #item& {&&&&&&&&& width: 200&&&&&&&&& height: 200&&&&&&&&& background:&&&& }&&&&
新建一个div,并使用前面定义的css的样式:&&&& &div id=&item&&some text here&/div&&&&&& 在body表现这里加入lang属性,中文为zh: &body lang=&en&&&&&&& 现在对div元素再定义一个样式:&&& *:lang(en) #item{ background:green !}&&&&& 这样做是为了用!important覆盖原来的css样式,由于:lang选择器ie7.0并不支持,所以对这句话不会有任何作用, 于是也达到了ie6.0下同样的效果,但是很不幸地的是,safari同样不支持此属性,所以需要加入以下css样式:&&&& #item:empty {background: green !important&&& }&&&&& :empty选择器为css3的规范,尽管safari并不支持此规范, 但是还是会选择此元素,不管是否此元素存在,现在绿色会现在在除ie各版本以外的浏览器上。&&&& 对IE6和FF的兼容可以考虑以前的!important 个人比较喜欢用第一种,简洁,兼容性比较好。
大家感兴趣的内容
12345678910
最近更新的内容通过「刻意练习」,你才能成为顶尖的程序员 ? Ruby China
本帖已被设为精华帖!
作家格拉德威尔在《异类》一书中指出:
人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。
他将此称为「一万小时定律」。
要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。
如何打破无休止的加班?
在中国,IT 行业普遍加班严重,先不说行业特征与企业文化。
就我最近面试的经验来看,很多程序员的开发效率实在是低到不忍直视。
所以「效率」是一个导致加班的重要因素。
如果你效率高,但迫于企业有加班的文化,你完全可以用加班的时间来学习一些新的技术,进一步提高自己的效率。
效率低会引起下图的怪圈:
效率低 -& 无法按时完成工作 -& 加班 -& 没有时间练习 -& 效率越来越低。
要打破怪圈,有效的办法就是「刻意练习」,从此进入一个正向循环:
效率高 -& 提前完成工作 -& 练习提升 -& 效率越来越高。
别把工作当练习
演员在台上的表演算是练习吗?球员在比赛场上算练习吗?不算。
那么对程序员而言,工作上做项目算刻意练习吗?
我以前以「能边学边做」为荣,API、语法之类的没必要看,反正我们有 Google 和 Stack Overflow 嘛。
直到我参加了 Hackthon 之后改变了这个观点。在极短的时间内,要把一个创新的想法,用技术手段实现出来。
这个时候如果你还在查某个接口应该怎么用,某个语法应该怎么写,能竞争得过别人吗?
现实工作中何尝不是如此?商业竞争如此激烈,假设你要做个推荐系统,你是找做过的来做,还是边学边做?
所以我认为练习应当发生在工作之外,一旦上了战场,不是你死就是我活。
怎样练习才有效?
并不是所有的练习都是有效的,没找准地方,只是在浪费时间。
比如,我用吉他弹一首曲子时,某个小节老是弹不好,我就会单独把这一个小节拿出来重复练习,而不是把整首曲子一遍一遍地重复练。
专家研究表明,只有在「学习区」练习才最有成效。
我们应当走出舒适区,多在学习区练习,将其变成舒适区;
接触恐慌区,将其慢慢变成学习区。
这样才能避免原地踏步,持续提高。
程序员怎么练习走出自己的舒适区
首先要走出自己的舒适区,接触一些不熟悉的技术领域。比如后端很熟悉了,去写写前端试试。Web 很熟悉了,去写移动端试试。
业务开发很熟悉了,去研究一下搜索,推荐系统,大数据试试。OO 很熟悉了,玩 FP 试试。
老守着自己会的那点儿东西,总有一天会坐吃山空。
发现自己的不足
有以下方式:
Code Review
参加编程道场
没有对比,很难发现自己的不足,所以把自己的代码和编码过程展示出来,一定会发现许多可以改进的地方。
只有菜鸟才会觉得自己特别牛,因为物以类聚,他的圈子里全是菜鸟。
你越牛,接触的圈子也越牛,你越会觉得自己渺小。
程序员练什么?
程序员要练习东西很多,一些基本功如下:
Clean Code
没时间不是借口
我第一次组织 Code Retreat 的时候,到 QQ 群里宣传活动,结果得到的是嘲讽:
周末还在写代码,肯定是?丝。
很多人没有时间练习,却有大把的时间打 LOL,大把时间在群里吹水,大把时间讨论楼市股市。
当然,人都有选择自己生活方式的权利,并没有谁对谁错。
说这么多,只是希望真正热爱编程的同学们知道,只有通过刻意练习,才有可能成为顶尖的程序员!
这个社区里,我们会组织 Code Review,Code Retreat,Coding Dojo。
希望我们一起成长,成为顶尖的程序员!
非常认同这套方法学。
谢谢国宁!希望经验丰富的前辈多分享一些成长的经验,让后人少走一些弯路。
说的很中肯
我以前也总是这么认为:
我以前以「能边学边做」为荣,API、语法之类的没必要看,反正我们有 Google 和 Stack Overflow 嘛。
但等到类似Hackthon这种情境的时候就完全萎了..萎了...萎了...好嘛.....
而且我觉得不光是作为程序猿,不论是做什么都是这个道理。勤练,多学,不要老加班、加班、加班 。
说实话,我第一遍看这篇文章也是觉得非常赞同的,但是静下心来想一想却又觉得有些不妥,不妥不是因为论点----一万小时定律这个说法是没有问题的,让我觉得不妥的是论述的依据和背后的驱动因素。
一万小时、走出舒适区、不断练习、程序员需要练习的东西……这些都很好,但我始终觉得加班和Hackthon这两件事情不太适合用来驱动自己去达成上述的论点或是目标。
先说加班的事情,加班是一种现象,在国内特别是初创型企业和那些把加班当成是“企业文化”的公司里屡见不鲜。但是【效率是导致加班的重要因素】这个观点有待商榷。我不否认有一部分非受迫性加班是由于自己的效率不够高的缘故,但我觉得这是非常小的一部分。
我仔细回忆了一起共事过的同事们,只要大家不是太陌生(比如新来的),那么各自的水平有几斤几两彼此之间应该是心知肚明的,所以在单位时间内各自能做完多少事情能做到什么程度也是可以估计出来的。于是问题就来了:如果这个是可以度量的(哪怕不够精确,但大致有数),那为什么还要把工作安排成非加班不可?
这就好像你做一个老师,却不是因材施教;做一个厨子,却不会看菜下饭;做一个领导,却不会因势利导……你不看生产力现状如何却总是一味的以主观倾向来调配资源和安排计划,怎么可能不加班?因为这种情形而加班的,本来人的心情就很不愉快,能够调整自己积极应对固然是好事,可这种事情却只能期待而不能指望。
如果因为不能正确评估生产力水平而错误的安排计划和调度资源从而产生了无休止加班赶工的恶性循环,这是项目/工程管理的问题,而不应该简单的归咎于从业者效率不够高,更不应该以此为驱动因素去要求从业者主动地忘记加班带来的身心负面影响并且还要发挥主观能动性去提高自己的效率。
反之,如果能够正确的评估和安排计划,在现有生产力的基础上实现不加班并且合理有效的完成计划,那样就可以先杜绝加班或是少量的加班。在此基础上通过激发员工的成就感等方法来唤醒他们希望自我提升的意识并且给予合适的培训和学习环境,那么才真正有希望做到自主自发的去提高每一个人的效率,进而提高团队的生产力……这才是良性循环。
对此我只能说:意图是好的,但是用错了激励方式或引导方式。我想这大概是不同的人对“以人为本”的不同理解吧。
Hackthon 这种活动我没有亲身参与过,其实并没有什么有分量的发言权,不过这种活动形式倒是让我联想到了自己所熟悉的音乐创作。音乐创作在很多地方都和编程开发有相似之处,你看大部分的产品都需要时间精心打磨,本质上这和一万小时定律是一样的,但是由于产品的特殊性(需要市场考验),所以它也有 MVP 这样的快速迭代的创造形式。音乐也是如此,一首名作必然是经历反复推敲打磨才成型的,但由于音乐本身也具有特殊性(比方说舞台上会需要即兴演奏),所以你也得学会和练习一些“套路”……我不知道这种对比是否能让大家 make sense,组过乐队写过歌的人应该能有所体会。
但我真正想说的是,那些历经一万小时锤炼而成的大神们,他们的初始动机绝非是为了在 Hackthon 上能够游刃有余;正如同那些音乐领域里的大师们,他们磨练自己的技艺也并非只是为了应付舞台上的即兴表演。
当然了,因为经历了 Hackthon 或是即兴表演从而认识到自己的不足,进而知道需要刻苦练习,这本身是一件好事。然而有些事情不能因果倒置,迷失了初心的话倒有可能又走一些弯路也说不定的。
另外,一万小时究竟应该练什么我觉得是要因人而异的,好的老师都会因材施教,所以不是一套方法总是适合所有的人。我自己经常看大神们的视频,实际上大神们也总是会去查 API 文档的,我无数次在各种视频里见证过这些东西,所以……
总之,观点没问题,论述的依据和方法个人还是觉得没走到点子上。
502 Bad Gateway
认同楼主观点, 学习一定要刻意地去学习才会进步快些,
只是拿来用,
没有自己的想法就很难突破.
不好意思,早上出了点故障,现在恢复了。
9楼 已删除
很喜欢你这样深入的思考,赞!
我认为加班主要有几种:
企业文化 - 加给老板看
项目管理计划能力不足
产能跟不上
前两种可以单独写一篇。
我这篇文章主要说最后一种情况:产能跟不上,除了优化工作流程,比如引入自动化减少手工重复操作等。另一个就是提高每一个个体的生产力。
后边 Hackthon 的部分是这样理解的:创业就像是一场时间长一些的 Hackthon,在工作中应该用自己熟悉的技术,才能把精力都花在业务上。
如果用新技术,应该用业余时间去练习。
所以不再以自己能边学边做感到自豪,反而上班时间应该尽量做在自己舒适区的事。
说一个实例,去年我在一家客户那里做顾问时,他们的团队周六加班,我们加了两次后就给他邮件说:「我们要用周末时间来学习,来保证上班的时间最高效」。印度的 CTO 表示很理解。
很多人没有时间练习,却有大把的时间打 LOL,大把时间在群里吹水,大把时间讨论楼市股市。
这才是工作的动力啊
新人表示很受鼓舞。
&一万小时天才天才理论&
书单已更新
其实,这帖子可以总结成一句话:书到用时方恨少
确实要抽出时间学习,不然就只是不断在comfort zone里面燃烧已有技能而已。
学习一定要刻意地去学习才会进步快些,
比如写个纸牌类游戏,我往往喜欢在写好既定的规则后自己再凭空想几个规则(给自己找坑,不符合常理的那种),然后再去思考,试着去完成,这算是么?可事后我想想,感觉有点变态啊 /(ㄒoㄒ)/~~
太赞了!已加入
恩,那三个圈的理论很赞,学习区是最有收获的
楼主觉得刷算法题算是“练习”吗?
"人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。"
应该是不一定天资超人,也付出了不断的努力。
这文看着很新东方
coding style是rubychina的同胞兄弟啊
走出舒适区,除了扩展自己知识技能的广度外,深度也是非常重要的。文章的建议还是很中肯的。
楼主所写我都同意,我补充一点儿楼主忽略的。
其实任何行业,首先刻意练习,然后再去工作,都比边学边练效率要高很多。我是程序员,平常真正能刻意练习的机会其实并不多。我们大多数都是在自学,而且还对自学引以为傲。也有观点认为优秀的程序员都是自学出来的,教是教不出来的。我以前也是这么认为,虽然看过《异类》,但还是没有直观的体验,直到我开始跑步,健身,后来加入健身工作室(有专业教练一对一指导)。我才明白什么才是真正的刻意练习。很多动作,你以为自己做得好完美,其实全错了,而正确和错误的差别只是一点点。你自己练,可能练一段时间可以感觉的到不太对,也可能一辈子都不知道。而专业教练,一进屋看你第一眼就知道你哪里做错了。
书里说的很清楚了。
首先,要有针对性,就是说你哪里弱,哪里需要提高,就练什么,而不是我高兴练什么,对什么有兴趣我就练什么。比如你热爱篮球,那就要练弹跳,你不能说我只喜欢打篮球,不喜欢练弹跳,所以就不练了。
其次要有人提示你哪里不好,哪里需要纠正,这个恰恰是程序员缺乏刻意练习的原因。其他行业可以聘请教练,或者有师傅带你入门,程序员就很难,大多都是自学。结对编程也是极少数。而且结对编程也还是需要你主动向别人学习,跟教练会主动纠正你还是不一样。个别公司可能有师傅带领徒弟的制度,但是也只是指导,真正善于纠正的也很少,毕竟人家是程序员,不是程序员教师。
最后就是大量的重复,这个是程序员最不缺的。可是没有前面两条作为前提,最后这一条大量重复,其实只是低效的甚至无效的机械重复而已。就好比,我爸给我家做饭,做了20年也还是不如专业厨师去新东方学4年的水平。就好比我们几个每周打羽毛球3次,打了2年,我弟弟暑假去羽毛球班学3个月就秒杀我们了。
总结下,要想大规模提高程序员的水平,需要有专业的程序员教育人员。这个全世界目前还是没有。国外比我们情况好的原因只是国外的初高中及大学教育比我们情况好些,毕竟大学的教育从某种程度起到了程序员教育人员的部分作用,但是还远远不够。
谢谢回复!
我还没有看《异类》这本书,准备看看。
我们经常讲关注点分离,其实写代码的时候应该在技术和业务之间只选择一样。
写业务的时候就不要被技术影响,某个 API 不熟悉了,开发工具配置不健全了等等。
写业务的时候专注业务,开发效率才高,质量才好。
非常同意关于健身和羽毛球的论述,自己是很难发现自己不对的,而教练一眼就能看出来。
其实我们去游泳班,羽毛球班学习,一次课 2 小时,10 次课肯定把重要的东西都学完了,然后就靠自己练习了。
但人往往不愿意练习,比如我觉得篮球好玩,你让我去练习弹跳,我就觉得没意思了。
但我们没有那么多时间精力,成为所有领域的「专家」。
所以我认为要折中一下,花 20 小时刻意练习,学完最重要的东西,就能成为「业余」玩家,比许多「玩」了多年的玩家都要厉害。
我准备在 2016 年尝试学习多个陌生的领域,在 20 小时的时间内看能学到什么程度。
我希望能总结出「快速学习一项技能」的方法和工具。
算啊,算是对算法的刻意练习。
我想从另一个方面说说, 虽然各行业领域都需不断学习攀登, 却也未见如程序员这一行, 技能淘汰的如此之快, 新技术又如潮水般一波波袭来. 学习, 对于天性好奇又好学的程序员, 也仿佛渐渐地成了种压力.
我觉得刻苦一词是对一段经历的总结和评价, 不该是一个方向和目的. 因为以刻苦作为方向和目的, 对于凡体肉胎的人类来说, 实在是很难做到的. 论坛里的各位, 当年写下第一个 basic 程序,艳惊四座的时候, 我想当时并没有觉得有多刻苦, 尽管你已坐在那台386前已足足好几个小时.
对于周而复始一波波袭来的浪潮, 只有一种人是毫不恐惧和绝望的, 那就是冲浪者.
不忘初衷, 保护那宝贵的兴趣, 我觉得实在很重要. 比刻苦更重要.
这篇文章真的很赞! 不过程序员要练习东西我觉得除了MASTER一门语言、掌握算法和工具、系统架构外,文档也很重要。因为一个程序员无论再NB也无法一人扛下所有的事情,而且现在随着GITHUB的火热,让别人能看懂自己的代码、明确而清晰的表达,文笔功底也非常重要。因为人在用程序语言和机器交流的时候也需要和人交流嘛。正如RUBY之父那样,他不但写代码而且还发表文章(《代码的未来》一书真的值得一看)。 Hackthon 的目的是让你在有限的时间内完成你的项目,怎么说也是团队活动嘛,所以沟通、交流顺畅了,很多问题问题自然会达成一致,任务自然会非常顺利。不仅仅是Hackthon,大型项目也是一样哦。
以上只是我个人的一点浅见,如有啥错还请多多包涵!
是啊,多少人因为兴趣而开始写代码,却因为工作压力大而慢慢失去了创造的乐趣,编程技能变成了一个混口饭吃的工具。我正在做一个小众社区,正是想帮助程序员能持续保有初心,享受编程的乐趣。
认同「对程序员而言写作能力很重要」,我认为写文章与写程序员是非常相似,写一本书就像做一个产品。要考虑用户是谁,用户有什么问题, 你的书能提供什么价值,用户是否会选择你的书,是否愿意付费。也需要考虑书的架构,也有耦合,依赖的关系。我认为文笔不好,代码也不会很好。逻辑清晰,排版整洁的人代码也会清晰整洁,这是一种习惯。
不过我们更倾向于写自表达的代码(不需要用额外文字来解释),用测试用例来沟通。
赞、学习了
说的太好了.
文中说到音乐创作,可有作品供学习一下.
总结两点:
具备这两点,基本上都能成功!
图解的那个关于舒适区和学习区,给我蛮大的启发和刺激,现在的自己就有点在舒适区待着的的感觉,因为公司业务驱动最近才开始学习接触react,但是心里还是有些许的不满。看到这篇文章后,倒是重新提醒自己,不在能学习的年纪就去偷懒了
创意性的工作不适合一万小时理论,over.
成为优秀程序员的前提是自己拥有良好的兴趣爱好,所谓的“刻苦”和“练习”,不过是一个在不然不过的过程了,完全像一场心灵之旅,何苦用这么贬义的词语来概括这么一个快乐的过程?
文中一个观点不是很同意。
首先要走出自己的舒适区,接触一些不熟悉的技术领域。比如后端很熟悉了,去写写前端试试。Web 很熟悉了,去写移动端试试。
业务开发很熟悉了,去研究一下搜索,推荐系统,大数据试试。OO 很熟悉了,玩 FP 试试。
老守着自己会的那点儿东西,总有一天会坐吃山空。
程序员现在总体水平低下,主要是因为技术深度不够,而不是知识面不够宽。程序员中能说出各种框架、各种数据库的大有人在,也都能简单用API实现功能,但这样的程序员有什么用?不够精通和熟练,如何能够保证软件的稳定性。
而精通和熟练不是通过结对编程或者看《设计模式》这种没有营养价值的书所能提升的。要提升程序员的能力,必须要熟练计算机科学中那些基础的东西,而这些东西就是我们在学校里所学的数据结构、算法、操作系统、编译原理等,而这些东西是大多数程序员最不愿意看的,因为这些知识,需要通过长时间的阅读、思考和练习才能获得。
严重同意楼主的说法,对程序员来说练习是必须的,所以我和小伙伴们一起做了一个创业项目,在这里:
很喜欢看你的评论,属于心直口快的那种。个人认为这就是最有效的交流方式,客观,直接。
不过对于下面这句话表示不能完全赞同:
但我始终觉得加班和Hackthon这两件事情不太适合用来驱动自己去达成上述的论点或是目标。
首先这句话表达得比较笼统,没有表明中间的一些关系。其次博主并没说加班和Hackthon就是驱动。
先来理下各种关系,加班和低效率的关系
在中国,IT 行业普遍加班严重,先不说行业特征与企业文化。
就我最近面试的经验来看,很多程序员的开发效率实在是低到不忍直视。
所以「效率」是一个导致加班的重要因素。
如果你效率高,但迫于企业有加班的文化,你完全可以用加班的时间来学习一些新的技术,进一步提高自己的效率。
这是博主的原文,这里其实说明了导致加班的因素有两点,一是企业文化,而是低效率。所以说低效率并不代表绝对会加班。那么接下来博主这句话:
效率低会引起下图的怪圈:(配图参考原文)
就是一个不合理的陈述!
说到这里,怪圈出来了。接下来博主开始论述他破解怪圈的方法,这个方法就是刻意学习。但是博主提出这个方法的时候并没有说我要在什么时间去刻意学习。接下来博主开始根据自己Hackthon的经历来告诉读者,最好不要在工作时间来刻意学习,因为他认为这是战场,是需要高效工作的地方。那么言下之意就是你需要通过刻意学习来破解怪圈,但是你最好不要在工作时间来这样做。
所以,博主的论点或是目标或是刻意学习的方法针对的是怪圈,而不是加班或Hackthon。
而怪圈的产生需要满足的条件就是你工作效率太低导致了你经常加班,进而导致占用了你的学习时间,跟Hackthon没任何关系,而加班也仅仅是怪圈中的一环。
其实我看不太清楚你的意思----不是说你说的不清楚,我只是不知道你想表达的观念是什么。
我索性把我的观念说的简单明确一点吧(当然只能代表我自己,并没有对错之分):我学习(我认为练习就是学习的一个组成部分),既不是为了提高效率以避免或减少加班,也不是为了应对类似 Hackthon 这样的特殊场景,我学习就是学习,如果说为了什么,那就是为了满足好奇心和求知的欲望,我是一个纯粹主义者。然而话说回来,我认为像我这样去学习也足以满足避免或减少加班以及应对类似 Hackthon 等特殊场景的需求,只不过它们不是最原始的动机(就是我说的驱动因素),它们只是学习带来的增益效果。
可能对于一些人来说,减少加班或应对 Hackthon 会是非常好的驱动因素(这是很正常的事情,我不觉得是错误),我读第一遍的时候甚至都不觉得哪里有不妥(这种不妥不是针对所有人的),只是当我开始回顾自己的学习历程时才意识到:对于其他一部分人来说(比如我),学习可能是另外一种感受,用来驱动的因素可能会更抽象一些(而不是像加班或 Hackthon 这么具体的东西)。
所以请原谅我之前表述不够清晰,我认为的不适合仅仅是从我的角度来说罢了,不具有普遍性。其实我都不打算去解释这一点,因为我向来都觉得理解的人自然理解(因为是一类人),不理解也没有关系,因为学习本身就是蛮自我的一件事情。就是这样。
好文章,现在有个困惑,程序人生有没有终点?大家怎么看老程序员?是不是该转行?
我的上一家公司还挺多「老」程序员的。
很想知道有没有ruby 或 rails 相关的,可以自我练习的网站。topcoder之类,感觉难度非常大,都是些复杂度很高的算法。
逻辑真是严密。
提出 Hackthon 只是一个隐喻,我目前是在创业,所以「工作」对我而言就是一场「时间稍长」的 Hackthon,所以想说工作是在上战场,在上场之前是要练习射击和拼刺刀的。
据统计,80后的程序员没有活过40岁的。
人生当然都有终点了,只要能持续进步,提高自己,总是有竞争力的。
当然越底层(OS,算法),变化越小,越上层(比如 Android,iOS,前端)变化越快,就看个人兴趣了。
不管怎样,个人认为只要干的是自己喜欢的事情就好。
我只是说学习可以打破因效率低而导致加班的怪圈,并没有说学习「只是」为了打破加班的怪圈哈。
另外,我所说的学习和刻意练习还不一样,举个栗子:
Rails 5 刚出来,恰逢周末,leader 说小王你周末研究一下,下周我们把系统升级了吧。
小王有两种做法:
一、周六研究了一下新 feature,知道个大概,然后就开心地打 LoL 去了;周一去公司,一边做一边查,搞到半夜,搞定了;
二、在周末把每一个用到的新 feature 练到烂熟,在本地尝试升级,直到熟练;周一去公司一遍搞定,早早收工回家休息。
第一种情况下 Leader 和同事们会觉得小王工作真努力,第二种情况下 Leader 和同事们可能会觉得小王真靠谱,真牛B。
不知道这样说有没有表达清楚?
同意你的观点。深度和广度取决于个人兴趣了,有人喜欢钻的深,有人喜欢什么都会一点,但并不能说后一种没有用。往往创业公司更喜欢的是后一种,除了有核心技术能力的技术驱动型的公司,一般的公司还是业务驱动,前期都是 CRUD,后期才需要技术专家。
多谢鼓励,其实30多岁,乃至40多岁的人,和二十多岁的人比,是存在很多想法的,或者更渴望向着自己的奋斗目标前进,而不是当一个码农。然而,这也取决于个人兴趣,估计老外有很多一大把年纪,还在专注编码的人,老龄化,或许也是国内程序员们的现状。
磨刀不费砍材功. 要刻意磨刀.
对时间驾驭的训练会加速学习的方法获得
后方可回复, 如果你还没有账号请点击这里 。
共收到 53 条回复

参考资料

 

随机推荐