今天从Devoxx Fr团队的座谈会开始,总结了巴黎水罐和Devoxx法国的故事。

自豪地成为开发人员? 由Pierre Pezziardi

在某些社交场合,当被问到您在生活中做什么时,很难说您是计算机程序员。 由于IT迟到,成本高昂且好用,因此在日常生活中很少使用。

这并非完全不正确。 实现功能的成本不断增长:IT是唯一一个没有生产力提高的行业,事实恰恰相反! 我们的行业发展非常Swift,我们正在使用5年前不存在的语言进行编程。 但是,有些事情永远不会改变。 尽管敏捷,但是项目周期很长。 此外,角色之间也有明显的区别,尤其是思想家和行动者之间。 敏捷就是要解决这个问题。

我们的方法是开发集成产品,这意味着我们的流程必须集成和协作。

—史蒂夫·乔布斯

然而,尽管史蒂夫·乔布斯(Steve Jobs)正式提出了这一观点,尽管生产率下降了,但敏捷性起作用了,但变化不大。 某个地方有一个障碍,这个障碍来自人民本身,他们抵制变革。 从计划经济转变为敏捷性非常困难。

我们可以止步于此,告诉我们我们无能为力,但事实上,我们可以做得更好,不是一夜之间就改变,而是一步一步地改变。 例如,在BRED,客户服务每年处理+ 120k呼叫(80%支持)。 1万次电话与Citrix会话冻结有关:在屏幕上添加一个简单的按钮有助于将此数目减少8k。 减少错误的另一种方法是将一个简单的错误消息标签从“技术错误”更改为“您的帐户正在监视中,请与您的本地顾问联系”。

IT被外部人员误解了。 例如,技术债务的概念对于高层管理者是不可见的。 为了与您文化之外的人交流,您必须说他们的语言。 它是通过图形和语义完成的。 为了超越生产力下降的局面,我们必须彻底改变我们的文化,但与此同时,我们可以以小幅增长的方式发挥附加值。

另一个想法是IT与它的组织保持一致:官僚组织生产官僚主义IT。 例如,雷曼兄弟(Leman Brothers)实施了Bale 2标准(风险管理),但他们却一无所获(您还记得吗?)。 本质上,不仅要理解IT的复杂性,还要记住IT是一种支持功能,并且必须带来业务价值。 这种增值系统的示例是Wikipedia,Google等。 这些工具有什么共同点?

简单,可怜,透明的工具是谦卑的仆人。 精巧,复杂,秘密是一个自大的主人。

—伊万·伊里奇(Ivan Illich)

从本质上讲,这些工具是基于一切可能的,而不是基于标准的企业策略,但禁止一切。 出价是对用户的信任。 该方法是赋予用户权力,让用户犯错误,但能够轻松纠正它们。

看来我们作为计算机程序员不能做任何事情(我们只是开发人员),但是要更改系统,我们必须先更改自己。 但是,这并不是最近的策略:Gerald Weinberg在他的《 计算机编程心理学》一书中对此进行了描述。

最后,我们正在为隔离人员的组织而努力。 在IT中,我们重现系统:程序员,项目经理,业务分析师。 我们作为程序员(和人员)的职责是打破这些障碍,并与IT之外的人们交谈。

这可能是天堂,也可能是本·埃文斯和马丁·维伯格的地狱

演讲是关于Java的未来的。 对未来有两种可能的看法,天堂和地狱。

从天堂的角度来看,Java 8于2013年问世(如承诺的那样),它仍然是第一语言,而Jigsaw(Java承诺的模块化)被广泛采用。 Java 9带来了标准化的泛型s

本质上,我们处于不断变化的环境之中:

  • 硬件绝对是多核的
  • 手机在这里停留
  • 新兴市场将带来更多新的Java开发人员(预计将有数百万)

开源软件实际上已经成为主流的一部分,每个人(公众)都了解其背后的概念。 在社交网络方面,他们遵守严格的保密政策。 必然地,用于控制那些参数的配置是容易且容易获得的。

从地狱的角度来看,Java 8直到2015年才发布,因为社区没有对其进行足够的测试。 拼图永远不会可用。 Java 9直到2020年之后才发布:它不再是第一名,开发人员逃往.Net平台,替代语言也随之消亡。

在硬件方面,它变得更加分散。 更糟糕的是,专利诉讼在市场上占主导地位,而OpenJDK无法同时管理这两者。 在移动端,Android和Java保持分离,Android碎片化甚至更进一步。

