20
Breaking The Monotony @sai_venkat & @harikrishnan83

Breaking The Monotony

Embed Size (px)

DESCRIPTION

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

Citation preview

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