SlideShare a Scribd company logo
CODE BOOTCAMPS
Making the most of
Roger Nesbitt
@mogest
SUMMER OF TECH 2016
#general
sot2016.slack.com
What’s this about?
You have knowledge.
You have passion.
How do you get a job?
Myth busting
Language overview
Developer roles
Winning at bootcamps
TONIGHT
Myth busting
Language overview
Developer roles
Winning at bootcamps
NEXT
1. I know where I’m going with my career
2. I’m competent in the relevant programming language
3. I’ve achieved a relevant qualification
4. I’ve achieved good grades
5. I’m strongly opinionated about “good” and “bad” code
6. I can communicate an idea clearly
7. I can learn new concepts
8. I can work well in a team
9. I can independently write amazing code
MYTH #5
University prepares you for your working career
MYTH #4
I need to specialise now to get a good job
MYTH #3
I’m an 8/10 in Java
ByPeterCampbell-self-made,NikonD80,GFDL,https://
commons.wikimedia.org/w/index.php?curid=3672205
You’re probably 2/10.
That’s OK!
MYTH #2
Front-end dev is easy
Back-end dev is hard
MYTH #1
Being a good coder means
being good at a programming language
• Accurately transform real-world ideas
and constraints into a language a
computer can understand

• Factor code to be highly readable and
maintainable so changes can be easily
made and bugs easily located
I can work well in a team
I can learn new concepts
I can communicate an idea clearly
I’ve achieved good grades
I can independently write amazing code
I’m competent in the relevant programming language
I’ve achieved a relevant qualification
I’m strongly opinionated about “good” and “bad” code
I know where I’m going with my career
Employers hire students for
POTENTIAL
not
KNOWLEDGE
Myth busting
Language overview
Developer roles
Winning at bootcamps
NEXT
https://www.flickr.com/photos/mrbill/148973427
https://www.flickr.com/photos/gsi-r/5059484398
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
$ ./number-to-words 786637
punner
rummer
runner
stoner
summer
sumner
moge.st/phone
Ruby
❤
number = ARGV.first
alphabet = ('a'..'z').to_a.join
numbers = "22233344455566677778889999"
puts IO.read("/usr/share/dict/words")
.downcase
.split
.select { |word| word.tr(alphabet, numbers) == number }
Python
# Written by Nick Johnstone (@widdnz)
import sys
import string
NUMBER = sys.argv[1]
ALPHABET = string.ascii_lowercase
NUMBERS = '22233344455566677778889999'
WORD_LIST_PATH = '/usr/share/dict/words'
WORD_TO_NUMBER = str.maketrans(ALPHABET, NUMBERS)
def words_matching_phone_number(word_list, number):
def matches_number(word):
return word.translate(WORD_TO_NUMBER) == number
words_lower_and_stripped = (word.lower().strip() for word in word_list)
return (word for word in words_lower_and_stripped if matches_number(word))
with open(WORD_LIST_PATH, 'r') as word_list:
print('n'.join(words_matching_phone_number(word_list, NUMBER)))
Javascript
function dictionaryLoaded(err, data) {
if (err) {
return console.log(err);
}
var number = process.argv[2];
var words = data.toLowerCase().split("n");
var matches = findMatchingNumbers(
number, words
);
console.log(matches);
}
function wordToNumber(word) {
return word
.replace(/[a-c]/g, '2')
.replace(/[d-f]/g, '3')
.replace(/[g-i]/g, '4')
.replace(/[j-l]/g, '5')
.replace(/[m-o]/g, '6')
.replace(/[p-s]/g, '7')
.replace(/[t-v]/g, '8')
.replace(/[w-z]/g, '9');
}
function findMatchingNumbers(targetNumber, words)
{
return words.filter(function(word) {
return wordToNumber(word) === targetNumber;
});
}
var fs = require("fs");
fs.readFile(
"/usr/share/dict/words",
"utf8",
dictionaryLoaded
);
Swift
// Written by the Powershop mobile dev team
import Foundation
func loadDictionary() throws -> [String] {
do {
let path = "/usr/share/dict/words"
let fileContents = try NSString(
contentsOfFile: path,
encoding: NSUTF8StringEncoding)
words = fileContents
.lowercaseString
.componentsSeparatedByString("n")
return words
}
}
func wordToNumber(word: String) -> String {
let letters: [String] =
Array("abcdefghijklmnopqrstuvwxyz".characters)
let numbers: [Int] = [2, 2, 2, 3, 3, 3, 4, 4, 4, 5,
5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9]
for i in 0..<letters.count {
word = word
.stringByReplacingOccurrencesOfString(
letters[i], withString: String(numbers[i]))
}
return word
}
func findMatchingNumbers(
targetNumber: String, words: [String]) -> [String] {
filteredWords = words.filter { (word) -> Bool in
let number = wordToNumber(word)
return number == targetNumber
}
return filteredWords
}
if let number = Process.arguments.first {
do {
let words = try loadDictionary()
let matches = findMatchingNumbers(number, words)
for word in matches {
print(word)
}
} catch {
print("An error occurred loading the dictionary.")
}
}
PHP
<?php
$number = $argv[1];
$data = file_get_contents("/usr/share/dict/words");
$words = explode("n", strtolower($data));
$alphabet = range('a', 'z');
$numbers = array(2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9);
function wordToNumber($word) {
global $alphabet, $numbers;
return str_replace($alphabet, $numbers, $word);
}
function wordMatchesNumber($word) {
global $number;
return $number == wordToNumber($word);
}
$matchingWords = array_filter($words, "wordMatchesNumber");
foreach ($matchingWords as $word) {
echo "$wordn";
}
?>
C#
using System;
using System.IO;
using System.Text;
using System.Linq;
class PhoneNumberToWords
{
public string Number;
public string[] Words;
const string LetterMapping =
"22233344455566677778889999";
public PhoneNumberToWords(string number,
string dictionaryFile)
{
Number = number;
Words =
System.IO.File.ReadAllLines(dictionaryFile);
}
public void OutputMatchingWords()
{
Words.Where(word => WordMatchesNumber(word))
.ToList()
.ForEach(word => Console.WriteLine(word));
}
private bool WordMatchesNumber(string word)
{
return WordToNumber(word) == Number;
}
private string WordToNumber(string word)
{
StringBuilder builder = new StringBuilder("");
foreach (char c in word.ToUpper())
{
if (c >= 65 && c < 65 + 26)
{
builder.Append(LetterMapping[c - 65]);
}
else
{
builder.Append(c);
}
}
return builder.ToString();
}
static void Main(string[] args)
{
String number = args[0];
new PhoneNumberToWords(
number,
"/usr/share/dict/words"
).OutputMatchingWords();
}
}
C
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
char *read_file(void)
{
int fd;
struct stat stat;
char *words;
fd = open("/usr/share/dict/words", O_RDONLY);
if (fd == -1) { return NULL; }
if (fstat(fd, &stat) == -1) { return NULL; }
words = (char *)malloc(stat.st_size + 1);
if (words == NULL) { return NULL; }
if (read(fd, words, stat.st_size) != stat.st_size) {
return NULL;
}
close(fd);
words[stat.st_size] = 0;
return words;
}
int main(int argc, char *argv[])
{
const char *numbers = "22233344455566677778889999";
char *words, *word_ptr, *start_word_ptr;
char *number, *number_ptr;
int letter_index;
if (argc != 2) { return 1; }
number = argv[1];
words = read_file();
if (words == NULL) { return 1; }
word_ptr = words;
start_word_ptr = words;
number_ptr = number;
while (*word_ptr) {
letter_index = toupper(*word_ptr) - 65;
if (letter_index >= 0 && letter_index < 26 &&
numbers[letter_index] == *number_ptr) {
number_ptr++;
word_ptr++;
if (*number_ptr == 0 && *word_ptr == 'n') {
*word_ptr = 0;
puts(start_word_ptr);
start_word_ptr = ++word_ptr;
number_ptr = number;
}
}
else {
while (*word_ptr != 'n') { word_ptr++; }
start_word_ptr = ++word_ptr;
number_ptr = number;
}
}
free(words);
return 0;
}
Myth busting
Language overview
Developer roles
Winning at bootcamps
NEXT
Web Developer
Front-end Developer
Software Developer
Software Engineer
Mobile Developer
Devops Engineer
WARNING!
Every organisation is wildly different.
Every job is wildly different.
The following is just a guideline!
Javascript
10%
HTML/CSS
35%
Server coding
15%
WEB DEVELOPER
• Shipping content-based websites
• Generally small contracts
• Often uses a platform