在地狱中,数百万新开发人员转向.Net,VB在学校教书。 苹果及其外观相似继续推动锁定。 竞争对手看到了这种方法的好处,并且采取了相同的方法。 对于开源,OSS开发人员成为精英人士,许多新想法从未具体化。 身为市场领导者的实际初创企业担心新的竞争者会更加脆弱,并开始大量游说,创新被扼杀。

Facebook及其继任者主导着互联网,而隐私则完全消失了。 您可以在上班时使用Facebook登录,老板可以全天观看您的工作。

总而言之,前途未卜,但无论将来如何,都取决于我们。

春天已经死了,万岁春天通过吉尔达斯·库西尼耶

猜猜这是关于Spring的话题,更确切地说是关于Spring与JavaEE之间的战争。

第1集

春天如何出现? JCP于几年前提出了一个平台提案,当时被称为J2EE。 存在一些问题:从标准J2EE平台迁移到另一个平台并不像宣布的那样容易,并且测试已耦合到该平台(没有单元测试)。 作为回应,Rod Johnson创建了一个开源轻量级框架来解决这些问题:Spring诞生了。

二次进化

最初,初始配置是通过XML完成的(当时没有太多针对XML的嘘声)。 从一开始,就需要一个配置。 然后, import命令可以使多个配置文件整齐地分开。 第三方框架进入了框架,对于某些人来说,XML配置是一场噩梦(例如Acegi)。 Spring随特定的命名空间而发展,使这些框架的配置更加容易,这类似于DSL for XML。

JavaEE 6再次性感

随着Java 5引入注释,Spring继续发展并接受了注释。不过,我们仍然需要一些XML配置来扫描注释。 同时,JCP了解了Spring的成功并交付了JavaEE 6:它简单,可测试且轻巧,所有这些都通过注释实现。 但是,迁移到JavaEE 6成为接受的障碍。

同样从其竞争中得到启发,Spring 3带来了完整注释配置,可以直接丢弃XML。

2012年JavaEE调查

来自http://cyg.be/SpringJEE的结果显示以下结果:已安装的JavaEE的一半以上是版本5。大多数尚未采用的采用者都考虑在不到一年的时间内进行迁移。 超过一半的Spring用户不考虑迁移到JavaEE。 相反,新用户非常分散:只有四分之一的人考虑JavaEE 6,而另一四分之一的人考虑Spring。

在Spring方面,结果表明可以更快地迁移到新版本。 例如,当前的Spring用户中有一半使用v3.0,而该版本与JavaEE 6同时发布,而大约20%的用户使用Spring 3.1。 这主要是因为迁移很容易(而JavaEE迁移则需要其他应用程序服务器)。

第3集

Spring 3.0带来了JavaConfig方法,这是一种无XML的配置,但是并没有完全消除差距,Spring 3.1做到了。 例如,组分可扫描通过进行@ComponentScan ,调度可以通过实现@EnableScheduling和MVC是虽然提供@EnableMVC 。 这些注解的作用很容易从底层代码中理解(在XML中并不是那么容易)。

Spring的一个伟大功能是通过@Cacheable对缓存进行@Cacheable ; 它没有提供任何实现,因此您可以在幕后使用不同的实现(ConcurrentHashMap,EhCache和GemFire)。 该功能也可以通过XML获得。 Spring 3.1还提供:

  • Hibernate 4支持
  • XML中构造函数的新XML c:命名空间
  • 无需persistence.xml的JPA使用
  • Spring MVC的其他改进

结论

总之,Spring不仅是Spring框架,而且整个生态系统也很容易获得:Spring Data,Spring Batch,Spring Mobile,Spring Security,Spring Android,Spring Flex(好吧,让我们忘记这个),还有更多。

恕我直言,一开始就过多地捍卫Spring,最后没有足够的时间来处理真实的东西。 当有人处于防守状态时,这不是一个好兆头。

Java并发性来自Alex Snaps

昨天得知我们应该为并发做准备之后,我决定代替Java和HTML5的客户端/服务器应用程序参加此演讲[我无法复制代码片段]。

本演讲的目的是更好地理解并发代码,使用java.util.concurrent进行更多操作,并最终充分利用CPU内核。

什么是并发? 线程,锁和角色又如何呢? 关于并发的主要问题是状态以及如何共享它。 线程安全是一个类,无论是通过调度还是在没有外部配置的情况下,无论是通过单个线程还是多个线程,它都遵守其协定。

  • 原子性:任何线程都不应暴露违反类后置条件的中间或瞬时状态
  • 可见性:在多线程环境中,无法保证我在写完变量后就可以从变量中读取值

