Talent42 2014 Sam Wholley -

Post on 10-May-2015

761 views 0 download

description

2014 Talent42 Presentation

Transcript of Talent42 2014 Sam Wholley -

Confidential

Key Software Engineering

Concepts for Recruiters

Sam Wholley

Riviera Partners

swholley@rivierapartners.com

2

1 2 3

Software

Architecture What’s Hot?

Agenda

4

How to Widen

Your Candidate

Net

Confidential

Code, Data, &

‘The Cloud’

Confidential

1

What is Architecture?

6

Build it for extensibility

and ease of maintenance:

Confidential

Be Agile

What is Agile Development?

7

• Involve users early, design the ‘grand requirements’.

• Split into small units (Scrum).

• Develop a unit, and unit test it.

• User-test it (ask “is this what you want?”) often.

• Iterate, iterate, iterate.

Confidential

Agile development: moving fast, moving often:

Lather Rinse Repeat

N-Tier Architecture

8

• Design & layout – images and text.

• UI / UX concepts – a nice interface.

• HTML,CSS – the actual implementation.

• JavaScript – automation, animation, and validation.

Confidential

The front end (where it’s made to look good):

People use the application here.

N-Tier Architecture

9

Confidential

AJAX: you can actively search for stuff, typically in cached

memory or a live database query:

• Google uses AJAX/jQuery for type-ahead

recommendations.

• AJAX can power/position design elements as well.

Other front end terms you hear:

Javascript Implementations

10

Confidential

Front-Endish

Handlebars, Mustache, Aural, Kraken,

Reactive Coffee, Parrot; haml-js, Angular,

Backbone, Ember, Spine, Stapes.

Middle-Tierish Node.js, Express, Refactor, Sails,

Backbone, Vert.x, OPA, CommonJs.

Back-Endish Ember.js Persistence, Backend.js,

Persistence.js.

Some of the more common JavaScript frameworks:

N-Tier Architecture

11

Confidential

• Social Media: ‘like’ counts, posts, connections, are

calculated.

• APIs: application rules are enforced.

• Banking: account inquiry, debit == credit, a summary is

generated.

• Commerce: stream a movie, your credit card gets

charged.

The middle tier (typically where decisions are made):

Other APIs and integration points interface here.

N-Tier Architecture

12

Confidential

Some methodologies, frameworks, and languages used:

• Custom code – all languages apply, it’s the architecture

that matters.

• Services-Oriented Architecture (SOA).

• Message queuing, caching (most times), ‘software

infrastructure.’

The middle tier (typically where decisions are made):

Other APIs and integration points interface here.

N-Tier Architecture

13

Some terms you’ll hear:

• Redis, memcache, Varnish: Scaling (in-memory caching.)

• Django, JBoss, Rails: User / session management.

• RESTful services: application doesn’t depend on sessions.

• JSON – a way to pass data cleanly and clearly.

Confidential

The middle tier (typically where decisions are made):

Other APIs and integration points interface here.

N-Tier Architecture

14

Some methodologies, frameworks, and languages used:

• Hibernate, iBATIS, Objectstore: Persistence.

• Oracle, SQL, MySql, PostgreSQL, MongoDB: Storage.

• BSON, Avro, XML: Storage, Transport, Serialization.

Confidential

Stuff is stored here

The back end:

N-Tier Architecture

15

Other terms you’ll hear:

• Hadoop, Cassandra, MapR: NoSQL storage, big data

aggregation.

• MapReduce: the way NoSQL deals with DB queries.

• “Big Data” ≠ Data Warehouse or Datamart (“Lots of

Data”.)

Confidential

The back end:

Stuff is stored here

Confidential

2

17

Software is core to most modern things, so

architecture and scalability matters a great

deal.

A Mercedes Benz S-Class has about 100 million

lines of code in the car’s onboard control system.

A Boeing 737 has about 20 million lines.

Confidential

Code and Compilation

18

Source Code

Intermediate

Language (IL)

Machine Code

function Add(int num1, int num2) {

return num1 + num2;

}

moveq.w #0, d1

loop:

tst.w d0

beq end

move.w d0, (a5,d1)

subq.w #1, d0

addq.w #2, d1

braloop

end:

rts

01100110 01110101 01101110 01100011 01110100 01101001 01101111 01101110

00100000 01001000 01100101 01101100 01101100 01101111 01010111 01101111

01110010 01101100 01100100 00100000 00101000 01110011 01110100 01110010

