15. Freelancing
● C / Unix / Sybase
● Perl
● City -> Dotcoms
● "New Media"
● BBC / Guardian
16. Lessons Learned
● 75% of my degree course was useless
● Out of date
● Industry in constant change
○ There are still jobs if you get left behind
● Self-taught
● Keep up to date
25. Operating System
● Your operating system is where you live
● Get to know its features
● Design your working environment
● Automate things
26. Operating Systems
● What do you use your operating system for?
● Web browsing
● Reading email
● Social media
● Development?
○ Virtual machines
○ Containers
27. Configure Your OS
● Make it as comfortable as possible
● Window decoration
● Window behaviour
● Virtual desktops
28. Automate Common Tasks
● Automate anything the third time you need to do it
● Learn your OS's scripting mechanism
● Linux / Unix shell scripting
○ Aliases
○ Functions
● Powershell
29. SSH Connections
● You will need to connect to other systems
● Secure shell (ssh)
○ ssh-agent / ssh-add
○ ~/.ssh/config
○ Keepalive
○ Username
○ Agent forwarding
● Putty does all of this too
30. Source Code Control
● Why aren't you using git?
● Why aren't you using Github?
○ Microsoft
● Understand how your source code control works
31. Switch to Git
● Git has been the de-facto industry standard for ten years
● More powerful
● More flexible
● Harder to use
● Different paradigm
● "Optimistic concurrency"
● Good merge tools
32. Git Advantages
● Distributed model
○ Off-line access
● Branches are easy and quick
● Rebasing
○ Interactive rebasing
● "Fetch" vs "Pull"
● Safety net
33. Git in the Cloud
● Don't run your own Git infrastructure
● Other people are better than you at doing that
● Social coding
● Github
● Bitbucket
35. Adjacent Technologies
● What other technologies do you use every day?
● Data storage
○ Databases
○ Data formats
○ XML
○ Caching
● Networking
○ HTTP
37. Data Storage
● How do you store your persistent data?
● Database
○ RDBMS
○ NoSQL
● Data files
○ JSON
○ YAML
○ XML
38. RDBMS
● Which database vendor do you use?
● Why did you choose MySQL?
● Would PostgreSQL be better?
● How does it scale?
● Replication vs Sharding
● How well do you know SQL?
39. RDBMS Features
● Which RDBMS features do you use?
● How vendor specific are they?
● Vendor-specific SQL extensions
● Referential integrity
● Stored procedures?
● Triggers?
40. RDBMS Usage
● How are your databases split?
● One database?
● One database per application?
● One database per service?
● Who owns the database?
● Who can change the schema?
41. Database Schemas
● How do you change database schemas?
● Can you easily tell which schema version is on a database?
● Do you use a database migration tool?
● What problems does that lead to?
42. NoSQL
● Which NoSQL database do you use?
● MongoDB, Redis, CouchDB, Memcached
● Do you understand the different types?
● Would you be better off with an RDBMS?
43. Data Files
● What formats are your data files?
● How are they processed?
● Are you using the best available tools to process them?
44. JSON
● Javascript Object Notation
● Popular data interchange format
● AJAX
● Decode to native data structures
● Encode from native data structures
45. JQ
● General purpose JSON utility
● Reformat JSON
● Extract data from JSON
● Powerful query language
49. HTTP
● Can you explain the HTTP request / response cycle?
● To what level of detail?
● What difference does HTTPS / SSL make?
50. HTTP Requests
● Can you name all of the HTTP request types?
● GET, POST, HEAD
● PUT, DELETE, PATCH
● OPTIONS, TRACE, CONNECT
● What are the differences?
● What are they used for?
● REST
51. Testing
● Do you write unit tests?
● Does your system have automated integration tests?
● How are your tests run?
● Automatically?
52. Unit Tests
● Never program without a safety net
● Does your code do what it is supposed to do?
● Will your code continue to do what it is supposed to do?
● Write unit tests
● Run those tests all the time
53. What is Unit Testing?
● Code that exercises an individual element (unit) of your code
● Provide known inputs
● Look for expected outputs
● “Bottom-up” testing
54. Test Driven Development
● Have you tried Test Driven Development?
● What did you like?
● What didn't you like?
● Will you try it again?
55. TDD Advantages
● Tests are a specification of your program
● If the tests pass, the program is finished
● Know when to finish
56. Behaviour Driven Development
● Let end users define tests in their language
● Simple domain-specific language
● Framework converts user tests to running code
● Cucumber
57. Test Automation
● What test automation frameworks do you know?
● What test automation frameworks do you use?
● Selenium
58. Test Coverage
● How good are your tests?
● How much of your code is used in your tests?
● Measure to improve
59. Deployment
● How is your system deployed?
● Where are the servers located?
● Do you care?
61. Deployment Environments
● How is code moved from environment to environment?
● How similar are those environments?
● How are they kept in step?
62. Database Environments
● How are databases handled in development and testing environments?
● Full database?
● Smaller data sets?
● Anonymised data?
64. Real Hardware
● Company owns or rents computers in a data centre
● Ops staff spend a lot of time in the data centre
● Commissioning new servers
● Decommissioning old servers
● No scalability
65. Cloud Servers
● Servers commissioned from a huge farm
● Commissioned / decommissioned from a dashboard
● Or with an API
● Never see the actual hardware
● Easily scalable
66. Virtual Machines
● Run one machine inside another
● Many virtual machines on one real server
● Easy to commission / decommission servers
● Easy scaling
○ Within limits of the hardware
67. Containers
● Docker
● Cut-down virtual machines
● Share a lot of the underlying OS
● Very quick to commission / decommission
● Layered architecture
● Store configuration in source code control
68. Cattle Not Pets
● Treat servers as cattle, not pets
● Make it easy to create new ones
● Do that a lot
69. Environment Configuration
● Keep your environments in step
● What software is installed?
● What versions of software is installed?
● Avoid "works on my machine"
● Puppet, Ansible, Chef
70. Jenkins
● Continuous integration
● Run tests on every commit
● Continuous deployment
● Make release available on every commit
● Quality gates
● Other, similar, products are available
71. Amazon Web Services
● Most popular cloud services providers
● Many services available
● Generic cloud servers (EC2)
● File storage (S3)
● Relational databases (RDS / Aurora)
● Caching (ElastiCache)
● Many, many more
76. Software Development Lifecycle
● Agile vs Waterfall
● Agile Manifesto
● Scrum vs Kanban vs Extreme Programming
● Know your tools
○ Jira
○ Code reviews
77. Agile Manifesto
We are uncovering better ways of developing software by doing it and helping
others do it. Through this work we have come to value:
● Individuals and interactions over processes and tools
● Working software over comprehensive documentation
● Customer collaboration over contract negotiation
● Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left
more.
78. Individuals and Interactions
● People are more important than processes
● Development teams know how to organise their work
● Business says what they need
● Development team works out how to achieve that
● Giving people more control and responsibility
79. Working Software
● Documentation is often out of date before it is finished
● Mismatch between business language and technical language
● Business often don't know what they want until they see the options
● Build prototypes and discuss alternatives
80. Customer Collaboration
● Don't just involve users when the project is specified
● Have user representatives as a part of the development team
● Instant response to developer questions
● More involvement leads to more business ownership of project
81. Responding to Change
● Requirements will change during the project lifetime
● Be flexible
● Plan for change
82. Programming Paradigms
● What paradigms does your system use?
● Procedural
● Object Oriented
● Functional
● Who made those choices?
● Why?
84. Object Oriented Programming
● Classes define both data (attributes) and behaviour (methods)
● Intelligent variables
● Encapsulation
● Subclassing
● Easy to maintain
● Easy to scale
85. Functional Programming
● Pure functions
○ Take inputs, return values
○ No global variables
● Immutable variables
● Prefer recursion to loops
● Easier to maintain
● Good for asynchronous programming
86. Design Patterns
● "Gang of Four" book
● "Monolithic" architecture
● Service Oriented Architecture
● Microservices
87. The Power of Names
● Design patterns weren't new or exciting
● Naming them was
● Catalogue of known techniques
● Easier to discuss
● Easier to share
89. The Business
● What does your company do?
● What does success look like?
● How do they measure success?
● How do you contribute to that success?
90. What Does Your Company Do?
● What service does your company provide?
● Why do customers choose your company?
● What is the USP?
91. Making Money
● What is your company's business plan?
● Where does the money come from?
● Are there multiple sources of income?
● How secure is that income?
● How much profit does the company make?
● How does that compare to your salary?
92. Competitive Marketplace
● Who are your biggest competitors?
● How are you ranked?
● Why do customers choose your company?
● Why do customers choose your competitors?
● What is your company doing to change the balance?
93. Mergers & Acquisitions
● Has your company bought any other companies?
● Might your company buy any other companies?
● What companies might it buy?
● Who owns your company?
● Might they sell it?
94. Stocks & Shares
● Is the company private or public?
● Can you buy shares?
● Is there an employee share scheme?
● What are the shares worth?
● Can you get share options?
96. Personal Development
● Where do you want to be in five (or two, or ten) years?
● How you you get there?
● Do you have a plan?
97. Career Structure
● What is the hierarchy like?
● Where are you currently?
● Where do you want to be?
● How do you get there?
● Annual reviews
98. Management vs Technical
● Do you want to manage people?
● Team leader
● Development manager
● Help others build a career
● Less time coding
● More politics
99. Management vs Technical
● Do you want to manage systems?
● Technical lead
● Technical architect
● Steer the technical direction of the project
● Less time coding
● More meetings
100. Job Titles
● Job titles in our industry mean very little
● Each company is different
● How senior is a senior developer?
● Flat structures
● Often used as an incentive
● Job spec (and package) is more important
101. Setting Targets
● What do you need to do to get to the next level?
● Specific targets
● "Take responsibility for this subsystem"
● "Lead a project that is estimated to take four weeks"
● Identify training requirements
● Don't forget "soft" training
102. Internal Marketing
● Does the CTO know who you are?
● Does the CEO know who you are?
● Reply to email chains
● Give presentations at company meetings
● Speak to people in the kitchen
● Socialise
103. External Marketing
● How well-know are you outside of your company?
● Write a blog
● Answer questions on forums
● Speak about your work
104. Blogging
● Blog about your work
○ Check first
○ Company tech blog
● Blog about your personal projects
● Use your blog posts to answer questions on forums
● Comment on well-known blogs
● Add your blog to aggregators
106. Public Speaking
● Give talks about your projects
● Public speaking isn't as hard as you might think
● Start with a lightning talk
107. Some Public Speaking Secrets
● Some people aren't good at public speaking
● Or, at least, they don't make an effort to improve
● Not hard to be good at it
● Very easy to be better than average
● Watch videos to improve
108. TED
● Excellent examples of talks
● Interesting subject matter
● Engaging speakers
● Well-designed slides
● Something to aim at
111. Conclusions
● Good developers are in short supply
● And that isn't going to change in our lifetimes
● Plenty of opportunity to make a difference
● Plenty of opportunity to do well
● Know your industry
● Know your tools
● Keep up to date