Computer Science after college
Jimmy Schementi
A decade ago
CS 3733
B-Term 2004
Exercise Logbook
- 4 components (data storage, rules, reports, and UI)
- Approx 10 teams of 4-5 people
- Each team had to build a component and ship it to the class
- Also must deliver a completed product with 3 other components

Biggest Risk?
Integration
So, eliminate the risk.


Me: So, we want to do this thing...
Gary: Well, you're not doing anything against the rules...
Me: Wait, what? Really!?


Gary: Well, that makes sense.
- 2002-2006B.S. Computer Science
- 2006-2007M.S. Computer Science
- 2007-2010Microsoft - Program Manager
- 2010-2012Lab49 - Senior Engineer
- 2012-2014Moven - Head of Engineering


Codequak Inc.
Build awesome stuff
Leaf
Interviewing
Algorithms
- Memorize sorting algorithms (merge, quick, heap, etc)
- Hash tables (basics, hash function, collisions)
- Garbage collection (tracing vs. ref count)
- Best/worse/average case performance and space complexity
- Linked lists (reversing, detecting cycles)
- Permutations & Combinations
Fibonacci
def fib(n):
if n == 0:
return 0
if n <= 2:
return 1
return fib(n - 1) + fib(n - 2)
O(2^n)
(technically O(1.618^n))
We can do much better
cache = {}
def fib(n):
if n == 0:
return 0
if n <= 2:
return 1
value = cache.get(n)
if value
return value
value = fib(n - 1) + fib(n - 2)
cache[n] = value
return value
O(n)
Call repeatedly, O(1)
Other interview questions/topics
- Compute the angle between the hands of an analog clock.
- Do two rectangles intersect?
- Implement rand(7) with rand(5)
- Database systems
- Compilers
- Network protocols (definitely HTTP)
Expect
Whiteboard
and
Live coding
(+1 for the latter)
"Critical" "Thinking"
- Design an elevator
- Design a coffee maker that works in outer space
- Eye color taboo
- "No solution" problems
Full Stack
vs.
XYZ Tech
Breadth vs. depth?
WPI prepares you to be a
full-stack engineer
Break a leg!
We are
Software Engineers
- Programmers
- Hackers
- Coders
- Project Managers
- Designers
- Developers
- Scientists
We are NOT
Ninjas
or
Rock stars
(oh, recruiters...)
We build things that have
never been built before
Software Engineering
The study and application of engineering to the design, development, and maintenance of software.
Engineering
The application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, and improve structures, machines, devices, systems, materials and processes.
- from the Latin ingenium, meaning "cleverness" and ingeniare, meaning "to contrive, devise"
Development Process
Everyone does it differently
- Waterfall
- Agile (Scrum, XP, Lean, Kanban)
- Conference-driven
- Monkeys and typewriters
Let's be honest
We don't know
what we're doing
Pick the right process
for the project and team
Shipping
is all that matters
The good things
- Version control
- Continuous Integration/Build/Deploy
- Code Review
- Automation (QA, Deployments)
- DevOps
- Velocity estimation (for those who need it)
Version Control
Code Review
Continuous Integration/Build/Deploy
- Jenkins
- TeamCity
- Travis CI
DevOps
Automation
- Amazon Web Services
- Heroku
- Ancible/Chef/Puppet
- Vagrant
Actually building
the damn thing
Stream all the things
Reader
var readable = getReadableStreamSomehow();
readable.on('data', function(chunk) {
console.log('got %d bytes of data', chunk.length);
});
readable.on('end', function() {
console.log('there will be no more data.');
});
Writer
http.createServer(function (req, res) {
res.write('hello, world');
res.end();
});
Threads
Here be dragons
Types Good
type User struct {
Username string
Password string
}
func LoadUser(user *User) {
// knows what fields a user has
}
Anonymous types evil
function loadUser(user) {
// WTF is a user?
}
Learn many many programming languages
"Frameworks"
- Don't stress about them
Just build great apps
});
Jimmy Schementi
@jschementi