01101001 01101110 01100111 00100000 01001101 01100101 01110011 01110011

01100001 01100111 01100101 00101001 00100000 01111011 00001101 00001010

00001001 01100001 01101100 01100101 01110010 01110100 00101000 01001101

01100101 01110011 01110011 01100001 01100111 01100101 00101001 00111011

00001101 00001010 01111101 00001101 00001010

Confidential

Code Implementation

19

Compiled

The entire codebase is translated to the target

machine’s ‘language’ directly, as the program is

written, and executed from there.

Interpreted

The codebase is translated and executed as the

program is run.

Code can be implemented in different ways.

The most common are:

Confidential

Code Implementation

20

When finished writing the code, it’s checked, built, and turned into

binary (1s and 0s) for the computer to run.

• High load speed and fast execution;

• You can add various optimizations during compile process to

increase run speed.

• Compilers are specific to the hardware platform;

• Compiled code requires recompilation to change.

Confidential

Compiled Code:

Typical Examples: C, C++, Java (can be), Visual Basic,

Haskell

Types of Codebases

21

Confidential

The code exists in flexible files and, when the file is executed, the

text is compiled and run.

• Just-In-Time (JIT) compiled – compiled when executed.

• Development is flexible – source code is ‘live’, easy to edit.

• Are typically very elastic (e.g.: allow dynamic typing) to make

prototyping quick.

• Warrant full testing coverage; static code analysis recommended.

Interpreted code:

Typical Examples: Ruby, Python, JavaScript, PHP.

Confidential 22

Types of Codebases

23

Confidential

The code is checked, built, and turned into bytecode with metadata

for a Just-In-Time compiler to compile and run.

• Can be compiled or interpreted, but have metadata <data about

the data> that helps to secure, define, accelerate, and ‘manage’

the code (both before and after compilation.)

• Have a framework that helps to manage the code’s interaction

with the broader platform.

• In essence, creates a sandbox and runs the code in it.

Managed codebase:

Typical Examples: C# (.Net), Java are often deployed

in a managed fashion.

Types of Codebases

24

ALL CODE becomes compiled at some point before it is

run.

The question is: at which point?

Run-time Write-time

Compiled Managed Interpreted

Confidential

Programming Paradigms

25

Confidential

Object-Oriented Programming

• Organizing programs into “things”; these “things” have properties,

and actions those “things” can take.

• This is compared with a more simplistic: input -> stuff happens ->

output logic model.

• It also follows how the human brain works (“is a” and “has a”.)

Programming Paradigms

26

Functional Programming

Defining functions that do specific things and linking them all together,

where the outputs of one feed the inputs of the next function, the

behavior is determined by the data on the initial input and not on the

order in which the functions are declared.

Laying out a set of fixed instructions with each instruction executed in

the order they are declared in, starting with the first and ending with

the last.

Confidential

Procedural Programming

Confidential

What is the cloud?

29

Confidential

Instead of having servers on premise, the “servers” are

stored somewhere else:

• Hosted or collocated environment (a Private Cloud.)

• Amazon: AWS.

• Google Cloud.

• Microsoft Azure.

• VMware Cloud.

• Rackspace: OpenStack.

Basically, it’s just where all the ‘stuff’ is stored.

Why does this matter?

30

SaaS or Cloud Operations:

DevOps, continuous integration, release management tools

integrated with cloud platforms instead of traditional physical

servers.

Servers (owned or managed services), networking

infrastructure, hardware, uptime, “IT”.

Confidential

Technical Operations:

Confidential

3

What’s hottest?

32

Confidential

1. Ruby / Rails

2. Mobile: iOS and Android

3. Python

4. Java

1. Big Data

2. Data Science

3. DevOps

4. Cloud Architecture

Competencies & Disciplines

Languages

Confidential

4

34

Confidential

So, what’s the RIGHT answer?

It depends…

Widening the net…

Widening the net…

35

Any good engineer should be able to learn,

read, and understand any language or

framework, given a reasonable opportunity

to learn its intricacies.

But, there are some VERY GENERAL similarities

that could make it easier for them to jump in.

Confidential

Widening the net…

36

Confidential

• C and C++ syntax are 99.9% identical.

› It’s mostly the programming paradigm that’s

different.

› Test the candidate’s knowledge thoroughly.

• JSP, PHP, and Ruby syntax can be similar.

• Python and Perl syntax can be similar.

• C#, Java, and C++ syntax can be similar.