(Drupal, Wordpress, SilverStripe)
• 45% HTML, CSS, Javascript
• 15% back-end coding (PHP?)
• Some design skills a plus
WEB DEVELOPER
Code management 101 22 March
CSS 101 7 April
Javascript 101 14 April
PHP 26 July
Database 101 5 April
Javascript
40%
HTML/CSS
20%
FRONT-END DEVELOPER
• Excellent user experience
• Probably web
• Working with back-end devs
• Javascript for consuming APIs
• … or views of a monolithic app
in C#, Ruby, Python
• Technology immature compared
to back-end == challenging
FRONT-END DEVELOPER
Code mgmt 101 22 March
Javascript 101 14 April
JS masterclass 10 May
Testing 101 31 March
CSS 101 7 April
Testing masterclass 3 May
Devops 101 12 April
TDD 5 May
Database
10%
Javascript
10%
HTML/CSS
10%
Server coding
30%
SOFTWARE DEVELOPER
ALSO KNOWN AS SOFTWARE ENGINEER
• Translating business logic
• Sometimes UX too
• Web / desktop / server
• Web tech 0 – 30%
• Database complexity
• Working with designers or

front-end developers
SOFTWARE DEVELOPER
Code mgmt 101 22 March
Javascript 101 14 April
Database 101 5 April
Testing 101 31 March
.NET 12 May
Ruby 23 May
CSS 101 7 April
JS masterclass 10 May
Testing masterclass 3 May
TDD 5 May
Devops 101 12 April
Devops masterclass 19 May
Native code
60%
MOBILE DEVELOPER
NATIVE
• Excellent user experience
• Objective C / Swift or Java
• Standalone (rare)
• Integrated: working with
software developers to build
and consume their API
• Working with designers
???
60%
MOBILE DEVELOPER
CROSS-PLATFORM
• Javascript (React Native,
Cordova / Phonegap)
• C# (Xamarin)
• Need to know native code too
MOBILE DEVELOPER
Code mgmt 101 22 March
Testing 101 31 March
Android masterclass 19 July
iOS masterclass 21 July
Javascript 101 14 April
Testing masterclass 3 May
Database 101 5 April
TDD 5 May
Shell
15%
Scripting
45%
DEVOPS ENGINEER
• Supporting the delivery team
• Automated server setup
• Automated deploys
• Monitoring production
• Build/QA environments
• Database tuning
• Productivity tools for the devs
DEVOPS ENGINEER
Devops 101 12 April
Devops masterclass 19 May
Code mgmt 101 22 March
Testing 101 31 March
Ruby 23 May
Database 101 5 April
Git masterclass 21 April
• Listening to, sharing and debating ideas
• Code review
• Automated tests
• Meeting with stakeholders and your team
• Teaching others what you know
• Standup, retro, sprint planning, backlog grooming, …
EVERY DEVELOPER JOB
THE MISSING 40%
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
Myth busting
Language overview
Developer roles
Winning at bootcamps
NEXT
WHY, SUMMER OF TECH?
WHY???
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
BywetwebworkfromLondon,UK-CampingEquipment
UploadedbyPartyzan_XXI,CCBY-SA2.0,https://
commons.wikimedia.org/w/index.php?curid=8183312
PREPARE
• Check the resources page

