必威体育下载基督教Heilmann

您当前正在浏览播放尼斯类别的档案。必威体育简介

“PlayingNice”类别的存档

在大公司工作的乐趣和危险

星期六,2月9日,2008

这不是技术岗位,但我已经思考了一段时间,它与我在这里看到的许多评论和电子邮件有关。我想总结一下在大公司工作的感觉,非常公开的公司,以及我的观点和影响范围。
最近我有很多关于这个的问题,而不是一遍又一遍地重复,betway体育官方网我借此机会写一篇参考文章。

在开发人员的职业生涯中,有一段时间你会进入公司的高层。大多数情况下,这是因为您的表现和对公司的奉献精神,以及您所在的更广阔的市场,以及您已经向自己证明了您是一名优秀的开发人员和团队成员。

Web开发是一个非常年轻的职业,我们确实会犯以前在其他职业中犯过的所有错误。但有一件事是可以肯定的:你需要睁大眼睛,随着市场的变化而滚动,才能成功。如果你接受你的工作,并且网络是一种新媒体的事实真的很严肃,这意味着你需要检查未来的技术和想法,就像交付当前的技术和想法,以充分满足。

如果你做了这几年来,摸摸你的额头麻木运行对墙试图让这个想法通过人们的主要关心的是赚到足够的钱能够支付工资和其他公司费用你有两个选择:开一个自己的公司,咨询他人或尝试加入市场中的大玩家。

前两个国家的财政状况不明,压力很大。第二件事也伴随着你的决定,放弃你的一些奉献,因为你不能过度交付。你咨询,你发票,你希望他们好转,然后你就去做下一份工作。你知道该怎么做,但你几乎没有机会真正实现它。

