Breaking The Monotony

20
Breaking The Monotony @sai_venkat & @harikrishnan83

description

To retrospect at the monotony that has crept into the way we develop application and how it affects us being Agile

Transcript of Breaking The Monotony

Page 1: Breaking The Monotony

Breaking The Monotony

@sai_venkat &@harikrishnan83

Page 2: Breaking The Monotony

Or

Page 3: Breaking The Monotony

Theme

The Agility we seek is from the code we write and systems we build and not just from processes and practices we follow.

Page 4: Breaking The Monotony
Page 5: Breaking The Monotony

Why this talk?

● As Craftsmen we are on look out for right tool for the job and sharing our experiences with you.

● This talk is based on the experiences we have on our day to day projects – The choice we make when we build the application can bring us agility.

● We have chosen to concentrate on these areas because in any decent sized (Enterprise :P) project these problems are common.

Page 6: Breaking The Monotony

Introspection

Page 7: Breaking The Monotony

Modeling time

● Aim – To build the world's largest resume builder.

● We choose you as the architect (or funky name – Master Craftsman) to create a model of a profile builder.

● Tell us what you need (tools, frameworks) and your model.

● Catch – We don't want to restrict the resumes coming in from public in any way. We want the users to give as much information about them as possible

Page 8: Breaking The Monotony

Person_PK LastName

1 clouseau

Resume_PK

Person_FK

Title Summary

2 1 Inspector turned Developer

Developer with instincts of an inspector

Resume_FK Skill_FK

2 1

2 2

2 3

Skill_PK Name Description

1 Java Statically typed language

2 Clojure Lisp like language

3 Haskel Functional language

S E L E C T * F R O M P e r so n p , R e s u m e r, S k il l s , R e s u m e _ S k i l l r s W H E R E

p .P e r so n _ P K = r.P e r s o n _ F K A N Dr.R e s u m e _ P K = r s .R e s u m e _ F K A N Ds .S k i l l_ P K = r s .S k i l l_ F K A N Ds .N a m e in ( “ J a v a ” , “ C lo ju r e ” )

Page 9: Breaking The Monotony

Same Data Modeled as Documents

{ Name: “Mr Magoo”, title: “Funny developer”, Skills: [“Ruby”, “Self”, “Clojure”], Email-id: “[email protected]”, Experience: 4}

{ Name: “Closseau”, title: “Inspector turned developer”, Skills: [“Ruby”, “Haskell”, “C#”], Telephone_Numbers: [9611805466], Experience: 5}

Querying the Data:

Map function:

function(doc) { if (contains(doc.skills, [“java”, “clojure”])) { emit(null, doc); }}

Page 10: Breaking The Monotony

A Case for Non Relational Databases

● Schema less Data helps us to evolve the model over the course of application development and maintenance (Ex. FriendFeed, github, Sourceforge)

● Scaling out is easy in nosql databases. Throw in more commodity machine.

● You may not always need atomic consistency (Dirty interface of mnesia)

● Most nosql Databases are simpler than conventional RDBMS, hence more robust and lightweight

● SQL Engines are only a convenience If they are not helping don't have to use them (Waffle on Mysql Datastore)

Page 11: Breaking The Monotony

Polyglot & PolyParadigm Programming

● Today's Applications Need to● Must scale● Must be resilient and secure● Must evolve for future● Work with large volumes of data and users.

Page 12: Breaking The Monotony

Hope you don't have someone like this in your team -

I work only with Java.....

Page 13: Breaking The Monotony

Polyglot & PolyParadigm Programming

● Are there any advantages to writing an entire application in one language or one stack (Microsoft shop or Java shop anyone)?

● Is one language best for all domains?

● Are we harnessing the power we have in our hardware?

● Languages have their boundaries – Imperative vs Functional, Static vs Dynamic, Procedural vs Object Oriented

● Advantages are mostly relative and context sensitive.

● Examples:

Flightcaster, Facebook Chat, github - BERT, Runa – Swarmiji, Twitter

● No Language Wars please :)

Page 14: Breaking The Monotony

In Erlang

-module (fact).-export ([fact/1]).

fact(0) -> 1;fact(N) -> N * fact(N -1).

Tail Recursion Optimized

-module (fact).-export ([fact/1]).

fact(N) -> fact(N, 1).

fact(0, A) -> A;fact(N, A) -> fact(N -1, N * A).

In Java

public int fact(int value) { if (value == 0) { return 0; } else { return value * fact(value - 1); } }

Page 15: Breaking The Monotony

Polyglotism in Testing

package org.openqa.selenium.example;

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.htmlunit.HtmlUnitDriver;

public class Example  {    public static void main(String[] args) {        WebDriver driver = new HtmlUnitDriver();        driver.get("http://www.google.com");        WebElement element = driver.findElement(By.name("q"));        element.sendKeys("Cheese!");        element.submit();        System.out.println("Page title is: " + driver.getTitle());    }}

require “watir”

browser = Watir::Browser.new(:firefox)browser.goto “http://www.google.com”browser.text_field(:name, “q”).set “Cheese”browser.button(:name, “btnG”).clickputs “Page title is #{browser.title}”

We would use Java or C# to write functional tests as our application code is in that language

Page 16: Breaking The Monotony

Polyglotism in Testing

Feature: Proposal notification In order to reduce time spent on emailing Administrators should be able to mail all proposals owners depending on status Scenario: Email accepted proposal Given [email protected] proposed 'Breaking the Monotony' And the 'Breaking the Monotony' proposal is approved When I send mass proposal email Then [email protected] should get email """ Hi [email protected] Congratulations, 'Breaking the Monotony' was accepted. See you at 'Agile India 2010'! """

Using Cucumber + Jruby or Groovy for acceptance testing of services and API interfaces in Java.

Page 17: Breaking The Monotony

Polyglotism in Testing

Feature: Proposal notification In order to reduce time spent on emailing Administrators should be able to mail all proposals owners depending on status Scenario: Email accepted proposal Given [email protected] proposed 'Breaking the Monotony' And the 'Breaking the Monotony' proposal is approved When I send mass proposal email Then [email protected] should get email """ Hi [email protected] Congratulations, 'Breaking the Monotony' was accepted. See you at 'Agile India 2010'! """

Using Cucumber + Jruby or Groovy for acceptance testing of services and API interfaces in Java.

Page 18: Breaking The Monotony

Build and Deployment● Build script or Build code?

● 9000 lines of XML Code and still no test?

● We really need a first class language for flexibility● Programming in XML doesn't make sense● Pure declarative model solves some problems but reduces

flexibility● Testing is much simpler with a real language

● Use Ruby or Groovy for build (Example: FubuMVC in Rake) and Capistrano for deployment.

● Continuous Deployment.

● Cloud for deployment.

Page 19: Breaking The Monotony

The path less traveled

Page 20: Breaking The Monotony

Thank you for listening to us.

Sai Venkatakrishnan

Twitter - http://twitter.com/sai_venkatGithub - http://github.com/saivenkatBlog - http://developer-in-test.blogspot.com

Harikrishnan

Twitter - http://twitter.com/harikrishnan83Github - http://github.com/harikrishnan83Blog - http://harikrishnan83.wordpress.com