https://recruit.summeroftech.co.nz/resources
• Install any required packages the day before
• Start it up and make sure it goes
• Ask on Slack if you’re having trouble
GO
• Attend as many as you can
• 101 bootcamps are inspirational
• Go to masterclasses if you have 101 knowledge
• Prioritise broad over deep
DURING
• Participate in Slack backchannel
• Write down three things you want to take away
• Chat with the presenter afterwards
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
AFTER
• Review the “three things” two days later
• … and two weeks later
• Explore what you’ve learned
• Ask questions on Slack
• Amazeballs: teach someone what you learned
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
BUSTED
University prepares you for your working career
I need to specialise now to get a good job
I’m an 8/10 in Java
Front-end dev is easy, back-end dev is hard
Good coder == good at a programming language
LANGUAGES
They’re different, but not so different
Web Developer
Front-end Developer
Software Developer
Software Engineer
Mobile Developer
Devops Engineer
SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)
ENJOY!
Roger Nesbitt
@mogest
THANKS!

More Related Content

PDF
A la découverte de TypeScript
PDF
More about PHP
DOCX
Design problem
PDF
PHP Technical Questions
PDF
PHP Basic and Fundamental Questions and Answers with Detail Explanation
PDF
Zend Certification PHP 5 Sample Questions
PDF
Sam Jarman: Summer of Tech Lightning Talk, 10 March 2016
PPTX
Making it Hard to say No
A la découverte de TypeScript
More about PHP
Design problem
PHP Technical Questions
PHP Basic and Fundamental Questions and Answers with Detail Explanation
Zend Certification PHP 5 Sample Questions
Sam Jarman: Summer of Tech Lightning Talk, 10 March 2016
Making it Hard to say No