以Hibernate为例,要跟踪多个统计信息:实体和查询计数器,最大持续时间信息等。

publicinterfaceStatistics{publiclonggetQueryExecutionMaxTime();publiclonggetQueryExecutionMaxTimeQueryString();
}

此接口(那里没有实现)不能保证其合同,因为这两种方法已链接在一起,但无法轻松实施。

  • 为了获得线程安全,一个简单的实现就是将synchronize关键字放在每个方法的前面。 缺点是每种方法只有一个监视器会对性能产生巨大影响。
  • 下一步是为访问的每个变量使用不同的监视器,并在不同方法中对同一变量使用同一监视器,并在方法内部使用synchronized块。
  • Java 5带来了读/写锁定的概念:仍然只有一个写访问权限,但它允许多个并发读访问权限。 对于统计数据,没有兴趣,因为有很多写入但只有少数读取。
  • 同样在Java 5中,我们还有可用于同步变量的Atomic类。 使用这样的原子能,测试是更慢...... 即使我没有听清楚为什么。

结论,更细粒度的锁可以提高性能( 即使锁的粒度适应您的需求和上下文)。

更好的是,有一个通过创建单个State对象的无锁解决方案。 或者,可以使用volatile关键字来确保读取的值在访问时是最新的。 最后,另一个解决方案可能是Compare-and-Swap 。 CAS的全部目的不是强制执行线程安全,而是为失败做好准备并对其进行处理。

总之,针对非阻塞策略,仅在需要时尝试使用锁。

我必须承认,我没有充分利用本次会议的全部内容,而且我可能缺乏一些背景技能。 在Parleys上滑动幻灯片可能会帮助我更深入地理解我的知识,因为其中有很多东西。

DevOps:不仅由Jerome Bernard管理服务器

在(重新)发现虚拟化之后,我认为本次会议可能很有见地。

会议是对演讲者如何组织内部教学会议,同时最大程度地减少对基础架构的影响的反馈。 最大的限制是延迟(光秃秃的机器不到两周)。

被拒绝的解决方案包括:

  • 重影策略(每个会话之前在客户端计算机上重新部署一个主机)
  • 通过脚本从本地网络完全重新安装
  • 会话的帐户创建/销毁

最终的解决方案是Chef服务器,由部署在每个客户端的VirtualBox上的Chef客户端轮询食谱。 这使与会者可以在其来宾系统上获得完整的管理员权限(同时锁定主机系统)。

Chef让我们通过食谱和食谱自动安装。 Chef每隔一段时间轮询一次,以使配置在每个客户端上保持同步。 与Puppet相比,Chef的优势是一堆准备使用的食谱。 最后,Chef提供了一个管理控制台,可让我们关注客户的状态。 在物理计算机上,安装了Chef服务器,以仅自动执行VirtualBox安装和Vagrant文​​件。 此外,还致力于优化网络使用率。

VeeWee是作为Vagrant扩展名出生的,但现在有了自己的生活。 通过模板,它可以轻松使用Vagrant母版。 在正常情况下,没有必要,因为它们有大量的Vagrant基盒可用。 在这种情况下,需要从英语为主的管理员更改为法语语言环境。 VeeWee会启动一个VirtuaBox并模拟用户对其的点击。 附带说明,VeeWee最近使Windows母版可用。

编辑主定义文件以实现前面的步骤:

  • definition.rb:更改了使用的ISO以及MD5哈希
  • preseed.cfg:将语言环境更改为法语
  • postinstall.sh:删除了Puppet安装

VeeWee完成构建图像后,将使用一个命令来创建一个Vagrant框。

Vagrant让我们通过一个基于文本的Vagrantfile从CLI创建VirtualBox映像。 它可以轻松地与Chef和Puppet集成。 注意:我们可以做很多其他事情(网络管理,虚拟机与物理机之间的端口转发,主机与来宾之间的目录共享,多个虚拟机管理(及其网络配置)等等)。 在案例研究中,Vagrantfile是动态的(由Chef更新),因此分配的CPU数量就是物理计算机上可用的数量,依此类推。 厨师食谱下载了Java,Maven和MySQL。

在主机系统上,还安装了Chef solo。 Vagrant和Ched仅安装了特定会话所需的软件:Eclipse(作为.tar.gz),本机软件包(SVN)和自定义符号链接。

