Talent42 2014 - Boris Chan - Competing and Winning Against Big Brands
Talent42 2014 Sam Wholley -
-
Upload
talent42 -
Category
Recruiting & HR
-
view
761 -
download
0
description
Transcript of Talent42 2014 Sam Wholley -
Confidential
Key Software Engineering
Concepts for Recruiters
Sam Wholley
Riviera Partners
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.
+ + +