Viewers also liked (20)

PDF
Summer of Tech: Resume 2016
PDF
Summer of Tech Student Profiles 2016
PDF
Mobile Testing Taster
PDF
How to get a job 2016
RTF
Precepts by Lines
PPT
Media factor дниpr_
PPTX
багатогранний світ воску
PPT
Step by step sharring folders
PDF
Land mark towers for web
PPT
Productivity in the email age
PPT
Усыпальницы фараонов. Ладья Миллионов Лет
PDF
Land mark towers for web
PDF
Web/Logo portfolio
PPTX
Bir elektrik devresi
DOC
Interpretacion S
PDF
Cyprus Investment from only 60,000 Euro - Move in TODAY
PDF
Slide share -marketing to black moms
PDF
Land mark towers for web
PPTX
Doctrina 14
PPTX
Jesus in Pictures
Summer of Tech: Resume 2016
Summer of Tech Student Profiles 2016
Mobile Testing Taster
How to get a job 2016
Precepts by Lines
Media factor дниpr_
багатогранний світ воску
Step by step sharring folders
Land mark towers for web
Productivity in the email age
Усыпальницы фараонов. Ладья Миллионов Лет
Land mark towers for web
Web/Logo portfolio
Bir elektrik devresi
Interpretacion S
Cyprus Investment from only 60,000 Euro - Move in TODAY
Slide share -marketing to black moms
Land mark towers for web
Doctrina 14
Jesus in Pictures
Ad

Similar to SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt) (20)