后者——面向未来,没有麻烦的已成立公司——有很多积极因素:

  • 你所在的公司已经存在一段时间了,你知道如何对待员工,这样他们才能有所作为(这意味着人力资源问题得到了解决,薪酬也没有问题)
  • 您所在的公司已经有很多开发人员在为其工作,您不必开始理解良好it支持的价值。这包括获得足够的硬件,在需要的时候,而不是在符合预算的时候,进行正确的软件和升级。
  • 你将超越你最狂野的梦想——数以百万计的用户——并学习你从未认为有必要的交易技巧,而这正是你想要为所有这些人提供一个伟大体验的时候。必威体育下载
  • 你有机会与技能高超的人共事——你读过他们的书,想知道他们是如何想出这样的好点子的。
  • 你可以向那些你一直想要一起工作的人求婚,然后你会发现这是有预算的!
  • 你会发现公司里有些部门研究的技术和想法虽然不能立竿见影,但在未来会成为巨大的财富。你甚至会因为向他们提出一些想法而获得荣誉甚至更多。
  • 你可以从已经在这必威体育下载个联盟打了很长时间的人们的大量经验中学习。
  • 你可以得到公司的津贴(免费食物,廉价的硬件,健身房,卫生保健等等。

所有这些都会让你快乐,但也有不好的一面,也是。

  • 你是个极客,甚至可能有一个“场景”的背景,你在很多人的眼里“出卖给那个人”,他们以前视你为一个平等的人。
  • 人们期望你有巨大的改变,你不得不忍受许多“被同化”的“半开玩笑”的评论,“加入母舰”等“聪明”言论。
  • 每当你谈论你公司的产品时,人们会比你在加入公司之前说的更不认真。“当然你说这很好,他们付钱给你。
  • 你将对你的公司所做的一切负责,无论离你的专业领域有多远,甚至地点有多远,它都会发生。
  • 判断你的不是发生的好事情,而是公司生产的低质量的东西——捅巨人并证明你可以做得更好是很有趣的(同时忘记巨人必须支持你不必这么做的依赖性)。
  • 很自然,你会被认为对公司发生的所有事情都有洞察力,并且可能详细地告诉人们可能想知道的一切。
  • 如果有人希望你为他们工作(比如在会议上发言),你的公司会很乐意为你支付旅费和住宿费,而不是希望你为他们工作的公司。
  • 你应该和公司里最富有的董事一样富有,因为所有的货物都是平均分配的,对吧?
  • 你将知道投资什么股票,因为你的公司在华尔街是个大公司。
  • 你可以在你的公司给任何人找份工作,即使他们根本不知道自己到底想做什么,或者能把什么带到桌子上。

这些都不是什么大问题,你可以耸耸肩,但令人惊讶的是,每天都有这么多这样的事情发生。

因此,以下是我对我的公司及其未来所做的和了解:

  • 我是一名网络架构师,对于使用内部工具构建web站点的人来说,提供关于前端web开发的建议非常重要。
  • 我是一个团队的成员,这个团队的工作是定义交付给前端web事项的标准。
  • 我正在开发内部工具,以便更容易跨不同产品重用代码和组件。
  • 我建议人们雇佣和面试其他从事web开发工作的人
  • 我是我们开发图书馆的欧洲分部,可以提供相关信息和讨论
  • 我是一个可以谈论所有面向公众的API的演讲者,我们为外部开发人员提供库和组件
  • 我是一名内部培训师,负责网络开发和人际互动(可访问性,为网络写作…)
  • 我正在审核欧洲的内部代码和产品,亚洲有时还有美国
  • 我经常与美国的团队交谈,以确保我们的标准与他们的想法相一致,并将成为全球标准。
  • 我和大学谈论黑客时代,挑战和其他学术事件。
  • 我留意球队在欧洲和世界各地,确保开发人员很高兴和能为他们做一份好工作——消除障碍和说话人的想法为web开发人员意味着大量的工作没有多少收获。
  • 我联系其他人在同一位置和人力资源和公关,以确保我们有一些流程,将确保我们在未来可以雇佣好人,给潜在的新开发人员了解什么是像我们这样的大型站点的开发人员。
  • 我与后端团队进行了沟通,以确保我们能够顺利地一起工作,并拥有共同工作的方法。

这是很多,它让我忙着处理我最关心的事情——让网络冲浪者受益的酷炫技术,并赋予那些想要构建这项技术的人权力。

简而言之,我和开发人员谈了很多,他们的管理者和外部人员对我们的技术进行了了解,以确保我们能够提供好的产品,并在尝试新想法时获得乐趣。

这就是我在公司所知道的一切。别的,我冒昧地猜测你比我更了解!

在将脚本交给下一个开发人员之前,需要对脚本做五件事

星期四,2月7日,2008

让我们面对现实:没有太多开发人员计划他们的javascript。相反,我们快速写出一些有用的东西,并提交它。随着时间的推移,我们得到了变量和函数的名称,最后我们知道我们再也不用看到这一小段脚本了。

当我们再次看到脚本时,问题就出现了,或者我们从其他开发人员那里得到脚本,它们是用同样的方式建造的。这就是为什么当说“这已经完成了,我可以继续下去。

假设我们的工作是在div在类的文档中可折叠的它会显示和隐藏div。首先要做的是使用一个库来解决跨浏览器事件处理的问题。我们暂时不把精力集中在这一点上,而是使用老式的事件处理程序,因为我们在这里讨论的是不同的东西。使用模块模式,我们可以用几行代码创建类似这样的功能:

折叠器= 功能(){
  var=文档。getElementsByTagName(“div”)
  (var=0&lt秒。长度+ +){
    如果((]类名索引(可折叠的)!=1){
      varp=文档。createElement(“p”)
      var=文档。createElement(“一个”)a.setAttribute(“HREF”“#”)a.onclick = 功能(){
        var证券交易委员会= parentNode下一步
        如果(秒。风格显示 = = “没有”){秒。风格显示 = “块”
          初生子女nodeValue = “崩溃”
        } 其他的 {秒。风格显示 = “没有”
          初生子女nodeValue = “扩大”
        }
        返回 
      }a.列表末尾(文档。创建节点(“扩大”))P.列表末尾()(]风格显示 = “没有”(]parentNode方法(p(])
    }
  }
}()

这已经相当干净(我相信您已经看到了使用javascript: links的innerHTML解决方案),但有些事情不应该存在。

步骤1:去除外观和感觉

要做的第一件事不是在JavaScript中操作样式集合,而是将外观留给它所属的位置CSS。这允许轻松地剥皮和更改隐藏部分的方式,而无需在JavaScript中进行修改。我们可以通过赋值a来实现CSS类并将其移除:

折叠器= 功能(){
  var=文档。getElementsByTagName(“div”)
  (var=0<秒。长度+ +){
    如果((]类名索引(可折叠的)!=1){(]类名 + =  + “崩溃”
      varp=文档。createElement(“p”)
      var=文档。createElement(“一个”)a.setAttribute(“HREF”“#”)a.onclick = 功能(){
        var证券交易委员会= parentNode下一步
        如果(秒。类名索引(“崩溃”)!=1){秒。类名 =秒。类名代替(“崩溃”'')
          初生子女nodeValue = “崩溃”
        } 其他的 {秒。类名 + =  + “崩溃”
          初生子女nodeValue = “扩大”
        }
        返回 
      }a.列表末尾(文档。创建节点(“扩大”))P.列表末尾()(]parentNode方法(p(])
    }
  }
}()

步骤2:消除明显的速度问题

这个脚本中没有很多问题,但是有两件事是显而易见的:for循环在每次迭代中读取secs集合的length属性,我们为每个链接创建相同的匿名函数来显示和隐藏该部分。在另一个变量中缓存长度并创建一个可重用的命名函数更有意义:

折叠器= 功能(){
  var=文档。getElementsByTagName(“div”)
  (var=0J=秒。长度<J+ +){
    如果((]类名索引(可折叠的)!=1){(]类名 + =  + “崩溃”
      varp=文档。createElement(“p”)
      var=文档。createElement(“一个”)a.setAttribute(“HREF”“#”)a.onclick =切换a.列表末尾(文档。创建节点(“扩大”))P.列表末尾()(]parentNode方法(p(])
    }
  }
  功能切换(){
    var证券交易委员会= parentNode下一步
    如果(秒。类名索引(“崩溃”)!=1){秒。类名 =秒。类名代替(“崩溃”'')
      初生子女nodeValue = “崩溃”
    } 其他的 {秒。类名 + =  + “崩溃”
      初生子女nodeValue = “扩大”
    }
    返回 
  }
}()

步骤3:从函数代码中删除每个标签和名称

这在维护方面很有意义。当然,当标签名或类名必须更改时,很容易进行快速搜索+替换,但这其实没有必要。通过将所有人类可读的东西移动到一个自己的配置对象中,您不必搜索代码,也不必遭受搜索+替换错误的影响,而是把所有变化的比特和波束放在一个地方:

折叠器= 功能(){
  var配置= {指示器类 可折叠的塌陷阶级 “崩溃”collapseLabel “崩溃”扩展标签 “扩大”
  }
  var=文档。getElementsByTagName(“div”)
  (var=0J=秒。长度<J+ +){
    如果((]类名索引(配置。指示器类)!=1){(]类名 + =  +配置。塌陷阶级
      varp=文档。createElement(“p”)
      var=文档。createElement(“一个”)a.setAttribute(“HREF”“#”)a.onclick =切换a.列表末尾(文档。创建节点(配置。扩展标签))P.列表末尾()(]parentNode方法(p(])
    }
  }
  功能切换(){
    var证券交易委员会= parentNode下一步
    如果(秒。类名索引(配置。塌陷阶级)!=1){秒。类名 =秒。类名代替( +配置。塌陷阶级'')
      初生子女nodeValue =配置。collapseLabel
    } 其他的 {秒。类名 + =  +配置。塌陷阶级
      初生子女nodeValue =配置。扩展标签
    }
    返回 
  }
}()

步骤4:使用人类可读的变量和方法名

在提高代码的可维护性方面,这可能是最有用的步骤。当然,在开发过程中证券交易委员会很有道理,但不部分让你更容易理解发生了什么?是什么,尤其是以后需要换成按钮的时候?维护者会将其重命名为按钮

折叠器= 功能(){
  var配置= {指示器类 可折叠的塌陷阶级 “崩溃”collapseLabel “崩溃”扩展标签 “扩大”
  }
  var部分=文档。getElementsByTagName(“div”)
  (var=0J=部分。长度<J+ +){
    如果(部分(]类名索引(配置。指示器类) = = ! -1){部分(]类名 + =  +配置。塌陷阶级
      var段落=文档。createElement(“p”)
      var触发=文档。createElement(“一个”)触发。setAttribute(“HREF”“#”)触发。onclick =toggleSection触发。列表末尾(文档。创建节点(配置。扩展标签))段落。列表末尾(触发)部分(]parentNode方法(段落部分(])
    }
  }
  功能toggleSection(){
    var部分= parentNode下一步
    如果(部分。类名索引(配置。塌陷阶级) = = ! -1){部分。类名 =部分。类名代替( +配置。塌陷阶级'')
      初生子女nodeValue =配置。collapseLabel
    } 其他的 {部分。类名 + =  +配置。塌陷阶级
      初生子女nodeValue =配置。扩展标签
    }
    返回 
  }
}()

第5步:评论,签名并可能消除与其他脚本的最后冲突

最后一步是添加真正需要的注释,说出你的名字和日期(这样人们就可以问问题,知道这是什么时候做的),为了安全起见,我们甚至可以去掉脚本的名称并保持匿名模式。

//使用某个类折叠和展开页面的部分
//作者克里斯蒂安·海勒曼,必威体育下载07/01/08
(功能(){/ /配置,在这里更改CSS类名和标签
  var配置= {指示器类 可折叠的塌陷阶级 “崩溃”collapseLabel “崩溃”扩展标签 “扩大”
  }var部分=文档。getElementsByTagName(“div”)
  (var=0J=部分。长度<J+ +){
    如果(部分(]类名索引(配置。指示器类)!=1){部分(]类名 + =  +配置。塌陷阶级
      var段落=文档。createElement(“p”)
      var触发链路=文档。createElement(“一个”)triggerLink。setAttribute(“HREF”“#”)triggerLink。onclick =toggleSectiontriggerLink。列表末尾(文档。创建节点(配置。扩展标签))段落。列表末尾(触发链路)部分(]parentNode方法(段落部分(])
    }
  }
  功能toggleSection(){
    var部分= parentNode下一步
    如果(部分。类名索引(配置。塌陷阶级)!=1){部分。类名 =部分。类名代替( +配置。塌陷阶级'')
      初生子女nodeValue =配置。collapseLabel
    } 其他的 {部分。类名 + =  +配置。塌陷阶级
      初生子女nodeValue =配置。扩展标签
    }
    返回 
  }
})()

所有非常明显的事情,我相信我们以前都做过,但是,让我们诚实地说:我们多久忘记一次代码,多久修改一次代码,如果有人采取了这些步骤,代码会变得更好?