• Pythonic thinking is roughly similar to ‘Rubyist’

thinking (if done right.)

For example:

Widening the net…

37

Confidential

• A good, solid understanding of object-oriented analysis

& design will, generally, port to any language.

• Holistic engineering thinkers are ‘utility players.’

Widening the net…

38

Confidential

• The size and stage of the company.

• The platform and target language.

• The engineer’s role.

• The strengths of the team.

• The reason for the hire.

Consider the environment.

Confidential

Appendix

40

Confidential

The following slides include some

questions and approaches to discuss

with your technical hiring managers.

? ?

Some questions…

41

Confidential

• Scalability: “Here’s where we’re seeing a bottleneck - what

could be some root causes?”

• Refactoring: “Here’s our approach, what do you think?

Think of an actual problem you’re trying to solve

today (that you DON’T know the answer to)?

+

Some questions…

42

Confidential

Think of an actual problem you’re trying to solve

today (that you DON’T know the answer to)?

• Design Patterns: “Here’s how we are thinking about

architecting this service/app/component. What would you

do differently, and why?”

• Database sharding / partitioning: “From what you can see,

what problems might we run into with another 5 million

users? With internationalization/localization?”

Some questions…

43

Confidential

What is an actual problem you HAVE solved (that you

DO know the answer to)?

• “Here are the symptoms of something that tripped us up:

what do you think happened?”

• What can we do to prevent this going forward?

Some questions…

44

Confidential

What new products are in development (that you can

share), and how would they think about architecting

them?

• Talk about something specific to your company’s sector and

see how they react to it.

• You can ask them about what they have not seen in that

sector that they would LIKE to see, and how they would

build it. Walk through your architecture, and ask how they

would adapt this component to your existing environment.

Some questions…

45

Confidential

What is the worst production coding / development

mistake you’ve ever made? How did you fix it?

• Always follow up with: “what did you do to make sure it

didn't’t happen again.”

Some questions…

46

Confidential

• Technical interview questions should also look at how

broadly people think about routine tasks.

• For example: read all files in a folder, and print the sum of

the ASCII values of all characters in the files.

• Key Observations:

› File I/O, buffers, exceptions.

› General knowledge of characters and escape codes.

› It’s not going to be perfect, or even compile…

You do have to ask technical questions.

Some questions…

47

Confidential

• Technical interview questions shouldn’t assume a specific

level of social or cultural knowledge (e.g.: “Madden 2013”,

or “rewrite Tinder in Erlang.”)

You do have to ask technical questions.

? ? X X X

Some questions…

48

Confidential

You do have to ask technical questions.

Talk about Object-Oriented Programming concepts:

• Ask them to explain polymorphism and inheritance, what

the difference is, and what considerations you have to

make when designing reusable, extensible classes.

• Discuss what Reflection is good for, and when - and when

not – to use it. (C++ candidates may use templating).

Some questions…

49

Confidential

You do have to ask technical questions.

Talk about Design Patterns:

• Walk through some architectural choices you’ve had to

make, and what the tradeoffs are.

• Push in just enough to have confidence that they know

what questions to ask.

Some questions…

50

Confidential

You do have to ask technical questions.

• Give them a reasonably lengthy code sample with multiple bugs

– not language-specific syntax errors, but bugs in logic and

overall program flow. Ask them to point out what the issues are,

and what they would do to fix them.

• Sometimes the overtly simple things might elude more

experienced candidates – if you point out a specific issue like

that, don’t give them the answer but push in on what the effect is.

• The issues should be in different areas of the program to ensure

they are looking at the program as a whole (e.g.: efficient use of

memory, effective naming conventions, type safety, etc.) Many

will not see all of them, but the key is to see how they react.

Some questions…

51

Confidential

Ask them to explain, at a high level, the key concepts

that you are using and ask about pros and cons:

• For example: RESTful services:

› Pros: easier API for mobile, maps to HTTP protocol

standards, manages state well, simple and clean architecture.

› Cons: can be easy to expose underlying architecture

insecurely if not done right (like C), SOAP can be just so

darned easy to hack together…

• Based on what you’re looking for, ask them three or four – they

won’t nail each of them, but they need to get the majority right –

and know where to go to get the answer.

Some questions…

52

Confidential

What language, framework, methodology

have you learned most recently, and why?

How did you do it?

The point…

53

Confidential

You want great general engineering

athletes, not (necessarily) superstar

position players, for most roles.

Unless you NEED the superstar position player.

+ + +