PPTX
Cracking The Technical Interview Uw
PDF
Google Interview Prep Guide Software Engineer
PDF
How to hire frontend engineers
PPT
Interviews
PPTX
Cracking The Technical Interview
PPTX
How to get placed in product based companies as a software developer
PPTX
Cracking the coding interview u penn - sept 30 2010
PPTX
Cracking the coding interview columbia - march 23 2011
PDF
(eTextbook PDF) for Starting out with Visual C# 5th Edition
PPTX
Preparing for a technical interview
PPTX
Rocking The Tech Interview
PDF
Php Cookbook Solutions Examples For Php Programmers 3rd David Sklar Adam Trac...
PDF
Essential Programming Interview Questions You Need to Know !!
DOC
Narender_Resume
PDF
Introduction to Programming Roadmaps.pdf
PPTX
Front-end, Back-end & Full-stack: Best Practices for Hiring Developers
PPT
AOA Week 01.ppt
PDF
Karat at CMU
PPTX
Computer Programing G10.pptx It refers to the Introduction of Programing
PDF
Emarsys XP reggeli 2016.08.12.
Cracking The Technical Interview Uw
Google Interview Prep Guide Software Engineer
How to hire frontend engineers
Interviews
Cracking The Technical Interview
How to get placed in product based companies as a software developer
Cracking the coding interview u penn - sept 30 2010
Cracking the coding interview columbia - march 23 2011
(eTextbook PDF) for Starting out with Visual C# 5th Edition
Preparing for a technical interview
Rocking The Tech Interview
Php Cookbook Solutions Examples For Php Programmers 3rd David Sklar Adam Trac...
Essential Programming Interview Questions You Need to Know !!
Narender_Resume
Introduction to Programming Roadmaps.pdf
Front-end, Back-end & Full-stack: Best Practices for Hiring Developers
AOA Week 01.ppt
Karat at CMU
Computer Programing G10.pptx It refers to the Introduction of Programing
Emarsys XP reggeli 2016.08.12.
Ad

Recently uploaded (20)

PPTX
Cerebral_Palsy_Detailed_Presentation.pptx
PDF
Chapter 7-2.pdf. .
PPTX
Job-opportunities lecture about it skills
PPT
BCH3201 (Enzymes and biocatalysis)-JEB (1).ppt
PDF
L-0018048598visual cloud book for PCa-pdf.pdf
PPTX
OnePlus 13R – ⚡ All-Rounder King Performance: Snapdragon 8 Gen 3 – same as iQ...
PDF
RIBOSOMES.12.pdf kerala msc botany degree
PPTX
ESD MODULE-5hdbdhbdbdbdbbdbdbbdndbdbdbdbbdbd
PDF
HR Jobs in Jaipur: 2025 Trends, Banking Careers & Smart Hiring Tools
PPTX
退学买新西兰毕业证(WelTec毕业证书)惠灵顿理工学院毕业证国外证书制作
PDF
313302 DBMS UNIT 1 PPT for diploma Computer Eng Unit 2
DOCX
How to Become a Criminal Profiler or Behavioural Analyst.docx
PDF
Daisia Frank: Strategy-Driven Real Estate with Heart.pdf
PDF
Prostaglandin E2.pdf orthoodontics op kharbanda
PPTX
Autonomic_Nervous_SystemM_Drugs_PPT.pptx
PDF
シュアーイノベーション採用ピッチ資料|Company Introduction & Recruiting Deck
PDF
Sales and Distribution Managemnjnfijient.pdf
PPTX
Foundations-of-Water-Resources-Planning2652.0032.pptx
PPTX
PE3-WEEK-3sdsadsadasdadadwadwdsdddddd.pptx
PPTX
Surgical thesis protocol formation ppt.pptx
Cerebral_Palsy_Detailed_Presentation.pptx
Chapter 7-2.pdf. .
Job-opportunities lecture about it skills
BCH3201 (Enzymes and biocatalysis)-JEB (1).ppt
L-0018048598visual cloud book for PCa-pdf.pdf
OnePlus 13R – ⚡ All-Rounder King Performance: Snapdragon 8 Gen 3 – same as iQ...
RIBOSOMES.12.pdf kerala msc botany degree
ESD MODULE-5hdbdhbdbdbdbbdbdbbdndbdbdbdbbdbd
HR Jobs in Jaipur: 2025 Trends, Banking Careers & Smart Hiring Tools
退学买新西兰毕业证(WelTec毕业证书)惠灵顿理工学院毕业证国外证书制作
313302 DBMS UNIT 1 PPT for diploma Computer Eng Unit 2
How to Become a Criminal Profiler or Behavioural Analyst.docx
Daisia Frank: Strategy-Driven Real Estate with Heart.pdf
Prostaglandin E2.pdf orthoodontics op kharbanda
Autonomic_Nervous_SystemM_Drugs_PPT.pptx
シュアーイノベーション採用ピッチ資料|Company Introduction & Recruiting Deck
Sales and Distribution Managemnjnfijient.pdf
Foundations-of-Water-Resources-Planning2652.0032.pptx
PE3-WEEK-3sdsadsadasdadadwadwdsdddddd.pptx
Surgical thesis protocol formation ppt.pptx