反馈:

  • 厨师

    • DNS解析非常重要
    • 正式的Java Chef食谱已失效,因为Oracle现在需要从站点下载JavaScript和cookie。 最好一次获得JDK并使其在内部Web服务器上可用
    • 打包Android SDK并不容易,它只是一个安装程序
  • 流浪汉
    • 部署前在笔记本上进行测试
    • 流浪者供应/重新加载以更新流浪者管理的盒子
    • Vagrant和VeeWee现在应该更兼容
  • 威威
    • 保持同步VirtualBox版本和VirtualBox主版本

最后,还有其他用途:开发人员机器由相同的系统配置,用户接受环境由Vagrant管理。 一个好主意是使用VM的持续集成,这样就不会在最后一刻发生不好的意外。

总而言之,另一个充满内容的会话将需要进行一到两次审阅才能充分利用。

佩特拉·克罗斯(Petra Cross)在Google进行日常开发的幕后花絮

演讲内容涉及团队和角色,开发工作流程以及Google使用的工作流程。

团队和角色

每隔+ 4O个办公室就有+1万名开发人员在检查。 在Google,角色具有明确的职责:工程总监(ENG DIR),产品经理(PM),工程经理(ENG MGR),软件工程师/技术负责人(SWE / TL),软件工程师(SWE),软件测试工程师(SET)和测试工程师(TE)。 团队层次结构不超过三个级别。 基于项目的需要创建团队,而不是永远存在。

Google实现其目标(组织世界信息...)的方法是创建软件。 功能开发如下:

创意>功能>已计划>已处理>在代码审查中>已测试> Canary> Live!

请注意,“进行中”包括单元测试,因此代码审查可以使您编写更多的测试结果。

持续集成中的所有内容都发布了。 Google制定了自己的“狗食”政策,以便Google员工可以提供反馈。 然后,如果一切顺利,则将发布版本推送到Canary:根据特定产品,它只会传播到一部分用户。

如何减少开发时间? 无论是增加资源还是减少浪费,谷歌的方法都是减少浪费。

开发流程

三种方法相对众所周知:

  • 瀑布是一所古老的学校,来自古老的制造业。 无需进一步...
  • 螺旋是下一步。 它是瀑布的序列,每个序列都生成产品的原型。 迭代周期约为6个月。
  • 敏捷性是最新的方法。 一切都与客户协作,反馈和适应变化有关。 有不同的口味:XP,Scrum和看板(以及其他)

Google工作流程

Google几乎完成了所有工作,但主要是敏捷。 Google发现的第一个正确的十件事是,当您专注于用户时,其他所有内容都会落到实处。 客户考虑用户故事,而开发人员考虑任务。

用户案例示例:“作为ATM用户,我希望能够查看余额”。 可能的任务包括:

  1. 定义ATM可以与后端通信的API
  2. 实施后端
  3. 添加GUI

在看板中,任务可以处于四种不同状态:ICEBOX,BACKLOG,CURRENT(或WORKING ON)以及DONE AND VERIFIED。 冰柜中的任务可能永远无法完成,因此需要不断清洁冰柜。 积压的任务应该进行一到二分之一的迭代,以确保没有人耗尽工作。 积压任务是每个人都同意要做的事情。 他们由开发人员选择。 每个在待办事项上具有可见性的人都会使日常会议毫无用处,因为在选择任务并将其传递为CURRENT状态时,您会在上面加上名字。 在白板上,每个州都有一条泳道(保存ICEBOX),并且在便利贴上编写任务。 在传递当前泳道时,请在其旁边放置您的名字(也许是图片)。 您还可以配对程序,这与工作流程无关。

如前所述,每日站立会议是可选的,但每周的团队会议和每月的回顾会议都是强制性的(请参阅下文)。 在每周会议中,您可以通过计划扑克从上到下估算任务。 当没有达成共识时,最低和最高估算者必须解释其原因。 重要的一点是,为了避免涉及情绪,没有多方向的讨论。 然后,您需要重新估计,直到获得多数同意为止。 估计是按点而不是按时间完成的,因为绝对的估计很困难:更容易断言一个任务比另一个任务更快(或更慢)地完成。 同样,速度以点为单位进行计算:当PM要求功能时,它将分解为任务,工程经理会根据他/她的团队速度知道是否可以实现。

遇到困难时,开发人员应从材料中学习并提出问题,以避免出现知识孤岛的情况。 此外,经理和技术负责人不在乎如何完成任务,而只是在完成任务。

还强调每月进行一次回顾。 所有人都表示:进展顺利,进展不顺利,还有什么可以做得更好。