SoTWLG Intro to Code Bootcamps 2016 (Roger Nesbitt)

  • 1. CODE BOOTCAMPS Making the most of Roger Nesbitt @mogest SUMMER OF TECH 2016
  • 4. You have knowledge. You have passion. How do you get a job?
  • 5. Myth busting Language overview Developer roles Winning at bootcamps TONIGHT
  • 6. Myth busting Language overview Developer roles Winning at bootcamps NEXT
  • 7. 1. I know where I’m going with my career 2. I’m competent in the relevant programming language 3. I’ve achieved a relevant qualification 4. I’ve achieved good grades 5. I’m strongly opinionated about “good” and “bad” code 6. I can communicate an idea clearly 7. I can learn new concepts 8. I can work well in a team 9. I can independently write amazing code
  • 8. MYTH #5 University prepares you for your working career
  • 9. MYTH #4 I need to specialise now to get a good job
  • 10. MYTH #3 I’m an 8/10 in Java
  • 13. MYTH #2 Front-end dev is easy Back-end dev is hard
  • 14. MYTH #1 Being a good coder means being good at a programming language
  • 15. • Accurately transform real-world ideas and constraints into a language a computer can understand
 • Factor code to be highly readable and maintainable so changes can be easily made and bugs easily located
  • 16. I can work well in a team I can learn new concepts I can communicate an idea clearly I’ve achieved good grades I can independently write amazing code I’m competent in the relevant programming language I’ve achieved a relevant qualification I’m strongly opinionated about “good” and “bad” code I know where I’m going with my career
  • 17. Employers hire students for POTENTIAL not KNOWLEDGE
  • 18. Myth busting Language overview Developer roles Winning at bootcamps NEXT
  • 25. number = ARGV.first alphabet = ('a'..'z').to_a.join numbers = "22233344455566677778889999" puts IO.read("/usr/share/dict/words") .downcase .split .select { |word| word.tr(alphabet, numbers) == number }
  • 27. # Written by Nick Johnstone (@widdnz) import sys import string NUMBER = sys.argv[1] ALPHABET = string.ascii_lowercase NUMBERS = '22233344455566677778889999' WORD_LIST_PATH = '/usr/share/dict/words' WORD_TO_NUMBER = str.maketrans(ALPHABET, NUMBERS) def words_matching_phone_number(word_list, number): def matches_number(word): return word.translate(WORD_TO_NUMBER) == number words_lower_and_stripped = (word.lower().strip() for word in word_list) return (word for word in words_lower_and_stripped if matches_number(word)) with open(WORD_LIST_PATH, 'r') as word_list: print('n'.join(words_matching_phone_number(word_list, NUMBER)))
  • 29. function dictionaryLoaded(err, data) { if (err) { return console.log(err); } var number = process.argv[2]; var words = data.toLowerCase().split("n"); var matches = findMatchingNumbers( number, words ); console.log(matches); } function wordToNumber(word) { return word .replace(/[a-c]/g, '2') .replace(/[d-f]/g, '3') .replace(/[g-i]/g, '4') .replace(/[j-l]/g, '5') .replace(/[m-o]/g, '6') .replace(/[p-s]/g, '7') .replace(/[t-v]/g, '8') .replace(/[w-z]/g, '9'); } function findMatchingNumbers(targetNumber, words) { return words.filter(function(word) { return wordToNumber(word) === targetNumber; }); } var fs = require("fs"); fs.readFile( "/usr/share/dict/words", "utf8", dictionaryLoaded );
  • 30. Swift
  • 31. // Written by the Powershop mobile dev team import Foundation func loadDictionary() throws -> [String] { do { let path = "/usr/share/dict/words" let fileContents = try NSString( contentsOfFile: path, encoding: NSUTF8StringEncoding) words = fileContents .lowercaseString .componentsSeparatedByString("n") return words } } func wordToNumber(word: String) -> String { let letters: [String] = Array("abcdefghijklmnopqrstuvwxyz".characters) let numbers: [Int] = [2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9] for i in 0..<letters.count { word = word .stringByReplacingOccurrencesOfString( letters[i], withString: String(numbers[i])) } return word } func findMatchingNumbers( targetNumber: String, words: [String]) -> [String] { filteredWords = words.filter { (word) -> Bool in let number = wordToNumber(word) return number == targetNumber } return filteredWords } if let number = Process.arguments.first { do { let words = try loadDictionary() let matches = findMatchingNumbers(number, words) for word in matches { print(word) } } catch { print("An error occurred loading the dictionary.") } }
  • 32. PHP
  • 33. <?php $number = $argv[1]; $data = file_get_contents("/usr/share/dict/words"); $words = explode("n", strtolower($data)); $alphabet = range('a', 'z'); $numbers = array(2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9); function wordToNumber($word) { global $alphabet, $numbers; return str_replace($alphabet, $numbers, $word); } function wordMatchesNumber($word) { global $number; return $number == wordToNumber($word); } $matchingWords = array_filter($words, "wordMatchesNumber"); foreach ($matchingWords as $word) { echo "$wordn"; } ?>
  • 34. C#
  • 35. using System; using System.IO; using System.Text; using System.Linq; class PhoneNumberToWords { public string Number; public string[] Words; const string LetterMapping = "22233344455566677778889999"; public PhoneNumberToWords(string number, string dictionaryFile) { Number = number; Words = System.IO.File.ReadAllLines(dictionaryFile); } public void OutputMatchingWords() { Words.Where(word => WordMatchesNumber(word)) .ToList() .ForEach(word => Console.WriteLine(word)); } private bool WordMatchesNumber(string word) { return WordToNumber(word) == Number; } private string WordToNumber(string word) { StringBuilder builder = new StringBuilder(""); foreach (char c in word.ToUpper()) { if (c >= 65 && c < 65 + 26) { builder.Append(LetterMapping[c - 65]); } else { builder.Append(c); } } return builder.ToString(); } static void Main(string[] args) { String number = args[0]; new PhoneNumberToWords( number, "/usr/share/dict/words" ).OutputMatchingWords(); } }
  • 36. C
  • 37. #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> char *read_file(void) { int fd; struct stat stat; char *words; fd = open("/usr/share/dict/words", O_RDONLY); if (fd == -1) { return NULL; } if (fstat(fd, &stat) == -1) { return NULL; } words = (char *)malloc(stat.st_size + 1); if (words == NULL) { return NULL; } if (read(fd, words, stat.st_size) != stat.st_size) { return NULL; } close(fd); words[stat.st_size] = 0; return words; } int main(int argc, char *argv[]) { const char *numbers = "22233344455566677778889999"; char *words, *word_ptr, *start_word_ptr; char *number, *number_ptr; int letter_index; if (argc != 2) { return 1; } number = argv[1]; words = read_file(); if (words == NULL) { return 1; } word_ptr = words; start_word_ptr = words; number_ptr = number; while (*word_ptr) { letter_index = toupper(*word_ptr) - 65; if (letter_index >= 0 && letter_index < 26 && numbers[letter_index] == *number_ptr) { number_ptr++; word_ptr++; if (*number_ptr == 0 && *word_ptr == 'n') { *word_ptr = 0; puts(start_word_ptr); start_word_ptr = ++word_ptr; number_ptr = number; } } else { while (*word_ptr != 'n') { word_ptr++; } start_word_ptr = ++word_ptr; number_ptr = number; } } free(words); return 0; }
  • 38. Myth busting Language overview Developer roles Winning at bootcamps NEXT
  • 39. Web Developer Front-end Developer Software Developer Software Engineer Mobile Developer Devops Engineer
  • 40. WARNING! Every organisation is wildly different. Every job is wildly different. The following is just a guideline!
  • 41. Javascript 10% HTML/CSS 35% Server coding 15% WEB DEVELOPER • Shipping content-based websites • Generally small contracts • Often uses a platform
 (Drupal, Wordpress, SilverStripe) • 45% HTML, CSS, Javascript • 15% back-end coding (PHP?) • Some design skills a plus
  • 42. WEB DEVELOPER Code management 101 22 March CSS 101 7 April Javascript 101 14 April PHP 26 July Database 101 5 April
  • 43. Javascript 40% HTML/CSS 20% FRONT-END DEVELOPER • Excellent user experience • Probably web • Working with back-end devs • Javascript for consuming APIs • … or views of a monolithic app in C#, Ruby, Python • Technology immature compared to back-end == challenging
  • 44. FRONT-END DEVELOPER Code mgmt 101 22 March Javascript 101 14 April JS masterclass 10 May Testing 101 31 March CSS 101 7 April Testing masterclass 3 May Devops 101 12 April TDD 5 May
  • 45. Database 10% Javascript 10% HTML/CSS 10% Server coding 30% SOFTWARE DEVELOPER ALSO KNOWN AS SOFTWARE ENGINEER • Translating business logic • Sometimes UX too • Web / desktop / server • Web tech 0 – 30% • Database complexity • Working with designers or
 front-end developers
  • 46. SOFTWARE DEVELOPER Code mgmt 101 22 March Javascript 101 14 April Database 101 5 April Testing 101 31 March .NET 12 May Ruby 23 May CSS 101 7 April JS masterclass 10 May Testing masterclass 3 May TDD 5 May Devops 101 12 April Devops masterclass 19 May
  • 47. Native code 60% MOBILE DEVELOPER NATIVE • Excellent user experience • Objective C / Swift or Java • Standalone (rare) • Integrated: working with software developers to build and consume their API • Working with designers
  • 48. ??? 60% MOBILE DEVELOPER CROSS-PLATFORM • Javascript (React Native, Cordova / Phonegap) • C# (Xamarin) • Need to know native code too
  • 49. MOBILE DEVELOPER Code mgmt 101 22 March Testing 101 31 March Android masterclass 19 July iOS masterclass 21 July Javascript 101 14 April Testing masterclass 3 May Database 101 5 April TDD 5 May
  • 50. Shell 15% Scripting 45% DEVOPS ENGINEER • Supporting the delivery team • Automated server setup • Automated deploys • Monitoring production • Build/QA environments • Database tuning • Productivity tools for the devs
  • 51. DEVOPS ENGINEER Devops 101 12 April Devops masterclass 19 May Code mgmt 101 22 March Testing 101 31 March Ruby 23 May Database 101 5 April Git masterclass 21 April
  • 52. • Listening to, sharing and debating ideas • Code review • Automated tests • Meeting with stakeholders and your team • Teaching others what you know • Standup, retro, sprint planning, backlog grooming, … EVERY DEVELOPER JOB THE MISSING 40%
  • 54. Myth busting Language overview Developer roles Winning at bootcamps NEXT
  • 55. WHY, SUMMER OF TECH? WHY???
  • 61. PREPARE • Check the resources page
 https://recruit.summeroftech.co.nz/resources • Install any required packages the day before • Start it up and make sure it goes • Ask on Slack if you’re having trouble
  • 62. GO • Attend as many as you can • 101 bootcamps are inspirational • Go to masterclasses if you have 101 knowledge • Prioritise broad over deep
  • 63. DURING • Participate in Slack backchannel • Write down three things you want to take away • Chat with the presenter afterwards
  • 65. AFTER • Review the “three things” two days later • … and two weeks later • Explore what you’ve learned • Ask questions on Slack • Amazeballs: teach someone what you learned
  • 67. BUSTED University prepares you for your working career I need to specialise now to get a good job I’m an 8/10 in Java Front-end dev is easy, back-end dev is hard Good coder == good at a programming language
  • 69. Web Developer Front-end Developer Software Developer Software Engineer Mobile Developer Devops Engineer