好吧,这没有魔力....有点失望,因为我可能希望向我解释生活。 似乎Google像其他所有人一样管理着自己的项目,成功必须来自其他因素:文化(尽管我看不到如何应用“坚持不懈并从中学习”方法),编辑器方法或其他我无法指出的东西我的手指上。

翻译自: https://blog.frankel.ch/devoxx-fr-2012/2/

Devoxx Fr 2012第2天相关推荐

  1. Devoxx法国2012天3

    2012年法国Devoxx的最后一天! 醒来并不容易,我必须喝一杯咖啡才能使我前进(而且我从不这样做). Greg Truty的移动应用程序开发趋势 我没有对此做笔记,因为我的计算机重新启动了

  2. FOSRestBundle功能包:自动路由生成-单REST风格控制器

    原文出处:5-automatic-route-generation_single-restful-controller.md 原文作者:FriendsOfSymfony 授权许可:创作共用协议 翻译人 ...

  3. jooq sql_使用jOOQ和JavaFX将SQL数据转换为图表

    jooq sql 最近,我们已经展示了Java 8和函数式编程将如何为使用jOOQ和Java 8 lambda和Streams进行SQL数据的函数数据转换为Java开发人员带来新的视角. 今天,我们将 ...

  4. 使用jOOQ和JavaFX将SQL数据转换为图表

    最近,我们已经展示了Java 8和函数式编程将如何为使用jOOQ和Java 8 lambda和Streams进行SQL数据的函数数据转换为Java开发人员带来新的视角. 今天,我们将这一步骤更进一步, ...

  5. CoreOS容器云企业实战(3)--Docker技术实践

    0x1 Docker概述 1)Docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一 ...

  6. vanish(squid) + HAProxy + nginx + memcached(redis)

    为什么80%的码农都做不了架构师?>>>    1. Load-balance then cache +-- Cache server #1 (varnish) -- App ser ...

  7. Devoxx 2012:Java 8 Lambda和并行性,第1部分

    总览 Devoxx是世界上最大的独立于供应商的Java会议,于11月12日至16日在比利时的Atwerp举行. 今年规模更大了,来自40个不同国家的3400名与会者. 和去年一样 ,我和来自SAP的一 ...

  8. Devoxx 2012 –第2天

    -经过几个小时的睡眠和崭新的思路后,我准备开始使用Scala来开始新的一天. 在内部,我想知道我将能够花多少时间继续理解谈话内容- Dick Wall和Bill Venners编写的 Scala高级概 ...

  9. 2012年5月法国旅游网站排名

    2019独角兽企业重金招聘Python工程师标准>>> 2012年5月排名:Voyages-sncf.com居于旅游中介网站首位,ViaMichelin France居于目的地及住宿 ...

最新文章

  1. 全球气候变迁 物联网技术为农业保驾护航
  2. IBM-JAVA面试题
  3. asp.net中,%#%,%=%和%%分别是什么意思,有什么区别
  4. Spring Boot中的事务管理
  5. java web应用开发期末考试_Java开发工程师(Web方向) - 04.Spring框架 - 期末测试
  6. Java基础学习总结(105)——让 Java 开发更简单,提高工作效率!
  7. 华为机试HJ91:走方格的方案数
  8. 爬虫实战—模拟登陆oschina
  9. ​从 Spark Streaming 到 Apache Flink:bilibili 实时平台的架构与实践
  10. WP7模拟器使用技巧
  11. 用C语言实现简单小游戏
  12. Description: 80010105 / 服务器出现意外情况。【亲测可用】
  13. ajax 上传图片所旅途,Ajax上传图片以及上传之前先预览
  14. 2019年1月《语音信号处理》期末考试
  15. 批量检测支付宝是否开通
  16. Hopping Rabbit---牛客
  17. LeetCode 单调栈练习题归纳总结
  18. 对接科大讯飞AIUI心得
  19. 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)
  20. 网格计算Grid Computing

热门文章

  1. Wiki with Adjacent Letters
  2. Excel技巧—如何在Excel中输入√和×
  3. C#中给RichTextBox加上背景图片
  4. 一文了解 NebulaGraph 上的 Spark 项目
  5. 一张图掌握项目复盘的方法和步骤
  6. 2022年川渝网络与信息安全职业技能竞赛-MISC:catfeatherrain
  7. 避免重复运行py文件绘制海龟图报错的一种解决办法
  8. 关于《永恒之塔私服》收费模式的大胆猜想
  9. 双语祝福:欢度国庆,举国同庆!
  10. Android 文字的绘制,应用歌词